:root{--paper:#f6f7f9;--surface:#ffffff;--ink:#151922;--slate:#566074;--rule:#dce0e8;--accent:#2f46c8;--chip:#e9ecf4;--code-bg:#10131c;--code-ink:#d5dae6;--code-rule:#232838;--code-muted:#7c879e;--measure:42rem;--wide:68rem;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--paper:#0e1117;--surface:#151a23;--ink:#e7eaf1;--slate:#98a1b3;--rule:#262c38;--accent:#8fa2ff;--chip:#1b212c;--code-bg:#0a0d14;--code-rule:#1f2430}}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;min-height:100vh;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);font-family:var(--font-sans),system-ui,-apple-system,"Segoe UI",sans-serif;font-size:1rem;line-height:1.6}main{flex:1 1}a{color:inherit}:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:2px}h1,h2,h3{font-family:var(--font-serif),Georgia,serif;font-weight:560;letter-spacing:-.015em;line-height:1.15;margin:0}.container{width:100%;max-width:var(--wide);margin:0 auto;padding:0 1.25rem}.site-header{border-bottom:1px solid var(--rule)}.footer-inner,.header-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.header-inner{padding-top:1.1rem;padding-bottom:1.1rem}.wordmark{font-family:var(--font-serif),Georgia,serif;font-size:1.5rem;font-weight:620;letter-spacing:-.02em;text-decoration:none}.nav{display:flex;gap:1.5rem;font-size:.95rem}.nav a{color:var(--slate);text-decoration:none}.nav a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:4px}.site-footer{margin-top:5rem;border-top:1px solid var(--rule);color:var(--slate);font-size:.9rem}.footer-inner{padding-top:1.75rem;padding-bottom:2rem}.footer-inner p{margin:0}.hero{padding:4.5rem 0 3.5rem}.hero-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);grid-gap:3.5rem;gap:3.5rem;align-items:center}.hero h1{font-size:clamp(2.3rem,5.2vw,3.75rem);line-height:1.05;letter-spacing:-.025em;font-weight:520}.lede{margin:1.25rem 0 0;max-width:34rem;color:var(--slate);font-size:1.15rem;line-height:1.6}.hero-figure{margin:0;min-width:0}.hero-figure figcaption{margin-top:.75rem;color:var(--slate);font-size:.9rem}.section-title{font-size:1.6rem;padding-bottom:1.1rem}.list-section{max-width:56rem;margin-left:max(0px,calc((100% - var(--wide)) / 2))}.post-list{list-style:none;margin:0;padding:0}.post-item{display:grid;grid-template-columns:9.5rem minmax(0,1fr);grid-gap:1.5rem;gap:1.5rem;padding:2rem 0;border-top:1px solid var(--rule)}.post-side{display:flex;flex-direction:column;gap:.15rem;color:var(--slate);font-size:.9rem}.post-item h3{font-size:1.75rem;line-height:1.2}.post-item h3 a{text-decoration:none}.post-item h3 a:hover{color:var(--accent);text-decoration:underline;text-underline-offset:5px}.post-item p{margin:.6rem 0 1rem;color:var(--slate);max-width:38rem}.tags{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem;margin:0;padding:0}.tags li{background:var(--chip);color:var(--slate);border-radius:4px;padding:.12rem .55rem;font-size:.8rem}.article{max-width:calc(var(--measure) + 2.5rem);margin:0 auto;padding:3.5rem 1.25rem 0}.article-head h1{margin-top:1.25rem;font-size:clamp(2rem,4.6vw,3rem);line-height:1.1}.article-head .lede{font-family:var(--font-serif),Georgia,serif;font-size:1.3rem;line-height:1.5}.meta{display:flex;flex-wrap:wrap;gap:.2rem 1.5rem;margin-top:1.5rem;color:var(--slate);font-size:.9rem}.cover{margin:2rem 0 2.5rem}.cover img{display:block;width:100%;height:auto;border-radius:10px;border:1px solid var(--rule)}.back{margin-top:3.5rem;padding-top:1.5rem;border-top:1px solid var(--rule);font-size:.95rem}.page{max-width:calc(var(--measure) + 2.5rem);padding-top:3.5rem}.page h1{font-size:clamp(2rem,4.6vw,2.75rem);margin-bottom:1.5rem}.prose{max-width:var(--measure);font-family:var(--font-serif),Georgia,serif;font-size:1.1875rem;line-height:1.75}.prose>:first-child{margin-top:0}.prose ol,.prose p,.prose ul{margin:1.1rem 0}.prose ol,.prose ul{padding-left:1.4rem}.prose li{margin:.35rem 0}.prose h2{font-size:1.85rem;margin:3.25rem 0 .9rem}.prose h3{font-size:1.4rem;margin:2.25rem 0 .6rem}.prose a{color:var(--accent);text-underline-offset:3px}.prose strong{font-weight:640}.prose blockquote{margin:1.75rem 0;padding:.1rem 0 .1rem 1.25rem;border-left:3px solid var(--accent);color:var(--slate)}.prose hr{border:0;border-top:1px solid var(--rule);margin:3rem 0}.prose img{max-width:100%;height:auto}.prose table{width:100%;border-collapse:collapse;margin:1.75rem 0;font-family:var(--font-sans),system-ui,sans-serif;font-size:.95rem}.prose td,.prose th{text-align:left;padding:.6rem .75rem;border-bottom:1px solid var(--rule)}.prose :not(pre)>code{font-family:var(--font-mono),ui-monospace,monospace;font-size:.8em;background:var(--chip);border-radius:4px;padding:.12em .4em}.demo-frame{display:block;width:100%;height:26rem;margin:1.5rem 0 .5rem;border:1px solid var(--rule);border-radius:10px;background:#ffffff}.demo-note{margin:0 0 1.75rem;color:var(--slate);font-family:var(--font-sans),system-ui,sans-serif;font-size:.88rem;line-height:1.5}pre{position:relative;margin:1.75rem 0;overflow:hidden;background:var(--code-bg);border:1px solid var(--code-rule);border-radius:10px}pre code{display:block;overflow-x:auto;padding:1.1rem 1.25rem;font-family:var(--font-mono),ui-monospace,"SFMono-Regular",Menlo,monospace;font-size:.875rem;line-height:1.7;color:var(--code-ink);background:none;-moz-tab-size:2;tab-size:2}pre[data-lang] code{padding-top:2.75rem}pre[data-lang]:before{content:attr(data-lang);position:absolute;top:.8rem;left:1.25rem;font-family:var(--font-mono),ui-monospace,monospace;font-size:.75rem;color:var(--code-muted)}.copy-btn{position:absolute;top:.55rem;right:.65rem;padding:.25rem .65rem;font-family:var(--font-sans),system-ui,sans-serif;font-size:.78rem;color:#aeb6c8;background:transparent;border:1px solid #2b3245;border-radius:6px;cursor:pointer}.copy-btn:hover{color:#ffffff;border-color:#4a5470}.hero-code code{padding:1.5rem 1.6rem;font-size:.95rem}.hljs-comment,.hljs-quote{color:var(--code-muted);font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-selector-tag{color:#c3a6ff}.hljs-addition,.hljs-regexp,.hljs-string{color:#9ad7a5}.hljs-bullet,.hljs-number,.hljs-symbol{color:#f2b880}.hljs-section,.hljs-title,.hljs-title.function_{color:#7fb4ff}.hljs-attr,.hljs-attribute,.hljs-built_in,.hljs-class .hljs-title,.hljs-property,.hljs-selector-class,.hljs-selector-id,.hljs-title.class_,.hljs-type{color:#f2c97d}.hljs-deletion,.hljs-name,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ff8f9e}.hljs-tag .hljs-attr{color:#f2c97d}.hljs-tag .hljs-string{color:#9ad7a5}.hljs-operator,.hljs-params,.hljs-punctuation,.hljs-subst{color:var(--code-ink)}.hljs-link,.hljs-meta{color:#6fd3d9}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media (max-width:52rem){.hero{padding:3rem 0 2.5rem}.hero-grid{gap:2rem}.hero-grid,.post-item{grid-template-columns:minmax(0,1fr)}.post-item{gap:.75rem}.post-side{flex-direction:row;gap:1rem}.article{padding-top:2.25rem}.prose{font-size:1.125rem}.demo-frame{height:30rem}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}@font-face{font-family:Newsreader;font-style:italic;font-weight:200 800;font-display:swap;src:url(/_next/static/media/eb251072d3b5478c-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Newsreader;font-style:italic;font-weight:200 800;font-display:swap;src:url(/_next/static/media/e92f802bb57ccffe-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Newsreader;font-style:italic;font-weight:200 800;font-display:swap;src:url(/_next/static/media/4b9bb515ce6d026f-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Newsreader;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/7088c2b12ccac062-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Newsreader;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/665e920483964785-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Newsreader;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/5611c55482296524-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Newsreader Fallback;src:local("Times New Roman");ascent-override:69.68%;descent-override:25.12%;line-gap-override:0.00%;size-adjust:105.48%}.__className_f2c530{font-family:Newsreader,Newsreader Fallback}.__variable_f2c530{--font-serif:"Newsreader","Newsreader Fallback"}@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(/_next/static/media/adb45196eddef626-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(/_next/static/media/26d0ba92e140f0dc-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Instrument Sans Fallback;src:local("Arial");ascent-override:94.42%;descent-override:24.33%;line-gap-override:0.00%;size-adjust:102.74%}.__className_3f4a4b{font-family:Instrument Sans,Instrument Sans Fallback;font-style:normal}.__variable_3f4a4b{--font-sans:"Instrument Sans","Instrument Sans Fallback"}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/886030b0b59bc5a7-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/0aa834ed78bf6d07-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/67957d42bae0796d-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/f911b923c6adde36-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/939c4f875ee75fbb-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/bb3ef058b751a6ad-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:JetBrains Mono Fallback;src:local("Arial");ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.00%;size-adjust:134.59%}.__className_4dc837{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.__variable_4dc837{--font-mono:"JetBrains Mono","JetBrains Mono Fallback"}