/* ═══════════════════════════════════════════════════
   Delwar Alam — personal site
   ═══════════════════════════════════════════════════ */

/* ─────────── tokens ─────────── */
:root{
  --bg:#06070A;
  --bg-alt:#0A0C11;
  --surface:rgba(255,255,255,.032);
  --surface-2:rgba(255,255,255,.055);
  --glass:rgba(14,17,22,.62);
  --line:rgba(255,255,255,.085);
  --line-strong:rgba(255,255,255,.17);
  --tx:#EDF0F3;
  --tx-dim:#9BA4AE;
  --tx-faint:#7B838F;
  --accent:#2DD4A7;
  --accent-2:#8B7CFF;
  --accent-3:#4CC9F0;
  --accent-soft:rgba(45,212,167,.12);
  --accent-ink:#2DD4A7;
  --on-accent:#04120E;
  --shadow:0 30px 70px -24px rgba(0,0,0,.8);
  --shadow-sm:0 12px 30px -14px rgba(0,0,0,.7);

  --wrap:1220px;
  --r:16px;
  --r-lg:24px;
  --ease:cubic-bezier(.22,1,.36,1);

  --f-disp:'Space Grotesk',system-ui,sans-serif;
  --f-sans:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  --f-mono:'JetBrains Mono',ui-monospace,'SF Mono',Menlo,monospace;

  color-scheme:dark;
}

[data-theme="light"]{
  --bg:#FAFAF8;
  --bg-alt:#F1F2EF;
  --surface:rgba(11,12,14,.025);
  --surface-2:rgba(11,12,14,.05);
  --glass:rgba(255,255,255,.72);
  --line:rgba(11,12,14,.1);
  --line-strong:rgba(11,12,14,.2);
  --tx:#0D1014;
  --tx-dim:#4B535B;
  --tx-faint:#616970;
  --accent:#0E9E77;
  --accent-2:#5B4FD6;
  --accent-3:#1583B4;
  --accent-soft:rgba(14,158,119,.1);
  --accent-ink:#0A7256;
  --on-accent:#04231B;
  --shadow:0 30px 70px -28px rgba(16,19,23,.28);
  --shadow-sm:0 12px 30px -16px rgba(16,19,23,.22);
  color-scheme:light;
}

