@font-face{font-family:geist;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/Geist-Regular.woff2)format('woff2')}@font-face{font-family:geist;font-weight:500;font-style:normal;font-display:swap;src:url(/fonts/Geist-Medium.woff2)format('woff2')}@font-face{font-family:geist;font-weight:600;font-style:normal;font-display:swap;src:url(/fonts/Geist-SemiBold.woff2)format('woff2')}@font-face{font-family:geist;font-weight:700;font-style:normal;font-display:swap;src:url(/fonts/Geist-Bold.woff2)format('woff2')}@font-face{font-family:geist mono;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/GeistMono-Regular.woff2)format('woff2')}@font-face{font-family:geist mono;font-weight:500;font-style:normal;font-display:swap;src:url(/fonts/GeistMono-Medium.woff2)format('woff2')}:root{--bg:#F7F7F4;--paper:#FFFFFF;--ink:#111214;--body:#2A2C30;--dim:#6B6C68;--rule:#DCDCD6;--soft:#ECECE6;--blue:#2348FF;--acid:#C2FE0B;--codebg:#111214;--codeline:#26272A;--mark:#2348FF}@media(prefers-color-scheme:dark){:root{--bg:#0E0F11;--paper:#16171A;--ink:#EDEDE8;--body:#C8C9C4;--dim:#8C8D88;--rule:#2A2B2F;--soft:#1E1F23;--blue:#8A9DFF;--codebg:#050506;--codeline:#2A2B2F;--mark:#C2FE0B}}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;min-height:100vh;background:var(--bg);color:var(--ink);font-family:geist,system-ui,sans-serif;-webkit-font-smoothing:antialiased;counter-reset:sec}::selection{background:var(--acid);color:#111214}a{color:inherit;text-decoration:none}.wrap{max-width:1160px;margin:0 auto;padding:0 40px}.site{border-bottom:1px solid var(--ink)}.bar{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px;flex-wrap:wrap}.mark{display:flex;padding:8px 0}.mark svg{width:22px;height:22px;display:block;fill:var(--ink)}.mark .hi{fill:var(--mark)}.primary{display:flex;gap:28px;font-size:13px;font-family:geist mono,monospace}.primary a{color:var(--dim);padding:8px 0}.primary .on{color:var(--ink)}.site-foot{margin-top:88px;border-top:1px solid var(--ink);font-size:12px;color:var(--dim);font-family:geist mono,monospace}.site-foot span{display:flex;gap:20px}.intro{padding:36px 0 0;display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 24px}.intro h1{font-size:48px;line-height:1;letter-spacing:-.045em;font-weight:600;margin:0}.intro p{font-size:18px;color:var(--dim);margin:0;letter-spacing:-.01em}.feature{margin-top:32px;border-top:1px solid var(--ink)}.feature-meta{display:flex;gap:20px;padding:10px 0;border-bottom:1px solid var(--rule);font-family:geist mono,monospace;font-size:12px;color:var(--dim)}.feature-meta .kicker{color:var(--blue)}.feature-body{display:flex;flex-wrap:wrap;gap:32px 48px;padding:26px 0 30px;border-bottom:1px solid var(--rule);align-items:center}.feature-text{flex:999 1 480px;min-width:0}.feature h2{font-size:44px;line-height:1.02;letter-spacing:-.04em;font-weight:600;margin:0}.feature p{font-size:18px;line-height:1.55;color:var(--body);margin:14px 0 0;max-width:600px}.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}.chip{font-size:12px;border:1px solid var(--rule);background:var(--paper);padding:0 7px;border-radius:3px;font-weight:500}.snippet{flex:1 1 340px;min-width:0;background:var(--codebg);color:#edede8;border-radius:4px;padding:20px 22px;font-family:geist mono,monospace;font-size:14px;line-height:1.8;overflow-x:auto}.snippet .highlight,.snippet pre{margin:0;background:0 0!important}.snippet pre{font:inherit;overflow:visible}.ledger{margin-top:56px}.ledger-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;padding-bottom:10px;border-bottom:1px solid var(--ink)}.ledger h2{font-family:geist mono,monospace;font-size:12px;font-weight:400;margin:0}.filters{display:flex;flex-wrap:wrap;gap:4px;font-family:geist mono,monospace;font-size:12px}.filters a{border:1px solid transparent;color:var(--dim);padding:0 10px;display:inline-flex;align-items:center;border-radius:3px;min-height:32px}.filters a:hover{color:var(--ink)}.filters .on{color:var(--ink);border-color:var(--ink)}.rows{list-style:none;margin:0;padding:0}.rows li{display:flex;flex-wrap:wrap;gap:6px 24px;align-items:baseline;padding:18px 0;border-bottom:1px solid var(--rule)}.rows .d,.rows .tp,.rows .r{font-family:geist mono,monospace;font-size:12px;color:var(--dim)}.rows .d{flex:0 0 120px}.rows .title{flex:999 1 380px;min-width:0;display:flex;flex-direction:column;gap:3px}.rows .title strong{font-size:20px;font-weight:600;letter-spacing:-.025em}.rows .title span{font-size:15px;color:var(--dim)}.rows .title:hover strong{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.rows .tp{flex:0 0 210px}.rows .tp a:hover{color:var(--blue)}.rows .r{flex:0 0 60px;text-align:right}.crumbs{display:flex;gap:10px;font-size:12px;color:var(--dim);padding:28px 0 0;font-family:geist mono,monospace}.crumbs [aria-current]{color:var(--ink)}.post-head{padding-top:18px}.about-head{padding-top:36px}.kicker{font-family:geist mono,monospace;font-size:12px;color:var(--blue)}.post-head h1{font-size:64px;line-height:1;letter-spacing:-.045em;font-weight:600;margin:10px 0 0}.lede{font-size:21px;line-height:1.45;color:var(--body);margin:16px 0 0;max-width:760px;letter-spacing:-.01em}.meta{display:flex;flex-wrap:wrap;align-items:baseline;row-gap:4px;margin:24px 0 0;padding-top:14px;border-top:1px solid var(--rule);font-family:geist mono,monospace;font-size:13px;color:var(--dim)}.meta div{display:flex}.meta div+div::before{content:"·";margin:0 12px;color:var(--dim)}.meta dt{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.meta dd{margin:0;display:flex}.meta .who{color:var(--ink)}.tag{color:var(--blue)}.tag+.tag::before{content:",";color:var(--dim);margin-right:8px;display:inline-block}.tag:hover{text-decoration:underline;text-underline-offset:3px}.layout{display:flex;flex-wrap:wrap;justify-content:space-between;gap:40px 60px;padding-top:40px}.post{flex:999 1 560px;min-width:0;max-width:700px}.prose{font-size:18px;line-height:1.72;color:var(--body)}.prose p{margin:0 0 20px}.prose a{color:var(--blue);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.prose h2{counter-increment:sec;font-size:26px;font-weight:600;letter-spacing:-.03em;margin:52px 0 14px;color:var(--ink);display:flex;align-items:baseline;gap:14px}.about-head+.layout .prose h2{counter-increment:none}.prose h2::before{content:counter(sec,decimal-leading-zero);font-family:geist mono,monospace;font-size:13px;font-weight:500;color:var(--blue);letter-spacing:0}.prose code{font-family:geist mono,monospace;font-size:.82em;background:var(--soft);padding:1px 5px;border-radius:3px;color:var(--ink)}.code{margin:28px 0;background:var(--codebg);color:#edede8;border:1px solid var(--codeline);border-radius:4px;overflow:hidden}.code figcaption{display:flex;align-items:center;gap:12px;padding:6px 8px 6px 16px;border-bottom:1px solid var(--codeline);font-family:geist mono,monospace;font-size:12px;color:#8e8f8a}.code .file{color:#fff}.code button{margin-left:auto;font:inherit;border:1px solid #34363a;background:0 0;color:#edede8;padding:6px 12px;border-radius:3px;min-height:32px;cursor:pointer}.code button:hover{border-color:#6b6c68}.code .highlight{margin:0}.code pre,.chroma{margin:0;background:0 0!important}.code pre{padding:18px 0;overflow-x:auto;font-family:geist mono,monospace;font-size:14px;line-height:1.8;color:#edede8;tab-size:4}.code pre code{background:0 0;padding:0;font-size:inherit;color:inherit;display:block;width:max-content;min-width:100%}.chroma .ln{display:inline-block;width:42px;padding-right:18px;text-align:right;color:#4e504c;user-select:none;-webkit-user-select:none}.chroma .line{display:inline}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#8ea2ff}.chroma .kt,.chroma .nc{color:#fff;font-weight:500}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:#c2fe0b}.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cp,.chroma .cpf,.chroma .cs{color:#74756f}.table{margin:28px 0;font-size:15px;overflow-x:auto}.table table{width:100%;border-collapse:collapse}.table th{text-align:left;font-family:geist mono,monospace;font-weight:400;font-size:11px;color:var(--dim);padding:8px 0;border-bottom:1px solid var(--ink)}.table td{padding:12px 0;border-bottom:1px solid var(--rule);color:var(--ink)}.table .al-right{text-align:right;font-variant-numeric:tabular-nums}.table .al-center{text-align:center}.table td code{background:0 0;padding:0}.prose blockquote{margin:36px 0;padding:0 0 0 22px;border-left:2px solid var(--blue);font-size:24px;line-height:1.35;font-weight:500;letter-spacing:-.025em;color:var(--ink)}.prose blockquote p{margin:0}.note{display:block;font-size:15px;line-height:1.6;background:var(--paper);border:1px solid var(--rule);border-top:2px solid var(--blue);padding:14px 16px;margin:28px 0;color:var(--body)}.note strong{font-family:geist mono,monospace;font-size:11px;font-weight:500;color:var(--blue);display:block;margin-bottom:4px}.prose sup a{color:var(--blue);font-family:geist mono,monospace;font-size:11px;text-decoration:none}.footnotes{font-size:14px;color:var(--dim);border-top:1px solid var(--rule);padding:14px 0 0;margin:36px 0 0}.footnotes hr{display:none}.footnotes ol{margin:0;padding-left:18px}.footnotes li p{margin:0}.footnotes a{text-decoration:none}.pager{display:grid;grid-template-columns:1fr 1fr;margin-top:44px;border-top:1px solid var(--ink)}.pager a{padding:14px 0;display:flex;flex-direction:column;gap:4px}.pager .next{text-align:right;border-left:1px solid var(--rule);padding-left:20px;grid-column:2}.pager a span,.pager .gap{font-family:geist mono,monospace;font-size:11px;color:var(--dim)}.pager strong{font-weight:600;font-size:17px;letter-spacing:-.015em}.pager a:hover strong{text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.toc{flex:1 1 220px;max-width:260px}.toc-title{font-family:geist mono,monospace;font-size:11px;color:var(--dim);padding-bottom:8px;border-bottom:1px solid var(--ink)}.toc nav{counter-reset:toc}.toc ol{list-style:none;margin:0;padding:0}.toc li{border-bottom:1px solid var(--rule);counter-increment:toc}.toc li a{display:flex;gap:10px;padding:9px 0;font-size:14px;color:var(--dim)}.toc li a::before{content:counter(toc,decimal-leading-zero);font-family:geist mono,monospace;font-size:12px}.toc li a:hover{color:var(--ink)}.toc li a:hover::before{color:var(--blue)}.similar{margin:88px 0 0}.similar h2{font-family:geist mono,monospace;font-size:12px;font-weight:400;color:var(--ink);margin:0;padding-bottom:10px;border-bottom:1px solid var(--ink)}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.card{display:flex;flex-direction:column;gap:8px;padding:20px 28px 20px 0}.card+.card{padding-left:28px;border-left:1px solid var(--rule)}.card .topic{font-family:geist mono,monospace;font-size:11px;color:var(--blue)}.card strong{font-weight:600;font-size:21px;line-height:1.2;letter-spacing:-.03em}.card:hover strong{text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.card .dek{font-size:15px;color:var(--dim);line-height:1.5}.card .when{font-family:geist mono,monospace;font-size:11px;color:var(--dim);margin-top:4px}.notfound{padding:96px 0 40px}.notfound h1{font-size:128px;line-height:1;letter-spacing:-.05em;font-weight:600;margin:0}.notfound p{font-size:21px;color:var(--dim);margin:16px 0 0;letter-spacing:-.01em}.notfound a{display:inline-block;margin-top:24px;font-family:geist mono,monospace;font-size:13px;color:var(--blue);border-bottom:1px solid var(--blue)}@media(max-width:600px){.wrap{padding:0 20px}.post-head h1{font-size:44px}.feature h2{font-size:34px}.notfound h1{font-size:88px}.card+.card{padding-left:0;border-left:0;border-top:1px solid var(--rule)}.rows .d{flex-basis:auto}.rows .tp{flex-basis:auto}.rows .r{flex-basis:auto;text-align:left}}