/* r4vk.org — "Indigo Evolved" (light) / "Energy Dark" (dark) design system
   Tokens first; dark mode via .dark on <html>; motion gated on html.js
   and prefers-reduced-motion. Animations use transform/opacity only. */

:root{
  --bg:#FDFDFF;
  --ink:#101223;
  --muted:#4B4F6B;
  --faint:#6B7089;
  --border:rgba(16,18,35,.08);
  --border-strong:rgba(16,18,35,.13);
  --surface:rgba(255,255,255,.78);
  --surface-solid:#FFFFFF;
  --accent:#4F46E5;
  --accent-hi:#6366F1;
  --btn-ink:#FFFFFF;
  --accent-soft:rgba(99,102,241,.09);
  --accent-line:rgba(99,102,241,.22);
  --ok:#10B981;
  --shadow-sm:0 1px 3px rgba(16,18,35,.06);
  --shadow-card:0 2px 6px rgba(16,18,35,.04),0 28px 60px rgba(79,70,229,.12);
  --shadow-btn:0 10px 30px rgba(79,70,229,.35);
  --shadow-hover:0 4px 10px rgba(16,18,35,.05),0 24px 50px rgba(79,70,229,.20);
  --grad-a:#6366F1;
  --grad-b:#8B5CF6;
  --dot:rgba(16,18,35,.07);
  --mesh:
    radial-gradient(760px 420px at 82% -6%,rgba(99,102,241,.15),transparent 62%),
    radial-gradient(600px 380px at 4% 22%,rgba(56,189,248,.09),transparent 60%),
    radial-gradient(700px 440px at 60% 105%,rgba(139,92,246,.08),transparent 62%);

  --font-body:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;

  --maxw:71rem;
  --pad:clamp(1.25rem,4.5vw,2.75rem);
  --r-card:20px;
  --r-btn:12px;
  --header-h:62px;
  --ease:cubic-bezier(.22,.61,.36,1);
}
/* Energy Dark */
.dark{
  --bg:#0B0F17;
  --ink:#E8ECF4;
  --muted:#96A0B5;
  --faint:#7C8699;
  --border:rgba(232,236,244,.10);
  --border-strong:rgba(232,236,244,.17);
  /* near-solid so text stays readable over the black-hole background */
  --surface:rgba(19,25,39,.92);
  --surface-solid:#131927;
  --accent:#5B8CFF;
  --accent-hi:#7CA2FF;
  --btn-ink:#0B0F17;
  --accent-soft:rgba(91,140,255,.10);
  --accent-line:rgba(91,140,255,.30);
  --ok:#41D98D;
  --shadow-sm:0 1px 3px rgba(0,0,0,.4);
  --shadow-card:0 2px 8px rgba(0,0,0,.35),0 24px 60px rgba(0,0,0,.45);
  --shadow-btn:0 8px 32px rgba(91,140,255,.35);
  --shadow-hover:0 4px 12px rgba(0,0,0,.4),0 24px 50px rgba(91,140,255,.18);
  --grad-a:#5B8CFF;
  --grad-b:#3E63D8;
  --dot:rgba(232,236,244,.10);
  --mesh:
    radial-gradient(900px 480px at 68% -10%,rgba(91,140,255,.16),transparent 65%),
    radial-gradient(700px 400px at 12% 110%,rgba(91,140,255,.07),transparent 60%);
}

*,*::before,*::after{box-sizing:border-box;}
html{scroll-behavior:smooth;background:var(--bg);}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto;}}
/* background lives on <html> (document canvas) so the fixed z-index:-1
   background layer (mesh + WebGL black hole) can composite above it;
   a body background would paint over that layer */
body{
  margin:0;min-height:100vh;background:transparent;color:var(--ink);
  font-family:var(--font-body);font-size:1.0625rem;line-height:1.62;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
img{max-width:100%;height:auto;}
a{color:inherit;}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px;}
::selection{background:var(--accent);color:var(--btn-ink);}

/* Scroll-reactive background: two layers drift at different speeds
   (depth parallax), driven by --p (0..1) set in js/main.js. */
