@font-face{font-family:"Source Serif 4";src:url(/fonts/SourceSerif4-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"Source Serif 4";src:url(/fonts/SourceSerif4-400i.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:"Source Serif 4";src:url(/fonts/SourceSerif4-700.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Switzer;src:url(/fonts/Switzer-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Switzer;src:url(/fonts/Switzer-600.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Switzer;src:url(/fonts/Switzer-700.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-700.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}:root{--paper: oklch(98% .012 85);--paper-subtle: oklch(95% .018 85);--paper-edge: oklch(92% .022 85);--ink: oklch(22% .04 250);--ink-muted: oklch(50% .02 250);--ink-faint: oklch(70% .015 250);--signal: oklch(55% .18 25);--signal-deep: oklch(45% .18 25);--marker: oklch(88% .14 95);--marker-soft: oklch(88% .14 95 / .45);--font-body: "Source Serif 4", ui-serif, Georgia, "Times New Roman", serif;--font-display: "Switzer", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, "Consolas", "Cascadia Mono", monospace;--base: 17px;--leading: 1.6;--leading-h: 1.15;--measure: 100ch;--measure-prose: 70ch;--s-1: .25rem;--s-2: .5rem;--s-3: 1rem;--s-4: 1.5rem;--s-5: 2.5rem;--s-6: 4rem;--s-7: 6rem;--container: calc(var(--measure) + 6rem);--pad-x: var(--s-3);--pad-x-md: var(--s-4);--pad-x-lg: var(--s-5);--hairline: 1px solid var(--paper-edge)}[data-theme=dark]{--paper: oklch(18% .012 250);--paper-subtle: oklch(22% .015 250);--paper-edge: oklch(28% .018 250);--ink: oklch(96% .005 85);--ink-muted: oklch(68% .018 250);--ink-faint: oklch(45% .015 250);--signal: oklch(68% .155 25);--signal-deep: oklch(78% .14 25);--marker: oklch(58% .12 95);--marker-soft: oklch(58% .12 95 / .32)}*,*:before,*:after{box-sizing:border-box}html{font-size:var(--base);background:var(--paper);color:var(--ink);text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;font-family:var(--font-body);font-weight:400;line-height:var(--leading)}::selection{background:var(--marker-soft);color:var(--ink)}.shell{max-width:var(--container);margin:0;padding:var(--s-4) var(--pad-x)}@media(min-width:720px){.shell{padding:var(--s-5) var(--pad-x-md)}}@media(min-width:1024px){.shell{padding:var(--s-5) var(--pad-x-lg)}}.shell>*{max-width:var(--measure)}h1,h2,h3,h4{font-family:var(--font-display);font-weight:700;line-height:var(--leading-h);margin:0;color:var(--ink)}h1{font-size:clamp(2.4rem,4.6vw,3.8rem);font-weight:700;letter-spacing:-.025em;line-height:1.05;margin-block-end:var(--s-3)}h2{font-size:2rem;font-weight:700;letter-spacing:-.015em;line-height:1.15;margin-block-start:var(--s-5);margin-block-end:var(--s-3)}h3{font-size:1.5rem;font-weight:600;letter-spacing:-.01em;line-height:1.2;margin-block-start:var(--s-4);margin-block-end:var(--s-2)}h4{font-size:1.02rem;font-weight:700;margin-block-start:var(--s-4);margin-block-end:var(--s-2)}p,ul,ol{margin-block:var(--s-3)}ul,ol{padding-inline-start:1.4rem}li+li{margin-block-start:var(--s-1)}small,.meta,.label{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--ink-muted)}a{color:inherit;text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px;text-underline-offset:3px;transition:color .12s ease,text-decoration-style .12s ease,text-decoration-thickness .12s ease}a:hover,a:focus-visible{color:var(--signal-deep);text-decoration-style:solid;text-decoration-thickness:2px}a:visited{color:inherit}:focus-visible{outline:2px solid var(--signal);outline-offset:3px}strong,b{font-weight:700}em,i{font-style:italic}code{font-family:var(--font-mono);font-size:.92em;background:var(--paper-subtle);padding:.1rem .3rem;border-radius:2px}pre{font-family:var(--font-mono);font-size:.95rem;line-height:1.55;background:var(--paper-subtle);padding:var(--s-3);margin:var(--s-4) 0;overflow-x:auto;border-radius:0;clear:right}pre code{background:transparent;padding:0;font-size:inherit}.astro-code{position:relative;background:var(--paper-subtle)!important;color:var(--shiki-light, var(--ink))!important;white-space:normal!important;word-break:normal;overflow-wrap:break-word;overflow-x:hidden!important;padding-inline-end:4.5rem}.astro-code .line{display:block;white-space:pre-wrap}.astro-code span{color:var(--shiki-light, inherit)!important}[data-theme=dark] .astro-code,[data-theme=dark] .astro-code span{color:var(--shiki-dark, var(--ink))!important}:is(.post-body pre.astro-code[data-shell],.post-body pre.astro-code[data-language=bash],.post-body pre.astro-code[data-language=sh],.post-body pre.astro-code[data-language=zsh],.post-body pre.astro-code[data-language=powershell],.post-body pre.astro-code[data-language=pwsh],.post-body pre.astro-code[data-language=shell],.post-body pre.astro-code[data-language=console],.post-body pre.astro-code[data-language=cmd]) .line{display:block;padding-inline-start:2ch;text-indent:-2ch}:is(.post-body pre.astro-code[data-shell],.post-body pre.astro-code[data-language=bash],.post-body pre.astro-code[data-language=sh],.post-body pre.astro-code[data-language=zsh],.post-body pre.astro-code[data-language=powershell],.post-body pre.astro-code[data-language=pwsh],.post-body pre.astro-code[data-language=shell],.post-body pre.astro-code[data-language=console],.post-body pre.astro-code[data-language=cmd]) .line:not([data-comment]):before{content:"$ ";color:var(--ink-faint);user-select:none;-webkit-user-select:none}.post-body pre.astro-code[data-numbered]{counter-reset:line}.post-body pre.astro-code[data-numbered] .line{counter-increment:line;display:block;padding-inline-start:4ch;text-indent:-4ch}.post-body pre.astro-code[data-numbered] .line:before{content:counter(line);display:inline-block;width:3ch;margin-inline-end:1ch;padding-inline-end:.6ch;border-inline-end:1px solid var(--ink-faint);color:var(--ink-faint);text-align:right;user-select:none;-webkit-user-select:none}.code-tabs{margin:var(--s-4) 0;clear:right}.code-tabs-list{display:flex;flex-wrap:wrap;gap:0;margin:0;padding:0;width:fit-content;max-width:100%}.code-tabs-tab{background:transparent;border:none;border-block-end:var(--hairline);padding:var(--s-2) var(--s-3);font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--ink-muted);cursor:pointer;transition:color .12s ease,background-color .12s ease}.code-tabs-tab:hover,.code-tabs-tab:focus-visible{color:var(--signal-deep)}.code-tabs-tab.is-active{background:var(--paper-subtle);color:var(--ink)}.code-tabs-panels{margin:0}.code-tabs-panel.astro-code{margin-block-start:0!important}.post-body pre.astro-code[data-code-label]:before{content:attr(data-code-label);display:block;width:max-content;max-width:100%;margin:calc(var(--s-3) * -1) 0 var(--s-3) calc(var(--s-3) * -1);padding:var(--s-2) var(--s-3);border-block-end:var(--hairline);font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--ink-muted)}.post-body pre.code-tabs-panel[data-code-label]:before{display:none}.post-body pre.astro-code .copy-btn{position:absolute;top:var(--s-2);right:var(--s-2);background:var(--paper-subtle);border:none;padding:.15rem .4rem;font-family:var(--font-mono);font-size:.74rem;letter-spacing:.04em;color:var(--ink-muted);cursor:pointer;opacity:0;transition:opacity .12s ease,color .12s ease}.post-body pre.astro-code:hover .copy-btn,.post-body pre.astro-code:focus-within .copy-btn,.post-body pre.astro-code .copy-btn:focus-visible{opacity:1}.post-body pre.astro-code .copy-btn .bracket{color:var(--ink-faint)}.post-body pre.astro-code .copy-btn:hover{color:var(--signal-deep)}@media(prefers-reduced-motion:reduce){.post-body pre.astro-code .copy-btn{opacity:1;transition:none}}blockquote{margin:var(--s-4) 0;padding:var(--s-2) var(--s-3);border-block:var(--hairline);font-style:italic;color:var(--ink-muted)}hr{border:none;border-top:var(--hairline);margin:var(--s-5) 0}img,figure{max-width:100%;height:auto}table{border-collapse:collapse;margin:var(--s-4) 0;width:100%;font-size:.95rem}th,td{border-bottom:var(--hairline);padding:var(--s-2) var(--s-3);text-align:left;vertical-align:top}th{font-family:var(--font-display);font-weight:600;font-size:.85rem;letter-spacing:-.005em;border-bottom:1px solid var(--ink-muted)}td:has(+td:not(:first-child)),td.numeric{font-variant-numeric:tabular-nums}.site-header{display:contents}.site-header-brand{position:sticky;top:0;z-index:3;background:var(--paper);margin-block-start:var(--s-5)}.site-header-subtitle{background:var(--paper)}.site-header-nav{position:sticky;top:var(--site-header-brand-h, 0px);z-index:2;background:var(--paper);border-block-start:var(--hairline);border-block-end:var(--hairline)}.site-header-inner{max-width:var(--container);margin:0;padding:var(--s-4) var(--pad-x);display:flex;flex-direction:column;gap:var(--s-2)}@media(min-width:720px){.site-header-inner{padding:var(--s-4) var(--pad-x-md)}}@media(min-width:1024px){.site-header-inner{padding:var(--s-4) var(--pad-x-lg)}}.site-header-brand .site-header-inner{padding-block:var(--s-2)}.site-header-subtitle .site-header-inner{padding-block:0 var(--s-3)}.site-header-nav .site-header-inner{padding-block:var(--s-2);max-width:none;padding-inline-end:var(--pad-x)}@media(min-width:720px){.site-header-nav .site-header-inner{padding-inline-end:var(--pad-x-md)}}@media(min-width:1024px){.site-header-nav .site-header-inner{padding-inline-end:var(--pad-x-lg)}}.wordmark{font-family:var(--font-mono);font-weight:700;font-size:1.4rem;letter-spacing:-.01em;color:var(--ink);text-decoration:none;display:inline-block;align-self:flex-start}@media(min-width:720px){.wordmark{font-size:1.55rem}}.wordmark:hover,.wordmark:focus-visible{text-decoration:none;color:var(--signal-deep)}.wordmark .signal{color:inherit}.subtitle{font-family:var(--font-body);font-style:italic;font-size:.95rem;line-height:1.4;color:var(--ink-muted);margin:0;max-width:50ch}.site-nav{margin:0}.site-nav ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--s-2);row-gap:var(--s-1);font-family:var(--font-mono);font-size:.82rem;line-height:1.4;letter-spacing:.04em}.site-nav li{display:inline-flex;align-items:baseline}.site-nav li:not(:last-child):not(.theme-toggle-li):after{content:"·";color:var(--ink-faint);margin-inline-start:var(--s-2)}.site-nav .theme-toggle-li{margin-inline-start:auto}.site-nav a,.site-nav button.theme-toggle{display:inline-block;font:inherit;letter-spacing:inherit;color:var(--ink);text-decoration:none;padding:.15rem .4rem;border:none;background:none;border-radius:2px;cursor:pointer}.site-nav a:hover,.site-nav a:focus-visible,.site-nav button.theme-toggle:hover,.site-nav button.theme-toggle:focus-visible{color:var(--signal-deep);background:var(--marker-soft)}.site-nav button.theme-toggle{color:var(--ink-muted)}.site-nav a:hover,.site-nav a:focus-visible{color:var(--signal-deep);background:var(--marker-soft);text-decoration:none}.site-nav a[aria-current=page]{background:var(--marker-soft);color:var(--ink)}.site-footer{margin-block-start:var(--s-7);padding:var(--s-4) 0 var(--s-5);font-family:var(--font-body);font-size:.92rem;color:var(--ink-muted)}.site-footer-inner{max-width:var(--container);margin:0;padding-inline:var(--pad-x);border-block-start:var(--hairline);padding-block-start:var(--s-4);display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-4);align-items:baseline}@media(min-width:720px){.site-footer-inner{padding-inline:var(--pad-x-md)}}@media(min-width:1024px){.site-footer-inner{padding-inline:var(--pad-x-lg)}}.site-footer-inner .colophon{display:inline-flex;flex-wrap:wrap;gap:var(--s-1) var(--s-3);align-items:baseline;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em}.site-footer-inner .signature{font-family:var(--font-body);font-style:italic;font-size:.95rem;margin-inline-end:auto}.listing-intro{margin:0 0 var(--s-5);font-family:var(--font-mono);font-size:.82rem;color:var(--ink-muted);letter-spacing:.04em}.listing-intro .signal{color:var(--signal)}.year-marker{font-family:var(--font-mono);font-size:1.05rem;font-weight:700;letter-spacing:.02em;color:var(--signal);margin:0 0 var(--s-2);display:flex;align-items:baseline;gap:var(--s-3)}.year-marker .count{font-family:var(--font-mono);font-size:.78rem;font-weight:400;letter-spacing:.04em;color:var(--ink-muted)}.year-block+.year-block{margin-block-start:var(--s-5)}.post-list{list-style:none;margin:0;padding:0}.post-row{display:grid;grid-template-columns:max-content max-content 1fr;column-gap:var(--s-3);align-items:baseline;padding:var(--s-2) 0;border-block-end:var(--hairline)}[hidden]{display:none!important}.post-row .row-date{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--ink-muted);white-space:nowrap}.post-row .row-bucket{font-family:var(--font-mono);font-size:.78rem;font-weight:700;letter-spacing:.04em;color:var(--signal);text-transform:uppercase;text-align:left;min-width:4ch;font-variant-numeric:tabular-nums}.post-row .row-bucket.bucket-meta{color:var(--ink-faint)}.post-row .row-title{font-family:var(--font-display);font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--ink);line-height:1.3}.post-row .row-title a{text-decoration:none;color:inherit}.post-row .row-desc{display:block;font-family:var(--font-body);font-style:italic;font-weight:400;font-size:.95rem;line-height:1.5;letter-spacing:normal;color:var(--ink-muted);margin-block-start:var(--s-1);max-width:60ch}.post-row:hover,.post-row:focus-within{background:var(--paper-subtle)}.post-row:hover .row-title a,.post-row:focus-within .row-title a{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}.post-row .row-draft,.row-draft{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.05em;color:var(--ink-muted);background:transparent;padding:0;margin-inline-start:var(--s-2);text-transform:lowercase;vertical-align:baseline}.post-row .row-draft:before,.row-draft:before{content:"[ ";color:var(--ink-faint)}.post-row .row-draft:after,.row-draft:after{content:" ]";color:var(--ink-faint)}.site-filter-bar{border-block-end:var(--hairline)}.site-filter-bar .site-header-inner{padding-block:var(--s-2)}.bucket-filter{display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:center;margin:0;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em}.bucket-filter .label{color:var(--ink-muted)}.bucket-filter a{text-decoration:none;color:var(--signal);padding:.15rem .5rem;border:1px solid transparent;font-weight:700}.bucket-filter a:hover,.bucket-filter a:focus-visible{border-color:var(--signal);background:transparent;color:var(--signal-deep)}.bucket-filter a[aria-current=true]{background:var(--signal);color:var(--paper);border-color:var(--signal)}.bucket-filter .all{color:var(--ink-muted);font-weight:400}.bucket-filter .all[aria-current=true]{background:transparent;color:var(--ink);border-color:var(--paper-edge);background:var(--marker-soft)}.post-header{margin-block-end:var(--s-5)}.post-apparatus{display:flex;flex-wrap:wrap;gap:var(--s-3);margin:0 0 var(--s-3);font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--ink-muted)}.post-apparatus .post-id{color:var(--signal);font-weight:700}.post-apparatus .sep{color:var(--ink-faint)}.bucket-link,.post-footer-nav a{text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px;text-underline-offset:3px;color:inherit}.bucket-name{color:var(--ink-faint)}.bucket-link:hover .bucket-name,.post-footer-nav a:hover .bucket-name{color:var(--signal-deep)}.post-tags .tag-format{color:inherit;text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px;text-underline-offset:3px}.post-tags .tag-format:hover,.post-tags .tag-format:focus-visible{color:var(--signal-deep);text-decoration-style:solid;text-decoration-thickness:2px}.post-title{margin:var(--s-2) 0 var(--s-3)}.post-dek{font-family:var(--font-body);font-style:italic;font-size:1.18rem;line-height:1.5;color:var(--ink-muted);max-width:56ch;margin:0 0 var(--s-4)}.post-tags{font-family:var(--font-mono);font-size:.74rem;letter-spacing:.04em;color:var(--ink-faint);margin:0}.post-tags .tag+.tag:before{content:" · ";color:var(--ink-faint)}.post-footer-nav{margin-block-start:var(--s-6);padding-block-start:var(--s-3);border-block-start:var(--hairline);font-family:var(--font-mono);font-size:.82rem;letter-spacing:.04em;color:var(--ink-muted)}.post-footer-nav .sep{color:var(--ink-faint);margin-inline:var(--s-2)}.post-footer-nav .bracket{color:var(--ink-faint)}.post-body{max-width:var(--measure)}.post-body p,.post-body ul,.post-body ol{font-family:var(--font-body);font-size:1.0625rem;line-height:1.6}.post-body>p,.post-body>ul,.post-body>ol,.post-body>blockquote,.post-body>hr,.post-body>table{max-width:var(--measure-prose)}.post-body>h2,.post-body>h3,.post-body>h4{max-width:35rem}.post-body video{display:block;font-family:var(--font-body);font-size:1.0625rem;max-width:var(--measure-prose);width:100%;height:auto;margin-block:var(--s-4)}.post-body h2:has(+ul)+ul,.post-body h2#method+ul,.method-section ul{list-style:none;padding-inline-start:0;border-block-start:var(--hairline);border-block-end:var(--hairline);padding-block:var(--s-3);margin-block:var(--s-3)}.post-body h2#method+ul li,.method-section ul li,.post-body h2:has(+ul)+ul li{margin-block:var(--s-2);padding-inline-start:var(--s-3);text-indent:-.4ch}.post-body h2#method+ul li>strong:first-child,.post-body .method-section li>strong:first-child{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;font-weight:700;color:var(--signal);text-transform:lowercase;display:inline-block;min-width:11ch}.post-body figure,figure{margin:var(--s-5) 0;padding:var(--s-4);background:var(--paper-subtle);border-radius:2px;clear:right}.post-body figure.breakout{margin-inline:0}figure img{display:block;width:100%;height:auto;border-radius:2px}figure figcaption{font-family:var(--font-body);font-size:.93rem;line-height:1.5;color:var(--ink-muted);margin-block-start:var(--s-2)}figure figcaption:before{content:"Fig " counter(figure) ".";counter-increment:figure;font-family:var(--font-mono);font-size:.78rem;font-weight:700;letter-spacing:.04em;color:var(--signal);margin-inline-end:var(--s-2);text-transform:lowercase}.post-body{counter-reset:figure}.figure-placeholder{font-family:var(--font-mono);font-size:.85rem;color:var(--ink-muted);border:2px dashed var(--paper-edge);padding:var(--s-4) var(--s-3);text-align:center;line-height:1.5;background:var(--paper)}.post-body aside.marginalia,.post-body aside.marginalia p{font-family:var(--font-mono);font-style:normal;font-size:.78rem;letter-spacing:.03em;line-height:1.55;color:var(--ink-muted)}.post-body aside.marginalia{margin-block:var(--s-3);padding:var(--s-2) var(--s-3);border-inline-start:var(--hairline);background:transparent}.post-body aside.marginalia p{margin-block:.5em}.post-body aside.marginalia p:first-child{margin-top:0}.post-body aside.marginalia p:last-child{margin-bottom:0}@media(min-width:1024px){.post-body aside.marginalia{float:right;clear:right;width:calc(var(--measure) - var(--measure-prose) - 2.5rem);max-width:26ch;margin-block:.4rem var(--s-4);margin-inline:var(--s-4) 0;padding:0 0 0 var(--s-3)}}.about-body{max-width:var(--measure);font-family:var(--font-body)}.about-body table{font-family:var(--font-body);font-size:.98rem}.about-body td:first-child{font-family:var(--font-mono);font-size:.85rem;font-weight:700;color:var(--signal);width:4ch;text-align:center;vertical-align:middle}.notfound{max-width:var(--measure);margin:var(--s-7) auto;padding:0 var(--s-4)}.notfound .stamp{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--signal);text-transform:uppercase;margin:0 0 var(--s-2)}.notfound h1{margin-block-end:var(--s-3)}.notfound p{font-family:var(--font-body);color:var(--ink-muted);max-width:56ch}.theme-toggle .bracket{color:var(--ink-faint)}*{scrollbar-color:var(--ink-faint) transparent;scrollbar-width:thin}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:0ms!important;animation-duration:0ms!important;animation-iteration-count:1!important}}
