:root{--bg: #ffffff;--fg: #111111;--fg-soft: #4b5563;--fg-mute: #6b7280;--rule: #e5e7eb;--rule-soft: #f1f3f5;--hover: #f8fafc;--accent: #111111;--code-bg: #f7f7f8;--font-sans: "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--measure: 680px;--content-w: 720px;--wide-content-w: 1120px;--gutter: 1.5rem;color-scheme:light}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}img,svg{max-width:100%;display:block}a{color:inherit;text-decoration:none}::selection{background:#111;color:#fff}.shell{max-width:var(--content-w);margin:0 auto;padding:0 var(--gutter)}.shell-wide{max-width:var(--wide-content-w)}.nav{display:flex;justify-content:space-between;align-items:center;padding:2.25rem 0 2rem}.nav .wordmark{font-weight:600;font-size:.95rem;letter-spacing:-.01em;color:var(--fg)}.nav ul{list-style:none;margin:0;padding:0;display:flex;gap:1.6rem;font-size:.9rem}.nav a{color:var(--fg-mute);transition:color .15s}.nav a:hover,.nav a.active{color:var(--fg)}.intro{padding:1.5rem 0 3rem;max-width:560px}.intro h1{margin:0 0 .75rem;font-size:1.5rem;font-weight:600;letter-spacing:-.015em;line-height:1.25}.intro p{margin:0;color:var(--fg-soft);font-size:1rem;line-height:1.6}.start-here{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,.9fr);gap:1.5rem;padding:1.25rem;margin:0 0 2.75rem;border:1px solid var(--rule);border-radius:10px;background:var(--hover)}.start-here h2{margin:0 0 .35rem;font-size:.9rem;font-weight:600;letter-spacing:-.005em}.start-here p{margin:0;color:var(--fg-soft);font-size:.92rem;line-height:1.55}.start-here ul{margin:0;padding-left:1.1rem;color:var(--fg-mute);font-size:.9rem}.start-here li{margin:.2rem 0}.start-here a{color:var(--fg);text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px}.start-here a:hover{text-decoration-color:var(--fg)}.section-head{display:flex;justify-content:space-between;align-items:baseline;padding:0 0 1rem;margin-top:1rem}.section-head h2{margin:0;font-size:.8rem;font-weight:500;color:var(--fg-mute);text-transform:uppercase;letter-spacing:.08em}.section-head .count{font-size:.8rem;color:var(--fg-mute);font-variant-numeric:tabular-nums}.posts{list-style:none;margin:0;padding:0}.post-row{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:1.5rem;padding:1rem 0;border-top:1px solid var(--rule);transition:opacity .15s}.post-row:last-child{border-bottom:1px solid var(--rule)}.post-row .body h3{margin:0 0 .25rem;font-size:1rem;font-weight:500;letter-spacing:-.005em;line-height:1.4}.post-row .body h3 a{transition:color .15s}.post-row .body h3 a:hover{color:var(--fg-mute)}.post-row .body p{margin:0;color:var(--fg-mute);font-size:.92rem;line-height:1.5}.post-row .date{font-size:.85rem;color:var(--fg-mute);font-variant-numeric:tabular-nums;white-space:nowrap}.post-row .tags,.post-row .num,.post-row .arrow{display:none}@media(max-width:600px){.post-row{grid-template-columns:1fr;gap:.35rem}.post-row .date{order:-1;font-size:.78rem}.start-here{grid-template-columns:1fr}}.colophon{margin-top:5rem;padding:2rem 0 3rem;border-top:1px solid var(--rule);display:flex;justify-content:space-between;flex-wrap:wrap;gap:1rem;font-size:.85rem;color:var(--fg-mute)}.colophon h4{display:none}.colophon a:hover,.colophon .marker{color:var(--fg)}.article-shell{display:grid;grid-template-columns:minmax(0,var(--measure)) 240px;justify-content:center;align-items:start;gap:4rem}.article{padding:1rem 0 2rem;max-width:var(--measure);width:100%}.article .crumb{font-size:.85rem;color:var(--fg-mute);margin-bottom:2.5rem}.article .crumb a:hover{color:var(--fg)}.article .crumb .sep,.article .crumb span:not(:first-child):not(.sep){display:none}.article header.post-head{margin-bottom:1.5rem}.article header.post-head .stamp{display:none}.article header.post-head h1{margin:0 0 1rem;font-size:1.85rem;font-weight:600;letter-spacing:-.02em;line-height:1.2}.article header.post-head .desc{margin:0 0 1.25rem;color:var(--fg-soft);font-size:1.05rem;line-height:1.55}.article header.post-head .meta{display:flex;flex-wrap:wrap;gap:.6rem;font-size:.85rem;color:var(--fg-mute);font-variant-numeric:tabular-nums}.article header.post-head .meta .dot{color:var(--rule)}.article-summary,.toc{margin:1.5rem 0;padding:1rem 1.1rem;border:1px solid var(--rule);border-radius:8px;background:var(--hover)}.article-summary strong,.toc strong,.side-toc strong{display:block;margin-bottom:.35rem;font-size:.82rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-mute)}.article-summary p{margin:0;color:var(--fg-soft);font-size:.95rem;line-height:1.55}.toc ol{margin:0;padding-left:1.25rem;columns:2;column-gap:2rem}.toc li{margin:.2rem 0;break-inside:avoid;color:var(--fg-mute);font-size:.9rem}.toc a:hover,.toc a.active{color:var(--fg)}.toc a.active{font-weight:500}.side-toc{position:sticky;top:2rem;max-height:calc(100vh - 4rem);overflow:auto;padding-top:7.8rem;font-size:.82rem;color:var(--fg-mute)}.side-toc nav{border-left:1px solid var(--rule);padding-left:1rem}.side-toc ol{list-style:none;margin:0;padding:0}.side-toc li+li{margin-top:.45rem}.side-toc a{display:block;line-height:1.35;transition:color .15s,transform .15s}.side-toc a:hover,.side-toc a.active{color:var(--fg);transform:translate(2px)}.side-toc a.active{position:relative;font-weight:500}.side-toc a.active:before{content:"";position:absolute;left:-1.05rem;top:.15rem;bottom:.15rem;width:2px;border-radius:999px;background:var(--fg)}.prose{font-size:1rem;line-height:1.7;color:var(--fg)}.prose>*+*{margin-top:1.1rem}.prose p{margin:0 0 1.1rem}.prose h1{display:none}.prose h2{font-size:1.2rem;font-weight:600;letter-spacing:-.01em;margin-top:2.5rem;margin-bottom:.6rem;scroll-margin-top:1.5rem}.prose h3{font-size:1.05rem;font-weight:600;margin-top:2rem;margin-bottom:.4rem;scroll-margin-top:1.5rem}.prose a{color:var(--fg);text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px;transition:text-decoration-color .15s}.prose a:hover{text-decoration-color:var(--fg)}.prose strong{font-weight:600}.prose em{font-style:italic}.prose blockquote{border-left:2px solid var(--rule);padding:.1rem 0 .1rem 1.1rem;margin:1.5rem 0;color:var(--fg-soft)}.prose blockquote p{margin:.4rem 0}.prose ul,.prose ol{padding-left:1.4rem;margin:1rem 0}.prose li{margin:.3rem 0}.prose li::marker{color:var(--fg-mute)}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.5rem 0}.prose img{width:100%;border-radius:6px;margin:1.5rem 0 .5rem;border:1px solid var(--rule)}.prose figure{margin:1.5rem 0}.prose figcaption{font-size:.82rem;color:var(--fg-mute);text-align:center;margin-top:.5rem}.prose :not(pre)>code{font-family:var(--font-mono);font-size:.86em;background:var(--code-bg);border:1px solid var(--rule);padding:.08em .36em;border-radius:4px}.prose pre{font-family:var(--font-mono);font-size:.85rem;line-height:1.65;padding:1rem 1.1rem;margin:1.5rem 0;background:var(--code-bg)!important;border:1px solid var(--rule);border-radius:8px;overflow-x:auto}.prose pre code{font-family:inherit;background:none;padding:0;color:inherit;border:0}.prose pre code .line{display:block}.prose .expressive-code{margin:1.5rem 0}.prose .expressive-code pre{margin:0;padding:0;border:0;background:transparent!important}.prose .pull{font-size:1.15rem;line-height:1.5;color:var(--fg);margin:1.8rem 0;padding:1rem 1.1rem;border-left:2px solid var(--fg);background:var(--rule-soft);border-radius:0 4px 4px 0}.article footer.post-foot{margin-top:3.5rem;padding-top:1.5rem;border-top:1px solid var(--rule);font-size:.85rem;color:var(--fg-mute)}.article footer.post-foot a:hover{color:var(--fg)}.read-next{margin-bottom:2rem}.read-next h2{margin:0 0 .75rem;font-size:.82rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-mute)}.read-next-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem}.read-next-grid a,.post-pager a{display:block;padding:1rem;border:1px solid var(--rule);border-radius:8px;background:var(--bg);transition:border-color .15s,background .15s}.read-next-grid a:hover,.post-pager a:hover{border-color:var(--fg-mute);background:var(--hover)}.read-next-grid span,.post-pager span{display:block;color:var(--fg);font-weight:500;line-height:1.4}.read-next-grid small,.post-pager small{display:block;margin-top:.35rem;color:var(--fg-mute);line-height:1.45}.post-pager{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem;margin-bottom:1.5rem}.foot-meta{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem;padding-top:1.25rem;border-top:1px solid var(--rule)}.tag-list{display:flex;flex-wrap:wrap;gap:.45rem .7rem;justify-content:flex-end}.tag-list a{color:var(--fg-mute)}.tag-list a:hover{color:var(--fg)}@media(min-width:1000px){.toc-inline{display:none}}@media(max-width:999px){.shell-wide{max-width:var(--content-w)}.article-shell{display:block}.side-toc{display:none}}@media(max-width:600px){.toc ol,.read-next-grid,.post-pager{columns:1;grid-template-columns:1fr}}.page{max-width:var(--measure);margin:0 auto;padding:1rem 0 2rem}.page h1{font-weight:600;font-size:1.85rem;line-height:1.2;letter-spacing:-.02em;margin:0 0 1.25rem}.page h1 em{font-style:normal}
