:root{--g1:#26267a;--g2:#5b5bd6;--onacc:#eef0fb;--navbg:rgba(238,240,251,.88);--bg:#eef0fb;--fg:#14162e;--mut:#444a6b;--a:#3b3bb5;--b:#3b3bb5;--c:#6366f1;--line:rgba(20,22,46,.2);--card:rgba(255,255,255,.8);--accent:var(--a);--accent2:var(--b)}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--fg);font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;line-height:1.6;overflow-x:hidden}
a{color:inherit;text-decoration:none}
.progress{position:fixed;top:0;left:0;height:3px;width:100%;transform-origin:0 50%;transform:scaleX(0);background:linear-gradient(90deg,var(--accent),var(--accent2));z-index:50}
nav{position:fixed;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:18px clamp(18px,4vw,48px);z-index:40;background:linear-gradient(180deg,var(--navbg),transparent)}
nav .logo{font-weight:800;letter-spacing:-.02em}
nav .links{display:flex;gap:clamp(12px,2.2vw,28px);font-size:.9rem;color:var(--mut)}
nav .links a:hover{color:var(--fg)}
section{position:relative;padding:clamp(80px,14vh,160px) clamp(20px,6vw,96px)}
.wrap{max-width:1180px;margin:0 auto}
.eyebrow{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin-bottom:18px}
h1,h2,h3{letter-spacing:-.03em;line-height:1.05}
h2{font-size:clamp(2rem,5.5vw,4.2rem);margin-bottom:28px}
p{color:var(--mut);font-size:clamp(1rem,1.5vw,1.15rem)}
.grad{background:linear-gradient(100deg,var(--g1),var(--g2));-webkit-background-clip:text;background-clip:text;color:transparent;background-size:200% 100%}
.reveal{opacity:0;transform:translateY(40px);transition:opacity .9s cubic-bezier(.2,.7,.2,1),transform .9s cubic-bezier(.2,.7,.2,1)}
.reveal.in{opacity:1;transform:none}
.hero{min-height:100svh;display:flex;flex-direction:column;justify-content:center}
.hero h1{font-size:clamp(3rem,11.5vw,10rem);font-weight:900}
.hero h1 .ln{display:block;overflow:hidden;padding-bottom:.06em}
.hero h1 .ch{display:inline-block;transform:translateY(110%) rotate(8deg);animation:up 1s cubic-bezier(.2,.8,.2,1) forwards}
@keyframes up{to{transform:none}}
.hero .role{font-size:clamp(1.1rem,2.4vw,1.7rem);margin-top:22px;color:var(--fg)}
.hero .sub{max-width:620px;margin-top:14px}
.cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:34px}
.btn{display:inline-flex;align-items:center;gap:8px;padding:13px 22px;border-radius:999px;border:1px solid var(--line);background:rgba(20,22,46,.05);font-weight:600;font-size:.95rem;transition:transform .25s,background .25s,border-color .25s;cursor:pointer;color:var(--fg);font-family:inherit}
.btn:hover{transform:translateY(-3px);border-color:var(--accent2);background:rgba(20,22,46,.09)}
.btn.primary{background:var(--accent);color:var(--onacc);border:0}
.scrollhint{position:absolute;bottom:28px;left:clamp(20px,6vw,96px);font-size:.75rem;letter-spacing:.2em;color:var(--mut);text-transform:uppercase;display:flex;gap:10px;align-items:center}
.scrollhint i{width:1px;height:38px;background:linear-gradient(var(--accent2),transparent);animation:drip 2s infinite}
@keyframes drip{0%{transform:scaleY(0);transform-origin:top}50%{transform:scaleY(1);transform-origin:top}51%{transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}
.about-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:clamp(24px,5vw,72px);align-items:start}
.about-grid p+p{margin-top:16px}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.stat{border:1px solid var(--line);background:var(--card);border-radius:20px;padding:22px;}
.stat b{display:block;font-size:2rem;letter-spacing:-.03em}
.stat span{font-size:.85rem;color:var(--mut)}
.pgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:22px;margin-top:30px}
.pcard{min-height:320px;border-radius:28px;border:1px solid var(--line);background:var(--card);padding:28px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;transition:border-color .3s,transform .3s}
.pcard:hover{border-color:var(--pc,var(--accent));transform:translateY(-4px)}
.pcard::before{content:"";position:absolute;inset:-40%;background:radial-gradient(circle at 30% 20%,var(--pc,var(--accent)),transparent 45%);opacity:.16;transition:opacity .4s}
.pcard:hover::before{opacity:.3}
.pcard>*{position:relative}.pcard{text-decoration:none}
.pcard .num{font-family:ui-monospace,monospace;color:var(--accent);font-size:.85rem}
.pcard h3{font-size:clamp(1.6rem,3vw,2.3rem);margin:8px 0 10px}
.pcard p{font-size:1rem}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.chip{font-size:.78rem;padding:5px 11px;border-radius:999px;border:1px solid var(--line);color:var(--fg);background:rgba(20,22,46,.05)}
.pcard .open{font-weight:700;display:flex;align-items:center;gap:8px;margin-top:16px}
.more{margin-top:26px;font-size:.95rem;color:var(--mut)}
.more a{color:var(--accent);border-bottom:1px solid currentColor}
/* skills */
.skills{overflow:hidden;padding-left:0;padding-right:0}
.skills .wrap{padding:0 clamp(20px,6vw,96px)}
.mq{display:flex;gap:14px;width:max-content;margin:12px 0;will-change:transform}
.mq span{font-size:clamp(1.4rem,4.5vw,3.4rem);font-weight:800;letter-spacing:-.03em;padding:6px 26px;border:1px solid var(--line);border-radius:999px;white-space:nowrap;background:var(--card)}
.mq.alt span{color:var(--mut);opacity:.75}
.skillgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-top:40px}
.sk{border:1px solid var(--line);border-radius:20px;padding:20px;background:var(--card);}
.sk h4{font-size:.8rem;letter-spacing:.15em;text-transform:uppercase;color:var(--accent);margin-bottom:10px;font-family:ui-monospace,monospace}
.sk p{font-size:.95rem;color:var(--fg)}
/* timeline */
.tl{position:relative;padding-left:34px;margin-top:20px}
.tl .rail{position:absolute;left:6px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl .fill{position:absolute;left:6px;top:6px;width:2px;height:calc(100% - 12px);transform-origin:0 0;transform:scaleY(0);background:linear-gradient(var(--accent),var(--accent2))}
.job{position:relative;margin-bottom:46px}
.job::before{content:"";position:absolute;left:-34px;top:8px;width:14px;height:14px;border-radius:50%;background:var(--bg);border:2px solid var(--accent2);}
.job .when{font-family:ui-monospace,monospace;font-size:.82rem;color:var(--accent2)}
.job h3{font-size:clamp(1.4rem,3vw,2.1rem);margin:4px 0}
.job ul{margin-top:12px;padding-left:18px;color:var(--mut)}
.job li{margin-bottom:8px;font-size:1.02rem}
.certs{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:30px}
.cert{border:1px solid var(--line);border-radius:18px;padding:16px 18px;background:var(--card)}
.cert b{display:block;font-size:.98rem}.cert span{font-size:.82rem;color:var(--mut)}
/* contact */
.contact{text-align:center;min-height:90vh;display:flex;flex-direction:column;justify-content:center;align-items:center}
.contact .mail{font-size:clamp(1.3rem,5vw,3.6rem);font-weight:800;letter-spacing:-.03em;word-break:break-all;display:inline-block;transition:transform .2s}
.contact .row{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:30px}
footer{padding:30px;text-align:center;color:var(--mut);font-size:.82rem}
/* detail pages */
.dhero{min-height:92svh;display:flex;flex-direction:column;justify-content:center;padding-top:110px}
.dhero h1{font-size:clamp(2.6rem,9vw,7.5rem);font-weight:900}
.back{position:fixed;top:18px;left:clamp(18px,4vw,48px);z-index:45;font-size:.9rem;padding:8px 16px;border-radius:999px;border:1px solid var(--line);background:var(--navbg);}
.dnav{position:fixed;top:18px;right:clamp(18px,4vw,48px);z-index:45;display:flex;gap:10px}
.dnav a{font-size:.9rem;padding:8px 16px;border-radius:999px;border:1px solid var(--line);background:var(--navbg);}
.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px;margin-top:30px}
.fact{border:1px solid var(--line);border-radius:22px;padding:22px;background:var(--card);}
.fact h4{font-size:1.15rem;margin-bottom:8px;letter-spacing:-.02em}
.fact p{font-size:.95rem}
.steps{counter-reset:s;display:grid;gap:18px;margin-top:20px}
.step{display:grid;grid-template-columns:70px 1fr;gap:18px;align-items:start;border-top:1px solid var(--line);padding-top:18px}
.step::before{counter-increment:s;content:"0" counter(s);font-family:ui-monospace,monospace;font-size:2rem;color:var(--accent2);font-weight:700}
.step h4{font-size:1.3rem;margin-bottom:4px}
.note{border-left:3px solid var(--accent2);padding:10px 16px;background:rgba(20,22,46,.05);border-radius:0 12px 12px 0;margin-top:22px;font-size:.95rem;color:var(--fg)}
.nextp{display:block;text-align:center;padding:90px 20px}
.nextp small{display:block;color:var(--mut);letter-spacing:.2em;text-transform:uppercase;font-size:.75rem;margin-bottom:10px}
.nextp b{font-size:clamp(2rem,7vw,5rem);letter-spacing:-.03em}
.demo{margin-top:24px;font-family:ui-monospace,Menlo,monospace;font-size:.88rem;border:1px solid var(--line);border-radius:16px;padding:16px;background:#14162e;color:#eef0fb;overflow:auto;white-space:pre}
@media(max-width:820px){
 nav .links{display:none}
 .about-grid{grid-template-columns:1fr}
 .pgrid{grid-template-columns:1fr}
 .step{grid-template-columns:48px 1fr}
 .dnav{display:none}
}
@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}.hero h1 .ch{animation:none;transform:none}.conic{display:none}}

