:root{
  --bg:#E6F0F4; --panel:#F4FAFC; --ink:#082631; --muted:#3F6272; --line:#9CC3D1;
  --accent:#00718A; --hot:#C4003F; --glow:rgba(0,113,138,.12);
  color-scheme:light;
  box-sizing:border-box; padding-top:env(safe-area-inset-top,0px); padding-bottom:env(safe-area-inset-bottom,0px);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){--bg:#04060C;--panel:#0A1119;--ink:#D5F6FF;--muted:#7FA3B2;--line:#14394A;--accent:#00E5FF;--hot:#FF2A6D;--glow:rgba(0,229,255,.14);color-scheme:dark}
}
:root[data-theme="dark"]{--bg:#04060C;--panel:#0A1119;--ink:#D5F6FF;--muted:#7FA3B2;--line:#14394A;--accent:#00E5FF;--hot:#FF2A6D;--glow:rgba(0,229,255,.14);color-scheme:dark}
html{scroll-padding-top:env(safe-area-inset-top,0px);scroll-behavior:smooth}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:400 .98rem/1.7 "JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;position:relative;overflow-x:hidden}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);background:var(--bg);z-index:30}
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:20;background:repeating-linear-gradient(0deg,rgba(0,0,0,.07) 0 1px,transparent 1px 3px)}
.grid{position:fixed;inset:0;z-index:-1;background:
  radial-gradient(60rem 30rem at 80% -5%,var(--glow),transparent 70%),
  linear-gradient(var(--line) 1px,transparent 1px) 0 0/48px 48px,
  linear-gradient(90deg,var(--line) 1px,transparent 1px) 0 0/48px 48px;opacity:.55;
  -webkit-mask-image:linear-gradient(#000 20%,transparent 85%);mask-image:linear-gradient(#000 20%,transparent 85%)}
a{color:var(--accent);text-underline-offset:4px}
a:hover{color:var(--hot)}
:focus-visible{outline:2px solid var(--hot);outline-offset:3px}
.disp{font-family:"Chakra Petch","Segoe UI",Arial,sans-serif}
.wrap{max-width:62rem;margin:0 auto;padding:0 clamp(1rem,4vw,2.5rem)}

.bar{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:1rem 0;color:var(--muted);font-size:.85rem;border-bottom:1px solid var(--line)}
.bar i{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;background:var(--accent);margin-right:.5rem;box-shadow:0 0 10px var(--accent);animation:pulse 2s infinite}
@keyframes pulse{50%{opacity:.25}}

.hero{padding:clamp(3rem,9vw,7rem) 0 clamp(2.5rem,6vw,4rem)}
.boot{margin:0 0 1.5rem;color:var(--muted);min-height:7.2em}
.boot b{color:var(--accent);font-weight:600}
h1{margin:0;font-weight:700;font-size:clamp(2.1rem,9.6vw,6.6rem);line-height:.98;letter-spacing:-.01em;color:var(--ink)}
h1 .l{display:block;white-space:nowrap}
h1:hover,h1:focus{text-shadow:3px 0 var(--hot),-3px 0 var(--accent);cursor:default}
.tag{margin:1.5rem 0 0;font-size:1.05rem;max-width:56ch}
.cta{display:flex;gap:1rem;flex-wrap:wrap;margin-top:2rem}
.btn{display:inline-block;padding:.75rem 1.4rem;border:1px solid var(--accent);color:var(--accent);text-decoration:none;font-weight:600;clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px));transition:background .2s,color .2s}
.btn:hover,.btn.on{background:var(--accent);color:var(--bg)}

.panel{background:var(--panel);border:1px solid var(--line);padding:clamp(1.25rem,3vw,2rem);margin:0 0 1.5rem;clip-path:polygon(0 0,calc(100% - 20px) 0,100% 20px,100% 100%,20px 100%,0 calc(100% - 20px))}
h2{margin:0 0 1.25rem;font-size:1.5rem;font-weight:700}
h2::before{content:"// ";color:var(--hot)}
.panel p{margin:0 0 1rem;max-width:68ch}
.panel p:last-child{margin-bottom:0}

.job h3{margin:0;font-size:1.25rem}
.job .meta{color:var(--muted);margin:.2rem 0 1.25rem}
.job ul{margin:0;padding:0;list-style:none}
.job li{position:relative;padding-left:1.5rem;margin-bottom:.85rem;max-width:70ch}
.job li::before{content:">";position:absolute;left:0;color:var(--accent);font-weight:600}
.perf{margin:1.5rem 0;padding:1rem 1.25rem;border-left:2px solid var(--hot);background:var(--glow)}
.perf p{margin:0 0 .75rem}
.row{display:grid;grid-template-columns:5.5rem 1fr;gap:.75rem;align-items:center;margin:.4rem 0;font-size:.85rem}
.track{height:.7rem;background:var(--line)}
.fill{height:100%;background:var(--accent);box-shadow:0 0 12px var(--accent);width:var(--w);transition:width 1.4s cubic-bezier(.2,.8,.2,1)}
.fill.hot{background:var(--hot);box-shadow:0 0 12px var(--hot)}
.js .fill{width:0}
.js .perf.seen .fill{width:var(--w)}

.stack{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1.25rem 2rem}
.stack h3{margin:0 0 .35rem;font-size:1rem;color:var(--accent)}
.stack p{margin:0;color:var(--ink)}

.creds{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1.5rem}
.creds h3{margin:0 0 .4rem;font-size:1rem;color:var(--accent)}
.creds ul{margin:0;padding:0;list-style:none}
.creds li{margin-bottom:.5rem}
.creds small{display:block;color:var(--muted);font-size:.85rem}

.mail{display:inline-block;font-weight:700;font-size:clamp(1.1rem,4.4vw,2rem);word-break:break-word;margin-bottom:1rem}
.links{display:flex;gap:1.5rem;flex-wrap:wrap}
footer{padding:2rem 0 3rem;color:var(--muted);font-size:.85rem}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

.theme-btn{font:inherit;font-size:.85rem;color:var(--accent);background:transparent;border:1px solid var(--accent);padding:.15rem .8rem;cursor:pointer;transition:background .2s,color .2s}
.theme-btn:hover{background:var(--accent);color:var(--bg)}

.form{display:grid;gap:1rem;margin:1.5rem 0;max-width:36rem}
.form label{display:grid;gap:.35rem;font-weight:600}
.form input[type=text],.form input[type=email],.form textarea{font:inherit;font-weight:400;color:var(--ink);background:var(--bg);border:1px solid var(--line);padding:.7rem .9rem;width:100%;border-radius:0}
.form textarea{min-height:9rem;resize:vertical}
.form input:focus,.form textarea:focus{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:1px}
.form [aria-invalid=true]{border-color:var(--hot)}
.form button.btn{background:transparent;font:inherit;font-weight:600;cursor:pointer;justify-self:start}
.form button.btn:hover{background:var(--accent);color:var(--bg)}
.form button[disabled]{opacity:.5;cursor:wait}
.hp{display:none!important}
.status{min-height:1.6em;margin:0}
.status.ok{color:var(--accent)}
.status.err{color:var(--hot)}
.or{color:var(--muted);margin:1.5rem 0 .5rem}