@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:400 800;font-display:swap;src:url(/_astro/bricolage-grotesque-latin-wght.CkuHVHxc.woff2)format("woff2");unicode-range:U+20-7E,U+A0,U+B0,U+B7,U+C0-C3,U+C7,U+C9,U+CA,U+CD,U+D3-D5,U+DA,U+DC,U+E0-E3,U+E7,U+E9,U+EA,U+ED,U+F3-F5,U+FA,U+FC,U+2013,U+2014,U+2018-201D,U+2022,U+2026,U+20AC,U+2122,U+2190-2193}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(/_astro/jetbrains-mono-latin-wght.B2x9_3WW.woff2)format("woff2");unicode-range:U+20-7E,U+A0,U+B0,U+B7,U+C0-C3,U+C7,U+C9,U+CA,U+CD,U+D3-D5,U+DA,U+DC,U+E0-E3,U+E7,U+E9,U+EA,U+ED,U+F3-F5,U+FA,U+FC,U+2013,U+2014,U+2018-201D,U+2022,U+2026,U+20AC,U+2122,U+2190-2193}@font-face{font-family:JetBrains Mono Fallback;src:local(Courier New),local(Liberation Mono),local(Cousine);ascent-override:102%;descent-override:30%;line-gap-override:0%}:root{color-scheme:dark;--color-primary:#c6f432;--color-on-primary:#0b0c0e;--color-accent-text:#c6f432;--color-bg:#0b0c0e;--color-surface:#131417;--color-border:#26272c;--color-text:#f2f1ec;--color-text-muted:#9a9ca3;--color-success:#5fd38a;--color-warning:#f5b84b;--color-error:#ff6b5e;--font-display:"Bricolage Grotesque", system-ui, sans-serif;--font-body:var(--font-display);--font-mono:"JetBrains Mono", "JetBrains Mono Fallback", ui-monospace, monospace;--text-hero:clamp(3.5rem, 14vw, 12rem);--text-headline:clamp(2.5rem, 6vw, 5rem);--text-title:clamp(1.75rem, 3.5vw, 2.75rem);--text-body:1.0625rem;--text-label:.875rem;--text-tag:.8125rem;--weight-hero:800;--weight-headline:700;--weight-title:600;--weight-body:400;--weight-label:500;--leading-hero:.9;--leading-headline:1;--leading-title:1.1;--leading-body:1.55;--tracking-display:-.02em;--tracking-label:.04em;--radius-sm:4px;--radius-md:8px;--border:1px solid var(--color-border);--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--space-8:32px;--space-12:48px;--space-16:64px;--space-section:96px;--space-section-max:160px;--gutter:16px;--measure:68ch;--wide:1280px;--tap:44px;--shadow-palette:0 24px 64px #00000080;--ease-out:cubic-bezier(.23, 1, .32, 1);--ease-in-out:cubic-bezier(.77, 0, .175, 1);--dur-press:.12s;--dur-ui:.2s}@media (width>=640px){:root{--gutter:32px}}@media (width>=960px){:root{--gutter:48px}}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){color-scheme:light;--color-accent-text:#3f6200;--color-bg:#f4f3ee;--color-surface:#eae9e3;--color-border:#d5d4cd;--color-text:#0e0f11;--color-text-muted:#55575e;--color-success:#1f7a45;--color-warning:#8a5a00;--color-error:#b42318;--shadow-palette:0 24px 64px #0003}}:root[data-theme=light]{color-scheme:light;--color-accent-text:#3f6200;--color-bg:#f4f3ee;--color-surface:#eae9e3;--color-border:#d5d4cd;--color-text:#0e0f11;--color-text-muted:#55575e;--color-success:#1f7a45;--color-warning:#8a5a00;--color-error:#b42318;--shadow-palette:0 24px 64px #0003}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:72px}html.menu-open,html.palette-open{overflow:hidden}html.lenis,html.lenis body{height:auto}.lenis.lenis-smooth{scroll-behavior:auto!important}.lenis.lenis-stopped{overflow:clip}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-body);font-size:var(--text-body);font-weight:var(--weight-body);line-height:var(--leading-body);overflow-wrap:break-word;margin:0;overflow-x:clip}h1,h2,h3,p,ul,ol,dl,figure{margin:0}ul,ol{padding:0;list-style:none}img{max-width:100%;height:auto;display:block}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}[hidden]{display:none!important}h1{font-size:var(--text-hero);font-weight:var(--weight-hero);line-height:var(--leading-hero);letter-spacing:var(--tracking-display)}h2{font-size:var(--text-headline);font-weight:var(--weight-headline);line-height:var(--leading-headline);letter-spacing:var(--tracking-display)}h3{font-size:var(--text-title);font-weight:var(--weight-title);line-height:var(--leading-title)}h2,h3,.hero__role{text-wrap:balance}p{text-wrap:pretty}a{color:var(--color-accent-text);text-underline-offset:4px}a:hover{text-decoration-thickness:2px}::selection{background:var(--color-primary);color:var(--color-on-primary)}:focus-visible{outline:2px solid var(--color-accent-text);outline-offset:3px}.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}.skip-link{left:var(--space-4);top:var(--space-4);padding:var(--space-3) var(--space-4);background:var(--color-primary);color:var(--color-on-primary);font-family:var(--font-mono);font-size:var(--text-label);z-index:100;position:absolute;transform:translateY(-200%)}.skip-link:focus{transform:none}.wrap{width:100%;max-width:var(--wide);padding-inline:var(--gutter);margin-inline:auto}.label,.tag,.terminal,.btn,.todo,.tool{font-family:var(--font-mono);font-size:var(--text-label);font-weight:var(--weight-label);letter-spacing:var(--tracking-label)}.label{line-height:1.5}.todo{color:var(--color-warning)}.muted{color:var(--color-text-muted)}.measure{max-width:var(--measure)}.stack>*+*{margin-top:var(--space-4)}@media (width>=960px){.grid{column-gap:var(--space-8);grid-template-columns:repeat(12,1fr);display:grid}}.site-header{z-index:50;position:sticky;top:0}.site-header:before{content:"";z-index:0;pointer-events:none;background:var(--color-bg);border-bottom:var(--border);opacity:0;transition:opacity var(--dur-ui) var(--ease-out);position:absolute;inset:0}.site-header.is-scrolled:before,html.menu-open .site-header:before{opacity:1}.site-header__bar{z-index:2;justify-content:space-between;align-items:center;gap:var(--space-4);min-height:64px;display:flex;position:relative}.wordmark,.site-header__tools{z-index:2;position:relative}.wordmark{white-space:nowrap;min-height:var(--tap);color:var(--color-text);font-weight:var(--weight-title);align-items:center;text-decoration:none;display:inline-flex}.site-nav ul{gap:0 var(--space-6);flex-wrap:wrap;display:flex}.site-nav a{min-height:var(--tap);color:var(--color-text);font-family:var(--font-mono);font-size:var(--text-label);align-items:center;text-decoration:none;display:inline-flex}.site-nav a:hover{text-underline-offset:6px;text-decoration:underline}.site-header__tools{align-items:center;gap:var(--space-1);display:flex}.tool{min-width:var(--tap);min-height:var(--tap);padding-inline:var(--space-2);color:var(--color-text);border-radius:var(--radius-sm);justify-content:center;align-items:center;text-decoration:none;display:inline-flex}.tool:active{transition:transform var(--dur-press) var(--ease-out);transform:scale(.97)}.menu-btn,.tool--contact,.nav-lang,.menu-btn__close{display:none}@media (width<=959px){.site-header__bar{flex-wrap:wrap}.js .site-header__bar{flex-wrap:nowrap}.js .site-header__tools{margin-left:auto}.js .menu-btn,.js .tool--contact{display:inline-flex}.menu-btn{min-width:60px}.js .site-header__tools>[data-lang-toggle]{display:none}.js .nav-lang{margin-top:var(--space-6);display:list-item}.js .site-nav .nav-lang a{font-family:var(--font-mono);font-size:var(--text-label);font-weight:var(--weight-label);letter-spacing:var(--tracking-label);color:var(--color-text-muted)}.js .menu-btn[aria-expanded=true] .menu-btn__open{display:none}.js .menu-btn[aria-expanded=true] .menu-btn__close{display:inline}.js .site-nav{z-index:1;padding:96px var(--gutter) var(--space-8);background:var(--color-bg);opacity:0;visibility:hidden;transition:opacity .15s var(--ease-out), visibility 0s linear .15s;flex-direction:column;justify-content:center;display:flex;position:fixed;inset:0}.js .site-nav.is-open{opacity:1;visibility:visible;transition:opacity var(--dur-ui) var(--ease-out), visibility 0s}.js .site-nav ul{gap:var(--space-2);flex-direction:column}.js .site-nav a{font-family:var(--font-display);font-size:var(--text-headline);font-weight:var(--weight-headline);letter-spacing:var(--tracking-display);line-height:1.1}.js .site-nav li{opacity:0;transform:translateY(12px)}.js .site-nav.is-open li{opacity:1;transition:opacity .26s var(--ease-out), transform .26s var(--ease-out);transition-delay:calc(var(--i) * 40ms + 40ms);transform:none}}.hero{min-height:calc(100svh - 64px);padding-block:var(--space-16);flex-direction:column;justify-content:flex-end;display:flex}.hero__top{padding-bottom:var(--space-12);margin-bottom:auto}.hero__photo{align-items:flex-end;gap:var(--space-4);display:flex}.hero__photo img{aspect-ratio:1;object-fit:cover;object-position:50% 20%;border:var(--border);border-radius:var(--radius-md);width:clamp(96px,14vw,168px);height:auto}.hero__photo figcaption{padding-bottom:var(--space-1)}.hero h1{margin:0 0 var(--space-12) -.04em;position:relative}.word{white-space:nowrap;display:inline-block}.ch{display:inline-block}.hero__meta{gap:var(--space-8);display:grid}.hero__role{font-size:var(--text-title);font-weight:var(--weight-title);line-height:var(--leading-title);max-width:24ch}.hero__note{margin-top:var(--space-4);max-width:44ch}.hero__cta{margin-top:var(--space-6)}@media (width<=959px){.hero{min-height:0;padding-block:var(--space-12) var(--space-16);justify-content:flex-start}}.terminal{align-items:center;gap:var(--space-3);min-height:4.5rem;padding:var(--space-3) var(--space-4);background:var(--color-surface);border:var(--border);border-radius:var(--radius-md);max-width:var(--measure);width:100%;display:flex}.terminal__prompt{color:var(--color-accent-text);align-self:center}.terminal__text{flex:auto}.terminal__text a{color:var(--color-accent-text)}.caret{background:var(--color-accent-text);width:.6ch;height:1.1em;animation:1.1s step-end infinite blink}@keyframes blink{50%{opacity:0}}@media (width>=960px){.hero__meta{column-gap:var(--space-8);grid-template-columns:repeat(12,1fr);align-items:end}.hero__lead{grid-area:1/7/auto/-1}.terminal{grid-area:1/1/auto/span 6;align-self:end}}.intro .ch,.intro .hero__lead,.intro .terminal{opacity:0}section{padding-block:var(--space-section)}.do{padding-top:var(--space-section-max)}.about{padding-block:var(--space-section-max)}.contact{padding-top:var(--space-section);padding-bottom:var(--space-section-max)}h2{margin-bottom:var(--space-8)}.do-list{gap:var(--space-8);display:grid}.do-list li{padding-top:var(--space-4);border-top:var(--border)}.do-list h3{margin-bottom:var(--space-2)}.tools{margin-top:var(--space-12)}.tools ul{gap:var(--space-2);margin-block:var(--space-2) var(--space-4);flex-wrap:wrap;display:flex}@media (width>=960px){.do__title{grid-column:1/span 5;margin-bottom:0}.do__body{grid-column:6/-1}}.tag{border:var(--border);border-radius:var(--radius-sm);color:var(--color-text-muted);font-size:var(--text-tag);padding:2px 8px;display:inline-block}.work__intro{margin-bottom:var(--space-12)}.projects{counter-reset:p}.project{counter-increment:p;padding-block:var(--space-8);border-top:var(--border)}.project:before{content:counter(p, decimal-leading-zero);margin-bottom:var(--space-4);font-family:var(--font-mono);font-size:var(--text-label);color:var(--color-text-muted);display:block}.project h3 a{color:var(--color-text);text-decoration:none;display:inline-block;position:relative}.project h3 a:before{content:"";position:absolute;inset:-7px 0}.project h3 a:after{content:"";background:var(--color-accent-text);transform-origin:0;height:.07em;transition:transform .25s var(--ease-out);position:absolute;bottom:-.06em;left:0;right:0;transform:scaleX(0)}.project h3{margin-bottom:var(--space-3)}.project .tags{gap:var(--space-2);margin-block:var(--space-4);flex-wrap:wrap;display:flex}.project .links{gap:var(--space-6);flex-wrap:wrap;display:flex}.project .links a{min-height:var(--tap);font-family:var(--font-mono);font-size:var(--text-label);align-items:center;display:inline-flex}.project figure{margin-bottom:var(--space-4);border:var(--border);border-radius:var(--radius-md);overflow:hidden}.project figure img{aspect-ratio:16/10;object-fit:cover;width:100%}@media (width>=960px){.projects{column-gap:var(--space-8);grid-template-columns:repeat(12,1fr);align-items:start;display:grid}.project{grid-column:span 4}.project--wide{grid-column:span 8}.project--wide h3{font-size:var(--text-headline);line-height:var(--leading-headline);letter-spacing:var(--tracking-display)}.project--wide+.project{margin-top:var(--space-16)}}@media (hover:hover) and (pointer:fine){.project:hover h3 a:after{transform:scaleX(1)}}@media (width>=960px){.about__side{grid-column:1/span 5}.about__title{margin-bottom:var(--space-8)}.about__body{grid-column:7/span 5}}.buttons{gap:var(--space-4);margin-top:var(--space-8);flex-wrap:wrap;display:flex}.btn{border:1px solid var(--color-border);border-radius:var(--radius-sm);min-height:48px;color:var(--color-text);cursor:pointer;place-items:center;padding:14px 24px;text-decoration:none;display:inline-grid}.btn:active{transition:transform var(--dur-press) var(--ease-out);transform:scale(.97)}.btn--primary{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-primary)}.btn--primary:hover{text-decoration:none}.btn__label,.btn__done{transition:opacity .15s var(--ease-out);grid-area:1/1}.btn__done{opacity:0;color:var(--color-success)}.btn[data-state=copied]{border-color:var(--color-success)}.btn[data-state=copied] .btn__label{opacity:0}.btn[data-state=copied] .btn__done{opacity:1}.btn[data-state=failed] .btn__done{color:var(--color-error)}.btn[data-state=failed]{border-color:var(--color-error)}.btn[data-state=failed] .btn__label{opacity:0}.btn[data-state=failed] .btn__done{opacity:1}@media (hover:hover) and (pointer:fine){.btn{transition:transform .16s var(--ease-out)}.btn--primary:hover{transform:translateY(-1px)}.btn:not(.btn--primary):hover{border-color:var(--color-text)}}.contact__email{margin-top:var(--space-6)}.palette-btn{display:none}@media (width>=960px){.palette-btn:not([hidden]){display:inline-flex}}.palette-btn{border:var(--border);color:var(--color-text-muted);font-size:var(--text-tag)}.palette{width:min(560px, calc(100vw - 2 * var(--gutter)));padding:var(--space-4);background:var(--color-surface);color:var(--color-text);border:var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-palette);margin:14vh auto 0}.palette::backdrop{background:#00000080}.palette__input{width:100%;min-height:48px;padding:0 var(--space-4);background:var(--color-surface);color:var(--color-text);border:var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:var(--text-label);letter-spacing:var(--tracking-label)}.palette__input::placeholder{color:var(--color-text-muted)}.palette__input:focus-visible{outline:2px solid var(--color-accent-text);outline-offset:2px}.palette__list{margin-top:var(--space-2);max-height:min(50vh,360px);overflow-y:auto}.palette__list li{justify-content:space-between;align-items:center;gap:var(--space-4);min-height:var(--tap);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);cursor:pointer;display:flex}.palette__list li[aria-selected=true]{background:var(--color-bg)}.palette__list li[aria-selected=true] .palette__label:before{content:"> ";color:var(--color-accent-text);font-family:var(--font-mono)}.palette__group{color:var(--color-text-muted);font-size:var(--text-tag)}.palette__empty{padding:var(--space-4) var(--space-3);color:var(--color-text-muted)}.palette__foot{justify-content:space-between;gap:var(--space-4);margin:var(--space-3) 0 0;padding-top:var(--space-3);border-top:var(--border);color:var(--color-text-muted);font-size:var(--text-tag);display:flex}.palette__status[data-state=ok]{color:var(--color-success)}.palette__status[data-state=fail]{color:var(--color-error)}.site-footer{padding-block:var(--space-12);border-top:var(--border)}.site-footer .wrap{gap:var(--space-4);display:grid}.footer-links{gap:0 var(--space-6);flex-wrap:wrap;display:flex}.linklike{color:var(--color-accent-text);text-underline-offset:4px;min-height:var(--tap);text-decoration:underline}.linklike:hover{text-decoration-thickness:2px}.forget{align-items:center;gap:0 var(--space-4);flex-wrap:wrap;display:flex}.footer-links a{min-height:var(--tap);align-items:center;display:inline-flex}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.caret{animation:none}.site-nav,.site-nav li,.site-header:before{transition:none!important}}
