:root{--bg: #fff;--text: #242424;--muted: #6b6b6b;--faint: #b3b3b3;--line: #e6e6e6;--accent: #1a8917;--accent-ink: #fff;--bubble: #1f1f1f;--bubble-ink: #f2f2f2;--bubble-on: #7ee07a;--code-bg: #f2f2f2;--sans: "Inter Variable", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--title-font: "Source Serif 4 Variable", Georgia, serif;--body-font: "Source Serif 4 Variable", Georgia, serif;--head-font: "Inter Variable", system-ui, sans-serif;--body-size: 21px;--body-lh: 1.62;--title-weight: 700;--title-track: -.022em;--head-weight: 700;--mono: ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;--col: 680px}@media(prefers-color-scheme:dark){:root{--bg: #121212;--text: #e8e8e8;--muted: #a0a0a0;--faint: #5e5e5e;--line: #2a2a2a;--bubble: #f2f2f2;--bubble-ink: #1a1a1a;--bubble-on: #1a8917;--code-bg: #1e1e1e}}button{font:inherit;color:inherit;cursor:pointer}.muted{color:var(--muted)}.small{font-size:13px}[data-font=book]{--title-font: "Literata Variable", Georgia, serif;--body-font: "Literata Variable", Georgia, serif;--head-font: "Literata Variable", Georgia, serif;--body-size: 19.5px;--body-lh: 1.68;--title-weight: 650}[data-font=editorial]{--title-font: "Newsreader Variable", Georgia, serif;--body-font: "Newsreader Variable", Georgia, serif;--body-size: 22px;--body-lh: 1.55;--title-weight: 600;--title-track: -.028em}[data-font=elegant]{--title-font: "Fraunces Variable", Georgia, serif;--head-font: "Fraunces Variable", Georgia, serif;--title-weight: 600;--title-track: -.02em;--head-weight: 600}[data-font=modern]{--title-font: "Inter Variable", system-ui, sans-serif;--body-font: "Inter Variable", system-ui, sans-serif;--body-size: 19px;--body-lh: 1.65;--title-weight: 750;--title-track: -.03em}[data-font=oldbook]{--title-font: "Cormorant Garamond Variable", "EB Garamond Variable", Garamond, serif;--body-font: "EB Garamond Variable", Garamond, serif;--head-font: "EB Garamond Variable", Garamond, serif;--body-size: 22.5px;--body-lh: 1.55;--title-weight: 600;--title-track: -.01em;--head-weight: 600}[data-font=caslon]{--title-font: "Libre Caslon Display", "Libre Caslon Text", Georgia, serif;--body-font: "Libre Caslon Text", Georgia, serif;--head-font: "Libre Caslon Text", Georgia, serif;--body-size: 18.5px;--body-lh: 1.75;--title-weight: 400;--title-track: -.005em;--head-weight: 700}[data-font=crimson]{--title-font: "Crimson Pro Variable", Georgia, serif;--body-font: "Crimson Pro Variable", Georgia, serif;--head-font: "Crimson Pro Variable", Georgia, serif;--body-size: 22px;--body-lh: 1.55;--title-weight: 650;--title-track: -.015em;--head-weight: 650}[data-font=apple]{--title-font: -apple-system, BlinkMacSystemFont, "Inter Variable", sans-serif;--body-font: ui-serif, "New York", "Source Serif 4 Variable", Georgia, serif;--head-font: -apple-system, BlinkMacSystemFont, "Inter Variable", sans-serif;--body-size: 20px;--body-lh: 1.6;--title-weight: 700;--title-track: -.025em}@media(prefers-color-scheme:light){[data-font=oldbook],[data-font=caslon]{--bg: #fbf7ee;--text: #2a251e;--muted: #75695a;--line: #e8dfcd;--code-bg: #f1eadb}}[data-font=oldbook] .prose-body,[data-font=caslon] .prose-body{font-variant-numeric:oldstyle-nums proportional-nums;hyphens:auto;-webkit-hyphens:auto}[data-font=oldbook] .prose-body>p+p,[data-font=caslon] .prose-body>p+p{margin-top:0;text-indent:1.4em}[data-dropcap=on] .prose-body>p:first-child:not(.is-editor-empty):first-letter{float:left;font-family:var(--title-font);font-size:4.25em;line-height:.74;margin-top:.04em;padding:.07em .09em 0 0;font-weight:500}[data-font=oldbook] .prose-body h3,[data-font=caslon] .prose-body h3{font-variant-caps:all-small-caps;letter-spacing:.06em;font-size:1.05em}.prose-body{font-family:var(--body-font);font-size:var(--body-size);line-height:var(--body-lh);letter-spacing:-.003em;word-wrap:break-word;font-optical-sizing:auto;font-kerning:normal;font-variant-ligatures:common-ligatures;text-rendering:optimizeLegibility}.prose-body>*+*{margin-top:1.1em}.prose-body p{margin:0}.prose-body p+p{margin-top:1.05em}.prose-body h2{font-family:var(--head-font);font-weight:var(--head-weight);font-size:1.45em;line-height:1.22;letter-spacing:-.018em;margin:1.7em 0 0}.prose-body h3{font-family:var(--head-font);font-weight:var(--head-weight);font-size:1.12em;line-height:1.3;letter-spacing:-.01em;margin:1.5em 0 0}.prose-body h2+*,.prose-body h3+*{margin-top:.5em}.prose-body a{color:inherit;text-decoration:underline;text-underline-offset:3px}.prose-body blockquote{margin-left:0;padding-left:22px;border-left:3px solid var(--text);font-style:italic}.prose-body ul,.prose-body ol{padding-left:1.6em}.prose-body li+li{margin-top:.4em}.prose-body li p{margin:0}.prose-body code{font:15px/1.4 var(--mono);background:var(--code-bg);padding:2px 5px;border-radius:4px}.prose-body pre{background:var(--code-bg);border-radius:4px;padding:18px 20px;overflow-x:auto;font:15px/1.55 var(--mono)}.prose-body pre code{background:none;padding:0;font-size:inherit}.prose-body hr{border:0;text-align:center;margin:2.4em 0;overflow:visible;height:auto}.prose-body hr:before{content:"· · ·";letter-spacing:.9em;font-size:26px;color:var(--muted)}.fig{margin:2em 0}.fig-frame{position:relative;cursor:default}.fig img{display:block;width:100%;height:auto;background:var(--code-bg)}.fig-wide{margin-left:-120px;margin-right:-120px}.fig-full{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}@media(max-width:960px){.fig-wide{margin-left:-20px;margin-right:-20px}}.fig figcaption{font:14px/1.4 var(--sans);color:var(--muted);text-align:center;margin-top:10px;padding:0 20px;min-height:1.4em}.video-frame{position:relative;aspect-ratio:16 / 9;background:#000;overflow:hidden;border-radius:2px}.video-frame img{width:100%;height:100%;object-fit:cover;display:block;opacity:.92}.video-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.video-play{position:absolute;left:50%;top:50%;width:68px;height:48px;transform:translate(-50%,-50%);border:0;border-radius:14px;background:#141414c7;cursor:pointer;transition:background .15s,transform .15s}.video-play:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-38%,-50%);border-style:solid;border-width:10px 0 10px 17px;border-color:transparent transparent transparent #fff}.video-frame:hover .video-play{background:#e62117;transform:translate(-50%,-50%) scale(1.05)}.video-embed[data-provider=vimeo] .video-frame:hover .video-play{background:#1ab7ea}@media(max-width:600px){.prose-body{font-size:calc(var(--body-size) * .88)}}.prose-body table{width:100%;border-collapse:collapse;margin:1.6em 0;font:15px/1.45 var(--sans);display:block;overflow-x:auto}.prose-body th,.prose-body td{border-bottom:1px solid var(--line);padding:9px 12px;text-align:left;vertical-align:top}.prose-body th{font-weight:600;background:color-mix(in srgb,var(--text) 5%,transparent)}.prose-body caption{caption-side:bottom;color:var(--muted);font-size:13px;padding-top:8px}@media(min-width:1700px){html:not([data-editor]){zoom:1.12}}@media(min-width:1950px){html:not([data-editor]){zoom:1.25}}@media(min-width:2300px){html:not([data-editor]){zoom:1.4}}@media(min-width:2800px){html:not([data-editor]){zoom:1.6}}@view-transition{navigation:auto}@keyframes pp-in{0%{opacity:0;transform:translateY(8px)}}@keyframes pp-fade{0%{opacity:0}}@keyframes pp-out{to{opacity:0}}::view-transition-old(root){animation:pp-out .13s ease-in both}::view-transition-new(root){animation:pp-in .24s 60ms cubic-bezier(.2,.7,.3,1) both}.s-head{view-transition-name:pp-site-header}.pp-homebar{view-transition-name:pp-home-bar}::view-transition-group(pp-site-header),::view-transition-group(pp-home-bar){animation-duration:.2s}html.pp-enter body{animation:pp-fade .26s ease-out both}.pp-appear{animation:pp-in .28s cubic-bezier(.2,.7,.3,1) both}img.pp-img{opacity:0;transition:opacity .35s ease-out}img.pp-img.pp-loaded{opacity:1}a,button{transition:color .15s,background-color .15s,border-color .15s,opacity .15s}@media(prefers-reduced-motion:reduce){@view-transition{navigation:none}html.pp-enter body,.pp-appear{animation:none}img.pp-img{opacity:1;transition:none}a,button{transition:none}}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--text)}body{font-family:var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit}.dot{margin:0 .45em;opacity:.6}.b-main,.b-post{max-width:var(--col);margin:0 auto;padding:0 20px}.b-btn{display:inline-block;background:var(--text);color:var(--bg);text-decoration:none;border:0;cursor:pointer;font:500 14px var(--sans);padding:8px 16px;border-radius:99px;white-space:nowrap}.b-btn:hover{opacity:.85}.b-avatar{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--text) 9%,var(--bg));color:var(--text);font:600 22px var(--title-font);letter-spacing:.02em;flex:none}.b-avatar.small{width:40px;height:40px;font-size:15px}.b-head{text-align:center;padding:64px 20px 28px;max-width:var(--col);margin:0 auto}.b-head .b-avatar{margin:0 auto 18px}.b-name{margin:0;font-family:var(--title-font);font-weight:var(--title-weight);font-size:44px;line-height:1.1;letter-spacing:var(--title-track)}.b-name a{text-decoration:none}.b-tagline{margin:10px 0 0;color:var(--muted);font:italic 19px/1.45 var(--body-font)}.b-nav{margin-top:26px;display:flex;justify-content:center;align-items:center;gap:22px;font-size:14.5px}.b-nav a:not(.b-btn){text-decoration:none;color:var(--muted)}.b-nav a:not(.b-btn):hover,.b-nav a[aria-current]{color:var(--text)}.b-nav a[aria-current]{text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:1px}.b-bar{max-width:1040px;margin:0 auto;padding:16px 20px;display:flex;justify-content:space-between;align-items:center}.b-bar-name{font:600 21px var(--title-font);text-decoration:none}.b-meta{color:var(--muted);font-size:13px;letter-spacing:.01em}.b-draft,.b-draft-note{color:#b06b00;font-weight:600}.b-featured{padding:36px 0 40px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.b-cover{display:block;margin-bottom:22px}.b-cover img{width:100%;aspect-ratio:16 / 9;object-fit:cover;display:block;background:var(--code-bg)}.b-featured h2{margin:8px 0 0;font-family:var(--title-font);font-weight:var(--title-weight);font-size:36px;line-height:1.15;letter-spacing:var(--title-track)}.b-featured h2 a,.b-item h3 a{text-decoration:none}.b-featured h2 a:hover,.b-item h3 a:hover{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}.b-featured-sub{margin:12px 0 0;font:20px/1.5 var(--body-font);color:var(--muted)}.b-read{display:inline-block;margin-top:16px;font-weight:600;font-size:14.5px;text-decoration:none;color:var(--accent)}.b-item{display:flex;gap:24px;padding:30px 0;border-bottom:1px solid var(--line)}.b-item-text{flex:1;min-width:0}.b-item h3{margin:6px 0 0;font-family:var(--title-font);font-weight:var(--title-weight);font-size:25px;line-height:1.2;letter-spacing:var(--title-track)}.b-item p{margin:8px 0 0;font:17px/1.5 var(--body-font);color:var(--muted)}.b-thumb{flex:none;width:140px}.b-thumb img{width:140px;height:100px;object-fit:cover;display:block;background:var(--code-bg)}.b-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.b-tags:empty{display:none}.b-tag{font-size:12.5px;text-decoration:none;padding:3px 10px;border-radius:99px;background:var(--code-bg);color:var(--muted)}.b-tag:hover{color:var(--text)}.b-sub{margin:36px 0;padding:30px 28px;background:var(--code-bg);border-radius:10px;text-align:center}.b-sub h2{margin:0;font:600 22px var(--title-font)}.b-sub p{margin:6px 0 0;color:var(--muted);font-size:14.5px}.b-sub-form{display:flex;gap:8px;max-width:420px;margin:18px auto 0}.b-sub-form input{flex:1;min-width:0;padding:10px 14px;border-radius:99px;border:1px solid var(--line);background:var(--bg);color:var(--text);font:15px var(--sans);outline:0}.b-sub-form input:focus{border-color:var(--muted)}.b-sub-done{color:var(--accent)!important;font-weight:600;margin-top:14px!important}.b-sub.compact{margin-top:28px}.b-about{padding:20px 0 10px}.b-about h2,.b-more h2{font:600 13px var(--sans);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 16px}.b-about-row{display:flex;gap:18px;font:18px/1.6 var(--body-font)}.b-about-row p{margin:0 0 .7em}.b-post-head{padding:48px 0 8px}.b-draft-note{font-size:13px;margin:0 0 14px}.b-post-title{margin:0;font-family:var(--title-font);font-weight:var(--title-weight);font-size:46px;line-height:1.12;letter-spacing:var(--title-track);font-optical-sizing:auto}[data-font=oldbook] .b-post-title{font-size:52px;line-height:1.06}.b-post-sub{margin:12px 0 0;font:23px/1.4 var(--body-font);color:var(--muted)}[data-font=oldbook] .b-post-sub,[data-font=caslon] .b-post-sub{font-style:italic}.b-byline{display:flex;align-items:center;gap:12px;margin-top:26px;padding-bottom:26px;border-bottom:1px solid var(--line)}.b-byline-name{font-weight:600;font-size:15px}.b-body{margin-top:34px}.b-post-foot{margin-top:44px;padding-top:22px;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px;align-items:center}.b-post-foot .b-tags{margin:0}.b-share{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;color:var(--muted)}.b-share-btn{border:1px solid var(--line);background:none;color:var(--text);border-radius:99px;padding:5px 12px;font:13px var(--sans);text-decoration:none;cursor:pointer}.b-share-btn:hover{border-color:var(--muted)}.b-author{display:flex;gap:18px;margin-top:48px;align-items:flex-start}.b-author-label{margin:0;font-size:12.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.b-author h2{margin:4px 0 6px;font:600 22px var(--title-font)}.b-author p:last-child{margin:0;font:16.5px/1.55 var(--body-font);color:var(--muted)}.b-more{margin-top:56px}.b-more-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.b-more-grid.three{grid-template-columns:repeat(3,1fr)}.b-card{display:flex;flex-direction:column;gap:6px;padding:18px;border:1px solid var(--line);border-radius:10px;text-decoration:none;transition:border-color .15s,transform .15s}.b-card:hover{border-color:var(--muted);transform:translateY(-1px)}.b-card strong{font:600 18px/1.3 var(--title-font)}.b-card-sub{color:var(--muted);font-size:13.5px;line-height:1.45}.b-network{padding-top:30px;border-top:1px solid var(--line)}.b-foot{max-width:var(--col);margin:64px auto 0;padding:28px 20px 48px;border-top:1px solid var(--line);color:var(--muted);font-size:13px;text-align:center}.b-foot a{text-decoration:none}.b-foot a:hover{color:var(--text)}.b-made{font-weight:500}@media(max-width:640px){.b-head{padding-top:40px}.b-name{font-size:34px}.b-featured h2{font-size:28px}.b-item{gap:14px}.b-item h3{font-size:21px}.b-thumb,.b-thumb img{width:92px;height:72px}.b-post-title,[data-font=oldbook] .b-post-title{font-size:34px}.b-post-sub{font-size:19px}.b-more-grid,.b-more-grid.three{grid-template-columns:1fr}.b-sub-form{flex-direction:column}.b-nav{gap:16px}}body.b-body-root{padding-bottom:84px}.ob{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom,0px));transform:translate(-50%);z-index:50;display:flex;align-items:center;gap:14px;padding:7px 8px 7px 16px;border-radius:99px;background:#1d1d1f;color:#f2f2f2;box-shadow:0 10px 30px #00000040;font:13px var(--sans);max-width:calc(100% - 24px);white-space:nowrap}.ob-hint{color:#9a9a9e}.ob-seg{display:flex;background:#2e2e31;border-radius:99px;padding:3px}.ob-seg button{border:0;background:none;color:#c9c9cc;font:500 13px var(--sans);padding:6px 13px;border-radius:99px;cursor:pointer}.ob-seg button:hover{color:#fff}.ob-seg button[aria-checked=true]{background:#f2f2f2;color:#1d1d1f}.ob-link{color:#c9c9cc;text-decoration:none;padding:0 8px}.ob-link:hover{color:#fff}@media(max-width:640px){.ob-hint,.ob-link{display:none}.ob{gap:8px;padding-left:12px}.ob-seg button{padding:6px 10px}}:root{--brand: #1a7a17;--brand-ink: #fff}.site-strip{max-width:1040px;margin:0 auto;padding:12px 20px 0;display:flex}.site-strip:empty{display:none}.site-back{display:inline-flex;align-items:center;gap:4px;font:500 13.5px var(--sans);color:var(--muted);text-decoration:none;white-space:nowrap}.site-back:hover{color:var(--text)}.site-back-hint{border:1px dashed var(--line);border-radius:99px;padding:4px 10px;font-size:12.5px}.site-back-hint:hover{border-color:var(--muted)}.site-cta{display:inline-block;background:var(--brand);color:var(--brand-ink);text-decoration:none;border-radius:8px;padding:9px 16px;font:600 14px var(--sans);white-space:nowrap;transition:filter .15s}.site-cta:hover{filter:brightness(1.08)}.b-bar-right,.m-mast-left{display:flex;align-items:center;gap:16px}.t-cover{aspect-ratio:16 / 10;overflow:hidden;background:var(--code-bg);max-width:100%;border-radius:inherit}.t-cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .4s ease}a:hover>.t-cover img{transform:scale(1.03)}.t-tcover{display:flex;align-items:flex-end;padding:14px 18px;background:color-mix(in srgb,hsl(var(--h) 45% 50%) 20%,var(--bg));color:color-mix(in srgb,hsl(var(--h) 55% 30%) 85%,var(--text));font:700 84px/.8 var(--title-font)}@media(prefers-color-scheme:dark){.t-tcover{background:color-mix(in srgb,hsl(var(--h) 40% 45%) 26%,var(--bg));color:color-mix(in srgb,hsl(var(--h) 60% 80%) 80%,var(--text))}}@media(max-width:640px){.b-bar-right .b-btn{display:none}.b-bar{gap:12px}.b-bar-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.m-date{display:none}.w-bar nav a[href="blog.html"]{display:none}.w-bar{gap:12px}.w-bar nav{gap:14px;flex-wrap:wrap;justify-content:flex-end}}.ob{max-width:calc(100% - 24px)}.ob-seg{overflow-x:auto;scrollbar-width:none;min-width:0}.ob-seg button{flex:none}
