@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:400 800;src:url(/_astro/geist-subset.gk1vfuOj.woff2)format("woff2")}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:400 700;src:url(/_astro/geist-mono-subset.DJOEP9R2.woff2)format("woff2")}:root{--bg:#0a0a0c;--card:#121216;--text:#ececf1;--soft:#c9c9d3;--quiet:#9a9aa6;--accent:#e5484d;--on-accent:#0a0a0c;--line:#24242b;--line-hover:#34343d;--quiet-line:#3a3a44;--term-bg:#0e0e12;--glow-edge:color-mix(in srgb, var(--accent) 70%, transparent);--shadow:#000c;--glow:#e5484d0d;--bg-glow:#e5484d1a;--grid-line:#ffffff09;--font-body:"Geist", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"Geist Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1.0625rem;--text-lg:1.25rem;--text-xl:1.5rem;--text-2xl:clamp(1.75rem, 1.3rem + 1.6vw, 2.4rem);--text-3xl:clamp(2rem, 1.5rem + 2.4vw, 2.75rem);--text-4xl:clamp(2.4rem, 1.6rem + 3.4vw, 4rem);--text-hero:clamp(3.25rem, 2rem + 4.6vw, 5.75rem);--border:var(--line);--radius:8px;--max:1200px;--gutter:clamp(1.25rem, 4vw, 2.5rem);--ease:cubic-bezier(.2, .7, .2, 1);--astro-code-foreground:var(--soft);--astro-code-background:var(--card);--astro-code-token-keyword:var(--accent);--astro-code-token-link:var(--accent);--astro-code-token-function:var(--text);--astro-code-token-constant:var(--text);--astro-code-token-parameter:var(--soft);--astro-code-token-string:var(--soft);--astro-code-token-string-expression:var(--soft);--astro-code-token-comment:var(--quiet);--astro-code-token-punctuation:var(--quiet);color-scheme:dark}@view-transition{navigation:auto}*,:before,:after{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth;scroll-padding-top:5rem}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:var(--text-base);-webkit-font-smoothing:antialiased;margin:0;line-height:1.65;overflow-x:hidden}img{max-width:100%;height:auto;display:block}a{color:var(--accent);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:where(p,li,dd,td)>a:not([class]){padding-block:.3em}h1,h2,h3{letter-spacing:-.015em;text-wrap:balance;margin:0 0 .75rem;line-height:1.15}p,li{text-wrap:pretty}h2{font-size:var(--text-2xl);letter-spacing:-.03em;font-weight:750}h3{font-weight:650}p{margin:0 0 1rem}code,pre,kbd{font-family:var(--font-mono)}::selection{background:var(--accent);color:var(--on-accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}.skip-link{z-index:100;background:var(--card);color:var(--text);border:1px solid var(--accent);border-radius:6px;padding:.6rem 1rem;font-weight:600;position:absolute;top:-100px;left:1rem}.skip-link:focus{top:1rem}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%;max-width:var(--max);padding:0 var(--gutter);margin:0 auto}.quiet{color:var(--quiet)}.mono{font-family:var(--font-mono)}.target{align-items:center;min-width:1.5rem;min-height:2rem;display:inline-flex}.backdrop{z-index:-1;pointer-events:none;contain:strict;position:fixed;inset:0;overflow:hidden}.backdrop:before{content:"";background-image:linear-gradient(var(--grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);background-size:64px 64px;position:absolute;inset:0;mask-image:radial-gradient(90% 70% at 50% 0,#000 30%,#0000 85%)}.backdrop:after{content:"";background:radial-gradient(circle, var(--bg-glow), transparent 65%);width:70vmax;height:70vmax;animation:drift 4.5s var(--ease) 1 forwards;position:absolute;top:-35vmax;right:-20vmax}@keyframes drift{to{transform:translate(-6vw,5vh)}}.progress{z-index:60;background:var(--accent);height:2px;box-shadow:0 0 8px var(--accent);transform-origin:0;pointer-events:none;position:fixed;top:0;left:0;right:0;transform:scaleX(0)}.section{border-top:1px solid var(--line);padding:clamp(4rem,9vw,7rem) 0}.section-grid{gap:1.5rem var(--gutter);display:grid}@media (width>=900px){.section-grid{grid-template-columns:repeat(12,minmax(0,1fr))}.section-head{grid-column:1/span 3;align-self:start;position:sticky;top:6rem}.section-body{grid-column:4/-1}}.path{min-height:2rem;font-family:var(--font-mono);font-size:var(--text-sm);color:var(--quiet);align-items:center;margin-bottom:.25rem;padding-right:.25rem;text-decoration:none;display:inline-flex}a.path:hover{color:var(--text)}.path:before{content:"~/" / "";color:var(--accent)}.section-intro{color:var(--quiet);max-width:34ch;font-size:var(--text-sm)}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:1.5rem;position:relative}.grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,290px),1fr));gap:1rem;display:grid}.glow-card{isolation:isolate;transition:transform .25s var(--ease), border-color .25s ease}.glow-card:before,.glow-card:after{content:"";border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .3s;position:absolute;inset:-1px}.glow-card:before{z-index:-1;background:radial-gradient(360px circle at var(--mx,50%) var(--my,0%), var(--glow), transparent 60%)}.glow-card:after{background:radial-gradient(220px circle at var(--mx,50%) var(--my,0%), var(--glow-edge), transparent 70%);-webkit-mask-composite:xor;padding:1px;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor,source-over;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.glow-card:focus-within{border-color:var(--line-hover)}.glow-card:focus-within:before{opacity:1}@media (hover:hover) and (pointer:fine){.glow-card:hover{border-color:var(--line-hover);transform:translateY(-3px)}.glow-card:hover:before,.glow-card:hover:after{opacity:1}}.tags{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.tag{font-family:var(--font-mono);font-size:var(--text-xs);border:1px solid var(--line);color:var(--quiet);border-radius:4px;padding:.12rem .5rem}.btn{min-height:2.75rem;font-family:var(--font-mono);font-size:var(--text-sm);border:1px solid var(--quiet-line);background:var(--card);color:var(--text);cursor:pointer;transition:border-color .18s ease, background-color .18s ease, color .18s ease, transform .12s var(--ease);border-radius:6px;justify-content:center;align-items:center;gap:.5rem;padding:.65rem 1.15rem;font-weight:500;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--accent)}.btn:active,.btn[aria-current=page],.btn[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn:active{transition-duration:0s,0s,0s,.12s;transform:scale(.97)}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}.field-input{width:100%;font:inherit;font-size:var(--text-base);color:var(--text);background:var(--bg);border:1px solid var(--quiet-line);border-radius:6px;padding:.7rem .85rem;transition:border-color .18s}.field-input:hover,.field-input:focus,.field-input[aria-invalid=true]{border-color:var(--accent)}.field-input:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}.btn-sm{min-height:2.25rem;font-size:var(--text-sm);padding:.35rem .75rem}.placeholder-note{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--quiet);border-left:2px solid var(--line);padding-left:.75rem}html.js .reveal{opacity:0;transition:opacity .5s var(--ease), transform .5s var(--ease);transform:translateY(12px)}html.js .reveal.is-in,html.js .reveal:focus-within{opacity:1;transform:none}html.js .reveal:focus-within{transition:none}html:not(.js) .needs-js{display:none!important}.page{padding-top:clamp(3rem,7vw,5.5rem);padding-bottom:4rem}.page-title{font-size:var(--text-4xl);letter-spacing:-.04em;margin-bottom:1rem;font-weight:800;line-height:1}@media print{@page{size:A4;margin:14mm 15mm}:root{--bg:#fff;--card:#fff;--text:#000;--soft:#000;--quiet:#333;--accent:#000;--line:#bbb;color-scheme:light}body{color:#000;background:#fff;font-size:10pt;line-height:1.38}.backdrop,.progress,.skip-link,.site-header,.site-footer{display:none!important}html.js .reveal{opacity:1;transform:none}*,:before,:after{box-shadow:none!important;text-shadow:none!important;transition:none!important;animation:none!important}a{color:#000;text-decoration:none}h1,h2,h3{break-after:avoid}p,li{orphans:3;widows:3}}@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}html{scroll-behavior:auto}html.js .reveal{opacity:1;transform:none}.progress{display:none}.glow-card:hover,.glow-card:focus-within{transform:none}*,:before,:after{transition:none!important;animation:none!important}}.spider-svg[data-astro-cid-byitwhah]{color:var(--accent);stroke-width:1.35px;display:block;overflow:visible}.far[data-astro-cid-byitwhah]{opacity:.5;stroke-width:1.15px}.legs-a[data-astro-cid-byitwhah],.legs-b[data-astro-cid-byitwhah],.sp-tilt[data-astro-cid-byitwhah]{transform-box:view-box}.legs-a[data-astro-cid-byitwhah],.legs-b[data-astro-cid-byitwhah]{transform-origin:16.2px 13px}.sp-tilt[data-astro-cid-byitwhah]{transform-origin:16px 23.5px}.is-walking .legs-a[data-astro-cid-byitwhah],.is-walking .legs-b[data-astro-cid-byitwhah]{animation:.22s linear infinite spider-step}.is-walking .legs-b[data-astro-cid-byitwhah]{animation-delay:-.11s}.is-walking .sp-body[data-astro-cid-byitwhah]{animation:.11s ease-in-out infinite alternate spider-bob}@keyframes spider-step{0%{transform:skew(12deg)}55%{transform:skew(-12deg)}78%{transform:skew(0)scaleY(.84)}to{transform:skew(12deg)}}@keyframes spider-bob{to{transform:translateY(-.4px)}}.site-header[data-astro-cid-nen7h5rs]{z-index:50;background:var(--bg);border-bottom:1px solid var(--line);view-transition-name:site-header;position:sticky;top:0}.bar[data-astro-cid-nen7h5rs]{z-index:1;flex-wrap:wrap;align-items:center;gap:.25rem 1.5rem;padding-top:.5rem;padding-bottom:.5rem;display:flex;position:relative}.brand[data-astro-cid-nen7h5rs]{min-height:2.75rem;color:var(--text);letter-spacing:-.01em;align-items:center;margin-right:auto;font-weight:650;text-decoration:none;display:inline-flex}.spider-track[data-astro-cid-nen7h5rs]{pointer-events:none;position:absolute;inset:0;overflow:hidden}.walker[data-astro-cid-nen7h5rs]{position:absolute;bottom:0;left:0;transform:translate(-56px)}.brand[data-astro-cid-nen7h5rs],nav[data-astro-cid-nen7h5rs]{z-index:1;align-self:stretch;position:relative}nav[data-astro-cid-nen7h5rs]{align-items:center;display:flex}.brand[data-astro-cid-nen7h5rs]:before,nav[data-astro-cid-nen7h5rs]:before{content:"";z-index:-1;background:var(--bg);position:absolute;inset:-.5rem -.4rem}nav[data-astro-cid-nen7h5rs] ul[data-astro-cid-nen7h5rs]{flex-wrap:wrap;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}@media (width<=640px){.walker[data-astro-cid-nen7h5rs]{top:calc(3.25rem - 32px);bottom:auto}.bar[data-astro-cid-nen7h5rs]{gap:.25rem .5rem}.brand[data-astro-cid-nen7h5rs]{font-size:var(--text-sm)}nav[data-astro-cid-nen7h5rs] ul[data-astro-cid-nen7h5rs]{gap:.3rem}nav[data-astro-cid-nen7h5rs] .btn[data-astro-cid-nen7h5rs]{min-height:2.25rem;font-size:var(--text-xs);padding-inline:.45rem}}.contact-icon[data-astro-cid-4g4rikql]{flex:none;display:block}.contact-text[data-astro-cid-xybwjpux]{gap:.45rem}.cl-print[data-astro-cid-xybwjpux]{display:none}@media print{.cl-screen[data-astro-cid-xybwjpux],.contact-link[data-astro-cid-xybwjpux] .contact-icon{display:none}.cl-print[data-astro-cid-xybwjpux]{display:inline}}.site-footer[data-astro-cid-jo6i4kqk]{border-top:1px solid var(--border);margin-top:2rem;padding:2rem 0}.inner[data-astro-cid-jo6i4kqk]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 2rem;display:flex}.inner[data-astro-cid-jo6i4kqk] p[data-astro-cid-jo6i4kqk]{margin:0}.links[data-astro-cid-jo6i4kqk]{font-size:var(--text-sm);flex-wrap:wrap;gap:.5rem 1.25rem;margin:0;padding:0;list-style:none;display:flex}.links[data-astro-cid-jo6i4kqk] li[data-astro-cid-jo6i4kqk]{align-items:center;min-height:2rem;display:flex}.small[data-astro-cid-jo6i4kqk]{font-size:var(--text-sm)}.links[data-astro-cid-jo6i4kqk] a{color:var(--quiet);transition:color .18s}.links[data-astro-cid-jo6i4kqk] a:hover{color:var(--accent)}.links[data-astro-cid-jo6i4kqk] .contact-icon{color:var(--quiet)}
