/* ============ Kevil.OS v2.1 ============ */

/* THEMES */
:root,
:root[data-theme="dark"]{
  --bg:#05060a; --bg-2:#0a0d18;
  --fg:#e8ecf3; --fg-soft:#cfd8e6; --muted:#8892a6;
  --line:rgba(255,255,255,.08); --line-2:rgba(255,255,255,.14);
  --card:rgba(255,255,255,.02); --card-hi:rgba(255,255,255,.04);
  --accent:#7df9ff; --accent-2:#ff6ec7; --accent-3:#a78bfa;
  --accent-4:#facc15; --accent-5:#4ade80;
  --shadow:0 30px 80px -20px rgba(125,249,255,.18);
  --skill-bg-1:rgba(10,13,24,.55);
  --skill-bg-2:rgba(20,25,40,.85);
}
:root[data-theme="light"]{
  --bg:#f4f6fb; --bg-2:#ffffff;
  --fg:#0c1020; --fg-soft:#1f273d; --muted:#4f5a72;
  --line:rgba(12,16,32,.12); --line-2:rgba(12,16,32,.22);
  --card:rgba(255,255,255,.7); --card-hi:rgba(12,16,32,.05);
  --accent:#0369a1; --accent-2:#be185d; --accent-3:#6d28d9;
  --accent-4:#a16207; --accent-5:#15803d;
  --shadow:0 30px 80px -20px rgba(3,105,161,.25);
  --skill-bg-1:rgba(255,255,255,.85);
  --skill-bg-2:rgba(255,255,255,.98);
}
:root{
  --max:1240px;
  --mono:"JetBrains Mono", ui-monospace, monospace;
  --sans:"Space Grotesk", system-ui, sans-serif;
  --display:"Syncopate", "Space Grotesk", sans-serif;
  --serif:"Instrument Serif", Georgia, serif;
}

*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--bg);transition:background .7s ease}
body{background:transparent;color:var(--fg);font-family:var(--sans);-webkit-font-smoothing:antialiased;overflow-x:hidden;transition:color .7s ease}
body{cursor:none}
a{color:inherit;text-decoration:none}
img,svg{display:block;max-width:100%}
::selection{background:var(--accent);color:var(--bg)}
code{font-family:var(--mono);background:var(--card-hi);padding:1px 6px;border-radius:4px;font-size:.9em}

