@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/04c5164763c40239-s.0h-nw9_c8d~-_.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/26f284dcc38c84c0-s.10hk62x1-0d9n.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/7e7f32a39836f228-s.0bmyfaahigzds.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/fa39153a3fc630ba-s.0-0ft90hthv3~.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/6a5386fd6038edbe-s.16fk0g~ypa53a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/051742360c26797e-s.p.0f97p8c3305p~.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/04c5164763c40239-s.0h-nw9_c8d~-_.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/26f284dcc38c84c0-s.10hk62x1-0d9n.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/7e7f32a39836f228-s.0bmyfaahigzds.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/fa39153a3fc630ba-s.0-0ft90hthv3~.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/6a5386fd6038edbe-s.16fk0g~ypa53a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/051742360c26797e-s.p.0f97p8c3305p~.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/04c5164763c40239-s.0h-nw9_c8d~-_.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/26f284dcc38c84c0-s.10hk62x1-0d9n.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/7e7f32a39836f228-s.0bmyfaahigzds.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/fa39153a3fc630ba-s.0-0ft90hthv3~.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/6a5386fd6038edbe-s.16fk0g~ypa53a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/051742360c26797e-s.p.0f97p8c3305p~.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_9cf9c43b-module__0zh89q__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_9cf9c43b-module__0zh89q__variable{--font-jetbrains-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
:root,:host{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Pro";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Pro";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-regular:normal 400 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-light:normal 300 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-thin:normal 100 1em/1 "Font Awesome 6 Duotone";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-regular:normal 400 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-light:normal 300 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-thin:normal 100 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-duotone-solid:normal 900 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-regular:normal 400 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-light:normal 300 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-thin:normal 100 1em/1 "Font Awesome 6 Sharp Duotone"}svg.svg-inline--fa:not(:root),svg.svg-inline--fa:not(:host){box-sizing:content-box;overflow:visible}.svg-inline--fa{display:var(--fa-display,inline-block);vertical-align:-.125em;height:1em;overflow:visible}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.07143em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{margin:auto;position:absolute;inset:0}.fa-layers-counter,.fa-layers-text{text-align:center;display:inline-block;position:absolute}.fa-layers{text-align:center;vertical-align:-.125em;width:1em;height:1em;display:inline-block;position:relative}.fa-layers svg.svg-inline--fa{transform-origin:50%}.fa-layers-text{transform-origin:50%;top:50%;left:50%;transform:translate(-50%,-50%)}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);transform:scale(var(--fa-counter-scale,.25));transform-origin:100% 0;overflow:hidden}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:100% 100%;top:auto}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:0 100%;top:auto;right:auto}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:100% 0}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:0 0}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{vertical-align:.225em;font-size:.625em;line-height:.1em}.fa-xs{vertical-align:.125em;font-size:.75em;line-height:.08333em}.fa-sm{vertical-align:.05357em;font-size:.875em;line-height:.07143em}.fa-lg{vertical-align:-.075em;font-size:1.25em;line-height:.05em}.fa-xl{vertical-align:-.125em;font-size:1.5em;line-height:.04167em}.fa-2xl{vertical-align:-.1875em;font-size:2em;line-height:.03125em}.fa-fw{text-align:center;width:1.25em}.fa-ul{margin-left:var(--fa-li-margin,2.5em);padding-left:0;list-style-type:none}.fa-ul>li{position:relative}.fa-li{left:calc(-1 * var(--fa-li-width,2em));text-align:center;width:var(--fa-li-width,2em);line-height:inherit;position:absolute}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{transition-duration:0s;transition-delay:0s;animation-duration:1ms;animation-iteration-count:1;animation-delay:-1ms}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1)translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1), var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9), var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05), var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1, 1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1)translateY(0)}to{transform:scale(1)translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0), var(--fa-flip-y,1), var(--fa-flip-z,0), var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{vertical-align:middle;width:2.5em;height:2em;display:inline-block;position:relative}.fa-stack-1x,.fa-stack-2x{z-index:var(--fa-stack-z-index,auto);margin:auto;position:absolute;inset:0}.svg-inline--fa.fa-stack-1x{width:1.25em;height:1em}.svg-inline--fa.fa-stack-2x{width:2.5em;height:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.sr-only,.fa-sr-only,.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}
pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#adbac7;background:#22272e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#f47067}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#dcbdfb}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#6cb6ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#96d0ff}.hljs-built_in,.hljs-symbol{color:#f69d50}.hljs-comment,.hljs-code,.hljs-formula{color:#768390}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#8ddb8c}.hljs-subst{color:#adbac7}.hljs-section{color:#316dca;font-weight:700}.hljs-bullet{color:#eac55f}.hljs-emphasis{color:#adbac7;font-style:italic}.hljs-strong{color:#adbac7;font-weight:700}.hljs-addition{color:#b4f1b4;background-color:#1b4721}.hljs-deletion{color:#ffd8d3;background-color:#78191b}
:root{--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--space-8:4rem;--space-9:6rem;--bg:#0b0d0c;--bg-elev:#141a17;--text:#d8e0d8;--text-muted:#8a9a8a;--accent:#4ade80;--border:#ffffff14;--border-strong:#4ade8066}[data-theme=light]{--bg:#f7f7f5;--bg-elev:#fff;--text:#1a1f1a;--text-muted:#5a6a5a;--accent:#2563eb;--border:#00000014;--border-strong:#2563eb66}*{box-sizing:border-box}html{scroll-behavior:smooth;min-height:100vh}html,body{background:var(--bg);color:var(--text);font-family:var(--font-jetbrains-mono),ui-monospace,SFMono-Regular,Menlo,monospace;-webkit-font-smoothing:antialiased;margin:0;padding:0;font-size:16px;line-height:1.6}body{overflow-x:clip}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.accent{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.skip-to-content{background:var(--accent);color:var(--bg);padding:var(--space-3) var(--space-5);z-index:9999;font-size:.85rem;transition:top .2s;position:absolute;top:-100%;left:50%;transform:translate(-50%)}.skip-to-content:focus{text-decoration:none;top:0}.App{background:var(--bg);min-height:100vh}.brand-sprite-light{display:none!important}[data-theme=light] .brand-sprite-light{display:block!important}[data-theme=light] .brand-sprite-dark{display:none!important}[data-theme=dark] .toggle-icon-moon{opacity:0;transform:rotate(-90deg)scale(.4)}[data-theme=dark] .toggle-icon-sun{opacity:1;transform:rotate(0)scale(1)}[data-theme=light] .toggle-icon-sun{opacity:0;transform:rotate(90deg)scale(.4)}[data-theme=light] .toggle-icon-moon{opacity:1;transform:rotate(0)scale(1)}.page{max-width:720px;padding:0 var(--space-5);margin:0 auto}.lazy-fallback{min-height:200px}.site-nav{z-index:100;padding:var(--space-4) var(--space-5);background:color-mix(in srgb, var(--bg) 85%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.site-nav .site-nav-brand{align-items:center;line-height:0;display:inline-flex}.site-nav .site-nav-brand:hover{text-decoration:none}.site-nav .brand-sprite{width:36px;height:36px;image-rendering:pixelated;image-rendering:crisp-edges;display:block}.site-nav .site-nav-links{gap:var(--space-5);align-items:center;margin:0;padding:0;font-size:.9rem;list-style:none;display:flex}.site-nav .site-nav-links a{color:var(--text-muted);transition:color .15s}.site-nav .site-nav-links a:hover{color:var(--accent);text-decoration:none}.site-nav .site-nav-links a[aria-current=true]{color:var(--accent)}.site-nav .theme-toggle{color:var(--text-muted);padding:var(--space-2);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;font-family:inherit;font-size:1rem;line-height:1;transition:color .15s;display:inline-flex}.site-nav .theme-toggle:hover{color:var(--accent)}.site-nav .theme-toggle-stack{width:1em;height:1em;display:inline-block;position:relative}.site-nav .toggle-icon{transition:opacity .25s,transform .4s cubic-bezier(.4,0,.2,1);position:absolute;inset:0;width:1em!important;height:1em!important}.site-nav .nav-hamburger{padding:var(--space-2);cursor:pointer;z-index:110;background:0 0;border:none;flex-direction:column;justify-content:center;gap:5px;width:36px;height:36px;display:none}.site-nav .nav-hamburger .bar{background:var(--text);transform-origin:50%;width:22px;height:2px;transition:transform .25s,opacity .2s;display:block}.site-nav .nav-hamburger .bar.open:first-child{transform:translateY(7px)rotate(45deg)}.site-nav .nav-hamburger .bar.open:nth-child(2){opacity:0}.site-nav .nav-hamburger .bar.open:nth-child(3){transform:translateY(-7px)rotate(-45deg)}@media (max-width:600px){.site-nav .nav-hamburger{display:flex}.site-nav .site-nav-links{justify-content:flex-start;align-items:flex-start;gap:var(--space-5);width:min(80vw,300px);height:100vh;padding:calc(var(--space-9) + var(--space-2)) var(--space-6);background:var(--bg);border-left:1px solid var(--border);z-index:105;flex-direction:column;font-size:1rem;transition:transform .25s;position:fixed;top:0;right:0;transform:translate(100%)}.site-nav .site-nav-links.is-open{transform:translate(0)}.site-nav .site-nav-links li{width:100%}.site-nav .site-nav-links a{padding:var(--space-2) 0;display:block}.site-nav .site-nav-links .theme-toggle{margin-top:var(--space-3)}}.section{margin:var(--space-9) 0}.sub-heading{color:var(--text);margin:0 0 var(--space-5);letter-spacing:.02em;font-size:1.1rem;font-weight:700}.sub-heading:before{content:"// ";color:var(--accent)}.intro{padding-top:var(--space-9);padding-bottom:var(--space-8)}.intro .intro-eyebrow{color:var(--text-muted);margin:0 0 var(--space-4);font-size:.95rem}.intro .name{margin:0 0 var(--space-5);color:var(--text);letter-spacing:-.02em;font-size:clamp(2.25rem,7vw,3.75rem);font-weight:700;line-height:1.05}.intro .headline{color:var(--text);max-width:32em;margin:0;font-size:clamp(1.15rem,2.6vw,1.5rem);font-weight:400;line-height:1.45}.about-section .about-grid{gap:var(--space-6);grid-template-columns:1.5fr 1fr;align-items:start;display:grid}.about-section .about-copy p{margin:0 0 var(--space-4);color:var(--text-muted)}.about-section .resume-link{margin-top:var(--space-2);font-size:.9rem;display:inline-block}.about-section .about-image img{border:1px solid var(--border-strong);width:100%;max-width:220px;height:auto;display:block}@media (max-width:600px){.about-section .about-grid{gap:var(--space-5);grid-template-columns:1fr}}.skills-groups{gap:var(--space-5);flex-direction:column;display:flex}.skill-group-title{color:var(--text-muted);margin:0 0 var(--space-3);text-transform:uppercase;letter-spacing:.08em;font-size:.85rem;font-weight:500}.skill-list{gap:var(--space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.skill-chip{align-items:center;gap:var(--space-2);border:1px solid var(--border);padding:var(--space-2) var(--space-3);color:var(--text);font-size:.8rem;transition:border-color .15s,color .15s;display:inline-flex}.skill-chip:hover{border-color:var(--border-strong);color:var(--accent)}.skill-icon{fill:currentColor;flex-shrink:0;width:14px;height:14px}.project-grid{gap:var(--space-4);grid-template-columns:repeat(2,1fr);display:grid}.project-card{border:1px solid var(--border);padding:var(--space-5);background:var(--bg-elev);transition:border-color .15s}.project-card:hover{border-color:var(--border-strong)}.project-card .project-card-header{margin-bottom:var(--space-2);justify-content:space-between;align-items:center;display:flex}.project-card .project-card-header h3{color:var(--text);margin:0;font-size:1rem}.project-card .project-card-links{gap:var(--space-3);font-size:.95rem;display:flex}.project-card .project-card-links a{color:var(--text-muted);transition:color .15s}.project-card .project-card-links a:hover{color:var(--accent);text-decoration:none}.project-card .project-card-meta{color:var(--text-muted);margin:0 0 var(--space-3);letter-spacing:.04em;font-size:.7rem}.project-card .project-card-desc{color:var(--text-muted);margin:0 0 var(--space-3);font-size:.85rem}.project-card .project-card-tech{color:var(--text-muted);margin:0;padding:0;font-size:.7rem;line-height:1.6;list-style:none}.project-card .project-card-tech li{display:inline}.project-card .project-card-tech li:not(:last-child):after{content:" · ";color:var(--border-strong);margin:0 var(--space-1)}@media (max-width:600px){.project-grid{grid-template-columns:1fr}}.contact-section .contact-copy{color:var(--text-muted);margin:0 0 var(--space-4)}.contact-section .contact-email{margin-bottom:var(--space-5);font-size:1.05rem;font-weight:500;display:inline-block}.contact-section .contact-socials{gap:var(--space-5);margin:0;padding:0;font-size:1.4rem;list-style:none;display:flex}.contact-section .contact-socials a{color:var(--text-muted);transition:color .15s}.contact-section .contact-socials a:hover{color:var(--accent);text-decoration:none}.footer-container{border-top:1px solid var(--border);padding:var(--space-6) var(--space-5);text-align:center;color:var(--text-muted);margin-top:var(--space-8);font-size:.8rem}.footer-container p{margin:0 0 var(--space-2)}.footer-container p:last-child{margin:0}.footer-container .footer-tagline{color:var(--accent);opacity:.7;font-size:.75rem}@media (max-width:600px){.section{margin:var(--space-8) 0}.intro{padding-top:var(--space-7);padding-bottom:var(--space-6)}.name{font-size:clamp(1.75rem,9vw,2.5rem)!important}}.blog-tag-row{margin:0 0 var(--space-6);gap:var(--space-2);flex-wrap:wrap;padding:0;list-style:none;display:flex}.blog-empty{color:var(--text-muted)}.post-list{gap:var(--space-5);flex-direction:column;display:flex}.post-card{border:1px solid var(--border);background:var(--bg-elev);transition:border-color .15s}.post-card:hover{border-color:var(--border-strong)}.post-card-link{padding:var(--space-5);color:inherit;display:block}.post-card-link:hover{text-decoration:none}.post-card-meta{color:var(--text-muted);letter-spacing:.04em;margin:0 0 var(--space-2);font-size:.75rem}.post-card-title{color:var(--text);margin:0 0 var(--space-2);font-size:1.05rem}.post-card-summary{color:var(--text-muted);margin:0 0 var(--space-3);font-size:.9rem}.post-card-tags{gap:var(--space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.tag-page-back{margin-bottom:var(--space-5);font-size:.85rem;display:inline-block}.blog-post{max-width:64ch}.blog-post-header{margin-bottom:var(--space-7)}.blog-post-title{margin:0 0 var(--space-3);color:var(--text);letter-spacing:-.01em;font-size:clamp(1.75rem,5vw,2.5rem);line-height:1.15}.blog-post-meta{color:var(--text-muted);letter-spacing:.04em;margin:0 0 var(--space-4);font-size:.85rem}.blog-post-tags{gap:var(--space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.blog-post-body{color:var(--text);font-size:.95rem;line-height:1.7}.blog-post-body h2,.blog-post-body h3{margin:var(--space-7) 0 var(--space-4);color:var(--text)}.blog-post-body h2:before,.blog-post-body h3:before{content:"// ";color:var(--accent)}.blog-post-body h2{font-size:1.25rem}.blog-post-body h3{font-size:1.05rem}.blog-post-body p{margin:0 0 var(--space-4)}.blog-post-body a{color:var(--accent)}.blog-post-body a:hover{text-decoration:underline}.blog-post-body ul,.blog-post-body ol{margin:0 0 var(--space-4);padding-left:var(--space-5)}.blog-post-body li{margin-bottom:var(--space-2)}.blog-post-body blockquote{border-left:2px solid var(--accent);padding-left:var(--space-4);color:var(--text-muted);margin:var(--space-4) 0}.blog-post-body pre{background:var(--bg-elev);border:1px solid var(--border);padding:var(--space-4);margin:0 0 var(--space-4);font-size:.85rem;overflow-x:auto}.blog-post-body code{font-family:inherit}.blog-post-body p>code,.blog-post-body li>code{background:var(--bg-elev);border:1px solid var(--border);padding:.1rem .35rem;font-size:.85em}.blog-post-body img{border:1px solid var(--border);max-width:100%;height:auto;margin:var(--space-4) 0}.mermaid-block{margin:var(--space-5) 0;text-align:center;overflow-x:auto}.mermaid-fallback{background:var(--bg-elev);border:1px solid var(--border);padding:var(--space-4);color:var(--text-muted);font-size:.8rem}.prev-next{gap:var(--space-4);margin-top:var(--space-8);padding-top:var(--space-5);border-top:1px solid var(--border);grid-template-columns:1fr 1fr;display:grid}.prev-next-cell a{color:inherit;display:block}.prev-next-cell a:hover{text-decoration:none}.prev-next-cell a:hover .prev-next-title{color:var(--accent)}.prev-next-right{text-align:right}.prev-next-label{color:var(--text-muted);margin-bottom:var(--space-1);letter-spacing:.04em;font-size:.75rem;display:block}.prev-next-title{color:var(--text);font-size:.9rem;transition:color .15s;display:block}.not-found{text-align:center}@media (max-width:600px){.prev-next{grid-template-columns:1fr}.prev-next-right{text-align:left}}
