:root{color-scheme:light;--paper:#f3f1ec;--paper2:#eae6dd;--paper-hi:#faf8f3;--paper-lo:#e9e4da;--card:#fbfaf7;--field:#fffefb;--ink:#1f2632;--ink-soft:#474e5c;--muted:#5d6471;--faint:#aab0bd;--slate:#2b3340;--line:#2b33401f;--line2:#2b334038;--signal:#d8623f;--signal-strong:#c0512c;--signal-text:#ad4724;--signal-soft:#d8623f21;--on-signal:#fff;--ok:#2a7054;--ok-soft:#2a70541a;--err:#a8433e;--err-soft:#a8433e1a;--tone-bg:#2b3340;--tone-fg:#f2f4f8;--shadow:43,51,64;--grid:#30426012;--grain:.04;--grain-blend:multiply;--show-moon:inline-block;--show-sun:none;--r-ctl:10px;--r-card:16px;--r-pill:999px;--nav-h:64px;--ease:cubic-bezier(.16,1,.3,1)}:root:not([data-theme=light]){color-scheme:dark;--paper:#14171d;--paper2:#101318;--paper-hi:#191d25;--paper-lo:#111419;--card:#1b1f27;--field:#161a21;--ink:#ecebe7;--ink-soft:#bfc3cb;--muted:#9ba1ac;--faint:#5b6270;--slate:#2b3340;--line:#ecebe71a;--line2:#ecebe733;--signal:#e8764f;--signal-text:#f0906c;--signal-soft:#e8764f24;--ok:#6cc79f;--ok-soft:#6cc79f1f;--err:#ec8a84;--err-soft:#ec8a841f;--tone-bg:#ecebe7;--tone-fg:#14171d;--shadow:0,0,0;--grid:#ecebe70b;--grain:.06;--grain-blend:overlay;--show-moon:none;--show-sun:inline-block}*{box-sizing:border-box}html{interpolate-size:allow-keywords;-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--paper);color:var(--ink);font-family:var(--font-archivo),ui-sans-serif,system-ui,sans-serif;-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.6;transition:background-color .3s,color .3s;overflow-x:hidden}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0}p,h1,h2,h3,h4,figure,blockquote,dl,dd{margin:0}ul,ol{margin:0;padding:0;list-style:none}svg{flex:none}::selection{background:var(--signal-soft)}:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:4px}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:var(--paper2)}::-webkit-scrollbar-thumb{background:var(--line2);border-radius:var(--r-pill);border:2px solid var(--paper2)}section{scroll-margin-top:calc(var(--nav-h) + 20px)}.mono{font-family:var(--font-mono),ui-monospace,monospace}.bg{z-index:0;pointer-events:none;position:fixed;inset:0}.paper{background:radial-gradient(ellipse 120% 90% at 50% -5%,var(--paper-hi),var(--paper) 55%,var(--paper-lo))}.aura{background:radial-gradient(760px 540px at 88% 4%,var(--signal-soft),transparent 70%)}#warp{display:block;mask-image:radial-gradient(96% 70% at 50% 24%,#000 50%,#0000 100%)}.grain{opacity:var(--grain);mix-blend-mode:var(--grain-blend);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.topbar{z-index:60;height:var(--nav-h);background:color-mix(in srgb,var(--paper) 80%,transparent);-webkit-backdrop-filter:blur(14px)saturate(140%);box-shadow:0 1px 0 var(--line);justify-content:space-between;align-items:center;gap:20px;padding:0 clamp(16px,3vw,32px);display:flex;position:fixed;top:0;left:0;right:0}.brand{cursor:pointer;flex:0 auto;align-items:center;min-width:0;display:flex}.brand b{font-family:var(--font-archivo),sans-serif;letter-spacing:.15em;background:var(--tone-bg);color:var(--tone-fg);white-space:nowrap;text-overflow:ellipsis;border-radius:6px;padding:7px 12px;font-size:11.5px;font-weight:700;line-height:1.2;transition:background-color .25s,color .25s;overflow:hidden}.brand:hover b{background:var(--signal-strong);color:var(--on-signal)}.nav{align-items:center;gap:2px;display:flex}.nav a{color:var(--ink-soft);border-radius:var(--r-ctl);white-space:nowrap;padding:8px 11px;font-size:14px;font-weight:500;transition:color .2s,background-color .2s;position:relative}.nav a:hover{color:var(--ink);background:var(--line)}.nav a.on{color:var(--ink)}.nav a:after{content:"";background:var(--signal);transform-origin:0;height:2px;transition:transform .35s var(--ease);border-radius:2px;position:absolute;bottom:3px;left:11px;right:11px;transform:scaleX(0)}.nav a.on:after{transform:scaleX(1)}.nav .cvbtn{background:var(--tone-bg);color:var(--tone-fg);align-items:center;gap:7px;margin-left:10px;font-weight:600;display:inline-flex}.nav .cvbtn:hover{background:var(--signal-strong);color:var(--on-signal)}.nav .cvbtn:after{display:none}.navtools{flex:none;align-items:center;gap:8px;display:flex}.tool-btn{border:1px solid var(--line2);border-radius:var(--r-ctl);min-width:36px;height:36px;color:var(--ink-soft);justify-content:center;align-items:center;gap:6px;transition:border-color .2s,color .2s,transform .15s;display:inline-flex}.tool-btn:hover{border-color:var(--signal);color:var(--signal-text)}.tool-btn:active{transform:scale(.96)}.lang-toggle{font-family:var(--font-mono),monospace;letter-spacing:.1em;padding:0 10px;font-size:12px;font-weight:500}.theme-toggle .i-moon{display:var(--show-moon)}.theme-toggle .i-sun{display:var(--show-sun)}.menu-btn{flex-direction:column;gap:4px;display:none}.menu-btn i{background:var(--ink);width:16px;height:1.6px;transition:transform .25s,opacity .25s}.wrap{z-index:5;max-width:1180px;margin:0 auto;padding-inline:clamp(20px,5vw,48px);position:relative}.sec{z-index:5;padding-block:clamp(88px,11vw,148px);position:relative}.sec:before{content:"";background:var(--line);height:1px;position:absolute;top:0;left:0;right:0}.intro:before{display:none}.sec-head{max-width:760px;margin-bottom:clamp(44px,6vw,72px)}.sec-head h2{letter-spacing:-.03em;color:var(--ink);font-size:clamp(32px,4.4vw,52px);font-weight:800;line-height:1.04}.sec-head .sub{color:var(--ink-soft);max-width:60ch;margin-top:16px;font-size:clamp(16px,1.5vw,18px);line-height:1.6}.eyebrow{font-family:var(--font-mono),monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--signal-text);align-items:center;gap:12px;margin-bottom:18px;font-size:12.5px;font-weight:500;display:flex}.eyebrow:before{content:"";background:var(--signal);width:32px;height:1px}.chips{flex-wrap:wrap;gap:6px;display:flex}.chips li{font-family:var(--font-mono),monospace;color:var(--ink-soft);border:1px solid var(--line);border-radius:var(--r-pill);padding:4px 10px;font-size:12px;line-height:1.4}.chips li.hot{color:var(--signal-text);border-color:color-mix(in srgb,var(--signal) 45%,transparent)}.btn{white-space:nowrap;font-family:var(--font-archivo),sans-serif;border-radius:var(--r-ctl);border:1px solid var(--line2);color:var(--ink);transition:transform .2s var(--ease),border-color .2s,background-color .2s,color .2s,box-shadow .2s;background:0 0;justify-content:center;align-items:center;gap:9px;padding:13px 20px;font-size:15px;font-weight:600;line-height:1.2;display:inline-flex}.btn:hover{border-color:var(--ink);transform:translateY(-1px)}.btn:active{transform:translateY(1px)scale(.98)}.btn.solid{background:var(--signal-strong);border-color:var(--signal-strong);color:var(--on-signal);box-shadow:0 14px 28px -16px #c0512cb3}.btn.solid:hover{filter:brightness(1.06)}.btn.ghost svg:last-child{transition:transform .25s var(--ease)}.btn.ghost:hover svg:last-child{transform:translate(3px)}.load-fx{opacity:0;filter:blur(6px);transition:opacity .9s var(--ease),transform .9s var(--ease),filter .9s var(--ease);transition-delay:calc(var(--i,0) * 90ms + .12s);transform:translateY(18px)}html.ready .load-fx{opacity:1;filter:none;transform:none}.topbar{transition:transform .8s var(--ease),background-color .3s;transform:translateY(-100%)}html.ready .topbar{transform:none}.name-reveal{clip-path:inset(0 0 100%);transition:clip-path 1.1s var(--ease) .1s,transform 1.1s var(--ease) .1s;display:block;transform:translateY(24px)}html.ready .name-reveal{clip-path:inset(-4% -2% -12%);transform:none}.reveal{opacity:0;transition:opacity .8s var(--ease),transform .8s var(--ease);transition-delay:calc(var(--i,0) * 80ms);transform:translateY(24px)}.reveal.in{opacity:1;transform:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes portraitDrift{0%{transform:translateY(-4%)scale(1.08)}to{transform:translateY(4%)scale(1.08)}}.intro{padding-top:calc(var(--nav-h) + clamp(36px,6vw,84px))}.hero-grid{grid-template-columns:minmax(0,1.45fr) minmax(0,.75fr);align-items:center;gap:clamp(32px,6vw,88px);display:grid}.hero-role{font-family:var(--font-mono),monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--signal-text);flex-wrap:wrap;align-items:center;gap:4px 12px;min-height:1.6em;font-size:13px;font-weight:500;display:flex}.hero-role:before{content:"";background:var(--signal);width:32px;height:1px}.hero-role .tagline{letter-spacing:.04em;text-transform:none;color:var(--ink-soft);align-items:center;gap:12px;display:inline-flex}.hero-role .tagline:before{content:"/";color:var(--faint)}.hero-role .tw{white-space:nowrap;border-right:2px solid var(--signal);padding-right:3px}.hero-name{letter-spacing:-.045em;color:var(--ink);margin-top:22px;font-size:clamp(54px,8.6vw,116px);font-weight:900;line-height:.92}.hero-name .l2{color:var(--signal);display:block}.hero-sub{max-width:31em;color:var(--ink-soft);margin-top:28px;font-size:clamp(18px,1.9vw,22px);line-height:1.5}.hero-cta{flex-wrap:wrap;align-items:center;gap:12px;margin-top:36px;display:flex}.portrait{aspect-ratio:4/5;border-radius:var(--r-card);border:1px solid var(--line2);width:100%;max-width:250px;box-shadow:18px 18px 0 -1px var(--signal-soft),0 40px 80px -48px rgba(var(--shadow),.6);justify-self:end;position:relative;overflow:hidden}.portrait picture{filter:grayscale()contrast(.95);width:100%;height:100%;transition:filter .6s;display:block}.portrait:hover picture{filter:none}.portrait img{object-fit:cover;object-position:center 18%;width:100%;height:100%;display:block}@media (prefers-reduced-motion:no-preference){@supports (animation-timeline:view()){.portrait picture{animation:linear both portraitDrift view();animation-range:cover}}}.cv-menu{display:inline-flex;position:relative}.cv-menu .cv-main{border-radius:var(--r-ctl) 0 0 var(--r-ctl)}.cv-menu .cv-caret{border-radius:0 var(--r-ctl) var(--r-ctl) 0;border-left:1px solid #ffffff47;padding:13px 12px}.cv-caret svg{transition:transform .25s}.cv-menu.open .cv-caret svg{transform:rotate(180deg)}.cv-pop{z-index:30;background:var(--card);border:1px solid var(--line);border-radius:var(--r-card);min-width:220px;box-shadow:0 24px 48px -24px rgba(var(--shadow),.5);padding:6px;position:absolute;top:calc(100% + 8px);left:0}.cv-pop[hidden]{display:none}.cv-pop:not([hidden]){animation:popIn .2s var(--ease)}@keyframes popIn{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}.cv-opt{border-radius:var(--r-ctl);color:var(--ink-soft);align-items:center;gap:12px;padding:10px 12px;transition:background-color .18s;display:flex}.cv-opt:hover{background:var(--signal-soft)}.cv-code{font-family:var(--font-mono),monospace;letter-spacing:.1em;color:var(--muted);min-width:22px;font-size:12px;font-weight:600}.cv-name{color:var(--ink);flex:1;font-size:15px;font-weight:600}.cv-ext{font-family:var(--font-mono),monospace;color:var(--muted);font-size:12px}.cv-opt.is-current .cv-code{color:var(--signal-text)}.intro-body{grid-template-columns:minmax(0,1fr);gap:48px;margin-top:clamp(72px,10vw,128px);display:grid}.about-lead{letter-spacing:-.012em;max-width:40em;color:var(--ink);font-size:clamp(19px,2.1vw,25px);font-weight:500;line-height:1.5}.about-lead b{color:var(--signal-text);font-weight:700}.core-l{color:var(--muted);margin-bottom:16px;font-size:15px;font-weight:600}.core-list{flex-wrap:wrap;gap:10px;display:flex}.cchip{border:1px solid var(--line);border-radius:var(--r-pill);background:color-mix(in srgb,var(--card) 70%,transparent);transition:transform .25s var(--ease),border-color .25s,background-color .25s;align-items:center;gap:10px;padding:10px 18px 10px 14px;display:inline-flex}.cchip svg{color:var(--ink-soft);transition:color .25s}.cchip .cm{color:var(--ink-soft);text-align:center;min-width:20px;font-size:12px;font-weight:700}.cchip>span{color:var(--ink);font-size:15px;font-weight:600}.cchip:hover{border-color:color-mix(in srgb,var(--signal) 50%,transparent);background:var(--card);transform:translateY(-2px)}.cchip:hover svg{color:var(--signal)}.proj-groups{flex-direction:column;gap:clamp(96px,12vw,152px);display:flex}.proj-group{align-items:center;gap:12px;margin-bottom:clamp(36px,5vw,56px);display:flex}.pg-ico{color:var(--signal)}.pg-label{letter-spacing:-.01em;color:var(--ink);white-space:nowrap;font-size:18px;font-weight:700}.pg-rule{background:var(--line);flex:1;min-width:24px;height:1px}.pg-meta{font-family:var(--font-mono),monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);white-space:nowrap;font-size:12px}.proj-grid.is-independent{gap:clamp(80px,10vw,128px);display:grid}.proj-grid.is-team{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:clamp(40px,5vw,64px);display:grid}.proj{min-width:0;position:relative}.proj-thumb{aspect-ratio:16/11;border-radius:var(--r-card);border:1px solid var(--line2);background:var(--paper2);box-shadow:0 1px 2px rgba(var(--shadow),.05),0 36px 72px -40px rgba(var(--shadow),.55);cursor:zoom-in;transition:box-shadow .4s;position:relative;overflow:hidden}.proj-thumb picture{width:100%;height:100%;display:block}.proj-thumb img{object-fit:cover;object-position:center top;width:100%;height:100%;transition:transform .7s var(--ease);display:block;position:absolute;inset:0}.proj:hover .proj-thumb img{transform:scale(1.04)}.zoom-hint{z-index:4;opacity:0;pointer-events:none;background:linear-gradient(#12161e05,#12161e47);place-items:center;transition:opacity .3s;display:grid;position:absolute;inset:0}.proj:hover .zoom-hint{opacity:1}.zoom-hint .zh{border-radius:var(--r-pill);color:#fff;backdrop-filter:blur(4px);width:46px;height:46px;transition:transform .3s var(--ease);background:#1419228c;border:1px solid #ffffff47;place-items:center;display:grid;transform:scale(.84)}.proj:hover .zoom-hint .zh{transform:scale(1)}.proj-body{min-width:0}.p-year{font-family:var(--font-mono),monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:12.5px}.p-title{letter-spacing:-.025em;color:var(--ink);text-wrap:balance;margin-top:10px;font-size:clamp(24px,2.5vw,32px);font-weight:800;line-height:1.12}.p-badges{flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px;display:flex}.live{font-family:var(--font-mono),monospace;letter-spacing:.06em;color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 35%,transparent);background:var(--ok-soft);border-radius:var(--r-pill);align-items:center;gap:8px;padding:4px 11px;font-size:12px;display:inline-flex}.p-model{font-family:var(--font-mono),monospace;letter-spacing:.06em;color:var(--ink-soft);border:1px solid var(--line2);border-radius:var(--r-pill);padding:4px 11px;font-size:12px}.live i{background:var(--ok);border-radius:50%;width:6px;height:6px;animation:2s ease-in-out infinite pulse}.p-links{flex-wrap:wrap;gap:10px;margin-top:24px;display:flex}.repo{white-space:nowrap;font-family:var(--font-mono),monospace;color:var(--muted);border:1px dashed var(--line2);border-radius:var(--r-ctl);align-items:center;gap:8px;padding:12px 15px;font-size:12.5px;transition:color .2s,border-color .2s;display:inline-flex}a.repo:hover{color:var(--signal-text);border-color:var(--signal);border-style:solid}.repo.is-locked{cursor:default}.proj-text{min-width:0}.p-summary{color:var(--ink-soft);max-width:60ch;font-size:17px;line-height:1.6}.p-product{margin-top:14px}.p-product p{color:var(--ink-soft);max-width:65ch;font-size:15px;line-height:1.7}.p-product p+p{margin-top:12px}.p-tech{margin-top:18px}.p-tech>summary{cursor:pointer;font-family:var(--font-mono),monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);align-items:center;gap:10px;padding:6px 0;font-size:12.5px;list-style:none;transition:color .2s;display:inline-flex}.p-tech>summary::-webkit-details-marker{display:none}.p-tech>summary:before{content:"+";border:1px solid var(--line2);border-radius:var(--r-pill);width:20px;height:20px;color:var(--signal-text);transition:transform .3s var(--ease);place-items:center;font-size:14px;line-height:1;display:grid}.p-tech[open]>summary:before{transform:rotate(45deg)}.p-tech>summary:hover{color:var(--ink)}.p-tech-body{color:var(--ink-soft);max-width:65ch;margin-top:12px;font-size:15px;line-height:1.7}.p-tech .chips{margin-top:16px}.p-tech::details-content{opacity:0;transition:opacity .32s ease,content-visibility .32s allow-discrete}.p-tech[open]::details-content{opacity:1}.proj.is-feature .proj-thumb{aspect-ratio:16/8.5}.proj.is-feature .proj-body{grid-template-columns:minmax(0,.9fr) minmax(0,1.3fr);gap:clamp(28px,5vw,72px);margin-top:clamp(28px,3.5vw,44px);display:grid}.proj.is-feature .p-title{font-size:clamp(26px,2.9vw,36px)}.proj.is-split{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:center;gap:clamp(28px,5vw,72px);display:grid}.proj.is-split .proj-thumb{order:2}.proj.is-split .proj-text{margin-top:20px}.proj.is-stacked .proj-body{margin-top:26px}.proj.is-stacked .p-links,.proj.is-stacked .proj-text{margin-top:18px}.lightbox{z-index:200;-webkit-backdrop-filter:blur(18px);opacity:0;visibility:hidden;background:#0c0f149e;place-items:center;padding:5vmin;transition:opacity .35s,visibility .35s;display:grid;position:fixed;inset:0}.lightbox.open{opacity:1;visibility:visible}.lightbox figure{flex-direction:column;align-items:center;gap:14px;display:flex}.lightbox img{object-fit:contain;border-radius:var(--r-ctl);max-width:94vw;max-height:84vh;transition:transform .45s var(--ease);transform:scale(.96)translateY(10px);box-shadow:0 50px 120px -30px #000000b3}.lightbox.open img{transform:none}.lightbox figcaption{font-family:var(--font-mono),monospace;letter-spacing:.08em;color:#ffffffd1;font-size:12.5px}.lb-close{border-radius:var(--r-pill);color:#fff;width:44px;height:44px;transition:background-color .22s,transform .3s var(--ease);background:#ffffff1a;border:1px solid #ffffff3d;place-items:center;display:grid;position:fixed;top:20px;right:22px}.lb-close:hover{background:#fff3;transform:rotate(90deg)}.lb-hint{font-family:var(--font-mono),monospace;color:#ffffffb8;white-space:nowrap;font-size:12px;position:fixed;bottom:20px;left:50%;transform:translate(-50%)}.xp{border-top:1px solid var(--line);grid-template-columns:minmax(0,280px) minmax(0,1fr);gap:clamp(28px,5vw,72px);padding-block:clamp(36px,4vw,52px);display:grid}.xp:first-child{border-top:none;padding-top:0}.xp-co{top:calc(var(--nav-h) + 32px);align-self:start;position:sticky}.xp-co h3{letter-spacing:-.02em;color:var(--ink);font-size:clamp(24px,2.4vw,30px);font-weight:800;line-height:1.1}.xp-co .when{font-family:var(--font-mono),monospace;letter-spacing:.06em;color:var(--signal-text);margin-top:12px;font-size:13px}.xp-co .meta{color:var(--muted);margin-top:6px;font-size:15px;line-height:1.5}.xp-role{padding-block:28px}.xp-role:first-child{padding-top:4px}.xp-role+.xp-role{border-top:1px solid var(--line)}.xp-role-head{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.xp-role-head h4{letter-spacing:-.01em;color:var(--ink);font-size:20px;font-weight:700}.tag-cli{font-family:var(--font-mono),monospace;letter-spacing:.06em;color:var(--muted);border:1px solid var(--line2);border-radius:var(--r-pill);padding:2px 10px;font-size:12px}.xp-bullets{flex-direction:column;gap:9px;max-width:68ch;margin:16px 0 20px;display:flex}.xp-bullets li{color:var(--ink-soft);padding-left:22px;font-size:16px;line-height:1.6;position:relative}.xp-bullets li:before{content:"";background:var(--signal);width:10px;height:1.5px;position:absolute;top:.8em;left:0}.aidev-quote{border-left:3px solid var(--signal);margin-bottom:clamp(48px,6vw,80px);padding-left:clamp(20px,3vw,36px)}.aidev-quote p{letter-spacing:-.02em;max-width:30em;color:var(--ink);text-wrap:pretty;font-size:clamp(22px,2.6vw,32px);font-weight:600;line-height:1.35}.aidev-cols{grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(28px,5vw,72px);display:grid}.aidev-cols p{color:var(--ink-soft);max-width:60ch;font-size:16px;line-height:1.7}.aidev-cols p+p{margin-top:14px}.aidev-cols .aidev-lead{color:var(--ink);font-size:18px;font-weight:500}.aidev-cols .aidev-close{color:var(--ink);font-weight:600}.edu-grid{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);align-items:start;gap:clamp(36px,6vw,88px);display:grid}.edu{grid-template-columns:96px minmax(0,1fr);gap:20px;padding-block:24px;display:grid}.edu:first-child{padding-top:0}.edu+.edu{border-top:1px solid var(--line)}.edu .yr{font-family:var(--font-mono),monospace;color:var(--signal-text);padding-top:3px;font-size:14px;font-weight:500}.edu h3{color:var(--ink);font-size:19px;font-weight:700;line-height:1.3}.edu .inst{color:var(--muted);max-width:60ch;margin-top:6px;font-size:15px;line-height:1.6}.langs-h{color:var(--ink);font-size:19px;font-weight:700}.langs dl{margin-top:14px}.lang{border-top:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:16px;padding-block:14px;display:flex}.lang dt{color:var(--ink);font-size:17px;font-weight:600}.lang dd{font-family:var(--font-mono),monospace;color:var(--muted);text-align:right;font-size:13px}.contact-sec{padding-bottom:clamp(72px,9vw,120px)}.contact-wrap{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);align-items:start;gap:clamp(32px,5vw,72px);display:grid}.cform{background:var(--card);border:1px solid var(--line);border-radius:var(--r-card);box-shadow:0 1px 2px rgba(var(--shadow),.04),0 28px 60px -40px rgba(var(--shadow),.45);flex-direction:column;gap:18px;padding:clamp(24px,3vw,36px);display:flex}.field{flex-direction:column;gap:8px;display:flex}.field label{font-family:var(--font-mono),monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);font-size:12.5px;font-weight:500}.field input,.field textarea{font-family:var(--font-archivo),sans-serif;color:var(--ink);background:var(--field);border:1px solid var(--line2);border-radius:var(--r-ctl);resize:vertical;width:100%;padding:12px 14px;font-size:16px;transition:border-color .2s,box-shadow .2s}.field textarea{min-height:140px}.field input::placeholder,.field textarea::placeholder{color:var(--muted);opacity:1}.field input:focus,.field textarea:focus{border-color:var(--signal);box-shadow:0 0 0 3px var(--signal-soft);outline:none}.field-err{color:var(--err);opacity:0;max-height:0;font-size:14px;line-height:1.4;transition:opacity .2s,max-height .2s;overflow:hidden}.field-err:not(:empty){opacity:1;max-height:48px}.field [aria-invalid=true]{border-color:var(--err);box-shadow:0 0 0 3px var(--err-soft)}.hp{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.ts-widget:empty{display:none}.cform-foot{flex-wrap:wrap;align-items:center;gap:14px 18px;margin-top:4px;display:flex}.cform-send[disabled]{opacity:.75;cursor:progress;filter:none;transform:none}.cform-send.is-loading svg{display:none}.cform-send.is-loading:after{content:"";border:2px solid #ffffff73;border-top-color:#fff;border-radius:50%;width:15px;height:15px;animation:.6s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.cform-note{color:var(--muted);font-size:14px}.cform-status{border:1px solid var(--line);border-left:3px solid var(--faint);border-radius:var(--r-ctl);color:var(--ink-soft);align-items:center;gap:11px;padding:12px 14px;font-size:15px;line-height:1.45;display:flex}.cform-status:not([data-kind]),.cform-status[data-kind=""]{display:none}.cform-status-ico{flex:none;place-items:center;width:18px;height:18px;display:grid}.cform-status-ico svg{display:none}.cform-status-text{min-width:0}.st-dot{background:currentColor;border-radius:50%;width:7px;height:7px;animation:1.4s ease-in-out infinite pulse;display:none}.cform-status[data-kind=pending] .st-dot{display:block}.cform-status[data-kind=success]{border-left-color:var(--ok);background:var(--ok-soft);color:var(--ok);animation:popIn .34s var(--ease)}.cform-status[data-kind=success] .st-ok{display:block}.cform-status[data-kind=error]{border-left-color:var(--err);background:var(--err-soft);color:var(--err);animation:popIn .34s var(--ease)}.cform-status[data-kind=error] .st-err{display:block}.contact-links{border-bottom:1px solid var(--line)}.clink{border-top:1px solid var(--line);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:18px;padding:22px 4px;transition:color .2s;display:grid}.clink-ico{color:var(--ink-soft);transition:color .2s}.clink-txt{flex-direction:column;gap:2px;min-width:0;display:flex}.clink .cl{font-family:var(--font-mono),monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:12px}.clink .cv{color:var(--ink);overflow-wrap:anywhere;font-size:clamp(16px,1.6vw,19px);font-weight:600;transition:color .2s}.clink-arrow{color:var(--muted);transition:transform .3s var(--ease),color .2s}.clink:hover .cv,.clink:hover .clink-ico,.clink:hover .clink-arrow{color:var(--signal-text)}.clink:hover .clink-arrow{transform:translate(3px,-3px)}.colophon{z-index:5;border-top:1px solid var(--line);padding-block:clamp(40px,5vw,56px);position:relative}.colo-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:28px clamp(28px,5vw,64px);display:flex}.colo-main{max-width:580px}.colo-main .eyebrow{margin-bottom:12px}.colo-text{color:var(--ink-soft);font-size:15.5px;line-height:1.7}.colo-text b{color:var(--ink);font-weight:600}.colo-side{flex-direction:column;align-items:flex-start;gap:14px;display:flex}.colo-metrics{flex-wrap:wrap;gap:6px;display:flex}.colo-metrics li{font-family:var(--font-mono),monospace;color:var(--ink-soft);border:1px solid var(--line);border-radius:var(--r-pill);padding:4px 10px;font-size:12px}.footer{z-index:5;border-top:1px solid var(--line);background:var(--paper2);padding-block:28px;position:relative}.foot-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.foot-copy{color:var(--ink-soft);flex-wrap:wrap;gap:4px 20px;font-size:14px;display:flex}.foot-loc{color:var(--muted)}.foot-links{gap:4px;display:flex}.foot-links a{border-radius:var(--r-ctl);width:40px;height:40px;color:var(--ink-soft);place-items:center;transition:color .2s,background-color .2s;display:grid}.foot-links a:hover{color:var(--signal-text);background:var(--signal-soft)}@media (width<=1040px){.topbar{background:var(--paper);-webkit-backdrop-filter:none}.nav{inset:var(--nav-h) 0 0 0;z-index:50;background:var(--paper);padding:clamp(12px,4vw,24px) clamp(20px,6vw,32px) calc(28px + env(safe-area-inset-bottom));opacity:0;visibility:hidden;transition:opacity .26s ease,transform .26s var(--ease),visibility .26s;flex-direction:column;justify-content:flex-start;align-items:stretch;gap:0;position:fixed;overflow-y:auto;transform:translateY(-10px)}.nav.open{opacity:1;visibility:visible;transform:none}.nav a{letter-spacing:-.01em;color:var(--ink);border-bottom:1px solid var(--line);border-radius:0;padding:16px 4px;font-size:clamp(22px,6vw,28px);font-weight:700}.nav a:hover{color:var(--signal-text);background:0 0}.nav a.on{color:var(--signal-text)}.nav a:after{display:none}.nav .cvbtn{border-radius:var(--r-ctl);background:var(--signal-strong);color:var(--on-signal);border-bottom:none;justify-content:center;gap:9px;margin:24px 0 0;padding:16px;font-size:16px}.menu-btn{display:flex}.menu-btn.open i:first-child{transform:translateY(5.6px)rotate(45deg)}.menu-btn.open i:nth-child(2){opacity:0}.menu-btn.open i:nth-child(3){transform:translateY(-5.6px)rotate(-45deg)}}@media (width<=900px){.proj-grid.is-team{grid-template-columns:minmax(0,1fr)}.proj.is-feature .proj-body{grid-template-columns:minmax(0,1fr);gap:20px}.proj.is-feature .proj-thumb{aspect-ratio:16/10}.proj.is-split{grid-template-columns:minmax(0,1fr);gap:26px}.proj.is-split .proj-thumb{order:0}.xp{grid-template-columns:minmax(0,1fr);gap:20px}.xp-co{position:static}.aidev-cols,.edu-grid,.contact-wrap{grid-template-columns:minmax(0,1fr)}.aidev-cols p+p,.aidev-cols>div+div{margin-top:14px}}@media (width<=760px){.hero-grid{grid-template-columns:minmax(0,1fr);gap:36px}.portrait{max-width:min(160px,44vw);box-shadow:12px 12px 0 -1px var(--signal-soft);order:-1;justify-self:start}.hero-name{margin-top:18px}.edu{grid-template-columns:minmax(0,1fr);gap:6px}.colo-side{align-items:stretch;width:100%}}@media (width<=480px){.hero-cta{gap:10px}.hero-cta .btn{padding-inline:16px}.p-links>*{flex:auto}.pg-meta{display:none}}@media (width<=380px){.topbar{gap:8px;padding-inline:12px}.brand b{letter-spacing:.1em;padding:6px 9px;font-size:10.5px}.navtools{gap:6px}.tool-btn{min-width:34px;height:34px}.lang-toggle{padding:0 8px}.lang-toggle .globe{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;transition-delay:0s!important;animation:none!important}.load-fx,.reveal,.topbar{opacity:1;filter:none;transform:none}.name-reveal{clip-path:none;transform:none}}
