@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.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:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.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:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.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:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.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:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.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:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.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:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.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:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.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:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk Fallback;src:local(Arial);ascent-override:99.07%;descent-override:30.02%;line-gap-override:0.0%;size-adjust:100.94%}.e3Zx_q_className{font-family:Hanken Grotesk,Hanken Grotesk Fallback;font-style:normal}.e3Zx_q_variable{--font-hanken:"Hanken Grotesk", "Hanken Grotesk Fallback"}
@font-face{font-family:Young Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/5baf1b65c11560cb-s.3fa6shooes3qd.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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Young Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/d0f5953821b08bc1-s.p.21s_cahnw20sc.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:Young Serif Fallback;src:local(Times New Roman);ascent-override:83.16%;descent-override:29.1%;line-gap-override:0.0%;size-adjust:125.78%}._9MIkiW_className{font-family:Young Serif,Young Serif Fallback;font-style:normal;font-weight:400}._9MIkiW_variable{--font-young:"Young Serif", "Young Serif Fallback"}
@font-face{font-family:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/b12e986493c137cf-s.2tuvx2ggl0uf7.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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/36363bfb06833f56-s.p.048ctm9k7u_u3.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:DM Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/b2fa3ef4ca165ab4-s.2t3qiyt2vl-ta.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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/a73419dd2ba2d841-s.p.2_s53-223o24o.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:DM Mono Fallback;src:local(Arial);ascent-override:73.71%;descent-override:23.03%;line-gap-override:0.0%;size-adjust:134.59%}.TeWtiG_className{font-family:DM Mono,DM Mono Fallback;font-style:normal}.TeWtiG_variable{--font-dm-mono:"DM Mono", "DM Mono Fallback"}
:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f3f6f2;--paper:#fbfcfa;--ink:#12201a;--muted:#56655d;--line:#d3dcd4;--accent:#0d7a4e;--accent-ink:#fff;--soft:#0d7a4e17;--mark:#f5e17a;--note:#fff3b0;--note-ink:#2b2a12;--f-display:var(--font-young), Georgia, "Times New Roman", serif;--f-body:var(--font-hanken), "Segoe UI", system-ui, sans-serif;--f-mono:var(--font-dm-mono), ui-monospace, Menlo, monospace}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0d1512;--paper:#121c18;--ink:#eaf2ed;--muted:#94a79c;--line:#243530;--accent:#5fd3a0;--accent-ink:#052014;--soft:#5fd3a01a;--mark:#e0be286b;--note:#e9d675;--note-ink:#24220c}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0d1512;--paper:#121c18;--ink:#eaf2ed;--muted:#94a79c;--line:#243530;--accent:#5fd3a0;--accent-ink:#052014;--soft:#5fd3a01a;--mark:#e0be286b;--note:#e9d675;--note-ink:#24220c}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font:400 17px/1.65 var(--f-body);margin:0;padding-block:0 40px;padding-inline:24px;overflow-x:hidden}.wrap{max-width:1080px;margin-inline:auto}a{color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}h1,h2,h3{font-family:var(--f-display);text-wrap:balance;margin:0;font-weight:400;line-height:1.12}p{margin:0}.mark{background:linear-gradient(transparent 60%, var(--mark) 60% 90%, transparent 90%);padding-inline:2px}.bar{top:env(safe-area-inset-top,0px);z-index:10;background:color-mix(in srgb, var(--bg) 92%, transparent);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--line);margin-inline:-24px;padding-inline:24px;position:sticky}.bar-in{flex-wrap:wrap;align-items:center;gap:12px 28px;max-width:1080px;margin-inline:auto;padding-block:14px;display:flex}.brand{font:600 16px var(--f-body);align-items:center;gap:10px;margin-right:auto;text-decoration:none;display:flex}.brand b{background:var(--accent);width:32px;height:32px;color:var(--accent-ink);font:400 14px var(--f-display);border-radius:6px;place-items:center;display:grid}.links{scrollbar-width:none;gap:22px;min-width:0;display:flex;overflow-x:auto}.links::-webkit-scrollbar{display:none}.links a{color:var(--muted);white-space:nowrap;border-bottom:2px solid #0000;padding-block:4px;font-size:15px;text-decoration:none}.links a:hover{color:var(--ink);border-color:var(--accent)}.links a.on{color:var(--ink);border-color:var(--accent);font-weight:600}.nav-menu{display:contents}.menu-btn{border:1px solid var(--line);width:38px;height:38px;color:var(--ink);cursor:pointer;background:0 0;border-radius:50%;place-items:center;display:none}.menu-btn:hover{border-color:var(--accent)}.menu-icon{width:16px;height:12px;display:block;position:relative}.menu-icon i{background:currentColor;border-radius:1px;width:100%;height:2px;transition:transform .2s,opacity .2s;position:absolute;left:0}.menu-icon i:first-child{top:0}.menu-icon i:nth-child(2){top:5px}.menu-icon i:nth-child(3){top:10px}.menu-btn[aria-expanded=true] .menu-icon i:first-child{transform:translateY(5px)rotate(45deg)}.menu-btn[aria-expanded=true] .menu-icon i:nth-child(2){opacity:0}.menu-btn[aria-expanded=true] .menu-icon i:nth-child(3){transform:translateY(-5px)rotate(-45deg)}.theme{border:1px solid var(--line);width:34px;height:34px;color:var(--ink);cursor:pointer;background:0 0;border-radius:50%;place-items:center;display:grid}.theme:hover{border-color:var(--accent)}.theme svg{width:16px;height:16px}.btn{font:600 15px/1 var(--f-body);border:1.5px solid var(--ink);color:var(--ink);cursor:pointer;background:0 0;border-radius:6px;align-items:center;gap:8px;padding:14px 20px;text-decoration:none;transition:background .2s,color .2s,transform .2s;display:inline-flex}.btn:hover{background:var(--ink);color:var(--bg)}.btn.pri{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn.pri:hover{background:var(--ink);border-color:var(--ink);color:var(--bg)}.btn.sm{padding:10px 16px;font-size:14px}.hero{isolation:isolate;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);align-items:center;gap:56px;padding-block:72px 56px;display:grid;position:relative}.hero:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(440px circle at var(--gx,72%) var(--gy,30%), var(--soft), transparent 70%);position:absolute;inset:-40px -24px 0}.where{color:var(--muted);align-items:center;gap:12px;margin-bottom:20px;font-size:15px;display:flex}.avatar{background:var(--accent);width:46px;height:46px;color:var(--accent-ink);font:400 17px var(--f-display);border-radius:50%;flex:none;place-items:center;display:grid}h1{letter-spacing:-.015em;margin-bottom:26px;font-size:clamp(2.5rem,6.6vw,4.8rem)}h1 .wavy{color:var(--accent);display:inline-block;position:relative}h1 .wavy svg{width:100%;height:.3em;position:absolute;bottom:-.18em;left:0;right:0}.lead{color:var(--muted);max-width:54ch;margin-bottom:30px;font-size:clamp(1.05rem,2vw,1.22rem)}.lead b{color:var(--ink);font-weight:600}.cta{flex-wrap:wrap;gap:12px;display:flex}.note{background:var(--note);color:var(--note-ink);border-radius:3px;padding:26px 26px 28px;transform:rotate(-1.6deg);box-shadow:0 1px #0000000d,0 14px 30px -14px #12201a59}.note h2{font:400 1.25rem var(--f-display);margin-bottom:14px}.note ul{gap:10px;margin:0;padding:0;font-size:16px;list-style:none;display:grid}.note li{gap:10px;display:flex}.note li:before{content:"→";font-weight:700}.note small{font:500 12px var(--f-mono);opacity:.7;margin-top:16px;display:block}.hero-side{align-content:center;gap:26px;display:grid}.hero-art svg{width:100%;height:auto;display:block}.hero-art .art-line{transform-box:fill-box;transform-origin:0;animation:2.6s ease-in-out infinite art-type}@keyframes art-type{0%,15%{opacity:.12}45%,85%{opacity:1}to{opacity:.12}}.hero-art .art-cursor{animation:1.1s steps(2,end) infinite art-blink}@keyframes art-blink{50%{opacity:0}}.hero-art .art-progress{transform-box:fill-box;transform-origin:0;animation:3.4s cubic-bezier(.4,0,.2,1) infinite art-fill}@keyframes art-fill{0%{transform:scaleX(.05)}55%,78%{transform:scaleX(1)}to{transform:scaleX(.05)}}.hero-art .art-gear{transform-box:fill-box;transform-origin:50%;animation:16s linear infinite art-spin}@keyframes art-spin{to{transform:rotate(360deg)}}.hero-art .art-wrench{transform-box:fill-box;transform-origin:50%;animation:4.5s ease-in-out infinite art-tilt}@keyframes art-tilt{0%,to{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.hero-art .art-badge{transform-box:fill-box;transform-origin:50%;animation:4.2s ease-in-out infinite art-pop}@keyframes art-pop{0%,62%,to{transform:scale(1)}68%{transform:scale(1.14)}74%{transform:scale(1)}}.hero-art .art-ring{transform-box:fill-box;transform-origin:50%;animation:4.2s ease-out infinite art-ping}@keyframes art-ping{0%,55%{opacity:.5;transform:scale(.85)}80%,to{opacity:0;transform:scale(1.7)}}.hero-art .art-spark{transform-box:fill-box;transform-origin:50%;animation:3.4s ease-in-out infinite art-twinkle}@keyframes art-twinkle{0%,to{opacity:.15;transform:scale(.55)}45%{opacity:1;transform:scale(1)}}.nums{border-block:1px solid var(--line);grid-template-columns:repeat(4,1fr);margin-bottom:96px;display:grid}.nums div{min-width:0;padding:26px 24px 26px 0}.nums div+div{border-left:1px solid var(--line);padding-left:24px}.nums strong{font:400 clamp(2rem, 4.5vw, 3rem)/1 var(--f-display);color:var(--accent);font-variant-numeric:tabular-nums;display:block}.nums span{color:var(--muted);margin-top:8px;font-size:14.5px;display:block}section{padding-bottom:96px;scroll-margin-top:90px}.row{grid-template-columns:220px minmax(0,1fr);gap:16px 48px;padding-top:28px;display:grid;position:relative}.row:before{content:"";background:var(--ink);transform-origin:0;height:2px;position:absolute;top:0;left:0;right:0}.row>*{min-width:0}.row h2{font-size:1.9rem}.row .aside{color:var(--muted);font-size:15px;font-family:var(--f-body);margin-top:8px}.item{border-bottom:1px solid var(--line);grid-template-columns:150px minmax(0,1fr);gap:8px 28px;padding-block:24px;display:grid}.item:first-child{padding-top:0}.item:last-child{border-bottom:0;padding-bottom:0}.item>*{min-width:0}.when{font:500 13px/1.7 var(--f-mono);color:var(--muted);padding-top:6px}.item h3{margin-bottom:4px;font-size:1.35rem}.sub{color:var(--muted);margin-bottom:12px;font-size:15px}.item ul{color:var(--muted);gap:8px;margin:0;padding-left:20px;display:grid}.item li::marker{color:var(--accent)}.item li b{color:var(--ink);font-weight:600}.item.next .when:after{content:" (target)"}.about p{color:var(--muted);max-width:62ch}.about p+p{margin-top:16px}.about p b{color:var(--ink);font-weight:600}.facts{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 32px;margin:32px 0 0;display:grid}.facts div{border-top:1px solid var(--line);padding-block:14px}.facts dt{color:var(--muted);font-size:13px}.facts dd{margin:2px 0 0;font-weight:600}.svc{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 48px;display:grid}.svc article{border-bottom:1px solid var(--line);padding-block:24px}.svc article:nth-last-child(-n+2){border-bottom:0}.svc h3{margin-bottom:8px;font-size:1.3rem}.svc p{color:var(--muted);margin-bottom:10px;font-size:16px}.svc ul{gap:4px;margin:0;padding:0;font-size:15px;list-style:none;display:grid}.svc li:before{content:"+ ";color:var(--accent);font-weight:700}.svc-cta{background:var(--soft);border-radius:8px;flex-wrap:wrap;align-items:center;gap:14px 20px;margin-top:28px;padding:22px 24px;display:flex}.svc-cta span{font:400 1.2rem var(--f-display);margin-right:auto}.skills{margin:0;display:grid}.skills>div{border-bottom:1px solid var(--line);grid-template-columns:150px minmax(0,1fr);gap:6px 28px;padding-block:18px;display:grid}.skills>div:first-child{padding-top:0}.skills>div:last-child{border-bottom:0;padding-bottom:0}.skills dt{font-weight:600}.skills dd{flex-wrap:wrap;gap:8px;margin:0;display:flex}.tag{background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:8px 11px;font-size:14px;line-height:1}.tag.hot{background:var(--soft);color:var(--accent);border-color:#0000;font-weight:600}.certs{margin:0;padding:0;list-style:none}.certs li{border-bottom:1px solid var(--line);grid-template-columns:28px minmax(0,1fr) auto;align-items:start;gap:4px 16px;padding-block:16px;display:grid}.certs li:first-child{padding-top:0}.certs svg{width:20px;height:20px;color:var(--accent);margin-top:3px}.certs h3{font:600 1.05rem/1.4 var(--f-body)}.certs p{color:var(--muted);grid-column:2;font-size:15px}.certs .by{font:500 12px var(--f-mono);color:var(--muted);padding-top:5px}.road-h{font:400 1.2rem var(--f-display);margin:36px 0 6px}.road li{grid-template-columns:86px minmax(0,1fr) auto}.road .code{font:400 1.2rem var(--f-display)}.road .st{font:500 12px var(--f-mono);border:1px solid var(--line);color:var(--muted);border-radius:4px;padding:6px 9px}.road .st.on{background:var(--soft);color:var(--accent);border-color:#0000}.road p{grid-column:2}.proj{margin:0;padding:0;list-style:none}.proj li{border-bottom:1px solid var(--line);border-radius:6px;grid-template-columns:130px minmax(0,1fr) auto;align-items:start;gap:6px 28px;margin-inline:-12px;padding:22px 12px;transition:background .2s;display:grid}.proj li:first-child{padding-top:22px}.proj li:hover{background:radial-gradient(280px circle at var(--mx,50%) var(--my,50%), color-mix(in srgb, var(--accent) 15%, transparent), transparent 70%), var(--soft)}.proj .go{transition:transform .2s}.proj li:hover .go{transform:translate(4px)}.proj .kind{font:500 13px/1.7 var(--f-mono);color:var(--muted);padding-top:5px}.proj h3{margin-bottom:6px;font-size:1.35rem}.proj p{color:var(--muted);max-width:60ch;margin-bottom:12px;font-size:16px}.proj .tags{flex-wrap:wrap;gap:6px;display:flex}.proj .tags span{font:500 12px var(--f-mono);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:5px 8px}.proj .go{color:var(--accent);white-space:nowrap;border-bottom:1.5px solid #0000;justify-self:end;padding-top:6px;font-size:15px;font-weight:600;text-decoration:none}.proj .go:hover{border-color:var(--accent)}.proj .priv{color:var(--muted);justify-self:end;padding-top:8px;font-size:14px}.contact{background:var(--ink);color:var(--bg);border-radius:10px;padding:clamp(28px,6vw,60px)}.contact h2{max-width:18ch;margin-bottom:18px;font-size:clamp(2rem,5.4vw,3.6rem)}.contact p{color:color-mix(in srgb, var(--bg) 72%, transparent);max-width:50ch;margin-bottom:28px}.cform{gap:14px;max-width:640px;margin-bottom:28px;display:grid}.cform-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.cform label{gap:6px;display:grid}.cform label span{font:500 12px var(--f-mono);letter-spacing:.04em;text-transform:uppercase;color:color-mix(in srgb, var(--bg) 65%, transparent)}.cform input,.cform textarea{border:1.5px solid color-mix(in srgb, var(--bg) 26%, transparent);background:color-mix(in srgb, var(--bg) 6%, transparent);width:100%;color:var(--bg);font:400 16px/1.5 var(--f-body);border-radius:6px;padding:12px 14px}.cform input:focus,.cform textarea:focus{outline:2px solid var(--accent);outline-offset:2px}.cform textarea{resize:vertical;min-height:116px}.cform input.cform-hp{opacity:0;border:0;width:1px;height:1px;padding:0;position:absolute;left:-9999px}.cform-foot{flex-wrap:wrap;align-items:center;gap:10px 18px;display:flex}.cform-note{color:color-mix(in srgb, var(--bg) 70%, transparent);margin:0;font-size:14px}.cform-note a{color:var(--bg);-webkit-text-decoration-color:var(--mark);text-decoration-color:var(--mark);text-underline-offset:3px}.cform .btn[disabled]{opacity:.6;cursor:progress}.cform .cform-error{color:color-mix(in srgb, var(--bg) 55%, #e0564b);margin:0;font-size:13.5px;line-height:1.45}.cform-done{border:1.5px solid color-mix(in srgb, var(--bg) 26%, transparent);border-radius:8px;gap:4px;max-width:640px;margin-bottom:28px;padding:20px 22px;display:grid}.cform-done strong{font:600 17px var(--f-body)}.cform-done p{color:color-mix(in srgb, var(--bg) 72%, transparent);margin:0}.contact .btn{color:var(--bg);border-color:var(--bg)}.contact .btn:hover{background:var(--bg);color:var(--ink)}.contact .btn.pri{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.contact .btn.pri:hover{background:var(--bg);border-color:var(--bg);color:var(--ink)}.contact .meta{color:color-mix(in srgb, var(--bg) 72%, transparent);flex-wrap:wrap;gap:8px 22px;margin-top:28px;font-size:15px;display:flex}.social{flex-wrap:wrap;gap:10px;display:flex}footer{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:6px 20px;margin-top:28px;font-size:14px;display:flex}.hero>div:first-child>*{animation:.7s cubic-bezier(.2,.8,.2,1) both up}.hero>div:first-child>:nth-child(2){animation-delay:60ms}.hero>div:first-child>:nth-child(3){animation-delay:.12s}.hero>div:first-child>:nth-child(4){animation-delay:.18s}@keyframes up{0%{transform:translateY(14px)}}.hero>div:first-child>:nth-child(5){animation-delay:.24s}.progress{background:var(--accent);transform-origin:0;pointer-events:none;height:3px;position:absolute;bottom:-1px;left:0;right:0;transform:scaleX(0)}.wavy path{stroke-dasharray:1;animation:1.1s cubic-bezier(.5,0,.2,1) .8s backwards draw}@keyframes draw{0%{stroke-dashoffset:1px}}.typed{font:500 15px var(--f-mono);min-height:1.7em;margin:-8px 0 28px}.typed #typed{color:var(--accent)}.typed .caret{vertical-align:-3px;background:var(--accent);width:2px;height:1.05em;margin-left:2px;animation:1s steps(2,end) infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.note{animation:7s ease-in-out 1.2s infinite bob}@keyframes bob{0%,to{transform:rotate(-1.6deg)translateY(0)}50%{transform:rotate(-.7deg)translateY(-7px)}}.note h2{align-items:center;gap:10px;display:flex}.live{background:var(--note-ink);border-radius:50%;flex:none;width:9px;height:9px;animation:2s infinite ping}@keyframes ping{0%{box-shadow:0 0 #2b2a1280}70%,to{box-shadow:0 0 0 9px #2b2a1200}}.rv.rv{opacity:0;transition:opacity .7s,transform .7s cubic-bezier(.2,.8,.2,1),background .2s;transition-delay:var(--d,0s);transform:translateY(24px)}.rv.rv.in{opacity:1;transform:none}.row.rv-line:before{transform:scaleX(0)}.row.rv-line.in:before{transition:transform 1.1s cubic-bezier(.5,0,.2,1);transform:scaleX(1)}.skills>div.in .tag{animation:.5s cubic-bezier(.2,.9,.3,1.4) both pop;animation-delay:calc(var(--i,0) * 70ms + .25s)}.certs:not(.road) li.in svg{animation:.5s cubic-bezier(.2,.9,.3,1.5) .35s both pop}@keyframes pop{0%{opacity:0;transform:scale(.55)}}@media (max-width:860px){.bar-in{gap:10px}.brand{order:1}.theme{order:2;width:38px;height:38px}.bar .btn{order:3}.menu-btn{order:4;display:grid}.links{background:var(--bg);border-bottom:1px solid var(--line);flex-direction:column;gap:0;padding:4px 16px 12px;display:none;position:absolute;top:100%;left:0;right:0;overflow:visible;box-shadow:0 22px 30px -26px #0000008c}.links.open{animation:.18s ease-out menu-in;display:flex}.links a{border-bottom:1px solid var(--line);padding-block:13px;font-size:16px}.links a:last-child{border-bottom:0}section{scroll-margin-top:68px}.hero{grid-template-columns:minmax(0,1fr);gap:44px;padding-block:44px 40px}.hero-side,.note{max-width:420px}.nums{grid-template-columns:repeat(2,1fr);margin-bottom:72px}.nums div:nth-child(3){border-left:0;padding-left:0}.nums div:nth-child(n+3){border-top:1px solid var(--line)}section{padding-bottom:72px}.row{grid-template-columns:minmax(0,1fr);gap:20px}.svc{grid-template-columns:minmax(0,1fr)}.svc article:nth-last-child(2){border-bottom:1px solid var(--line)}.proj li{grid-template-columns:minmax(0,1fr);gap:4px}.proj .go,.proj .priv{justify-self:start;padding-top:4px}}@media (max-width:560px){body{padding-inline:16px}.bar{margin-inline:-16px;padding-inline:16px}.bar-in{padding-block:8px}.brand span{display:none}.hero{gap:36px;padding-block:36px 32px}.hero:before{inset:-40px 0 0}.proj li{margin-inline:0;padding-inline:0}.proj .go{padding-block:8px}.item,.skills>div,.cform-row,.facts{grid-template-columns:minmax(0,1fr)}.road li{grid-template-columns:74px minmax(0,1fr)}.road li .st{grid-column:2;justify-self:start}.certs li{grid-template-columns:28px minmax(0,1fr)}.certs .by{grid-column:2;padding-top:0}}@keyframes menu-in{0%{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.note,.live,.typed .caret,.hero>div:first-child>*,.hero-art *{animation:none}.rv.rv{transform:none}.skills>div.in .tag,.certs:not(.road) li.in svg{animation-name:fadein}.btn:hover,.proj li:hover .go{transform:none}@keyframes fadein{0%{opacity:0}}}.st{max-width:1120px;margin-inline:auto;padding-block:40px 80px}.st-head{border-bottom:2px solid var(--ink);flex-wrap:wrap;align-items:center;gap:12px 20px;margin-bottom:26px;padding-bottom:22px;display:flex}.st-head h1{margin:0;font-size:clamp(1.8rem,4vw,2.6rem)}.st-head .sub{color:var(--muted);font-size:15px}.st-head .sp{flex-wrap:wrap;align-items:center;gap:10px;margin-left:auto;display:flex}.st-layout{grid-template-columns:208px minmax(0,1fr);align-items:start;gap:28px;display:grid}.st-main{gap:16px;min-width:0;display:grid}.st-side{gap:20px;display:grid;position:sticky;top:24px}.st-side-group{gap:1px;display:grid}.st-side-group p{font:500 11px var(--f-mono);letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:0 0 5px;padding-inline:10px}.st-side a{color:var(--muted);border-left:2px solid #0000;border-radius:5px;padding:7px 10px;font-size:14.5px;text-decoration:none}.st-side a:hover{color:var(--ink);background:var(--paper)}.st-side a.on{color:var(--ink);background:var(--paper);border-left-color:var(--accent);font-weight:600}.st-side-foot{font:500 11px var(--f-mono);color:var(--muted);border-top:1px solid var(--line);padding-inline:10px;padding-top:12px}.st-nav-mobile{display:none}.st-panel{gap:18px;display:grid}.st-card{border:1px solid var(--line);background:var(--paper);border-radius:8px;padding:22px 24px}.st-card>h2{margin-bottom:4px;font-size:1.35rem}.st-card>.hint{color:var(--muted);margin-bottom:18px;font-size:14px}.st-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.st-field{gap:6px;min-width:0;display:grid}.st-field.wide{grid-column:1/-1}.st-field label{color:var(--muted);font-size:13px;font-weight:600}.st-field input,.st-field textarea{font:400 15px/1.5 var(--f-body);border:1px solid var(--line);background:var(--bg);width:100%;color:var(--ink);border-radius:6px;padding:10px 12px}.st-field input:focus,.st-field textarea:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:#0000}.st-field textarea{resize:vertical;min-height:90px}.st-field .tip{font:500 12px var(--f-mono);color:var(--muted)}.st-item{border:1px solid var(--line);background:var(--paper);border-radius:8px}.st-item>summary{cursor:pointer;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:16px 18px;list-style:none;display:flex}.st-item>summary::-webkit-details-marker{display:none}.st-item>summary:before{content:"+";font:700 18px var(--f-mono);color:var(--accent)}.st-item[open]>summary:before{content:"−"}.st-item>summary .t{font-weight:600}.st-item>summary .m{font:500 12px var(--f-mono);color:var(--muted)}.st-item>summary .sp{align-items:center;gap:8px;margin-left:auto;display:flex}.st-body{border-top:1px solid var(--line);gap:14px;padding:4px 18px 20px;display:grid}.st-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.st-row textarea{font:400 15px/1.6 var(--f-body);border:1px solid var(--line);background:var(--bg);color:var(--ink);resize:vertical;border-radius:6px;flex:320px;min-height:76px;padding:10px 12px}.st-actions{flex-wrap:wrap;align-items:center;gap:10px;padding-top:6px;display:flex}.st-actions .sp{margin-left:auto}.st-btn{font:600 14px/1 var(--f-body);border:1.5px solid var(--line);color:var(--ink);cursor:pointer;background:0 0;border-radius:6px;padding:10px 14px}.st-btn:hover{border-color:var(--accent);color:var(--accent)}.st-btn.pri{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.st-btn.pri:hover{background:var(--ink);border-color:var(--ink);color:var(--bg)}.st-btn.danger:hover{color:#c0392b;border-color:#c0392b}.st-btn.mini{padding:6px 9px;font-size:13px}.st-tag{font:500 13px var(--f-mono);background:var(--bg);border:1px solid var(--line);border-radius:4px;align-items:center;gap:6px;padding:5px 8px 5px 10px;display:inline-flex}.st-tag button{color:var(--muted);cursor:pointer;font:700 13px var(--f-mono);background:0 0;border:0;padding:0 2px;line-height:1}.st-tag button:hover{color:#c0392b}.st-tag.on{background:var(--soft);color:var(--accent);border-color:#0000}.st-note{font:500 13px var(--f-mono);color:var(--muted)}.st-msg{font:500 14px var(--f-mono);border:1px solid var(--line);background:var(--soft);color:var(--accent);border-radius:6px;padding:10px 14px}.st>.st-msg{margin-bottom:18px}.st-msg.err{color:#c0392b;background:0 0;border-color:#c0392b}.st-login{max-width:420px;margin:12vh auto 0}.st-login .st-card{padding:30px 28px}.st-login h1{margin-bottom:6px;font-size:1.9rem}.st-login p{color:var(--muted);margin-bottom:20px;font-size:15px}.ai{gap:10px;display:grid}.ai-bar{flex-wrap:wrap;align-items:center;gap:8px 10px;display:flex}.ai-btn{font:500 12.5px var(--f-mono);border:1px dashed var(--line);color:var(--muted);cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:6px;padding:6px 11px;display:inline-flex}.ai-btn:hover:not(:disabled){color:var(--accent);border-color:var(--accent);border-style:solid}.ai-btn:disabled{opacity:.55;cursor:not-allowed}.ai-panel{border:1px solid var(--line);background:var(--bg);border-radius:8px;gap:10px;padding:14px 16px;display:grid}.ai-panel h4{font:600 11px var(--f-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0}.ai-variant{border:1px solid var(--line);background:var(--paper);border-radius:6px;gap:8px;padding:10px 12px;display:grid}.ai-variant p{white-space:pre-wrap;font-size:14.5px;line-height:1.55}.ai-groups{gap:14px;display:grid}.ai-group h5{font:600 13.5px var(--f-body);margin:0 0 7px}.ai-tags{flex-wrap:wrap;gap:6px;display:flex}.ai-tag{font:500 13px var(--f-mono);border:1px solid var(--line);background:var(--bg);color:var(--muted);cursor:pointer;border-radius:4px;align-items:center;gap:5px;padding:6px 10px;display:inline-flex}.ai-tag:hover{border-color:var(--accent);color:var(--accent)}.ai-tag.on{background:var(--soft);color:var(--accent);border-color:#0000;font-weight:600}.ai-tag .star{opacity:.8;font-size:10px}.ai-err{font:500 13px var(--f-mono);color:#c0392b}@media (max-width:860px){.st-layout{grid-template-columns:minmax(0,1fr)}.st-side{display:none}.st-nav-mobile{gap:6px;display:grid}.st-nav-mobile>span{font:500 11px var(--f-mono);letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}.st-nav-mobile select{width:100%;font:500 16px var(--f-body);border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:6px;padding:11px 12px}}@media (max-width:620px){.st-fields{grid-template-columns:minmax(0,1fr)}.st-head{padding-bottom:18px}.st-head .sp{width:100%;margin-left:0}.st-head .sp .btn,.st-head .sp form{flex:140px}.st-head .sp form button{width:100%}.st{padding-block:28px 60px}}