/* background fx */
#neural{position:fixed;inset:0;z-index:-3;width:100vw;height:100vh}
#blob{position:fixed;inset:-10vh -10vw;z-index:-2;width:120vw;height:120vh;pointer-events:none;opacity:.85}
.grain{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/></svg>")}
.scanlines{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.06;background:repeating-linear-gradient(180deg,transparent 0 2px,#fff 2px 3px)}
:root[data-theme="light"] .scanlines{opacity:.025;background:repeating-linear-gradient(180deg,transparent 0 2px,#000 2px 3px)}

/* boot */
#boot{position:fixed;inset:0;z-index:9999;background:#000;display:flex;align-items:center;justify-content:center;transition:opacity .8s,visibility .8s}
#boot.gone{opacity:0;visibility:hidden}
.boot-inner{width:min(700px,90vw);font-family:var(--mono);color:#7df9ff}
.boot-logo{font-family:var(--display);font-size:42px;letter-spacing:.18em;color:#fff;margin-bottom:20px}
.boot-logo span{color:#7df9ff}
#boot-log{font-size:13px;line-height:1.7;height:220px;overflow:hidden;color:#9bdcff;white-space:pre-wrap}
.boot-bar{margin-top:16px;height:4px;background:#0d1320;border-radius:2px;overflow:hidden}
#boot-bar-fill{height:100%;width:0;background:linear-gradient(90deg,#7df9ff,#ff6ec7);transition:width .15s}
.boot-hint{margin-top:18px;font-size:11px;color:#4f6b85;letter-spacing:.2em;text-transform:uppercase}
.boot-hint kbd{background:#0d1320;border:1px solid #1d2a40;padding:2px 6px;border-radius:4px;color:#9bdcff;margin:0 2px}

/* cursor */
#cursor{position:fixed;top:0;left:0;z-index:9998;pointer-events:none;mix-blend-mode:difference}
#cursor-dot{position:absolute;width:6px;height:6px;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}
#cursor-ring{position:absolute;width:34px;height:34px;border:1px solid rgba(255,255,255,.6);border-radius:50%;transform:translate(-50%,-50%);transition:width .25s,height .25s,border-color .25s,background .25s}
#cursor.hover #cursor-ring{width:60px;height:60px;background:rgba(125,249,255,.15);border-color:var(--accent)}
#cursor.click #cursor-ring{transform:translate(-50%,-50%) scale(.6)}
@media (max-width:780px){#cursor{display:none}body{cursor:auto}}

/* nav */
#nav{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:14px 28px;backdrop-filter:blur(14px) saturate(160%);background:color-mix(in srgb, var(--bg) 60%, transparent);border-bottom:1px solid var(--line)}
.brand{font-family:var(--mono);font-weight:700;letter-spacing:.1em;display:flex;align-items:center;gap:8px}
.brand .ver{font-style:normal;font-size:10px;color:var(--accent);letter-spacing:.2em;background:var(--card-hi);padding:2px 6px;border-radius:4px}
.brand .dot{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 12px var(--accent);animation:pulse 1.6s infinite}
#nav ul{display:flex;gap:18px;list-style:none}
#nav ul a{font-family:var(--mono);font-size:12px;color:var(--muted);position:relative;padding:6px 2px;transition:color .25s}
#nav ul a::before{content:attr(data-i) " ";color:var(--accent);opacity:.5;font-size:10px}
#nav ul a:hover{color:var(--fg)}
.nav-tools{display:flex;gap:8px}
.icon-btn{min-width:42px;height:36px;padding:0 10px;border-radius:10px;border:1px solid var(--line);background:var(--card);color:var(--fg);cursor:none;display:flex;align-items:center;justify-content:center;gap:5px;font-family:var(--mono);font-size:11px;transition:border-color .25s,color .25s,background .25s;font-weight:700;letter-spacing:.1em}
.icon-btn svg{flex-shrink:0;display:block}
.icon-btn .btn-label{font-size:10px}
.icon-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--card-hi)}

/* sound button icon states */
#sound-btn .snd-icon-off{display:none}
#sound-btn.muted .snd-icon-on{display:none}
#sound-btn.muted .snd-icon-off{display:block}

/* theme button: sun/moon icons with animated swap */
.theme-btn{position:relative;overflow:hidden}
.theme-btn .sun-icon,.theme-btn .moon-icon{transition:transform .5s cubic-bezier(.4,0,.2,1),opacity .4s}
.theme-btn .moon-icon{position:absolute;opacity:0;transform:rotate(90deg) scale(.4)}
:root[data-theme="dark"] .theme-btn .sun-icon{position:absolute;opacity:0;transform:rotate(-90deg) scale(.4)}
:root[data-theme="dark"] .theme-btn .moon-icon{position:relative;opacity:1;transform:rotate(0) scale(1)}
:root[data-theme="light"] .theme-btn .sun-icon{position:relative;opacity:1;transform:rotate(0) scale(1)}
:root[data-theme="light"] .theme-btn .moon-icon{position:absolute;opacity:0;transform:rotate(90deg) scale(.4)}
@media (max-width:980px){#nav ul{display:none}}

/* command palette */
#palette{position:fixed;inset:0;z-index:200;display:flex;align-items:flex-start;justify-content:center;padding-top:14vh}
#palette[hidden]{display:none}
.pal-back{position:absolute;inset:0;background:color-mix(in srgb, var(--bg) 80%, transparent);backdrop-filter:blur(12px)}
.pal-card{position:relative;width:min(640px,92vw);border:1px solid var(--line-2);border-radius:14px;background:var(--bg-2);box-shadow:0 30px 80px -10px rgba(0,0,0,.45);overflow:hidden;animation:palIn .25s ease}
@keyframes palIn{from{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:none}}
#pal-input{width:100%;padding:18px 22px;border:none;outline:none;background:transparent;color:var(--fg);font-family:var(--sans);font-size:16px;border-bottom:1px solid var(--line);cursor:none}
#pal-list{list-style:none;max-height:50vh;overflow:auto;padding:6px}
#pal-list li{padding:10px 14px;border-radius:8px;display:flex;justify-content:space-between;font-family:var(--mono);font-size:13px;color:var(--fg-soft);cursor:none;gap:14px}
#pal-list li .k{color:var(--muted);font-size:11px}
#pal-list li.active,#pal-list li:hover{background:var(--card-hi);color:var(--accent)}
.pal-foot{padding:10px 14px;font-family:var(--mono);font-size:10px;color:var(--muted);border-top:1px solid var(--line);letter-spacing:.1em}

/* hero */
#hero{min-height:100vh;display:flex;flex-direction:column;justify-content:center;padding:120px 6vw 80px;position:relative;max-width:var(--max);margin:0 auto}
.hero-meta{display:flex;flex-wrap:wrap;gap:24px;font-family:var(--mono);font-size:11px;color:var(--muted);margin-bottom:32px;letter-spacing:.06em}
.hero-meta .key{color:var(--accent);margin-right:6px}
.hero-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:60px;align-items:center}
@media (max-width:980px){.hero-grid{grid-template-columns:1fr}}
.title{font-family:var(--display);font-size:clamp(54px,11vw,170px);line-height:.95;letter-spacing:-.03em;font-weight:700;text-transform:uppercase}
.title .line{display:block;overflow:hidden}
.title .scramble{display:inline-block;background:linear-gradient(180deg,var(--fg) 30%,var(--muted) 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
.role-line{margin-top:18px;font-family:var(--mono);font-size:13px;color:var(--muted);letter-spacing:.04em;display:flex;align-items:center;gap:10px}
.role-line em{color:var(--accent);font-style:normal}
.r-glow{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 12px var(--accent);animation:pulse 1.6s infinite}
.tagline{margin-top:18px;font-family:var(--mono);font-size:clamp(14px,1.4vw,18px);color:var(--fg-soft)}
.cursor-blink{color:var(--accent);animation:blink 1s steps(2) infinite;margin-right:4px}
.hero-actions{display:flex;gap:12px;margin-top:32px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:10px;padding:13px 22px;border-radius:999px;font-family:var(--mono);font-size:13px;border:1px solid var(--line);transition:.3s;cursor:none;background:transparent;color:var(--fg)}
.btn i{font-style:normal;transition:transform .3s}
.btn:hover i{transform:translateX(4px)}
.btn.primary{background:var(--accent);color:var(--bg);border-color:var(--accent)}
.btn.primary:hover{box-shadow:0 0 32px color-mix(in srgb,var(--accent) 45%, transparent)}
.btn.ghost:hover{border-color:var(--accent);color:var(--accent)}
.hero-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:36px;max-width:520px}
.hs{padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--card);cursor:none;transition:.25s}
.hs:hover{transform:translateY(-3px);border-color:var(--accent)}
.hs b{font-family:var(--display);font-size:22px;display:block;color:var(--accent)}
.hs b i{font-style:normal;font-size:13px;color:var(--muted);margin-left:2px}
.hs span{font-family:var(--mono);font-size:10px;color:var(--muted);letter-spacing:.1em;text-transform:uppercase}

/* PHOTO SLIDESHOW */
.hero-right{display:flex;flex-direction:column;align-items:center;gap:14px}
.photo-frame{position:relative;width:min(380px,80vw);aspect-ratio:3/4;border-radius:24px;overflow:hidden;border:1px solid var(--line-2);background:var(--bg-2);transform-style:preserve-3d;cursor:none}
.photo-stage{position:absolute;inset:0}
.photo-stage .ph{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(1.05) contrast(1.05);opacity:0;transform:scale(1.05);transition:opacity .9s ease, transform 6s ease, filter .6s}
.photo-stage .ph.active{opacity:1;transform:scale(1)}
.photo-stage .ph.exiting{opacity:0;transform:scale(1.08)}
.photo-stage .ph.glitch{animation:glitch .6s steps(2)}
@keyframes glitch{
  0%{filter:hue-rotate(0) saturate(1.05) contrast(1.05);clip-path:inset(0 0 0 0)}
  25%{filter:hue-rotate(160deg) saturate(1.6) contrast(1.3);clip-path:inset(20% 0 60% 0);transform:translate(-6px,0) scale(1.04)}
  40%{filter:hue-rotate(-90deg) saturate(2) contrast(1.4);clip-path:inset(50% 0 10% 0);transform:translate(6px,0) scale(1.04)}
  60%{filter:hue-rotate(80deg) saturate(1.4) contrast(1.2);clip-path:inset(10% 0 70% 0);transform:translate(-3px,2px) scale(1.04)}
  100%{filter:saturate(1.05) contrast(1.05);clip-path:inset(0)}
}
#photo-fx{position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen}
.frame-glow{position:absolute;inset:-30%;background:radial-gradient(circle at 30% 30%,rgba(125,249,255,.35),transparent 60%),radial-gradient(circle at 70% 70%,rgba(255,110,199,.3),transparent 60%);filter:blur(40px);pointer-events:none;animation:floatG 9s ease-in-out infinite;z-index:1}
.frame-ring{position:absolute;inset:8px;border:1px dashed rgba(255,255,255,.2);border-radius:18px;pointer-events:none;z-index:2}
.frame-corners i{position:absolute;width:18px;height:18px;border:2px solid var(--accent);z-index:3}
.frame-corners i:nth-child(1){top:14px;left:14px;border-right:none;border-bottom:none}
.frame-corners i:nth-child(2){top:14px;right:14px;border-left:none;border-bottom:none}
.frame-corners i:nth-child(3){bottom:14px;left:14px;border-right:none;border-top:none}
.frame-corners i:nth-child(4){bottom:14px;right:14px;border-left:none;border-top:none}
.frame-meta{position:absolute;bottom:42px;left:14px;right:14px;display:flex;justify-content:space-between;font-family:var(--mono);font-size:10px;color:#fff;letter-spacing:.1em;text-shadow:0 2px 6px rgba(0,0,0,.7);z-index:3}
.frame-scan{position:absolute;left:0;right:0;height:60px;background:linear-gradient(180deg,transparent,rgba(125,249,255,.18),transparent);animation:scanY 4s ease-in-out infinite;pointer-events:none;z-index:2}
.ph-dots{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);display:flex;gap:6px;z-index:4}
.ph-dots button{width:24px;height:4px;border:none;border-radius:2px;background:rgba(255,255,255,.3);cursor:none;transition:.25s}
.ph-dots button.active{background:var(--accent);width:36px}
@keyframes scanY{0%{top:-60px}100%{top:100%}}
@keyframes floatG{0%,100%{transform:translate(0,0) rotate(0)}50%{transform:translate(10%,-8%) rotate(20deg)}}
.photo-caption{font-family:var(--mono);font-size:11px;color:var(--muted);display:flex;align-items:center;gap:8px;text-align:center}

.scroll-hint{position:absolute;bottom:24px;left:6vw;font-family:var(--mono);font-size:10px;letter-spacing:.3em;color:var(--muted);display:flex;align-items:center;gap:10px}
.scroll-hint .line-down{width:1px;height:40px;background:linear-gradient(180deg,var(--accent),transparent);animation:drop 1.8s infinite}

/* sections */
.pad{max-width:var(--max);margin:0 auto;padding:120px 6vw}
.pad.deep{padding-top:140px;padding-bottom:140px}
.section-head{display:flex;align-items:baseline;gap:18px;margin-bottom:48px;border-bottom:1px solid var(--line);padding-bottom:18px}
.section-head .num{font-family:var(--mono);font-size:12px;color:var(--accent);letter-spacing:.2em}
.section-head h2{font-family:var(--display);font-size:clamp(28px,4vw,46px);letter-spacing:.04em;text-transform:lowercase}
.sub{font-family:var(--mono);font-size:12px;margin:-32px 0 28px}
.sub-h{font-family:var(--display);font-size:14px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:42px 0 22px;display:flex;align-items:center;gap:14px}
.muted{color:var(--muted)}
.reveal{opacity:0;transform:translateY(40px);transition:none}
.reveal.in{opacity:1;transform:none;transition:opacity .9s ease, transform .9s cubic-bezier(.2,.7,.2,1)}

/* about */
.about-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:48px;align-items:start}
.about-text .lead{font-size:clamp(18px,1.6vw,22px);line-height:1.55;color:var(--fg);margin-bottom:18px}
.about-text .lead a{color:var(--accent);border-bottom:1px dashed currentColor}
.about-text p{font-size:clamp(15px,1.3vw,18px);line-height:1.7;color:var(--fg-soft);margin-bottom:14px}
.about-text p a{color:var(--accent-3);border-bottom:1px dashed currentColor}
.about-text strong{color:var(--fg)}
.about-text em{color:var(--accent);font-style:normal}
.hl{background:linear-gradient(90deg,var(--accent-2),var(--accent-3));-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:600}
.quote{margin-top:20px;padding:18px 22px;border-left:2px solid var(--accent);font-family:var(--serif);font-style:italic;font-size:20px;color:var(--fg);background:var(--card);border-radius:0 12px 12px 0}
.quote .q{font-size:40px;color:var(--accent);margin-right:6px;line-height:0}
.about-card{position:relative;border:1px solid var(--line);border-radius:18px;padding:26px;background:linear-gradient(180deg,var(--card-hi),var(--card));overflow:hidden;transform-style:preserve-3d}
.card-glow{position:absolute;width:300px;height:300px;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb, var(--accent) 35%, transparent),transparent 70%);filter:blur(40px);top:-100px;right:-100px;pointer-events:none}
.card-row{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px dashed var(--line);font-family:var(--mono);font-size:13px}
.card-row span{color:var(--muted)}
.card-row b{color:var(--fg);font-weight:500}
.card-row b a{color:var(--accent)}
.card-row.stat b{color:var(--accent-5);display:inline-flex;align-items:center;gap:8px}
.live{width:8px;height:8px;border-radius:50%;background:var(--accent-5);box-shadow:0 0 12px var(--accent-5);display:inline-block;animation:pulse 1.4s infinite}
@media (max-width:860px){.about-grid{grid-template-columns:1fr}}

/* A360 */
.a360-hero{display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:start;margin-bottom:40px}
@media (max-width:980px){.a360-hero{grid-template-columns:1fr}}
.tag{font-family:var(--mono);font-size:11px;color:var(--accent);letter-spacing:.2em;text-transform:uppercase;margin-bottom:12px;display:inline-block;padding:4px 10px;border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);border-radius:999px;background:color-mix(in srgb,var(--accent) 8%,transparent)}
.big{font-family:var(--display);font-size:clamp(28px,3.4vw,52px);letter-spacing:-.01em;line-height:1.05;margin-bottom:18px;text-transform:uppercase}
.a360-left p{color:var(--fg-soft);line-height:1.7;font-size:17px;margin-bottom:22px}
.a360-left p a{color:var(--accent);border-bottom:1px dashed currentColor}
.a360-counts{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.cnt{padding:16px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.cnt b{font-family:var(--display);font-size:30px;display:block;color:var(--accent);line-height:1}
.cnt span{font-family:var(--mono);font-size:10px;color:var(--muted);letter-spacing:.1em;text-transform:uppercase;margin-top:8px;display:block}

.a360-mock{border:1px solid var(--line-2);border-radius:16px;background:var(--bg-2);overflow:hidden;box-shadow:var(--shadow)}
.mock-bar{display:flex;align-items:center;gap:8px;padding:10px 14px;background:color-mix(in srgb,var(--fg) 4%,transparent);border-bottom:1px solid var(--line)}
.mock-bar i{width:11px;height:11px;border-radius:50%;background:#ff5f56}
.mock-bar i:nth-child(2){background:#ffbd2e}
.mock-bar i:nth-child(3){background:#27c93f}
.mock-bar span{margin-left:12px;font-family:var(--mono);font-size:11px;color:var(--muted)}
.mock-body{padding:16px}
.mock-tabs{display:flex;gap:6px;margin-bottom:14px}
.mock-tabs span{font-family:var(--mono);font-size:11px;padding:5px 10px;border-radius:6px;color:var(--muted);background:var(--card)}
.mock-tabs span.active{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
.kpi{padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--card)}
.kpi span{font-family:var(--mono);font-size:9px;color:var(--muted);letter-spacing:.1em;text-transform:uppercase}
.kpi b{display:block;font-family:var(--display);font-size:18px;color:var(--fg);margin:4px 0}
.spark{height:24px;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--accent) 15%,transparent));border-radius:4px;position:relative;overflow:hidden}
.spark::after{content:"";position:absolute;inset:0;background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 24' preserveAspectRatio='none'><polyline points='0,18 12,14 24,16 36,8 48,12 60,4 72,10 84,6 100,2' fill='none' stroke='%237df9ff' stroke-width='1.5'/></svg>")}
.kpi:nth-child(2) .spark::after{filter:hue-rotate(280deg)}
.kpi:nth-child(3) .spark::after{filter:hue-rotate(120deg)}
.kpi:nth-child(4) .spark::after{filter:hue-rotate(40deg)}
.mock-row{display:grid;grid-template-columns:1fr 1.4fr;gap:12px}
.gauge{padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--card);display:flex;flex-direction:column;align-items:center;justify-content:center}
.gauge svg{width:100%;max-width:140px}
.gauge-label{font-family:var(--mono);font-size:11px;color:var(--muted);margin-top:6px}
.gauge-label b{color:var(--accent);font-size:14px}
.mini-log{padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--card);font-family:var(--mono);font-size:11px;line-height:1.9;max-height:130px;overflow:hidden;color:var(--fg-soft)}
.mini-log .ok{color:var(--accent-5);margin-right:6px}
.mini-log .warn{color:var(--accent-4);margin-right:6px}

.flow-wrap{margin-top:30px;border:1px solid var(--line);border-radius:18px;padding:20px;background:var(--card);overflow:hidden}
#flowsvg{width:100%;height:auto}
#flowsvg .ring{fill:var(--bg-2);stroke:var(--accent);stroke-width:1.5;cursor:none;transition:.3s}
#flowsvg .ring.core{stroke:var(--accent-2);stroke-width:2}
#flowsvg .stage:hover .ring{fill:color-mix(in srgb,var(--accent) 18%,transparent);stroke-width:2.5}
#flowsvg .lbl{fill:var(--fg);font-family:var(--mono);font-weight:700;font-size:11px;text-anchor:middle;dominant-baseline:middle;pointer-events:none}
#flowsvg .cap{fill:var(--muted);font-family:var(--mono);font-size:10px;text-anchor:middle;letter-spacing:.1em;pointer-events:none}
#packets circle{fill:var(--accent);filter:drop-shadow(0 0 6px var(--accent))}
#packets circle.alt{fill:var(--accent-2);filter:drop-shadow(0 0 6px var(--accent-2))}
.flow-info{margin-top:14px;font-family:var(--mono);font-size:12px;color:var(--fg-soft);min-height:20px;padding:10px 14px;background:var(--card-hi);border-radius:8px;border-left:2px solid var(--accent)}

.repo-strip{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.r-card{padding:14px 16px;border:1px solid var(--line);border-radius:10px;background:var(--card);transition:.3s;cursor:none;display:block}
.r-card:hover{border-color:var(--accent);transform:translateY(-3px);background:var(--card-hi)}
.r-card b{display:block;font-family:var(--mono);font-size:13px;color:var(--fg);margin-bottom:4px}
.r-card span{font-family:var(--mono);font-size:11px;color:var(--muted)}

.a360-callouts,.p2p-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;margin-top:30px}
.callout{padding:20px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,var(--card-hi),var(--card));transition:.3s}
.callout:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:var(--shadow)}
.callout b{display:block;font-family:var(--display);font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:8px}
.callout p{font-size:14px;color:var(--fg-soft);line-height:1.6}

/* P2P / LangGraph */
.p2p-hero{margin-bottom:20px}
.p2p-hero p{font-size:17px;color:var(--fg-soft);line-height:1.7;max-width:900px}
.p2p-hero p a{color:var(--accent);border-bottom:1px dashed currentColor}
.lg-wrap{position:relative;border:1px solid var(--line);border-radius:18px;padding:24px;background:linear-gradient(180deg,var(--card-hi),var(--card));overflow:hidden}
#lg-beams{position:absolute;left:0;right:0;top:160px;width:100%;height:30px;pointer-events:none;z-index:1}
.mini-btn{font-family:var(--mono);font-size:11px;padding:6px 14px;border-radius:999px;background:var(--accent);color:var(--bg);border:none;cursor:none;letter-spacing:.15em;transition:.25s;font-weight:700;text-transform:uppercase}
.mini-btn:hover{box-shadow:0 0 24px color-mix(in srgb,var(--accent) 45%,transparent)}
.mini-btn.running{background:var(--accent-2);animation:pulseBtn 1s infinite}
@keyframes pulseBtn{50%{box-shadow:0 0 30px var(--accent-2)}}

.lg-stages{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;align-items:stretch;margin-top:24px;position:relative;z-index:2}
@media (max-width:900px){.lg-stages{grid-template-columns:1fr}}
.lg-stage{position:relative;padding:18px 16px 30px;border:1px solid var(--line);border-radius:14px;background:var(--bg-2);transition:.4s;display:flex;flex-direction:column;gap:8px;min-height:200px;overflow:hidden}
.lg-stage .lg-num{font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:.2em}
.lg-stage h5{font-size:14px;color:var(--fg);font-weight:600}
.lg-stage p{font-size:11px;color:var(--muted);line-height:1.5;font-family:var(--mono)}
.lg-stage .lg-status{position:absolute;top:14px;right:14px;font-family:var(--mono);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);padding:2px 8px;border-radius:999px;border:1px solid var(--line);background:var(--bg-2);z-index:3}
.lg-pulse{position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,color-mix(in srgb,var(--accent) 30%,transparent),transparent 65%);opacity:0;transition:opacity .4s;pointer-events:none}
.lg-stage.active .lg-pulse{opacity:1;animation:pulseStage 1.4s infinite}
@keyframes pulseStage{0%,100%{transform:scale(1);opacity:.8}50%{transform:scale(1.15);opacity:1}}
.lg-stage.active{border-color:var(--accent);box-shadow:0 0 32px color-mix(in srgb,var(--accent) 35%,transparent);transform:translateY(-4px)}
.lg-stage.active .lg-status{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,var(--bg-2))}
.lg-stage.done{border-color:var(--accent-5)}
.lg-stage.done .lg-status{color:var(--accent-5);border-color:var(--accent-5);background:color-mix(in srgb,var(--accent-5) 12%,var(--bg-2))}
.lg-bar{position:absolute;bottom:0;left:0;width:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .25s}
.lg-stage.active .lg-bar{animation:fillBar var(--dur,2.5s) linear forwards}
.lg-stage.done .lg-bar{width:100%}
@keyframes fillBar{from{width:0}to{width:100%}}

#lg-particles{position:absolute;inset:0;pointer-events:none;z-index:1}

.lg-result{position:relative;z-index:2;margin-top:18px;padding:18px;font-family:var(--mono);font-size:12px;background:#000;border:1px solid var(--line);border-radius:10px;color:var(--accent-5);min-height:60px;line-height:1.7;white-space:pre-wrap;max-height:300px;overflow:auto}
:root[data-theme="light"] .lg-result{background:#0f1729;color:#7df9ff}

/* timeline */
.timeline{position:relative;padding-left:32px}
.rail{position:absolute;left:8px;top:6px;bottom:6px;width:2px;background:var(--line);border-radius:2px;overflow:hidden}
.rail-fill{width:100%;height:0;background:linear-gradient(180deg,var(--accent),var(--accent-2));box-shadow:0 0 12px var(--accent)}
.t-item{position:relative;padding:18px 0 38px}
.t-item::before{content:attr(data-year);position:absolute;top:0;right:0;font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:.1em}
.t-dot{position:absolute;left:-32px;top:24px;width:14px;height:14px;border-radius:50%;background:var(--bg);border:2px solid var(--accent);box-shadow:0 0 12px var(--accent)}
.t-item h3{font-size:22px;font-weight:600;margin-bottom:10px}
.t-item h3 span{color:var(--accent)}
.t-item h3 a span{border-bottom:1px dashed currentColor}
.t-item p{color:var(--fg-soft);line-height:1.6;max-width:780px}
.t-item p a{color:var(--accent);border-bottom:1px dashed currentColor}
.t-item b{color:var(--fg)}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.chips span{font-family:var(--mono);font-size:11px;padding:5px 10px;border:1px solid var(--line);border-radius:999px;color:var(--muted);transition:.25s}
.chips span:hover{color:var(--accent);border-color:var(--accent)}
.chips.sm span{font-size:10px;padding:4px 8px}

/* SKILLS — orbital + alt views */
.skill-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:18px}
.skill-tab{font-family:var(--mono);font-size:11px;padding:7px 14px;border-radius:999px;border:1px solid var(--line);background:var(--card);color:var(--muted);cursor:none;transition:.25s;letter-spacing:.15em;text-transform:uppercase}
.skill-tab:hover{color:var(--fg);border-color:var(--accent)}
.skill-tab.active{background:var(--accent);color:var(--bg);border-color:var(--accent)}
.skill-detail{flex:1;min-width:0;font-family:var(--mono);font-size:12px;color:var(--fg-soft);padding:8px 14px;border:1px dashed var(--line);border-radius:10px;background:var(--card-hi);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.skill-stage{position:relative;width:100%;height:620px;border:1px solid var(--line);border-radius:18px;overflow:hidden;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--accent) 6%,transparent),transparent 70%),var(--skill-bg-1);backdrop-filter:blur(2px)}
.skill-stage canvas.orbit-bg{position:absolute;inset:0;pointer-events:none}

.skill-node{position:absolute;padding:8px 14px;border-radius:999px;background:var(--skill-bg-2);border:1px solid;font-family:var(--mono);font-size:12px;cursor:none;user-select:none;transition:transform .2s,box-shadow .25s,background .25s;color:var(--fg);white-space:nowrap;font-weight:500;will-change:transform;backdrop-filter:blur(4px)}
.skill-node:hover{transform:translate(-50%,-50%) scale(1.18) !important;z-index:10;box-shadow:0 0 30px currentColor}
.skill-node.pinned{box-shadow:0 0 0 2px currentColor inset, 0 0 20px currentColor}

/* light theme readability fix */
:root[data-theme="light"] .skill-stage{background:radial-gradient(ellipse at center,rgba(125,249,255,.08),transparent 70%),rgba(255,255,255,.7)}
:root[data-theme="light"] .skill-node{background:#fff;box-shadow:0 4px 16px rgba(12,16,32,.08);color:#0c1020}
:root[data-theme="light"] .skill-node:hover{color:#0c1020;box-shadow:0 6px 24px rgba(0,0,0,.12),0 0 0 2px currentColor}

.legend{display:flex;flex-wrap:wrap;gap:18px;font-family:var(--mono);font-size:11px;color:var(--muted);margin-top:16px;justify-content:center}
.legend i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:middle}

/* projects grid */
.proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:18px}
.proj{display:block;padding:24px;border:1px solid var(--line);border-radius:16px;background:var(--card);transition:.35s;position:relative;overflow:hidden;cursor:none}
.proj::before{content:"";position:absolute;inset:0;background:radial-gradient(400px circle at var(--mx,50%) var(--my,50%),color-mix(in srgb,var(--accent) 14%,transparent),transparent 40%);opacity:0;transition:opacity .3s;pointer-events:none}
.proj:hover::before{opacity:1}
.proj:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--accent) 40%,transparent)}
.proj-num{font-family:var(--mono);font-size:11px;color:var(--accent);letter-spacing:.2em;margin-bottom:14px}
.proj h4{font-size:20px;margin-bottom:10px;font-weight:600}
.proj p{font-size:14px;color:var(--muted);line-height:1.6;margin-bottom:14px}
.proj b{color:var(--fg)}
.proj.ghost-card{border-style:dashed;background:transparent}
.featured-mini{border-color:color-mix(in srgb,var(--accent) 25%,transparent)}

