@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-wght-normal.CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-ext-wght-normal.DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/fonts/SourceSerif4-Variable.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:200 900;font-display:swap;src:url(/fonts/SourceSerif4-Italic-Variable.woff2)format("woff2")}@font-face{font-family:Charis SIL;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/CharisSIL-Regular.woff2)format("woff2")}@font-face{font-family:Charis SIL;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/CharisSIL-Italic.woff2)format("woff2")}@font-face{font-family:Charis SIL;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/CharisSIL-Bold.woff2)format("woff2")}@font-face{font-family:Charis SIL;font-style:italic;font-weight:700;font-display:swap;src:url(/fonts/CharisSIL-BoldItalic.woff2)format("woff2")}:root{--paper:#faf7f1;--paper-2:#f3eee3;--ink:#1c1813;--ink-soft:#443c30;--ink-faint:#726752;--rule:#d8cfbd;--rule-soft:#e6dfd0;--card:#fffdf8;--accent:#5e3560;--accent-soft:#764a78;--on-accent:#faf3fa;--code-fg:#33291b;--plot-mat:#14110b;--serif-display:"Source Serif 4", Georgia, Cambria, "Times New Roman", serif;--serif-body:"Charis SIL", Georgia, Cambria, "Times New Roman", serif;--sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--gutter:clamp(20px, 5vw, 72px);--bg:var(--paper);--surface:var(--paper-2);--fg:var(--ink);--muted:var(--ink-soft);--faint:var(--ink-faint);--accent-ink:var(--accent-soft);--border:var(--rule-soft);--border-strong:var(--rule);--code-bg:#f4efe4;--font-sans:"Inter Variable", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono:var(--mono);--measure:68ch;--page:46rem;--space:1rem;--fs-xs:.78rem;--fs-sm:.885rem;--fs-base:1.06rem;--fs-lg:1.2rem;--fs-xl:1.5rem;--fs-2xl:2rem;--fs-hero:clamp(2.4rem, 6vw, 3.5rem);--lh-tight:1.14;--lh-body:1.72;--radius-sm:6px;--radius:10px;--radius-lg:16px;--shadow:24px 40px 80px -48px #281c0e73;--dur:.16s;--ease:cubic-bezier(.4, 0, .2, 1)}@media (prefers-color-scheme:dark){:root{--paper:#181510;--paper-2:#211c15;--ink:#ece3d1;--ink-soft:#c8bda6;--ink-faint:#94886f;--rule:#38301f;--rule-soft:#2a2318;--card:#211c14;--accent:#d6a75f;--accent-soft:#e3bd84;--on-accent:#221809;--code-fg:#ddd2bd;--code-bg:#12100b;--shadow:24px 44px 90px -50px #000000b8}}:root[data-theme=dark]{--paper:#181510;--paper-2:#211c15;--ink:#ece3d1;--ink-soft:#c8bda6;--ink-faint:#94886f;--rule:#38301f;--rule-soft:#2a2318;--card:#211c14;--accent:#d6a75f;--accent-soft:#e3bd84;--on-accent:#221809;--code-fg:#ddd2bd;--code-bg:#12100b;--shadow:24px 44px 90px -50px #000000b8}:root[data-theme=light]{--paper:#faf7f1;--paper-2:#f3eee3;--ink:#1c1813;--ink-soft:#443c30;--ink-faint:#726752;--rule:#d8cfbd;--rule-soft:#e6dfd0;--card:#fffdf8;--accent:#5e3560;--accent-soft:#764a78;--on-accent:#faf3fa;--code-fg:#33291b;--code-bg:#f4efe4;--shadow:24px 40px 80px -48px #281c0e73}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}[hidden],:root[data-admin="1"] [data-hide-admin]{display:none!important}body{font-family:var(--serif-body);font-size:var(--fs-base);line-height:var(--lh-body);color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-feature-settings:"cv02", "cv03", "cv04", "cv11";flex-direction:column;min-height:100vh;margin:0;display:flex}main{width:100%;max-width:var(--measure);padding:clamp(2rem, 5vw, 3.5rem) var(--space);flex:1 0 auto;margin:0 auto}main.wide{max-width:none;margin:0;padding:0}h1,h2,h3,h4{font-family:var(--serif-display);line-height:var(--lh-tight);letter-spacing:-.02em;color:var(--fg);font-weight:600}h1{font-size:var(--fs-2xl);margin:0 0 .6rem}h2{font-size:var(--fs-xl);margin:2.5rem 0 .85rem}h3{font-size:var(--fs-lg);letter-spacing:-.012em;margin:1.9rem 0 .6rem}article :where(h2,h3,h4){scroll-margin-top:5rem}p{margin:0 0 1.15rem}a{color:inherit;transition:color var(--dur) var(--ease), border-color var(--dur) var(--ease);text-decoration:none}a.link{color:var(--accent);border-bottom:1px solid color-mix(in srgb, var(--accent) 45%, transparent)}a.link:hover{border-color:var(--accent)}.lede{font-size:var(--fs-lg);color:var(--muted);font-weight:400;line-height:1.55}code{font-family:var(--font-mono);background:var(--paper-2);border:1px solid var(--rule);color:var(--accent);border-radius:4px;padding:.1em .4em;font-size:.86em}pre{background:var(--code-bg);color:var(--code-fg);border:1px solid color-mix(in srgb, var(--code-bg) 55%, var(--rule));box-shadow:var(--shadow);border-radius:8px;margin:1.9em 0;padding:0;overflow-x:auto}pre code{color:inherit;background:0 0;border:0;min-width:max-content;padding:18px 20px;font-size:.86rem;line-height:1.75;display:block}.post-body .codeblock{background:var(--code-bg);border:1px solid color-mix(in srgb, var(--code-bg) 52%, var(--rule));border-radius:10px;margin:2.1em 0;overflow:hidden;box-shadow:0 16px 38px #140c044d}.post-body .codeblock .code-top{background:color-mix(in srgb, var(--code-bg) 88%, var(--code-fg) 12%);border-bottom:1px solid color-mix(in srgb, var(--code-bg) 70%, var(--code-fg) 30%);align-items:center;gap:12px;padding:9px 16px;display:flex}.post-body .code-dots{gap:7px;display:inline-flex}.post-body .code-dots .dot{background:color-mix(in srgb, var(--code-fg) 24%, transparent);border-radius:50%;width:9px;height:9px}.post-body .code-lang{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:color-mix(in srgb, var(--code-fg) 60%, transparent);margin-left:auto;font-size:10.5px}.post-body .codeblock pre{box-shadow:none;border:0;border-radius:0;margin:0}.post-body .codeblock:has(+pre.py-output){border-bottom-right-radius:0;border-bottom-left-radius:0;margin-bottom:0}.astro-code{--astro-code-foreground:var(--code-fg);--astro-code-background:var(--code-bg);--astro-code-token-link:var(--accent-soft);--astro-code-token-comment:#9a8c72;--astro-code-token-keyword:#9a3f28;--astro-code-token-string:#5f7a3f;--astro-code-token-string-expression:#5f7a3f;--astro-code-token-constant:#a5541f;--astro-code-token-function:#8a5a12;--astro-code-token-parameter:#a05a1e;--astro-code-token-punctuation:#6d6152}@media (prefers-color-scheme:dark){.astro-code{--astro-code-token-comment:#7a6f5b;--astro-code-token-keyword:#c98a63;--astro-code-token-string:#9bb586;--astro-code-token-string-expression:#9bb586;--astro-code-token-constant:#cf8f6f;--astro-code-token-function:#e0b56a;--astro-code-token-parameter:#d9a06b;--astro-code-token-punctuation:#c2b6a0}}:root[data-theme=dark] .astro-code{--astro-code-token-comment:#7a6f5b;--astro-code-token-keyword:#c98a63;--astro-code-token-string:#9bb586;--astro-code-token-string-expression:#9bb586;--astro-code-token-constant:#cf8f6f;--astro-code-token-function:#e0b56a;--astro-code-token-parameter:#d9a06b;--astro-code-token-punctuation:#c2b6a0}:root[data-theme=light] .astro-code{--astro-code-token-comment:#9a8c72;--astro-code-token-keyword:#9a3f28;--astro-code-token-string:#5f7a3f;--astro-code-token-string-expression:#5f7a3f;--astro-code-token-constant:#a5541f;--astro-code-token-function:#8a5a12;--astro-code-token-parameter:#a05a1e;--astro-code-token-punctuation:#6d6152}blockquote{border-left:3px solid var(--border-strong);color:var(--muted);margin:1.6rem 0;padding:.15rem 0 .15rem 1.15rem}blockquote p:last-child{margin-bottom:0}hr{border:0;border-top:1px solid var(--border);margin:2.75rem 0}img{border-radius:var(--radius);max-width:100%;height:auto}ul,ol{padding-left:1.35rem}li{margin:.35rem 0}.post-body{font-size:19px;line-height:1.75}.post-body .measure>p:first-of-type:first-letter{font-family:var(--serif-display);float:left;color:var(--accent);padding:.06em .12em 0 0;font-size:4.6em;font-weight:600;line-height:.82}.post-body p{color:var(--ink);text-wrap:pretty;margin:0 0 1.35em}.post-body h2{font-family:var(--serif-display);letter-spacing:-.01em;margin:2em 0 .6em;font-size:clamp(25px,3.2vw,34px);font-weight:600;line-height:1.15}.post-body h3{font-family:var(--serif-display);margin:1.8em 0 .5em;font-size:22px;font-weight:600}.post-body :where(p,li,td,blockquote) a{color:var(--accent);border-bottom:1px solid color-mix(in srgb, var(--accent) 45%, transparent);transition:border-color var(--dur) var(--ease);text-decoration:none}.post-body :where(p,li,td,blockquote) a:hover{border-color:var(--accent)}.post-body blockquote{border-left:2px solid var(--accent);margin:1.8em 0;padding:6px 0 6px 26px}.post-body blockquote p{font-family:var(--serif-display);color:var(--ink);margin:0;font-size:24px;font-style:italic;line-height:1.5}.post-body blockquote cite{font-family:var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin-top:14px;font-size:12px;font-style:normal;display:block}.post-body hr{background:var(--rule);border:0;height:1px;margin:2.4em 0}.post-body ul,.post-body ol{margin:0 0 1.35em;padding-left:1.4em}.post-body li{margin:.4em 0}.post-body img{border:1px solid var(--rule);border-radius:6px;max-width:100%;height:auto}.post-body table{border-collapse:collapse;width:100%;margin:2em 0;font-size:15.5px;display:block;overflow-x:auto}.post-body thead th{text-align:left;font-family:var(--sans);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-faint);border-bottom:1px solid var(--rule);white-space:nowrap;padding:9px 14px;font-size:12px}.post-body tbody td{border-bottom:1px solid var(--rule-soft);color:var(--ink-soft);vertical-align:top;padding:10px 14px}.post-body tbody tr:last-child td{border-bottom:0}.post-body tbody tr:hover td{background:color-mix(in srgb, var(--ink) 2.5%, transparent)}.post-body .code-top .code-file{font-family:var(--mono);color:color-mix(in srgb, var(--code-fg) 60%, transparent);font-size:12px}.post-body .mnote{font-family:var(--sans);color:var(--ink-soft);border-left:2px solid color-mix(in srgb, var(--accent) 40%, transparent);margin:1.6em 0;padding:2px 0 2px 16px;font-size:14px;line-height:1.6}.post-body .mnote b{letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:5px;font-size:10px;display:block}.post-body .katex-display{border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft);margin:1.9em 0;padding:18px 22px;overflow:auto hidden}.post-body figure{margin:2.2em 0}.post-body figure>img{width:100%;margin:0;display:block}.post-body figcaption{font-family:var(--sans);color:var(--ink-faint);letter-spacing:.01em;text-wrap:pretty;margin-top:13px;font-size:13px}.post-body figcaption b{color:var(--accent);letter-spacing:.1em;text-transform:uppercase;margin-right:8px;font-size:10.5px;font-weight:600}.paywall .band{border:1px solid color-mix(in srgb, var(--accent) 32%, var(--rule));text-align:center;background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 7%, var(--card)), var(--card));border-radius:6px;margin:8px 0 clamp(28px,4vw,44px);padding:clamp(28px,4vw,44px);overflow:hidden}.paywall .band .lock{background:color-mix(in srgb, var(--accent) 14%, transparent);width:44px;height:44px;color:var(--accent);border-radius:999px;place-items:center;margin:0 auto 16px;display:grid}.paywall .band .lock svg{width:19px;height:19px}.paywall .band .status{font-family:var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:11px;font-size:11.5px}.paywall .band h3{font-family:var(--serif-display);letter-spacing:-.01em;max-width:22ch;margin:0 auto 10px;font-size:clamp(23px,3vw,31px);font-weight:600;line-height:1.18}.paywall .band p{color:var(--ink-soft);text-wrap:pretty;max-width:44ch;margin:0 auto 22px;font-size:17px;line-height:1.6}.paywall .band .price{font-family:var(--serif-display);color:var(--accent);font-style:italic}.paywall .band .row{flex-wrap:wrap;justify-content:center;align-items:center;gap:14px;display:flex}.paywall .band .secure{font-family:var(--sans);color:var(--ink-faint);align-items:center;gap:7px;font-size:12px;display:inline-flex}.paywall .band .secure svg{width:14px;height:14px}.paywall .band .alt{font-family:var(--sans);color:var(--ink-faint);margin:16px 0 0;font-size:12.5px}.paywall .band .alt a{color:var(--accent)}.paywall .band .alt a:hover{text-decoration:underline}.post-body .d2-diagram{border:1px solid var(--rule);background:var(--card);box-shadow:var(--shadow);border-radius:6px;margin:2.2em 0;overflow-x:auto}.post-body .d2-diagram svg{box-sizing:border-box;height:auto;margin:0 auto;padding:clamp(18px,3vw,26px);display:block}.post-body .d2-diagram svg .text,.post-body .d2-diagram svg .text-bold,.post-body .d2-diagram svg .text-italic{fill:var(--ink)}.post-body .d2-diagram svg .fill-N7{fill:#0000}.post-body .d2-diagram svg .fill-N2{fill:var(--ink-soft)}.post-body .d2-diagram svg [class*=fill-B]:not(.fill-B1){fill:color-mix(in srgb, var(--accent) 8%, var(--paper-2))}.post-body .d2-diagram svg .fill-B1{fill:var(--accent)}.post-body .d2-diagram svg rect[class*=stroke-],.post-body .d2-diagram svg .shape[class*=stroke-]{stroke:var(--rule)}.post-body .d2-diagram svg .connection[class*=stroke-],.post-body .d2-diagram svg path.connection{stroke:var(--accent)}.d2-diagram{justify-content:center;margin:1.5rem 0;display:flex;overflow-x:auto}.d2-diagram svg{max-width:100%;height:auto}.d2-error{color:#e5484d;white-space:pre-wrap;font-family:var(--font-mono);padding:1rem;font-size:.9em;overflow-x:auto}.post-body .py-plot{border:1px solid var(--rule);box-shadow:var(--shadow);border-radius:6px;margin:2.2em 0;overflow:hidden}.post-body .py-plot .demo-head{background:var(--paper-2);border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:center;gap:10px;padding:9px 14px;display:flex}.post-body .py-plot .dots{gap:6px;display:flex}.post-body .py-plot .dots i{background:var(--rule);border-radius:999px;width:9px;height:9px;display:block}.post-body .py-plot .fname{font-family:var(--mono);color:var(--ink-faint);font-size:12px}.post-body .py-plot .seg{border:1px solid var(--rule);border-radius:3px;margin-left:auto;display:flex;overflow:hidden}.post-body .py-plot .seg button{font-family:var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);cursor:pointer;background:0 0;border:0;padding:5px 11px;font-size:11px}.post-body .py-plot .seg button+button{border-left:1px solid var(--rule)}.post-body .py-plot .seg button.on{background:var(--accent);color:var(--on-accent)}.post-body .py-plot .cpy{border:1px solid var(--rule);font-family:var(--sans);letter-spacing:.06em;color:var(--ink-faint);cursor:pointer;background:0 0;border-radius:3px;padding:5px 9px;font-size:11px}.post-body .py-plot .cpy:hover{border-color:var(--accent);color:var(--accent)}.post-body .py-plot .pane{display:none}.post-body .py-plot .pane.on{display:block}.post-body .py-plot .pane .codeblock{box-shadow:none;border:0;border-radius:0;margin:0}.post-body .py-plot .pane .codeblock .code-top{display:none}.post-body .py-plot .plotwrap{background:var(--plot-mat);padding:8px 8px 4px}.post-body .py-plot .plotly-figure{width:100%}.post-body .py-plot .plotly-holder{width:100%;height:430px}@media (width<=640px){.post-body .py-plot .plotly-holder{height:330px}}.post-body .py-plot .demo-foot{border-top:1px solid var(--rule);background:var(--paper-2);font-family:var(--sans);color:var(--ink-faint);flex-wrap:wrap;align-items:center;gap:12px;padding:9px 14px;font-size:11.5px;display:flex}.post-body pre.py-output{font-family:var(--mono);white-space:pre-wrap;box-shadow:none;background:var(--paper-2);color:var(--ink-soft);border:1px solid color-mix(in srgb, var(--code-bg) 52%, var(--rule));border-top:0;border-left:3px solid var(--accent);border-radius:0 0 10px 10px;margin:0 0 2.1em;padding:12px 18px 16px;font-size:.82rem;line-height:1.7}.post-body pre.py-output:before{content:"Output";font-family:var(--sans);letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:8px;font-size:10px;font-weight:600;display:block}.wrap{max-width:1180px;padding:0 var(--gutter);margin:0 auto}.measure{max-width:var(--measure);margin-left:auto;margin-right:auto}.eyebrow{font-family:var(--sans);letter-spacing:.22em;text-transform:uppercase;color:var(--accent);font-size:11px;font-weight:600}.meta-caps{font-family:var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);font-size:12px}.hairline{background:var(--rule);border:0;height:1px;margin:0}.site-header{z-index:50;background:color-mix(in srgb, var(--paper) 82%, transparent);backdrop-filter:saturate(140%)blur(14px);border-bottom:1px solid var(--rule);position:sticky;top:0}.bar{justify-content:space-between;align-items:center;gap:20px;height:64px;display:flex}.wordmark{font-family:var(--serif-display);letter-spacing:-.01em;color:var(--ink);font-size:21px;font-weight:600}.wordmark:hover{color:var(--ink)}.wordmark .are{color:var(--accent)}.nav-primary{font-family:var(--sans);align-items:center;gap:6px;display:flex}.nav-primary a{color:var(--ink-soft);transition:color var(--dur) var(--ease), background var(--dur) var(--ease);border-radius:999px;padding:8px 14px;font-size:14px;position:relative}.nav-primary a:hover{color:var(--ink);background:var(--paper-2)}.nav-primary a[aria-current=page]{color:var(--ink)}.nav-primary a[aria-current=page]:after{content:"";background:var(--accent);border-radius:2px;width:16px;height:2px;position:absolute;bottom:1px;left:50%;transform:translate(-50%)}.nav-primary a.account{color:var(--accent)}.nav-primary a.account:hover{background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--accent)}.nav-primary a.nav-studio{color:var(--accent)}.nav-group{align-items:center;display:flex;position:relative}.nav-trigger{align-items:center;gap:5px;display:inline-flex}.nav-trigger .caret{opacity:.55;transition:transform var(--dur) var(--ease)}.nav-group:hover .caret,.nav-group:focus-within .caret{transform:rotate(180deg)}.nav-group.is-active>.nav-trigger{color:var(--ink)}.nav-group.is-active>.nav-trigger:after{content:"";background:var(--accent);border-radius:2px;width:16px;height:2px;position:absolute;bottom:1px;left:50%;transform:translate(-50%)}.nav-group:before{content:"";height:12px;position:absolute;top:100%;left:0;right:0}.nav-menu{background:var(--card);border:1px solid var(--rule);min-width:232px;box-shadow:var(--shadow);opacity:0;visibility:hidden;pointer-events:none;z-index:60;transition:opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);border-radius:12px;flex-direction:column;gap:2px;padding:6px;display:flex;position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%)translateY(-4px)}.nav-group:hover .nav-menu,.nav-group:focus-within .nav-menu{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%)translateY(0)}.nav-menu a{width:100%;color:var(--ink);white-space:nowrap;border-radius:8px;padding:9px 12px;font-size:14px;line-height:1.35;display:block}.nav-menu a:after{display:none!important}.nav-menu a small{font-family:var(--sans);letter-spacing:0;text-transform:none;color:var(--ink-faint);margin-top:2px;font-size:12px;font-weight:400;display:block}.nav-menu a:hover{background:var(--paper-2);color:var(--accent)}.nav-menu a:hover small{color:var(--ink-soft)}.nav-menu a[aria-current=page]{color:var(--accent)}.theme-toggle{cursor:pointer;border:1px solid var(--rule);width:36px;height:36px;color:var(--ink-soft);transition:background var(--dur) var(--ease), color var(--dur) var(--ease);background:0 0;border-radius:999px;place-items:center;margin-left:2px;display:grid}.theme-toggle:hover{background:var(--paper-2);color:var(--ink)}.theme-toggle svg{width:18px;height:18px}.theme-toggle .icon-sun,:root[data-theme=dark] .theme-toggle .icon-moon{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme]) .theme-toggle .icon-moon{display:none}:root:not([data-theme]) .theme-toggle .icon-sun{display:block}}@media (width<=900px){.nav-primary a:not(.account){display:none}}.btn{font-family:var(--sans);cursor:pointer;transition:transform .18s var(--ease), box-shadow var(--dur) var(--ease), background var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease);border:1px solid #0000;border-radius:2px;align-items:center;gap:10px;padding:13px 24px;font-size:15px;font-weight:500;text-decoration:none;display:inline-flex}.btn-primary{background:var(--accent);color:var(--on-accent);box-shadow:0 10px 26px -14px var(--accent)}.btn-primary:hover{box-shadow:0 16px 34px -14px var(--accent);color:var(--on-accent);transform:translateY(-2px)}.btn-ghost{color:var(--ink);border-color:var(--rule);background:0 0}.btn-ghost:hover{border-color:var(--ink-faint);color:var(--ink);transform:translateY(-2px)}.btn-ghost .arrow{transition:transform var(--dur) var(--ease)}.btn-ghost:hover .arrow{transform:translate(4px)}.btn-sm{padding:9px 16px;font-size:13.5px}.sec-head{justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:34px;display:flex}.sec-head h2{font-family:var(--serif-display);letter-spacing:-.01em;margin:0;font-size:clamp(24px,3vw,32px);font-weight:600}.sec-head a.more{font-family:var(--sans);color:var(--accent);transition:border-color var(--dur) var(--ease);border-bottom:1px solid #0000;font-size:14px}.sec-head a.more:hover{border-color:var(--accent)}.page-head{padding:clamp(48px,7vw,96px) 0 clamp(28px,4vw,44px)}.page-head .kicker{align-items:center;gap:14px;margin-bottom:24px;display:flex}.page-head .kicker .line{background:var(--accent);opacity:.6;width:48px;height:1px}.page-head h1{font-family:var(--serif-display);letter-spacing:-.02em;max-width:18ch;margin:0;font-size:clamp(36px,6vw,64px);font-weight:600;line-height:1.04}.page-head h1 em{color:var(--accent);font-style:italic}.page-head .lede{color:var(--ink-soft);max-width:54ch;margin:24px 0 0;font-size:clamp(18px,2.2vw,21px);line-height:1.6}.post{border-bottom:1px solid var(--rule);grid-template-columns:64px minmax(0,1fr) 220px;gap:clamp(18px,3vw,40px);padding:30px 8px;transition:background .25s;display:grid}.post:hover{background:var(--paper-2)}.post .idx{font-family:var(--serif-display);color:var(--ink-faint);padding-top:6px;font-size:15px}.post h3{font-family:var(--serif-display);letter-spacing:-.01em;margin:0 0 10px;font-size:clamp(22px,2.6vw,27px);font-weight:600;line-height:1.18}.post h3 a{color:var(--ink);background-image:linear-gradient(var(--accent), var(--accent));background-position:0 100%;background-repeat:no-repeat;background-size:0 1.5px;transition:background-size .3s}.post:hover h3 a{background-size:100% 1.5px}.post p{color:var(--ink-soft);max-width:60ch;margin:0 0 14px;font-size:17px}.post .aside{text-align:right;padding-top:6px}.post .date{font-family:var(--serif-display);color:var(--ink);font-size:17px;font-style:italic}.post .rt{font-family:var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin-top:6px;font-size:12px;display:block}@media (width<=820px){.post{grid-template-columns:1fr;gap:12px;padding:26px 4px}.post .idx{display:none}.post .aside{text-align:left;order:-1;padding-top:0}}.card{background:var(--card);border:1px solid var(--rule);box-shadow:var(--shadow);border-radius:6px}.ph{background:repeating-linear-gradient(135deg, var(--paper-2), var(--paper-2) 9px, var(--card) 9px, var(--card) 18px);border-bottom:1px solid var(--rule);place-items:center;min-height:180px;display:grid;position:relative}.ph span{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);background:var(--paper);border:1px solid var(--rule);border-radius:2px;padding:6px 11px;font-size:10.5px}.subscribe{background:var(--card);border:1px solid var(--rule);box-shadow:var(--shadow);border-radius:6px;padding:clamp(28px,4vw,44px);position:relative;overflow:hidden}.subscribe:before{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--accent) 18%, transparent), transparent 70%);border-radius:999px;width:180px;height:180px;position:absolute;top:-40px;right:-40px}.subscribe .eyebrow{margin-bottom:12px;display:block}.subscribe h3{font-family:var(--serif-display);letter-spacing:-.01em;margin:0 0 10px;font-size:clamp(24px,3vw,30px);font-weight:600}.subscribe p{color:var(--ink-soft);max-width:48ch;margin:0 0 22px;font-size:17px}.site-footer{border-top:1px solid var(--rule);background:var(--paper-2);color:var(--ink-faint);font-size:var(--fs-sm);flex-shrink:0;margin-top:clamp(56px,8vw,96px)}.foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;padding:34px 0;display:flex}.foot .wordmark{font-size:20px}.foot nav{font-family:var(--sans);flex-wrap:wrap;gap:20px;font-size:14px;display:flex}.foot nav a{color:var(--ink-soft);transition:color var(--dur) var(--ease)}.foot nav a:hover{color:var(--accent)}.foot .social{gap:10px;display:flex}.foot .social a{border:1px solid var(--rule);width:36px;height:36px;color:var(--ink-soft);transition:border-color var(--dur) var(--ease), color var(--dur) var(--ease), transform var(--dur) var(--ease);border-radius:999px;place-items:center;display:grid}.foot .social a:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-2px)}.foot .social svg{width:16px;height:16px}.copyline{text-align:center;font-family:var(--sans);color:var(--ink-faint);padding:0 0 40px;font-size:13px}.cta,.cta-secondary{font-size:var(--fs-sm);border-radius:var(--radius);cursor:pointer;transition:transform var(--dur) var(--ease), background var(--dur) var(--ease), border-color var(--dur) var(--ease), opacity var(--dur) var(--ease);border:1px solid #0000;align-items:center;gap:.4rem;padding:.7rem 1.2rem;font-weight:600;line-height:1;display:inline-flex}.cta{background:var(--fg);color:var(--bg);border-color:var(--fg)}.cta:hover{color:var(--bg);opacity:.88;transform:translateY(-1px)}.cta-secondary{color:var(--fg);border-color:var(--border-strong);background:0 0}.cta-secondary:hover{color:var(--fg);border-color:var(--fg);background:var(--surface);transform:translateY(-1px)}.hero{padding:clamp(1.5rem,5vw,3.5rem) 0 1.75rem}.hero h1{font-size:var(--fs-hero);letter-spacing:-.035em;margin:0 0 1.05rem;line-height:1.04}.hero .lede{max-width:42ch}.hero-actions{flex-wrap:wrap;gap:.7rem;margin-top:1.7rem;display:flex}@media (prefers-reduced-motion:no-preference){.hero{animation:rise .5s var(--ease) both}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}}.section-head{justify-content:space-between;align-items:baseline;gap:1rem;margin:2.75rem 0 .5rem;display:flex}.section-head h2{font-size:var(--fs-lg);margin:0}.section-head a{font-size:var(--fs-sm);color:var(--muted);font-weight:500}.section-head a:hover{color:var(--accent)}article time{color:var(--faint);font-size:var(--fs-sm)}.post-list{margin:0;padding:0;list-style:none}.post-list li{border-bottom:1px solid var(--border);padding:1.5rem 0}.post-list li:first-child{padding-top:.5rem}.post-list li:last-child{border-bottom:0}.post-list h2{font-size:var(--fs-lg);letter-spacing:-.012em;margin:0 0 .3rem}.post-list h2 a{color:var(--fg)}.post-list h2 a:hover{color:var(--accent)}.post-list time{color:var(--faint);font-size:var(--fs-sm)}.post-list p{color:var(--muted);margin:.45rem 0 0}.tags{flex-wrap:wrap;gap:.4rem;margin:.6rem 0 0;display:flex}.tag{font-size:var(--fs-sm);color:var(--muted);background:var(--surface);border:1px solid var(--border);transition:color var(--dur) var(--ease), border-color var(--dur) var(--ease);border-radius:999px;padding:.12rem .6rem;display:inline-block}.tag:hover{color:var(--fg);border-color:var(--border-strong)}.count{color:var(--muted)}input::placeholder,textarea::placeholder{color:color-mix(in srgb, var(--ink-faint) 55%, transparent);opacity:1;font-style:italic}.fieldline{font-family:var(--sans);letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);align-items:center;gap:9px;font-size:11.5px;display:inline-flex}.fieldline:before{content:"";background:var(--accent);opacity:.7;width:14px;height:1px}.fieldline a{color:var(--accent);border-bottom:1px solid #0000;transition:border-color .2s}.fieldline a:hover{border-color:var(--accent)}.series .fieldline{margin-bottom:11px}.fart{aspect-ratio:16/10;-webkit-mask-composite:source-in;align-self:start;margin:-6px 0 0 -24px;position:relative;mask-image:radial-gradient(102% 94% at 34%,#000 16%,#0009 52%,#0000 80%),linear-gradient(#0000,#000 14% 86%,#0000);mask-composite:intersect}.fart:after{content:"";background:radial-gradient(78% 68% at var(--wx,22%) var(--wy,12%), color-mix(in srgb, var(--accent) var(--wo,12%), transparent), transparent 70%);pointer-events:none;position:absolute;inset:-14%}.fart svg{width:100%;height:100%;display:block;position:absolute;inset:0;overflow:visible}.field{border-top:1px solid var(--rule);grid-template-columns:340px minmax(0,1fr);gap:clamp(24px,3.6vw,48px);padding:clamp(34px,4.4vw,56px) 0;display:grid}@media (width<=880px){.field{grid-template-columns:1fr;gap:18px}.fart{max-width:440px;margin-left:-16px}}.field h2{font-family:var(--serif-display);letter-spacing:-.015em;margin:0 0 12px;font-size:clamp(27px,3.3vw,37px);font-weight:600;line-height:1.1}.field h2 a{color:var(--ink);background-image:linear-gradient(var(--accent), var(--accent));background-position:0 100%;background-repeat:no-repeat;background-size:0 1.5px;transition:background-size .3s}.field:hover h2 a{background-size:100% 1.5px}.field .sum{color:var(--ink-soft);max-width:62ch;margin:0 0 22px;font-size:17.5px}.fmeta{font-family:var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:22px;font-size:11.5px;display:flex}.fmeta em{color:var(--ink-soft);font-style:normal}.fseries{border-top:1px solid var(--rule);margin:0;padding:0;list-style:none}.fseries li{border-bottom:1px solid var(--rule)}.fseries a{align-items:baseline;gap:12px;padding:12px 2px;transition:padding-left .22s;display:flex}.fseries a:hover{padding-left:8px}.fseries .d{background:var(--accent);border-radius:999px;flex:none;width:7px;height:7px;transform:translateY(-2px)}.fseries .d.open{box-shadow:inset 0 0 0 1.5px var(--accent);background:0 0}.fseries .t{min-width:0;font-family:var(--serif-display);color:var(--ink);white-space:nowrap;text-overflow:ellipsis;flex:0 auto;font-size:17.5px;line-height:1.35;overflow:hidden}.fseries a:hover .t{color:var(--accent)}.fseries .lead{border-bottom:1px dotted var(--rule);flex:14px;min-width:14px;transform:translateY(-5px)}.fseries .m{font-family:var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);font-variant-numeric:tabular-nums;flex:none;font-size:11.5px}@media (width<=1120px){.fseries .t{white-space:normal}.fseries .lead{display:none}.fseries .m{margin-left:auto;padding-left:16px}}@media (width<=560px){.fseries .m{display:none}}.fnone{border:1px solid var(--rule);background:var(--card);text-align:center;border-radius:6px;margin-top:clamp(20px,3vw,34px);padding:clamp(30px,5vw,52px)}.fnone h2{font-family:var(--serif-display);letter-spacing:-.015em;margin:0 0 12px;font-size:clamp(22px,2.8vw,28px);font-weight:600}.fnone p{max-width:46ch;color:var(--ink-soft);margin:0 auto;font-size:16.5px;line-height:1.6}.fnone .btn{margin-top:24px}.fhero{grid-template-columns:minmax(0,1fr) 400px;align-items:center;gap:clamp(24px,4vw,56px);padding-bottom:clamp(28px,4vw,46px);display:grid}@media (width<=960px){.fhero{grid-template-columns:1fr}.fhero .fart{max-width:440px}}.arc{margin:0;padding:0;list-style:none;position:relative}.arc:before{content:"";background:var(--rule);width:1px;position:absolute;top:18px;bottom:18px;left:15px}.arc>li{grid-template-columns:32px minmax(0,1fr);gap:16px;padding:10px 0;display:grid;position:relative}.arc .n{z-index:1;width:31px;height:31px;font-family:var(--sans);font-variant-numeric:tabular-nums;background:var(--paper);border:1px solid var(--rule);color:var(--ink-faint);border-radius:999px;place-items:center;font-size:11px;display:grid;position:relative}.arc .sname{font-family:var(--serif-display);letter-spacing:-.01em;color:var(--ink);font-size:18px;font-weight:500;line-height:1.3;display:block}.arc .aparts{flex-direction:column;gap:5px;margin:7px 0 0;padding:0;list-style:none;display:flex}.arc .aparts a{font-family:var(--sans);color:var(--ink-faint);font-size:13.5px;line-height:1.45;transition:color .2s}.arc .aparts a:hover{color:var(--accent)}.starthere{border-top:1px solid var(--rule);flex-wrap:wrap;align-items:center;gap:16px;margin-top:clamp(22px,3vw,32px);padding-top:clamp(20px,2.6vw,26px);display:flex}.starthere .why{font-family:var(--sans);color:var(--ink-faint);max-width:34ch;font-size:13px;line-height:1.5}.starthere .restart{font-family:var(--sans);color:var(--ink-soft);border:1px solid var(--rule);cursor:pointer;background:0 0;border-radius:2px;padding:12px 20px;font-size:13.5px;font-weight:500;transition:border-color .2s,color .2s,transform .18s}.starthere .restart:hover{border-color:var(--ink-faint);color:var(--ink);transform:translateY(-2px)}.ford{font-family:var(--sans);letter-spacing:.18em;text-transform:uppercase;color:var(--accent);align-items:center;gap:12px;margin-bottom:14px;font-size:11px;display:flex}.ford:after{content:"";background:var(--rule);flex:1;height:1px}.ford .step{color:var(--ink-faint);letter-spacing:.12em}.pager a.field-next{border-color:color-mix(in srgb, var(--accent) 34%, var(--rule));background:color-mix(in srgb, var(--accent) 5%, var(--card))}.pager a.field-next:hover{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 9%, var(--card))}.pager a.field-next .dir{color:var(--accent)}.seriesbar{border:1px solid var(--rule);background:var(--paper-2);font-family:var(--sans);border-radius:4px;flex-wrap:wrap;align-items:center;gap:clamp(14px,2.4vw,26px);min-height:70px;margin-top:26px;padding:0 17px;font-size:13px;display:flex}.seriesbar .crumb{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}.seriesbar .crumb .up{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);border-bottom:1px solid #0000;font-size:11.5px;transition:color .2s,border-color .2s}.seriesbar .crumb .up:hover{color:var(--accent);border-color:var(--accent)}.seriesbar .crumb .sep{width:11px;height:11px;color:var(--ink-faint);opacity:.55;flex:none}.seriesbar .crumb .sname{font-family:var(--serif-display);letter-spacing:-.01em;color:var(--ink);border-bottom:1px solid #0000;font-size:16.5px;font-weight:600;transition:color .2s,border-color .2s}.seriesbar .crumb .sname:hover{color:var(--accent);border-color:var(--accent)}.spine{align-items:center;gap:0;margin:0 0 0 auto;padding:0;list-style:none;display:flex}.spine li{display:block}.spine a{box-sizing:content-box;background:color-mix(in srgb, var(--accent) 42%, transparent);background-clip:content-box;border-radius:1px;width:24px;height:5px;padding:19.5px 2px;transition:background .18s,height .18s,padding .18s,box-shadow .18s;display:block}.spine a:hover{background:var(--accent);background-clip:content-box;height:11px;padding-top:16.5px;padding-bottom:16.5px}.spine a.todo{box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--ink) 26%, transparent);background:0 0}.spine a.todo:hover{box-shadow:inset 0 0 0 1px var(--accent)}.spine a.here{background:var(--accent);background-clip:content-box;height:13px;padding-top:15.5px;padding-bottom:15.5px}.seriesbar .count{font-variant-numeric:tabular-nums;color:var(--ink-faint);letter-spacing:.04em;flex:none;font-size:12px}.seriesbar .count b{color:var(--accent);font-weight:600}@media (width<=620px){.spine{margin-left:0}.spine a{width:18px}.seriesbar{padding:8px 14px}}.pager{border-top:1px solid var(--rule);grid-template-columns:1fr 1fr;gap:18px;margin:clamp(30px,4vw,48px) 0 0;padding-top:32px;display:grid}@media (width<=640px){.pager{grid-template-columns:1fr}}.pager>a{border:1px solid var(--rule);border-radius:6px;padding:20px 22px;transition:border-color .2s,transform .2s,background .2s;display:block}.pager>a:hover{border-color:var(--accent);background:var(--paper-2);transform:translateY(-2px)}.pager .dir{font-family:var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:8px;font-size:10.5px}.pager .t{font-family:var(--serif-display);color:var(--ink);font-size:18px;font-weight:600;line-height:1.25}.pager a.next{text-align:right}.pager .off{opacity:.5}.pager span.off{border:1px solid var(--rule);border-radius:6px;padding:20px 22px;display:block}.arc .aparts li.checkpoint a{color:var(--accent);font-weight:700}.parts li.checkpoint .t{color:var(--accent)}
