:root{--font-body:"EB Garamond", ui-serif, Georgia, "Times New Roman", serif;--font-heading:"EB Garamond", ui-serif, Georgia, "Times New Roman", serif;--font-logo:"EB Garamond", ui-serif, Georgia, serif}code,pre,kbd,samp{font-family:jetbrains mono,ui-monospace,SFMono-Regular,sf mono,Menlo,Consolas,liberation mono,monospace}:root{--bg:#f4ebdd;--text:#231f1a;--body-text:#2e2820;--bio-text:#3a3228;--muted:#857a66;--border:#d9ccb8;--hover-bg:#ece0cb;--hover-bg-2:#e5d7bf;--footer-text:#b3a58c;--tag-bg:#ece0cb;--badge-text:#9c4f28}:root[data-theme=dark]{--bg:#1c1712;--text:#ece1cf;--body-text:#ddd0ba;--bio-text:#cabfa8;--muted:#9a8c74;--border:#33291f;--hover-bg:#2a2118;--hover-bg-2:#342a1e;--footer-text:#4a3f30;--tag-bg:#241d15;--badge-text:#d98a5c}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#1c1712;--text:#ece1cf;--body-text:#ddd0ba;--bio-text:#cabfa8;--muted:#9a8c74;--border:#33291f;--hover-bg:#2a2118;--hover-bg-2:#342a1e;--footer-text:#4a3f30;--tag-bg:#241d15;--badge-text:#d98a5c}}body{font-size:17px;line-height:1.7;font-feature-settings:"onum" 1,"pnum" 1,"kern" 1}.prose{font-size:1.02rem;line-height:1.8;font-feature-settings:"onum" 1,"pnum" 1,"kern" 1,"liga" 1,"dlig" 1}.prose h2,.prose h3,.prose h4{font-variant:small-caps;font-feature-settings:"smcp" 1,"onum" 1,"kern" 1;letter-spacing:.06em;font-weight:500}.article-header h1{letter-spacing:.01em;font-weight:500;line-height:1.2}.article-meta{font-variant:small-caps;letter-spacing:.07em;font-feature-settings:"smcp" 1,"lnum" 1}.article .prose>p:first-child::first-letter{float:left;font-family:var(--font-heading);font-size:3.4em;line-height:.78;font-weight:500;color:var(--text);padding:.02em .09em 0 0;margin-top:.02em}.prose hr{border:0;height:0;margin:2.75em 0;position:relative;overflow:visible}.prose hr::before{content:"";position:absolute;left:50%;top:0;transform:translateX(-50%);width:46%;height:3px;background:linear-gradient(var(--border),var(--border))0/37% 1px no-repeat,linear-gradient(var(--text),var(--text))50%/16% 3px no-repeat,linear-gradient(var(--border),var(--border))100%/37% 1px no-repeat}.prose img{border:1px solid var(--border);border-radius:2px;background:#fff;padding:.35rem}.prose blockquote{font-family:var(--font-body)}.katex{color:var(--text)}.code-block{border-radius:3px}.code-block-header{background:var(--hover-bg-2)}.prose pre{font-feature-settings:normal}.chroma{background-color:var(--tag-bg)}.chroma .n{color:#2e2820}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kc,.chroma .kr,.chroma .kt,.chroma .kp{color:#9c3f1f}.chroma .nb{color:#35566b}.chroma .nf,.chroma .fm{color:#7a5230}.chroma .nc,.chroma .nn,.chroma .nd{color:#7a5230}.chroma .s,.chroma .s1,.chroma .s2,.chroma .sb,.chroma .sd,.chroma .sc,.chroma .se,.chroma .sh{color:#4f6b3a}.chroma .c,.chroma .c1,.chroma .cm,.chroma .cs,.chroma .ch{color:#9a8c74;font-style:italic}.chroma .mi,.chroma .mf,.chroma .mh,.chroma .mo,.chroma .il{color:#8a5a2b}.chroma .o,.chroma .ow{color:#6b5d4a}.chroma .p{color:#5a5040}:root[data-theme=dark] .chroma .n{color:#ddd0ba}:root[data-theme=dark] .chroma .k,:root[data-theme=dark] .chroma .kd,:root[data-theme=dark] .chroma .kn,:root[data-theme=dark] .chroma .kc,:root[data-theme=dark] .chroma .kr,:root[data-theme=dark] .chroma .kt,:root[data-theme=dark] .chroma .kp{color:#e08a5c}:root[data-theme=dark] .chroma .nb{color:#7fb0c4}:root[data-theme=dark] .chroma .nf,:root[data-theme=dark] .chroma .fm,:root[data-theme=dark] .chroma .nc,:root[data-theme=dark] .chroma .nn,:root[data-theme=dark] .chroma .nd{color:#cbb488}:root[data-theme=dark] .chroma .s,:root[data-theme=dark] .chroma .s1,:root[data-theme=dark] .chroma .s2,:root[data-theme=dark] .chroma .sb,:root[data-theme=dark] .chroma .sd,:root[data-theme=dark] .chroma .sc,:root[data-theme=dark] .chroma .se,:root[data-theme=dark] .chroma .sh{color:#a9b87a}:root[data-theme=dark] .chroma .c,:root[data-theme=dark] .chroma .c1,:root[data-theme=dark] .chroma .cm,:root[data-theme=dark] .chroma .cs,:root[data-theme=dark] .chroma .ch{color:#8a7d64;font-style:italic}:root[data-theme=dark] .chroma .mi,:root[data-theme=dark] .chroma .mf,:root[data-theme=dark] .chroma .mh,:root[data-theme=dark] .chroma .mo,:root[data-theme=dark] .chroma .il{color:#d0a06a}:root[data-theme=dark] .chroma .o,:root[data-theme=dark] .chroma .ow{color:#b0a389}:root[data-theme=dark] .chroma .p{color:#a89b83}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .chroma .n{color:#ddd0ba}:root:not([data-theme=light]) .chroma .k,:root:not([data-theme=light]) .chroma .kd,:root:not([data-theme=light]) .chroma .kn,:root:not([data-theme=light]) .chroma .kc,:root:not([data-theme=light]) .chroma .kr,:root:not([data-theme=light]) .chroma .kt,:root:not([data-theme=light]) .chroma .kp{color:#e08a5c}:root:not([data-theme=light]) .chroma .nb{color:#7fb0c4}:root:not([data-theme=light]) .chroma .nf,:root:not([data-theme=light]) .chroma .fm,:root:not([data-theme=light]) .chroma .nc,:root:not([data-theme=light]) .chroma .nn,:root:not([data-theme=light]) .chroma .nd{color:#cbb488}:root:not([data-theme=light]) .chroma .s,:root:not([data-theme=light]) .chroma .s1,:root:not([data-theme=light]) .chroma .s2,:root:not([data-theme=light]) .chroma .sb,:root:not([data-theme=light]) .chroma .sd,:root:not([data-theme=light]) .chroma .sc,:root:not([data-theme=light]) .chroma .se,:root:not([data-theme=light]) .chroma .sh{color:#a9b87a}:root:not([data-theme=light]) .chroma .c,:root:not([data-theme=light]) .chroma .c1,:root:not([data-theme=light]) .chroma .cm,:root:not([data-theme=light]) .chroma .cs,:root:not([data-theme=light]) .chroma .ch{color:#8a7d64;font-style:italic}:root:not([data-theme=light]) .chroma .mi,:root:not([data-theme=light]) .chroma .mf,:root:not([data-theme=light]) .chroma .mh,:root:not([data-theme=light]) .chroma .mo,:root:not([data-theme=light]) .chroma .il{color:#d0a06a}:root:not([data-theme=light]) .chroma .o,:root:not([data-theme=light]) .chroma .ow{color:#b0a389}:root:not([data-theme=light]) .chroma .p{color:#a89b83}}.marimo-embed{margin:1.5rem 0;border:1px solid var(--border);border-radius:6px;overflow:hidden}.toc{width:var(--toc-w)}.toc-link{font-size:.85rem}.logo-letters:hover span,.logo-letters.intro span{animation:none}:root{--topnav-h:3.5rem;--column-w:720px;--toc-w:200px}.content{max-width:var(--column-w);margin:0 auto}.home-intro{margin-bottom:3rem}@media(min-width:1280px){.toc{right:max(2rem,calc((100vw - var(--column-w))/2 - var(--toc-w) - 2.5rem))}}.topnav{position:sticky;top:0;z-index:45;height:var(--topnav-h);background:var(--bg);border-bottom:1px solid var(--border);transition:transform .2s ease,background .15s ease}.topnav.topnav-hidden{transform:translateY(-100%)}.topnav-inner{display:flex;align-items:center;justify-content:space-between;height:100%;max-width:1200px;margin:0 auto;padding:0 1.25rem}.topnav-title{font-family:var(--font-logo);font-size:1.1rem;color:var(--text);letter-spacing:.02em;white-space:nowrap}.topnav-actions,.topnav-social{display:flex;align-items:center;gap:.15rem}.topnav .topnav-btn{display:flex;align-items:center;gap:.4rem;height:32px;min-width:32px;justify-content:center;margin:0;padding:0 .5rem;border-radius:4px;color:var(--bio-text);font-size:.82rem;transition:background .1s ease}.topnav .topnav-btn:hover{background:var(--hover-bg-2)}.topnav .topnav-btn svg{width:15px;height:15px;flex-shrink:0}.topnav kbd{font-family:var(--font-body);font-size:.7rem;line-height:1;color:var(--muted);border:1px solid var(--border);border-radius:3px;padding:.15rem .35rem}.topnav-sep{width:1px;height:18px;background:var(--border);margin:0 .4rem}.topnav-menu{position:absolute;top:calc(var(--topnav-h) + .25rem);right:1rem;display:flex;flex-direction:column;gap:.15rem;min-width:180px;padding:.5rem;background:var(--bg);border:1px solid var(--border);border-radius:8px;box-shadow:0 10px 34px rgba(0,0,0,.18);z-index:50;opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .15s ease,transform .15s ease,visibility .15s}.topnav-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}.topnav-menu a{display:flex;align-items:center;gap:.5rem;padding:.4rem .5rem;border-radius:4px;color:var(--bio-text);font-size:.85rem}.topnav-menu a:hover{background:var(--hover-bg-2)}.topnav-menu svg{width:15px;height:15px}.topnav-backdrop{position:fixed;inset:0;z-index:49}.content{padding:2.5rem 1.5rem 5rem}@media(max-width:899px){.topnav-text span,.topnav kbd,.topnav-social,.topnav-sep{display:none}}@media(min-width:900px){.topnav-more,.topnav-menu,.topnav-backdrop{display:none!important}.content{padding:3.5rem 3.5rem 6rem}.toc.toc-pinned{top:calc(var(--topnav-h) + 1.5rem)}}