/* github live */
.gh-grid{display:grid;grid-template-columns:2fr 1.2fr 1.2fr;gap:14px;margin-bottom:30px}
@media (max-width:980px){.gh-grid{grid-template-columns:1fr}}
.gh-card{padding:20px;border:1px solid var(--line);border-radius:16px;background:var(--card)}
.gh-card.big{display:flex;gap:20px;align-items:center}
.gh-card.big img{width:88px;height:88px;border-radius:50%;border:2px solid var(--accent);object-fit:cover}
.gh-card h4{font-size:20px;margin-bottom:4px}
.gh-card h4 a{color:var(--accent)}
.gh-card h5{font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:.2em;text-transform:uppercase;margin-bottom:14px}
.gh-card p{font-size:14px;color:var(--fg-soft);margin-bottom:10px}
.gh-card p a{color:var(--accent)}
.gh-stats{display:flex;gap:18px;font-family:var(--mono);font-size:12px;color:var(--muted);margin-bottom:10px;flex-wrap:wrap}
.gh-stats b{color:var(--fg);margin-right:4px}
.gh-links{display:flex;flex-wrap:wrap;gap:8px}
.gh-links a{font-family:var(--mono);font-size:11px;padding:5px 10px;border:1px solid var(--line);border-radius:999px;transition:.25s;color:var(--fg);cursor:none}
.gh-links a:hover{border-color:var(--accent);color:var(--accent)}
.heat{display:grid;grid-template-columns:repeat(26,1fr);gap:3px;margin-top:6px}
.heat i{display:block;aspect-ratio:1;border-radius:2px;background:var(--card-hi)}
.heat i.l1{background:color-mix(in srgb,var(--accent) 20%,transparent)}
.heat i.l2{background:color-mix(in srgb,var(--accent) 40%,transparent)}
.heat i.l3{background:color-mix(in srgb,var(--accent) 60%,transparent)}
.heat i.l4{background:var(--accent)}
.small{font-size:10px}
.langs{display:flex;flex-direction:column;gap:10px}
.lang{display:flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px}
.lang i{width:10px;height:10px;border-radius:50%}
.lang .bar{flex:1;height:6px;border-radius:3px;background:var(--card-hi);overflow:hidden}
.lang .bar b{display:block;height:100%;background:currentColor;border-radius:3px;animation:grow 1.2s ease}
@keyframes grow{from{width:0}}
.lang span.pct{color:var(--muted);min-width:40px;text-align:right}

