.post-toc-wrap:where(.astro-ukv4ggcy){position:fixed;top:8rem;right:max(clamp(1.5rem,4vw,4rem),calc(50% - 40rem));z-index:40;pointer-events:none}@media (max-width: 1023px){.post-toc-wrap:where(.astro-ukv4ggcy){display:none}}.post-toc:where(.astro-ukv4ggcy){pointer-events:auto;margin-right:.25rem;display:inline-flex;flex-direction:column;align-items:flex-start;border-radius:.5rem;padding:.5rem;cursor:pointer;transition:background-color .15s ease,box-shadow .15s ease,padding .15s ease}.post-toc:where(.astro-ukv4ggcy)[data-open=false]:hover{background-color:var(--surface-2)}.post-toc:where(.astro-ukv4ggcy)[data-open=true]{cursor:default;width:15rem;padding:1.25rem;background-color:var(--surface-1);box-shadow:0 10px 15px -3px #0f16201a,0 4px 6px -4px #0f16201a,0 0 0 1px var(--ink-6)}.toc-list:where(.astro-ukv4ggcy){list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.post-toc:where(.astro-ukv4ggcy)[data-open=true] .toc-list:where(.astro-ukv4ggcy){gap:.125rem}.toc-item:where(.astro-ukv4ggcy).depth-2{padding-left:0}.toc-item:where(.astro-ukv4ggcy).depth-3{padding-left:.25rem}.toc-item:where(.astro-ukv4ggcy).depth-4{padding-left:.5rem}.toc-link:where(.astro-ukv4ggcy){display:flex;align-items:flex-start;padding:.1rem 0;text-decoration:none}.post-toc:where(.astro-ukv4ggcy)[data-open=true] .toc-link:where(.astro-ukv4ggcy){cursor:pointer}.toc-line:where(.astro-ukv4ggcy){height:2px;border-radius:9999px;background-color:var(--ink-6);transition:width .15s ease,opacity .15s ease,background-color .15s ease}.depth-2:where(.astro-ukv4ggcy) .toc-line:where(.astro-ukv4ggcy){width:.75rem}.depth-3:where(.astro-ukv4ggcy) .toc-line:where(.astro-ukv4ggcy){width:.5rem}.depth-4:where(.astro-ukv4ggcy) .toc-line:where(.astro-ukv4ggcy){width:.375rem}.post-toc:where(.astro-ukv4ggcy)[data-open=true] .toc-line:where(.astro-ukv4ggcy){width:0;opacity:0}.toc-label:where(.astro-ukv4ggcy){font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:0;line-height:1;color:var(--ink-3);opacity:0;transition:opacity .15s ease,font-size .15s ease,color .15s ease}.post-toc:where(.astro-ukv4ggcy)[data-open=true] .toc-label:where(.astro-ukv4ggcy){font-size:.75rem;line-height:1.35;opacity:1}.post-toc:where(.astro-ukv4ggcy)[data-open=true] :where(.astro-ukv4ggcy)[data-toc-link][data-depth="3"] .toc-label:where(.astro-ukv4ggcy){margin-left:1rem}.post-toc:where(.astro-ukv4ggcy)[data-open=true] :where(.astro-ukv4ggcy)[data-toc-link][data-depth="4"] .toc-label:where(.astro-ukv4ggcy){margin-left:2rem}.post-toc:where(.astro-ukv4ggcy)[data-open=true] :where(.astro-ukv4ggcy)[data-toc-link]:hover .toc-label:where(.astro-ukv4ggcy){color:var(--ink-1)}.post-toc:where(.astro-ukv4ggcy) :where(.astro-ukv4ggcy)[data-toc-link][data-active=true] .toc-line:where(.astro-ukv4ggcy){background-color:var(--accent)}.post-toc:where(.astro-ukv4ggcy)[data-open=true] :where(.astro-ukv4ggcy)[data-toc-link][data-active=true] .toc-label:where(.astro-ukv4ggcy){color:var(--ink-1);font-weight:600}.post:where(.astro-7jjqptxk){max-width:80rem;margin:3rem auto;padding:clamp(2.5rem,5vw,4rem) clamp(1.5rem,5vw,4rem);background:var(--surface-1);border:1px solid var(--ink-6);border-radius:1.25rem;box-shadow:0 6px 16px #0f16200f}.post-head:where(.astro-7jjqptxk){max-width:40rem;margin:0 auto}.post-back:where(.astro-7jjqptxk){font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.75rem;letter-spacing:.04em;color:var(--ink-4);text-decoration:none;transition:color .15s ease}.post-back:where(.astro-7jjqptxk):hover{color:var(--accent)}.post-title:where(.astro-7jjqptxk){font-family:Marcellus,ui-serif,Georgia,Times New Roman,serif;font-weight:400;font-size:clamp(2rem,4.5vw,3rem);line-height:1.12;letter-spacing:-.005em;color:var(--ink-1);margin:1.25rem 0 0}.post-meta:where(.astro-7jjqptxk){display:flex;align-items:center;gap:.6rem;margin-top:1.5rem;padding-bottom:2rem;border-bottom:1px solid var(--ink-6);font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.75rem;color:var(--ink-4)}.post-meta:where(.astro-7jjqptxk) a:where(.astro-7jjqptxk){color:var(--accent);text-decoration:none}.post-meta:where(.astro-7jjqptxk) a:where(.astro-7jjqptxk):hover{color:var(--accent-high)}.post-meta-sep:where(.astro-7jjqptxk){color:var(--ink-6)}.post-foot:where(.astro-7jjqptxk){max-width:40rem;margin:3rem auto 0;padding-top:2rem;border-top:1px solid var(--ink-6)}.post-body:where(.astro-7jjqptxk){margin-top:2.5rem;font-family:Inter,system-ui,sans-serif;font-size:1.0625rem;line-height:1.7;color:var(--ink-2)}.post-body:where(.astro-7jjqptxk)>*{max-width:40rem;margin-inline:auto}.post-body:where(.astro-7jjqptxk) p{margin-block:0 1.4rem}.post-body:where(.astro-7jjqptxk) a{color:var(--accent-high);text-decoration:underline;text-underline-offset:.15em;text-decoration-thickness:1px;text-decoration-color:var(--ink-6);transition:text-decoration-color .15s ease}.post-body:where(.astro-7jjqptxk) a:hover{text-decoration-color:var(--accent)}.url-tooltip{position:fixed;z-index:1000;display:flex;align-items:center;gap:.4rem;max-width:min(32rem,calc(100vw - 1rem));padding:.3rem .55rem;border-radius:.4rem;background:var(--surface-0, #fff);border:1px solid var(--ink-6);color:var(--accent-high);font-family:JetBrains Mono,ui-monospace,monospace;font-size:.7rem;line-height:1.4;word-break:break-all;box-shadow:0 4px 16px #0000001f;opacity:0;transform:translateY(.25rem);transition:opacity .12s ease,transform .12s ease;pointer-events:none}.url-tooltip svg{flex:none;width:.85em;height:.85em;stroke:currentColor}.url-tooltip .url-tooltip-text{min-width:0}.url-tooltip.is-visible{opacity:1;transform:translateY(0)}.post-body:where(.astro-7jjqptxk) h2,.post-body:where(.astro-7jjqptxk) h3,.post-body:where(.astro-7jjqptxk) h4{font-family:Marcellus,ui-serif,Georgia,Times New Roman,serif;font-weight:400;color:var(--ink-1);line-height:1.2;letter-spacing:-.005em;scroll-margin-top:5rem}.post-body:where(.astro-7jjqptxk) h2{font-size:1.75rem;margin-block:3rem 1.25rem;padding-bottom:.45rem;border-bottom:1px solid var(--ink-6)}.post-body:where(.astro-7jjqptxk) h3{font-size:1.375rem;margin-block:2.5rem .85rem}.post-body:where(.astro-7jjqptxk) h4{font-size:1.125rem;margin-block:2rem .75rem}.post-body:where(.astro-7jjqptxk) .heading-anchor{margin-left:.4em;text-decoration:none;color:var(--ink-5);opacity:0;transition:opacity .15s ease,color .15s ease}.post-body:where(.astro-7jjqptxk) .heading-anchor:before{content:"#"}.post-body:where(.astro-7jjqptxk) h2:hover .heading-anchor,.post-body:where(.astro-7jjqptxk) h3:hover .heading-anchor,.post-body:where(.astro-7jjqptxk) h4:hover .heading-anchor,.post-body:where(.astro-7jjqptxk) .heading-anchor:focus{opacity:1}.post-body:where(.astro-7jjqptxk) .heading-anchor:hover{color:var(--accent)}.post-body:where(.astro-7jjqptxk) ul,.post-body:where(.astro-7jjqptxk) ol{margin-block:0 1.4rem;padding-left:0;list-style:none}.post-body:where(.astro-7jjqptxk) ol{counter-reset:li-marker}.post-body:where(.astro-7jjqptxk) li{position:relative;margin:.4rem 0;padding-left:1.5em}.post-body:where(.astro-7jjqptxk) li:before{position:absolute;left:0;color:var(--ink-3)}.post-body:where(.astro-7jjqptxk) ol>li:before{counter-increment:li-marker;content:counter(li-marker) "."}.post-body:where(.astro-7jjqptxk) ul>li:before{content:"•"}.post-body:where(.astro-7jjqptxk) li ul,.post-body:where(.astro-7jjqptxk) li ol{margin-block:.4rem 0}.post-body:where(.astro-7jjqptxk) blockquote{margin-block:1.8rem;padding:.25rem 0 .25rem 1.25rem;border-left:2px solid var(--accent);color:var(--ink-3);font-style:italic}.post-body:where(.astro-7jjqptxk) .admonition{margin-block:1.8rem;padding:1rem 1.25rem;border:1px solid var(--ink-6);border-left:3px solid var(--accent);background-color:var(--surface-2);color:var(--ink-2)}.post-body:where(.astro-7jjqptxk) .admonition>:last-child{margin-bottom:0}.post-body:where(.astro-7jjqptxk) .admonition-title{margin:0 0 .4rem;font-family:Inter,system-ui,sans-serif;font-size:.7rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-high)}.post-body:where(.astro-7jjqptxk) img{max-width:100%;height:auto;border-radius:.5rem;display:block;margin:2rem auto}.post-body:where(.astro-7jjqptxk) hr{border:0;border-top:1px solid var(--ink-6);margin-block:3rem}.post-body:where(.astro-7jjqptxk) :not(pre)>code{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85em;padding:.1em .35em;border:1px solid var(--ink-6);border-radius:.25rem;background-color:var(--surface-2);color:var(--accent-high)}.post-body:where(.astro-7jjqptxk) pre{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem;line-height:1.6;padding:1rem 1.15rem;border:1px solid var(--ink-6);border-radius:.75rem;overflow-x:auto;margin:0 0 1.6rem}.post-body:where(.astro-7jjqptxk) pre code{font-size:inherit}@font-face{font-family:JetBrains Mono Full;src:url(/fonts/JetBrainsMono-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}.post-body:where(.astro-7jjqptxk) pre[data-language=ascii-art]{--ec-codeLineHt: 1.33;--ec-codeFontFml: "JetBrains Mono Full", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;font-variant-ligatures:none;font-size:clamp(.3rem,1.5vw,.7rem)}.post-body:where(.astro-7jjqptxk) pre[data-language=ascii-art] .ec-line .code{white-space:pre;overflow-wrap:normal;word-break:normal}.post-body:where(.astro-7jjqptxk) pre[data-language=ascii-art]>code{flex:none;width:max-content;max-width:100%;margin-inline:auto}.post-body:where(.astro-7jjqptxk)>.expressive-code:has(pre[data-language=ascii-art]),.post-body:where(.astro-7jjqptxk)>iframe{max-width:53rem}.post-body:where(.astro-7jjqptxk) .fig-caption{margin:-.6rem auto 2.2rem;max-width:36rem;text-align:center;font-family:Inter,system-ui,sans-serif;font-size:.85rem;line-height:1.5;font-style:normal;color:var(--ink-4)}.post-body:where(.astro-7jjqptxk) table{width:100%;border-collapse:collapse;margin-block:0 1.6rem;font-family:Inter,system-ui,sans-serif;font-size:.95rem}.post-body:where(.astro-7jjqptxk) th,.post-body:where(.astro-7jjqptxk) td{border:1px solid var(--ink-6);padding:.5rem .75rem;text-align:left}.post-body:where(.astro-7jjqptxk) th{background-color:var(--surface-2);font-weight:600}
