:root{--paper:#f6f7f9;--surface:#fff;--ink:#1b2027;--steel:#5f6875;--rule:#dce0e5;--signal:#d1362f;--signal-bright:#ef4444;--signal-soft:#fbe9e7;--code-bg:#1e242c;--code-ink:#d7dde4;--on-signal:#fff;--font-display:var(--font-geist);--font-body:var(--font-instrument);--font-code:var(--font-jetbrains);--measure:44em;--wide:84rem;--gutter:clamp(1.25rem, 4vw, 2.5rem);--space-section:clamp(4.5rem, 10vw, 8rem);--radius-small:3px;--radius-panel:4px;color-scheme:light}@media (prefers-color-scheme:dark){:root{--paper:#14181d;--surface:#1b2027;--ink:#e8ebef;--steel:#9aa3ae;--rule:#2c333c;--signal:#f05a52;--signal-bright:#f05a52;--signal-soft:#3a2224;--code-bg:#10141a;--on-signal:#14181d;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-y:scroll}:root{--scrollbar:color-mix(in srgb, var(--steel) 40%, transparent);--scrollbar-hover:color-mix(in srgb, var(--steel) 75%, transparent)}.astro-code,.code-panel{--scrollbar:color-mix(in srgb, var(--code-ink) 25%, transparent);--scrollbar-hover:color-mix(in srgb, var(--code-ink) 50%, transparent)}::-webkit-scrollbar{background:0 0;width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--scrollbar) padding-box;border:2px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-hover)}::-webkit-scrollbar-thumb:active{background-color:var(--signal)}::-webkit-scrollbar-corner{background:0 0}@supports not selector(::-webkit-scrollbar){*{scrollbar-width:thin;scrollbar-color:var(--scrollbar) transparent}}body{background:var(--paper);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;font-size:1.0625rem;line-height:1.6}img,svg{max-width:100%;display:block}a{color:inherit;text-decoration-color:color-mix(in srgb, currentColor 35%, transparent);text-underline-offset:.2em}a:hover{text-decoration-color:var(--signal)}:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:2px}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.02em;text-wrap:balance;margin:0;font-weight:600;line-height:1.08}h1,h2{letter-spacing:-.035em}h1{font-size:clamp(2.5rem,5.6vw,4.5rem)}h2{font-size:clamp(1.75rem,3.2vw,2.6rem)}h3{letter-spacing:-.01em;font-size:1.125rem;line-height:1.25}p{text-wrap:pretty;margin:0}code,kbd{font-family:var(--font-code);font-size:.88em}@media (width<=640px){pre code{font-size:inherit}}:not(pre)>code{background:color-mix(in srgb, var(--ink) 7%, transparent);border-radius:4px;padding:.12em .36em}.skip-link{background:var(--ink);color:var(--paper);border-radius:var(--radius-small);z-index:10;padding:.6rem 1rem;position:absolute;top:-4rem;left:1rem}.skip-link:focus{top:1rem}.wrap{max-width:var(--wide);padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--space-section)}.section+.section{padding-block-start:0}.lede{color:var(--steel);max-width:29.5em;font-size:clamp(1.125rem,1.6vw,1.3rem)}.measure{max-width:var(--measure)}.muted{color:var(--steel)}.stack>*+*{margin-top:1rem}.button-row{flex-wrap:wrap;gap:.75rem;display:flex}.button{border-radius:var(--radius-small);border:1.5px solid #0000;align-items:center;gap:.5rem;min-height:2.9rem;padding:0 1.25rem;font-size:1rem;font-weight:600;text-decoration:none;transition:background-color .12s,border-color .12s;display:inline-flex}.button-primary{background:var(--signal);color:var(--on-signal)}.button-primary:hover{background:color-mix(in srgb, var(--signal) 86%, black)}.button-quiet{border-color:var(--rule);background:var(--surface)}.button-quiet:hover{border-color:var(--ink)}.code-panel{background:var(--code-bg);color:var(--code-ink);border-radius:var(--radius-panel);overflow:hidden}.code-panel pre,.prose pre{font-family:var(--font-code);margin:0;padding:1.1rem 1.25rem;font-size:.875rem;line-height:1.65;overflow-x:auto;background:var(--code-bg)!important}.prose{max-width:var(--measure)}.prose>*+*{margin-top:1.1rem}.prose h1{margin-bottom:1.5rem;font-size:clamp(2rem,4vw,3rem)}.prose h2{margin-top:2.75rem;font-size:1.6rem}.prose h3{margin-top:2rem}.prose ul,.prose ol{padding-left:1.25rem}.prose li+li{margin-top:.35rem}.prose pre{border-radius:var(--radius-panel)}.prose blockquote{border-left:3px solid var(--signal);color:var(--steel);margin-inline:0;padding:.25rem 0 .25rem 1.1rem}.prose .table-scroll,.prose table{display:block;overflow-x:auto}.prose table{border-collapse:collapse;font-size:.95rem}.prose th,.prose td{text-align:left;vertical-align:top;border-bottom:1px solid var(--rule);padding:.55rem .9rem .55rem 0}.prose th{font-weight:600}.prose img{border-radius:var(--radius-panel);border:1px solid var(--rule);background:#fff}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (pointer:coarse){.lone-link a{padding-block:.4rem}}html[data-ruler]{scrollbar-width:none}html[data-ruler]::-webkit-scrollbar{display:none}.ruler{z-index:6;width:44px;font-family:var(--font-code);user-select:none;position:fixed;inset:0 0 0 auto}.ruler[hidden]{display:none}.ruler-rail{cursor:pointer;background:linear-gradient(to left, var(--paper) 55%, color-mix(in srgb, var(--paper) 0%, transparent)) 0 calc(4rem + 1px) / 100% 100% no-repeat;position:absolute;inset:0}.ruler-tick{width:7px;height:var(--px,1px);background:var(--steel);opacity:.4;transform-origin:100%;animation:.9s cubic-bezier(.2,.9,.2,1) forwards ruler-draw;position:absolute;right:0;scale:0 1}.ruler-tick.is-major{opacity:.75;width:12px}@keyframes ruler-draw{to{scale:1}}.ruler-num{color:var(--steel);opacity:.6;font-size:9px;line-height:1;transition:opacity .15s;position:absolute;right:22px;transform:translateY(calc(1.5px - 50%))}.ruler-num.is-under{opacity:0}.ruler-span{background:color-mix(in srgb, var(--steel) 22%, transparent);width:3px;position:absolute;top:0;right:0}.ruler-ghost{background:color-mix(in srgb, var(--ink) 18%, transparent);opacity:0;pointer-events:none;height:3px;margin-top:-1.5px;transition:opacity .15s;position:absolute;top:0;left:0;right:0}.ruler-rail:hover .ruler-ghost{opacity:1}.ruler.is-dragging .ruler-ghost{opacity:0}.ruler-needle{height:calc(2 * var(--px,1px));background:var(--signal);pointer-events:none;transition:opacity .3s;position:absolute;top:0;left:0;right:0}.ruler.is-top .ruler-needle{opacity:0}.ruler-readout{background:var(--paper);color:var(--signal);padding:1px 2px;font-size:10px;font-weight:600;line-height:1;display:inline-flex;position:absolute;bottom:3px;right:0}.ruler-digits{height:1em;display:inline-flex;overflow:hidden}.ruler-digit-col{flex-direction:column;transition:transform .28s cubic-bezier(.2,.9,.2,1);display:flex}.ruler-digit-col>span{height:1em;display:block}.ruler-digit-col.is-lead{opacity:.35}.ruler-map{pointer-events:none;justify-items:end;gap:26px;transition:opacity .25s;display:grid;position:absolute;right:40px;translate:0 -50%}.ruler.is-peek .ruler-map{opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s .25s}.ruler.is-peek:is(.is-scrolling,:hover) .ruler-map{opacity:1;visibility:visible;transition:opacity .25s}.ruler-map:before{content:"";z-index:-1;background:linear-gradient(to left, color-mix(in srgb, var(--paper) 94%, transparent) 55%, transparent);backdrop-filter:blur(4px);position:absolute;inset:-2.5rem -40px -2.5rem -2.5rem;mask-image:linear-gradient(270deg,#000 60%,#0000),linear-gradient(#0000,#000 22% 78%,#0000);mask-composite:intersect}.ruler-link{cursor:pointer;pointer-events:auto;align-items:center;display:flex}.ruler-name{letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;color:color-mix(in srgb, var(--steel) 70%, transparent);transform-origin:100%;font-size:10px;line-height:1;transition:color .25s,scale .35s cubic-bezier(.2,.9,.2,1.2)}.ruler-link.is-visible .ruler-name{color:var(--ink);scale:1.3}.ruler-link.is-current .ruler-name{color:var(--signal)}.ruler-link:hover .ruler-name{color:var(--ink)}@media (prefers-reduced-motion:reduce){.ruler-tick{animation:none;scale:1}.ruler-name{transition:none}}.site-header[data-astro-cid-hkbrpulz]{z-index:5;background:color-mix(in srgb, var(--paper) 88%, transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--rule);position:sticky;top:0}.site-header[data-astro-cid-hkbrpulz]:has(.nav-narrow[open]){z-index:7}.header-row[data-astro-cid-hkbrpulz]{align-items:center;gap:2rem;min-height:4rem;display:flex}.brand[data-astro-cid-hkbrpulz] img[data-astro-cid-hkbrpulz]{width:auto;height:18px}.nav-wide[data-astro-cid-hkbrpulz]{flex:1}.nav-wide[data-astro-cid-hkbrpulz] ul[data-astro-cid-hkbrpulz],.nav-narrow[data-astro-cid-hkbrpulz] ul[data-astro-cid-hkbrpulz]{margin:0;padding:0;list-style:none}.nav-wide[data-astro-cid-hkbrpulz] ul[data-astro-cid-hkbrpulz]{gap:1.6rem;display:flex}.nav-wide[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz],.github[data-astro-cid-hkbrpulz]{color:var(--steel);font-size:.97rem;font-weight:500;text-decoration:none}.nav-wide[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz]:hover,.github[data-astro-cid-hkbrpulz]:hover,.nav-wide[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz][aria-current=page]{color:var(--ink)}.nav-wide[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz][aria-current=page]{text-decoration:underline;text-decoration-color:var(--signal);text-underline-offset:.45em;text-decoration-thickness:2px}.header-actions[data-astro-cid-hkbrpulz]{align-items:center;gap:1.25rem;display:flex}.header-cta[data-astro-cid-hkbrpulz]{min-height:2.4rem;padding:0 1rem;font-size:.95rem}.nav-narrow[data-astro-cid-hkbrpulz]{margin-left:auto;display:none;position:relative}.nav-narrow[data-astro-cid-hkbrpulz] summary[data-astro-cid-hkbrpulz]{cursor:pointer;border:1.5px solid var(--rule);border-radius:var(--radius-small);padding:.45rem .8rem;font-weight:600;list-style:none}.nav-narrow[data-astro-cid-hkbrpulz] summary[data-astro-cid-hkbrpulz]::-webkit-details-marker{display:none}.nav-narrow[data-astro-cid-hkbrpulz] nav[data-astro-cid-hkbrpulz]{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius-panel);min-width:13rem;padding:.5rem;position:absolute;top:calc(100% + .5rem);right:0}.nav-narrow[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz]{border-radius:var(--radius-small);padding:.6rem .8rem;text-decoration:none;display:block}.nav-narrow[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz]:hover{background:var(--paper)}@media (width<=920px){.nav-wide[data-astro-cid-hkbrpulz],.header-actions[data-astro-cid-hkbrpulz]{display:none}.nav-narrow[data-astro-cid-hkbrpulz]{display:block}}.site-footer[data-astro-cid-hkbrpulz]{border-top:1px solid var(--rule);margin-top:2rem;padding-block:3.5rem 2rem}.footer-grid[data-astro-cid-hkbrpulz]{grid-template-columns:2fr repeat(3,1fr);gap:2rem;display:grid}.footer-brand[data-astro-cid-hkbrpulz] img[data-astro-cid-hkbrpulz]{width:auto;height:16px;margin-bottom:1rem}.footer-brand[data-astro-cid-hkbrpulz] p[data-astro-cid-hkbrpulz]{max-width:20em;font-size:.95rem}.site-footer[data-astro-cid-hkbrpulz] h2[data-astro-cid-hkbrpulz]{font-family:var(--font-body);letter-spacing:0;margin-bottom:.75rem;font-size:.95rem;font-weight:600}.site-footer[data-astro-cid-hkbrpulz] ul[data-astro-cid-hkbrpulz]{gap:.45rem;margin:0;padding:0;list-style:none;display:grid}.site-footer[data-astro-cid-hkbrpulz] nav[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz]{color:var(--steel);font-size:.95rem;text-decoration:none}.site-footer[data-astro-cid-hkbrpulz] nav[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz]:hover{color:var(--ink)}.footer-note[data-astro-cid-hkbrpulz]{margin-top:3rem;font-size:.875rem}@media (width<=720px){.footer-grid[data-astro-cid-hkbrpulz]{grid-template-columns:1fr 1fr}.footer-brand[data-astro-cid-hkbrpulz]{grid-column:1/-1}}@media (pointer:coarse){.brand[data-astro-cid-hkbrpulz]{padding-block:13px}.site-footer[data-astro-cid-hkbrpulz] ul[data-astro-cid-hkbrpulz]{gap:0}.site-footer[data-astro-cid-hkbrpulz] nav[data-astro-cid-hkbrpulz] a[data-astro-cid-hkbrpulz]{padding-block:.5rem;display:block}}.page{overflow-x:clip}.frame{--inset:calc(var(--gutter) - .5rem - 1px);--line:1px solid var(--rule);--mark:1px solid var(--signal);--arm:10px;margin-inline:calc(-1px - var(--inset));border-inline:var(--line);position:relative}@media (width<=86rem){.frame{--arm:6px}}#main:has(.frame)+.site-footer{margin-top:0}.frame .marks{pointer-events:none;position:absolute;top:0;left:0;right:0}.frame .foot{--up:var(--arm);--down:var(--arm);top:100%}.frame .marks>i{top:calc(-1 * var(--up));height:calc(var(--up) + 1px + var(--down));border-left:var(--mark);clip-path:inset(calc(-100 * var(--up)) -2rem -2rem);position:absolute;left:-1px}.frame .marks>i+i{left:100%}.frame .marks>i:before,.frame .marks>i:after{content:"";top:var(--up);position:absolute}.frame .marks>i:before{left:calc(-1px - var(--arm));width:calc(2 * var(--arm) + 1px);border-top:var(--mark)}.frame .marks>i:after{border-top:var(--mark);border-left:var(--mark);outline:2px solid var(--signal);left:-1px}.frame .block{scroll-margin-top:4rem}.frame .bar{--up:var(--arm);--down:var(--arm);z-index:3;padding:.7rem var(--inset);background:var(--paper);border-bottom:var(--line);font-family:var(--font-code);letter-spacing:.1em;text-transform:uppercase;color:var(--steel);flex-wrap:wrap;justify-content:space-between;gap:.2rem 1.5rem;font-size:.72rem;display:flex;position:sticky;top:4rem}.frame .bar>:first-child{color:var(--ink)}.frame .bar a{text-decoration:none}@media (pointer:coarse){.frame .bar a{margin-block:-.55rem;padding-block:.55rem;display:inline-block}}.frame .bar a:hover{color:var(--ink)}.frame .bar:before{content:"";border-top:var(--line);position:absolute;top:0;left:-100vw;right:-100vw}.frame .bar.is-lifted{z-index:6}.frame .hero{margin-top:-1px}.frame .hero>.bar{--up:0px}.frame .cell{padding:clamp(2.5rem, 5vw, 4rem) var(--inset)}.frame .split{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.frame .split>.cell+.cell{border-left:var(--line)}.frame .cell-head{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:1rem 2rem;padding-bottom:clamp(2rem,4vw,3rem);display:flex}.frame .cell-head h2{max-width:13.2em}.frame .cells{background:var(--rule);border-top:var(--line);grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:0;padding:0;list-style:none;display:grid}.frame .cells>*{background:var(--paper);padding:1.75rem var(--inset) 2rem}.frame .cell-foot{border-top:var(--line);padding:1.1rem var(--inset);font-size:.95rem}@media (width<=1100px){.frame .split{grid-template-columns:minmax(0,1fr)}.frame .split>.cell+.cell{border-left:0;border-top:var(--line)}}@media (width<=980px){.frame .cells{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=560px){.frame .cells{grid-template-columns:1fr}}