.bg-mesh{position:fixed;inset:0;z-index:-1;overflow:hidden;
  pointer-events:none;}
#bh-canvas{position:absolute;inset:0;width:100%;height:100%;}
.bg-mesh::before{content:"";position:absolute;inset:-32% 0;
  background:var(--mesh);
  transform:translate3d(0,calc(var(--p,0)*-26vh),0);will-change:transform;}
.bg-mesh::after{content:"";position:absolute;inset:-22% 0;
  background-image:radial-gradient(var(--dot) 1px,transparent 1px);
  background-size:26px 26px;
  mask-image:radial-gradient(ellipse 75% 60% at 65% 30%,#000 20%,transparent 72%);
  -webkit-mask-image:radial-gradient(ellipse 75% 60% at 65% 30%,#000 20%,transparent 72%);
  transform:translate3d(0,calc(var(--p,0)*15vh),0);will-change:transform;}
@media (prefers-reduced-motion:reduce){
  .bg-mesh::before,.bg-mesh::after{transform:none;}
}

/* Scroll progress bar */
.scroll-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:70;
  pointer-events:none;}
.scroll-progress span{display:block;height:100%;
  background:linear-gradient(90deg,var(--grad-a),var(--grad-b));
  transform-origin:left;transform:scaleX(var(--p,0));}
html:not(.js) .scroll-progress{display:none;}

.container{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad);}
.hero-grid>*,.about-grid>*,.proj-featured>*,.proj-grid>*,.cert-grid>*,
.who>div,.now-rows li>span:first-child{min-width:0;}
.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 */
.skip-link{position:fixed;top:.9rem;left:50%;z-index:999;
  transform:translate(-50%,-200%);opacity:0;background:var(--ink);
  color:var(--bg);text-decoration:none;font-weight:600;font-size:.9rem;
  padding:.7rem 1.3rem;border-radius:999px;
  transition:transform .2s var(--ease),opacity .2s var(--ease);}
.skip-link:focus{transform:translate(-50%,0);opacity:1;}

/* ── Header: floating pill ─────────────────────────────────────────── */
.site-header{position:sticky;top:.65rem;z-index:40;}
.site-header .container{max-width:calc(var(--maxw) + 1rem);}
.header-pill{display:flex;align-items:center;justify-content:space-between;
  gap:1.25rem;height:var(--header-h);padding:0 .65rem 0 1.15rem;
  border-radius:16px;background:color-mix(in srgb,var(--surface-solid) 76%,transparent);
  border:1px solid var(--border);box-shadow:0 8px 30px rgba(16,18,35,.07);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);}
.dark .header-pill{box-shadow:0 8px 30px rgba(0,0,0,.5);}
.brand{display:flex;align-items:center;font-weight:800;
  font-size:1.06rem;letter-spacing:-.02em;text-decoration:none;}
.brand .mark{width:30px;height:30px;border-radius:9px;flex:none;
  margin-right:.6rem;
  background:linear-gradient(135deg,var(--grad-a),var(--grad-b));color:#fff;
  display:flex;align-items:center;justify-content:center;
  font-size:.72rem;font-weight:800;box-shadow:0 4px 14px rgba(99,102,241,.35);}
.brand em{font-style:normal;color:var(--accent);}
.site-nav{display:none;gap:clamp(1.1rem,2.4vw,2rem);}
.site-nav a{font-size:.85rem;font-weight:500;color:var(--muted);
  text-decoration:none;white-space:nowrap;transition:color .2s var(--ease);}
.site-nav a:hover{color:var(--accent);}
.header-tools{display:flex;align-items:center;gap:.45rem;}
.tool-btn{appearance:none;background:none;border:1px solid var(--border);
  border-radius:10px;padding:.5rem .85rem;color:var(--ink);cursor:pointer;
  font:inherit;font-size:.8rem;font-weight:600;
  transition:border-color .2s var(--ease),color .2s var(--ease),
    background-color .2s var(--ease);}
.tool-btn:hover{border-color:var(--accent-line);color:var(--accent);
  background:var(--accent-soft);}
