@import "https://fonts.googleapis.com/css2?family=Karla:wght@400;700&family=Newsreader:ital,opsz,wght@0,6..72,300;0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400&family=IBM+Plex+Mono:wght@400;500;600&display=swap";:root{--paper:#fbfbfd;--paper-2:#f3f4f9;--ink:#23283a;--ink-2:#6b7188;--ink-3:#9aa0b5;--hairline:#e4e7f0;--hairline-strong:#c9cede;--accent:oklch(68% .11 230);--accent-strong:oklch(55% .13 230);--accent-tint:#e9f1f9;--accent-tint-2:#dce9f6;--accent-ink:#12151f;--accent-2:oklch(68% .1 160);--accent-2-strong:oklch(52% .11 160);--accent-2-tint:#e7f3ec;--code-panel:#232942;--code-header:#1b2033;--code-border:#333a54;--code-fg:#d6dbee;--code-comment:#7d88b3;--code-string:oklch(78% .1 230);--code-accent:oklch(80% .07 290);--surface-page:var(--paper);--surface-card:#fff;--surface-inverse:var(--ink);--text-body:var(--ink);--text-secondary:var(--ink-2);--text-meta:var(--ink-3);--text-inverse:#fff;--link:var(--accent-strong);--shadow-card:0 1px 3px #23283a0f;--shadow-code:0 2px 10px #23283a1f}[data-theme=dark]{--paper:#14161f;--paper-2:#1b1e2c;--ink:#e3e6f0;--ink-2:#a9b0c6;--ink-3:#7c8299;--hairline:#2a2f42;--hairline-strong:#3a415a;--accent:oklch(72% .11 230);--accent-strong:oklch(75% .1 230);--accent-tint:#1d2434;--accent-tint-2:#232c40;--accent-2:oklch(74% .09 160);--accent-2-strong:oklch(76% .09 160);--accent-2-tint:#18271f;--surface-card:#1b1e2c;--surface-inverse:#0e101a;--text-inverse:#e3e6f0;--code-header:#10131c;--shadow-card:0 1px 3px #0006;--shadow-code:0 2px 10px #00000073}:root{--font-ui:"Karla", system-ui, sans-serif;--font-serif:"Newsreader", Georgia, serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace;--size-hero:29px;--size-title:23px;--size-h3:16.5px;--size-body:14px;--size-ui:12.5px;--size-meta:11.5px;--size-label:10.5px;--size-code:11.5px;--size-footnote:10.5px;--leading-tight:1.2;--leading-card:1.3;--leading-body:1.75;--leading-code:1.7;--tracking-label:.12em;--weight-body:300;--weight-heading:500;--weight-ui-bold:700;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:28px;--space-7:36px;--radius-s:3px;--radius-m:5px;--radius-l:8px;--measure:62ch;--page-max:980px;--page-pad:36px}body{background:var(--surface-page);color:var(--text-body);font-family:var(--font-ui);margin:0}a{color:var(--link);text-decoration:none}a:hover{color:var(--accent)}::selection{background:var(--accent-tint-2)}.wrap{max-width:var(--page-max);margin:0 auto}.mast{padding:22px var(--page-pad);justify-content:space-between;align-items:center;display:flex}.wordmark{color:var(--text-body);font-size:17px;font-weight:700}.wordmark em{color:var(--accent);font-style:normal}.byline{color:var(--text-meta);margin-left:10px;font-size:11px}.nav{font-size:var(--size-ui);align-items:center;gap:20px;display:flex}.nav a,.nav button.navitem{font-family:var(--font-ui);font-size:var(--size-ui);cursor:pointer;color:var(--text-secondary);background:0 0;border:none;padding:0;font-weight:400}.nav a:hover,.nav button.navitem:hover{color:var(--text-body)}.nav a.on,.nav button.navitem.on,.nav a.on:hover,.nav button.navitem.on:hover{color:var(--text-body);font-weight:700}.toggle{background:linear-gradient(90deg, var(--ink) 50%, var(--paper) 50%);border:1px solid var(--ink);cursor:pointer;box-sizing:content-box;border-radius:50%;width:14px;height:14px;padding:0}.label{font-family:var(--font-ui);font-size:var(--size-label);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--accent-strong);font-weight:700}.label.secondary{color:var(--accent-2-strong)}.meta{font-family:var(--font-ui);font-size:var(--size-meta);color:var(--text-meta)}.slot{background:repeating-linear-gradient(45deg, var(--accent-tint), var(--accent-tint) 10px, var(--accent-tint-2) 10px, var(--accent-tint-2) 20px);border-radius:var(--radius-m);justify-content:center;align-items:center;display:flex}.slot span{font-family:var(--font-mono);color:#7ba3c9;font-size:9px}.btn{font-family:var(--font-ui);background:var(--accent);color:var(--accent-ink);border-radius:var(--radius-m);cursor:pointer;border:none;padding:8px 16px;font-size:12px;font-weight:700}.btn.sm{padding:6px 13px}.btn.secondary{color:var(--text-body);border:1px solid var(--hairline-strong);background:0 0}.btn.ghost{color:var(--accent-strong);background:0 0;border:none}.feat{padding:10px var(--page-pad) 28px;border-bottom:1px solid var(--hairline);grid-template-columns:290px 1fr;align-items:start;gap:28px;display:grid}.feat .slot{aspect-ratio:1}.feat-text{padding-top:10px}.feat .label{display:block}.feat h2{font-family:var(--font-serif);font-size:var(--size-hero);text-wrap:pretty;max-width:420px;margin:4px 0 0;font-weight:500;line-height:1.18}.feat h2 a{color:var(--text-body)}.feat h2 a:hover{color:var(--accent)}.feat .deck{font-family:var(--font-ui);color:var(--text-secondary);max-width:360px;margin:11px 0 0;font-size:14px;line-height:1.65}.feat .meta{margin-top:13px;font-size:12px;display:block}.grid{padding:26px var(--page-pad) 30px;grid-template-columns:repeat(3,1fr);gap:24px;display:grid}.card .slot{aspect-ratio:16/10}.card .label{margin-top:11px;display:block}.card h3{font-family:var(--font-serif);font-size:var(--size-h3);line-height:var(--leading-card);margin:4px 0 0;font-weight:500}.card h3 a{color:var(--text-body)}.card h3 a:hover{color:var(--accent)}.card .meta{margin-top:6px;display:block}.rows{border-top:1px solid var(--hairline);margin:0 var(--page-pad) 26px;flex-direction:column;gap:12px;padding-top:18px;display:flex}.row{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.row b{font-family:var(--font-serif);font-size:15.5px;font-weight:500}.row b a{color:var(--text-body)}.row b a:hover{color:var(--accent)}.row .meta{flex:none}.allposts{color:var(--accent-strong);font-size:12px;font-weight:700}.news{padding:18px var(--page-pad);background:var(--surface-inverse);color:var(--text-inverse);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.news.compact{box-sizing:border-box;border-radius:var(--radius-l);max-width:640px;margin:0 auto}.news-title{font-size:13.5px;font-weight:700}.news-sub{opacity:.65;margin-top:2px;font-size:11.5px}.news form{align-items:center;gap:8px;display:flex}.news input{font-family:var(--font-ui);color:inherit;border:1px solid var(--hairline-strong);border-radius:var(--radius-m);background:0 0;outline:none;min-width:130px;padding:8px 14px;font-size:11.5px}.crumb{font-size:var(--size-ui);color:var(--accent-strong);padding:18px var(--page-pad) 0;box-sizing:border-box;max-width:640px;margin:0 auto;font-weight:700}.art{max-width:640px;padding:28px var(--page-pad) 40px;margin:0 auto}.art .label{display:block}.art h1{font-family:var(--font-serif);font-size:var(--size-title);margin:8px 0 0;font-weight:500;line-height:1.22}.art .meta{margin:9px 0 20px;display:block}.art p{font-family:var(--font-serif);font-size:var(--size-body);line-height:var(--leading-body);margin:0 0 14px;font-weight:300}.art li{font-family:var(--font-serif);font-size:var(--size-body);line-height:var(--leading-body);font-weight:300}.art ul,.art ol{margin:0 0 14px;padding-left:20px}.art h2{font-family:var(--font-serif);font-size:18px;font-weight:500;line-height:var(--leading-card);margin:26px 0 8px}.art h3{font-family:var(--font-serif);font-size:var(--size-h3);font-weight:500;line-height:var(--leading-card);margin:22px 0 6px}.art blockquote{border-left:1px solid var(--hairline);color:var(--text-secondary);margin:0 0 14px;padding-left:16px}.art strong{font-weight:600}.art hr{border:none;border-top:1px solid var(--hairline);margin:22px 0}.art :not(pre)>code{font-family:var(--font-mono);font-size:var(--size-code)}.art sup{font-size:9px}.art sup a{color:var(--accent-strong);font-size:9px;text-decoration:none}.art-end{border-top:1px solid var(--hairline);justify-content:space-between;align-items:center;gap:16px;margin-top:22px;padding-top:14px;display:flex}.art-end span{color:var(--text-secondary);font-size:12px}.runin{font-family:var(--font-ui);letter-spacing:.06em;text-transform:uppercase;color:var(--text-meta);font-size:12px;font-weight:700}.art p.elsewhere{font-family:var(--font-ui);color:var(--text-meta)}.art p.elsewhere a{color:inherit}.art .footnotes{border-top:1px solid var(--hairline);font-family:var(--font-ui);font-size:var(--size-footnote);color:var(--text-meta);margin-top:22px;padding-top:10px;line-height:1.55}.art .footnotes h2{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.art .footnotes ol{counter-reset:fn;margin:0;padding:0;list-style:none}.art .footnotes li{font-family:var(--font-ui);font-size:var(--size-footnote);counter-increment:fn;font-weight:400;line-height:1.55}.art .footnotes li:before{content:counter(fn) ".";color:var(--accent-strong);margin-right:4px}.art .footnotes p{font-family:var(--font-ui);font-size:var(--size-footnote);margin:0;font-weight:400;line-height:1.55;display:inline}.art .footnotes a[data-footnote-backref]{color:var(--accent-strong);margin-left:4px}.codeblk{border-radius:var(--radius-l);box-shadow:var(--shadow-code);margin:0 0 14px;overflow:hidden}.codehd{background:var(--code-header);justify-content:space-between;align-items:center;padding:7px 14px;display:flex}.codehd i{font-style:normal;font-family:var(--font-mono);color:var(--code-comment);font-size:10.5px}.codehd .copybtn{font-family:var(--font-ui);color:var(--code-comment);border:1px solid var(--code-border);cursor:pointer;background:0 0;border-radius:4px;padding:2px 8px;font-size:10px}.codeblk pre{--astro-code-foreground:var(--code-fg);--astro-code-background:var(--code-panel);--astro-code-token-constant:var(--code-accent);--astro-code-token-string:var(--code-string);--astro-code-token-string-expression:var(--code-string);--astro-code-token-comment:var(--code-comment);--astro-code-token-keyword:var(--code-accent);--astro-code-token-function:var(--code-string);--astro-code-token-parameter:var(--code-fg);--astro-code-token-punctuation:var(--code-comment);--astro-code-token-link:var(--code-string);font-family:var(--font-mono);font-size:var(--size-code);line-height:var(--leading-code);margin:0;padding:13px 16px;overflow-x:auto}.codeblk pre code{font-family:var(--font-mono);font-size:var(--size-code)}@media (width<=800px){.feat,.grid{grid-template-columns:1fr}}
