@font-face{font-family:fraunces;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/Fraunces-normal.woff2)format('woff2')}@font-face{font-family:jetbrains mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(/fonts/JetBrainsMono-normal.woff2)format('woff2')}@font-face{font-family:newsreader;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/Newsreader-italic.woff2)format('woff2')}@font-face{font-family:newsreader;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/Newsreader-normal.woff2)format('woff2')}:root{--bg:#131211;--ink:#e8e5de;--muted:#9c988f;--rule:#35322e;--accent:#d9776b;--surface:#1c1b19;--serif:"Newsreader", "Iowan Old Style", "Palatino Linotype", Charter, Georgia, serif;--display:"Fraunces", "Iowan Old Style", Georgia, serif;--mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--measure:40rem;--s1:.25rem;--s2:.5rem;--s3:1rem;--s4:1.5rem;--s5:2.5rem;--s6:4rem;color-scheme:light dark}@media(prefers-color-scheme:light){:root{--bg:#f7f5f0;--ink:#1a1917;--muted:#6b6862;--rule:#dcd8cf;--accent:#a8453a;--surface:#efece5}}*{box-sizing:border-box}html{background:var(--bg);color:var(--ink);font:1.125rem/1.6 var(--serif);font-optical-sizing:auto;-webkit-text-size-adjust:100%}body{margin:0;padding:var(--s4)var(--s3)var(--s6)}main{max-width:var(--measure);margin:0 auto}h1,h2,h3,p,ul,ol,dl,figure,pre,table,blockquote{margin:0 0 var(--s3)}a{color:inherit;text-decoration:underline;text-decoration-color:var(--muted);text-underline-offset:.15em;text-decoration-thickness:1px}a:hover{text-decoration-color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}img{max-width:100%;height:auto}.mono{font-family:var(--mono);font-size:.8125rem;letter-spacing:0;font-variant-numeric:tabular-nums}html{font-variant-numeric:oldstyle-nums}td,.date,.meta,.post-head{font-variant-numeric:tabular-nums lining-nums}.skip{position:absolute;left:-999px}.skip:focus{left:var(--s3);top:var(--s3);background:var(--bg);padding:var(--s2)}.display{font-family:var(--display);font-weight:500;font-variation-settings:"SOFT" 60,"WONK" 1;letter-spacing:-.01em;line-height:1.15;font-size:2.25rem;margin-bottom:var(--s3)}h2.label,.label{font:600 .8125rem/1 var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink);margin:0 0 var(--s4)}.label::after{content:"";display:block;width:2rem;height:2px;background:var(--accent);margin-top:var(--s2)}.meta{color:var(--muted);margin:0 0 var(--s2)}h3{font:600 1.125rem/1.3 var(--serif);margin:0 0 var(--s1)}.prose h2{font:500 1.5rem/1.25 var(--display);font-variation-settings:"SOFT" 40;margin:var(--s5)0 var(--s3)}.prose h3{font:600 1.125rem/1.3 var(--serif);margin:var(--s4)0 var(--s2)}.site-header{max-width:var(--measure);margin:0 auto var(--s6);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--s2)var(--s3)}.brand{font-family:var(--display);font-weight:500;text-decoration:none}.site-header nav{display:flex;align-items:center;gap:var(--s3);font-family:var(--mono);font-size:.8125rem}.site-header nav a{text-decoration:none;color:var(--muted)}.site-header nav a:hover,.site-header nav a[aria-current]{color:var(--ink)}.site-header nav a[aria-current]{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:.35em}.site-footer{max-width:var(--measure);margin:var(--s6)auto 0;padding-top:var(--s3);border-top:1px solid var(--rule);color:var(--muted);font-size:.7rem}.foot-row{display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--s2)}.site-footer a{text-decoration:none}.site-footer a:hover{text-decoration:underline}.foot-row .social{margin:0;justify-content:flex-start;align-items:center;gap:.6rem}.foot-row .social img{width:16px;height:16px}section{margin-bottom:var(--s6)}.identity::after{content:"";display:block;clear:both}.identity{margin-bottom:var(--s4)}.identity .side{float:left;width:13rem;margin:.35rem var(--s4)var(--s3)0;text-align:center}.pics{position:relative;width:100%;height:16rem;overflow:hidden;border-radius:8px;background:var(--surface)}.track{display:flex;height:100%;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.track::-webkit-scrollbar{display:none}.track img{display:block;flex:0 0 100%;height:100%;object-fit:cover;scroll-snap-align:start;scroll-snap-stop:always}.cap{color:var(--muted);font-size:.75rem;margin:var(--s2)0 0}.next{position:absolute;top:50%;right:.4rem;transform:translateY(-50%);width:1.7rem;height:1.7rem;border:0;border-radius:50%;background:rgba(0,0,0,.45);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:1rem;padding:0}.next:hover{background:rgba(0,0,0,.7)}.rows{list-style:none;padding:0}.rows li{display:grid;grid-template-columns:5.5rem 1fr;gap:var(--s3);margin-bottom:var(--s2)}.cv li{grid-template-columns:9.5rem 1fr;margin-bottom:var(--s3)}.cv strong{font-weight:600}.cv .role,.cv .what{display:block}.cv .what{color:var(--muted);font-size:.95rem;line-height:1.5;margin-top:.1em}.date{color:var(--muted);padding-top:.3em}.tag{display:inline-block;border:1px solid var(--rule);border-radius:4px;padding:0 .5em;text-decoration:none;color:var(--muted);font-size:.75rem;margin-right:var(--s1)}.tag:hover{border-color:var(--accent);color:var(--ink)}.rows .tag{vertical-align:.1em}.meta.inline{display:inline;margin:0 .25em 0 .35em}figure{margin:var(--s4)0}figcaption{color:var(--muted);margin-top:var(--s2)}pre{background:var(--surface);padding:var(--s3);border-radius:6px;overflow-x:auto;font:.8125rem/1.5 var(--mono)}code{font-family:var(--mono);font-size:.875em}table{border-collapse:collapse;width:100%;font-size:.95rem}th,td{padding:.35em .6em;border-bottom:1px solid var(--rule);text-align:left}th{font:500 .75rem var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.katex-display{overflow-x:auto;overflow-y:hidden;padding:.6rem 0}.footnotes{font-size:.95rem;color:var(--muted);margin-top:var(--s5)}.footnotes hr{border:0;border-top:1px solid var(--rule)}blockquote{border-left:2px solid var(--rule);padding-left:var(--s3);color:var(--muted)}.post-head{margin-bottom:var(--s5)}.toc ul{list-style:none;padding:0;margin:0;font:.8125rem/1.5 var(--mono)}.toc ul ul{padding-left:var(--s3)}.toc a{text-decoration:none;color:var(--muted);display:block;padding:.15em 0}.toc a:hover,.toc a[aria-current]{color:var(--ink)}.toc a[aria-current]{color:var(--accent)}.sn-check{display:none}.sn-toggle{counter-increment:sidenote;cursor:pointer}.sn-toggle::after{content:counter(sidenote);vertical-align:super;font:.7rem var(--mono);color:var(--accent);margin-left:1px}.sidenote{font:.875rem/1.45 var(--serif);color:var(--muted)}.sidenote::before{content:counter(sidenote)" ";font:.7rem var(--mono);color:var(--accent)}main.post{counter-reset:sidenote}.toc summary{list-style:none;cursor:default;pointer-events:none}.toc summary::-webkit-details-marker{display:none}@media(max-width:1099px){.toc{margin-bottom:var(--s5)}.toc summary{cursor:pointer;pointer-events:auto}.toc summary::after{content:" +"}.toc[open] summary::after{content:" \2212"}.sidenote{display:none;margin:var(--s2)0;padding-left:var(--s3);border-left:2px solid var(--rule)}.sn-check:checked+.sidenote{display:block}}@media(min-width:1100px){main.post{--side:min(12rem, calc((100vw - var(--measure) - 2 * var(--s5) - 2 * var(--s3)) / 2));max-width:none;display:grid;grid-template-columns:var(--side)var(--measure)var(--side);gap:var(--s5);justify-content:center}main.post .toc{grid-column:1;width:var(--side);position:sticky;top:var(--s4);align-self:start}main.post .prose{grid-column:2;min-width:0}.sidenote{float:right;clear:right;width:var(--side);margin-right:calc(-1 * var(--side) - var(--s5));margin-bottom:var(--s2)}}.post-foot{margin-top:var(--s6);padding-top:var(--s3);border-top:1px solid var(--rule)}.cite summary{cursor:pointer;color:var(--muted)}.cite pre{margin-top:var(--s2)}.pager{display:flex;justify-content:space-between;gap:var(--s3);margin-top:var(--s3)}.pager a{text-decoration:none;color:var(--muted)}.footnote-ref{font:.7rem var(--mono)}.footnote-ref::before{content:"["}.footnote-ref::after{content:"]"}.brand .logo{display:block;height:28px;width:auto}@media(prefers-color-scheme:dark){.brand .logo{filter:invert(1)}}.flags{margin:var(--s2)0 0;display:flex;justify-content:center;gap:.5rem}.flags img{width:20px;height:20px;border-radius:3px}.social{margin:var(--s2)0 0;display:flex;justify-content:center;gap:.85rem}.social a{opacity:.6}.social a:hover{opacity:1}.social img{width:22px;height:22px;display:block}@media(prefers-color-scheme:dark){.social img{filter:invert(1)}}.prose{counter-reset:eq}.katex-display{position:relative;counter-increment:eq}.katex-display .katex{font-size:1.1em}.katex-display::after{content:"(" counter(eq)")";position:absolute;right:.25rem;top:50%;transform:translateY(-50%);font:.75rem var(--mono);color:var(--muted);font-variant-numeric:tabular-nums}.btn{list-style:none;cursor:pointer;color:var(--muted);display:inline-block;border:1px solid var(--rule);border-radius:4px;padding:.15em .7em;margin-top:var(--s2);text-decoration:none}.btn::-webkit-details-marker{display:none}.btn:hover{border-color:var(--accent);color:var(--ink)}.more .more-close,.more[open] .more-open{display:none}.more[open] .more-close{display:inline}.more[open]{display:flex;flex-direction:column;align-items:flex-start}.more[open] summary{order:2}.more .rows{margin:var(--s2)0 0;align-self:stretch}h3.sub{font:500 .9375rem/1.3 var(--mono);color:var(--ink);margin:var(--s4)0 var(--s3)}.katex-display{padding:.6rem 2.5rem;margin:var(--s4)0}.katex-display>.katex{text-align:center}.prose table{display:block;overflow-x:auto}.prose+section{margin-top:var(--s5)}@media(max-width:640px){.display{font-size:1.85rem}.prose h2{font-size:1.3rem}pre{font-size:.75rem}.identity .side{float:none;margin:0 auto var(--s3)}.cv li{grid-template-columns:5.5rem 1fr}.katex-display{padding:.6rem 0}.katex-display .katex{font-size:1em}.katex-display::after{position:static;transform:none;display:block;text-align:right;margin-top:var(--s1)}}.katex{line-height:1.2}.prose p{line-height:1.65}.toc{position:relative;padding-left:.75rem}.progress{position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--rule);border-radius:1px}.progress i{display:block;width:100%;height:0;background:var(--accent);border-radius:1px;transition:height .1s linear}.plot-wrap{margin:var(--s4)0}.plot{width:100%}.plot-wrap figcaption{color:var(--muted);margin-top:var(--s2)}.highlight pre{margin:0}.flag{display:inline-block;font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);border:1px solid var(--accent);border-radius:3px;padding:0 .4em;margin-left:.35em;vertical-align:.15em}