.hdr-contact{display:none;background:var(--accent);border:1px solid var(--accent);
  color:var(--btn-ink);box-shadow:0 6px 20px rgba(79,70,229,.3);text-decoration:none;
  padding:.5rem 1.05rem;border-radius:10px;font-size:.8rem;font-weight:600;
  transition:transform .2s var(--ease),background-color .2s var(--ease);}
.hdr-contact:hover{transform:translateY(-1px);background:var(--accent-hi);}
.menu-wrap{position:relative;}
.menu{position:absolute;right:0;top:calc(100% + .6rem);min-width:10.5rem;
  background:var(--surface-solid);border:1px solid var(--border);
  border-radius:14px;padding:.4rem;box-shadow:var(--shadow-card);z-index:50;}
.menu.hidden{display:none;}
.menu button{display:block;width:100%;text-align:left;appearance:none;
  background:none;border:0;border-radius:9px;padding:.55rem .8rem;
  color:var(--ink);cursor:pointer;font:inherit;font-size:.9rem;}
.menu button:hover{background:var(--accent-soft);color:var(--accent);}
.nav-toggle{display:inline-flex;align-items:center;justify-content:center;
  padding:.5rem .6rem;}
.mobile-nav{position:absolute;top:calc(100% + .6rem);left:0;right:0;
  background:var(--surface-solid);border:1px solid var(--border);
  border-radius:14px;padding:.5rem;display:flex;flex-direction:column;
  box-shadow:var(--shadow-card);z-index:50;}
.mobile-nav.hidden{display:none;}
.mobile-nav a{padding:.75rem .9rem;border-radius:9px;text-decoration:none;
  font-size:.95rem;font-weight:500;color:var(--ink);}
.mobile-nav a:hover{background:var(--accent-soft);color:var(--accent);}
@media (min-width:820px){
  .site-nav{display:flex;}
  .hdr-contact{display:inline-flex;}
  .nav-toggle,.mobile-nav{display:none;}
}

/* ── Buttons ───────────────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;gap:.55rem;
  padding:.95rem 1.75rem;border-radius:var(--r-btn);border:1px solid var(--accent);
  background:var(--accent);color:var(--btn-ink);text-decoration:none;font-weight:600;
  font-size:.98rem;box-shadow:var(--shadow-btn);
  transition:transform .2s var(--ease),background-color .2s var(--ease);}
.btn:hover{transform:translateY(-2px);background:var(--accent-hi);}
.btn-ghost{display:inline-flex;align-items:center;gap:.55rem;
  padding:.95rem 1.75rem;border-radius:var(--r-btn);
  border:1px solid var(--border-strong);
  background:color-mix(in srgb,var(--surface-solid) 70%,transparent);
  color:var(--ink);text-decoration:none;font-weight:600;font-size:.98rem;
  transition:transform .2s var(--ease),border-color .2s var(--ease),
    color .2s var(--ease);}
.btn-ghost:hover{transform:translateY(-2px);border-color:var(--accent-line);
  color:var(--accent);}
.link-more{display:inline-flex;align-items:center;gap:.4rem;font-size:.9rem;
  font-weight:600;color:var(--accent);text-decoration:none;white-space:nowrap;}
.link-more .arr{transition:transform .2s var(--ease);}
.link-more:hover .arr{transform:translateX(4px);}

/* ── Cards, pills ──────────────────────────────────────────────────── */
.card{background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--shadow-card);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
/* solid enough that text stays readable over the black-hole disc */
.dark .card{background:linear-gradient(180deg,rgba(19,25,39,.93),rgba(16,21,34,.86));}
.pill{font-family:var(--font-mono);font-size:.66rem;font-weight:500;
  letter-spacing:.08em;color:var(--accent);background:var(--accent-soft);
  border:1px solid var(--accent-line);border-radius:7px;padding:.28rem .6rem;
  white-space:nowrap;}