.gs .ch{background:linear-gradient(100deg,var(--g1),var(--g2),var(--g1));background-size:1000% 100%;-webkit-background-clip:text;background-clip:text;color:transparent}
.dhero h1{overflow-wrap:anywhere;font-size:clamp(2.4rem,8vw,6.5rem)}
.hero h1 .ln{white-space:nowrap}
@media(max-width:820px){.dhero h1 .ln{white-space:normal}.hero h1{font-size:clamp(2.6rem,15vw,5rem)}}
.stat b{font-size:clamp(1.4rem,5vw,2rem)}
.dhero p{text-shadow:0 2px 14px var(--navbg)}
.dhero h1{overflow-wrap:break-word;font-size:clamp(2.2rem,7vw,5.5rem)}.dhero h1 .ln{white-space:normal}

.btn:hover{border-color:var(--accent)}.back,.dnav a{background:var(--navbg)}nav .links a:hover{color:var(--accent)}


body{background:var(--bg)}
#scene{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;contain:strict}
#scene .sky,#scene .far,#scene .world,#scene .fg,#scene .stars{position:absolute;left:0;width:100%}
#scene .sky{top:0;height:100%}
#scene .stars{top:0;height:60%}
#scene .stars .tw{animation:tw 4s ease-in-out infinite alternate}
@keyframes tw{from{opacity:.25}to{opacity:1}}
#scene .orb{position:absolute;left:0;top:0;width:min(16vmin,150px);height:min(16vmin,150px);margin:-8vmin 0 0 -8vmin;border-radius:50%;will-change:transform;opacity:.6}
#scene .orb.big{width:min(26vmin,240px);height:min(26vmin,240px);margin:-13vmin 0 0 -13vmin}
#scene .far{top:0;height:150vh;will-change:transform;opacity:.6}
#scene .far svg,#scene .fg svg{display:block;width:100%;height:100%}
#scene .world{top:0;height:320vh;will-change:transform}
#scene .mt{position:absolute;left:50%;top:0;height:100%;width:max(100vw,144vh);transform:translateX(-50%)}
#scene .mt svg{display:block;width:100%;height:100%}
#scene .fg{bottom:0;height:24vh;will-change:transform}
#scene .mist{opacity:.55;position:absolute;left:-30%;width:160%;height:16vh;margin-top:-8vh;animation:drift 70s ease-in-out infinite alternate;will-change:transform}
@keyframes drift{from{transform:translate3d(-6%,0,0)}to{transform:translate3d(6%,0,0)}}
/* altitude HUD */
.hud{position:fixed;right:14px;top:50%;transform:translateY(-50%);height:42vh;width:2px;background:var(--line);z-index:30;border-radius:2px}
.hud i{position:absolute;right:-3px;width:8px;height:8px;border-radius:50%;background:var(--accent);top:0;margin-top:-4px;will-change:transform}
.hud b{position:absolute;right:16px;top:0;margin-top:-10px;font:600 .72rem ui-monospace,Menlo,monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--fg);background:var(--navbg);padding:3px 8px;border-radius:999px;border:1px solid var(--line);white-space:nowrap}
.hud u{position:absolute;right:-2px;width:6px;height:2px;background:var(--line)}
@media(max-width:820px){.hud{right:8px;height:34vh}.hud b{display:none}}
@media(prefers-reduced-motion:reduce){#scene .mist,#scene .stars .tw{animation:none}}
body[data-theme=triage]{--bg:#0c2218;--fg:#e6e9f8;--mut:#b6c7ba;--a:#a5b4fc;--accent:#a5b4fc;--accent2:#a5b4fc;--line:rgba(238,240,226,.24);--card:rgba(14,40,30,.82);--g1:#a5b4fc;--g2:#e6e9f8;--onacc:#07150f;--navbg:rgba(12,34,24,.9)}
body[data-theme=triage] .demo{background:#06130d;color:#e6e9f8}
