.prose{max-width:68ch;font-size:var(--t-sans-md);line-height:var(--lh-prose);color:var(--c-text)}.prose>*+*{margin-top:var(--s-4)}.prose h2,.prose h3,.prose h4{margin-top:var(--s-6);margin-bottom:var(--s-3);font-weight:600;line-height:var(--lh-head);letter-spacing:var(--track-head)}.prose h2{font-size:var(--t-sans-xl)}.prose h3{font-size:var(--t-sans-lg)}.prose h4{font-size:var(--t-sans-md);color:var(--c-muted)}@media(max-width:640px){.prose h2{font-size:var(--t-sans-lg)}.prose h3{font-size:var(--t-sans-md)}}.prose a{color:var(--c-link);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.prose strong{font-weight:500;color:var(--c-text)}.prose em{font-style:italic}.prose ul,.prose ol{padding-left:var(--s-5)}.prose ul{list-style:disc}.prose ol{list-style:decimal}.prose ul ul{list-style:circle}.prose li+li{margin-top:var(--s-2)}.prose li::marker{color:var(--c-muted)}.prose blockquote{border-left:3px solid var(--c-hairline-strong);padding-left:var(--s-4);color:var(--c-muted)}.prose :not(pre)>code{font-family:var(--font-mono);font-size:var(--t-mono-md);color:var(--c-link);background:var(--c-tint-link);padding:0 6px 2px;border-radius:var(--radius-sm);font-variant-ligatures:none}.prose pre{background:var(--c-sunken);border:1px solid var(--c-hairline);border-radius:var(--radius-card);padding:var(--s-4);overflow-x:auto;font-size:var(--t-mono-md);line-height:var(--lh-body)}.prose pre code{font-family:var(--font-mono);font-variant-ligatures:none;background:none;padding:0}.prose hr{border:0;border-top:1px solid var(--c-hairline);margin-block:var(--s-6)}.prose img{border:1px solid var(--c-hairline);border-radius:var(--radius-card)}.prose .table-wrap{overflow-x:auto}.prose table{border-collapse:collapse;width:100%;font-size:var(--t-sans-sm)}.prose th,.prose td{border:1px solid var(--c-hairline);padding:var(--s-2) var(--s-3);text-align:left}.prose th{font-weight:500;color:var(--c-muted)}.prose :is(h2,h3,h4){scroll-margin-top:var(--s-5)}.prose .katex{font-size:1.05em}.prose .katex-display{overflow-x:auto;overflow-y:hidden;padding-block:var(--s-2)}:root[data-theme=dark] .prose .astro-code,:root[data-theme=dark] .prose .astro-code span{color:var(--shiki-dark)!important}:root[data-theme=dark] .prose .astro-code{background-color:var(--shiki-dark-bg)!important}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .prose .astro-code,:root:not([data-theme=light]) .prose .astro-code span{color:var(--shiki-dark)!important}:root:not([data-theme=light]) .prose .astro-code{background-color:var(--shiki-dark-bg)!important}}.prose .screens,.prose .frame{max-width:none}.prose .codewrap{position:relative;margin-block:var(--s-4)}.prose .codewrap pre{margin:0}.prose .codebar{position:absolute;top:0;right:0;display:flex;align-items:center;gap:var(--s-3);padding:var(--s-2) var(--s-3);pointer-events:none}.prose .codecopy{pointer-events:auto;font-size:var(--t-sans-2xs);color:var(--c-muted);background:var(--c-chrome);border:1px solid var(--c-hairline);border-radius:var(--radius-sm);padding:3px 9px;cursor:pointer;opacity:0;transition:opacity var(--dur-state) var(--ease),color var(--dur-state) var(--ease)}.prose .codecopy[data-done]{color:var(--c-link);opacity:1}.prose .codecopy:focus-visible{opacity:1}@media(hover:hover){.prose .codewrap:hover .codecopy{opacity:1}}@media(hover:none){.prose .codecopy{opacity:1}}.prose .codewrap pre{padding-top:calc(var(--s-4) + var(--s-3))}.prose pre code{display:grid;width:max-content;min-width:100%}.prose pre .line{min-height:1lh;margin-inline:calc(var(--s-4) * -1);padding-inline:var(--s-4)}.prose pre .line.highlighted{background:var(--c-tint-accent);box-shadow:inset 2px 0 var(--c-accent)}.prose pre.has-diff .line{padding-left:calc(var(--s-4) + 2ch)}.prose pre .line.diff{position:relative}.prose pre .line.diff:before{position:absolute;left:var(--s-4);user-select:none}.prose pre .line.diff.add{background:var(--c-tint-green)}.prose pre .line.diff.add:before{content:"+";color:var(--c-hue-green)}.prose pre .line.diff.remove{background:var(--c-tint-orange)}.prose pre .line.diff.remove:before{content:"−";color:var(--c-hue-orange)}.prose pre .line.diff.remove>span{opacity:.7}.prose .codefile .codetab,.prose .cg-tabs [role=tab]{position:relative;display:block;width:fit-content;max-width:100%;padding:6px var(--s-4) 5px;font-family:var(--font-mono);font-size:var(--t-mono-xs);color:var(--c-text);background:var(--c-sunken);border:1px solid var(--c-hairline);border-bottom:0;border-radius:var(--radius-sm) var(--radius-sm) 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:-1px;z-index:1}.prose .codefile .codetab:before,.prose .cg-tabs [aria-selected=true]:before{content:"";position:absolute;inset:-1px var(--s-2) auto;height:2px;border-radius:0 0 2px 2px;background:var(--c-accent)}.prose .codefile pre{border-top-left-radius:0}.prose .codefile .codewrap{margin:0}.prose .codetab[data-kind=lang],.prose .cg-tabs [data-kind=lang]{color:var(--c-muted)}.prose .codefile .codewrap pre{padding-top:var(--s-4)}.prose .cg-tabs{display:none}.prose .codegroup{overflow-anchor:none}.prose .codegroup>.codefile+.codefile{margin-top:var(--s-4)}:root.js .prose .cg-tabs{display:flex;flex-wrap:wrap;gap:2px}:root.js .prose .codegroup>.codefile>.codetab{display:none}:root.js .prose .codegroup>.codefile{margin-top:0}:root.js .prose .codegroup>.codefile:not([data-active]){display:none}.prose .cg-tabs [role=tab]{cursor:pointer}.prose .cg-tabs [aria-selected=false]{color:var(--c-muted);background:transparent;border-color:transparent;transition:color var(--dur-state) var(--ease),background var(--dur-state) var(--ease)}@media(hover:hover){.prose .cg-tabs [aria-selected=false]:hover{color:var(--c-text);background:var(--c-raised)}}.prose .cg-tabs [role=tab]:focus-visible{outline-offset:-2px}.mwin{background:var(--c-bg);color:var(--c-text);border:1px solid var(--c-hairline-strong);border-radius:var(--radius-window);box-shadow:var(--shadow-window);overflow:clip}.mwin[data-inset]{border-color:var(--c-hairline);border-radius:var(--radius-card);box-shadow:var(--shadow-popover)}.mwin-bar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--s-3);min-height:var(--h-titlebar);padding-inline:var(--s-3);background:var(--c-chrome);border-bottom:1px solid var(--c-hairline)}.mwin-bar>:nth-child(3){justify-self:end}.mwin-lights{display:flex;align-items:center;gap:var(--s-2)}.mwin-lights i{width:12px;height:12px;border-radius:50%;background:var(--c-trafficlight);outline:.5px solid var(--light-edge);outline-offset:-.5px}.mwin-light{display:grid;place-items:center;width:20px;height:20px;margin-inline:-4px;padding:0;cursor:pointer}.mwin-light:before{content:"";grid-area:1 / 1;width:12px;height:12px;border-radius:50%;background:var(--light-close);outline:.5px solid var(--light-edge);outline-offset:-.5px}.mwin-light svg{grid-area:1 / 1;z-index:1;width:12px;height:12px;fill:none;stroke:var(--light-glyph);stroke-width:1.3;stroke-linecap:round;opacity:0;transition:opacity var(--dur-state) var(--ease)}.mwin-light:hover svg,.mwin-light:focus-visible svg{opacity:1}.mwin-light:focus-visible{outline:none}.mwin-light:focus-visible:before{outline:1px solid var(--c-accent);outline-offset:2px}.mwin-title{display:flex;align-items:center;gap:7px;min-width:0;margin:0;font-family:var(--font-sans);font-size:var(--t-sans-xs);font-weight:600;letter-spacing:var(--track-snug);line-height:1;color:var(--c-text);white-space:nowrap}.mwin-title>span{overflow:hidden;text-overflow:ellipsis}.mwin-meta{font-size:var(--t-sans-2xs);color:var(--c-dim);white-space:nowrap}dialog.mwin::backdrop{background:var(--c-scrim)}@media(prefers-reduced-motion:no-preference){dialog.mwin[open]{animation:mwin-open var(--dur-window) var(--ease-window)}dialog.mwin[open]::backdrop{animation:mwin-fade var(--dur-window) var(--ease-window)}}@keyframes mwin-open{0%{opacity:0;transform:scale(.97)}}@keyframes mwin-fade{0%{opacity:0}}.article{max-width:44rem;margin:0 auto;padding:7.5rem 1.5rem 6rem;font-family:var(--font-sans);font-size:var(--t-sans-md);line-height:var(--lh-body)}@layer article-base{.article :where(h1,h2,h3,h4,h5,h6){margin:0;font-weight:600;line-height:var(--lh-head);letter-spacing:var(--track-head)}.article :where(p,ul,ol,figure,blockquote,pre){margin:0}.article :where(a){color:var(--c-link);text-decoration:none}.article :where(img,svg,video){display:block;max-width:100%}.article :where(code,kbd,samp,pre){font-family:var(--font-mono);font-variant-ligatures:none}.article :where(button){font:inherit;color:inherit;background:none;border:0}}.a-back{display:inline-block;margin-bottom:2.5rem;font-family:var(--mono);font-size:13px;color:var(--fg)!important;opacity:.5;transition:opacity .15s ease}.a-back:hover,.a-back:focus-visible{opacity:1}.a-head{margin-bottom:3rem}.a-head h1{max-width:24ch;font-size:clamp(1.75rem,4vw,2.25rem);font-weight:600;text-wrap:balance}.a-meta{margin-top:1rem!important;font-family:var(--mono);font-size:12px;color:var(--fg-muted)}.a-meta span+span:before{content:" · ";opacity:.6}.a-foot{margin-top:4rem;padding-top:1.5rem;border-top:1px dotted color-mix(in srgb,var(--fg) 25%,transparent);font-family:var(--mono);font-size:13px}.a-foot a{color:var(--fg)!important}.a-pager{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}.a-pager a{display:block}.a-pager small{display:block;margin-bottom:.25rem;font-size:11px;color:var(--fg-muted)}.a-pager .next{grid-column:2;text-align:right}.a-tip{margin-top:2rem!important;color:var(--fg-muted)}@media(max-width:640px){.article{padding-top:5.5rem}.a-pager{grid-template-columns:1fr}.a-pager .next{grid-column:1;text-align:left}}