/* ── Hero ──────────────────────────────────────────────────────────── */
.hero{padding-block:clamp(3.2rem,8vh,6rem) clamp(2.5rem,6vh,4rem);}
.hero-grid{display:grid;gap:2.75rem;align-items:start;}
.badge{display:inline-flex;align-items:center;gap:.55rem;
  background:var(--accent-soft);border:1px solid var(--accent-line);
  border-radius:999px;padding:.45rem 1rem;font-size:.8rem;font-weight:600;
  color:var(--accent);}
.badge .dot{width:7px;height:7px;border-radius:50%;background:var(--ok);flex:none;}
html.js .badge .dot{animation:pulse 2.4s ease-in-out infinite;}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.35;}}
@media (prefers-reduced-motion:reduce){html.js .badge .dot{animation:none;}}
.hero h1{margin:1.4rem 0 0;font-size:clamp(2.5rem,6.5vw,4.9rem);
  font-weight:800;letter-spacing:-.045em;line-height:1.04;}
.hero h1 .name-line{display:block;}
.hero h1 .dot{color:var(--accent);}
.lede{margin:1.6rem 0 0;padding:0;list-style:none;max-width:38rem;
  display:grid;gap:.85rem;font-size:1.06rem;color:var(--muted);}
.lede li{position:relative;padding-left:1.7rem;}
.lede li::before{content:"";position:absolute;left:.1rem;top:.52em;
  width:.85rem;height:.85rem;border-radius:5px;background:var(--accent-soft);
  border:1px solid var(--accent-line);}
.lede li::after{content:"";position:absolute;left:.36rem;top:calc(.52em + .22rem);
  width:.34rem;height:.2rem;border-left:2px solid var(--accent);
  border-bottom:2px solid var(--accent);transform:rotate(-45deg);}
.hero-cta{margin-top:2.1rem;display:flex;flex-wrap:wrap;gap:.9rem;}
.profile-card{padding:1.6rem;align-self:start;}
.who{display:flex;align-items:center;gap:1rem;}
.avatar{width:60px;height:60px;border-radius:17px;flex:none;
  background:linear-gradient(135deg,var(--grad-a),var(--grad-b));color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:1.35rem;
  font-weight:800;box-shadow:0 8px 22px rgba(99,102,241,.4);}
.who .who-role{margin:0;font-size:1.02rem;font-weight:700;line-height:1.3;}
.who .who-org{margin:.2rem 0 0;font-size:.85rem;color:var(--faint);}
.hr{height:1px;background:var(--border);margin:1.25rem 0;}
.now-rows{margin:0;padding:0;list-style:none;display:grid;gap:.9rem;}
.now-rows li{display:flex;justify-content:space-between;align-items:start;
  gap:1rem;font-size:.9rem;color:var(--muted);}
.now-rows .pill{margin-top:.1rem;flex:none;}
.nums{display:grid;grid-template-columns:repeat(3,1fr);gap:.7rem;
  margin-top:1.35rem;}
.num{border-radius:14px;border:1px solid var(--border);
  background:var(--surface-solid);padding:1rem .6rem;text-align:center;
  min-width:0;}
.num span{overflow-wrap:break-word;hyphens:auto;}
.dark .num{background:rgba(232,236,244,.03);}
.num b{display:block;font-size:1.6rem;font-weight:800;
  letter-spacing:-.02em;color:var(--accent);}
.num span{display:block;margin-top:.3rem;font-size:.7rem;color:var(--faint);
  line-height:1.35;}
@media (min-width:980px){
  .hero-grid{grid-template-columns:minmax(0,1.45fr) minmax(21rem,1fr);gap:4rem;}
}

/* ── Sections ──────────────────────────────────────────────────────── */
.section{padding-block:clamp(3rem,8vh,5.5rem);}
.sec-head{display:flex;flex-wrap:wrap;align-items:flex-end;
  justify-content:space-between;gap:1rem;margin-bottom:clamp(1.8rem,4vh,2.8rem);}
.sec-head h2{margin:0;font-size:clamp(1.8rem,4vw,2.7rem);font-weight:800;
  letter-spacing:-.035em;line-height:1.12;}
.sec-head .sec-sub{margin:.6rem 0 0;max-width:46rem;color:var(--muted);
  font-size:.98rem;}