.gh-repos{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px}
.gh-repo{padding:18px;border:1px solid var(--line);border-radius:14px;background:var(--card);transition:.3s;display:block;cursor:none}
.gh-repo:hover{border-color:var(--accent);transform:translateY(-3px)}
.gh-repo h6{font-family:var(--mono);font-size:13px;color:var(--accent);margin-bottom:6px}
.gh-repo p{font-size:13px;color:var(--fg-soft);line-height:1.5;margin-bottom:10px;min-height:40px}
.gh-repo .gh-foot{display:flex;gap:14px;font-family:var(--mono);font-size:11px;color:var(--muted);align-items:center;flex-wrap:wrap}
.gh-repo .gh-foot i{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:4px}

/* certs with logos */
.certs{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}
.cert{position:relative;padding:24px 22px 56px;border:1px solid var(--line);border-radius:16px;background:linear-gradient(180deg,var(--card-hi),var(--card));transition:.3s;cursor:none;display:block;text-align:left;overflow:hidden}
.cert:hover{border-color:var(--accent);transform:translateY(-5px);box-shadow:var(--shadow)}
.cert-logo{width:64px;height:64px;border-radius:16px;background:#fff;display:flex;align-items:center;justify-content:center;padding:10px;margin-bottom:16px;box-shadow:0 8px 20px rgba(0,0,0,.18)}
.cert-logo svg{width:100%;height:100%;object-fit:contain}
.cert-logo.ms-logo{background:#fff}
.cert-logo.gh-logo{background:#24292e;padding:12px;color:#fff}
:root[data-theme="light"] .cert-logo.gh-logo{background:#f6f8fa;color:#24292e}
.cert-logo.fz-logo{background:linear-gradient(135deg,#1a1a2e,#16213e);color:#7df9ff;font-family:var(--display);font-size:22px;font-weight:700}
:root[data-theme="light"] .cert-logo{box-shadow:0 6px 16px rgba(0,0,0,.1)}
.cert h5{font-size:15px;margin-bottom:6px;font-weight:600}
.cert-meta{font-family:var(--mono);font-size:11px;color:var(--muted);margin-bottom:4px}
.cert-id{font-family:var(--mono);font-size:10px;color:var(--accent);letter-spacing:.05em;word-break:break-all;opacity:.85}
.cert-verify{position:absolute;bottom:18px;left:22px;font-family:var(--mono);font-size:11px;color:var(--accent);letter-spacing:.15em;text-transform:uppercase;opacity:.6;transition:.25s}
.cert:hover .cert-verify{opacity:1;letter-spacing:.25em}

/* edu */
.edu{display:grid;gap:14px}
.edu-card{padding:20px 24px;border:1px solid var(--line);border-radius:14px;display:grid;grid-template-columns:200px 1fr;gap:24px;align-items:center;background:var(--card);transition:.3s;cursor:none}
.edu-card:hover{border-color:var(--accent-3);transform:translateY(-2px)}
.edu-year{font-family:var(--mono);font-size:12px;color:var(--accent-3);letter-spacing:.1em}
.edu-card h4{font-size:18px;margin-bottom:4px}
.edu-card p{color:var(--muted);font-size:14px}
.edu-card p b{color:var(--fg)}
@media (max-width:600px){.edu-card{grid-template-columns:1fr;gap:6px}}

/* terminal */
.terminal{border:1px solid var(--line);border-radius:14px;background:var(--bg-2);overflow:hidden;font-family:var(--mono);font-size:13px;margin-bottom:40px;box-shadow:var(--shadow)}
.t-bar{display:flex;align-items:center;gap:8px;padding:10px 14px;background:color-mix(in srgb,var(--fg) 4%,transparent);border-bottom:1px solid var(--line)}
.t-bar i{width:11px;height:11px;border-radius:50%;background:#ff5f56}
.t-bar i:nth-child(2){background:#ffbd2e}
.t-bar i:nth-child(3){background:#27c93f}
.t-bar span{margin-left:12px;color:var(--muted);font-size:11px}
.t-body{padding:18px;min-height:180px;max-height:340px;overflow:auto;color:var(--fg-soft)}
.t-line{display:block;line-height:1.7}
.prompt{color:var(--accent);margin-right:8px}
.t-cursor{color:var(--accent);animation:blink 1s steps(2) infinite}
#term-form{display:flex;align-items:center;gap:8px;padding:10px 14px;border-top:1px solid var(--line);background:var(--card)}
#term-input{flex:1;background:transparent;border:none;outline:none;color:var(--fg);font-family:var(--mono);font-size:13px;cursor:none}

.contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.cdot{padding:18px;border:1px solid var(--line);border-radius:14px;display:flex;flex-direction:column;gap:6px;transition:.3s;background:var(--card);cursor:none}
.cdot:hover{border-color:var(--accent);transform:translateY(-3px);background:color-mix(in srgb,var(--accent) 6%,transparent)}
.cdot span{font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:.2em;text-transform:uppercase}
.cdot b{font-weight:500;font-size:15px;word-break:break-all}

/* matrix rain */
#matrix{position:fixed;inset:0;z-index:9990;background:rgba(0,0,0,.92);pointer-events:none}

/* footer */
footer{max-width:var(--max);margin:0 auto;padding:40px 6vw 60px;display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;color:var(--muted);border-top:1px solid var(--line);flex-wrap:wrap;gap:14px}
.foot-right .live{margin-right:6px}

/* animations */
@keyframes blink{50%{opacity:0}}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 currentColor;opacity:1}50%{box-shadow:0 0 10px 4px currentColor;opacity:.7}}
@keyframes drop{0%{transform:translateY(-30%);opacity:0}40%{opacity:1}100%{transform:translateY(30%);opacity:0}}
@keyframes spin{to{transform:rotate(360deg)}}

/* ============ v3.2 ADDITIONS ============ */

/* a11y skip link */
.skip-link{position:absolute;left:-9999px;top:0;padding:8px 14px;background:var(--accent);color:#000;font-family:var(--mono);font-size:12px;z-index:10000}
.skip-link:focus{left:8px;top:8px}

/* better focus visible across the site */
a:focus-visible, button:focus-visible, input:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}

/* uploaded cert logos as images */
.cert-logo img{width:100%;height:100%;object-fit:contain;padding:6px}
.cert-logo:not(.gh-logo):not(.fz-logo){background:#fff;border-radius:10px;overflow:hidden}
:root[data-theme="dark"] .cert-logo:not(.gh-logo):not(.fz-logo){background:#fff}

/* ============ Chatbot persona ============ */
#chat-fab{position:fixed;right:22px;bottom:22px;z-index:60;display:flex;align-items:center;gap:8px;padding:12px 18px;border-radius:999px;background:linear-gradient(135deg,var(--accent),var(--accent-2));color:#000;font-family:var(--mono);font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;border:0;cursor:none;box-shadow:0 10px 30px -10px var(--accent);transition:transform .2s}
#chat-fab:hover{transform:translateY(-2px)}
#chat-fab svg{stroke:#000}
#chat-panel{position:fixed;right:22px;bottom:80px;z-index:61;width:min(380px,92vw);height:min(540px,80vh);background:var(--bg-2);border:1px solid var(--line-2);border-radius:16px;display:flex;flex-direction:column;box-shadow:var(--shadow);overflow:hidden}
#chat-panel header{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:12px}
#chat-panel header button{margin-left:auto;background:transparent;border:0;color:var(--muted);font-family:var(--mono);cursor:none;font-size:14px}
#chat-log{flex:1;overflow:auto;padding:14px;display:flex;flex-direction:column;gap:10px;font-size:13.5px;line-height:1.55}
.chat-msg{padding:10px 12px;border-radius:12px;max-width:85%;white-space:pre-wrap}
.chat-msg.kb{background:var(--card-hi);border:1px solid var(--line);align-self:flex-start}
.chat-msg.usr{background:linear-gradient(135deg,var(--accent),var(--accent-3));color:#000;align-self:flex-end}
#chat-quick{display:flex;flex-wrap:wrap;gap:6px;padding:8px 14px;border-top:1px solid var(--line)}
#chat-quick button{font-family:var(--mono);font-size:10px;letter-spacing:.1em;padding:6px 10px;border-radius:999px;background:var(--card-hi);color:var(--fg);border:1px solid var(--line-2);cursor:none}
#chat-form{display:flex;border-top:1px solid var(--line)}
#chat-form input{flex:1;background:transparent;border:0;padding:12px 14px;color:var(--fg);font-family:var(--mono);font-size:13px;outline:none;cursor:none}
#chat-form button{background:var(--accent);color:#000;border:0;padding:0 18px;font-family:var(--mono);font-size:12px;font-weight:700;cursor:none}
@media (max-width:520px){#chat-panel{right:10px;left:10px;width:auto;bottom:78px}}

/* ============ Case-study modal ============ */
#case-modal, #snake-modal, #chess-modal{position:fixed;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:24px}
.case-back{position:absolute;inset:0;background:rgba(0,0,0,.6);backdrop-filter:blur(10px)}
.case-card{position:relative;background:var(--bg-2);border:1px solid var(--line-2);border-radius:18px;width:min(880px,100%);max-height:88vh;overflow:auto;padding:32px;box-shadow:var(--shadow)}
.case-close, .mini-close{position:absolute;top:14px;right:14px;background:transparent;border:1px solid var(--line);color:var(--fg);width:34px;height:34px;border-radius:50%;font-family:var(--mono);cursor:none}
.case-card h3{font-family:var(--display);letter-spacing:.06em;font-size:28px;margin-bottom:6px}
.case-card .case-tag{font-family:var(--mono);font-size:11px;color:var(--accent);letter-spacing:.2em;text-transform:uppercase;margin-bottom:14px;display:block}
.case-card h4{font-family:var(--display);font-size:14px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:22px 0 10px}
.case-card p{line-height:1.65;color:var(--fg-soft);margin-bottom:10px}
.case-card ul{padding-left:18px;line-height:1.7;color:var(--fg-soft)}
.case-card .case-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
.case-card .case-chips span{font-family:var(--mono);font-size:10px;padding:4px 10px;background:var(--card-hi);border-radius:999px;border:1px solid var(--line)}
.case-card .case-cta{margin-top:24px;display:flex;gap:10px;flex-wrap:wrap}
.case-card .case-cta a{font-family:var(--mono);font-size:12px;padding:10px 18px;border-radius:999px;border:1px solid var(--accent);color:var(--accent);transition:background .2s}
.case-card .case-cta a:hover{background:var(--accent);color:#000}

.mini-card{position:relative;background:var(--bg-2);border:1px solid var(--line-2);border-radius:18px;padding:18px;box-shadow:var(--shadow)}
.mini-card header{display:flex;align-items:center;gap:8px;padding-bottom:12px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:12px;margin-bottom:14px}
.mini-card header .mini-close{position:static;margin-left:auto}
#snake-canvas{background:#05060a;border-radius:8px;display:block}
#snake-score{margin-top:10px;font-family:var(--mono);text-align:center}

/* chess */
#chess-board{display:grid;grid-template-columns:repeat(8,40px);grid-template-rows:repeat(8,40px);border:2px solid var(--line-2)}
#chess-board .sq{display:flex;align-items:center;justify-content:center;font-size:28px;cursor:none;user-select:none;transition:background .15s}
#chess-board .sq.l{background:#e9d6b8}
#chess-board .sq.d{background:#7a5a3a}
#chess-board .sq.sel{box-shadow:inset 0 0 0 3px var(--accent)}
#chess-board .pc{color:#000}
#chess-board .pc.b{color:#111}
#chess-board .pc.w{color:#fff;text-shadow:0 1px 2px #000}

/* DOOM mode (CRT + retro shader) */
:root.doom body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:9995;background:repeating-linear-gradient(0deg,rgba(0,0,0,.18) 0 2px,transparent 2px 4px);mix-blend-mode:multiply}
:root.doom body{filter:contrast(1.15) saturate(1.4) hue-rotate(-8deg)}
:root.doom #neural{filter:hue-rotate(180deg) saturate(2)}

/* mobile orbit */
@media (max-width:780px){
  .skill-stage{height:520px}
  .skill-toolbar{flex-wrap:wrap}
  .skill-detail{order:99;width:100%;margin-top:8px}
}

/* page transition fade */
.page-fade{position:fixed;inset:0;z-index:70;background:var(--bg);opacity:0;pointer-events:none;transition:opacity .35s}
.page-fade.on{opacity:1;pointer-events:auto}

/* PDF print mode — clean printable layout */
@media print{
  #boot,#cursor,#nav,#palette,#chat-fab,#chat-panel,#case-modal,#snake-modal,#chess-modal,
  #neural,#blob,.grain,.scanlines,#matrix,
  .hero-actions,.skill-toolbar,.skill-stage,.legend,.flow-wrap,.lg-wrap,
  .scroll-hint,.frame-scan,.ph-dots,#photo-fx,.foot-right,
  .terminal,#palette-btn-2{display:none !important}
  body{cursor:auto;background:#fff;color:#000;overflow:visible}
  main{max-width:none}
  section.pad{padding:24px 32px;break-inside:avoid}
  .hero-grid{display:block}
  .photo-frame{max-width:200px;margin-bottom:18px}
  .cert{break-inside:avoid;background:#fff;border:1px solid #ccc}
  a{color:#0369a1;text-decoration:underline}
  .reveal{opacity:1 !important;transform:none !important}
}

/* fix: respect [hidden] on modal/panel containers */
#case-modal[hidden], #snake-modal[hidden], #chess-modal[hidden], #chat-panel[hidden], #palette[hidden]{display:none !important}

/* ---- v2.3 additions ---- */

/* theme transition celestial overlay */
#theme-overlay{position:fixed;inset:0;z-index:9997;pointer-events:none;overflow:hidden;opacity:0;transition:opacity .3s}
#theme-overlay.active{opacity:1}
#theme-overlay .celestial{position:absolute;border-radius:50%;filter:blur(0);transition:none}
#theme-overlay .rays{position:absolute;border-radius:50%;animation:rays-spin 1.2s linear infinite;pointer-events:none}
@keyframes rays-spin{to{transform:translate(-50%,-50%) rotate(360deg)}}
#theme-overlay .ring{position:absolute;border-radius:50%;border:2px solid;opacity:0;transform:translate(-50%,-50%) scale(0);pointer-events:none}

/* smooth colour transitions on all coloured elements when theme changes */
html.theme-switching, html.theme-switching *{
  transition:background-color .7s ease, color .7s ease, border-color .7s ease, box-shadow .7s ease, fill .7s ease, stroke .7s ease !important;
}
html.theme-switching .icon-btn, html.theme-switching .cert, html.theme-switching .proj,
html.theme-switching #nav, html.theme-switching .skill-node, html.theme-switching .skill-stage,
html.theme-switching .terminal, html.theme-switching .about-card, html.theme-switching footer,
html.theme-switching .pal-card, html.theme-switching .hero-meta, html.theme-switching .callout,
html.theme-switching .r-card, html.theme-switching .gh-card, html.theme-switching .edu-card,
html.theme-switching .cdot, html.theme-switching .kpi, html.theme-switching .quote,
html.theme-switching .photo-frame, html.theme-switching .a360-mock{
  transition:background-color .7s ease, color .7s ease, border-color .7s ease, box-shadow .7s ease !important;
}

/* location links */
.loc-link{color:var(--accent);text-decoration:none;border-bottom:1px dashed var(--accent);transition:opacity .2s}
.loc-link:hover{opacity:.7}

/* skill-node in network: attract glow for nearest */
.skill-node.nearest{transform:translate(-50%,-50%) scale(1.22) !important;z-index:11;box-shadow:0 0 36px currentColor,0 0 8px currentColor inset;border-width:2px}

/* ---- v3.0 additions ---- */

/* GLSL shader background canvas (site-wide, behind text/content) */
#shader-bg{position:fixed;inset:0;z-index:-1;width:100%;height:100%;pointer-events:none;opacity:.45}
html[data-theme="light"] #shader-bg{opacity:.22}
html.lite-mode #shader-bg{display:none}

/* hand-tracking topbar button states */
#hand-btn.active{color:var(--accent);border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 0 14px -2px var(--accent)}
#hand-btn.loading{animation:handPulse 1.2s ease-in-out infinite}
@keyframes handPulse{0%,100%{opacity:.55}50%{opacity:1}}

/* boot audio visualizer */
#boot-viz{display:block;margin:12px auto 0;opacity:.6;border-radius:4px}

/* discovery bar */
#discovery-bar{position:fixed;bottom:0;left:0;right:0;height:3px;z-index:9990;background:rgba(125,249,255,.08);cursor:pointer;transition:height .3s}
#discovery-bar:hover{height:6px}
#discovery-progress{height:100%;background:linear-gradient(90deg,var(--accent),#ff6ec7);width:0%;transition:width .6s ease}
#discovery-label{position:absolute;right:12px;top:-22px;font-size:10px;font-family:var(--mono);color:var(--muted);opacity:0;transition:opacity .3s;pointer-events:none}
#discovery-bar:hover #discovery-label{opacity:1}

/* achievements panel */
.ach-card{max-width:420px;max-height:70vh;overflow-y:auto}
#ach-list{display:grid;gap:8px;padding:12px}
.ach-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;background:rgba(125,249,255,.04);border:1px solid rgba(125,249,255,.08);font-size:13px;font-family:var(--mono);transition:all .3s}
.ach-item.unlocked{border-color:var(--accent);background:rgba(125,249,255,.08)}
.ach-item.locked{opacity:.35;filter:grayscale(1)}
.ach-icon{font-size:22px;width:32px;text-align:center;flex-shrink:0}
.ach-info{flex:1}
.ach-name{font-weight:700;color:var(--fg)}
.ach-desc{color:var(--muted);font-size:11px;margin-top:2px}
.ach-toast{position:fixed;top:20px;right:20px;z-index:9999;background:rgba(13,13,22,.95);border:1px solid var(--accent);border-radius:10px;padding:12px 18px;font-family:var(--mono);font-size:13px;color:var(--accent);display:flex;align-items:center;gap:10px;transform:translateX(120%);transition:transform .4s cubic-bezier(.175,.885,.32,1.275);pointer-events:none;backdrop-filter:blur(12px)}
.ach-toast.show{transform:translateX(0)}
.ach-toast .ach-icon{font-size:24px}

/* chatbot typing indicator */
.chat-typing{display:flex;gap:4px;padding:8px 14px;align-items:center}
.chat-typing span{width:6px;height:6px;background:var(--accent);border-radius:50%;animation:typing-bounce .6s infinite alternate}
.chat-typing span:nth-child(2){animation-delay:.15s}
.chat-typing span:nth-child(3){animation-delay:.3s}
@keyframes typing-bounce{to{opacity:.3;transform:translateY(-4px)}}

/* chess controls */
.chess-controls{display:flex;align-items:center;gap:8px;padding:8px 12px;font-family:var(--mono)}
.ch-btn{background:rgba(125,249,255,.08);border:1px solid rgba(125,249,255,.15);color:var(--fg);padding:4px 12px;border-radius:4px;cursor:pointer;font-size:12px;font-family:var(--mono);transition:all .2s}
.ch-btn:hover{background:rgba(125,249,255,.15);border-color:var(--accent)}
.ch-eval{margin-left:auto}

/* lite mode */
html.lite-mode *{animation:none !important;transition:none !important}
html.lite-mode .neural,html.lite-mode .cursor,html.lite-mode .blob{display:none !important}
html.lite-mode .photo-frame{animation:none !important}
html.lite-mode .skill-stage svg{display:none}
#lite-btn.active svg{color:var(--accent)}

/* share button feedback */
#share-btn.flash{animation:share-flash .6s}
@keyframes share-flash{0%,100%{color:var(--fg)}50%{color:#7df9ff;transform:scale(1.2)}}

/* LangGraph analysis overlay */
.lg-analysis{position:absolute;right:8px;top:8px;background:rgba(13,13,22,.85);border:1px solid rgba(125,249,255,.12);border-radius:6px;padding:8px 12px;font-size:11px;font-family:var(--mono);color:var(--muted);z-index:5;backdrop-filter:blur(8px);max-width:180px;opacity:0;transition:opacity .3s}
.lg-analysis.visible{opacity:1}
.lg-metric{display:flex;justify-content:space-between;gap:8px;margin:2px 0}
.lg-metric .val{color:var(--accent);font-weight:700}

/* hero variant B (particle field) */
#hero-particles{position:absolute;inset:0;pointer-events:none;z-index:0}
.hero-grid{position:relative;z-index:1}

/* hand tracking indicator */
#hand-indicator{position:fixed;width:34px;height:34px;border-radius:50%;border:2px solid var(--accent);background:rgba(125,249,255,.18);pointer-events:none;z-index:9998;transform:translate(-50%,-50%);display:none;transition:left .06s linear,top .06s linear,transform .15s,background .15s}
#hand-indicator .hand-dot{position:absolute;top:50%;left:50%;width:6px;height:6px;border-radius:50%;background:var(--accent);transform:translate(-50%,-50%);box-shadow:0 0 12px var(--accent)}
#hand-indicator .hand-trail{position:absolute;inset:-10px;border-radius:50%;border:1px dashed var(--accent);opacity:.4;animation:handRot 3s linear infinite}
#hand-indicator .hand-mode{position:absolute;top:38px;left:50%;transform:translateX(-50%);font-family:var(--mono,monospace);font-size:9px;letter-spacing:.25em;color:var(--accent);text-shadow:0 0 6px var(--accent);background:rgba(0,0,0,.55);padding:2px 8px;border-radius:999px;border:1px solid var(--accent);white-space:nowrap}
#hand-indicator.pinch{background:rgba(255,110,199,.45);border-color:#ff6ec7;transform:translate(-50%,-50%) scale(.7)}
#hand-indicator.pinch .hand-dot{background:#ff6ec7;box-shadow:0 0 16px #ff6ec7}
#hand-indicator.scroll{border-color:#a78bfa;background:rgba(167,139,250,.18);transform:translate(-50%,-50%) scale(1.2)}
#hand-indicator.scroll .hand-dot{background:#a78bfa;box-shadow:0 0 14px #a78bfa}
#hand-indicator.flash{box-shadow:0 0 0 20px rgba(255,110,199,0);transition:box-shadow .22s;box-shadow:0 0 0 0 rgba(255,110,199,.7)}
@keyframes handRot{to{transform:rotate(360deg)}}

/* hand webcam preview */
.hand-vid{position:fixed;bottom:18px;right:18px;width:200px;height:150px;border-radius:14px;border:1px solid var(--accent);z-index:9999;transform:scaleX(-1);opacity:.85;box-shadow:0 12px 40px rgba(0,0,0,.5),0 0 0 1px rgba(125,249,255,.3),inset 0 0 30px rgba(125,249,255,.08);background:#000}
.hand-vid::before{content:"";position:absolute;inset:0;pointer-events:none;border-radius:14px;background:radial-gradient(circle,transparent 35%,rgba(125,249,255,.18) 70%,transparent 75%) center/100% 100% no-repeat}
.hand-vid-in{animation:handVidIn .55s cubic-bezier(.2,.9,.3,1.4) both}
.hand-vid-out{animation:handVidOut .35s ease-in both}
@keyframes handVidIn{from{opacity:0;transform:scaleX(-1) scale(.6) translateY(40px)}to{opacity:.85;transform:scaleX(-1) scale(1) translateY(0)}}
@keyframes handVidOut{to{opacity:0;transform:scaleX(-1) scale(.6) translateY(40px)}}

/* hand activation drama overlay */
.hand-drama{position:fixed;inset:0;z-index:9990;display:flex;align-items:center;justify-content:center;flex-direction:column;background:radial-gradient(ellipse at center,rgba(0,30,40,.55),rgba(0,0,0,.85));opacity:0;backdrop-filter:blur(8px);pointer-events:none;transition:opacity .35s ease}
.hand-drama.show{opacity:1}
.hand-drama.done{opacity:0;transition:opacity .6s ease}
.hand-drama.fail{background:radial-gradient(ellipse at center,rgba(60,0,30,.55),rgba(0,0,0,.85))}
.hand-drama .hd-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(125,249,255,.12) 1px,transparent 1px),linear-gradient(90deg,rgba(125,249,255,.12) 1px,transparent 1px);background-size:48px 48px;mask-image:radial-gradient(ellipse at center,#000 30%,transparent 75%);animation:gridDrift 8s linear infinite}
.hand-drama.fail .hd-grid{background-image:linear-gradient(rgba(255,110,199,.18) 1px,transparent 1px),linear-gradient(90deg,rgba(255,110,199,.18) 1px,transparent 1px)}
@keyframes gridDrift{to{background-position:48px 48px,48px 48px}}
.hand-drama .hd-scan{position:absolute;left:0;right:0;height:140px;background:linear-gradient(180deg,transparent,rgba(125,249,255,.18),transparent);animation:hdScan 1.6s ease-in-out infinite}
@keyframes hdScan{0%{top:-140px}100%{top:100%}}
.hand-drama .hd-hand{color:var(--accent,#7df9ff);filter:drop-shadow(0 0 18px var(--accent,#7df9ff));margin-bottom:18px}
.hand-drama.fail .hd-hand{color:#ff6ec7;filter:drop-shadow(0 0 18px #ff6ec7)}
.hand-drama .hd-hand path{stroke-dasharray:600;stroke-dashoffset:600;animation:hdDraw 1.1s ease forwards}
.hand-drama .hd-hand .hd-l2{animation-delay:.1s}
.hand-drama .hd-hand .hd-l3{animation-delay:.2s}
.hand-drama .hd-hand .hd-l4{animation-delay:.3s}
.hand-drama .hd-hand .hd-l5{animation-delay:.4s}
.hand-drama .hd-hand .hd-pt{animation:hdPulse 1s ease-in-out .9s infinite}
@keyframes hdDraw{to{stroke-dashoffset:0}}
@keyframes hdPulse{0%,100%{r:0;opacity:0}50%{r:6;opacity:1}}
.hand-drama .hd-label{font-family:var(--mono,monospace);font-size:14px;letter-spacing:.4em;text-transform:uppercase;color:var(--accent,#7df9ff);text-shadow:0 0 10px var(--accent,#7df9ff);margin-bottom:24px;animation:hdLabel 1.5s ease-in-out infinite}
.hand-drama.fail .hd-label{color:#ff6ec7;text-shadow:0 0 10px #ff6ec7}
@keyframes hdLabel{0%,100%{opacity:.6}50%{opacity:1}}
.hand-drama .hd-corners{position:absolute;inset:40px;pointer-events:none}
.hand-drama .hd-corners i{position:absolute;width:30px;height:30px;border:2px solid var(--accent,#7df9ff)}
.hand-drama.fail .hd-corners i{border-color:#ff6ec7}
.hand-drama .hd-corners i:nth-child(1){top:0;left:0;border-right:0;border-bottom:0}
.hand-drama .hd-corners i:nth-child(2){top:0;right:0;border-left:0;border-bottom:0}
.hand-drama .hd-corners i:nth-child(3){bottom:0;left:0;border-right:0;border-top:0}
.hand-drama .hd-corners i:nth-child(4){bottom:0;right:0;border-left:0;border-top:0}
.hand-drama .hd-readout{font-family:var(--mono,monospace);font-size:11px;color:rgba(125,249,255,.7);line-height:1.9;text-align:left;min-width:320px}
.hand-drama .hd-readout .hd-row{opacity:0;animation:hdRow .4s ease forwards}
.hand-drama .hd-readout .hd-row:nth-child(1){animation-delay:.15s}
.hand-drama .hd-readout .hd-row:nth-child(2){animation-delay:.45s}
.hand-drama .hd-readout .hd-row:nth-child(3){animation-delay:.75s}
.hand-drama .hd-readout .hd-row:nth-child(4){animation-delay:1.05s}
.hand-drama .hd-readout .hd-err{color:#ff6ec7}
@keyframes hdRow{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:none}}

/* 3D constellation container */
#skill-3d{position:absolute;inset:0;z-index:0;border-radius:12px;overflow:hidden}
.skill-3d-loading{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--muted);font-family:var(--mono,monospace);z-index:2}
.skill-3d-loading .s3d-spinner{width:48px;height:48px;border-radius:50%;border:2px solid rgba(125,249,255,.15);border-top-color:var(--accent);animation:s3dSpin .9s linear infinite}
@keyframes s3dSpin{to{transform:rotate(360deg)}}
.skill-3d-loading .s3d-text{font-size:13px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin-top:6px}
.skill-3d-loading .s3d-sub{font-size:11px;color:var(--muted);letter-spacing:.1em}
.skill-3d-err{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:18px;padding:24px;color:var(--muted);font-family:var(--mono,monospace);font-size:13px;text-align:left}
.skill-3d-err .s3d-err-icon{color:#ff6ec7;flex:none}
.skill-3d-err b{color:var(--fg);display:block;margin-bottom:6px;font-size:14px}
.skill-3d-err span{color:var(--muted);font-size:12px}
.skill-stage{position:relative}

/* view-transition morphing */
::view-transition-old(root),::view-transition-new(root){animation-duration:.35s;animation-timing-function:cubic-bezier(.4,0,.2,1)}

/* ==================== v3.2: SCROLL TRACKER (bottom bar, no bulb, low halo) ==================== */
#scroll-track{position:fixed;left:0;right:0;bottom:0;height:3px;z-index:9997;background:transparent;pointer-events:none}
[data-theme=light] #scroll-track{background:transparent}
#scroll-track .st-fill{height:100%;width:0;background:linear-gradient(90deg,var(--accent) 0%,#ff6ec7 50%,#a78bfa 100%);box-shadow:0 0 4px rgba(125,249,255,.35);transition:width .15s linear}

/* Circular % badge — bottom-left so it doesn't overlap chat-fab on the right */
#scroll-pct{position:fixed;left:18px;bottom:18px;width:46px;height:46px;border-radius:50%;background:rgba(0,0,0,.55);backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:60;opacity:0;transform:translateY(20px) scale(.8);transition:opacity .3s ease,transform .3s cubic-bezier(.2,.9,.3,1.4);border:1px solid rgba(125,249,255,.25);box-shadow:0 4px 12px rgba(0,0,0,.3)}
[data-theme=light] #scroll-pct{background:rgba(255,255,255,.85);border-color:rgba(125,180,200,.5);box-shadow:0 4px 12px rgba(0,0,0,.12)}
#scroll-pct.show{opacity:1;transform:translateY(0) scale(1)}
#scroll-pct:hover{transform:translateY(0) scale(1.08);box-shadow:0 6px 18px rgba(125,249,255,.3)}
#scroll-pct svg{position:absolute;inset:0;width:100%;height:100%}
#scroll-pct .sp-bg{stroke:rgba(125,249,255,.15)}
#scroll-pct .sp-fg{stroke:var(--accent);transition:stroke-dashoffset .15s linear}
#scroll-pct .sp-val{font-family:var(--mono,monospace);font-size:9.5px;font-weight:700;color:var(--accent);letter-spacing:.05em;z-index:1;position:relative}
#scroll-pct.top .sp-fg{stroke:#ff6ec7}
#scroll-pct.top .sp-val{color:#ff6ec7}
@media(max-width:700px){
  #scroll-pct{left:12px;bottom:54px;width:42px;height:42px}
  #scroll-pct .sp-val{font-size:9px}
}

/* ==================== v3.2: NAV LOCK during theme switch ==================== */
html.theme-switching #nav{transform:none !important;filter:none !important;opacity:1 !important;transition:none !important}
html.theme-switching #nav *{transform:none !important;filter:none !important}

/* shatter-char spans must allow transforms */
.shatter-char{display:inline-block;will-change:transform,opacity}

/* ==================== v3.1: HAND HELP PANEL ==================== */
#hand-help{position:fixed;left:18px;top:50%;transform:translateY(-50%) translateX(-130%);width:280px;background:rgba(0,0,0,.78);backdrop-filter:blur(14px);border:1px solid rgba(125,249,255,.3);border-radius:14px;padding:14px 16px;z-index:9995;font-family:var(--mono,monospace);font-size:11px;color:var(--fg);box-shadow:0 16px 40px rgba(0,0,0,.5),inset 0 0 30px rgba(125,249,255,.04);transition:transform .5s cubic-bezier(.2,.9,.3,1.4),opacity .4s ease;opacity:0;pointer-events:none}
[data-theme=light] #hand-help{background:rgba(255,255,255,.92);color:#222;border-color:rgba(125,180,200,.6)}
#hand-help.show{transform:translateY(-50%) translateX(0);opacity:1;pointer-events:auto}
#hand-help.hidden{display:none}
#hand-help .hh-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid rgba(125,249,255,.18)}
#hand-help .hh-dot{width:8px;height:8px;border-radius:50%;background:#00ff88;box-shadow:0 0 8px #00ff88;animation:hhPulse 1.5s ease-in-out infinite}
@keyframes hhPulse{0%,100%{opacity:.5}50%{opacity:1}}
#hand-help b{font-size:12px;letter-spacing:.18em;color:var(--accent);text-transform:uppercase;flex:1}
#hand-help .hh-x{background:transparent;border:1px solid rgba(125,249,255,.3);color:var(--accent);width:22px;height:22px;border-radius:50%;cursor:pointer;font-size:14px;line-height:1;padding:0;display:flex;align-items:center;justify-content:center}
#hand-help .hh-x:hover{background:rgba(125,249,255,.15)}
#hand-help .hh-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
#hand-help .hh-list li{display:flex;align-items:center;gap:10px;line-height:1.4}
#hand-help .hh-key{display:inline-block;min-width:56px;text-align:center;padding:3px 8px;background:rgba(125,249,255,.12);border:1px solid rgba(125,249,255,.35);border-radius:4px;font-weight:700;font-size:9px;letter-spacing:.15em;color:var(--accent)}
#hand-help .hh-list li:nth-child(2) .hh-key{background:rgba(255,110,199,.12);border-color:rgba(255,110,199,.4);color:#ff6ec7}
#hand-help .hh-list li:nth-child(3) .hh-key{background:rgba(167,139,250,.12);border-color:rgba(167,139,250,.4);color:#a78bfa}
#hand-help .hh-list li:nth-child(4) .hh-key{background:rgba(251,191,36,.12);border-color:rgba(251,191,36,.4);color:#fbbf24}
#hand-help .hh-foot{margin-top:10px;padding-top:8px;border-top:1px solid rgba(125,249,255,.12);font-size:10px;color:var(--muted);font-style:italic;text-align:center}
@media(max-width:700px){
  #hand-help{left:10px;right:10px;width:auto;top:auto;bottom:90px;transform:translateY(150%);max-width:none}
  #hand-help.show{transform:translateY(0)}
}

/* ==================== v3.1: CELESTIAL WRAP (theme switch) ==================== */
.celestial-wrap{position:absolute;transform:translate(-50%,-50%);pointer-events:none;display:flex;align-items:center;justify-content:center;will-change:transform,width,height}
.celestial-svg{display:block;overflow:visible}

/* responsive adjustments for new elements */
@media(max-width:700px){
  #discovery-bar{height:2px}
  .ach-toast{top:auto;bottom:70px;right:10px;left:10px;transform:translateY(120%)}
  .ach-toast.show{transform:translateY(0)}
  .lg-analysis{display:none}
  .chess-controls{flex-wrap:wrap}
}

/* === v3.2: 3D Skills HUD === */
.s3d-hud{position:absolute;top:12px;right:12px;display:flex;gap:8px;align-items:center;z-index:5;pointer-events:none}
.s3d-hud .s3d-btn{pointer-events:auto;width:36px;height:36px;border-radius:8px;border:1px solid color-mix(in srgb,var(--accent) 50%,transparent);background:color-mix(in srgb,var(--bg) 70%,transparent);backdrop-filter:blur(8px);color:var(--accent);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:.2s;padding:0}
.s3d-hud .s3d-btn:hover{background:color-mix(in srgb,var(--accent) 18%,var(--bg));transform:translateY(-1px);box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 30%,transparent)}
.s3d-hud .s3d-btn.active{background:color-mix(in srgb,var(--accent) 28%,var(--bg));color:#fff}
.s3d-hud .s3d-btn.loading{opacity:.5;pointer-events:none}
.s3d-hud .s3d-hint{pointer-events:none;font-family:var(--mono);font-size:10px;color:var(--muted);letter-spacing:.12em;text-transform:uppercase;background:color-mix(in srgb,var(--bg) 70%,transparent);padding:6px 10px;border-radius:6px;border:1px solid var(--line);margin-right:4px}
#skill-3d:fullscreen{background:#000}
#skill-3d:fullscreen .s3d-hud{top:20px;right:20px}
@media (max-width:640px){
  .s3d-hud .s3d-hint{display:none}
}

/* === v3.2: 3D skill hand-gesture state indicators === */
.s3d-hud .s3d-btn.gesture-orbit{background:color-mix(in srgb,#7df9ff 40%,var(--bg));color:#fff;box-shadow:0 0 18px rgba(125,249,255,.6)}
.s3d-hud .s3d-btn.gesture-zoom{background:color-mix(in srgb,#ff6ec7 40%,var(--bg));color:#fff;box-shadow:0 0 18px rgba(255,110,199,.6)}

/* === v3.2: cert copy-id button === */
.cert{position:relative}
.cert-copy{position:absolute;top:14px;right:14px;display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);background:color-mix(in srgb,var(--bg) 75%,transparent);backdrop-filter:blur(6px);color:var(--accent);font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:lowercase;cursor:pointer;opacity:.0;transform:translateY(-4px);transition:opacity .2s ease,transform .2s ease,background .2s ease;z-index:3}
.cert:hover .cert-copy,.cert:focus-within .cert-copy{opacity:1;transform:translateY(0)}
.cert-copy:hover{background:color-mix(in srgb,var(--accent) 18%,var(--bg));box-shadow:0 4px 12px color-mix(in srgb,var(--accent) 30%,transparent)}
.cert-copy.copied{background:color-mix(in srgb,#22c55e 30%,var(--bg));border-color:#22c55e;color:#fff}
.cert-copy svg{flex:0 0 auto}
@media (max-width:640px){
  .cert-copy{opacity:1;transform:none;top:10px;right:10px;padding:5px 8px;font-size:10px}
}