/* ─────────── reset ─────────── */
*,*::before,*::after{box-sizing:border-box}
*{margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  font-family:var(--f-sans);background:var(--bg);color:var(--tx);
  line-height:1.65;-webkit-font-smoothing:antialiased;overflow-x:hidden;
  transition:background .45s var(--ease),color .45s var(--ease);
}
img{max-width:100%;display:block;height:auto}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
ul,ol{list-style:none}
code{font-family:var(--f-mono);font-size:.9em;color:var(--accent-ink)}
::selection{background:var(--accent);color:var(--on-accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:8px}

.sprite{position:absolute;width:0;height:0;overflow:hidden}
svg:not(.sprite):not(.netfield):not(.radar-svg):not(#globe):not(.boot__mark){
  width:1em;height:1em;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;
}
.mono{font-family:var(--f-mono);font-variant-ligatures:none}
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:24px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

.skip-link{position:fixed;top:-100px;left:16px;z-index:200;background:var(--accent);color:var(--on-accent);padding:10px 16px;border-radius:8px;font-weight:600}
.skip-link:focus{top:16px}

/* film grain */
.grain{
  position:fixed;inset:0;z-index:150;pointer-events:none;opacity:.04;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}
[data-theme="light"] .grain{opacity:.05;mix-blend-mode:multiply}

.scroll-progress{
  position:fixed;inset:0 auto auto 0;height:2px;width:0%;z-index:160;
  background:linear-gradient(90deg,var(--accent),var(--accent-3),var(--accent-2));
  box-shadow:0 0 14px color-mix(in srgb,var(--accent) 60%,transparent);
  transition:width .1s linear;
}

/* ─────────── nav ─────────── */
.nav{position:fixed;top:0;left:0;right:0;z-index:100;border-bottom:1px solid transparent;transition:.4s var(--ease)}
.nav.is-stuck{
  background:var(--glass);backdrop-filter:blur(20px) saturate(170%);
  -webkit-backdrop-filter:blur(20px) saturate(170%);border-bottom-color:var(--line);
}
.nav__inner{display:flex;align-items:center;gap:24px;height:74px}

.brand{display:flex;align-items:center;gap:12px;font-weight:600;letter-spacing:-.015em}
.brand__mark{width:38px;height:38px;flex:none}
.brand__mark svg{width:38px;height:38px;overflow:visible}
.brand__shield{fill:none;stroke:url(#gGrad);stroke-width:2.4;stroke-linejoin:round}
.brand__mark text{font-family:var(--f-mono);font-size:11px;font-weight:700;fill:var(--tx);stroke:none;letter-spacing:-.02em}
.brand__name{font-family:var(--f-disp);font-size:15px}

.nav__links{display:flex;gap:2px;margin-left:auto}
.nav__links a{
  position:relative;display:flex;align-items:center;gap:7px;
  padding:8px 16px;border-radius:999px;font-size:14px;color:var(--tx-dim);
  transition:color .25s,background .25s;
}
.nav__links a span{font-size:10px;opacity:.5;letter-spacing:.06em}
.nav__links a:hover{color:var(--tx);background:var(--surface)}
.nav__links a.is-active{color:var(--accent-ink)}
.nav__links a.is-active span{opacity:.9}

.nav__actions{display:flex;align-items:center;gap:10px}
.nav__links + .nav__actions{margin-left:0}
.nav:not(:has(.nav__links)) .nav__actions{margin-left:auto}

.icon-btn{
  display:grid;place-items:center;width:40px;height:40px;border-radius:12px;
  border:1px solid var(--line);color:var(--tx-dim);background:var(--surface);transition:.25s var(--ease);
}
.icon-btn:hover{color:var(--accent-ink);border-color:var(--line-strong);transform:translateY(-1px)}
.icon-btn svg{font-size:17px}
.icon-moon{display:none}
[data-theme="light"] .icon-sun{display:none}
[data-theme="light"] .icon-moon{display:block}

.burger{display:none;width:40px;height:40px;border-radius:12px;border:1px solid var(--line);background:var(--surface);
  flex-direction:column;align-items:center;justify-content:center;gap:5px}
.burger span{display:block;width:16px;height:1.6px;background:var(--tx);border-radius:2px;transition:.3s var(--ease)}
.burger[aria-expanded="true"] span:first-child{transform:translateY(3.3px) rotate(45deg)}
.burger[aria-expanded="true"] span:last-child{transform:translateY(-3.3px) rotate(-45deg)}

/* ─────────── buttons ─────────── */
.btn{
  position:relative;display:inline-flex;align-items:center;gap:8px;
  padding:14px 24px;border-radius:12px;font-size:15px;font-weight:600;
  letter-spacing:-.012em;transition:.3s var(--ease);white-space:nowrap;overflow:hidden;
}
.btn svg{font-size:17px;transition:transform .3s var(--ease)}
.btn--primary{
  background:linear-gradient(120deg,var(--accent),var(--accent-3) 55%,var(--accent-2));
  background-size:200% 100%;color:var(--on-accent);
  box-shadow:0 10px 30px -10px color-mix(in srgb,var(--accent) 60%,transparent);
}
.btn--primary:hover{background-position:100% 0;transform:translateY(-2px);
  box-shadow:0 18px 40px -12px color-mix(in srgb,var(--accent) 70%,transparent)}
.btn--ghost{border:1px solid var(--line-strong);color:var(--tx);background:var(--surface)}
.btn--ghost:hover{border-color:var(--accent-ink);color:var(--accent-ink);transform:translateY(-2px)}
.btn:hover svg:last-child{transform:translateX(3px)}
.btn--sm{padding:8px 16px;font-size:13px;border-radius:12px}
.btn--sm svg{font-size:15px}
.btn--lg{padding:16px 32px;font-size:16px}

/* ─────────── hero ─────────── */
.hero{position:relative;padding:152px 0 50px;overflow:hidden;isolation:isolate}
.netfield{position:absolute;inset:0;width:100%;height:100%;z-index:-2;opacity:.7}
.netfield line{stroke:var(--accent);stroke-width:.6}
.netfield circle{fill:var(--accent)}
.mesh{
  position:absolute;top:-360px;left:50%;transform:translateX(-52%);
  width:1250px;height:900px;z-index:-3;pointer-events:none;filter:blur(40px);opacity:.8;
  background:
    radial-gradient(closest-side,color-mix(in srgb,var(--accent) 26%,transparent),transparent) 24% 42%/62% 62% no-repeat,
    radial-gradient(closest-side,color-mix(in srgb,var(--accent-3) 22%,transparent),transparent) 55% 22%/55% 55% no-repeat,
    radial-gradient(closest-side,color-mix(in srgb,var(--accent-2) 24%,transparent),transparent) 78% 46%/58% 58% no-repeat;
  animation:drift 22s ease-in-out infinite alternate;
}
@keyframes drift{
  0%{transform:translateX(-52%) scale(1) rotate(0deg)}
  100%{transform:translateX(-48%) scale(1.12) rotate(8deg)}
}
.grid-bg{
  position:absolute;inset:0;z-index:-1;pointer-events:none;
  background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);
  background-size:68px 68px;
  mask-image:radial-gradient(ellipse 88% 62% at 50% 0%,#000 18%,transparent 74%);
  -webkit-mask-image:radial-gradient(ellipse 88% 62% at 50% 0%,#000 18%,transparent 74%);
  opacity:.55;
}
.hero__inner{position:relative;display:grid;grid-template-columns:1.12fr .88fr;gap:72px;align-items:center}

.eyebrow{
  display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:500;
  color:var(--tx-dim);padding:7px 16px 7px 12px;border:1px solid var(--line);
  border-radius:999px;background:var(--surface);backdrop-filter:blur(8px);margin-bottom:28px;
}
.pulse-dot{position:relative;width:7px;height:7px;border-radius:50%;background:var(--accent);flex:none}
.pulse-dot::after{content:'';position:absolute;inset:-4px;border-radius:50%;background:var(--accent);opacity:.35;animation:pulse 2.4s var(--ease) infinite}
@keyframes pulse{0%{transform:scale(.6);opacity:.5}70%,100%{transform:scale(1.9);opacity:0}}

.hero__title{
  font-family:var(--f-disp);font-size:clamp(3.3rem,8.6vw,6.6rem);
  line-height:.94;font-weight:700;letter-spacing:-.04em;margin-bottom:20px;
}
.hero__title .ch{display:inline-block;will-change:transform,opacity}
.hero__title .grad{display:inline-block}
.js .hero__title[data-split] .ch{opacity:0;transform:translateY(.42em) rotate(2.5deg)}
.js .hero__title.is-in[data-split] .ch{
  opacity:1;transform:none;
  transition:opacity .6s var(--ease),transform .7s var(--ease);
  transition-delay:calc(var(--i) * 110ms);
}
.grad{
  background:linear-gradient(104deg,var(--accent) 0%,var(--accent-3) 48%,var(--accent-2) 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
/* section headings: one solid accent word, not a rainbow on every h2 */
.sec-head h2 .grad{background:none;-webkit-background-clip:border-box;background-clip:border-box;color:var(--accent-ink)}

.hero__role{
  display:flex;align-items:center;gap:8px;font-family:var(--f-mono);
  font-size:clamp(.92rem,1.7vw,1.08rem);color:var(--tx);margin-bottom:24px;min-height:1.7em;
}
.hero__role .prompt{color:var(--accent-ink)}
.caret{display:inline-block;width:9px;height:1.15em;background:var(--accent);animation:blink 1.05s steps(1) infinite}
@keyframes blink{0%,49%{opacity:1}50%,100%{opacity:0}}

.hero__lede{font-size:16px;color:var(--tx-dim);max-width:56ch;margin-bottom:36px}
.hero__cta{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:40px}

/* credential badges */
.creds{display:flex;flex-wrap:wrap;gap:10px}
.cred{
  display:flex;align-items:center;gap:12px;padding:10px 16px 10px 12px;
  border:1px solid var(--line);border-radius:14px;background:var(--surface);
  backdrop-filter:blur(8px);transition:.3s var(--ease);
}
.cred:hover{border-color:var(--line-strong);transform:translateY(-2px);background:var(--surface-2)}
.cred__badge{width:30px!important;height:30px!important;flex:none;overflow:visible}
.cred__ring{fill:none;stroke:url(#gGrad);stroke-width:3.4;stroke-linejoin:round}
.cred__glyph{fill:none;stroke:var(--accent);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}
.cred span{display:flex;flex-direction:column;line-height:1.3}
.cred strong{font-family:var(--f-disp);font-size:14px;font-weight:600;letter-spacing:-.01em}
.cred span{font-size:11px;color:var(--tx-faint);font-family:var(--f-mono)}

/* portrait */
.hero__media{position:relative;display:grid;place-items:center}
.orbit{position:absolute;inset:-10% -6%;z-index:0;pointer-events:none}
.orbit svg{width:100%;height:100%;overflow:visible}
.orbit circle{fill:none}
.orbit__r1{stroke:var(--line-strong);stroke-width:1;stroke-dasharray:2 9;
  transform-origin:50% 50%;animation:spin 60s linear infinite}
.orbit__r2{stroke:var(--line);stroke-width:1;stroke-dasharray:60 22;
  transform-origin:50% 50%;animation:spin 46s linear infinite reverse}
.orbit__dot{fill:var(--accent);transform-origin:50% 50%;animation:spin 18s linear infinite}
.orbit__dot2{fill:var(--accent-2);transform-origin:50% 50%;animation:spin 26s linear infinite reverse}
@keyframes spin{to{transform:rotate(360deg)}}

.portrait{
  position:relative;z-index:1;width:100%;border-radius:var(--r-lg);overflow:hidden;
  box-shadow:var(--shadow);
  border:1px solid var(--line-strong);
}
.portrait img{width:100%;filter:saturate(1.02) contrast(1.04)}
.portrait::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  /* settle the bright studio backdrop into the page without tinting the subject */
  background:
    linear-gradient(180deg,transparent 48%,color-mix(in srgb,var(--bg) 92%,transparent)),
    radial-gradient(125% 95% at 50% 34%,transparent 46%,
                    color-mix(in srgb,var(--bg) 62%,transparent) 100%);
}
[data-theme="light"] .portrait::after{
  background:linear-gradient(180deg,transparent 58%,color-mix(in srgb,var(--bg) 85%,transparent));
}
.reticle{
  position:absolute!important;inset:12px;width:auto!important;height:auto!important;
  z-index:2;stroke:var(--accent);stroke-width:.7;fill:none;opacity:.75;
  vector-effect:non-scaling-stroke;
}
.scanline{
  position:absolute;left:0;right:0;height:120px;z-index:2;pointer-events:none;
  background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--accent) 16%,transparent),transparent);
  animation:scan 5.5s var(--ease) infinite;
}
@keyframes scan{0%{top:-120px}55%,100%{top:100%}}

.glasscard{
  position:absolute;z-index:3;display:flex;align-items:center;gap:12px;
  padding:12px 16px;border-radius:14px;white-space:nowrap;
  background:color-mix(in srgb,var(--bg) 88%,transparent);
  border:1px solid var(--line-strong);
  backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);
  box-shadow:var(--shadow),0 0 0 1px rgba(0,0,0,.18);
  animation:bob 6.5s ease-in-out infinite;
}
.glasscard svg{font-size:19px;color:var(--accent-ink);flex:none}
.glasscard span{display:flex;flex-direction:column;line-height:1.25;font-size:11px;
  color:var(--tx-faint);font-family:var(--f-mono);letter-spacing:.02em}
.glasscard strong{font-family:var(--f-disp);font-size:17px;color:var(--tx);letter-spacing:-.02em}
.glasscard--a{top:15%;left:-58px}
.glasscard--b{bottom:13%;right:-52px;animation-delay:-3.2s}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}

/* stats */
.stats{
  position:relative;display:grid;grid-template-columns:repeat(4,1fr);gap:1px;
  margin-top:88px;background:var(--line);border:1px solid var(--line);
  border-radius:var(--r-lg);overflow:hidden;
}
.stats li{background:var(--bg);padding:28px 24px;display:flex;flex-direction:column;gap:5px;
  transition:background .3s var(--ease)}
.stats li:hover{background:var(--surface)}
.stats__i{font-size:20px!important;color:var(--accent-ink);margin-bottom:6px}
.stats__n{font-family:var(--f-disp);font-size:clamp(2rem,4vw,2.7rem);font-weight:700;
  letter-spacing:-.04em;line-height:1;
  background:linear-gradient(120deg,var(--accent),var(--accent-3));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.stats__l{font-size:13px;color:var(--tx-dim)}

/* light-mode surface depth + softer node field */
[data-theme="light"] .netfield{opacity:.32}
[data-theme="light"] .tag--journal{color:#0F6489}
[data-theme="light"] .tag--book{color:#4A3FBF}
[data-theme="light"] .card,
[data-theme="light"] .bento__cell,
[data-theme="light"] .ccard,
[data-theme="light"] .cred,
[data-theme="light"] .globe,
[data-theme="light"] .chip,
[data-theme="light"] .icon-btn,
[data-theme="light"] .burger,
[data-theme="light"] .btn--ghost{
  background:#fff;
  box-shadow:0 1px 2px rgba(16,19,23,.05),0 8px 20px -14px rgba(16,19,23,.18);
}
[data-theme="light"] .chip.is-on{background:var(--accent)}
[data-theme="light"] .stats li{background:#fff}
[data-theme="light"] .pub{background:#fff}
[data-theme="light"] .pub:hover{background:#FAFAF8}

/* ─────────── marquee ─────────── */
.marquee{
  overflow:hidden;border-block:1px solid var(--line);
  background:var(--bg-alt);padding:16px 0;
  mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
}
.marquee__track{display:flex;align-items:center;gap:24px;width:max-content;
  animation:slide 42s linear infinite}
.marquee span{font-family:var(--f-mono);font-size:12px;color:var(--tx-faint);letter-spacing:.02em;white-space:nowrap}
.marquee i{color:var(--accent-ink);font-size:8px;font-style:normal}
@keyframes slide{to{transform:translateX(-50%)}}

/* ─────────── sections ─────────── */
.section{position:relative;padding:120px 0}
.section--alt{background:var(--bg-alt);border-block:1px solid var(--line)}
.section--contact{padding:128px 0 138px;overflow:hidden;isolation:isolate}

/* circuit trace divider */
.trace{
  position:absolute;top:-1px;left:0;right:0;height:2px;pointer-events:none;
  background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 55%,transparent) 22%,
             color-mix(in srgb,var(--accent-2) 55%,transparent) 62%,transparent);
  opacity:.65;
}

.sec-head{margin-bottom:60px;max-width:820px}
.kicker{display:flex;align-items:center;gap:12px;margin-bottom:18px}
.kicker__line{display:block;width:34px;height:1px;background:linear-gradient(90deg,var(--accent),transparent);flex:none}
.kicker span{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-ink)}
.sec-head h2,.contact h2{
  font-family:var(--f-disp);font-size:clamp(2rem,4.6vw,3.35rem);
  font-weight:700;letter-spacing:-.035em;line-height:1.08;
}
.sec-sub{margin-top:20px;color:var(--tx-dim);font-size:16px;max-width:62ch}

/* spotlight-on-hover surface */
.spot{position:relative;isolation:isolate}
.spot::before{
  content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;opacity:0;
  transition:opacity .4s var(--ease);
  background:radial-gradient(320px circle at var(--mx,50%) var(--my,50%),
             color-mix(in srgb,var(--accent) 13%,transparent),transparent 62%);
}
.spot:hover::before{opacity:1}

/* ─────────── bento (about) ─────────── */
.bento{display:grid;grid-template-columns:repeat(12,1fr);gap:16px}
.bento__cell{
  position:relative;border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--surface);padding:32px 30px;overflow:hidden;
  transition:border-color .35s var(--ease),transform .35s var(--ease);
}
.bento__cell:hover{border-color:var(--line-strong);transform:translateY(-3px)}
.bento__intro{grid-column:span 7;grid-row:span 2}
.bento__cert{grid-column:span 5;display:flex;flex-direction:column;align-items:flex-start}
.bento__edu{grid-column:span 4}
.bento__focus{grid-column:span 4}
.bento__term{grid-column:span 4}

.cell-quote{position:absolute!important;top:20px;right:24px;font-size:52px!important;
  color:var(--accent-ink);opacity:.1;stroke-width:1.2}
.bento__intro p{color:var(--tx-dim);margin-bottom:18px;font-size:16px;position:relative}
.bento__intro p:last-child{margin-bottom:0}
.bento__intro .lead{font-family:var(--f-disp);font-size:19px;color:var(--tx);
  letter-spacing:-.018em;line-height:1.5;font-weight:500}

.cell-title{display:flex;align-items:center;gap:10px;font-family:var(--f-disp);
  font-size:15px;font-weight:600;letter-spacing:-.01em;margin-bottom:24px}
.cell-title svg{font-size:17px;color:var(--accent-ink)}

/* certification medallion */
.cert-medal{width:96px;height:96px;margin-bottom:20px}
.cert-medal svg{width:96px!important;height:96px!important;overflow:visible}
.medal__track{fill:none;stroke:var(--line);stroke-width:3}
.medal__prog{fill:none;stroke:url(#gGrad);stroke-width:3;stroke-linecap:round;
  stroke-dasharray:314;stroke-dashoffset:314;transform:rotate(-90deg);transform-origin:50% 50%}
.reveal.is-in .medal__prog{animation:draw 1.8s var(--ease) .3s forwards}
@keyframes draw{to{stroke-dashoffset:56}}
.medal__shield{fill:color-mix(in srgb,var(--accent) 8%,transparent);stroke:var(--accent);stroke-width:2.2;stroke-linejoin:round}
.medal__check{fill:none;stroke:var(--accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.cert-medal--alt .medal__shield{stroke:var(--accent-2);fill:color-mix(in srgb,var(--accent-2) 8%,transparent)}
.cert-medal--alt .medal__check{stroke:var(--accent-2)}
.bento__cert h3{font-family:var(--f-disp);font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.3;margin-bottom:10px}
.cert-meta{font-size:11px;color:var(--tx-faint);letter-spacing:.02em;line-height:1.8}

.mini li{padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:4px}
.mini li:last-child{border-bottom:0;padding-bottom:0;margin-bottom:0}
.mini__when{font-size:11px;letter-spacing:.06em;color:var(--accent-ink);text-transform:uppercase}
.mini strong{font-family:var(--f-disp);font-size:16px;font-weight:600;letter-spacing:-.015em;line-height:1.35}
.mini__where{font-size:13px;color:var(--tx-dim);line-height:1.6}

/* focus bars */
.bars li{margin-bottom:16px}
.bars li:last-child{margin-bottom:0}
.bars span{display:block;font-size:13px;color:var(--tx-dim);margin-bottom:7px}
.bars i{display:block;height:5px;border-radius:999px;background:var(--surface-2);overflow:hidden;position:relative}
.bars i::after{
  content:'';position:absolute;inset:0 auto 0 0;width:0;border-radius:999px;
  background:linear-gradient(90deg,var(--accent),var(--accent-3));
  transition:width 1.3s var(--ease) .25s;
}
.reveal.is-in .bars i::after{width:var(--v)}

/* ─────────── timeline ─────────── */
.timeline{position:relative}
.tl{position:relative;display:grid;grid-template-columns:210px 1fr;gap:40px;padding:0 0 46px 44px}
.tl::before{content:'';position:absolute;left:11px;top:12px;bottom:-10px;width:1px;
  background:linear-gradient(180deg,var(--line-strong),var(--line))}
.tl:last-child{padding-bottom:0}
.tl:last-child::before{display:none}
.tl__node{position:absolute;left:0;top:2px;width:23px;height:23px;z-index:1}
.tl__node svg{width:23px!important;height:23px!important}
.tl__core{fill:var(--accent);stroke:none}
.tl__pulse{fill:none;stroke:var(--accent);stroke-width:1.4;opacity:.5;
  transform-origin:50% 50%;animation:ring 2.6s var(--ease) infinite}
@keyframes ring{0%{transform:scale(.45);opacity:.65}70%,100%{transform:scale(1.1);opacity:0}}
.tl__when{display:flex;flex-direction:column;gap:8px;align-items:flex-start;
  font-size:12px;color:var(--tx-faint);padding-top:4px}
.tl__now{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-ink);
  border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);
  background:var(--accent-soft);border-radius:6px;padding:3px 8px}
.tl__body h3{font-family:var(--f-disp);font-size:21px;font-weight:600;letter-spacing:-.022em;line-height:1.28}
.tl__org{display:flex;align-items:center;gap:7px;color:var(--accent-ink);font-size:14px;margin:7px 0 13px;font-weight:500}
.tl__org svg{font-size:15px;flex:none}
.tl__body > p:last-child{color:var(--tx-dim);font-size:15px;max-width:66ch}

/* ─────────── skills ─────────── */
.skills{display:grid;grid-template-columns:repeat(4,1fr);gap:40px 32px}
.skill{
  position:relative;padding:24px 0 0;border-top:1px solid var(--line);
  background:none;transition:.35s var(--ease);
}
.skill::before{
  content:'';position:absolute;top:-1px;left:0;width:0;height:1px;
  background:linear-gradient(90deg,var(--accent),transparent);
  transition:width .55s var(--ease);
}
.skill:hover::before{width:100%}
.skill:hover{transform:translateY(-3px)}
.skill__ico{
  display:grid;place-items:center;width:46px;height:46px;border-radius:12px;margin-bottom:18px;
  background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 18%,transparent),
             color-mix(in srgb,var(--accent-2) 14%,transparent));
  border:1px solid var(--line);color:var(--accent-ink);transition:.35s var(--ease);
}
.skill:hover .skill__ico{transform:scale(1.06) rotate(-4deg);color:var(--tx)}
.skill__ico svg{font-size:22px}
.skill h3{font-family:var(--f-disp);font-size:16px;font-weight:600;letter-spacing:-.018em;margin-bottom:10px}
.skill p{font-size:14px;color:var(--tx-dim);line-height:1.6}

/* ─────────── boot overlay ─────────── */
.boot{
  position:fixed;inset:0;z-index:400;display:grid;place-items:center;align-content:center;gap:24px;
  background:var(--bg);transition:opacity .6s var(--ease),visibility .6s;
}
.boot.is-done{opacity:0;visibility:hidden;pointer-events:none}
.boot__mark{width:76px!important;height:76px!important;overflow:visible}
.boot__shield{fill:none;stroke:url(#gGrad);stroke-width:4;stroke-linejoin:round;
  stroke-dasharray:340;stroke-dashoffset:340;animation:bootDraw 1s var(--ease) forwards}
.boot__check{fill:none;stroke:var(--accent);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:60;stroke-dashoffset:60;animation:bootDraw .45s var(--ease) .75s forwards}
@keyframes bootDraw{to{stroke-dashoffset:0}}
.boot__txt{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--tx-faint);min-height:1.4em}
.boot__bar{display:block;width:170px;height:2px;background:var(--line);border-radius:2px;overflow:hidden}
.boot__bar i{display:block;height:100%;width:0;border-radius:2px;
  background:linear-gradient(90deg,var(--accent),var(--accent-2));animation:bootBar 1.5s var(--ease) forwards}
@keyframes bootBar{to{width:100%}}

/* ─────────── custom cursor ─────────── */
.cursor{position:fixed;top:0;left:0;z-index:390;pointer-events:none;display:none;mix-blend-mode:difference}
.cursor__dot,.cursor__ring{position:absolute;top:0;left:0;border-radius:50%;
  transform:translate(-50%,-50%);will-change:transform}
.cursor__dot{width:6px;height:6px;background:#fff}
.cursor__ring{width:34px;height:34px;border:1px solid rgba(255,255,255,.55);
  transition:width .25s var(--ease),height .25s var(--ease),border-color .25s,opacity .25s}
.cursor.is-hot .cursor__ring{width:56px;height:56px;border-color:#fff}
.cursor.is-hot .cursor__dot{opacity:0}

/* ─────────── venue globe ─────────── */
.globe{
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);
  padding:24px 24px 24px;margin-bottom:40px;overflow:hidden;
}
.globe__head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:6px}
.globe__cap{font-size:11px;color:var(--accent-ink);letter-spacing:.08em}
.globe__hint{font-size:11px;color:var(--tx-faint);letter-spacing:.1em;text-transform:uppercase}
.globe__stage{display:grid;grid-template-columns:1fr 286px;gap:24px;align-items:center}
.globe__viz{position:relative;cursor:grab;touch-action:pan-y}
.globe__viz:active{cursor:grabbing}
#globe{width:100%;height:auto;display:block;max-height:470px;margin-inline:auto;overflow:visible}
.g-ocean{fill:color-mix(in srgb,var(--accent) 5%,transparent);stroke:var(--line-strong);stroke-width:1}
.g-rim{fill:none;stroke:url(#gGrad);stroke-width:1.4;opacity:.55}
.g-grat{fill:none;stroke:var(--line-strong);stroke-width:.7;opacity:.75}
.g-equator{stroke:var(--accent);opacity:.4;stroke-width:1}
.g-arc{fill:none;stroke:url(#gGrad);stroke-width:1.6;stroke-linecap:round;opacity:.85}
.g-back{opacity:.16;stroke-dasharray:3 5}
.g-arc.g-back{stroke-width:1.1;opacity:.2}
.g-pin.is-back{stroke:none}
.g-pin{fill:var(--accent);stroke:var(--bg);stroke-width:1.5;cursor:pointer;transition:r .25s var(--ease)}
.g-pin.is-home{fill:var(--accent-2)}
.g-halo{fill:none;stroke:var(--accent);stroke-width:1.2;opacity:.5}
.g-label{font-family:var(--f-disp);font-size:13px;font-weight:600;fill:var(--tx);
  stroke:none;text-anchor:middle;pointer-events:none}

.globe__legend{display:flex;flex-direction:column;gap:2px}
.globe__legend li{
  display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:12px;
  padding:8px 12px;border-radius:12px;cursor:pointer;transition:.25s var(--ease);
  border:1px solid transparent;
}
.globe__legend li:hover,.globe__legend li.is-on{background:var(--surface-2);border-color:var(--line)}
.globe__legend .dot{width:7px;height:7px;border-radius:50%;background:var(--accent);align-self:center}
.globe__legend li.home .dot{background:var(--accent-2)}
.globe__legend .city{font-family:var(--f-disp);font-size:14px;font-weight:600;letter-spacing:-.015em}
.globe__legend .venue{display:block;font-family:var(--f-mono);font-size:11px;color:var(--tx-faint);letter-spacing:.02em}
.globe__legend .yr{font-family:var(--f-mono);font-size:11px;color:var(--tx-faint)}

/* ─────────── radar chart ─────────── */
.skills-radar{padding:2px 0}
.radar-svg{display:block;width:100%;max-width:100%;height:auto;overflow:visible}
.r-web{fill:none;stroke:var(--line-strong);stroke-width:.8}
.r-spoke{stroke:var(--line);stroke-width:.8}
.r-area{fill:color-mix(in srgb,var(--accent) 20%,transparent);stroke:url(#gGrad);stroke-width:2;
  stroke-linejoin:round;transform-origin:130px 126px;transform:scale(.05);opacity:0}
.reveal.is-in .r-area{animation:radarIn 1.1s var(--ease) .3s forwards}
@keyframes radarIn{to{transform:scale(1);opacity:1}}
.r-vertex{fill:var(--accent);opacity:0}
.reveal.is-in .r-vertex{animation:fadeIn .5s var(--ease) 1.2s forwards}
@keyframes fadeIn{to{opacity:1}}
.r-label{font-family:var(--f-mono);font-size:11px;fill:var(--tx-dim);stroke:none;text-anchor:middle}
.r-val{font-family:var(--f-disp);font-size:12px;font-weight:700;fill:var(--accent);stroke:none;text-anchor:middle}

/* ─────────── terminal cell ─────────── */
.bento__term{padding:0!important;overflow:hidden;display:flex;flex-direction:column}
.term__bar{display:flex;align-items:center;gap:7px;padding:12px 16px;border-bottom:1px solid var(--line);
  background:var(--surface-2)}
.term__bar i{width:9px;height:9px;border-radius:50%;background:var(--line-strong);display:block}
.term__bar i:first-child{background:#FF5F57}
.term__bar i:nth-child(2){background:#FEBC2E}
.term__bar i:nth-child(3){background:#28C840}
.term__bar span{margin-left:8px;font-size:11px;color:var(--tx-faint);letter-spacing:.04em}
.term__body{
  flex:1;padding:18px 18px 20px;font-size:12px;line-height:1.95;color:var(--tx-dim);
  white-space:pre-wrap;word-break:break-word;min-height:210px;
}
.term__body .c-p{color:var(--accent-ink)}
.term__body .c-ok{color:var(--accent-ink)}
.term__body .c-warn{color:#F5A524}
.term__body .c-dim{color:var(--tx-faint)}
.term__cur{display:inline-block;width:7px;height:1.05em;background:var(--accent);
  vertical-align:text-bottom;animation:blink 1.05s steps(1) infinite}

/* ─────────── animated conic borders ─────────── */
@property --ang{syntax:'<angle>';initial-value:0deg;inherits:false}
.card{position:relative}
.card::after{
  content:'';position:absolute;inset:-1px;border-radius:inherit;padding:1px;z-index:-1;
  background:conic-gradient(from var(--ang),transparent 0deg,var(--accent) 40deg,
             var(--accent-2) 90deg,transparent 140deg,transparent 360deg);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
  opacity:0;transition:opacity .4s var(--ease);
}
.card:hover::after{opacity:1;animation:spinAng 3.2s linear infinite}
@keyframes spinAng{to{--ang:360deg}}

/* ─────────── custom scrollbar ─────────── */
*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}
::-webkit-scrollbar{width:11px;height:11px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:999px;
  border:3px solid var(--bg);background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:var(--accent);background-clip:padding-box}

/* ─────────── publications ─────────── */
.filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:36px}
.chip{
  display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:999px;
  border:1px solid var(--line);background:var(--surface);
  font-size:13px;font-weight:500;color:var(--tx-dim);transition:.25s var(--ease);
}
.chip b{font-family:var(--f-mono);font-size:11px;font-weight:500;opacity:.6}
.chip:hover{color:var(--tx);border-color:var(--line-strong)}
.chip.is-on{background:var(--accent);border-color:var(--accent-ink);color:var(--on-accent)}
.chip.is-on b{opacity:.75}

.pubs{display:flex;flex-direction:column;gap:1px;background:var(--line);
  border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.pub{display:grid;grid-template-columns:74px 44px 1fr;gap:18px;align-items:start;
  background:var(--bg-alt);padding:24px 30px;transition:background .3s var(--ease)}
.pub:hover{background:var(--surface-2)}
.pub.is-hidden{display:none}
.pub__yr{font-size:13px;color:var(--tx-faint);padding-top:11px;letter-spacing:.03em}
.pub__ico{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;
  background:var(--surface-2);border:1px solid var(--line);color:var(--accent-ink);flex:none}
.pub__ico svg{font-size:17px}
.pub__body h3{font-family:var(--f-disp);font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.38;margin-bottom:8px}
.tag{display:inline-block;vertical-align:middle;margin-left:8px;font-family:var(--f-mono);
  font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--accent-ink);
  background:var(--accent-soft);border:1px solid color-mix(in srgb,var(--accent) 32%,transparent);
  border-radius:6px;padding:3px 7px;font-weight:500}
.tag--journal{color:var(--accent-3);background:color-mix(in srgb,var(--accent-3) 11%,transparent);
  border-color:color-mix(in srgb,var(--accent-3) 32%,transparent)}
.tag--book{color:var(--accent-2);background:color-mix(in srgb,var(--accent-2) 11%,transparent);
  border-color:color-mix(in srgb,var(--accent-2) 32%,transparent)}
.pub__meta{font-size:14px;color:var(--tx-dim);line-height:1.6}
.pub__meta b{color:var(--tx);font-weight:600}
.pub__desc{font-size:14px;color:var(--tx-dim);margin-top:8px}
.doi{display:inline-flex;align-items:center;gap:6px;margin-top:12px;font-size:11px;
  color:var(--tx-faint);padding:5px 10px;border:1px solid var(--line);border-radius:8px;transition:.25s}
.doi svg{font-size:12px}
.doi:hover{color:var(--accent-ink);border-color:var(--accent-ink);background:var(--accent-soft)}

/* ─────────── work cards ─────────── */
.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;perspective:1400px}
.card{
  position:relative;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r);padding:24px 24px 28px;overflow:hidden;
  transform:rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));
  transform-style:preserve-3d;
  transition:transform .4s var(--ease),border-color .35s,box-shadow .35s;
}
.card::before{content:'';position:absolute;inset:0 0 auto;height:2px;
  background:linear-gradient(90deg,var(--accent),var(--accent-3),var(--accent-2));
  transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ease)}
.card:hover{border-color:var(--line-strong);box-shadow:var(--shadow)}
.card:hover::before{transform:scaleX(1)}
.card__num{position:absolute;top:20px;right:22px;font-size:36px;font-weight:500;
  color:var(--tx);opacity:.06;letter-spacing:-.04em;line-height:1}
.card__yr{font-size:11px;letter-spacing:.08em;color:var(--accent-ink);display:block;margin-bottom:14px}
.card h3{font-family:var(--f-disp);font-size:17px;font-weight:600;letter-spacing:-.022em;line-height:1.3}
.card__role{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--tx-faint);
  margin:7px 0 14px;font-family:var(--f-mono)}
.card__role svg{font-size:14px;color:var(--accent-ink);flex:none}
.card > p:last-child{font-size:14px;color:var(--tx-dim);line-height:1.6}

/* ─────────── gallery ─────────── */
.gallery{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:225px;gap:14px}
.gal{position:relative;overflow:hidden;border-radius:var(--r);border:1px solid var(--line);
  background:var(--surface);cursor:zoom-in}
.gal--wide,.gal--half{grid-column:span 2}
.gal--tall{grid-row:span 2}
.gal img{width:100%;height:100%;object-fit:cover;
  filter:saturate(.62) contrast(1.05) brightness(.94);
  transition:transform .8s var(--ease),filter .55s var(--ease)}
.gal:hover img{filter:none}
.gal:hover img{transform:scale(1.07)}
.gal::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  box-shadow:inset 0 0 0 1px transparent;transition:box-shadow .35s}
.gal:hover::after{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 55%,transparent)}
.gal figcaption{
  position:absolute;left:0;right:0;bottom:0;padding:40px 18px 16px;
  display:flex;flex-direction:column;gap:2px;
  background:linear-gradient(180deg,transparent,rgba(0,0,0,.85));
  opacity:0;transform:translateY(10px);transition:.42s var(--ease);
}
.gal figcaption span{font-family:var(--f-disp);font-size:14px;font-weight:600;color:#fff;letter-spacing:-.015em}
.gal figcaption i{font-family:var(--f-mono);font-style:normal;font-size:11px;color:rgba(255,255,255,.7)}
.gal:hover figcaption{opacity:1;transform:none}

/* ─────────── community ─────────── */
.community{border-top:1px solid var(--line)}
.community li{position:relative;display:grid;
  grid-template-columns:40px 148px 232px 1fr 20px;gap:24px;align-items:center;
  padding:24px 16px;border-bottom:1px solid var(--line);transition:.32s var(--ease)}
.community li::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;
  background:linear-gradient(180deg,var(--accent),var(--accent-2));
  transform:scaleY(0);transform-origin:top;transition:transform .4s var(--ease)}
.community li:hover{background:var(--surface)}
.community li:hover::before{transform:scaleY(1)}
.community .idx{font-family:var(--f-mono);font-size:11px;color:var(--accent-ink);letter-spacing:.06em}
.community li > .mono{font-size:12px;color:var(--tx-faint);letter-spacing:.03em}
.community strong{font-family:var(--f-disp);font-size:17px;font-weight:600;letter-spacing:-.018em}
.community em{font-style:normal;color:var(--tx-dim);font-size:15px}
.community li > svg{font-size:17px;color:var(--accent-ink);opacity:0;transform:translateX(-6px);transition:.3s var(--ease)}
.community li:hover > svg{opacity:1;transform:none}

/* ─────────── contact ─────────── */
.mesh--b{top:auto;bottom:-460px;opacity:.5;animation-duration:28s}
.radar{
  position:absolute!important;top:50%;right:-90px;transform:translateY(-50%);
  width:520px!important;height:520px!important;z-index:-1;opacity:.4;pointer-events:none;
}
.radar circle{fill:none;stroke:var(--line-strong);stroke-width:1}
.radar__cross{stroke:var(--line);stroke-width:1}
.radar__sweep{transform-origin:200px 200px;animation:spin 6s linear infinite}
.radar__sweep path{fill:url(#gGrad);opacity:.22;stroke:none}

.contact{position:relative;max-width:920px}
.contact__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:46px 0 38px}
.ccard{
  position:relative;display:grid;grid-template-columns:auto 1fr auto;
  grid-template-areas:"i k g" "i v g";column-gap:16px;align-items:center;
  padding:24px 24px;border:1px solid var(--line);border-radius:var(--r);
  background:var(--surface);transition:.32s var(--ease);
}
.ccard:hover{border-color:var(--accent-ink);transform:translateY(-3px);box-shadow:var(--shadow-sm)}
.ccard__i{grid-area:i;font-size:26px!important;color:var(--accent-ink)}
.ccard__k{grid-area:k;font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--tx-faint)}
.ccard__v{grid-area:v;font-family:var(--f-disp);font-size:17px;font-weight:600;letter-spacing:-.022em}
.ccard__go{grid-area:g;font-size:17px!important;color:var(--tx-faint);transition:.32s var(--ease)}
.ccard:hover .ccard__go{color:var(--accent-ink);transform:translateX(4px)}
.contact__cta{display:flex;flex-wrap:wrap;gap:12px}

/* ─────────── contact form ─────────── */
.contact__split{display:grid;grid-template-columns:1fr 1.05fr;gap:16px;margin:48px 0 40px;align-items:start}
.contact__details{display:grid;gap:12px}

.cform{position:relative;display:grid;gap:16px;
  padding:32px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.cform__title{font-family:var(--f-disp);font-size:19px;font-weight:600;letter-spacing:-.02em}
.cform__row{display:grid;gap:8px}
.cform label{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--tx-faint)}
.cform__opt{text-transform:none;letter-spacing:0;opacity:.7}
.cform input,.cform textarea{
  width:100%;font:inherit;font-size:15px;color:var(--tx);
  background:var(--bg);border:1px solid var(--line-strong);border-radius:12px;
  padding:12px 16px;transition:border-color .25s var(--ease),box-shadow .25s var(--ease);
}
.cform textarea{resize:vertical;min-height:120px;line-height:1.6}
.cform input::placeholder,.cform textarea::placeholder{color:var(--tx-faint)}
.cform input:focus,.cform textarea:focus{
  outline:none;border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent);
}
.cform input[aria-invalid],.cform textarea[aria-invalid]{border-color:#E5484D}
.cform__err{font-size:13px;color:#FF6369}
[data-theme="light"] .cform__err{color:#C62A2F}
.cform__flash{display:flex;align-items:center;gap:10px;font-size:14px;
  padding:12px 16px;border-radius:12px;
  background:var(--accent-soft);border:1px solid color-mix(in srgb,var(--accent) 34%,transparent);
  color:var(--accent-ink)}
.cform__flash svg{font-size:17px;flex:none}
.cform__trap{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.cform .btn{justify-content:center}
[data-theme="light"] .cform{background:#fff;
  box-shadow:0 1px 2px rgba(16,19,23,.05),0 8px 20px -14px rgba(16,19,23,.18)}
[data-theme="light"] .cform input,[data-theme="light"] .cform textarea{background:#FBFBFA}

/* ─────────── footer ─────────── */
.footer{border-top:1px solid var(--line);padding:32px 0;background:var(--bg)}
.footer__inner{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}
.footer p{font-size:12px;color:var(--tx-faint);letter-spacing:.02em}

/* ─────────── lightbox ─────────── */
.lightbox{position:fixed;inset:0;z-index:300;display:grid;place-items:center;
  background:rgba(4,5,7,.95);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  opacity:0;transition:opacity .3s var(--ease);padding:60px 74px}
.lightbox[hidden]{display:none}
.lightbox.is-open{opacity:1}
.lightbox img{max-width:100%;max-height:82vh;border-radius:14px;object-fit:contain;box-shadow:0 40px 90px -30px #000}
.lb__close{position:absolute;top:22px;right:26px;font-size:22px;color:#fff;opacity:.7;
  width:44px;height:44px;border-radius:12px;transition:.25s}
.lb__close:hover{opacity:1;background:rgba(255,255,255,.1)}
.lb__nav{position:absolute;top:50%;transform:translateY(-50%);font-size:38px;line-height:1;
  color:#fff;opacity:.55;width:54px;height:54px;border-radius:50%;transition:.25s}
.lb__nav:hover{opacity:1;background:rgba(255,255,255,.12)}
.lb__prev{left:18px}.lb__next{right:18px}
.lb__cap{position:absolute;bottom:24px;left:0;right:0;text-align:center;color:#fff;opacity:.75;font-size:13px}

/* ─────────── reveal ─────────── */
.js .reveal{opacity:0;transform:translateY(26px);transition:opacity .85s var(--ease),transform .85s var(--ease)}
.js .reveal.is-in{opacity:1;transform:none}
.js .reveal[data-delay="1"]{transition-delay:.07s}
.js .reveal[data-delay="2"]{transition-delay:.14s}
.js .reveal[data-delay="3"]{transition-delay:.21s}
.js .reveal[data-delay="4"]{transition-delay:.28s}
.js .reveal[data-delay="5"]{transition-delay:.35s}
.js .reveal[data-delay="6"]{transition-delay:.42s}
.js .reveal[data-delay="7"]{transition-delay:.49s}

/* ═══════════ responsive ═══════════ */
@media (max-width:1180px){
  .skills,.cards{grid-template-columns:repeat(3,1fr)}
  .glasscard--a{left:-22px}.glasscard--b{right:-22px}
}
@media (max-width:1080px){
  .skills,.cards{grid-template-columns:repeat(2,1fr)}
  .gallery{grid-template-columns:repeat(3,1fr)}
  .bento__intro{grid-column:span 12;grid-row:auto}
  .bento__cert{grid-column:span 6}
  .bento__edu,.bento__focus{grid-column:span 6}
  .bento__term{grid-column:span 12}
}
@media (max-width:900px){
  .hero{padding:120px 0 40px}
  .hero__inner{grid-template-columns:1fr;gap:48px}
  .hero__media{max-width:420px;margin-inline:auto}
  .stats{grid-template-columns:repeat(2,1fr);margin-top:64px}
  .tl{grid-template-columns:1fr;gap:10px}
  .tl__when{flex-direction:row;align-items:center;gap:12px}
  .globe__stage{grid-template-columns:1fr;gap:24px}
  .globe__legend{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}
  #globe{max-height:380px}
  .community li{grid-template-columns:1fr auto;gap:4px 16px}
  .community li > span{grid-column:1/-1}
  .community em{grid-column:1/2}
}
@media (max-width:760px){
  .nav__links{
    position:fixed;inset:74px 0 auto;flex-direction:column;gap:0;
    background:var(--glass);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);
    border-bottom:1px solid var(--line);padding:12px 24px 24px;
    transform:translateY(-14px);opacity:0;pointer-events:none;transition:.32s var(--ease);
  }
  .nav__links.is-open{transform:none;opacity:1;pointer-events:auto}
  .nav__links a{padding:14px 4px;border-radius:0;border-bottom:1px solid var(--line);font-size:15px}
  .nav__links a:hover{background:none}
  .burger{display:flex}
  .nav__cv{display:none}
  .section{padding:88px 0}
  .sec-head{margin-bottom:40px}
  .skills,.cards,.bento{grid-template-columns:1fr}
  .bento__cell{grid-column:span 1!important}
  .gallery{grid-template-columns:repeat(2,1fr);grid-auto-rows:172px}
  .gal--tall{grid-row:span 1}
  .pub{grid-template-columns:38px 1fr;gap:14px}
  .pub__yr{grid-column:1/-1;padding-top:0;order:-1}
  .contact__grid{grid-template-columns:1fr}
  .contact__split{grid-template-columns:1fr;gap:20px}
  .cform{padding:24px}
  .radar{right:-190px;opacity:.25}
  .lightbox{padding:56px 12px}
  .lb__nav{font-size:30px;width:44px;height:44px}
  .lb__prev{left:4px}.lb__next{right:4px}
  .btn{flex:1 1 auto;justify-content:center}
  .contact__grid{grid-template-columns:1fr}
  .contact__split{grid-template-columns:1fr;gap:20px}
  .cform{padding:24px}
  .radar{right:-190px;opacity:.25}
  .lightbox{padding:56px 12px}
  .lb__nav{font-size:30px;width:44px;height:44px}
  .lb__prev{left:4px}.lb__next{right:4px}
  .btn{flex:1 1 auto;justify-content:center}
  /* venue diagram: scroll horizontally so labels stay legible */
}
@media (max-width:460px){
  .wrap{padding-inline:18px}
  .stats{grid-template-columns:1fr}
  .gallery{grid-template-columns:1fr;grid-auto-rows:215px}
  .gal--wide,.gal--half{grid-column:span 1}
  .globe__legend{grid-template-columns:1fr}
  .globe{padding:18px 16px 20px}
  #globe{max-height:320px}
  .brand__name{display:none}
  .glasscard--a{left:-8px}.glasscard--b{right:-8px}
  .cred{flex:1 1 100%}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
  .js .reveal{opacity:1;transform:none}
  .js .hero__title[data-split] .ch{opacity:1;transform:none}
  .netfield,.scanline,.radar__sweep{display:none}
  .reveal.is-in .bars i::after{width:var(--v)}
  .medal__prog{stroke-dashoffset:56}
}

@media print{
  .nav,.scroll-progress,.grain,.mesh,.grid-bg,.netfield,.glasscard,.orbit,
  .lightbox,.gallery,.marquee,.radar,.footer,.trace{display:none!important}
  body{background:#fff;color:#000}
}