/* ── About ─────────────────────────────────────────────────────────── */
.about-grid{display:grid;gap:2.5rem;}
.about-prose .intro{margin:0 0 1.3rem;font-size:clamp(1.15rem,2.2vw,1.45rem);
  font-weight:600;line-height:1.45;letter-spacing:-.015em;}
.about-prose p{margin:0 0 1.1rem;color:var(--muted);}
.skills{display:grid;gap:.8rem;align-content:start;}
.skill{display:flex;gap:.95rem;align-items:flex-start;padding:1.05rem 1.15rem;
  border-radius:16px;border:1px solid var(--border);
  background:var(--surface);box-shadow:var(--shadow-sm);}
.skill .tile{width:40px;height:40px;border-radius:12px;flex:none;
  background:var(--accent-soft);border:1px solid var(--accent-line);
  color:var(--accent);display:flex;align-items:center;justify-content:center;}
.skill .tile svg{width:20px;height:20px;}
.skill p{margin:.25rem 0 0;font-size:.88rem;color:var(--ink);line-height:1.5;}
@media (min-width:980px){
  .about-grid{grid-template-columns:minmax(0,1.5fr) minmax(20rem,1fr);gap:4rem;}
}

/* ── Experience: timeline ──────────────────────────────────────────── */
.xp{position:relative;display:grid;gap:1.4rem;padding-left:1.9rem;}
.xp::before{content:"";position:absolute;left:.5rem;top:.6rem;bottom:.6rem;
  width:2px;border-radius:2px;background:var(--accent-line);}
/* Scroll charge: the line fills as the reader travels (--xp set in JS) */
.xp::after{content:"";position:absolute;left:.5rem;top:.6rem;bottom:.6rem;
  width:2px;border-radius:2px;
  background:linear-gradient(180deg,var(--grad-a),var(--grad-b));
  transform-origin:top;transform:scaleY(var(--xp,0));will-change:transform;}
html:not(.js) .xp::after{transform:none;}
.xp-item{position:relative;}
.xp-item::before{content:"";position:absolute;left:-1.9rem;top:1.7rem;
  width:12px;height:12px;border-radius:50%;background:var(--surface-solid);
  border:3px solid var(--bg);box-shadow:0 0 0 1px var(--accent-line);
  transform:translateX(.05rem);
  transition:background-color .35s var(--ease),box-shadow .35s var(--ease),
    transform .35s var(--ease);}
.xp-item.active::before{background:var(--accent);
  box-shadow:0 0 0 4px var(--accent-soft);
  transform:translateX(.05rem) scale(1.25);}
html:not(.js) .xp-item::before{background:var(--accent);}
@media (prefers-reduced-motion:reduce){
  .xp::after{transform:none;}
  .xp-item::before{transition:none;}
}
.xp-card{padding:1.5rem 1.6rem;}
.xp-top{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem .8rem;}
.xp-badge{font-size:.7rem;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;color:var(--ok);border:1px solid var(--ok);
  border-radius:999px;padding:.25rem .7rem;}
.xp-card h3{margin:.8rem 0 0;font-size:clamp(1.15rem,2.2vw,1.45rem);
  font-weight:700;letter-spacing:-.02em;line-height:1.25;}
.xp-card .company{margin:.35rem 0 0;font-size:.9rem;color:var(--faint);}
.logo-pad{display:inline-flex;align-items:center;gap:12px;background:#fff;
  border:1px solid var(--border);border-radius:10px;padding:7px 12px;
  margin-top:.9rem;}
.logo-pad img{height:30px;width:auto;max-width:none;}
.logo-pad img[height="20"]{height:20px;}
.logo-pad.sm{padding:5px 10px;gap:9px;}
.logo-pad.sm img{height:22px;}
.logo-pad.sm img[height="20"]{height:14px;}
.xp-points{margin:1.05rem 0 0;padding:0;list-style:none;max-width:46rem;
  display:grid;gap:.6rem;font-size:.93rem;color:var(--muted);}
.xp-points li{position:relative;padding-left:1.25rem;}
.xp-points li::before{content:"";position:absolute;left:0;top:.6em;
  width:.5rem;height:2px;border-radius:2px;background:var(--accent);}
.xp-tags{margin-top:1.15rem;display:flex;flex-wrap:wrap;gap:.5rem;}

/* ── Projects: featured + compact grid ─────────────────────────────── */
.proj-featured{display:grid;gap:1.2rem;margin-bottom:1.2rem;}
.proj-grid{display:grid;gap:1.2rem;}
.pcard{padding:1.5rem 1.6rem;display:flex;flex-direction:column;gap:1rem;
  transition:transform .25s var(--ease),box-shadow .25s var(--ease),
    border-color .25s var(--ease);}
html.js .pcard:hover{transform:translateY(-4px);
  border-color:var(--accent-line);box-shadow:var(--shadow-hover);}
html.js .pcard:hover h3{color:var(--accent);}
.pcard h3{transition:color .25s var(--ease);}
html.js .pcard:hover .link-more .arr{transform:translateX(4px);}
.pcard .plabel{align-self:flex-start;}
.pcard h3{margin:0;font-size:1.18rem;font-weight:700;letter-spacing:-.02em;
  line-height:1.3;}
.pcard .pdesc{margin:0;font-size:.9rem;color:var(--muted);line-height:1.55;}
.pcard .pfoot{margin-top:auto;display:flex;flex-wrap:wrap;align-items:center;
  justify-content:space-between;gap:.6rem 1rem;padding-top:1rem;
  border-top:1px solid var(--border);}
.pcard .prole{font-size:.8rem;color:var(--faint);}
.ptags{display:flex;flex-wrap:wrap;gap:.45rem;}
.pcard.featured h3{font-size:clamp(1.3rem,2.4vw,1.6rem);}
.pcard.featured .pdesc{font-size:.95rem;}
@media (min-width:720px){
  .proj-featured{grid-template-columns:1fr 1fr;}
  .proj-grid{grid-template-columns:1fr 1fr;}
}
@media (min-width:1024px){
  .proj-grid{grid-template-columns:1fr 1fr 1fr;}
}

/* ── Publications ──────────────────────────────────────────────────── */
.pubs{display:grid;gap:.9rem;}
.pub a{display:flex;align-items:center;justify-content:space-between;
  gap:1.25rem;padding:1.2rem 1.5rem;border-radius:16px;
  border:1px solid var(--border);background:var(--surface);
  box-shadow:var(--shadow-sm);text-decoration:none;
  transition:transform .22s var(--ease),border-color .22s var(--ease);}
html.js .pub a:hover{transform:translateX(6px);border-color:var(--accent-line);}
.pub h3{margin:0;font-size:1.02rem;font-weight:600;letter-spacing:-.01em;
  line-height:1.4;}
.pub a:hover h3{color:var(--accent);}
.pub .pub-open{flex:none;font-size:.8rem;font-weight:600;color:var(--accent);
  white-space:nowrap;}
.pubs-empty{margin:0;color:var(--faint);font-size:.95rem;}

/* ── Certificates ──────────────────────────────────────────────────── */
.cert-grid{display:grid;gap:1.2rem;}
.cert-card{padding:1.5rem 1.6rem;}
.cert-card h2{margin:0 0 1.1rem;font-size:1.1rem;font-weight:700;
  letter-spacing:-.01em;}
.cert-card ul{margin:0;padding:0;list-style:none;display:grid;gap:.7rem;}
.cert-card li{position:relative;padding-left:1.6rem;font-size:.93rem;
  color:var(--muted);}
.cert-card li::before{content:"";position:absolute;left:.1rem;top:.28em;
  width:.85rem;height:.85rem;border-radius:5px;background:var(--accent-soft);
  border:1px solid var(--accent-line);}
.cert-card li::after{content:"";position:absolute;left:.36rem;top:calc(.28em + .22rem);
  width:.34rem;height:.2rem;border-left:2px solid var(--accent);
  border-bottom:2px solid var(--accent);transform:rotate(-45deg);}
.cert-card li strong{color:var(--ink);}
.cert-card .interests{margin:0;font-size:.93rem;color:var(--muted);}
@media (min-width:720px){.cert-grid{grid-template-columns:1.2fr 1fr;}}

/* ── Contact finale ────────────────────────────────────────────────── */
.contact-card{position:relative;overflow:hidden;padding:clamp(2.2rem,6vw,4rem);
  text-align:center;}
.contact-card::before{content:"";position:absolute;inset:0;background:
  radial-gradient(560px 300px at 50% -20%,var(--accent-soft),transparent 70%);
  pointer-events:none;}
.contact-card>*{position:relative;}
.contact-card h2{margin:0;font-size:clamp(1.9rem,5vw,3.1rem);font-weight:800;
  letter-spacing:-.04em;line-height:1.1;}
.contact-card .contact-sub{margin:1rem auto 0;max-width:34rem;
  color:var(--muted);font-size:.98rem;}
.mail-btn{display:inline-flex;align-items:center;gap:.6rem;margin-top:1.9rem;
  padding:1.05rem 2rem;border-radius:14px;background:var(--accent);
  color:var(--btn-ink);text-decoration:none;font-weight:700;font-size:1.05rem;
  box-shadow:var(--shadow-btn);
  transition:transform .2s var(--ease),background-color .2s var(--ease);}
.mail-btn:hover{transform:translateY(-2px);background:var(--accent-hi);}
.social-pills{margin-top:1.9rem;display:flex;flex-wrap:wrap;gap:.6rem;
  justify-content:center;}
.social-pills a{display:inline-flex;align-items:center;gap:.5rem;
  padding:.6rem 1.1rem;border-radius:999px;border:1px solid var(--border);
  background:color-mix(in srgb,var(--surface-solid) 75%,transparent);
  text-decoration:none;font-size:.85rem;font-weight:500;color:var(--muted);
  transition:color .2s var(--ease),border-color .2s var(--ease);}
.social-pills a:hover{color:var(--accent);border-color:var(--accent-line);}
.social-pills .ext{color:var(--accent);}
.social-pills a svg{width:18px;height:18px;flex:none;border-radius:4px;}
.social-pills a.support{background:var(--accent);border-color:var(--accent);
  color:var(--btn-ink);font-weight:600;box-shadow:var(--shadow-btn);
  transition:transform .2s var(--ease),background-color .2s var(--ease);}
.social-pills a.support:hover{background:var(--accent-hi);
  color:var(--btn-ink);transform:translateY(-2px);}
.social-pills a.support .ext{color:var(--btn-ink);}
.social-pills a.support svg{border-radius:0;}

/* ── Footer ────────────────────────────────────────────────────────── */
.site-footer{padding-block:1.8rem 2.2rem;}
.site-footer .container{display:flex;flex-wrap:wrap;align-items:baseline;
  justify-content:space-between;gap:.8rem;border-top:1px solid var(--border);
  padding-top:1.5rem;}
.site-footer p{margin:0;font-size:.85rem;color:var(--faint);}
.site-footer a{font-size:.85rem;font-weight:500;text-decoration:none;
  color:var(--faint);}
.site-footer a:hover{color:var(--accent);}

/* Floating contact */
.floating-contact{position:fixed;right:1.25rem;bottom:1.4rem;z-index:60;
  display:inline-flex;align-items:center;justify-content:center;
  width:52px;height:52px;border-radius:50%;
  background:linear-gradient(135deg,var(--grad-a),var(--grad-b));color:#fff;
  box-shadow:0 10px 30px rgba(99,102,241,.45);
  transition:transform .2s var(--ease);}
.floating-contact:hover{transform:translateY(-3px);}
.floating-contact svg{width:20px;height:20px;}

/* ── Reveal on scroll (JS-gated) ───────────────────────────────────── */
html.js .rv{opacity:0;transform:translateY(16px);}
html.js .rv.in{opacity:1;transform:none;
  transition:opacity .6s var(--ease),transform .6s var(--ease);}
@media (prefers-reduced-motion:reduce){
  html.js .rv{opacity:1;transform:none;transition:none;}
  html.js .pcard:hover,html.js .pub a:hover{transform:none;}
}
