/* =====================================================================
   PlantNura — Component stylesheet (components.css)
   Buttons, cards, pillars, pricing, carousels, tabs, accordions,
   process steps, video embeds, forms, modals, toggles, FAQ.
   ===================================================================== */

/* ---------- Brand logos ---------- */
.brand-logo-img{height:70px;width:auto;display:block;}
.footer-brand .brand-logo-img{height:66px;margin-bottom:var(--space-4);}
.drawer-head .brand-logo-img{height:52px;}
/* White "chip" so any logo stays crisp on dark / navy / gradient panels */
.logo-chip{background:#fff;border-radius:var(--radius-lg);padding:.55rem .8rem;
  display:inline-flex;align-items:center;box-shadow:var(--shadow-sm);}
.logo-chip img{display:block;width:auto;}

/* ---------- Product page: brand chip + inline mark ---------- */
.brand-chip{display:inline-flex;align-items:center;gap:.75rem;background:var(--color-surface);
  border:1px solid var(--color-divider);border-radius:var(--radius-full);padding:.5rem 1.1rem .5rem .7rem;
  box-shadow:var(--shadow-sm);margin-bottom:var(--space-5);}
.brand-chip img{height:42px;width:auto;display:block;}
.brand-chip .chip-tag{font-size:var(--text-xs);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--color-primary);}
.brand-chip .chip-div{width:1px;height:18px;background:var(--color-border);}
/* Registered product marks are dark artwork, so the chip stays a light plate in
   dark mode. The logos themselves are never filtered or recoloured. */
[data-theme="dark"] .brand-chip,
[data-theme="dark"] .logo-chip{background:#f7f7fa;border-color:rgba(255,255,255,.14);
  box-shadow:0 6px 22px rgba(0,0,0,.45);}
[data-theme="dark"] .brand-chip .chip-div{background:rgba(15,17,21,.16);}
[data-theme="dark"] .brand-chip .chip-tag{color:#5b2fd4;}
.head-with-mark{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;}
.head-with-mark img{height:46px;width:auto;flex:none;}

/* ---------- Modular numbered feature cards ---------- */
.feature-mods{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:var(--space-5);}
.fmod{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);
  padding:var(--space-6) var(--space-6);position:relative;display:flex;flex-direction:column;
  transition:all var(--transition);overflow:hidden;}
.fmod{padding:var(--space-8) var(--space-6);}
.fmod::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,var(--color-primary),var(--color-gold));
  opacity:0;transition:opacity var(--transition);}
.fmod:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--color-border);}
.fmod:hover::after{opacity:1;}
.fmod-top{display:flex;align-items:center;gap:.85rem;margin-bottom:var(--space-4);}
.fmod-num{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);color:var(--color-gold);letter-spacing:-.02em;}
.fmod-ico{width:46px;height:46px;border-radius:var(--radius-md);display:grid;place-items:center;
  background:var(--color-primary-soft);color:var(--color-primary);flex:none;}
.fmod-ico [data-lucide]{width:1.45rem;height:1.45rem;}
.fmod h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin-bottom:.5rem;color:var(--color-text);}
.fmod .fmod-eyebrow{font-family:var(--font-display);font-weight:800;font-size:var(--text-base);color:var(--color-primary);margin-bottom:.5rem;line-height:1.25;}
.fmod p{font-size:var(--text-sm);color:var(--color-text-muted);}

/* ---------- Access cards (browser-based / secure / fast) ---------- */
.access-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:var(--space-5);margin-top:var(--space-10);}
.access-card{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);
  padding:var(--space-8) var(--space-6);text-align:center;transition:all var(--transition);}
.access-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);}
.access-card .ac-ico{width:60px;height:60px;border-radius:var(--radius-full);display:grid;place-items:center;margin:0 auto var(--space-4);
  background:linear-gradient(140deg,var(--color-primary),var(--color-navy));color:#fff;}
.access-card .ac-ico [data-lucide]{width:1.7rem;height:1.7rem;}
.access-card h4{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);margin-bottom:.5rem;}
.access-card p{font-size:var(--text-sm);color:var(--color-text-muted);}

/* ---------- Workflow line pill ---------- */
.workflow-line{display:flex;align-items:center;justify-content:center;gap:.5rem;flex-wrap:wrap;
  margin:var(--space-8) auto 0;max-width:900px;}
.wf-pill{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-sm);padding:.6rem 1.15rem;border-radius:var(--radius-full);color:#fff;
  background:linear-gradient(135deg,var(--color-primary),var(--color-teal));box-shadow:var(--shadow-sm);}
.wf-pill:nth-child(3){background:linear-gradient(135deg,var(--color-teal),var(--color-navy));}
.wf-pill:nth-child(5){background:linear-gradient(135deg,var(--color-navy),var(--color-indigo-bright));}
.wf-pill:nth-child(7){background:linear-gradient(135deg,var(--color-gold-hover),var(--color-gold));color:var(--color-on-accent);}
.wf-pill:nth-child(9){background:linear-gradient(135deg,var(--color-primary-active),var(--color-primary));}
.wf-arrow{color:var(--color-gold);display:inline-grid;place-items:center;}
.wf-arrow [data-lucide]{width:1.2rem;height:1.2rem;}

/* ---------- Hero brand carousel ---------- */
.brand-carousel{position:relative;border-radius:var(--radius-2xl);overflow:hidden;box-shadow:var(--shadow-lg);
  background:var(--color-navy);aspect-ratio:4/3;}
/* Plot gallery variant: plots render on white, contained, wider frame */
.plot-carousel{background:#fff;aspect-ratio:16/10;}
.plot-carousel .bslide img{object-fit:contain;padding:var(--space-6) var(--space-6) var(--space-16);background:#fff;}
.plot-carousel .bslide-body{background:linear-gradient(180deg,transparent,rgba(10,10,22,.04) 40%,rgba(10,10,22,.74));}
.plot-carousel .bslide-body h3{font-size:var(--text-lg);}
.bslide{position:absolute;inset:0;opacity:0;visibility:hidden;transition:opacity .6s ease;}
.bslide.is-active{opacity:1;visibility:visible;}
.bslide img{width:100%;height:100%;object-fit:cover;}
.bslide-body{position:absolute;left:0;right:0;bottom:0;padding:var(--space-8) var(--space-6) var(--space-6);
  background:linear-gradient(180deg,transparent,rgba(8,8,20,.55)35%,rgba(8,8,20,.9));color:#fff;}
.bslide-cat{display:inline-block;font-size:var(--text-xs);font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--color-accent-bright);margin-bottom:.4rem;}
.bslide-body h3{color:#fff;font-size:var(--text-xl);margin-bottom:.3rem;}
.bslide-body p{color:rgba(255,255,255,.85);font-size:var(--text-sm);margin-bottom:var(--space-3);max-width:42ch;}
.bslide-body .link-arrow{color:var(--color-accent-bright);}
.bcar-btn{position:absolute;top:38%;transform:translateY(-50%);z-index:5;width:44px;height:44px;border-radius:var(--radius-full);
  background:rgba(255,255,255,.9);color:var(--color-primary);display:grid;place-items:center;box-shadow:var(--shadow-md);
  transition:all var(--transition);}
.bcar-btn:hover{background:#fff;transform:translateY(-50%) scale(1.08);}
.bcar-btn.prev{left:var(--space-4);}
.bcar-btn.next{right:var(--space-4);}
.bcar-btn [data-lucide]{width:1.3rem;height:1.3rem;}
.bcar-dots{position:absolute;top:var(--space-4);left:var(--space-6);right:var(--space-6);z-index:5;
  display:flex;gap:.4rem;}
.bcar-dots button{flex:1;height:4px;border-radius:2px;background:rgba(255,255,255,.35);transition:background var(--transition);padding:0;}
.bcar-dots button.active{background:var(--color-accent-bright);}

/* ---------- Capabilities cards ---------- */
.cap-grid{align-items:stretch;}
.cap{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-2xl);
  padding:var(--space-8);display:flex;flex-direction:column;position:relative;overflow:hidden;transition:all var(--transition);}
.cap::before{content:"";position:absolute;top:0;left:0;right:0;height:4px;
  background:linear-gradient(90deg,var(--color-primary),var(--color-gold));opacity:0;transition:opacity var(--transition);}
.cap:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:var(--color-border);}
.cap:hover::before{opacity:1;}
.cap-ico{width:56px;height:56px;border-radius:var(--radius-lg);display:grid;place-items:center;
  background:var(--color-primary-soft);color:var(--color-primary);margin-bottom:var(--space-4);}
.cap-ico [data-lucide]{width:1.7rem;height:1.7rem;}
.cap .pillar-num{position:absolute;top:var(--space-6);right:var(--space-6);font-family:var(--font-display);
  font-weight:800;font-size:var(--text-xl);color:var(--color-gold);opacity:.5;}
.cap h3{font-size:var(--text-xl);margin-bottom:.35rem;}
.cap-sub{font-family:var(--font-display);font-weight:700;font-size:var(--text-base);color:var(--color-primary);margin-bottom:var(--space-4);line-height:1.25;}
.cap-body{color:var(--color-text-muted);font-size:var(--text-sm);margin-bottom:var(--space-5);}
.cap ul{display:grid;gap:.6rem;margin-bottom:var(--space-6);}
.cap li{display:flex;gap:.55rem;font-size:var(--text-sm);color:var(--color-text);align-items:flex-start;}
.cap li [data-lucide]{width:1.1rem;height:1.1rem;color:var(--color-primary);flex:none;margin-top:.15rem;}
.cap .link-arrow{margin-top:auto;}
@media(max-width:960px){.cap-grid{grid-template-columns:1fr;}}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-family:var(--font-body);
  font-weight:700;font-size:var(--text-sm);padding:.8rem 1.5rem;border-radius:var(--radius-full);
  transition:all var(--transition);min-height:46px;white-space:nowrap;text-align:center;}
.btn [data-lucide]{width:1.1rem;height:1.1rem;}
.btn-primary{background:var(--color-primary);color:#fff;}
.btn-primary:hover{background:var(--color-primary-hover);transform:translateY(-2px);box-shadow:var(--shadow-md);}
[data-theme="dark"] .btn-primary{color:var(--color-text-inverse);}
.btn-gold{background:var(--color-gold);color:var(--color-on-accent);}
.btn-gold:hover{background:var(--color-gold-hover);transform:translateY(-2px);box-shadow:var(--shadow-gold);}
.btn-ghost{background:transparent;color:var(--color-text);border:1px solid var(--color-border);}
.btn-ghost:hover{border-color:var(--color-primary);color:var(--color-primary);}
.btn-light{background:rgba(255,255,255,.16);color:#fff;border:1px solid rgba(255,255,255,.32);}
.btn-light:hover{background:rgba(255,255,255,.26);}
.btn-navy{background:var(--color-navy);color:#fff;}
.btn-navy:hover{filter:brightness(1.1);transform:translateY(-2px);}
.btn-lg{padding:1rem 1.9rem;font-size:var(--text-base);min-height:52px;}
.btn-sm{padding:.55rem 1rem;min-height:40px;font-size:var(--text-xs);}
.btn-block{width:100%;}
.btn[disabled]{opacity:.45;cursor:not-allowed;pointer-events:none;}
.link-arrow{display:inline-flex;align-items:center;gap:.4rem;color:var(--color-primary);font-weight:700;font-size:var(--text-sm);}
.link-arrow [data-lucide]{width:1.05rem;height:1.05rem;transition:transform var(--transition);}
.link-arrow:hover [data-lucide]{transform:translateX(4px);}

/* ---------- Chips / pills ---------- */
.pill{display:inline-flex;align-items:center;gap:.5rem;background:var(--color-gold-soft);color:var(--color-gold-hover);
  font-weight:700;font-size:var(--text-xs);padding:.4rem .95rem;border-radius:var(--radius-full);}
.tag{display:inline-block;font-size:var(--text-xs);font-weight:700;color:var(--color-primary);
  background:var(--color-primary-soft);padding:.28rem .75rem;border-radius:var(--radius-full);}
.tag-gold{color:var(--color-gold-hover);background:var(--color-gold-soft);}

/* ---------- Pillars (home) ---------- */
.pillars{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-6);}
.pillar{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);
  padding:var(--space-8);transition:all var(--transition);display:flex;flex-direction:column;}
.pillar:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--color-border);}
.pillar-num{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);color:var(--color-gold);opacity:.85;}
.pillar h3{font-size:var(--text-lg);margin:var(--space-3) 0;}
.pillar>p{color:var(--color-text-muted);font-size:var(--text-sm);margin-bottom:var(--space-5);}
.pillar ul{display:grid;gap:.6rem;margin-bottom:var(--space-6);}
.pillar li{display:flex;gap:.55rem;font-size:var(--text-sm);color:var(--color-text);}
.pillar li [data-lucide]{width:1.1rem;height:1.1rem;color:var(--color-primary);flex:none;margin-top:.15rem;}
.pillar .link-arrow{margin-top:auto;}

/* ---------- Generic card grid ---------- */
.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(255px,100%),1fr));gap:var(--space-6);}
/* Six-card sets read better three-and-three than four-and-two, and the wider
   minimum gives each card room for a real sentence. */
#leave .card-grid{grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));}
.card{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);
  padding:var(--space-6);transition:all var(--transition);}
.card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:var(--color-border);}
.card h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin:.5rem 0;}
.card p{font-size:var(--text-sm);color:var(--color-text-muted);}
.card .card-ico{width:48px;height:48px;border-radius:var(--radius-lg);display:grid;place-items:center;
  background:var(--color-primary-soft);color:var(--color-primary);margin-bottom:var(--space-4);}
.card .card-ico [data-lucide]{width:1.5rem;height:1.5rem;}

/* ---------- Navy product band (home tools) ---------- */
.band-navy{background:var(--color-band-deep);color:#fff;}
.band-navy .eyebrow{color:var(--color-accent-bright);}
.band-navy .eyebrow::before{background:var(--color-gold);}
.band-navy h2,.band-navy h3{color:#fff;}
.band-navy .sec-head p{color:rgba(255,255,255,.72);}
.tools{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-5);}
.tool-card{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-xl);
  padding:var(--space-6);transition:all var(--transition);display:flex;flex-direction:column;}
.tool-card:hover{background:rgba(255,255,255,.1);transform:translateY(-4px);}
.tool-logo{height:50px;margin-bottom:var(--space-5);display:flex;align-items:center;}
.tool-logo img{max-height:50px;width:auto;object-fit:contain;}
.tool-name{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);color:#fff;margin-bottom:.3rem;}
.tool-tag{font-size:var(--text-xs);color:var(--color-accent-bright);font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:var(--space-4);}
.tool-card p{font-size:var(--text-sm);color:rgba(255,255,255,.78);margin-bottom:var(--space-5);}
.tool-card .stats{display:flex;gap:var(--space-5);margin-bottom:var(--space-5);}
.tool-card .stats b{font-family:var(--font-display);font-size:var(--text-lg);color:#fff;display:block;}
.tool-card .stats small{font-size:var(--text-xs);color:rgba(255,255,255,.6);}
.tool-card .link-arrow{color:var(--color-accent-bright);margin-top:auto;}

/* ---------- Process steps ---------- */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-6);counter-reset:s;}
.step{position:relative;padding-top:var(--space-10);}
.step::before{counter-increment:s;content:counter(s,decimal-leading-zero);font-family:var(--font-display);
  font-weight:800;font-size:var(--text-2xl);color:var(--color-gold);opacity:.9;position:absolute;top:0;left:0;}
.step h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin-bottom:.5rem;}
.step p{font-size:var(--text-sm);color:var(--color-text-muted);}
.note-callout{margin-top:var(--space-10);background:var(--color-primary-soft);border-radius:var(--radius-xl);
  padding:var(--space-6) var(--space-8);display:flex;gap:var(--space-4);align-items:center;}
.note-callout [data-lucide]{width:2rem;height:2rem;color:var(--color-primary);flex:none;}
.note-callout p{font-weight:600;color:var(--color-primary-active);}
[data-theme="dark"] .note-callout p{color:var(--color-primary-active);}

/* ---------- Founder ---------- */
.founder{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-2xl);
  padding:clamp(var(--space-8),5vw,var(--space-16));display:grid;grid-template-columns:auto 1fr;gap:var(--space-10);align-items:center;}
.founder-photo{width:160px;height:160px;border-radius:var(--radius-2xl);object-fit:cover;flex:none;box-shadow:var(--shadow-md);}
.founder-photo.placeholder{background:linear-gradient(140deg,var(--color-primary),var(--color-navy));display:grid;place-items:center;
  color:#fff;font-family:var(--font-display);font-weight:800;font-size:var(--text-2xl);}
.founder blockquote{font-family:var(--font-display);font-weight:500;font-size:var(--text-lg);line-height:1.35;letter-spacing:-.01em;margin-bottom:var(--space-5);}
.founder cite{font-style:normal;font-weight:700;color:var(--color-text);}
.founder cite span{display:block;font-weight:400;font-size:var(--text-sm);color:var(--color-text-muted);margin-top:.25rem;}

/* ---------- CTA band ---------- */
.cta-band{background:linear-gradient(135deg,#5b27ce 0%,#4733d6 55%,#3d53e0 100%);border-radius:var(--radius-2xl);padding:clamp(var(--space-10),6vw,var(--space-20));
  text-align:center;color:#fff;position:relative;overflow:hidden;}
.cta-band::after{content:"";position:absolute;inset:0;background:radial-gradient(700px circle at 50% 120%,rgba(3,247,235,.22),transparent 60%);}
.cta-band>*{position:relative;}
.cta-band h2{color:#fff;font-size:var(--text-2xl);margin-bottom:var(--space-4);}
.cta-band p{color:rgba(255,255,255,.9);max-width:46ch;margin:0 auto var(--space-8);}

/* ---------- Stats strip ---------- */
.stats-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-6);text-align:center;}
.stat-item b{font-family:var(--font-display);font-weight:800;font-size:var(--text-2xl);color:var(--color-primary);display:block;line-height:1;}
.stat-item span{font-size:var(--text-sm);color:var(--color-text-muted);margin-top:var(--space-2);display:block;}

/* =====================================================================
   PRODUCT / TOOL PAGES
   ===================================================================== */
.prod-hero{display:grid;grid-template-columns:1.05fr .95fr;gap:var(--space-12);align-items:center;}
.prod-logo-lg{height:68px;margin-bottom:var(--space-5);display:flex;align-items:center;}
.prod-logo-lg img{max-height:68px;width:auto;}
.prod-tagline{font-size:var(--text-xl);color:var(--color-text);font-family:var(--font-display);font-weight:800;margin-bottom:var(--space-4);max-width:20ch;}

/* video embed (lazy YouTube) */
.video-embed{position:relative;aspect-ratio:16/9;border-radius:var(--radius-xl);overflow:hidden;box-shadow:var(--shadow-lg);
  background:var(--color-navy);cursor:pointer;display:block;}
.video-embed.as-link{text-decoration:none;}
.video-embed img.thumb{width:100%;height:100%;object-fit:cover;opacity:.82;}
.video-embed::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 45%,rgba(0,0,0,.15),rgba(0,0,0,.45));}
.video-embed .play-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:2;
  width:78px;height:78px;border-radius:50%;background:rgba(255,255,255,.92);display:grid;place-items:center;
  transition:all var(--transition);box-shadow:var(--shadow-lg);}
.video-embed:hover .play-btn{transform:translate(-50%,-50%) scale(1.08);background:#fff;}
.video-embed .play-btn [data-lucide]{width:2rem;height:2rem;color:var(--color-primary);margin-left:4px;}
.video-embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}
.video-cap{position:absolute;bottom:var(--space-4);left:var(--space-5);font-size:var(--text-xs);color:rgba(255,255,255,.85);z-index:2;font-weight:600;}

/* feature carousel */
.carousel{position:relative;}
.carousel-track{display:flex;gap:var(--space-5);overflow-x:auto;scroll-snap-type:x mandatory;
  scroll-behavior:smooth;padding-bottom:var(--space-4);-ms-overflow-style:none;scrollbar-width:none;}
.carousel-track::-webkit-scrollbar{display:none;}
.carousel-track>*{scroll-snap-align:start;flex:0 0 clamp(260px,80%,340px);}
.feature-card{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);
  padding:var(--space-6);height:100%;display:flex;flex-direction:column;}
.feature-card .f-ico{width:52px;height:52px;border-radius:var(--radius-lg);display:grid;place-items:center;
  background:var(--color-primary-soft);color:var(--color-primary);margin-bottom:var(--space-4);}
.feature-card .f-ico [data-lucide]{width:1.6rem;height:1.6rem;}
.feature-card h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin-bottom:.5rem;}
.feature-card p{font-size:var(--text-sm);color:var(--color-text-muted);}
.carousel-nav{display:flex;gap:.5rem;justify-content:flex-end;margin-top:var(--space-4);}
.carousel-nav button{width:44px;height:44px;border-radius:var(--radius-full);border:1px solid var(--color-border);
  display:grid;place-items:center;color:var(--color-text);transition:all var(--transition);background:var(--color-surface);}
.carousel-nav button:hover{background:var(--color-primary);color:#fff;border-color:var(--color-primary);}

/* feature grid (static infographic) */
.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-5);}
.info-card{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-lg);padding:var(--space-6);}
.info-card [data-lucide]{width:1.7rem;height:1.7rem;color:var(--color-primary);margin-bottom:var(--space-3);}
.info-card h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin-bottom:.4rem;}
.info-card p{font-size:var(--text-sm);color:var(--color-text-muted);}

/* use-cases */
.usecase-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(260px,100%),1fr));gap:var(--space-5);}
.usecase{background:var(--color-surface);border-left:3px solid var(--color-gold);border-radius:var(--radius-md);padding:var(--space-5) var(--space-6);}
.usecase h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin-bottom:.4rem;}
.usecase p{font-size:var(--text-sm);color:var(--color-text-muted);}

/* =====================================================================
   PRICING
   ===================================================================== */
.price-toggle{display:inline-flex;align-items:center;gap:.25rem;background:var(--color-surface-offset);
  border-radius:var(--radius-full);padding:.35rem;margin:0 auto var(--space-10);}
.price-toggle button{padding:.55rem 1.4rem;border-radius:var(--radius-full);font-weight:700;font-size:var(--text-sm);
  color:var(--color-text-muted);transition:all var(--transition);}
.price-toggle button.active{background:var(--color-primary);color:#fff;box-shadow:var(--shadow-sm);}
[data-theme="dark"] .price-toggle button.active{color:var(--color-text-inverse);}

.plans{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:var(--space-5);align-items:stretch;}
.plan{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);
  padding:var(--space-8) var(--space-6);position:relative;transition:all var(--transition);display:flex;flex-direction:column;}
.plan:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);}
.plan.featured{border-color:var(--color-gold);box-shadow:var(--shadow-gold);}
.plan.featured::before{content:"Best Value";position:absolute;top:-13px;left:50%;transform:translateX(-50%);
  background:var(--color-gold);color:var(--color-on-accent);font-size:var(--text-xs);font-weight:800;padding:.35rem 1rem;border-radius:var(--radius-full);white-space:nowrap;letter-spacing:.03em;}
.plan h4{font-family:var(--font-display);font-size:var(--text-lg);margin-bottom:.3rem;}
.plan .plan-term{color:var(--color-text-muted);font-size:var(--text-sm);margin-bottom:var(--space-5);}
.plan .price{font-family:var(--font-display);font-weight:800;font-size:var(--text-2xl);color:var(--color-text);line-height:1.05;}
.plan .price .cur{font-size:var(--text-lg);vertical-align:top;}
.plan .price-gst{font-size:var(--text-xs);color:var(--color-text-faint);font-weight:600;margin-top:.35rem;margin-bottom:var(--space-5);}
.plan ul{display:grid;gap:.65rem;text-align:left;margin-bottom:var(--space-6);}
.plan li{display:flex;gap:.5rem;font-size:var(--text-sm);align-items:flex-start;}
.plan li [data-lucide]{width:1.05rem;height:1.05rem;color:var(--color-primary);flex:none;margin-top:.2rem;}
.plan .btn{margin-top:auto;}
.plan.enterprise{background:linear-gradient(150deg,var(--color-navy),var(--color-primary-active));color:#fff;border:none;}
.plan.enterprise h4,.plan.enterprise .price{color:#fff;}
.plan.enterprise .plan-term,.plan.enterprise li{color:rgba(255,255,255,.85);}
.plan.enterprise li [data-lucide]{color:var(--color-accent-bright);}
.pay-redirect-note{display:flex;gap:.5rem;align-items:center;justify-content:center;font-size:var(--text-sm);
  color:var(--color-text-muted);margin-top:var(--space-6);text-align:center;}
.pay-redirect-note [data-lucide]{width:1.1rem;height:1.1rem;color:var(--color-primary);flex:none;}

/* =====================================================================
   FAQ / accordion
   ===================================================================== */
.accordion{display:grid;gap:var(--space-3);max-width:820px;margin-inline:auto;}
.acc-item{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-lg);overflow:hidden;}
.acc-item summary{padding:var(--space-5) var(--space-6);font-family:var(--font-body);font-weight:700;font-size:var(--text-base);
  cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);}
.acc-item summary::-webkit-details-marker{display:none;}
.acc-item summary .chev{transition:transform var(--transition);flex:none;color:var(--color-primary);}
.acc-item[open] summary .chev{transform:rotate(180deg);}
.acc-body{padding:0 var(--space-6) var(--space-5);color:var(--color-text-muted);font-size:var(--text-sm);}

/* =====================================================================
   EDUCATION — course carousel + course rows
   ===================================================================== */
.course-slide{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);
  overflow:hidden;height:100%;display:flex;flex-direction:column;transition:all var(--transition);}
.course-slide:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);}
.course-thumb{aspect-ratio:16/10;background:linear-gradient(140deg,var(--color-primary),var(--color-navy));
  position:relative;display:grid;place-items:center;color:#fff;overflow:hidden;}
.course-thumb img{width:100%;height:100%;object-fit:cover;}
.course-thumb .thumb-ico{font-size:2.6rem;}
.course-slide-body{padding:var(--space-6);display:flex;flex-direction:column;flex-grow:1;}
.course-slide-body h4{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);margin:.5rem 0;}
.course-slide-body p{font-size:var(--text-sm);color:var(--color-text-muted);margin-bottom:var(--space-4);flex-grow:1;}
.course-meta{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;color:var(--color-text-muted);font-size:var(--text-xs);margin-bottom:var(--space-5);}
.course-meta [data-lucide]{width:.95rem;height:.95rem;margin-left:.5rem;}
.course-meta [data-lucide]:first-child{margin-left:0;}
.course-slide-actions{display:flex;gap:.5rem;margin-top:auto;flex-wrap:wrap;}

/* internship track cards */

/* =====================================================================
   COURSE DETAIL PAGE
   ===================================================================== */
.detail-layout{display:grid;grid-template-columns:1fr 340px;gap:var(--space-10);align-items:start;}
.timeline{display:grid;gap:0;margin:var(--space-6) 0;}
.timeline-item{position:relative;padding:0 0 var(--space-6) var(--space-8);border-left:2px solid var(--color-divider);}
.timeline-item:last-child{border-left-color:transparent;padding-bottom:0;}
.timeline-item::before{content:"";position:absolute;left:-7px;top:2px;width:12px;height:12px;border-radius:50%;background:var(--color-gold);}
.timeline-item h5{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin-bottom:.25rem;}
.timeline-item p{font-size:var(--text-sm);color:var(--color-text-muted);}
.outcomes{display:grid;gap:.7rem;margin:var(--space-5) 0;}
.outcomes li{display:flex;gap:.6rem;font-size:var(--text-sm);align-items:flex-start;}
.outcomes li [data-lucide]{width:1.15rem;height:1.15rem;color:var(--color-primary);flex:none;margin-top:.15rem;}
.instructor-card{display:flex;gap:var(--space-4);align-items:flex-start;background:var(--color-surface);
  border:1px solid var(--color-divider);border-radius:var(--radius-lg);padding:var(--space-6);margin-top:var(--space-5);}
.instructor-card .ins-photo{width:64px;height:64px;border-radius:var(--radius-full);object-fit:cover;flex:none;
  background:linear-gradient(140deg,var(--color-primary),var(--color-navy));display:grid;place-items:center;color:#fff;font-family:var(--font-display);font-weight:800;}
.instructor-card h5{font-family:var(--font-body);font-weight:700;margin-bottom:.2rem;}
.instructor-card p{font-size:var(--text-sm);color:var(--color-text-muted);}
.enroll-sidebar{position:sticky;top:calc(var(--header-h) + 1rem);background:var(--color-surface);
  border:1px solid var(--color-divider);border-radius:var(--radius-xl);padding:var(--space-6);box-shadow:var(--shadow-sm);}
.enroll-sidebar h4{font-family:var(--font-display);font-size:var(--text-lg);margin-bottom:var(--space-4);}
.enroll-sidebar .es-row{display:flex;justify-content:space-between;font-size:var(--text-sm);padding:.5rem 0;border-bottom:1px solid var(--color-divider);}
.enroll-sidebar .es-row span:first-child{color:var(--color-text-muted);}
.enroll-sidebar .es-row span:last-child{font-weight:600;}

/* =====================================================================
   CONSULTANCY — brand panels + secure workflow
   ===================================================================== */
.split{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-8);align-items:start;}
.brand-panel{border-radius:var(--radius-2xl);padding:var(--space-10);color:#fff;position:relative;overflow:hidden;}
.brand-panel.biometrik{background:linear-gradient(140deg,var(--color-navy),var(--color-primary));}
.brand-panel.breedforward{background:linear-gradient(140deg,var(--color-primary-active),var(--color-navy));}
.brand-panel .brandlogo{margin-bottom:var(--space-5);}
.brand-panel .brandlogo img{max-height:46px;width:auto;}
.brand-panel h3{color:#fff;font-size:var(--text-xl);margin-bottom:var(--space-4);}
.brand-panel p{color:rgba(255,255,255,.85);font-size:var(--text-sm);margin-bottom:var(--space-6);}
.brand-panel ul{display:grid;gap:.65rem;margin-bottom:var(--space-6);}
.brand-panel li{display:flex;gap:.55rem;font-size:var(--text-sm);color:rgba(255,255,255,.94);align-items:flex-start;}
.brand-panel li [data-lucide]{width:1.1rem;height:1.1rem;color:var(--color-accent-bright);flex:none;margin-top:.15rem;}

.workflow{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--space-4);counter-reset:w;position:relative;}
.wf-step{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-lg);
  padding:var(--space-6) var(--space-5);text-align:center;position:relative;}
.wf-step .wf-ico{width:52px;height:52px;border-radius:var(--radius-full);display:grid;place-items:center;margin:0 auto var(--space-4);
  background:var(--color-primary-soft);color:var(--color-primary);}
.wf-step .wf-ico [data-lucide]{width:1.5rem;height:1.5rem;}
.wf-step .wf-num{counter-increment:w;content:counter(w);position:absolute;top:.75rem;right:1rem;font-family:var(--font-display);
  font-weight:800;color:var(--color-gold);font-size:var(--text-base);}
.wf-step h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-sm);margin-bottom:.4rem;}
.wf-step p{font-size:var(--text-xs);color:var(--color-text-muted);line-height:1.4;}
.privacy-banner{display:flex;gap:var(--space-4);align-items:center;background:var(--color-primary);color:#fff;
  border-radius:var(--radius-xl);padding:var(--space-6) var(--space-8);}
.privacy-banner [data-lucide]{width:2.2rem;height:2.2rem;color:#fff;flex:none;}
.privacy-banner p{color:rgba(255,255,255,.95);font-weight:600;}

/* who we serve */
.serve-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(220px,100%),1fr));gap:var(--space-5);}
.serve-card{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-lg);
  padding:var(--space-6);text-align:center;transition:all var(--transition);}
.serve-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);}
.serve-card [data-lucide]{width:1.8rem;height:1.8rem;color:var(--color-primary);margin:0 auto var(--space-3);}
.serve-card h4{font-family:var(--font-body);font-weight:700;font-size:var(--text-base);margin-bottom:.35rem;}
.serve-card p{font-size:var(--text-sm);color:var(--color-text-muted);}

/* =====================================================================
   FORMS
   ===================================================================== */
.form-grid{display:grid;gap:var(--space-4);}
.field{display:flex;flex-direction:column;gap:.4rem;}
.field label{font-size:var(--text-sm);font-weight:600;}
.field input,.field select,.field textarea{padding:.75rem .85rem;border:1px solid var(--color-border);
  border-radius:var(--radius-md);background:var(--color-surface-2);font-size:var(--text-base);transition:border var(--transition);}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-soft);}
.field .req{color:var(--color-gold-hover);}
fieldset.field-set{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);}
fieldset.field-set legend{padding:0 .4rem;font-size:var(--text-sm);font-weight:600;}
.radio-row{display:flex;gap:var(--space-4);flex-wrap:wrap;}
.radio-row label{display:inline-flex;align-items:center;gap:.5rem;font-weight:400;font-size:var(--text-sm);}
.contact-panel{background:linear-gradient(140deg,var(--color-navy),var(--color-primary));color:#fff;border-radius:var(--radius-2xl);padding:var(--space-10);}
.contact-panel h3{color:#fff;}
.contact-panel p{color:rgba(255,255,255,.85);}
.contact-panel .field input,.contact-panel .field textarea,.contact-panel .field select{
  background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3);color:#fff;}
.contact-panel .field input::placeholder,.contact-panel .field textarea::placeholder{color:rgba(255,255,255,.6);}
.contact-panel .field label{color:#fff;}

/* =====================================================================
   MODAL (enrollment)
   ===================================================================== */
.modal-overlay{position:fixed;inset:0;background:rgba(10,10,22,.66);backdrop-filter:blur(4px);
  opacity:0;pointer-events:none;transition:opacity .3s ease;z-index:250;display:grid;place-items:center;padding:var(--space-4);}
.modal-overlay.open{opacity:1;pointer-events:auto;}
.modal{background:var(--color-bg);border-radius:var(--radius-2xl);width:min(560px,100%);max-height:92dvh;overflow-y:auto;
  box-shadow:var(--shadow-lg);transform:translateY(24px) scale(.98);transition:transform .32s cubic-bezier(.16,1,.3,1);}
.modal-overlay.open .modal{transform:none;}
.modal-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4);padding:var(--space-8) var(--space-8) var(--space-4);}
.modal-head h3{font-family:var(--font-display);font-size:var(--text-xl);}
.modal-head p{font-size:var(--text-sm);color:var(--color-text-muted);margin-top:.35rem;}
.modal-body{padding:0 var(--space-8) var(--space-8);}
.pay-note{display:flex;gap:.6rem;align-items:flex-start;font-size:var(--text-sm);color:var(--color-text-muted);
  background:var(--color-surface-offset);padding:var(--space-4);border-radius:var(--radius-md);margin-top:var(--space-4);}
.pay-note [data-lucide]{width:1.1rem;height:1.1rem;color:var(--color-primary);flex:none;margin-top:.15rem;}
.modal-actions{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:var(--space-6);}
.enroll-success{text-align:center;padding:var(--space-6) 0;}
.enroll-success .success-ico{width:64px;height:64px;color:var(--color-primary);margin:0 auto var(--space-4);}
.enroll-success h3{font-family:var(--font-display);font-size:var(--text-xl);margin-bottom:var(--space-3);}
.enroll-success p{color:var(--color-text-muted);font-size:var(--text-sm);margin-bottom:var(--space-6);}
.pay-choice{display:grid;gap:.6rem;}

/* =====================================================================
   RESPONSIVE (components)
   ===================================================================== */
@media(max-width:960px){
  .pillars,.tools,.feature-grid{grid-template-columns:1fr 1fr;}
  .steps{grid-template-columns:1fr 1fr;}
  .prod-hero,.split{grid-template-columns:1fr;}
  .founder{grid-template-columns:1fr;gap:var(--space-6);text-align:center;}
  .founder-photo{margin-inline:auto;}
  .stats-strip{grid-template-columns:1fr 1fr;}
  .workflow{grid-template-columns:1fr 1fr;}
  .detail-layout{grid-template-columns:1fr;}
  .enroll-sidebar{position:static;}
}
@media(max-width:560px){
  .pillars,.tools,.feature-grid,.steps,.stats-strip,.plans{grid-template-columns:1fr;}
  .workflow{grid-template-columns:1fr;}
  .carousel-track>*{flex-basis:85%;}
}

/* ---- Course card: price + cohort (added with the courses-page build) ---- */
.course-price{display:flex;align-items:baseline;gap:.4rem;margin-top:var(--space-3);}
.course-price b{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);color:var(--color-text);}
.course-price small{font-size:var(--text-xs);color:var(--color-text-faint);}
.course-price .price-tbc{font-size:var(--text-sm);font-weight:700;color:var(--color-primary);}
.course-cohort{display:flex;align-items:center;gap:.4rem;margin-top:.35rem;margin-bottom:var(--space-4);
  font-size:var(--text-xs);font-weight:600;color:var(--color-text-muted);}
.course-cohort [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);flex:none;}


/* =====================================================================
   VISUAL REFINEMENT PASS — homepage first, applies site-wide
   Pure CSS. No new image assets, no added page weight.
   ===================================================================== */

/* ---- Hero: layered brand mesh + a fine data grid, instead of two flat
        radial washes. The grid echoes a plot axis without being literal. */
.hero::before{
  background:
    radial-gradient(52% 62% at 88% -12%, color-mix(in srgb, var(--color-brand-violet) 22%, transparent) 0%, transparent 62%),
    radial-gradient(44% 54% at -8% 8%,   color-mix(in srgb, var(--color-accent-bright) 16%, transparent) 0%, transparent 58%),
    radial-gradient(60% 70% at 40% 120%, color-mix(in srgb, var(--color-indigo-bright) 14%, transparent) 0%, transparent 60%);
}
.hero::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background-image:
    linear-gradient(to right, color-mix(in srgb, var(--color-text) 5%, transparent) 1px, transparent 1px),
    linear-gradient(to bottom, color-mix(in srgb, var(--color-text) 5%, transparent) 1px, transparent 1px);
  background-size:64px 64px;
  mask-image:radial-gradient(70% 70% at 30% 40%, #000 0%, transparent 75%);
  -webkit-mask-image:radial-gradient(70% 70% at 30% 40%, #000 0%, transparent 75%);
}
.hero-grid{grid-template-columns:1.1fr .9fr;gap:clamp(var(--space-8),5vw,var(--space-16));}
.hero h1{letter-spacing:-.033em;line-height:1.02;}
.hero-lead{max-width:44ch;}

/* ---- Eyebrow mark: a small gradient dot with a soft ring, replacing the
        dash. Reads as a deliberate marker rather than a stray line, and
        applies to every section header across the site. */
.eyebrow{gap:.7rem;}
.eyebrow::before{
  width:8px;height:8px;flex:none;border-radius:50%;
  background:linear-gradient(135deg,var(--color-primary),var(--color-accent-bright));
  box-shadow:0 0 0 4px color-mix(in srgb, var(--color-primary) 14%, transparent);
}
.band-navy .eyebrow::before{
  background:linear-gradient(135deg,var(--color-accent-bright),var(--color-magenta-bright));
  box-shadow:0 0 0 4px color-mix(in srgb, var(--color-accent-bright) 18%, transparent);
}

/* ---- Section headings: tighter, more confident */
.sec-head h2{letter-spacing:-.028em;line-height:1.06;}
.sec-head{max-width:46rem;}
.sec-head p{max-width:54ch;}
.sec-head.center p{margin-inline:auto;}

/* ---- Capability cards: the page's signature component.
        Large ghosted numeral, gradient icon chip, always-on accent edge. */
.cap{
  border-color:color-mix(in srgb, var(--color-text) 8%, transparent);
  box-shadow:0 1px 2px color-mix(in srgb, var(--color-text) 4%, transparent);
  overflow:hidden;
}
.cap::before{
  opacity:1;height:3px;
  background:linear-gradient(90deg,var(--color-primary),var(--color-indigo-bright) 55%,var(--color-accent-bright));
  transform:scaleX(0);transform-origin:left;
  transition:transform .5s cubic-bezier(.16,1,.3,1);
}
.cap:hover::before{transform:scaleX(1);}
.cap:hover{
  transform:translateY(-6px);
  border-color:color-mix(in srgb, var(--color-primary) 30%, transparent);
  box-shadow:0 24px 50px color-mix(in srgb, var(--color-primary) 16%, transparent),
             0 6px 16px color-mix(in srgb, var(--color-text) 8%, transparent);
}
.cap .pillar-num{
  font-size:clamp(3.2rem,5vw,4.6rem);line-height:1;
  top:var(--space-4);right:var(--space-5);
  color:var(--color-primary);opacity:.10;letter-spacing:-.04em;
  transition:opacity var(--transition);pointer-events:none;
}
.cap:hover .pillar-num{opacity:.18;}
.cap-ico{
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo-bright));
  color:#fff;box-shadow:0 6px 16px color-mix(in srgb, var(--color-primary) 30%, transparent);
}
.cap-sub{color:var(--color-text);opacity:.9;}
.cap li [data-lucide]{color:var(--color-accent-bright);}
[data-theme="light"] .cap li [data-lucide],:root .cap li [data-lucide]{color:var(--color-teal);}

/* ---- Value cards: deliberately LIGHTER than .cap so two card grids on one
        page don't read as the same component twice. */
.card{
  background:transparent;border:none;box-shadow:none;
  padding:var(--space-5) var(--space-5) var(--space-5) 0;
  border-top:1px solid var(--color-divider);border-radius:0;
}
.card:hover{transform:none;box-shadow:none;border-top-color:var(--color-primary);}
.card .card-ico{
  width:42px;height:42px;border-radius:var(--radius-md);
  background:color-mix(in srgb, var(--color-primary) 12%, transparent);
  color:var(--color-primary);box-shadow:none;margin-bottom:var(--space-3);
}
.card .card-ico [data-lucide]{width:1.3rem;height:1.3rem;}
.card h4{font-size:var(--text-base);letter-spacing:-.01em;}
/* Cards that are links (404 page) keep an affordance */
a.card:hover h4{color:var(--color-primary);}

/* ---- CTA band: dot-grid texture so the gradient has something to sit on */
.cta-band::before{
  content:"";position:absolute;inset:0;
  background-image:radial-gradient(circle, rgba(255,255,255,.16) 1px, transparent 1px);
  background-size:22px 22px;
  mask-image:radial-gradient(80% 80% at 50% 0%, #000 0%, transparent 70%);
  -webkit-mask-image:radial-gradient(80% 80% at 50% 0%, #000 0%, transparent 70%);
}
.cta-band h2{letter-spacing:-.028em;}

/* ---- Buttons: a little more presence */
.btn-primary{box-shadow:0 6px 18px color-mix(in srgb, var(--color-primary) 30%, transparent);}
.btn-primary:hover{box-shadow:0 10px 26px color-mix(in srgb, var(--color-primary) 38%, transparent);transform:translateY(-2px);}

/* ---- Brand carousel: lift it so it reads as a framed object */
.brand-carousel{box-shadow:0 30px 70px color-mix(in srgb, var(--color-text) 16%, transparent),
                           0 8px 20px color-mix(in srgb, var(--color-text) 8%, transparent);}

@media (prefers-reduced-motion:reduce){
  .cap,.cap::before,.btn-primary{transition:none;}
  .cap:hover{transform:none;}
}

/* =====================================================================
   TAGLINE CHIP — "Innovate · Educate · Transform"
   Each word takes one brand colour, so the tagline carries the palette
   instead of sitting in a single flat pill.
   ===================================================================== */
.tagline-chip{
  display:inline-flex;align-items:center;gap:.5rem;
  font-family:var(--font-display);font-weight:800;
  font-size:var(--text-xs);letter-spacing:.14em;text-transform:uppercase;
  padding:.5rem 1.05rem;border-radius:var(--radius-full);
  background:color-mix(in srgb, var(--color-surface) 70%, transparent);
  border:1px solid color-mix(in srgb, var(--color-primary) 18%, transparent);
  box-shadow:0 2px 10px color-mix(in srgb, var(--color-primary) 10%, transparent);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
}
.tagline-chip [data-lucide]{width:1rem;height:1rem;color:var(--color-green);}
[data-theme="dark"] .tagline-chip [data-lucide]{color:var(--color-green);}
.tagline-chip b{font-weight:800;}
.tagline-chip b:nth-of-type(1){color:var(--color-primary);}       /* violet  */
.tagline-chip b:nth-of-type(2){color:var(--color-indigo);}        /* indigo  */
.tagline-chip b:nth-of-type(3){color:var(--color-teal);}          /* teal    */
.tagline-chip s{width:4px;height:4px;border-radius:50%;text-decoration:none;
  background:var(--color-text-faint);opacity:.6;flex:none;}

/* =====================================================================
   PILLAR SHOWCASE — one large panel driven by a segmented control.
   Replaces three small cards. The media slot takes an <img> or a
   .video-embed[data-yt], so a panel can become a video at any time.
   ===================================================================== */
.showcase{margin-top:var(--space-10);}

.sc-tabs{
  display:inline-flex;gap:.25rem;padding:.35rem;margin:0 auto var(--space-8);
  background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-full);box-shadow:var(--shadow-sm);
}
.sc-tabs{display:flex;width:max-content;margin-inline:auto;max-width:100%;overflow-x:auto;scrollbar-width:none;}
.sc-tabs::-webkit-scrollbar{display:none;}
.sc-tab{
  display:inline-flex;align-items:center;gap:.5rem;white-space:nowrap;
  padding:.7rem 1.5rem;border-radius:var(--radius-full);
  font-family:var(--font-display);font-weight:800;font-size:var(--text-base);
  color:var(--color-text-muted);transition:all var(--transition);
}
.sc-tab .sc-n{font-size:var(--text-xs);opacity:.55;letter-spacing:.04em;}
.sc-tab:hover{color:var(--color-text);}
.sc-tab.is-active{
  color:#fff;
  background:linear-gradient(135deg,var(--color-primary),var(--color-indigo));
  box-shadow:0 6px 18px color-mix(in srgb, var(--color-primary) 34%, transparent);
}
[data-theme="dark"] .sc-tab.is-active{color:var(--color-text-inverse);}
.sc-tab.is-active .sc-n{opacity:.8;}

.sc-stage{position:relative;}
.sc-panel{
  display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(var(--space-6),4vw,var(--space-12));
  align-items:center;
  background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-2xl);overflow:hidden;
  padding:clamp(var(--space-5),2.5vw,var(--space-8));
  box-shadow:0 18px 44px color-mix(in srgb, var(--color-text) 8%, transparent);
}
.sc-panel[hidden]{display:none;}
.sc-panel.is-active{animation:scFade .45s cubic-bezier(.16,1,.3,1) both;}
@keyframes scFade{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:none;}}

.sc-media{border-radius:var(--radius-xl);overflow:hidden;position:relative;
  background:var(--color-surface-offset);box-shadow:0 10px 30px color-mix(in srgb, var(--color-text) 12%, transparent);}
.sc-media img{width:100%;height:100%;aspect-ratio:3/2;object-fit:cover;display:block;}
.sc-media .video-embed{border-radius:var(--radius-xl);box-shadow:none;}

.sc-body{padding-block:var(--space-2);}
.sc-kicker{
  display:inline-flex;align-items:center;gap:.45rem;margin-bottom:var(--space-4);
  font-size:var(--text-xs);font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--color-primary);
  background:color-mix(in srgb, var(--color-primary) 10%, transparent);
  padding:.4rem .85rem;border-radius:var(--radius-full);
}
.sc-kicker [data-lucide]{width:1rem;height:1rem;}
.sc-body h3{font-size:var(--text-xl);letter-spacing:-.025em;line-height:1.12;margin-bottom:var(--space-4);}
.sc-body>p{color:var(--color-text-muted);margin-bottom:var(--space-5);}
.sc-body ul{display:grid;gap:.7rem;margin-bottom:var(--space-6);}
.sc-body li{display:flex;gap:.6rem;align-items:flex-start;font-size:var(--text-sm);color:var(--color-text-muted);}
.sc-body li b{color:var(--color-text);font-weight:700;}
.sc-body li [data-lucide]{width:1.15rem;height:1.15rem;color:var(--color-teal);flex:none;margin-top:.15rem;}
[data-theme="dark"] .sc-body li [data-lucide]{color:var(--color-accent-bright);}

@media(max-width:900px){
  .sc-panel{grid-template-columns:1fr;}
  .sc-tab{padding:.6rem 1.05rem;font-size:var(--text-sm);}
}
@media (prefers-reduced-motion:reduce){ .sc-panel.is-active{animation:none;} }

/* =====================================================================
   BRAND DUOTONE — unifies the decorative imagery with the palette
   The 3D brand renders were produced in the old forest-green / harvest-gold
   scheme and clashed with the violet/cyan brand. Rather than regenerate
   them, they are recoloured in the browser: greyscale base + a navy ->
   violet -> cyan gradient blended in 'color' mode. Costs nothing, applies
   everywhere at once, and is removed by deleting this block if the images
   are ever replaced with on-brand originals.

   IMPORTANT: scientific figures (.plot-carousel, .plot-wall) are EXCLUDED.
   Those are data, and recolouring a heatmap or a Manhattan plot would
   misrepresent it.
   ===================================================================== */
.brand-carousel:not(.plot-carousel) .bslide,
.sc-media{isolation:isolate;}

.brand-carousel:not(.plot-carousel) .bslide>img,
.sc-media>img{filter:grayscale(1) contrast(1.03);}

.brand-carousel:not(.plot-carousel) .bslide::after,
.sc-media::after{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:2;
  background:linear-gradient(140deg,#01284F 0%,#8C52FF 55%,#03F7EB 100%);
  mix-blend-mode:color;opacity:.85;
}
/* keep the caption and controls above the colour layer */
.brand-carousel .bslide-body{z-index:3;}
.brand-carousel .bcar-btn,.brand-carousel .bcar-dots{z-index:6;}

/* Product-page hero art gets the same treatment for consistency */
.prod-hero img[src*="-hero"],
.prod-hero img[src*="brand-"]{filter:grayscale(1) contrast(1.03);}
.prod-hero .hero-visual,.prod-hero figure{isolation:isolate;position:relative;}

/* =====================================================================
   VALUE CARDS — restored presence
   These were deliberately flattened while the homepage had two card grids
   that looked alike. The capability cards have since become the showcase,
   so the differentiation problem is gone — and flat cards on the near-white
   default background were reading as a spec list rather than a designed row.
   They now carry a real surface, so they work on ANY background.
   ===================================================================== */
.card{
  background:var(--color-surface);
  border:1px solid color-mix(in srgb, var(--color-text) 9%, transparent);
  border-radius:var(--radius-xl);border-top-width:1px;
  padding:var(--space-6);
  box-shadow:0 1px 2px color-mix(in srgb, var(--color-text) 4%, transparent);
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);
}
.card:hover{
  transform:translateY(-4px);
  border-color:color-mix(in srgb, var(--color-primary) 28%, transparent);
  box-shadow:0 18px 38px color-mix(in srgb, var(--color-primary) 13%, transparent),
             0 4px 12px color-mix(in srgb, var(--color-text) 7%, transparent);
}
.card .card-ico{
  width:46px;height:46px;border-radius:var(--radius-lg);
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  color:#fff;box-shadow:0 5px 14px color-mix(in srgb, var(--color-primary) 28%, transparent);
  margin-bottom:var(--space-4);
}
.card .card-ico [data-lucide]{width:1.4rem;height:1.4rem;}
.card h4{font-size:var(--text-base);letter-spacing:-.012em;margin-bottom:.4rem;}
a.card{display:block;}
a.card:hover h4{color:var(--color-primary);}

/* ---- Rhythm: a section immediately before the closing CTA doesn't need
        full padding on both sides — it was leaving a dead gap. */
.section + .section:last-of-type{padding-top:var(--space-8);}

/* =====================================================================
   PRINCIPLES — the "what makes the work different" band
   An editorial numbered list rather than a card grid: a sticky heading on
   the left, four large rows on the right separated by hairlines. Reads as
   a statement of principles, which is what it is, and gives the homepage
   one strong dark moment before the closing CTA.
   ===================================================================== */
.principles{
  position:relative;overflow:hidden;
  background:
    radial-gradient(70% 90% at 88% 0%,  color-mix(in srgb,#8C52FF 26%, transparent) 0%, transparent 62%),
    radial-gradient(60% 80% at 4% 100%, color-mix(in srgb,#03F7EB 14%, transparent) 0%, transparent 58%),
    var(--color-band-deep);
}
.principles::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:
    linear-gradient(to right, rgba(255,255,255,.035) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(255,255,255,.035) 1px, transparent 1px);
  background-size:72px 72px;
  mask-image:radial-gradient(80% 70% at 70% 30%, #000 0%, transparent 78%);
  -webkit-mask-image:radial-gradient(80% 70% at 70% 30%, #000 0%, transparent 78%);
}
.principles>*{position:relative;}

.principles-grid{display:grid;grid-template-columns:minmax(280px,.8fr) 1.2fr;gap:clamp(var(--space-8),6vw,var(--space-20));align-items:start;}
.principles-head{padding-top:var(--space-5);}
.principles-head h2{font-size:var(--text-2xl);letter-spacing:-.03em;line-height:1.05;margin:var(--space-4) 0 var(--space-4);}
.principles-head p{color:rgba(255,255,255,.66);margin-bottom:var(--space-6);max-width:34ch;}
.principles-head .link-arrow{color:var(--color-accent-bright);}

.principle-list{display:grid;gap:0;counter-reset:none;margin:0;padding:0;list-style:none;}
.principle{
  position:relative;display:grid;
  grid-template-columns:auto 1fr auto;align-items:start;
  gap:clamp(var(--space-5),3vw,var(--space-8));
  padding:clamp(var(--space-6),3vw,var(--space-8)) var(--space-4);
  border-top:1px solid rgba(255,255,255,.12);
  transition:background .4s cubic-bezier(.16,1,.3,1);
}
.principle:last-child{border-bottom:1px solid rgba(255,255,255,.12);}
/* gradient rule that draws across on hover */
.principle::before{
  content:"";position:absolute;top:-1px;left:0;right:0;height:1px;
  background:linear-gradient(90deg,var(--color-brand-violet),var(--color-accent-bright));
  transform:scaleX(0);transform-origin:left;
  transition:transform .55s cubic-bezier(.16,1,.3,1);
}
.principle:hover::before{transform:scaleX(1);}
.principle:hover{background:rgba(255,255,255,.035);}

.p-num{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(1.6rem,2.4vw,2.2rem);line-height:1;letter-spacing:-.03em;
  background:linear-gradient(140deg,var(--color-brand-violet),var(--color-accent-bright));
  -webkit-background-clip:text;background-clip:text;color:transparent;
  opacity:.55;transition:opacity var(--transition);min-width:2.4ch;
}
.principle:hover .p-num{opacity:1;}

.p-body h3{
  color:#fff;font-size:var(--text-lg);letter-spacing:-.02em;
  margin-bottom:.5rem;line-height:1.15;
}
.p-body p{color:rgba(255,255,255,.66);font-size:var(--text-sm);max-width:52ch;line-height:1.65;}

.p-ico{
  width:46px;height:46px;flex:none;border-radius:var(--radius-lg);
  display:grid;place-items:center;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);
  color:var(--color-accent-bright);
  transition:background var(--transition),border-color var(--transition),transform var(--transition);
}
.p-ico [data-lucide]{width:1.35rem;height:1.35rem;}
.principle:hover .p-ico{
  background:color-mix(in srgb, var(--color-brand-violet) 26%, transparent);
  border-color:color-mix(in srgb, var(--color-accent-bright) 40%, transparent);
  transform:translateY(-2px);
}

@media(max-width:900px){
  .principles-grid{grid-template-columns:1fr;gap:var(--space-8);}
  .principle{grid-template-columns:auto 1fr;padding-inline:0;}
  .p-ico{display:none;}
}
@media (prefers-reduced-motion:reduce){
  .principle,.principle::before,.p-num,.p-ico{transition:none;}
}


/* =====================================================================
   SCROLL CHROME
   The header's scroll states (glass, progress line, underline indicator)
   moved to style.css on 26 Sept 2026 and now apply on every page. What is
   left here is the back-to-top button (any page that includes it).
   ===================================================================== */

/* ---- Back to top ---- */
.to-top{
  position:fixed;right:clamp(1rem,3vw,2rem);bottom:clamp(1rem,3vw,2rem);
  width:48px;height:48px;border-radius:var(--radius-full);z-index:120;
  display:grid;place-items:center;
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  color:#fff;border:1px solid color-mix(in srgb,#fff 22%,transparent);
  box-shadow:0 10px 28px color-mix(in srgb, var(--color-primary) 38%, transparent);
  opacity:0;transform:translateY(14px) scale(.9);pointer-events:none;
  transition:opacity .35s cubic-bezier(.16,1,.3,1),
             transform .35s cubic-bezier(.16,1,.3,1),
             box-shadow var(--transition);
}
.to-top.is-on{opacity:1;transform:none;pointer-events:auto;}
.to-top:hover{box-shadow:0 14px 36px color-mix(in srgb, var(--color-primary) 50%, transparent);transform:translateY(-3px);}
.to-top [data-lucide]{width:1.3rem;height:1.3rem;}
[data-theme="dark"] .to-top{color:var(--color-text-inverse);}

@media (prefers-reduced-motion:reduce){ .to-top{transition:none;} }

/* =====================================================================
   SECTION ENTRANCE MOTION — homepage only for now
   The base .reveal (opacity + 26px rise) lives in style.css and stays as the
   universal fallback. This block gives the homepage a richer, choreographed
   entrance: a longer travel, a whisper of scale, and a per-component feel so
   sections arrive with intent rather than all doing the same fade.
   --i is set by initReveal() on children of any [data-stagger] container.
   ===================================================================== */
body[data-page="home"] .reveal{
  /* Declared as an explicit property LIST, not the shorthand. Several
     components (.principle, .card) set their own `transition:` shorthand,
     which resets transition-property and silently killed the opacity and
     transform animation — the reveal class was applied but nothing moved.
     Hover properties are kept in the list with their own short durations. */
  transition-property:opacity, transform, background, box-shadow, border-color;
  transition-duration:.85s, .85s, .4s, .35s, .35s;
  transition-timing-function:cubic-bezier(.16,1,.3,1);
  transition-delay:calc(var(--i, 0) * 90ms), calc(var(--i, 0) * 90ms), 0s, 0s, 0s;
  will-change:opacity, transform;
}
html.js body[data-page="home"] .reveal{
  opacity:0;transform:translateY(34px) scale(.985);
}
html.js body[data-page="home"] .reveal.in{
  opacity:1;transform:none;
}
/* drop will-change once the element has arrived */
body[data-page="home"] .reveal.in{will-change:auto;}

/* --- Per-component character ------------------------------------------- */

/* Section headings lead: shorter travel, no delay, so the copy lands first
   and the content follows it. */
html.js body[data-page="home"] .sec-head.reveal,
html.js body[data-page="home"] .principles-head.reveal{
  transform:translateY(22px);
}

/* The showcase panel is large — let it settle rather than fly. */
html.js body[data-page="home"] .showcase.reveal{
  transform:translateY(40px) scale(.99);
}
body[data-page="home"] .showcase.reveal{transition-duration:1s, 1s, .4s, .35s, .35s;}

/* Principles rows come in from the left, tracking the reading direction and
   the hairline rules they sit between. */
html.js body[data-page="home"] .principle.reveal{
  transform:translateY(20px) translateX(-16px);
}
html.js body[data-page="home"] .principle.reveal.in{transform:none;}

/* Value cards rise a little further and cascade. */
html.js body[data-page="home"] .card.reveal{
  transform:translateY(30px) scale(.97);
}

/* The hero should never animate in — it is already on screen at load, and a
   hero that fades in is a hero that looks slow. */
html.js body[data-page="home"] .hero .reveal{
  opacity:1;transform:none;transition:none;
}

@media (prefers-reduced-motion:reduce){
  html.js body[data-page="home"] .reveal,
  html.js body[data-page="home"] .reveal.in,
  html.js body[data-page="home"] .principle.reveal{
    opacity:1;transform:none;transition:none;
  }
}

/* Bullet text is a single flex item, so a bold label and its description wrap
   together as prose rather than as two independently-wrapping items. */
.sc-body li>span{flex:1;min-width:0;}
.sc-body li b{color:var(--color-text);font-weight:700;}

/* =====================================================================
   FOOTER
   Brand block carries the identity, the contact details and the social
   links; the four nav columns carry the sitemap; legal moves to the bottom
   bar where it belongs. Previously the grid declared five tracks while the
   markup had six children, so the Legal column wrapped onto its own row.
   ===================================================================== */
.site-footer::before{
  background:linear-gradient(90deg,var(--color-primary),var(--color-indigo) 45%,var(--color-accent-bright));
}
.footer-brand .brand-logo-img{height:58px;}
.footer-mission{max-width:34ch;}

/* ---- Contact block ---- */
.footer-contact{display:grid;gap:.55rem;margin:var(--space-5) 0 var(--space-6);list-style:none;}
.footer-contact li{display:flex;align-items:center;gap:.6rem;font-size:var(--text-sm);}
.footer-contact [data-lucide]{width:1.05rem;height:1.05rem;color:var(--color-primary);flex:none;}
.footer-contact a{color:var(--color-text-muted);transition:color var(--transition);}
.footer-contact a:hover{color:var(--color-primary);}

/* ---- Social links in their own brand colours ----
   Each <a> sets --brand inline. At rest the chip is a soft tint of that
   colour with the glyph in full colour; on hover the chip fills and the
   glyph goes white. Recognisable at a glance without three loud blocks of
   non-brand colour sitting in the footer. */
.socials{display:flex;gap:.55rem;list-style:none;padding:0;margin:0;}
.soc{
  display:inline-grid;place-items:center;width:42px;height:42px;
  border-radius:var(--radius-full);
  color:var(--brand);
  background:color-mix(in srgb, var(--brand) 12%, transparent);
  border:1px solid color-mix(in srgb, var(--brand) 26%, transparent);
  transition:background var(--transition),color var(--transition),
             transform var(--transition),box-shadow var(--transition);
}
.soc svg{width:19px;height:19px;}
.soc:hover{
  background:var(--brand);color:#fff;transform:translateY(-3px);
  box-shadow:0 8px 20px color-mix(in srgb, var(--brand) 42%, transparent);
}
.soc:focus-visible{outline:2px solid var(--brand);outline-offset:3px;}
/* On the dark theme the raw brand colours sit a little low — lift the glyph
   and the tint so they stay legible without changing the identity. */
[data-theme="dark"] .soc{
  color:color-mix(in srgb, var(--brand) 78%, #fff);
  background:color-mix(in srgb, var(--brand) 20%, transparent);
  border-color:color-mix(in srgb, var(--brand) 38%, transparent);
}
[data-theme="dark"] .soc:hover{color:#fff;}

/* ---- Bottom bar ---- */
/* The grid already carries a bottom rule — a second one on .footer-bottom
   produced two hairlines with a dead gap between them. */
.footer-grid{margin-bottom:var(--space-8);padding-bottom:var(--space-8);}
.footer-bottom{padding-top:0;border-top:none;}
.fb-legal{display:flex;gap:var(--space-5);flex-wrap:wrap;}
.fb-legal a{color:var(--color-text-muted);transition:color var(--transition);}
.fb-legal a:hover{color:var(--color-primary);}

@media(max-width:960px){
  .footer-grid{grid-template-columns:1fr 1fr;}
  .footer-brand{grid-column:1 / -1;}
}
@media(max-width:560px){
  .footer-bottom{align-items:flex-start;}
}

/* Address is a block element inside the contact row, so align to the top. */
.footer-contact li:has(address){align-items:flex-start;}
.footer-contact li:has(address) [data-lucide]{margin-top:.2rem;}
.footer-contact address{font-style:normal;color:var(--color-text-muted);line-height:1.55;}

/* =====================================================================
   EDUCATION HUB — hero lockup, flagship programme, in-development grid
   ===================================================================== */

.edu-hero{position:relative;overflow:hidden;
  padding-block:clamp(var(--space-16),7vw,var(--space-24)) clamp(var(--space-12),5vw,var(--space-16));}
.edu-hero::before{content:"";position:absolute;inset:0;z-index:-1;
  background:
    radial-gradient(50% 60% at 82% -10%, color-mix(in srgb, var(--color-brand-violet) 20%, transparent) 0%, transparent 62%),
    radial-gradient(44% 52% at -6% 10%,  color-mix(in srgb, var(--color-accent-bright) 14%, transparent) 0%, transparent 58%);}
.edu-hero-inner{max-width:70ch;}

/* Two-column hero on desktop: message on the left, the open programme on the
   right. Below 1080px the snapshot stacks under the copy. */
@media (min-width:1080px){
  .edu-hero-inner{max-width:none;display:grid;grid-template-columns:minmax(0,1.08fr) minmax(360px,.92fr);
    gap:clamp(var(--space-10),5vw,var(--space-16));align-items:center;}
  .edu-hero-inner > div{max-width:64ch;}
}

/* ---- Hero snapshot card ---- */
.edu-snapshot{position:relative;align-self:center;
  background:color-mix(in srgb, var(--color-surface) 86%, transparent);
  border:1px solid color-mix(in srgb, var(--color-primary) 18%, transparent);
  border-radius:var(--radius-2xl);padding:clamp(var(--space-6),2.4vw,var(--space-8));
  box-shadow:0 26px 60px color-mix(in srgb, var(--color-text) 12%, transparent);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  margin-top:var(--space-10);}
@media (min-width:1080px){ .edu-snapshot{margin-top:0;} }
.edu-snapshot::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  padding:1px;background:linear-gradient(140deg,
    color-mix(in srgb, var(--color-primary) 55%, transparent),
    color-mix(in srgb, var(--color-accent-bright) 45%, transparent) 55%,
    transparent 85%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;}

.snap-flag{display:inline-flex;align-items:center;gap:.5rem;
  font-size:var(--text-xs);font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--color-primary);margin-bottom:var(--space-5);}
.snap-flag .dot{width:.5rem;height:.5rem;border-radius:50%;background:var(--color-primary);
  box-shadow:0 0 0 0 color-mix(in srgb, var(--color-primary) 55%, transparent);
  animation:snapPulse 2.4s ease-out infinite;}
@keyframes snapPulse{
  0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-primary) 50%, transparent);}
  70%{box-shadow:0 0 0 .55rem transparent;}
  100%{box-shadow:0 0 0 0 transparent;}}
@media (prefers-reduced-motion:reduce){ .snap-flag .dot{animation:none;} }

.snap-title{font-family:var(--font-display);font-weight:800;
  font-size:clamp(1.25rem,.95rem + .75vw,1.6rem);line-height:1.12;letter-spacing:-.028em;
  margin:0 0 .4rem;}
.snap-sub{font-size:var(--text-sm);color:var(--color-primary);font-weight:600;margin:0 0 var(--space-6);}

.snap-facts{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-4);
  padding:var(--space-5) 0;border-block:1px solid var(--color-divider);}
.snap-facts b{display:block;font-family:var(--font-display);font-weight:800;
  font-size:clamp(1.15rem,.9rem + .6vw,1.5rem);line-height:1;
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  -webkit-background-clip:text;background-clip:text;color:transparent;}
.snap-facts span{display:block;font-size:.72rem;line-height:1.3;color:var(--color-text-muted);margin-top:.3rem;}

.snap-meta{display:grid;gap:0;margin:0 0 var(--space-6);}
.snap-meta > div{display:flex;justify-content:space-between;gap:var(--space-4);
  padding:.65rem 0;border-bottom:1px solid var(--color-divider);font-size:var(--text-sm);}
.snap-meta dt{color:var(--color-text-muted);margin:0;}
.snap-meta dd{margin:0;font-weight:700;text-align:right;}

.snap-go{display:inline-flex;align-items:center;gap:.5rem;font-weight:700;font-size:var(--text-sm);
  color:var(--color-primary);text-decoration:none;}
.snap-go [data-lucide]{width:1rem;height:1rem;transition:transform var(--transition);}
.snap-go:hover [data-lucide]{transform:translateX(4px);}

@media (max-width:560px){
  .snap-facts{grid-template-columns:repeat(2,1fr);row-gap:var(--space-5);}
}
.edu-hero h1{font-size:clamp(2.1rem,1.35rem + 2.5vw,3.4rem);letter-spacing:-.032em;line-height:1.04;margin:var(--space-6) 0 var(--space-5);}
/* A headline that has to name three disciplines needs a smaller top end, or it
   runs to six lines in the hero's left column. */
.edu-hero h1.h1-long{font-size:clamp(1.95rem,1.2rem + 2.05vw,2.75rem);line-height:1.08;}
/* DataViz Pro "Who it is for": a wider head so the headline breaks in three balanced lines, not four. */
.who-head{max-width:62rem;}
.who-head h2{text-wrap:balance;}
#who .sec-head h2 .grad{background:linear-gradient(100deg,var(--color-primary),var(--color-indigo) 50%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.edu-hero h1 .grad{
  background:linear-gradient(100deg,var(--color-primary),var(--color-indigo) 50%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.edu-hero .lead{font-size:var(--text-lg);color:var(--color-text-muted);max-width:56ch;}

/* Logo lockup — the mark is never restyled, only framed. */
.brand-lockup{display:inline-flex;align-items:center;gap:var(--space-4);
  background:color-mix(in srgb, var(--color-surface) 78%, transparent);
  border:1px solid color-mix(in srgb, var(--color-primary) 16%, transparent);
  border-radius:var(--radius-xl);padding:.7rem 1.1rem;
  box-shadow:0 4px 18px color-mix(in srgb, var(--color-primary) 10%, transparent);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
.brand-lockup img{height:44px;width:auto;display:block;}
.brand-lockup.no-logo img{display:none;}
.brand-lockup-div{width:1px;align-self:stretch;background:var(--color-divider);}
.brand-lockup-txt{font-size:var(--text-xs);line-height:1.35;color:var(--color-text-muted);
  text-transform:uppercase;letter-spacing:.12em;font-weight:700;}
.brand-lockup-txt b{color:var(--color-text);font-weight:800;}
/* The registered KultivateEd mark is dark artwork, so in dark mode the plate
   stays light rather than the logo being altered. */
[data-theme="dark"] .brand-lockup{background:#f7f7fa;border-color:rgba(255,255,255,.14);
  box-shadow:0 6px 22px rgba(0,0,0,.45);}
[data-theme="dark"] .brand-lockup-div{background:rgba(15,17,21,.14);}
[data-theme="dark"] .brand-lockup-txt{color:#5a5c66;}
[data-theme="dark"] .brand-lockup-txt b{color:#0f1115;}

/* ---- Flagship programme ---- */
.flagship{display:grid;grid-template-columns:1.35fr .65fr;gap:clamp(var(--space-6),3vw,var(--space-10));
  background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-2xl);overflow:hidden;
  padding:clamp(var(--space-6),3vw,var(--space-10));
  box-shadow:0 20px 50px color-mix(in srgb, var(--color-text) 9%, transparent);}
.flagship-main h3{font-size:var(--text-2xl);letter-spacing:-.03em;line-height:1.05;margin:var(--space-4) 0 .4rem;}
.flagship-sub{font-family:var(--font-display);font-weight:500;font-size:var(--text-lg);
  color:var(--color-primary);margin-bottom:var(--space-5);}
.flagship-blurb{color:var(--color-text-muted);max-width:60ch;margin-bottom:var(--space-8);}
.flagship-modlabel{font-size:var(--text-xs);font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--color-text-faint);margin-bottom:var(--space-4);}
.flagship-mods{display:grid;gap:0;margin:0;padding:0;list-style:none;counter-reset:none;}
.flagship-mods li{display:grid;grid-template-columns:auto 1fr;gap:var(--space-4);align-items:baseline;
  padding:var(--space-4) 0;border-top:1px solid var(--color-divider);}
.flagship-mods li:last-child{border-bottom:1px solid var(--color-divider);}
.fm-n{font-family:var(--font-display);font-weight:800;font-size:var(--text-base);
  background:linear-gradient(140deg,var(--color-primary),var(--color-accent-bright));
  -webkit-background-clip:text;background-clip:text;color:transparent;}
.fm-t b{display:block;font-family:var(--font-display);font-weight:800;font-size:var(--text-base);
  letter-spacing:-.012em;margin-bottom:.15rem;}
.fm-t i{font-style:normal;font-size:var(--text-sm);color:var(--color-text-muted);}

.flagship-side{background:var(--color-surface-alt);border-radius:var(--radius-xl);
  padding:var(--space-6);align-self:start;position:sticky;top:calc(var(--header-h) + var(--space-4));}
.flagship-facts{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4);margin-bottom:var(--space-6);}
.flagship-facts b{display:block;font-family:var(--font-display);font-weight:800;font-size:var(--text-xl);
  line-height:1;background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  -webkit-background-clip:text;background-clip:text;color:transparent;}
.flagship-facts span{display:block;font-size:var(--text-xs);color:var(--color-text-muted);margin-top:.25rem;}
.flagship-meta{display:grid;gap:0;margin:0 0 var(--space-6);}
.flagship-meta > div{display:flex;justify-content:space-between;gap:var(--space-4);
  padding:.6rem 0;border-bottom:1px solid var(--color-divider);font-size:var(--text-sm);}
.flagship-meta dt{color:var(--color-text-muted);margin:0;}
.flagship-meta dd{margin:0;font-weight:700;text-align:right;}
.flagship-side .btn{margin-bottom:.6rem;}
.flagship-note{display:flex;gap:.5rem;align-items:flex-start;margin-top:var(--space-4);
  font-size:var(--text-xs);color:var(--color-text-muted);line-height:1.5;}
.flagship-note [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);flex:none;margin-top:.1rem;}

/* ---- In development ---- */
.planned-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-5);}
.planned{background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-xl);padding:var(--space-6);display:flex;flex-direction:column;
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);}
.planned:hover{transform:translateY(-4px);border-color:color-mix(in srgb, var(--color-primary) 26%, transparent);
  box-shadow:0 16px 34px color-mix(in srgb, var(--color-primary) 12%, transparent);}
.planned-ico{width:42px;height:42px;border-radius:var(--radius-md);display:grid;place-items:center;
  background:color-mix(in srgb, var(--color-primary) 11%, transparent);color:var(--color-primary);
  margin-bottom:var(--space-4);}
.planned-ico [data-lucide]{width:1.3rem;height:1.3rem;}
.planned h4{font-family:var(--font-display);font-weight:800;font-size:var(--text-base);margin-bottom:.4rem;}
.planned p{font-size:var(--text-sm);color:var(--color-text-muted);margin-bottom:var(--space-5);flex-grow:1;}
.planned .link-arrow{margin-top:auto;}

/* ---- Instructors ---- */
.tutor-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-6);align-items:start;}
.tutor{display:grid;grid-template-columns:auto 1fr;gap:var(--space-6);align-items:start;
  background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-2xl);padding:var(--space-6);}
.tutor-photo{width:104px;height:104px;border-radius:var(--radius-xl);object-fit:cover;flex:none;
  box-shadow:0 8px 22px color-mix(in srgb, var(--color-text) 12%, transparent);}
.tutor-photo.is-initials{display:grid;place-items:center;color:#fff;
  font-family:var(--font-display);font-weight:800;font-size:var(--text-xl);
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));}
.tutor-body h3{font-size:var(--text-lg);letter-spacing:-.018em;margin-bottom:.15rem;}
.tutor-role{font-size:var(--text-sm);font-weight:700;color:var(--color-primary);margin-bottom:var(--space-4);}
.tutor-body p{font-size:var(--text-sm);color:var(--color-text-muted);}
.tutor-tags{display:flex;gap:var(--space-4);flex-wrap:wrap;margin-top:var(--space-4);list-style:none;padding:0;}
.tutor-tags li{display:flex;align-items:center;gap:.4rem;font-size:var(--text-xs);font-weight:600;
  color:var(--color-text-muted);}
.tutor-tags [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);}

/* steps without the old numeral, since the numbers moved into the modules */
.edu-hero ~ .section .steps .step{padding-top:var(--space-6);border-top:2px solid var(--color-divider);}
.edu-hero ~ .section .steps .step::before{display:none;}

@media(max-width:1000px){
  .flagship{grid-template-columns:1fr;}
  .planned-grid{grid-template-columns:1fr 1fr;}
  .tutor-grid{grid-template-columns:1fr;}
}
@media(max-width:620px){
  .planned-grid{grid-template-columns:1fr;}
  .tutor{grid-template-columns:1fr;}
  .brand-lockup{flex-wrap:wrap;}
}

/* =====================================================================
   COURSE DETAIL — hero, outcomes, session-level programme
   ===================================================================== */
.course-hero{position:relative;overflow:hidden;
  padding-block:clamp(var(--space-8),4vw,var(--space-12)) clamp(var(--space-12),5vw,var(--space-16));}
.course-hero::before{content:"";position:absolute;inset:0;z-index:-1;
  background:radial-gradient(52% 62% at 88% -12%, color-mix(in srgb, var(--color-brand-violet) 18%, transparent) 0%, transparent 62%);}
.course-hero-grid{display:grid;grid-template-columns:1.5fr .85fr;gap:clamp(var(--space-8),4vw,var(--space-12));
  align-items:start;margin-top:var(--space-6);}
.course-hero h1{font-size:clamp(2rem,1.3rem + 2.3vw,3.2rem);letter-spacing:-.03em;line-height:1.05;
  margin:var(--space-4) 0 .5rem;}
.course-sub{font-family:var(--font-display);font-weight:500;font-size:var(--text-lg);
  color:var(--color-primary);margin-bottom:var(--space-5);}
.course-hero .lead{color:var(--color-text-muted);max-width:62ch;}

.course-facts{display:flex;gap:clamp(var(--space-6),3vw,var(--space-10));flex-wrap:wrap;
  margin-top:var(--space-8);padding-top:var(--space-6);border-top:1px solid var(--color-divider);}
.cf b{display:block;font-family:var(--font-display);font-weight:800;font-size:var(--text-xl);line-height:1;
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  -webkit-background-clip:text;background-clip:text;color:transparent;}
.cf span{display:block;font-size:var(--text-xs);color:var(--color-text-muted);margin-top:.3rem;}

.enrol-card{position:sticky;top:calc(var(--header-h) + var(--space-4));
  background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-2xl);
  padding:var(--space-6);box-shadow:0 18px 44px color-mix(in srgb, var(--color-text) 10%, transparent);}
.enrol-card h4{font-family:var(--font-display);font-size:var(--text-lg);margin-bottom:var(--space-5);}
.enrol-meta{display:grid;gap:0;margin:0 0 var(--space-6);}
.enrol-meta > div{display:flex;justify-content:space-between;gap:var(--space-4);padding:.6rem 0;
  border-bottom:1px solid var(--color-divider);font-size:var(--text-sm);}
.enrol-meta dt{color:var(--color-text-muted);margin:0;}
.enrol-meta dd{margin:0;font-weight:700;text-align:right;}
.enrol-card .btn{margin-bottom:.6rem;}
.enrol-note{display:flex;gap:.5rem;align-items:flex-start;margin-top:var(--space-4);
  font-size:var(--text-xs);color:var(--color-text-muted);line-height:1.5;}
.enrol-note [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);flex:none;margin-top:.1rem;}

/* ---- outcomes ---- */
/* =====================================================================
   OUTCOMES — three pillars: the science, the models, the decisions.
   Editorial rather than boxed: hairline rules, the term in display type,
   and a soft spotlight that tracks the pointer across the block.
   ===================================================================== */
.outcome-pillars{position:relative;display:grid;grid-template-columns:repeat(3,1fr);
  gap:clamp(var(--space-8),4vw,var(--space-16));
  --spot-x:50%;--spot-y:50%;}
/* The spotlight sits behind the text and never intercepts clicks. */
.outcome-pillars::before{content:"";position:absolute;inset:-8% -4%;z-index:0;
  pointer-events:none;border-radius:var(--radius-2xl);
  background:radial-gradient(340px circle at var(--spot-x) var(--spot-y),
    color-mix(in srgb, var(--color-primary) 13%, transparent) 0%, transparent 70%);
  opacity:0;transition:opacity .4s ease;}
.outcome-pillars.is-lit::before{opacity:1;}
[data-theme="dark"] .outcome-pillars::before{
  background:radial-gradient(340px circle at var(--spot-x) var(--spot-y),
    color-mix(in srgb, var(--color-accent-bright) 15%, transparent) 0%, transparent 70%);}

.opil{position:relative;z-index:1;}
.opil-head{display:flex;align-items:baseline;gap:.75rem;
  padding-bottom:var(--space-4);margin-bottom:var(--space-2);
  border-bottom:1px solid var(--color-divider);position:relative;}
/* A short brand rule rides on top of the hairline. */
.opil-head::after{content:"";position:absolute;left:0;bottom:-1px;width:56px;height:2px;
  background:linear-gradient(90deg,var(--color-primary),var(--color-accent-bright));}
.opil-n{font-family:var(--font-display);font-weight:800;font-size:var(--text-xs);
  letter-spacing:.14em;color:var(--color-text-faint);}
.opil-head h3{font-family:var(--font-display);font-weight:800;
  font-size:clamp(1.05rem,.9rem + .45vw,1.3rem);letter-spacing:-.02em;margin:0;
  text-transform:uppercase;}

.opil ul{list-style:none;margin:0;padding:0;}
.opil li{position:relative;padding:var(--space-5) 0 var(--space-5) var(--space-5);
  border-bottom:1px solid var(--color-divider);
  transition:padding-left var(--transition);}
.opil li:last-child{border-bottom:0;}
/* The accent bar grows out of the left edge on hover. */
.opil li::before{content:"";position:absolute;left:0;top:calc(var(--space-5) + .35rem);
  width:3px;height:0;border-radius:2px;
  background:linear-gradient(180deg,var(--color-primary),var(--color-accent-bright));
  transition:height var(--transition);}
.opil li:hover::before{height:calc(100% - var(--space-10) - .7rem);min-height:1.1rem;}
.opil li b{display:block;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-base);letter-spacing:-.014em;line-height:1.25;
  color:var(--color-text);transition:color var(--transition);}
.opil li:hover b{color:var(--color-primary);}
.opil li i{display:block;font-style:normal;margin-top:.35rem;
  font-size:var(--text-sm);line-height:1.55;color:var(--color-text-muted);}

@media (prefers-reduced-motion:reduce){
  .opil li,.opil li::before,.opil li b{transition:none;}
  .outcome-pillars::before{display:none;}
}
/* Three pillars into two columns left the third stranded on its own row, so
   below 1000px each pillar takes the full width and its own items go two-up
   instead. Single column on phones. */
@media (max-width:1000px){
  .outcome-pillars{grid-template-columns:1fr;gap:var(--space-10);}
  .opil ul{display:grid;grid-template-columns:1fr 1fr;column-gap:clamp(var(--space-6),4vw,var(--space-12));}
  .opil li:nth-last-child(-n+2){border-bottom:0;}
}
@media (max-width:700px){
  .opil ul{grid-template-columns:1fr;}
  .opil li:nth-last-child(-n+2){border-bottom:1px solid var(--color-divider);}
  .opil li:last-child{border-bottom:0;}
}

/* ---- programme ---- */
.prog-tools{display:flex;gap:.5rem;justify-content:flex-end;margin-bottom:var(--space-5);}
.prog{display:grid;gap:var(--space-4);}
.prog-mod{background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-xl);overflow:hidden;transition:border-color var(--transition),box-shadow var(--transition);}
.prog-mod[open]{border-color:color-mix(in srgb, var(--color-primary) 26%, transparent);
  box-shadow:0 14px 34px color-mix(in srgb, var(--color-primary) 10%, transparent);}
.prog-mod summary{display:grid;grid-template-columns:auto 1fr auto auto;gap:var(--space-5);
  align-items:center;padding:var(--space-5) var(--space-6);cursor:pointer;list-style:none;}
.prog-mod summary::-webkit-details-marker{display:none;}
.pm-n{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);line-height:1;
  background:linear-gradient(140deg,var(--color-primary),var(--color-accent-bright));
  -webkit-background-clip:text;background-clip:text;color:transparent;}
.pm-head b{display:block;font-family:var(--font-display);font-weight:800;font-size:var(--text-base);
  letter-spacing:-.014em;}
.pm-head i{font-style:normal;font-size:var(--text-sm);color:var(--color-text-muted);}
.pm-meta{font-size:var(--text-xs);font-weight:700;color:var(--color-text-muted);white-space:nowrap;}
.prog-mod summary .chev{transition:transform var(--transition);color:var(--color-primary);flex:none;}
.prog-mod[open] summary .chev{transform:rotate(180deg);}
.prog-body{border-top:1px solid var(--color-divider);}

.ses{display:grid;grid-template-columns:7.5rem 1fr;gap:var(--space-5);
  padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--color-divider);}
.ses:last-child{border-bottom:none;}
.ses-time{font-size:var(--text-xs);font-weight:700;color:var(--color-text-muted);
  font-variant-numeric:tabular-nums;padding-top:.15rem;white-space:nowrap;}
.ses-type{display:inline-block;font-size:var(--text-xs);font-weight:800;letter-spacing:.09em;
  text-transform:uppercase;color:var(--color-primary);
  background:color-mix(in srgb, var(--color-primary) 10%, transparent);
  padding:.2rem .6rem;border-radius:var(--radius-full);margin-bottom:.5rem;}
.ses-body h5{font-family:var(--font-display);font-weight:800;font-size:var(--text-base);
  letter-spacing:-.012em;margin-bottom:.45rem;}
.ses-content{font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.6;}
.ses-out{display:flex;gap:.5rem;align-items:flex-start;margin-top:.7rem;
  font-size:var(--text-sm);color:var(--color-text);font-weight:600;}
.ses-out [data-lucide]{width:1rem;height:1rem;color:var(--color-teal);flex:none;margin-top:.22rem;}
[data-theme="dark"] .ses-out [data-lucide]{color:var(--color-accent-bright);}
.ses.is-break{padding-block:.7rem;background:var(--color-surface-offset);align-items:center;}
.ses-brk{font-size:var(--text-xs);font-weight:700;color:var(--color-text-faint);
  text-transform:uppercase;letter-spacing:.09em;}

@media(max-width:1000px){
  .course-hero-grid{grid-template-columns:1fr;}
  .enrol-card{position:static;}
}
@media(max-width:700px){
  .prog-mod summary{grid-template-columns:auto 1fr auto;gap:var(--space-3);padding:var(--space-4);}
  .pm-meta{display:none;}
  .ses{grid-template-columns:1fr;gap:.4rem;padding:var(--space-4);}
}

/* =====================================================================
   PROGRAMME CAROUSEL — one programme at a time, led by the figure of the
   method it teaches. Scroll-snap moves it; JS only adds arrows and dots.
   ===================================================================== */
.pcar{position:relative;margin-top:var(--space-10);}
.pcar-track{
  display:grid;grid-auto-flow:column;grid-auto-columns:100%;
  gap:var(--space-6);overflow-x:auto;overscroll-behavior-x:contain;
  scroll-snap-type:x mandatory;scroll-behavior:smooth;
  scrollbar-width:none;-ms-overflow-style:none;
  padding-bottom:var(--space-2);border-radius:var(--radius-2xl);}
.pcar-track::-webkit-scrollbar{display:none;}
.pcar-track:focus-visible{outline:3px solid var(--color-primary);outline-offset:6px;}
@media (prefers-reduced-motion:reduce){ .pcar-track{scroll-behavior:auto;} }

.pslide{
  scroll-snap-align:center;display:grid;grid-template-columns:1.02fr .98fr;
  align-items:stretch;overflow:hidden;
  background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-2xl);
  box-shadow:0 18px 44px color-mix(in srgb, var(--color-text) 8%, transparent);
  transition:box-shadow var(--transition),border-color var(--transition);}
.pslide.is-current{border-color:color-mix(in srgb, var(--color-primary) 30%, transparent);
  box-shadow:0 24px 60px color-mix(in srgb, var(--color-primary) 16%, transparent);}

.pslide-art{position:relative;min-height:300px;background:#050B1A;overflow:hidden;}
.pslide-art img{width:100%;height:100%;object-fit:cover;display:block;}
.pslide-art::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 100% at 50% 45%, transparent 52%, rgba(0,0,0,.42) 100%);}
.pslide-ico{position:absolute;top:var(--space-5);left:var(--space-5);z-index:1;
  width:44px;height:44px;border-radius:var(--radius-md);display:grid;place-items:center;
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);color:#fff;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
.pslide-ico [data-lucide]{width:1.35rem;height:1.35rem;}

.pslide-body{padding:clamp(var(--space-6),3vw,var(--space-10));
  display:flex;flex-direction:column;align-items:flex-start;justify-content:center;}
.pslide-step{display:inline-flex;align-items:center;gap:.5rem;
  font-family:var(--font-display);font-weight:800;font-size:var(--text-xs);
  letter-spacing:.14em;color:var(--color-text-faint);margin-bottom:var(--space-4);}
.pslide-step s{width:18px;height:1px;background:currentColor;opacity:.6;text-decoration:none;}
.pslide-body h3{font-family:var(--font-display);font-weight:800;
  font-size:clamp(1.3rem,1rem + .9vw,1.8rem);letter-spacing:-.03em;line-height:1.08;
  margin:0 0 var(--space-4);}
.pslide-body > p{color:var(--color-text-muted);margin:0 0 var(--space-5);max-width:46ch;}
.pslide-cap{display:flex;gap:.5rem;align-items:flex-start;
  font-size:var(--text-xs);color:var(--color-text-faint);line-height:1.5;
  margin:0 0 var(--space-5);max-width:40ch;}
.pslide-cap [data-lucide]{width:.95rem;height:.95rem;flex:none;margin-top:.15rem;color:var(--color-primary);}
.pslide-state{display:inline-flex;align-items:center;gap:.5rem;
  font-size:var(--text-xs);font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--color-text-muted);
  background:color-mix(in srgb, var(--color-text) 6%, transparent);
  border:1px solid var(--color-divider);border-radius:var(--radius-full);
  padding:.4rem .85rem;margin-bottom:var(--space-6);}
.pslide-state s{width:.45rem;height:.45rem;border-radius:50%;background:var(--color-text-faint);text-decoration:none;}

.pcar-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:3;
  width:46px;height:46px;border-radius:50%;display:grid;place-items:center;
  background:var(--color-surface);border:1px solid var(--color-divider);
  color:var(--color-text);box-shadow:0 8px 24px color-mix(in srgb, var(--color-text) 16%, transparent);
  transition:all var(--transition);}
.pcar-nav.prev{left:calc(-1 * var(--space-5));}
.pcar-nav.next{right:calc(-1 * var(--space-5));}
.pcar-nav:hover:not(:disabled){background:var(--color-primary);color:#fff;border-color:transparent;transform:translateY(-50%) scale(1.06);}
.pcar-nav:disabled{opacity:0;pointer-events:none;}
.pcar-nav [data-lucide]{width:1.25rem;height:1.25rem;}
@media (max-width:1180px){ .pcar-nav.prev{left:var(--space-3);} .pcar-nav.next{right:var(--space-3);} }

.pcar-dots{display:flex;justify-content:center;gap:.5rem;margin-top:var(--space-6);}
.pcar-dots button{width:9px;height:9px;border-radius:50%;padding:0;
  background:color-mix(in srgb, var(--color-text) 20%, transparent);
  transition:all var(--transition);}
.pcar-dots button:hover{background:color-mix(in srgb, var(--color-primary) 55%, transparent);}
.pcar-dots button.is-on{width:26px;border-radius:var(--radius-full);
  background:linear-gradient(90deg,var(--color-primary),var(--color-accent-bright));}

@media (max-width:860px){
  .pslide{grid-template-columns:1fr;}
  .pslide-art{min-height:200px;aspect-ratio:16/9;}
  .pcar-track{grid-auto-columns:92%;}
  /* Swiping is the natural gesture on touch, and the arrows would sit on top
     of the copy at this width. Dots still show position. */
  .pcar-nav{display:none;}
}

/* =====================================================================
   COURSE VIDEO TILES — two films side by side: the short introduction and
   the full walkthrough. Each poster is drawn, never an empty grey box.
   Set data-yt="VIDEO_ID" on .vtile and it plays inline.
   ===================================================================== */
.vgrid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(var(--space-5),2.5vw,var(--space-8));}

.vtile{display:block;overflow:hidden;text-decoration:none;color:inherit;
  border-radius:var(--radius-2xl);background:var(--color-surface);
  border:1px solid var(--color-divider);
  box-shadow:0 16px 40px color-mix(in srgb, var(--color-text) 9%, transparent);
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);}
.vtile:hover{transform:translateY(-4px);
  border-color:color-mix(in srgb, var(--color-primary) 28%, transparent);
  box-shadow:0 28px 62px color-mix(in srgb, var(--color-primary) 20%, transparent);}

.vt-stage{position:relative;display:grid;place-items:center;aspect-ratio:16/9;overflow:hidden;
  background:linear-gradient(135deg,#0B1030 0%,#2A1470 48%,#06333A 100%);}
.vtile.d1 .vt-stage{background:linear-gradient(135deg,#0A1330 0%,#111B5E 46%,#2A0F52 100%);}
.vt-stage::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(110% 90% at 50% 46%, transparent 48%, rgba(0,0,0,.44) 100%);}
.vt-motif{position:absolute;inset:0;width:100%;height:100%;opacity:.55;}

.vt-play{position:relative;z-index:1;width:74px;height:74px;border-radius:50%;
  display:grid;place-items:center;background:#fff;color:#12121a;
  box-shadow:0 14px 36px rgba(0,0,0,.45);transition:transform var(--transition);}
.vtile:hover .vt-play{transform:scale(1.09);}
.vt-play svg{width:26px;height:26px;margin-left:3px;}

.vt-badge{position:absolute;z-index:1;left:var(--space-5);top:var(--space-5);
  width:34px;height:34px;border-radius:var(--radius-sm);display:grid;place-items:center;
  background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.24);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
.vt-badge svg{width:1.15rem;height:1.15rem;color:#FF4747;}

.vt-foot{display:flex;align-items:center;gap:var(--space-4);
  padding:var(--space-5) var(--space-6);}
.vt-txt{flex:1;min-width:0;}
.vt-txt b{display:block;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-lg);letter-spacing:-.022em;line-height:1.2;color:var(--color-text);}
.vt-txt i{display:block;font-style:normal;margin-top:.3rem;
  font-size:var(--text-sm);line-height:1.5;color:var(--color-text-muted);}
.vt-arrow{width:38px;height:38px;border-radius:50%;flex:none;display:grid;place-items:center;
  color:var(--color-primary);
  background:color-mix(in srgb, var(--color-primary) 11%, transparent);
  transition:all var(--transition);}
.vt-arrow [data-lucide]{width:1.05rem;height:1.05rem;}
.vtile:hover .vt-arrow{background:var(--color-primary);color:#fff;}

.vtile.is-playing .vt-stage{display:none;}
.vtile iframe{width:100%;aspect-ratio:16/9;border:0;display:block;}

@media (max-width:860px){ .vgrid{grid-template-columns:1fr;} }

/* =====================================================================
   INSTRUCTOR CARDS — a reserved portrait slot that reads as designed rather
   than broken, plus profile links in each network's own colour.
   Drop a photo at the img src and it simply takes over.
   ===================================================================== */
.tutor-photo.is-reserved{
  position:relative;display:grid;place-items:center;overflow:hidden;
  background:linear-gradient(140deg,#1B1046 0%,#4A21B8 46%,#07535B 100%);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.14),
             0 12px 30px color-mix(in srgb, var(--color-primary) 22%, transparent);}
.tutor-photo.is-reserved::before{content:"";position:absolute;inset:0;
  background:
    radial-gradient(60% 60% at 24% 16%, rgba(3,247,235,.30) 0%, transparent 62%),
    radial-gradient(60% 60% at 82% 88%, rgba(249,91,246,.24) 0%, transparent 60%);}
.tutor-photo.is-reserved::after{content:"";position:absolute;
  inset:9px;border-radius:calc(var(--radius-xl) - 6px);
  border:1px solid rgba(255,255,255,.2);}
.tutor-photo.is-reserved b{position:relative;font-family:var(--font-display);
  font-weight:800;font-size:2rem;letter-spacing:.02em;color:#fff;
  text-shadow:0 2px 12px rgba(0,0,0,.35);}

.tutor-links{display:flex;flex-wrap:wrap;gap:.5rem;margin:var(--space-5) 0 0;padding:0;list-style:none;}
.tlink{display:inline-flex;align-items:center;gap:.45rem;
  font-size:var(--text-xs);font-weight:700;text-decoration:none;
  padding:.42rem .8rem;border-radius:var(--radius-full);
  color:var(--brand,var(--color-primary));
  background:color-mix(in srgb, var(--brand,var(--color-primary)) 10%, transparent);
  border:1px solid color-mix(in srgb, var(--brand,var(--color-primary)) 24%, transparent);
  transition:all var(--transition);}
.tlink svg,.tlink [data-lucide]{width:.95rem;height:.95rem;flex:none;}
.tlink:hover{background:var(--brand,var(--color-primary));color:#fff;
  border-color:transparent;transform:translateY(-2px);
  box-shadow:0 8px 18px color-mix(in srgb, var(--brand,var(--color-primary)) 34%, transparent);}
/* GitHub's near-black needs to lift in dark mode to stay visible. */
[data-theme="dark"] .tlink[style*="#24292F"]{--brand:#C9D1D9;}

/* Watch-the-intro link inside the hero snapshot. Points at the channel until
   a video id is set on that tile on the course page. */
.snap-watch{display:inline-flex;align-items:center;gap:.6rem;margin-top:var(--space-4);
  font-size:var(--text-sm);font-weight:700;text-decoration:none;color:var(--color-text-muted);
  transition:color var(--transition);}
.snap-watch:hover{color:var(--color-text);}
.sw-play{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;flex:none;
  background:#FF0000;color:#fff;transition:transform var(--transition);}
.sw-play svg{width:12px;height:12px;margin-left:1.5px;}
.snap-watch:hover .sw-play{transform:scale(1.12);}
.edu-snapshot .snap-go{display:inline-flex;width:fit-content;}
.edu-snapshot .snap-watch{display:flex;}

/* =====================================================================
   INTERNSHIP ACADEMY — open-track cards with a length selector, the
   session-photo gallery, and the cohort carousel. Built on the
   same pieces as the Courses hub (edu-hero, edu-snapshot, pcar) so the
   two pages read as one product.
   ===================================================================== */

/* ---- hero snapshot: list of open tracks ---- */
.snap-tracks{list-style:none;margin:0 0 var(--space-5);padding:0;display:grid;gap:.5rem;}
.snap-tracks a{display:flex;align-items:center;gap:.75rem;text-decoration:none;color:inherit;
  padding:.7rem .85rem;border-radius:var(--radius-lg);
  background:color-mix(in srgb, var(--color-primary) 6%, transparent);
  border:1px solid color-mix(in srgb, var(--color-primary) 14%, transparent);
  transition:all var(--transition);}
.snap-tracks a:hover{background:color-mix(in srgb, var(--color-primary) 11%, transparent);
  border-color:color-mix(in srgb, var(--color-primary) 30%, transparent);transform:translateX(3px);}
.snap-tracks a > [data-lucide]:first-child{width:1.15rem;height:1.15rem;color:var(--color-primary);flex:none;}
.snap-tracks a > span{flex:1;min-width:0;}
.snap-tracks b{display:block;font-family:var(--font-display);font-weight:800;font-size:var(--text-sm);line-height:1.2;}
.snap-tracks i{display:block;font-style:normal;font-size:var(--text-xs);color:var(--color-text-muted);margin-top:.15rem;}
.snap-tracks .go{width:1rem;height:1rem;color:var(--color-text-faint);flex:none;}

/* ---- open track card ---- */
.trk-list{display:grid;gap:var(--space-8);margin-top:var(--space-10);}
.trk{display:grid;grid-template-columns:1.08fr .92fr;align-items:start;gap:clamp(var(--space-6),3vw,var(--space-10));
  background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-2xl);padding:clamp(var(--space-6),3vw,var(--space-10));
  box-shadow:0 20px 50px color-mix(in srgb, var(--color-text) 9%, transparent);
  scroll-margin-top:calc(var(--header-h) + var(--space-6));}
.trk-head{display:flex;gap:var(--space-5);align-items:flex-start;margin-bottom:var(--space-5);}
.trk-ico{flex:none;width:56px;height:56px;border-radius:var(--radius-lg);display:grid;place-items:center;
  color:#fff;background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  box-shadow:0 10px 24px color-mix(in srgb, var(--color-primary) 30%, transparent);}
.trk-ico [data-lucide]{width:1.6rem;height:1.6rem;}
.trk-head h3{font-family:var(--font-display);font-weight:800;
  font-size:clamp(1.4rem,1.05rem + 1.1vw,2rem);letter-spacing:-.03em;line-height:1.06;margin:.5rem 0 .35rem;}
.trk-tag{font-family:var(--font-display);font-weight:500;font-size:var(--text-lg);color:var(--color-primary);margin:0;}
.trk-blurb{color:var(--color-text-muted);max-width:62ch;margin:0 0 var(--space-6);}

/* length selector */
.trk-lens{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:var(--space-4);}
.len{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;
  padding:.6rem .95rem;border-radius:var(--radius-lg);text-align:left;
  background:var(--color-surface-alt);border:1px solid var(--color-divider);
  color:var(--color-text);transition:all var(--transition);}
.len b{font-family:var(--font-display);font-weight:800;font-size:var(--text-sm);line-height:1.1;}
.len span{font-size:var(--text-xs);color:var(--color-text-muted);}
.len:hover{border-color:color-mix(in srgb, var(--color-primary) 40%, transparent);transform:translateY(-1px);}
.len.is-on{background:linear-gradient(135deg,var(--color-primary),var(--color-indigo));color:#fff;border-color:transparent;
  box-shadow:0 8px 20px color-mix(in srgb, var(--color-primary) 32%, transparent);}
.len.is-on span{color:rgba(255,255,255,.8);}
[data-theme="dark"] .len.is-on{color:var(--color-text-inverse);}
[data-theme="dark"] .len.is-on span{color:color-mix(in srgb, var(--color-text-inverse) 75%, transparent);}
.trk-sub{font-size:var(--text-sm);color:var(--color-text-muted);margin:0;min-height:2.6em;}

/* ---- the card's two columns ----
   Left is the pitch, right is what you walk away with. The side column is a
   tinted panel of its own so the two read as deliberate halves rather than
   one column that ran long. */
.trk-main{min-width:0;display:flex;flex-direction:column;}
.trk-side{min-width:0;align-self:start;
  padding:clamp(var(--space-6),2.2vw,var(--space-8));
  border-radius:var(--radius-xl);
  background:color-mix(in srgb, var(--color-primary) 4%, var(--color-surface-alt));
  border:1px solid color-mix(in srgb, var(--color-primary) 12%, transparent);}
.trk-sidelabel{font-family:var(--font-display);font-weight:800;
  font-size:var(--text-xs);letter-spacing:.09em;text-transform:uppercase;
  color:var(--color-text-muted);margin:0 0 var(--space-4);
  padding-bottom:var(--space-3);
  border-bottom:1px solid color-mix(in srgb, var(--color-text) 8%, transparent);}
/* A rule under each label groups what follows it, so the two halves of the
   panel read as two blocks rather than one long run. */
.trk-build + .trk-sidelabel{margin-top:var(--space-6);}
.trk-sidelabel span{color:var(--color-primary);}

.trk-build{list-style:none;margin:0;padding:0;display:grid;gap:.6rem;}
.trk-build li{display:flex;gap:.55rem;align-items:flex-start;
  font-size:var(--text-sm);line-height:1.45;}
.trk-build [data-lucide]{width:1rem;height:1rem;flex:none;margin-top:.22rem;
  color:var(--color-primary);}

.trk-tags{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.35rem;}
.trk-tags li{font-size:var(--text-xs);font-weight:600;line-height:1.1;
  padding:.32rem .6rem;border-radius:var(--radius-full);
  color:var(--color-text-muted);
  background:color-mix(in srgb, var(--color-text) 5%, transparent);
  border:1px solid color-mix(in srgb, var(--color-text) 9%, transparent);}

.trk-side .btn{margin-top:var(--space-6);}
.trk-side .btn + .btn{margin-top:var(--space-3);}

@media (max-width:980px){
  .trk{grid-template-columns:1fr;}
  .trk-sub{min-height:0;}
}
@media (max-width:560px){
  .trk-head{gap:var(--space-4);}
  .trk-ico{width:46px;height:46px;}
  .len{flex:1 1 auto;min-width:0;}
}


/* ---- the cohort carousel ----
   Photo-led: the portrait sits on a deep brand-gradient panel with two soft
   colour washes over it, cropped to a circle with a white ring, and the copy
   column keeps a readable width rather than stretching across half a very
   wide card. */
.icar .pslide{grid-template-columns:.88fr 1.12fr;}
.intern-art{display:grid;place-items:center;padding:clamp(var(--space-6),3vw,var(--space-10));
  background:linear-gradient(140deg,#1B1046 0%,#4A21B8 46%,#07535B 100%);min-height:280px;position:relative;}
.intern-art::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(60% 60% at 24% 16%, rgba(3,247,235,.26) 0%, transparent 62%),
             radial-gradient(60% 60% at 82% 88%, rgba(249,91,246,.22) 0%, transparent 60%);}
.intern-art img,.intern-photo{position:relative;width:min(248px,78%);aspect-ratio:1;border-radius:50%;object-fit:cover;
  box-shadow:0 0 0 6px rgba(255,255,255,.16), 0 24px 50px rgba(0,0,0,.45);}
.intern-photo.is-reserved{display:grid;place-items:center;background:rgba(255,255,255,.1);
  border:1px solid rgba(255,255,255,.22);backdrop-filter:blur(6px);}
.intern-photo.is-reserved b{font-family:var(--font-display);font-weight:800;font-size:2.4rem;color:#fff;}
.intern-aff{font-size:var(--text-sm);color:var(--color-text-muted);margin:0 0 var(--space-4);}
.icar .pslide-body{max-width:56ch;}

/* Status pill stays on one line; the track and length sit under it. The <s>
   is a mid-dot drawn in CSS so it is never read out or copied with the text. */
.pslide-state{white-space:nowrap;}
.pslide-state.is-live{color:var(--color-primary);
  background:color-mix(in srgb, var(--color-primary) 9%, transparent);
  border-color:color-mix(in srgb, var(--color-primary) 22%, transparent);}
.pslide-state.is-live s{background:var(--color-primary);}
/* An intern who has finished their track. Distinct from "in session" so the
   same carousel can carry both without the section over-claiming. */
.pslide-state.is-done{color:var(--color-success);
  background:color-mix(in srgb, var(--color-success) 10%, transparent);
  border-color:color-mix(in srgb, var(--color-success) 24%, transparent);}
.pslide-state.is-done s{background:var(--color-success);}
.intern-meta{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;
  margin:var(--space-4) 0 0;font-size:var(--text-sm);font-weight:600;
  color:var(--color-text-muted);}
.intern-meta s{width:.28rem;height:.28rem;border-radius:50%;flex:none;
  background:var(--color-text-faint);text-decoration:none;}
/* Profile link on an intern card. Same pill as the mentor cards. */
.intern-links{margin:var(--space-5) 0 0;}

@media (max-width:860px){
  .icar .pslide{grid-template-columns:1fr;}
  .intern-art{min-height:240px;aspect-ratio:auto;}
}

/* =====================================================================
   ACADEMY GALLERY — a peeking filmstrip of session photographs.
   Several are in view at once with the next one cut by the edge, so it
   reads as a gallery you can pull through rather than a fixed collage.
   Drag with a pointer, swipe on touch, arrow keys, arrows or dots.
   Contents come from PLANTNURA_ACADEMY_PHOTOS, so updating it weekly is
   one line of data and a file.
   ===================================================================== */
.gal{position:relative;margin-top:var(--space-10);}
.gal-track{
  display:grid;grid-auto-flow:column;
  grid-auto-columns:clamp(280px, 34%, 460px);
  gap:var(--space-5);
  overflow-x:auto;overscroll-behavior-x:contain;
  scroll-snap-type:x mandatory;scroll-behavior:smooth;
  scrollbar-width:none;-ms-overflow-style:none;
  padding-block:var(--space-2);
  /* The gutters let the first and last photo sit against the container
     edge while still snapping to the same line as the rest. */
  padding-inline:1px;
  cursor:grab;}
.gal-track::-webkit-scrollbar{display:none;}
.gal-track.is-dragging{cursor:grabbing;scroll-behavior:auto;scroll-snap-type:none;}
.gal-track.is-dragging img{pointer-events:none;}
.gal-track:focus-visible{outline:3px solid var(--color-primary);outline-offset:6px;border-radius:var(--radius-xl);}
@media (prefers-reduced-motion:reduce){ .gal-track{scroll-behavior:auto;} }

.gshot{scroll-snap-align:center;margin:0;position:relative;
  border-radius:var(--radius-xl);overflow:hidden;background:#050B1A;
  box-shadow:0 14px 36px color-mix(in srgb, var(--color-text) 12%, transparent);
  transition:box-shadow var(--transition),transform var(--transition);}
.gshot img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover;
  transition:transform .9s cubic-bezier(.16,1,.3,1);
  -webkit-user-drag:none;user-select:none;}
.gshot:hover{transform:translateY(-3px);
  box-shadow:0 22px 50px color-mix(in srgb, var(--color-primary) 18%, transparent);}
.gshot:hover img{transform:scale(1.04);}
/* Caption sits on the photo, on a gradient that keeps it legible whatever
   is underneath. */
.gshot figcaption{position:absolute;inset:auto 0 0 0;
  padding:var(--space-8) var(--space-5) var(--space-4);
  font-size:var(--text-sm);font-weight:600;line-height:1.4;color:#fff;
  background:linear-gradient(to top, rgba(4,8,20,.88) 0%, rgba(4,8,20,.55) 55%, transparent 100%);}

.gal-nav{position:absolute;top:calc(50% - var(--space-8));transform:translateY(-50%);z-index:3;
  width:46px;height:46px;border-radius:50%;display:grid;place-items:center;
  background:var(--color-surface);border:1px solid var(--color-divider);
  color:var(--color-text);box-shadow:0 8px 24px color-mix(in srgb, var(--color-text) 18%, transparent);
  transition:all var(--transition);}
.gal-nav.prev{left:calc(-1 * var(--space-5));}
.gal-nav.next{right:calc(-1 * var(--space-5));}
.gal-nav:hover:not(:disabled){background:var(--color-primary);color:#fff;border-color:transparent;transform:translateY(-50%) scale(1.06);}
.gal-nav:disabled{opacity:0;pointer-events:none;}
.gal-nav [data-lucide]{width:1.25rem;height:1.25rem;}
@media (max-width:1180px){ .gal-nav.prev{left:var(--space-3);} .gal-nav.next{right:var(--space-3);} }
@media (max-width:760px){ .gal-nav{display:none;} }

.gal-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-5);
  flex-wrap:wrap;margin-top:var(--space-5);}
.gal-cap{display:flex;align-items:center;gap:.5rem;margin:0;
  font-size:var(--text-sm);color:var(--color-text-muted);}
.gal-cap [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);flex:none;}
.gal-dots{display:flex;gap:.45rem;margin-left:auto;}
.gal-dots button{width:8px;height:8px;border-radius:50%;padding:0;
  background:color-mix(in srgb, var(--color-text) 20%, transparent);
  transition:all var(--transition);}
.gal-dots button:hover{background:color-mix(in srgb, var(--color-primary) 55%, transparent);}
.gal-dots button.is-on{width:24px;border-radius:var(--radius-full);
  background:linear-gradient(90deg,var(--color-primary),var(--color-accent-bright));}

@media (max-width:760px){
  .gal-track{grid-auto-columns:86%;}
  .gal-foot{justify-content:center;}
  .gal-dots{margin-left:0;}
}

/* =====================================================================
   BIOMETRIK CONSULTING
   Built on the Education pieces (edu-hero, edu-snapshot, sec-head, card-grid,
   accordion, cta-band) so the consultancy pages read as the same product.
   What is new here: the three premise pillars, the orbital workflow, the
   audience selector, the deliverable strip and the security split.
   ===================================================================== */

/* ---- premise pillars ---- */
.pillars{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(290px,100%),1fr));
  gap:var(--space-6);margin-top:var(--space-10);}
.pil{position:relative;padding:var(--space-8) var(--space-6) var(--space-6);
  border-radius:var(--radius-2xl);background:var(--color-surface);
  border:1px solid var(--color-divider);overflow:hidden;
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);}
/* A gradient hairline along the top edge, drawn rather than bordered so it
   can carry the full brand ramp. */
.pil::before{content:"";position:absolute;inset:0 0 auto;height:3px;
  background:linear-gradient(90deg,var(--color-primary),var(--color-indigo),var(--color-accent-bright));
  opacity:.85;}
.pil:hover{transform:translateY(-3px);border-color:color-mix(in srgb, var(--color-primary) 28%, transparent);
  box-shadow:0 22px 48px color-mix(in srgb, var(--color-primary) 14%, transparent);}
.pil-n{display:block;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-sm);letter-spacing:.12em;
  color:color-mix(in srgb, var(--color-primary) 55%, var(--color-text-faint));
  margin-bottom:var(--space-4);}
.pil h3{font-family:var(--font-display);font-weight:800;letter-spacing:-.02em;
  font-size:var(--text-xl);line-height:1.14;margin:0 0 var(--space-3);}
.pil p{color:var(--color-text-muted);margin:0;}

/* =====================================================================
   THE ORBITAL WORKFLOW
   Six stages on a ring with a hub in the middle that carries the active one.
   The plain <ol> underneath is the real content: it is always in the DOM and
   the ring only takes over once the script adds .is-live, so with no JS, a
   narrow screen or reduced motion the reader still gets six numbered steps.
   Node placement is one trig call in JS writing --x/--y per node; everything
   else is CSS.
   ===================================================================== */
.orbit{margin-top:var(--space-10);}
.orbit-ring{display:none;}
.orbit.is-live .orbit-ring{display:block;position:relative;
  width:min(600px, calc(100% - 320px));aspect-ratio:1;margin:0 auto;}
.orbit.is-live .orbit-list{display:none;}

.orbit-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;}
.orb-track{fill:none;stroke:var(--color-divider);stroke-width:1.5;}
.orb-prog{fill:none;stroke:url(#orbGrad);stroke-width:3;stroke-linecap:round;
  stroke-dasharray:100;stroke-dashoffset:100;
  transform:rotate(-90deg);transform-origin:200px 200px;
  transition:stroke-dashoffset .6s cubic-bezier(.4,0,.2,1);}

/* Each node sits at --x/--y from the centre, then is pulled back by half its
   own size. Percentages are of the ring box, so it all scales together. */
.orb-node{position:absolute;left:var(--l);top:var(--t);
  transform:translate(-50%,-50%);
  width:clamp(52px,8.6%,68px);aspect-ratio:1;border-radius:50%;
  display:grid;place-items:center;cursor:pointer;
  background:var(--color-surface);border:1px solid var(--color-divider);
  color:var(--color-text-muted);
  box-shadow:0 6px 18px color-mix(in srgb, var(--color-text) 8%, transparent);
  transition:all var(--transition);z-index:2;}
.orb-node [data-lucide]{width:1.35rem;height:1.35rem;}
.orb-node:hover{border-color:color-mix(in srgb, var(--color-primary) 45%, transparent);
  color:var(--color-primary);transform:translate(-50%,-50%) scale(1.07);}
.orb-node.is-done{color:var(--color-primary);
  border-color:color-mix(in srgb, var(--color-primary) 32%, transparent);
  background:color-mix(in srgb, var(--color-primary) 7%, var(--color-surface));}
.orb-node.is-on{color:#fff;border-color:transparent;
  background:linear-gradient(135deg,var(--color-primary),var(--color-indigo));
  box-shadow:0 10px 30px color-mix(in srgb, var(--color-primary) 42%, transparent);
  transform:translate(-50%,-50%) scale(1.14);}
[data-theme="dark"] .orb-node.is-on{color:var(--color-text-inverse);}
.orb-node:focus-visible{outline:3px solid var(--color-primary);outline-offset:4px;}

/* ---- radial labels ----
   Each label sits on the far side of its node from the centre, so it always
   reads outside the ring. A numbered kicker over a display-weight title, with
   a short tick back to the node. Labels stagger in with the ring and the
   active one lifts and takes the brand colour. */
.orb-lab{position:absolute;display:flex;flex-direction:column;gap:.15rem;
  white-space:nowrap;pointer-events:none;
  opacity:0;animation:orbLabIn .6s cubic-bezier(.2,.7,.2,1) forwards;
  animation-delay:calc(.35s + var(--i,0) * .09s);}
@keyframes orbLabIn{to{opacity:1;}}
.orb-lab i{font-style:normal;font-family:var(--font-display);font-weight:800;
  font-size:.62rem;letter-spacing:.16em;line-height:1;
  color:var(--color-text-faint);transition:color var(--transition);}
.orb-lab b{font-family:var(--font-display);font-weight:800;
  font-size:var(--text-sm);letter-spacing:-.01em;line-height:1.1;
  color:var(--color-text);
  transition:color var(--transition),transform var(--transition);}
/* the tick between node and label */
.orb-lab::before{content:"";position:absolute;background:var(--color-divider);
  transition:background var(--transition);}

/* right-hand nodes: label to the right, left-aligned */
.lab-right .orb-lab{left:calc(100% + 22px);top:50%;transform:translateY(-50%);align-items:flex-start;text-align:left;}
.lab-right .orb-lab::before{left:-16px;top:50%;width:10px;height:1.5px;transform:translateY(-50%);}
/* left-hand nodes: label to the left, right-aligned */
.lab-left .orb-lab{right:calc(100% + 22px);top:50%;transform:translateY(-50%);align-items:flex-end;text-align:right;}
.lab-left .orb-lab::before{right:-16px;top:50%;width:10px;height:1.5px;transform:translateY(-50%);}
/* top node: label above, centred */
.lab-top .orb-lab{bottom:calc(100% + 18px);left:50%;transform:translateX(-50%);align-items:center;text-align:center;}
.lab-top .orb-lab::before{left:50%;bottom:-12px;width:1.5px;height:8px;transform:translateX(-50%);}
/* bottom node: label below, centred */
.lab-bottom .orb-lab{top:calc(100% + 18px);left:50%;transform:translateX(-50%);align-items:center;text-align:center;}
.lab-bottom .orb-lab::before{left:50%;top:-12px;width:1.5px;height:8px;transform:translateX(-50%);}

/* states */
.orb-node.is-done .orb-lab i{color:var(--color-primary);}
.orb-node.is-on .orb-lab i{color:var(--color-primary);}
.orb-node.is-on .orb-lab b{color:var(--color-primary);
  background:linear-gradient(90deg,var(--color-primary),var(--color-indigo));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.orb-node.is-on .orb-lab::before{background:var(--color-primary);}
.lab-right.is-on .orb-lab b,.lab-left.is-on .orb-lab b{transform:translateX(0);}
/* The scaled active node would scale its label too, so the label undoes it. */
.orb-node.is-on .orb-lab{transform:translateY(-50%) scale(.877);}
.lab-top.is-on .orb-lab,.lab-bottom.is-on .orb-lab{transform:translateX(-50%) scale(.877);}
/* A soft pulse ring on the active node. */
.orb-node.is-on::after{content:"";position:absolute;inset:-6px;border-radius:50%;
  border:2px solid color-mix(in srgb, var(--color-primary) 55%, transparent);
  animation:orbPulse 2.2s ease-out infinite;pointer-events:none;}
@keyframes orbPulse{0%{transform:scale(.9);opacity:.9;}100%{transform:scale(1.55);opacity:0;}}

/* hub content eases in on every change */
.orbit-hub.is-swap .hub-step,.orbit-hub.is-swap .hub-title,.orbit-hub.is-swap .hub-body{
  animation:hubIn .45s cubic-bezier(.2,.7,.2,1) both;}
.orbit-hub.is-swap .hub-title{animation-delay:.05s;}
.orbit-hub.is-swap .hub-body{animation-delay:.1s;}
@keyframes hubIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}}
@media (prefers-reduced-motion:reduce){
  .orb-lab{animation:none;opacity:1;}
  .orb-node.is-on::after{animation:none;}
  .orbit-hub.is-swap .hub-step,.orbit-hub.is-swap .hub-title,.orbit-hub.is-swap .hub-body{animation:none;}
}

.orbit-hub{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:54%;aspect-ratio:1;border-radius:50%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:clamp(var(--space-5),4%,var(--space-8));
  background:var(--color-surface);border:1px solid var(--color-divider);
  box-shadow:0 20px 50px color-mix(in srgb, var(--color-text) 10%, transparent);}
.orbit-hub::before{content:"";position:absolute;inset:-1px;border-radius:50%;
  padding:1px;pointer-events:none;
  background:linear-gradient(140deg,color-mix(in srgb, var(--color-primary) 55%, transparent),transparent 60%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;}
.hub-step{font-family:var(--font-display);font-weight:800;font-size:var(--text-xs);
  letter-spacing:.14em;color:var(--color-primary);margin-bottom:.55rem;}
.hub-title{font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;
  font-size:clamp(1.15rem,.85rem + .9vw,1.6rem);line-height:1.1;margin:0 0 .6rem;}
.hub-body{font-size:var(--text-sm);line-height:1.48;color:var(--color-text-muted);margin:0;
  max-width:32ch;}

/* the fallback list, and the only thing shown below 900px */
.orbit-list{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-5);
  counter-reset:ol;}
.ol-item{display:flex;gap:var(--space-5);align-items:flex-start;
  padding:var(--space-5) var(--space-6);border-radius:var(--radius-xl);
  background:var(--color-surface);border:1px solid var(--color-divider);}
.ol-n{flex:none;font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);
  line-height:1;color:var(--color-primary);
  min-width:2.4rem;padding-top:.15rem;}
.ol-item h4{font-family:var(--font-display);font-weight:800;font-size:var(--text-base);
  margin:0 0 .35rem;}
.ol-item p{color:var(--color-text-muted);font-size:var(--text-sm);margin:0;}

@media (max-width:900px){
  .orbit.is-live .orbit-ring{display:none;}
  .orbit.is-live .orbit-list{display:grid;}
}
@media (prefers-reduced-motion:reduce){
  .orbit.is-live .orbit-ring{display:none;}
  .orbit.is-live .orbit-list{display:grid;}
  .orb-prog{transition:none;}
}

/* =====================================================================
   WHO WE HELP - a selector, not four flat cards. Same interaction grammar
   as the length selector on the Internship Academy tracks.
   ===================================================================== */
.aud{margin-top:var(--space-10);display:grid;grid-template-columns:.9fr 2.1fr;
  gap:clamp(var(--space-6),3vw,var(--space-10));align-items:start;}
.aud-tabs{display:grid;gap:.6rem;}
.aud-tab{display:flex;gap:.85rem;align-items:flex-start;text-align:left;
  padding:var(--space-5);border-radius:var(--radius-xl);
  background:var(--color-surface);border:1px solid var(--color-divider);
  color:var(--color-text);cursor:pointer;transition:all var(--transition);}
.aud-tab > [data-lucide]{width:1.25rem;height:1.25rem;flex:none;margin-top:.15rem;
  color:var(--color-primary);transition:color var(--transition);}
.aud-tab b{display:block;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-base);line-height:1.15;}
.aud-tab i{display:block;font-style:normal;font-size:var(--text-xs);
  color:var(--color-text-muted);margin-top:.2rem;transition:color var(--transition);}
.aud-tab:hover{border-color:color-mix(in srgb, var(--color-primary) 40%, transparent);
  transform:translateX(3px);}
.aud-tab.is-on{background:linear-gradient(135deg,var(--color-primary),var(--color-indigo));
  border-color:transparent;color:#fff;
  box-shadow:0 12px 30px color-mix(in srgb, var(--color-primary) 32%, transparent);}
.aud-tab.is-on > [data-lucide]{color:#fff;}
.aud-tab.is-on i{color:rgba(255,255,255,.82);}
[data-theme="dark"] .aud-tab.is-on{color:var(--color-text-inverse);}
[data-theme="dark"] .aud-tab.is-on > [data-lucide]{color:var(--color-text-inverse);}
[data-theme="dark"] .aud-tab.is-on i{color:color-mix(in srgb, var(--color-text-inverse) 78%, transparent);}

.aud-panel{padding:clamp(var(--space-6),2.4vw,var(--space-10));
  border-radius:var(--radius-2xl);
  background:color-mix(in srgb, var(--color-primary) 4%, var(--color-surface));
  border:1px solid color-mix(in srgb, var(--color-primary) 14%, transparent);
  opacity:0;transform:translateY(6px);}
.aud-panel.is-in{animation:audIn .38s cubic-bezier(.4,0,.2,1) forwards;}
@keyframes audIn{to{opacity:1;transform:none;}}
@media (prefers-reduced-motion:reduce){
  .aud-panel{opacity:1;transform:none;}
  .aud-panel.is-in{animation:none;}
}
.aud-lede{font-family:var(--font-display);font-weight:500;
  font-size:clamp(1.05rem,.9rem + .5vw,1.35rem);line-height:1.35;
  color:var(--color-text);margin:0 0 var(--space-8);max-width:52ch;}
/* optional one-line "why it stands out" callout (e.g. DataViz Pro "Beyond a prompt") */
.aud-edge{position:relative;margin:calc(-1 * var(--space-4)) 0 var(--space-8);padding:var(--space-4) var(--space-5);border-radius:var(--radius-lg);
  font-size:var(--text-sm);line-height:1.5;color:var(--color-text);max-width:62ch;
  background:linear-gradient(100deg,color-mix(in srgb, var(--color-primary) 10%, var(--color-surface)),color-mix(in srgb, var(--color-teal) 8%, var(--color-surface)));
  border:1px solid color-mix(in srgb, var(--color-primary) 22%, transparent);}
.aud-edge::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:3px;
  background:linear-gradient(180deg,var(--color-primary),var(--color-teal));}
.aud-edge span{display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;font-family:var(--font-display);font-weight:800;font-size:.68rem;
  letter-spacing:.12em;text-transform:uppercase;color:var(--color-primary);}
.aud-edge span [data-lucide]{width:.9rem;height:.9rem;}
.aud-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));
  gap:var(--space-8);margin-bottom:var(--space-8);}
.aud-cols h4{display:flex;align-items:center;gap:.5rem;
  font-family:var(--font-display);font-weight:800;font-size:var(--text-xs);
  letter-spacing:.09em;text-transform:uppercase;color:var(--color-text-muted);
  margin:0 0 var(--space-4);padding-bottom:var(--space-3);
  border-bottom:1px solid color-mix(in srgb, var(--color-text) 8%, transparent);}
.aud-cols h4 [data-lucide]{width:.95rem;height:.95rem;flex:none;color:var(--color-primary);}
.aud-cols ul{list-style:none;margin:0;padding:0;display:grid;gap:.55rem;}
.aud-cols li{position:relative;padding-left:1.1rem;font-size:var(--text-sm);line-height:1.45;
  color:var(--color-text-muted);}
.aud-cols li::before{content:"";position:absolute;left:0;top:.55em;
  width:.32rem;height:.32rem;border-radius:50%;background:var(--color-primary);}

@media (max-width:900px){
  .aud{grid-template-columns:1fr;}
  .aud-tabs{grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));}
  .aud-tab:hover{transform:none;}
}

/* A centred section head, for a section whose content is itself centred -
   the orbit would otherwise sit under a left-aligned heading and read lopsided. */
.sec-head-mid{text-align:center;margin-left:auto;margin-right:auto;}
.sec-head-mid .eyebrow{justify-content:center;}
.sec-head-mid p{margin-left:auto;margin-right:auto;}

/* ---- deliverable formats ---- */
.fmt{list-style:none;margin:var(--space-10) 0 0;padding:0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:var(--space-5);}
.fmt-item{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;
  column-gap:.85rem;row-gap:.2rem;align-items:center;
  padding:var(--space-5) var(--space-6);border-radius:var(--radius-xl);
  background:var(--color-surface);border:1px solid var(--color-divider);
  transition:all var(--transition);}
.fmt-item:hover{border-color:color-mix(in srgb, var(--color-primary) 30%, transparent);
  transform:translateY(-2px);}
.fmt-item [data-lucide]{grid-row:1 / span 2;width:1.4rem;height:1.4rem;color:var(--color-primary);}
.fmt-item b{font-family:var(--font-display);font-weight:800;font-size:var(--text-base);line-height:1.15;}
.fmt-item span{font-size:var(--text-xs);color:var(--color-text-muted);line-height:1.4;}


/* ---- data security split ---- */
.sec-split{display:grid;grid-template-columns:1.05fr .95fr;
  gap:clamp(var(--space-8),4vw,var(--space-16));align-items:start;}
.sec-split h2{font-family:var(--font-display);font-weight:800;letter-spacing:-.03em;
  font-size:clamp(1.7rem,1.2rem + 1.6vw,2.6rem);line-height:1.08;
  margin:var(--space-4) 0 var(--space-5);}
.sec-split p{color:var(--color-text-muted);max-width:56ch;}
.sec-promise{display:flex;gap:.85rem;align-items:flex-start;margin-top:var(--space-6);
  padding:var(--space-5) var(--space-6);border-radius:var(--radius-xl);
  background:color-mix(in srgb, var(--color-success) 8%, transparent);
  border:1px solid color-mix(in srgb, var(--color-success) 22%, transparent);
  color:var(--color-text);font-size:var(--text-sm);line-height:1.5;max-width:none;}
.sec-promise [data-lucide]{width:1.25rem;height:1.25rem;flex:none;margin-top:.1rem;
  color:var(--color-success);}
.sec-list{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-4);}
.sec-list li{display:flex;gap:.95rem;align-items:flex-start;
  padding:var(--space-5) var(--space-6);border-radius:var(--radius-xl);
  background:var(--color-surface);border:1px solid var(--color-divider);}
.sec-list [data-lucide]{width:1.2rem;height:1.2rem;flex:none;margin-top:.15rem;color:var(--color-primary);}
.sec-list b{display:block;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-base);line-height:1.15;margin-bottom:.2rem;}
.sec-list span{display:block;font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.45;}
@media (max-width:900px){ .sec-split{grid-template-columns:1fr;} }

/* =====================================================================
   BIOMETRIK - hero video, service cards, platform cards.
   ===================================================================== */

/* ---- the film panel ----
   A cover with one obvious play control, not an autoplaying loop. The poster
   does all the work until someone chooses to watch, so a slow connection
   pays for an image and nothing more. */
.hvid{display:flex;flex-direction:column;gap:var(--space-5);}
.hv-frame{position:relative;margin:0;border-radius:var(--radius-2xl);overflow:hidden;
  aspect-ratio:16/9;background:#0B0726;
  border:1px solid color-mix(in srgb, var(--color-primary) 22%, transparent);
  box-shadow:0 30px 70px color-mix(in srgb, var(--color-text) 18%, transparent);}
.hv-media{width:100%;height:100%;object-fit:cover;display:block;background:#0B0726;}

/* The play cover: the whole frame is the button. */
.hv-play{position:absolute;inset:0;z-index:2;cursor:pointer;
  display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;
  gap:var(--space-5);padding:var(--space-8);text-align:left;
  background:linear-gradient(0deg,rgba(6,4,20,.78) 0%,rgba(6,4,20,.25) 48%,transparent 100%);
  border:0;transition:background var(--transition);}
.hv-play:hover{background:linear-gradient(0deg,rgba(6,4,20,.84) 0%,rgba(6,4,20,.34) 52%,rgba(6,4,20,.08) 100%);}
.hv-play:focus-visible{outline:3px solid var(--color-accent-bright);outline-offset:-4px;}
.hv-play-ico{width:62px;height:62px;border-radius:50%;flex:none;
  display:grid;place-items:center;color:#fff;
  background:linear-gradient(135deg,var(--color-primary),var(--color-indigo));
  box-shadow:0 12px 34px color-mix(in srgb, var(--color-primary) 55%, transparent);
  transition:transform var(--transition);}
.hv-play:hover .hv-play-ico{transform:scale(1.07);}
.hv-play-ico [data-lucide]{width:1.5rem;height:1.5rem;margin-left:3px;}
.hv-play-txt b{display:block;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-lg);line-height:1.15;color:#fff;}
.hv-play-txt i{display:block;font-style:normal;font-size:var(--text-xs);
  letter-spacing:.06em;text-transform:uppercase;font-weight:700;
  color:var(--color-accent-bright);margin-top:.3rem;}
@media (max-width:560px){
  .hv-play{padding:var(--space-5);gap:var(--space-4);}
  .hv-play-ico{width:52px;height:52px;}
}

.hv-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-4);margin:0;
  padding:var(--space-5) var(--space-6);border-radius:var(--radius-xl);
  background:var(--color-surface);border:1px solid var(--color-divider);}
.hv-facts > div{min-width:0;}
.hv-facts dt{font-size:var(--text-xs);color:var(--color-text-muted);margin-bottom:.2rem;}
.hv-facts dd{margin:0;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-sm);line-height:1.2;}
@media (max-width:1080px){ .hv-facts{grid-template-columns:1fr;gap:.6rem;} }

/* ---- service cards ---- */
.svc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(330px,100%),1fr));
  gap:var(--space-6);margin-top:var(--space-10);}
.svc{display:flex;flex-direction:column;overflow:hidden;
  border-radius:var(--radius-2xl);background:var(--color-surface);
  border:1px solid var(--color-divider);
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);}
.svc:hover{transform:translateY(-4px);
  border-color:color-mix(in srgb, var(--color-primary) 28%, transparent);
  box-shadow:0 26px 56px color-mix(in srgb, var(--color-primary) 16%, transparent);}
.svc-art{position:relative;aspect-ratio:16/9;overflow:hidden;background:#140B35;}
.svc-art img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .6s cubic-bezier(.4,0,.2,1);}
.svc:hover .svc-art img{transform:scale(1.05);}
.svc-art::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(0deg,rgba(10,6,30,.55) 0%,transparent 52%);}
.svc-body{padding:var(--space-6);display:flex;flex-direction:column;flex:1;}
.svc-kick{font-family:var(--font-display);font-weight:800;font-size:var(--text-xs);
  letter-spacing:.14em;text-transform:uppercase;color:var(--color-primary);
  margin-bottom:var(--space-3);}
.svc-body h3{font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;
  font-size:var(--text-xl);line-height:1.12;margin:0 0 var(--space-3);}
.svc-body > p{color:var(--color-text-muted);font-size:var(--text-sm);margin:0 0 var(--space-5);}
.svc-chips{list-style:none;margin:auto 0 0;padding:var(--space-5) 0 0;
  border-top:1px solid color-mix(in srgb, var(--color-text) 8%, transparent);
  display:flex;flex-wrap:wrap;gap:.35rem;}
.svc-chips li{font-size:var(--text-xs);font-weight:600;line-height:1.1;
  padding:.3rem .58rem;border-radius:var(--radius-full);
  color:var(--color-text-muted);
  background:color-mix(in srgb, var(--color-primary) 6%, transparent);
  border:1px solid color-mix(in srgb, var(--color-primary) 14%, transparent);}

/* ---- our own platforms ---- */
/* Three statements between the heading and the platform cards: what makes
   the stack different, in one line each. */
.plat-claims{list-style:none;margin:var(--space-8) auto 0;padding:0;max-width:1080px;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4);}
.plat-claims li{display:flex;gap:.85rem;align-items:flex-start;
  padding:var(--space-5) var(--space-6);border-radius:var(--radius-xl);
  background:var(--color-surface);border:1px solid var(--color-divider);
  font-size:var(--text-sm);line-height:1.5;color:var(--color-text-muted);text-align:left;}
.plat-claims li [data-lucide]{width:1.25rem;height:1.25rem;flex:none;margin-top:.15rem;color:var(--color-primary);}
.plat-claims b{color:var(--color-text);font-weight:700;}
.plat-claims + .plat{margin-top:var(--space-8);}
@media (max-width:900px){ .plat-claims{grid-template-columns:1fr;} }

.plat{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));
  gap:var(--space-8);margin-top:var(--space-10);}
.plat-card{display:flex;flex-direction:column;overflow:hidden;
  border-radius:var(--radius-2xl);background:var(--color-surface);
  border:1px solid var(--color-divider);
  box-shadow:0 20px 50px color-mix(in srgb, var(--color-text) 9%, transparent);}
/* The product shot is framed as a screen, with a title bar, so a light
   product image reads as a screenshot rather than as a palette clash. */
.plat-shot{position:relative;padding:var(--space-6) var(--space-6) 0;
  background:linear-gradient(160deg,#1B1046 0%,#3A1C96 52%,#07535B 100%);}
.plat-shot::before{content:"";position:absolute;left:var(--space-6);top:calc(var(--space-6) - 16px);
  width:44px;height:8px;border-radius:99px;
  background:radial-gradient(circle at 5px 4px,rgba(255,255,255,.55) 3px,transparent 3px),
             radial-gradient(circle at 22px 4px,rgba(255,255,255,.35) 3px,transparent 3px),
             radial-gradient(circle at 39px 4px,rgba(255,255,255,.22) 3px,transparent 3px);}
.plat-shot img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;
  object-position:top center;
  border-radius:var(--radius-lg) var(--radius-lg) 0 0;
  border:1px solid rgba(255,255,255,.18);border-bottom:0;
  box-shadow:0 -12px 40px rgba(0,0,0,.35);}
/* The shot runs off the bottom of the frame on purpose - the screen carries
   on past the card. A short fade stops that being read as a crop bug. */
.plat-shot::after{content:"";position:absolute;left:0;right:0;bottom:0;height:56px;
  pointer-events:none;
  background:linear-gradient(0deg,var(--color-surface) 12%,transparent 100%);}
.plat-body{padding:var(--space-8) var(--space-6) var(--space-6);display:flex;flex-direction:column;flex:1;}
/* ---- the registered marks on a platform card ----
   Both marks are stacked lockups: icon over wordmark over tagline. At the
   26px they were rendered at, the tagline was a smear and the whole thing
   read as a sticker. They now get a real size, and a light plate because
   the black wordmark in each disappears on a dark surface. The plate is
   sized to the mark with even optical padding rather than being a generic
   chip, and the two are matched on the height of their wordmark rather than
   on overall image height, which differs between them. */
.plat-logo{align-self:flex-start;margin-bottom:var(--space-6);
  display:inline-grid;place-items:center;border-radius:var(--radius-xl);}
.plat-logo img{display:block;height:var(--logo-h,98px);width:auto;}
/* KropAnalytiX is a taller lockup than DataViz Pro, so matching raw image
   height makes its wordmark look smaller. Nudged so the two read as equals. */
#platform .plat-card:first-child .plat-logo img{--logo-h:106px;}
/* The card is already light, so in light mode the mark sits straight on it -
   a white plate on a white card is just a seam. The plate exists only where
   it is needed: in dark mode, where the black wordmark in each of these
   marks would otherwise disappear. The artwork itself is never altered. */
[data-theme="dark"] .plat-logo{background:#f7f7fa;
  padding:var(--space-5) var(--space-6);
  border:1px solid rgba(255,255,255,.14);box-shadow:0 8px 26px rgba(0,0,0,.45);}
/* Fallback if a mark ever fails to load - the name, never nothing. */
.plat-name{align-self:flex-start;margin-bottom:var(--space-5);
  font-family:var(--font-display);font-weight:800;font-size:var(--text-2xl);}

.plat-body h3{font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;
  font-size:var(--text-xl);line-height:1.12;margin:0 0 var(--space-3);}

.plat-body > p{color:var(--color-text-muted);margin:0 0 var(--space-5);}
.plat-pts{list-style:none;margin:0 0 var(--space-6);padding:0;display:grid;gap:.6rem;}
.plat-pts li{display:flex;gap:.55rem;align-items:flex-start;font-size:var(--text-sm);line-height:1.45;}
.plat-pts [data-lucide]{width:1rem;height:1rem;flex:none;margin-top:.22rem;color:var(--color-primary);}
.plat-body .link-arrow{margin-top:auto;align-self:flex-start;}
@media (max-width:560px){
  .plat-shot{padding:var(--space-5) var(--space-5) 0;}
  .plat-shot::before{left:var(--space-5);top:calc(var(--space-5) - 14px);}
}

/* =====================================================================
   BIOMETRIK - report gallery (#receive).
   Sixteen real report pages in sets of four. A set arrives from below with
   a stagger, holds and breathes, sweeps out upward, and the next set
   arrives. The sheets are documents, so they stay white in both themes;
   the stage behind them themes.
   ===================================================================== */
.rgal{margin-top:var(--space-10);}
.rg-stage{position:relative;isolation:isolate;perspective:1800px;
  padding:clamp(var(--space-6),3vw,var(--space-10)) clamp(var(--space-5),3vw,var(--space-12));}
.rg-stage::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:var(--radius-2xl);
  background:
    radial-gradient(60% 70% at 18% 20%, color-mix(in srgb, var(--color-brand-violet) 24%, transparent), transparent 72%),
    radial-gradient(55% 65% at 84% 84%, color-mix(in srgb, var(--color-gold) 22%, transparent), transparent 72%),
    var(--color-surface-alt);
  border:1px solid var(--color-divider);}
[data-theme="dark"] .rg-stage::before{
  background:
    radial-gradient(60% 70% at 18% 20%, color-mix(in srgb, var(--color-brand-violet) 36%, transparent), transparent 72%),
    radial-gradient(55% 65% at 84% 84%, color-mix(in srgb, var(--color-gold) 24%, transparent), transparent 72%),
    var(--color-surface-alt);}
.rg-stage::after{content:"";position:absolute;inset:0;z-index:-1;border-radius:var(--radius-2xl);
  background-image:radial-gradient(color-mix(in srgb, var(--color-text) 14%, transparent) 1px, transparent 1.2px);
  background-size:18px 18px;opacity:.45;
  mask-image:radial-gradient(70% 70% at 50% 50%, #000 30%, transparent 100%);
  -webkit-mask-image:radial-gradient(70% 70% at 50% 50%, #000 30%, transparent 100%);}

/* All sets share one footprint: the first stays in flow to give the stage its
   height, the rest lie over it. Only the set that is .is-on (or sweeping .is-out)
   is visible. */
.rg-set{list-style:none;margin:0;padding:0;display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(var(--space-4),2.4vw,var(--space-8));
  transform-style:preserve-3d;visibility:hidden;pointer-events:none;}
.rg-set:first-child{position:relative;}
.rg-set:not(:first-child){position:absolute;inset:clamp(var(--space-6),3vw,var(--space-10)) clamp(var(--space-5),3vw,var(--space-12));}
.rg-set.is-on,.rg-set.is-out{visibility:visible;}
.rg-set.is-on{pointer-events:auto;}

.rg-sheet{position:relative;margin:0;aspect-ratio:612 / 700;border-radius:8px;overflow:hidden;background:#fff;
  border:1px solid rgba(15,17,21,.12);
  box-shadow:0 24px 50px -18px rgba(18,12,60,.35), 0 6px 16px -6px rgba(18,12,60,.18);
  opacity:0;will-change:transform,opacity;}
.rg-sheet img{display:block;width:100%;height:100%;object-fit:cover;object-position:top;
  transition:transform .6s cubic-bezier(.2,.7,.2,1);}
.rg-sheet:hover img{transform:scale(1.045);}
[data-theme="dark"] .rg-sheet{border-color:rgba(255,255,255,.14);
  box-shadow:0 28px 56px -18px rgba(0,0,0,.7), 0 6px 16px -6px rgba(0,0,0,.5);}

/* Arrive: rise from below with a tilt, one after another. Hold: a slow breath,
   each sheet on its own phase. Leave: lift away upward. */
.rg-set.is-on .rg-sheet{
  animation:
    rgIn .95s cubic-bezier(.16,.8,.24,1) calc(var(--k,0) * .12s) both,
    rgBreathe 5.2s ease-in-out calc(.95s + var(--k,0) * .12s + var(--k,0) * -1.3s) infinite alternate;}
.rg-set.is-out .rg-sheet{opacity:1;animation:rgOut .6s cubic-bezier(.4,0,.8,.4) calc(var(--k,0) * .07s) both;}
.rgal.is-back .rg-set.is-on .rg-sheet{animation-name:rgInBack, rgBreathe;}
.rgal.is-back .rg-set.is-out .rg-sheet{animation-name:rgOutBack;}
@keyframes rgIn{
  from{opacity:0;transform:translate3d(0,72px,-140px) rotateX(14deg);}
  60%{opacity:1;}
  to{opacity:1;transform:translate3d(0,0,0) rotateX(0);}}
@keyframes rgOut{
  from{opacity:1;transform:translate3d(0,0,0) rotateX(0);}
  to{opacity:0;transform:translate3d(0,-56px,90px) rotateX(-10deg);}}
@keyframes rgInBack{
  from{opacity:0;transform:translate3d(0,-72px,-140px) rotateX(-14deg);}
  60%{opacity:1;}
  to{opacity:1;transform:translate3d(0,0,0) rotateX(0);}}
@keyframes rgOutBack{
  from{opacity:1;transform:translate3d(0,0,0) rotateX(0);}
  to{opacity:0;transform:translate3d(0,56px,90px) rotateX(10deg);}}
@keyframes rgBreathe{from{transform:translate3d(0,0,0);}to{transform:translate3d(0,-9px,0);}}
.rgal.is-still .rg-set.is-on .rg-sheet{animation-play-state:running,paused;}

/* ---- controls: arrows either side of four progress dots ---- */
.rg-ctl{display:flex;align-items:center;justify-content:center;gap:var(--space-5);margin-top:var(--space-6);}
.rg-btn{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;cursor:pointer;
  background:var(--color-surface);border:1px solid var(--color-divider);color:var(--color-text);
  transition:all var(--transition);}
.rg-btn [data-lucide]{width:1.1rem;height:1.1rem;}
.rg-btn:hover{border-color:var(--color-primary);color:var(--color-primary);transform:translateY(-1px);box-shadow:var(--shadow-sm);}
.rg-dots{list-style:none;margin:0;padding:0;display:flex;gap:.5rem;}
.rg-dots button{position:relative;display:block;width:34px;height:14px;padding:0;border:0;background:transparent;cursor:pointer;}
.rg-dots button::before{content:"";position:absolute;left:0;right:0;top:5px;height:4px;border-radius:2px;
  background:color-mix(in srgb, var(--color-text) 16%, transparent);transition:background var(--transition);}
.rg-dots button:hover::before{background:color-mix(in srgb, var(--color-text) 30%, transparent);}
.rg-dots button i{position:absolute;left:0;top:5px;height:4px;width:100%;border-radius:2px;transform-origin:0 50%;transform:scaleX(0);
  background:linear-gradient(90deg,var(--color-primary),var(--color-gold));}
.rg-dots button[aria-current="true"] i{animation:rgProg var(--rg-dur,6.2s) linear forwards;}
.rgal.is-still .rg-dots button i{animation-play-state:paused;}
@keyframes rgProg{to{transform:scaleX(1);}}

/* Compact variant of the formats grid under the gallery. */
.fmt-compact{margin-top:var(--space-10);grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-4);}
.fmt-compact .fmt-item{padding:var(--space-4) var(--space-5);}
.fmt-compact.fmt-three{grid-template-columns:repeat(3,minmax(0,1fr));}

@media (max-width:900px){
  .rg-set{grid-template-columns:repeat(2,minmax(0,1fr));}
  .fmt-compact,.fmt-compact.fmt-three{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:560px){
  .rg-stage{padding:var(--space-5) var(--space-4);}
  .rg-set:not(:first-child){inset:var(--space-5) var(--space-4);}
  .fmt-compact,.fmt-compact.fmt-three{grid-template-columns:1fr;}
}
@media (prefers-reduced-motion:reduce){
  .rg-set.is-on .rg-sheet,.rgal.is-back .rg-set.is-on .rg-sheet{animation:rgFade .3s ease both;}
  .rg-set.is-out .rg-sheet{animation:none;opacity:0;}
  .rg-sheet img,.rg-btn{transition:none;}
  @keyframes rgFade{from{opacity:0;}to{opacity:1;}}
}

/* =====================================================================
   BREEDFORWARD - gain projection, the five E's, the five-stage pipeline.
   The orbit, the selector, the service cards, pillars, formats, split and
   FAQ are the shared consultancy components above.
   ===================================================================== */

/* ---- the hero projection: a drawn chart that animates when seen ---- */
.bf-sim{position:relative;margin:0;border-radius:var(--radius-2xl);overflow:hidden;
  background:linear-gradient(160deg,#120A33 0%,#1B1046 55%,#062F38 100%);
  border:1px solid color-mix(in srgb, var(--color-primary) 26%, transparent);
  box-shadow:0 30px 70px color-mix(in srgb, var(--color-text) 18%, transparent);
  color:#fff;}
.bf-sim-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);
  padding:var(--space-5) var(--space-6) 0;font-size:var(--text-xs);white-space:nowrap;}
.bf-sim-kick{display:inline-flex;align-items:center;gap:.45rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--color-accent-bright);}
.bf-sim-kick [data-lucide]{width:1rem;height:1rem;}
.bf-sim-cycle{color:rgba(255,255,255,.72);font-variant-numeric:tabular-nums;}
.bf-sim-cycle b{color:#fff;font-weight:800;}
.bf-stage{position:relative;aspect-ratio:640/380;}
.bf-sim-svg{display:block;width:100%;height:auto;aspect-ratio:640/380;}
.bf-scene{position:absolute;inset:0;width:100%;height:100%;opacity:0;visibility:hidden;
  transition:opacity .45s ease, visibility 0s linear .45s;}
.bf-scene.is-on{opacity:1;visibility:visible;transition-delay:0s;}
/* shared text styles inside the scenes */
.bf-t{font-family:var(--font-body);font-size:13px;font-weight:600;fill:#fff;}
.bf-t-dim{fill:rgba(255,255,255,.62);font-weight:500;}
.bf-acc{fill:var(--color-accent-bright);}
.bf-big{font-family:var(--font-display);font-size:44px;font-weight:800;letter-spacing:-.03em;fill:#fff;}
.bf-step{opacity:0;}
.bf-big-xl{font-size:56px;}
.bf-t-md{font-size:15px;}
.bf-num{font-family:var(--font-display);font-weight:800;font-size:19px;fill:#fff;}
/* crosses */
.cx-cell{fill:rgba(255,255,255,.16);opacity:0;transition:fill .5s;}
/* genomic selection: the recurrent loop and the gain steps */
.gl-node{fill:rgba(255,255,255,.06);stroke:rgba(255,255,255,.2);stroke-width:1;transition:fill .3s,stroke .3s;}
.gl-txt{font-family:var(--font-body);font-size:11.5px;font-weight:700;fill:rgba(255,255,255,.75);}
g.is-on .gl-node{fill:var(--color-brand-violet);stroke:transparent;filter:drop-shadow(0 0 8px var(--color-brand-violet));}
g.is-on .gl-txt{fill:#fff;}
.gl-arrow{fill:none;stroke:rgba(255,255,255,.4);stroke-width:1.5;}
.gl-return{fill:none;stroke:rgba(255,255,255,.3);stroke-width:1.5;stroke-dasharray:4 4;transition:stroke .3s;}
.gl-return.is-on{stroke:var(--color-accent-bright);}
.gs-step{fill:none;stroke-width:3;stroke-linejoin:round;stroke-linecap:round;}
.gs-step-a{stroke:rgba(255,255,255,.5);} .gs-step-b{stroke:var(--color-accent-bright);filter:drop-shadow(0 0 5px var(--color-accent-bright));}
/* connecting locations */
.cl-cell{opacity:0;transition:fill .35s, opacity .35s;}
.cl-arc{fill:none;stroke-width:1.6;}
/* haplotypes */
.hp-seg{fill:rgba(255,255,255,.12);transition:fill .3s;}
.hp-seg.is-on{fill:var(--color-accent-bright);}
.hp-seg.is-alt{fill:var(--color-brand-violet);}
.hp-arrow{fill:none;stroke:rgba(255,255,255,.45);stroke-width:1.6;}
/* variance bars */
.vb-track{fill:rgba(255,255,255,.07);stroke:rgba(255,255,255,.14);}
.vb-fill.vb-a{fill:rgba(255,255,255,.42);}
.vb-fill.vb-b{fill:url(#bfGrad);fill:var(--color-accent-bright);opacity:.85;}
/* genomic selection lanes */
.gs-grid{stroke:rgba(255,255,255,.08);stroke-width:1;}
.gs-block{opacity:.12;transition:opacity .3s;}
.gs-a{fill:rgba(255,255,255,.28);} .gs-b{fill:var(--color-brand-violet);}
.gs-txt{font-family:var(--font-body);font-size:11px;font-weight:600;fill:#fff;opacity:.18;transition:opacity .3s;}
.gs-star{fill:var(--color-accent-bright);filter:drop-shadow(0 0 6px var(--color-accent-bright));opacity:0;transition:opacity .3s;}
/* connected testing */
.mt-cell{fill:rgba(255,255,255,.22);opacity:0;transition:fill .4s;}
.mt-cell.is-keep{fill:var(--color-accent-bright);}
.mt-arc{fill:none;stroke:var(--color-accent-bright);stroke-width:1.6;opacity:0;transition:opacity .35s;}
/* tabs under the panel */
.bf-tabs{display:flex;flex-wrap:wrap;gap:.35rem;padding:0 var(--space-6) var(--space-5);}
.bf-tabs button{padding:.32rem .7rem;border-radius:var(--radius-full);border:1px solid rgba(255,255,255,.16);
  background:rgba(255,255,255,.05);color:rgba(255,255,255,.72);font:inherit;font-size:.74rem;font-weight:600;cursor:pointer;
  transition:all var(--transition);}
.bf-tabs button:hover{border-color:rgba(255,255,255,.4);color:#fff;}
.bf-tabs button[aria-selected="true"]{background:linear-gradient(135deg,var(--color-brand-violet),var(--color-indigo));border-color:transparent;color:#fff;}
.bf-tabs button:focus-visible{outline:2px solid var(--color-accent-bright);outline-offset:2px;}
.bf-grid line{stroke:rgba(255,255,255,.1);stroke-width:1;}
.bf-grid text,.bf-xlab,.bf-ylab{fill:rgba(255,255,255,.6);font-family:var(--font-body);font-size:13px;}
.bf-xlab{text-anchor:middle;} .bf-ylab{text-anchor:middle;}
.bf-axis{fill:none;stroke:rgba(255,255,255,.32);stroke-width:1.5;}
.bf-area{fill:url(#bfFill);}
.bf-line{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;}
.bf-line-a{stroke:rgba(255,255,255,.55);stroke-dasharray:6 6;}
.bf-line-b{stroke:url(#bfGrad);stroke-width:3.5;}
.bf-line-x{stroke:var(--color-magenta-bright);stroke-width:2.5;opacity:.85;}
.bf-tag-x{fill:var(--color-magenta-bright);}
.vb-fill.vb-div{fill:var(--color-brand-violet);opacity:.8;}
.vb-fill.vb-gain{fill:var(--color-accent-bright);opacity:.9;}
.bf-dot{stroke:none;}
.bf-dot-a{fill:#fff;opacity:.8;}
.bf-dot-b{fill:var(--color-accent-bright);filter:drop-shadow(0 0 8px var(--color-accent-bright));}
.bf-cursor{stroke:rgba(255,255,255,.18);stroke-width:1;stroke-dasharray:3 4;}
.bf-tag{font-family:var(--font-body);font-size:13px;font-weight:700;text-anchor:end;opacity:0;transition:opacity .5s;}
.bf-tag-a{fill:rgba(255,255,255,.7);} .bf-tag-b{fill:var(--color-accent-bright);}
.bf-scene.is-done .bf-tag{opacity:1;}
.bf-scene.is-done .bf-cursor{opacity:0;}
.bf-tag-a,.bf-tag-b{opacity:0;}
.bf-sim-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);
  padding:0 var(--space-6) var(--space-4);min-height:4.6em;font-size:var(--text-xs);line-height:1.45;color:rgba(255,255,255,.62);}
.bf-sim-replay{flex:none;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;cursor:pointer;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);color:#fff;transition:all var(--transition);}
.bf-sim-replay [data-lucide]{width:.9rem;height:.9rem;}
.bf-sim-replay:hover{background:rgba(255,255,255,.16);border-color:var(--color-accent-bright);color:var(--color-accent-bright);}
.bf-sim-replay:focus-visible{outline:2px solid var(--color-accent-bright);outline-offset:2px;}

/* ---- the five E's: an equation ----
   E x E x E x E x E = gain that compounds. Five cards arrive in sequence with
   the multiplication signs between them, then the result band draws its
   curve. The E's grow from left to right, so the row itself rises. */
.e5-head{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:clamp(var(--space-6),3vw,var(--space-12));}
.e5-mark{display:inline-flex;align-items:flex-start;font-family:var(--font-display);font-weight:800;line-height:.8;letter-spacing:-.06em;
  font-size:clamp(5rem,3rem + 7vw,9.5rem);padding:0 var(--space-2);user-select:none;
  filter:drop-shadow(0 18px 40px color-mix(in srgb, var(--color-primary) 22%, transparent));}
.e5-mark span,.e5-mark sup{background:linear-gradient(135deg,var(--color-brand-violet) 0%,var(--color-indigo) 55%,var(--color-gold) 100%);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
/* background-clip:text paints only inside each element's box, and the tight
   tracking pulls the glyph past it - so each glyph gets its own breathing room. */
.e5-mark span{padding:.04em .02em .04em .06em;}
.e5-mark sup{font-size:.42em;line-height:1;letter-spacing:0;margin-left:.04em;margin-top:-.06em;padding:.08em .22em .08em .04em;}

.eq{margin-top:var(--space-12);}
.eq-row{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));
  gap:clamp(var(--space-8),3.2vw,var(--space-12));position:relative;}
/* the chain the operators sit on - visible only in the gaps between cards */
.eq-row::before{content:"";position:absolute;left:6%;right:6%;top:50%;height:2px;z-index:0;
  background:linear-gradient(90deg,var(--color-brand-violet),var(--color-indigo),var(--color-gold));opacity:0;
  transition:opacity .8s 1s;}
.eq.in .eq-row::before{opacity:.45;}
.eq-card{position:relative;z-index:1;display:grid;grid-template-rows:auto auto 1fr auto;gap:.45rem;
  padding:var(--space-6) var(--space-5) var(--space-5);border-radius:var(--radius-2xl);
  background:var(--color-surface);border:1px solid var(--color-divider);
  box-shadow:var(--shadow-sm);opacity:0;transform:translateY(24px);
  transition:opacity .7s cubic-bezier(.2,.7,.2,1), transform .7s cubic-bezier(.2,.7,.2,1), box-shadow .35s, border-color .35s;
  transition-delay:calc(var(--i,0) * .16s);}
.eq-card::before{content:"";position:absolute;left:var(--space-5);right:var(--space-5);top:0;height:3px;border-radius:0 0 3px 3px;
  background:linear-gradient(90deg,var(--color-primary),var(--color-gold));
  opacity:calc(.35 + var(--i,0) * .16);}
/* the multiplication sign between cards */
.eq-card:not(:last-child)::after{content:"\00d7";position:absolute;top:50%;
  right:calc(-1 * clamp(var(--space-8),3.2vw,var(--space-12)) / 2 - 18px);
  width:36px;height:36px;border-radius:50%;display:grid;place-items:center;transform:translateY(-50%) scale(0);
  font-family:var(--font-display);font-weight:800;font-size:1.35rem;line-height:1;
  color:var(--color-primary);background:var(--color-surface);
  border:2px solid color-mix(in srgb, var(--color-primary) 45%, transparent);box-shadow:var(--shadow-md);
  z-index:2;transition:transform .45s cubic-bezier(.2,.7,.2,1), background .3s, color .3s, border-color .3s;
  transition-delay:calc(var(--i,0) * .16s + .42s);}
.eq-e{font-family:var(--font-display);font-weight:800;line-height:.85;letter-spacing:-.05em;
  font-size:calc(2.6rem + var(--i,0) * .45rem);
  background:linear-gradient(135deg,var(--color-brand-violet),var(--color-indigo) 60%,var(--color-gold));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
  transition:filter .35s;}
.eq-card h3{margin:.15rem 0 0;font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);letter-spacing:-.02em;line-height:1.1;}
.eq-card p{margin:0;font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.5;}
.eq-card small{display:block;padding-top:.7rem;margin-top:.3rem;border-top:1px solid var(--color-divider);
  font-size:var(--text-xs);font-weight:600;color:var(--color-text);line-height:1.45;}
.eq.in .eq-card{opacity:1;transform:translateY(0);}
.eq.in .eq-card:not(:last-child)::after{transform:translateY(-50%) scale(1);
  animation:eqRing 4.6s ease-out infinite;animation-delay:calc(1.8s + var(--i,0) * .38s);}
@keyframes eqRing{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-primary) 45%, transparent), var(--shadow-md);}
  28%{box-shadow:0 0 0 14px color-mix(in srgb, var(--color-primary) 0%, transparent), var(--shadow-md);}
  100%{box-shadow:0 0 0 14px color-mix(in srgb, var(--color-primary) 0%, transparent), var(--shadow-md);}}
.eq.in .eq-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-md);border-color:color-mix(in srgb, var(--color-primary) 34%, transparent);transition-delay:0s;}
.eq.in .eq-card:hover::after{transition-delay:0s;}
.eq-card:hover .eq-e{filter:drop-shadow(0 8px 18px color-mix(in srgb, var(--color-primary) 45%, transparent));}
.eq-card:hover::after{background:linear-gradient(135deg,var(--color-brand-violet),var(--color-indigo));color:#fff;border-color:transparent;}

/* the result band */
.eq-result{display:grid;grid-template-columns:auto minmax(0,1fr) minmax(220px,.9fr);align-items:center;
  gap:clamp(var(--space-6),3vw,var(--space-12));margin-top:var(--space-8);
  padding:var(--space-6) clamp(var(--space-6),3vw,var(--space-10));border-radius:var(--radius-2xl);
  background:
    radial-gradient(60% 120% at 0% 50%, color-mix(in srgb, var(--color-brand-violet) 16%, transparent), transparent 70%),
    radial-gradient(50% 120% at 100% 50%, color-mix(in srgb, var(--color-gold) 14%, transparent), transparent 70%),
    var(--color-surface-alt);
  border:1px solid var(--color-divider);opacity:0;transform:translateY(18px);
  transition:opacity .7s cubic-bezier(.2,.7,.2,1) 1s, transform .7s cubic-bezier(.2,.7,.2,1) 1s;}
.eq.in .eq-result{opacity:1;transform:none;}
.eq-equals{font-family:var(--font-display);font-weight:800;font-size:clamp(3rem,2.4rem + 2.4vw,4.8rem);line-height:1;letter-spacing:-.05em;
  background:linear-gradient(135deg,var(--color-brand-violet),var(--color-gold));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.eq-result-txt h3{margin:0 0 .35rem;font-family:var(--font-display);font-weight:800;font-size:var(--text-xl);letter-spacing:-.025em;line-height:1.1;}
.eq-result-txt p{margin:0;color:var(--color-text-muted);font-size:var(--text-base);max-width:44ch;}
.eq-spark{display:block;width:100%;height:auto;overflow:visible;}
.eq-spark-base{fill:none;stroke:color-mix(in srgb, var(--color-text) 28%, transparent);stroke-width:1.5;stroke-dasharray:4 5;}
.eq-spark-fill{fill:url(#eqFill);}
.eq-spark-line{fill:none;stroke:url(#eqGrad);stroke-width:3;stroke-linecap:round;}
.eq-spark-dot{fill:var(--color-accent-bright);filter:drop-shadow(0 0 6px var(--color-accent-bright));}
.eq-spark-dot-a{fill:var(--color-text-muted);filter:none;opacity:0;}
.eq-spark-lab[data-eq-lab-a],.eq-spark-lab[data-eq-lab-b]{opacity:0;transition:opacity .4s;}
.eq-spark-lab{font-family:var(--font-body);font-size:10px;font-weight:600;fill:var(--color-text-muted);}
.eq-spark-lab-acc{fill:var(--color-primary);font-weight:700;}


@media (max-width:1100px){
  .e5-head{grid-template-columns:1fr;align-items:start;gap:var(--space-4);}
  .e5-mark{justify-self:start;font-size:clamp(4rem,3rem + 4vw,6rem);}
  /* the equation keeps reading left to right: a snap-scrolling row */
  .eq-row{display:flex;overflow-x:auto;gap:var(--space-10);padding:.25rem .25rem var(--space-4);
    scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:thin;}
  .eq-card{flex:0 0 min(78vw,300px);scroll-snap-align:start;}
  .eq-card:not(:last-child)::after{right:calc(-1 * var(--space-10) / 2 - 18px);}
  .eq-row::before{display:none;}
  .eq-result{grid-template-columns:auto minmax(0,1fr);}
  .eq-spark{grid-column:1 / -1;}
}
@media (max-width:560px){
  .eq-result{padding:var(--space-5);}
}
@media (prefers-reduced-motion:reduce){
  .eq-card,.eq-result,.eq-card::after{transition:none;}
  .eq-card,.eq-result{opacity:1;transform:none;}
  .eq-card:not(:last-child)::after{transform:translateY(-50%) scale(1);animation:none;}
}

/* ---- the training promise: one line, set large ---- */
.promise{position:relative;margin:var(--space-10) 0 var(--space-4);padding:var(--space-6) var(--space-8) var(--space-6) calc(var(--space-8) + 6px);
  border-radius:var(--radius-2xl);background:var(--color-surface);border:1px solid var(--color-divider);overflow:hidden;}
.promise::before{content:"";position:absolute;left:0;top:0;bottom:0;width:6px;
  background:linear-gradient(180deg,var(--color-brand-violet),var(--color-indigo) 55%,var(--color-gold));
  transform:scaleY(0);transform-origin:50% 0;transition:transform .9s cubic-bezier(.2,.7,.2,1) .1s;}
.promise.in::before{transform:scaleY(1);}
.promise-kick{display:inline-flex;align-items:center;gap:.5rem;margin-bottom:var(--space-3);
  font-family:var(--font-body);font-weight:700;font-size:var(--text-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--color-primary);}
.promise-kick::before{content:"";width:.5rem;height:.5rem;border-radius:50%;
  background:linear-gradient(135deg,var(--color-brand-violet),var(--color-gold));box-shadow:0 0 0 4px color-mix(in srgb, var(--color-primary) 14%, transparent);}
.promise p{margin:0;font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;line-height:1.15;
  font-size:clamp(1.45rem,1.1rem + 1.3vw,2.3rem);color:var(--color-text);max-width:30ch;text-wrap:balance;}
.promise em{font-style:normal;}
/* words: each rises into place; the accent words carry a gradient that is
   offset per word so the phrase reads as one sweep, then keeps drifting */
.promise .w{display:inline-block;}
.promise.is-split .w{opacity:0;transform:translateY(.55em);filter:blur(4px);
  transition:opacity .55s ease, transform .7s cubic-bezier(.2,.7,.2,1), filter .55s ease;
  transition-delay:calc(.25s + var(--w,0) * .05s);}
.promise.is-split.in .w{opacity:1;transform:translateY(0);filter:blur(0);}
.promise .w-acc{background:linear-gradient(90deg,var(--color-primary),var(--color-indigo) 40%,var(--color-gold) 70%,var(--color-primary));
  background-size:320% 100%;background-position:calc(var(--k,0) * 12%) 0;
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.promise.in .w-acc{animation:pwShine 6s linear infinite;animation-delay:calc(1.8s - var(--k,0) * .18s);}
@keyframes pwShine{from{background-position:calc(var(--k,0) * 12%) 0;}to{background-position:calc(var(--k,0) * 12% + 320%) 0;}}
.promise-kick::before{animation:pwPulse 2.6s ease-out infinite;}
@keyframes pwPulse{0%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-primary) 14%, transparent);}
  60%{box-shadow:0 0 0 10px color-mix(in srgb, var(--color-primary) 0%, transparent);}
  100%{box-shadow:0 0 0 10px color-mix(in srgb, var(--color-primary) 0%, transparent);}}
@media (prefers-reduced-motion:reduce){
  .promise::before{transform:none;transition:none;}
  .promise.is-split .w{opacity:1;transform:none;filter:none;transition:none;}
  .promise.in .w-acc,.promise-kick::before{animation:none;}
}
@media (max-width:560px){ .promise{padding:var(--space-5) var(--space-5) var(--space-5) calc(var(--space-5) + 6px);} }

/* ---- the five-stage pipeline ----
   A rail with a flowing line and five nodes; one panel open beneath. The
   panels are all in the DOM (hidden attribute), so no JS = the first reads. */
.pipe{margin-top:var(--space-12);}
.pipe-rail{position:relative;height:150px;margin:0 var(--space-6) var(--space-6);}
.pipe-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;}
.pipe-track{fill:none;stroke:color-mix(in srgb, var(--color-text) 14%, transparent);stroke-width:3;stroke-linecap:round;}
.pipe-prog{fill:none;stroke:var(--color-primary);stroke-width:3;stroke-linecap:round;
  stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset .8s cubic-bezier(.2,.7,.2,1);}
.pipe-node{position:absolute;left:var(--x);top:50%;transform:translate(-50%,-50%);z-index:1;
  display:grid;justify-items:center;gap:.5rem;padding:0;border:0;background:transparent;cursor:pointer;color:inherit;font:inherit;}
.pipe-node i{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;font-style:normal;font-weight:800;
  font-size:.8rem;letter-spacing:.02em;background:var(--color-surface);color:var(--color-text-muted);
  border:2px solid var(--color-divider);box-shadow:var(--shadow-sm);transition:all var(--transition);}
.pipe-node b{position:absolute;top:calc(50% + 30px);white-space:nowrap;font-family:var(--font-display);font-weight:800;
  font-size:var(--text-sm);letter-spacing:-.01em;color:var(--color-text-muted);transition:color var(--transition);}
.pipe-node:hover i{border-color:var(--color-primary);color:var(--color-primary);transform:translateY(-2px);}
.pipe-node.is-done i{border-color:color-mix(in srgb, var(--color-primary) 55%, transparent);color:var(--color-primary);}
.pipe-node.is-on i{background:linear-gradient(135deg,var(--color-brand-violet),var(--color-indigo));color:#fff;border-color:transparent;
  box-shadow:0 0 0 6px color-mix(in srgb, var(--color-primary) 18%, transparent), var(--shadow-md);transform:scale(1.08);}
.pipe-node.is-on b{background:linear-gradient(90deg,var(--color-primary),var(--color-indigo));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.pipe-node:focus-visible{outline:none;}
.pipe-node:focus-visible i{outline:2px solid var(--color-primary);outline-offset:3px;}
/* every node sits on the line; labels alternate below and above so they never collide */
.pipe-node:nth-of-type(even) b{top:auto;bottom:calc(50% + 30px);}

/* the two stages outside our mandate: on the rail, but quiet and not tabs */
.pipe-node.pipe-ctx{cursor:default;}
.pipe-node.pipe-ctx i{background:transparent;border-style:dashed;border-color:color-mix(in srgb, var(--color-text) 28%, transparent);
  color:var(--color-text-faint);box-shadow:none;}
.pipe-node.pipe-ctx b{color:var(--color-text-faint);}
.pipe-node.pipe-ctx small{position:absolute;white-space:nowrap;font-size:.64rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--color-text-faint);}
.pipe-node.pipe-ctx:nth-of-type(odd) small{bottom:calc(50% + 30px);}
.pipe-node.pipe-ctx:nth-of-type(even) small{top:calc(50% + 30px);}
.pipe-node.pipe-ctx:hover i{transform:none;border-color:color-mix(in srgb, var(--color-text) 28%, transparent);color:var(--color-text-faint);}
/* the zone we work in: a soft band behind nodes 02-04 */
.pipe-zone{position:absolute;left:15.5%;right:15.5%;top:-6px;bottom:-6px;border-radius:var(--radius-full);
  background:color-mix(in srgb, var(--color-primary) 7%, transparent);
  border:1px dashed color-mix(in srgb, var(--color-primary) 32%, transparent);}
.pipe-zone b{position:absolute;left:50%;top:-11px;transform:translateX(-50%);white-space:nowrap;
  padding:.18rem .65rem;border-radius:var(--radius-full);font-family:var(--font-body);font-weight:700;font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--color-primary);background:var(--color-surface);border:1px solid color-mix(in srgb, var(--color-primary) 32%, transparent);}
.pipe-panels{position:relative;}
.pipe-panel{padding:clamp(var(--space-6),3vw,var(--space-10));border-radius:var(--radius-2xl);
  background:var(--color-surface);border:1px solid var(--color-divider);box-shadow:var(--shadow-sm);}
.pipe-panel.is-in{animation:hubIn .45s both;}
.pp-head{display:grid;grid-template-columns:auto 1fr;gap:.35rem var(--space-5);align-items:baseline;margin-bottom:var(--space-6);}
.pp-n{grid-row:1 / span 2;font-family:var(--font-display);font-weight:800;font-size:clamp(2.4rem,1.8rem + 2vw,3.6rem);line-height:1;letter-spacing:-.04em;
  background:linear-gradient(135deg,var(--color-brand-violet),var(--color-gold));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.pp-head h3{margin:0;font-family:var(--font-display);font-weight:800;font-size:var(--text-2xl);letter-spacing:-.025em;line-height:1.1;}
.pp-head p{margin:0;color:var(--color-text-muted);font-size:var(--text-base);}
.pp-cols{display:grid;grid-template-columns:1.25fr .75fr;gap:clamp(var(--space-6),3vw,var(--space-12));}
.pp-cols h4{display:flex;align-items:center;gap:.5rem;margin:0 0 var(--space-4);font-family:var(--font-body);font-weight:700;
  font-size:var(--text-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-muted);}
.pp-cols h4 [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);}
.pp-cols ul{list-style:none;margin:0;padding:0;display:grid;gap:.6rem;}
.pp-cols li{position:relative;padding-left:1.15rem;font-size:var(--text-sm);line-height:1.5;color:var(--color-text);}
.pp-cols li::before{content:"";position:absolute;left:0;top:.6em;width:.34rem;height:.34rem;border-radius:50%;background:var(--color-primary);}
.pp-cols > div:last-child li{color:var(--color-text-muted);}
.pp-cols > div:last-child li::before{background:var(--color-gold);}

@media (max-width:900px){
  .pipe-rail{height:auto;margin:0 0 var(--space-5);}
  .pipe-svg{display:none;}
  .pipe-node{position:static;transform:none;top:auto;
    grid-template-columns:auto 1fr;justify-items:start;align-items:center;gap:.7rem;width:100%;padding:.55rem .6rem;border-radius:var(--radius-lg);}
  .pipe-rail{display:grid;gap:.25rem;}
  .pipe-node i{width:36px;height:36px;font-size:.72rem;}
  .pipe-node b,.pipe-node:nth-of-type(even) b{position:static;}
  .pipe-zone{display:none;}
  .pipe-node.pipe-ctx{grid-template-columns:auto 1fr auto;}
  .pipe-node.pipe-ctx b{justify-self:start;}
  .pipe-node.pipe-ctx small,.pipe-node.pipe-ctx:nth-of-type(odd) small,.pipe-node.pipe-ctx:nth-of-type(even) small{position:static;justify-self:end;padding-right:.4rem;}
  .pipe-node.is-on{background:color-mix(in srgb, var(--color-primary) 8%, transparent);}
  .pipe-node.is-on i{transform:none;}
  .pp-cols{grid-template-columns:1fr;}
}
@media (prefers-reduced-motion:reduce){
  .fiveE li,.pipe-node i,.pipe-prog{transition:none;}
  .pipe-panel.is-in{animation:none;}
}

/* =====================================================================
   SOFTWARE PAGES - KropAnalytiX Pro, DataViz Pro, BreedPilot
   Built on the same pieces as Education and Consultancy (edu-hero,
   brand-lockup, sec-head, pillars, steps, aud, fmt, plans, sec-split,
   accordion, cta-band). New here: the product screen, the feature tour,
   the plot wall and the suite row. The imagery is the real product art
   framed as a screen, so a light image reads as a screenshot rather than
   as a palette clash - the same device as the platform cards on BioMetriK.
   ===================================================================== */

/* ---- product screen ----
   A browser-like frame: title bar with three dots and a name pill, then the
   viewport. Several images can sit in the viewport; the script crossfades
   them and writes the caption. Without JS the first image simply shows. */
.tscr{display:flex;flex-direction:column;gap:var(--space-5);margin-top:var(--space-10);}
@media (min-width:1080px){ .tscr{margin-top:0;} }
.tscr .hv-facts{grid-template-columns:repeat(3,minmax(0,1fr));}
@media (max-width:1080px){ .tscr .hv-facts{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3);} }
@media (max-width:420px){ .tscr .hv-facts{padding:var(--space-4);} .tscr .hv-facts dd{font-size:var(--text-xs);} }
.tscr-frame{position:relative;border-radius:var(--radius-2xl);overflow:hidden;
  padding:var(--space-4) var(--space-4) 0;
  background:linear-gradient(160deg,#1B1046 0%,#3A1C96 52%,#07535B 100%);
  border:1px solid color-mix(in srgb, var(--color-primary) 22%, transparent);
  box-shadow:0 30px 70px color-mix(in srgb, var(--color-text) 18%, transparent);}
.tscr-bar{display:flex;align-items:center;gap:.6rem;padding:0 .2rem .7rem;}
.tscr-dots{display:flex;gap:6px;flex:none;}
.tscr-dots i{width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.34);}
.tscr-dots i:first-child{background:rgba(255,255,255,.55);}
.tscr-name{margin:0 auto;font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:rgba(255,255,255,.78);background:rgba(255,255,255,.1);
  padding:.28rem .9rem;border-radius:var(--radius-full);white-space:nowrap;
  border:1px solid rgba(255,255,255,.12);}
.tscr-view{position:relative;aspect-ratio:16/10;overflow:hidden;background:#fff;
  border-radius:var(--radius-lg) var(--radius-lg) 0 0;
  border:1px solid rgba(255,255,255,.18);border-bottom:0;
  box-shadow:0 -12px 40px rgba(0,0,0,.35);}
.tscr-view img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:top center;
  display:block;opacity:0;transform:scale(1.05);
  transition:opacity .9s ease,transform 7s linear;}
.tscr-view img.is-on{opacity:1;transform:scale(1);}
.tscr-view img:first-child{opacity:1;}                 /* no-JS: the first shows */
.tscr.is-live .tscr-view img:first-child:not(.is-on){opacity:0;}
/* The product art was drawn in the old forest-green / harvest-gold scheme.
   On a screen marked .is-duo it takes the site's brand duotone - the same
   treatment as the brand carousel (greyscale + navy-violet-cyan in 'color'
   mode). Scientific figures (the DataViz Pro plot wall) never get it. */
.tscr-view.is-duo{isolation:isolate;}
.tscr-view.is-duo img{filter:grayscale(1) contrast(1.03);}
.tscr-view.is-duo::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(140deg,#01284F 0%,#8C52FF 55%,#03F7EB 100%);
  mix-blend-mode:color;opacity:.85;}
.tscr-cap{position:absolute;left:0;right:0;bottom:0;z-index:2;
  display:flex;align-items:center;gap:.7rem;padding:var(--space-8) var(--space-5) var(--space-4);
  background:linear-gradient(0deg,rgba(6,4,20,.82) 0%,rgba(6,4,20,.3) 60%,transparent 100%);
  color:#fff;font-size:var(--text-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;}
.tscr-cap i{font-style:normal;color:var(--color-accent-bright);}
.tscr-cap b{font-weight:800;}
.tscr-prog{position:absolute;left:0;bottom:0;z-index:3;height:3px;width:100%;
  transform:scaleX(0);transform-origin:left;
  background:linear-gradient(90deg,var(--color-primary),var(--color-accent-bright));}
.tscr.is-live .tscr-prog{animation:tscrProg var(--hold,5200ms) linear forwards;}
@keyframes tscrProg{to{transform:scaleX(1);}}
.tscr.is-paused .tscr-prog{animation-play-state:paused;}
@media (prefers-reduced-motion:reduce){
  .tscr-view img{transition:none;transform:none;}
  .tscr.is-live .tscr-prog{animation:none;display:none;}
}

/* ---- feature tour ----
   The modules as a column of tabs beside one screen. The open tab shows its
   description and carries a progress hairline; the screen shows its image.
   Auto-advances, pauses on hover, focus, off-screen and hidden tab, and
   stops for good once the visitor chooses a tab. Under 900px the screen
   goes on top and the tabs become a horizontal, snap-scrolling row. */
.tour{margin-top:var(--space-10);display:grid;grid-template-columns:minmax(280px,.82fr) minmax(0,1.18fr);
  gap:clamp(var(--space-6),3vw,var(--space-10));align-items:center;}
.tour-tabs{display:grid;gap:.45rem;margin:0;padding:0;list-style:none;}
.tour-tab{position:relative;display:grid;grid-template-columns:auto 1fr;column-gap:.85rem;align-items:start;
  width:100%;text-align:left;padding:var(--space-4) var(--space-5);border-radius:var(--radius-xl);
  background:transparent;border:1px solid transparent;color:var(--color-text);cursor:pointer;
  overflow:hidden;transition:background var(--transition),border-color var(--transition),box-shadow var(--transition);}
.tour-tab > [data-lucide]{width:1.2rem;height:1.2rem;flex:none;margin-top:.2rem;color:var(--color-primary);}
.tt-body{display:block;min-width:0;}
.tour-tab b{display:block;font-family:var(--font-display);font-weight:800;font-size:var(--text-base);line-height:1.15;}
.tour-tab small{display:block;font-size:.7rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--color-text-faint);margin-bottom:.15rem;}
.tt-desc{display:block;font-size:var(--text-sm);line-height:1.5;color:var(--color-text-muted);
  max-height:0;opacity:0;overflow:hidden;transition:max-height .45s cubic-bezier(.4,0,.2,1),opacity .35s,margin .35s;}
.tour-tab:hover{background:color-mix(in srgb, var(--color-primary) 4%, transparent);}
.tour-tab.is-on{background:var(--color-surface);
  border-color:color-mix(in srgb, var(--color-primary) 24%, transparent);
  box-shadow:0 16px 40px color-mix(in srgb, var(--color-primary) 12%, transparent);}
.tour-tab.is-on .tt-desc{max-height:8em;opacity:1;margin-top:.35rem;}
.tour-tab .tt-prog{position:absolute;left:0;right:0;bottom:0;height:2px;
  transform:scaleX(0);transform-origin:left;
  background:linear-gradient(90deg,var(--color-primary),var(--color-accent-bright));}
.tour.is-auto .tour-tab.is-on .tt-prog{animation:tscrProg var(--hold,5600ms) linear forwards;}
.tour.is-paused .tour-tab.is-on .tt-prog{animation-play-state:paused;}
.tour .tscr-frame{margin:0;}
.tour .tscr-view{aspect-ratio:16/10;}
@media (max-width:900px){
  .tour{grid-template-columns:1fr;gap:var(--space-5);}
  .tour .tscr-frame{order:-1;}
  .tour-tabs{display:flex;gap:.5rem;overflow-x:auto;scroll-snap-type:x mandatory;
    padding:.25rem .25rem var(--space-3);margin:0 calc(-1 * var(--space-1));
    scrollbar-width:thin;}
  .tour-tab{flex:0 0 min(78%,320px);scroll-snap-align:start;}
  .tt-desc{max-height:none;opacity:1;margin-top:.35rem;}
  .tour-tab:not(.is-on){background:var(--color-surface);border-color:var(--color-divider);}
}
@media (prefers-reduced-motion:reduce){
  .tt-desc{transition:none;}
  .tour.is-auto .tour-tab.is-on .tt-prog{animation:none;display:none;}
}

/* ---- plot wall (DataViz Pro) ----
   Eight figures in true colour - these are the product's output, and stay
   excluded from the brand duotone like every other scientific figure on the
   site. Each sits on a white panel like a figure on a page, contained rather
   than cropped, with its name in a bar underneath. */
.pwall{margin-top:var(--space-10);display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-5);}
.pw{display:flex;flex-direction:column;margin:0;border-radius:var(--radius-xl);overflow:hidden;
  background:var(--color-surface);border:1px solid var(--color-divider);
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);}
.pw-img{position:relative;aspect-ratio:4/3;background:#fff;overflow:hidden;}
.pw-img img{position:absolute;inset:var(--space-3);width:calc(100% - 2 * var(--space-3));height:calc(100% - 2 * var(--space-3));
  object-fit:contain;display:block;transition:transform .7s cubic-bezier(.4,0,.2,1);}
.pw.pw-wide{grid-column:span 2;}
.pw.pw-wide .pw-img{aspect-ratio:auto;flex:1;min-height:0;}
.pw:hover{transform:translateY(-4px);border-color:color-mix(in srgb, var(--color-primary) 30%, transparent);
  box-shadow:0 24px 50px color-mix(in srgb, var(--color-primary) 14%, transparent);}
.pw:hover .pw-img img{transform:scale(1.035);}
.pw figcaption{display:flex;align-items:center;justify-content:space-between;gap:.6rem;
  padding:var(--space-3) var(--space-4);border-top:1px solid var(--color-divider);}
.pw figcaption b{font-family:var(--font-display);font-weight:800;font-size:var(--text-sm);line-height:1.2;color:var(--color-text);}
.pw figcaption span{flex:none;font-size:.62rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 8%, transparent);
  padding:.25rem .55rem;border-radius:var(--radius-full);}
.pw-fam{justify-content:center;border-top:0;padding:0;margin:var(--space-8) auto 0;max-width:860px;}
@media (max-width:900px){
  .pwall{grid-template-columns:repeat(2,minmax(0,1fr));}
  .pw.pw-wide .pw-img{aspect-ratio:2/1;flex:none;}
}
@media (max-width:520px){ .pwall{grid-template-columns:1fr;} .pw.pw-wide{grid-column:auto;} }

/* ---- the suite ----
   The three tools side by side, the current one marked, each with where
   else on the site it does its work. Registered marks sit on a light plate
   in both themes because their wordmarks are dark. */
.suite{margin-top:var(--space-10);display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:var(--space-5);}
.suite-card{position:relative;display:flex;flex-direction:column;gap:var(--space-4);
  padding:var(--space-6);border-radius:var(--radius-2xl);
  background:var(--color-surface);border:1px solid var(--color-divider);
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);}
.suite-card:hover{transform:translateY(-3px);border-color:color-mix(in srgb, var(--color-primary) 30%, transparent);
  box-shadow:0 22px 48px color-mix(in srgb, var(--color-primary) 12%, transparent);}
.suite-card.is-here{border-color:color-mix(in srgb, var(--color-primary) 40%, transparent);
  background:color-mix(in srgb, var(--color-primary) 4%, var(--color-surface));}
.suite-here{position:absolute;top:var(--space-4);right:var(--space-4);
  font-size:.62rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--color-primary);
  background:color-mix(in srgb, var(--color-primary) 10%, transparent);
  border:1px solid color-mix(in srgb, var(--color-primary) 22%, transparent);
  padding:.3rem .6rem;border-radius:var(--radius-full);}
.suite-logo{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;
  height:72px;padding:.55rem .9rem;border-radius:var(--radius-lg);
  background:#fff;border:1px solid var(--color-divider);}
.suite-logo img{height:100%;width:auto;display:block;}
[data-theme="dark"] .suite-logo{background:#f7f7fa;border-color:rgba(255,255,255,.14);}
.suite-card h3{font-family:var(--font-display);font-weight:800;letter-spacing:-.02em;font-size:var(--text-lg);line-height:1.15;margin:0;}
.suite-card > p{font-size:var(--text-sm);color:var(--color-text-muted);margin:0;flex:1;}
.suite-use{display:block;line-height:1.5;
  padding-top:var(--space-4);border-top:1px solid color-mix(in srgb, var(--color-text) 8%, transparent);
  font-size:var(--text-xs);color:var(--color-text-muted);}
.suite-use [data-lucide]{display:inline-block;vertical-align:-.2em;margin-right:.4rem;width:.95rem;height:.95rem;color:var(--color-primary);}
.suite-use a{color:var(--color-text);font-weight:700;text-decoration:none;border-bottom:1px solid color-mix(in srgb, var(--color-primary) 40%, transparent);}
.suite-use a:hover{color:var(--color-primary);}
.suite-card .link-arrow{margin-top:var(--space-2);}

/* ---- plans on the software pages ----
   The currency toggle sits in the section head line rather than centred
   over the grid, so the section reads like the rest of the page. */
.plans-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--space-6);}
.plans-head .sec-head{margin-bottom:0;}
.plans-head .price-toggle{margin-bottom:var(--space-2);}
.plans-wrap{margin-top:var(--space-10);}
.plans-wrap .plans{max-width:none;}
.plan-note{margin-top:var(--space-6);font-size:var(--text-sm);color:var(--color-text-muted);display:flex;gap:.6rem;align-items:flex-start;}
.plan-note [data-lucide]{width:1.05rem;height:1.05rem;flex:none;margin-top:.15rem;color:var(--color-primary);}

/* The enterprise plan's gradient is built from --color-navy and
   --color-primary-active, which the dark theme lightens - leaving light text
   on a pale lavender card. In dark mode it keeps a fixed deep ramp. */
[data-theme="dark"] .plan.enterprise{background:linear-gradient(150deg,#1B1046 0%,#3A1C96 60%,#2B2F9E 100%);
  border:1px solid rgba(169,123,255,.28);}
[data-theme="dark"] .plan.enterprise .price-gst{color:rgba(255,255,255,.62);}

/* "You are here" sits on the card's top edge, like "Best Value" on a plan,
   so it can never collide with a wide registered mark. Fixed colours: the
   theme primary lightens in dark mode and white text would fail on it. */
.suite-here{top:-11px;right:var(--space-5);color:#fff;border:0;
  background:linear-gradient(135deg,#6D3BE8,#3D53E0);
  box-shadow:0 6px 16px rgba(109,59,232,.3);}

/* On a phone the eight figures become a swipeable row rather than eight
   full-width cards stacked down the page. */
@media (max-width:520px){
  .pwall{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:var(--space-4);
    padding:.25rem .25rem var(--space-4);margin-inline:calc(-1 * var(--space-1));scrollbar-width:thin;}
  .pw,.pw.pw-wide{flex:0 0 82%;scroll-snap-align:start;}
  .pw.pw-wide .pw-img{aspect-ratio:4/3;}
  .pw:hover{transform:none;}
}

/* Tour descriptions: room for the longest one at the narrowest desktop
   column, and never clipped in the phone row. */
.tour-tab.is-on .tt-desc{max-height:16em;}
@media (max-width:900px){ .tour-tab .tt-desc,.tour-tab.is-on .tt-desc{max-height:none;} }
.plans-head .price-toggle{flex:none;}
.plans-head .price-toggle button{white-space:nowrap;}

/* ---- software pages: the introduction film ----
   Same panel as the BioMetriK film (.hvid / .hv-frame / .hv-play), but the
   cover is the product art and the film is on YouTube. The whole frame is
   the link; with a video id in data-yt it plays inline instead. */
.hv-yt .hv-play{text-decoration:none;}
.hv-yt .hv-media{transition:transform 1.2s cubic-bezier(.4,0,.2,1);}
.hv-yt:hover .hv-media{transform:scale(1.035);}
.hv-yt.is-duo{isolation:isolate;}
.hv-yt.is-duo .hv-media{filter:grayscale(1) contrast(1.03);}
.hv-yt.is-duo::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(140deg,#01284F 0%,#8C52FF 55%,#03F7EB 100%);
  mix-blend-mode:color;opacity:.85;}
.hv-yt-badge{position:absolute;top:var(--space-5);right:var(--space-5);z-index:3;pointer-events:none;
  display:inline-flex;align-items:center;gap:.45rem;padding:.38rem .75rem .38rem .6rem;
  border-radius:var(--radius-full);background:rgba(6,4,20,.58);
  border:1px solid rgba(255,255,255,.14);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  color:#fff;font-size:.68rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;}
.hv-yt-badge svg{width:18px;height:18px;color:#FF0033;flex:none;}
.hv-yt iframe{position:absolute;inset:0;z-index:4;width:100%;height:100%;border:0;display:block;}
.hv-yt.is-playing .hv-play,.hv-yt.is-playing .hv-yt-badge{display:none;}
/* three short facts stay three-up on a phone */
.hv-tool .hv-facts{grid-template-columns:repeat(3,minmax(0,1fr));}
@media (max-width:1080px){ .hv-tool .hv-facts{gap:var(--space-3);} }
@media (max-width:420px){ .hv-tool .hv-facts{padding:var(--space-4);} .hv-tool .hv-facts dd{font-size:var(--text-xs);} }
/* stacked hero: breathing room between the call to action and the film */
@media (max-width:1079px){ .edu-hero .hvid{margin-top:var(--space-10);} }
@media (max-width:560px){ .hv-yt-badge{top:var(--space-3);right:var(--space-3);} }

/* =====================================================================
   DATAVIZ PRO - comparison strip, family explorer, data workspace,
   export card
   ===================================================================== */

/* ---- two workflows, side by side ---- */
.vs{margin-top:var(--space-8);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-5);}
.vs-card{padding:var(--space-6);border-radius:var(--radius-2xl);
  background:var(--color-surface);border:1px solid var(--color-divider);}
.vs-card.is-dvp{background:linear-gradient(150deg,#1B1046 0%,#3A1C96 58%,#07535B 100%);border-color:transparent;color:#fff;
  box-shadow:0 22px 50px color-mix(in srgb, var(--color-primary) 22%, transparent);}
.vs-kick{display:inline-flex;align-items:center;gap:.5rem;font-size:var(--text-xs);font-weight:800;
  letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-muted);}
.vs-kick [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);}
.vs-card.is-dvp .vs-kick{color:var(--color-accent-bright);}
.vs-card.is-dvp .vs-kick [data-lucide]{color:var(--color-accent-bright);}
.vs-steps{list-style:none;margin:var(--space-5) 0 var(--space-4);padding:0;display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;}
.vs-steps li{font-family:var(--font-display);font-weight:800;font-size:var(--text-sm);
  padding:.4rem .8rem;border-radius:var(--radius-full);
  background:color-mix(in srgb, var(--color-text) 5%, transparent);color:var(--color-text-muted);}
.vs-steps li + li::before{content:"\2192";margin-right:.5rem;opacity:.5;font-weight:600;}
.vs-steps li + li{padding-left:.4rem;background:none;}
.vs-card:not(.is-dvp) .vs-steps li:last-child{color:var(--color-magenta);}
.vs-card.is-dvp .vs-steps li{color:#fff;background:rgba(255,255,255,.12);}
.vs-card.is-dvp .vs-steps li + li{background:none;}
.vs-card.is-dvp .vs-steps li:last-child{color:var(--color-accent-bright);}
.vs-card p{margin:0;font-size:var(--text-sm);color:var(--color-text-muted);}
.vs-card.is-dvp p{color:rgba(255,255,255,.82);}
@media (max-width:760px){ .vs{grid-template-columns:1fr;} }

/* ---- family explorer ----
   Families on the left (name, modules, plot types); the chosen family's
   modules on the right, each a card with its plot types as chips. */
.fam{margin-top:var(--space-10);display:grid;grid-template-columns:minmax(250px,.72fr) minmax(0,2.28fr);
  gap:clamp(var(--space-6),3vw,var(--space-10));align-items:start;}
.fam-tabs{display:grid;gap:.5rem;position:sticky;top:calc(var(--header-h, 72px) + var(--space-4));}
.fam-tab{display:grid;grid-template-columns:auto 1fr auto;gap:.8rem;align-items:center;text-align:left;width:100%;
  padding:var(--space-4) var(--space-5);border-radius:var(--radius-xl);
  background:var(--color-surface);border:1px solid var(--color-divider);color:var(--color-text);cursor:pointer;
  transition:all var(--transition);}
.fam-tab > [data-lucide]{width:1.2rem;height:1.2rem;color:var(--color-primary);}
.fam-tab b{display:block;font-family:var(--font-display);font-weight:800;font-size:var(--text-base);line-height:1.15;}
.fam-tab i{display:block;font-style:normal;font-size:var(--text-xs);color:var(--color-text-muted);margin-top:.15rem;}
.fam-tab em{font-style:normal;font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);
  color:color-mix(in srgb, var(--color-primary) 70%, var(--color-text));}
.fam-tab:hover{border-color:color-mix(in srgb, var(--color-primary) 40%, transparent);transform:translateX(3px);}
.fam-tab.is-on{background:linear-gradient(135deg,var(--color-primary),var(--color-indigo));border-color:transparent;color:#fff;
  box-shadow:0 12px 30px color-mix(in srgb, var(--color-primary) 32%, transparent);}
.fam-tab.is-on > [data-lucide],.fam-tab.is-on em{color:#fff;}
.fam-tab.is-on i{color:rgba(255,255,255,.82);}
[data-theme="dark"] .fam-tab.is-on{background:linear-gradient(135deg,#6D3BE8,#3D53E0);}
.fam-total{margin:var(--space-3) 0 0;padding:var(--space-4) var(--space-5);border-radius:var(--radius-xl);
  border:1px dashed color-mix(in srgb, var(--color-primary) 30%, transparent);
  font-size:var(--text-xs);color:var(--color-text-muted);line-height:1.45;}
.fam-total b{color:var(--color-text);font-family:var(--font-display);font-weight:800;font-size:var(--text-base);}

.fam-panel{padding:clamp(var(--space-6),2.4vw,var(--space-8));border-radius:var(--radius-2xl);
  background:var(--color-surface);border:1px solid color-mix(in srgb, var(--color-primary) 14%, transparent);}
.fam-panel.is-in{animation:audIn .38s cubic-bezier(.4,0,.2,1) both;}
.fam-head{display:grid;grid-template-columns:1fr auto;gap:var(--space-6);align-items:start;
  padding-bottom:var(--space-5);margin-bottom:var(--space-5);border-bottom:1px solid var(--color-divider);}
.fam-head h3{font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;font-size:var(--text-2xl);line-height:1.05;margin:0 0 .45rem;}
.fam-head p{margin:0;color:var(--color-text-muted);max-width:60ch;}
.fam-count{text-align:right;}
.fam-count b{display:block;font-family:var(--font-display);font-weight:800;font-size:clamp(2.2rem,1.6rem + 1.6vw,3.2rem);line-height:.95;
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo) 55%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.fam-count span{font-size:var(--text-xs);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--color-text-muted);}
.fam-mods{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:var(--space-4);}
.fam-mod{padding:var(--space-5);border-radius:var(--radius-xl);
  background:color-mix(in srgb, var(--color-primary) 3%, var(--color-surface));border:1px solid var(--color-divider);}
.fam-mod-top{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;margin-bottom:var(--space-3);}
.fam-mod h4{font-family:var(--font-display);font-weight:800;font-size:var(--text-base);margin:0;line-height:1.2;}
.fam-mod-n{flex:none;font-size:.66rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:#fff;background:linear-gradient(135deg,#6D3BE8,#3D53E0);padding:.26rem .6rem;border-radius:var(--radius-full);}
.fam-mod .svc-chips{border-top:0;padding:0;margin:0 0 var(--space-3);}
.fam-mod p{margin:0;font-size:var(--text-xs);line-height:1.5;color:var(--color-text-muted);}
.fam-note{display:flex;gap:.7rem;align-items:flex-start;margin:var(--space-5) 0 0;padding:var(--space-4) var(--space-5);
  border-radius:var(--radius-xl);background:color-mix(in srgb, var(--color-primary) 6%, transparent);
  font-size:var(--text-sm);line-height:1.5;color:var(--color-text);}
.fam-note [data-lucide]{width:1.1rem;height:1.1rem;flex:none;margin-top:.15rem;color:var(--color-primary);}
.fam-fallback{margin:0;padding-left:1.1rem;display:grid;gap:.5rem;color:var(--color-text-muted);}
.fam-fallback b{color:var(--color-text);}
@media (max-width:980px){
  .fam{grid-template-columns:1fr;}
  .fam-tabs{position:static;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:.5rem;padding:.2rem .2rem var(--space-3);}
  .fam-tab{flex:0 0 auto;min-width:210px;scroll-snap-align:start;}
  .fam-tab:hover{transform:none;}
  .fam-total{display:none;}
}
@media (max-width:560px){
  .fam-head{grid-template-columns:1fr;}
  .fam-count{text-align:left;}
}
@media (prefers-reduced-motion:reduce){ .fam-panel.is-in{animation:none;} }

/* ---- data workspace ---- */
.dws-stats{margin:var(--space-8) 0 0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--space-4);}
.dws-stats > div{padding:var(--space-5);border-radius:var(--radius-xl);background:var(--color-surface);border:1px solid var(--color-divider);}
.dws-stats dt{font-size:var(--text-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:.35rem;}
.dws-stats dd{margin:0;font-family:var(--font-display);font-weight:800;font-size:clamp(1.4rem,1.1rem + .8vw,1.9rem);line-height:1;
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.dws{margin-top:var(--space-6);display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-5);}
.dw{display:flex;flex-direction:column;padding:var(--space-6);border-radius:var(--radius-2xl);
  background:var(--color-surface);border:1px solid var(--color-divider);
  transition:transform var(--transition),box-shadow var(--transition),border-color var(--transition);}
.dw:hover{transform:translateY(-3px);border-color:color-mix(in srgb, var(--color-primary) 28%, transparent);
  box-shadow:0 22px 48px color-mix(in srgb, var(--color-primary) 12%, transparent);}
.dw-ico{width:44px;height:44px;border-radius:var(--radius-lg);display:grid;place-items:center;margin-bottom:var(--space-4);
  color:#fff;background:linear-gradient(135deg,#6D3BE8,#3D53E0);}
.dw-ico [data-lucide]{width:1.3rem;height:1.3rem;}
.dw h3{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);letter-spacing:-.02em;margin:0 0 var(--space-2);}
.dw > p{margin:0 0 var(--space-4);font-size:var(--text-sm);color:var(--color-text-muted);flex:1;}
@media (max-width:1000px){ .dws{grid-template-columns:repeat(2,minmax(0,1fr));} .dws-stats{grid-template-columns:repeat(3,minmax(0,1fr));} }
@media (max-width:640px){ .dws{grid-template-columns:1fr;} .dws-stats{grid-template-columns:repeat(2,minmax(0,1fr));} }

/* ---- export card ---- */
.expo{margin-top:var(--space-6);display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:var(--space-8);align-items:center;
  padding:clamp(var(--space-6),3vw,var(--space-10));border-radius:var(--radius-2xl);
  background:linear-gradient(150deg,#1B1046 0%,#3A1C96 58%,#07535B 100%);color:#fff;}
.expo .vs-kick,.expo .vs-kick [data-lucide]{color:var(--color-accent-bright);}
.expo h3{font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;font-size:var(--text-2xl);line-height:1.1;margin:var(--space-3) 0 var(--space-3);color:#fff;}
.expo-main p{margin:0;color:rgba(255,255,255,.82);}
.expo-specs{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3);}
.expo-specs > div{padding:var(--space-4) var(--space-5);border-radius:var(--radius-xl);
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);}
.expo-specs dt{font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--color-accent-bright);}
.expo-specs dd{margin:.3rem 0 .15rem;font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);color:#fff;}
.expo-specs small{font-size:var(--text-xs);color:rgba(255,255,255,.7);}
@media (max-width:860px){ .expo{grid-template-columns:1fr;gap:var(--space-6);} }
@media (max-width:420px){ .expo-specs{grid-template-columns:1fr;} }

/* Plot wall with tall cells: the real circos output gets two rows. The wide
   cell keeps its own ratio (two 4:3 cells side by side) so row one always
   has a height to give the tall cell beside it. */
.pwall{grid-auto-flow:row dense;}
.pw.pw-wide .pw-img{aspect-ratio:8/3;flex:none;}
.pw.pw-tall{grid-row:span 2;}
.pw.pw-tall .pw-img{aspect-ratio:auto;flex:1;min-height:0;}
@media (max-width:900px){ .pw.pw-wide .pw-img{aspect-ratio:2/1;} }
@media (max-width:520px){ .pw.pw-tall{grid-row:auto;} .pw.pw-tall .pw-img{aspect-ratio:4/3;flex:none;} }
.vs-steps li{font-size:.85rem;}
/* Featured cells: the real circos output takes two columns and two rows.
   Their height comes from the ordinary 4:3 cells beside them. */
.pw.pw-big{grid-column:span 2;grid-row:span 2;}
.pw.pw-big .pw-img{aspect-ratio:auto;flex:1;min-height:0;}
@media (max-width:900px){ .pw.pw-big{grid-row:auto;} .pw.pw-big .pw-img{aspect-ratio:6/5;flex:none;} }
@media (max-width:520px){ .pw.pw-big{grid-column:auto;} .pw.pw-big .pw-img{aspect-ratio:4/3;} }
@media (max-width:980px){ .fam-tab{width:auto;} }

/* =====================================================================
   DataViz Pro "Access & plans" (.pl2) — Explorer / Researcher / Big Data /
   Lab cards, Institute band, workspace scale strip and notes.
   Scoped to .pl2 so the KropAnalytiX / BreedPilot .plans blocks are untouched.
   Billing: section[data-billing="mo|yr"] hides [data-per] blocks; currency is
   the shared [data-inr]/[data-usd] toggle in main.js.
   ===================================================================== */
.pl2 .grad{background:linear-gradient(100deg,var(--color-primary),var(--color-indigo) 50%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.pl2 .plans-head .sec-head h2 .grad{display:block;}
.pl2 .nw{white-space:nowrap;}
.pl2-ctrl{display:flex;flex-direction:column;align-items:flex-end;gap:.6rem;flex:none;}
.pl2-ctrl .price-toggle{margin:0;}
.pl2-ctrl .price-toggle button{white-space:nowrap;}
.pl2-bill em{font-style:normal;font-size:.72em;font-weight:800;margin-left:.4rem;padding:.12rem .5rem;border-radius:var(--radius-full);
  background:var(--color-gold-soft);color:var(--color-text);vertical-align:.08em;}
.pl2-bill button.active em{background:rgba(255,255,255,.22);color:inherit;}
html:not(.js) .pl2-bill{display:none;}
.pl2[data-billing="mo"] [data-per="yr"],.pl2[data-billing="yr"] [data-per="mo"]{display:none;}

.pl2-trust{display:flex;flex-wrap:wrap;gap:.55rem 1.6rem;margin-top:var(--space-6);color:var(--color-text-muted);font-size:var(--text-sm);font-weight:600;}
.pl2-trust li{display:flex;align-items:center;gap:.45rem;}
.pl2-trust [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);flex:none;}

.pl2-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-5);margin-top:var(--space-8);align-items:stretch;}
.pl2-card{position:relative;display:flex;flex-direction:column;background:var(--color-surface);border:1px solid var(--color-divider);
  border-radius:var(--radius-xl);padding:var(--space-6);transition:transform var(--transition),box-shadow var(--transition);}
.pl2-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);}
.pl2-card.is-pick{border-color:var(--color-gold);box-shadow:var(--shadow-gold);}
.pl2-flag{position:absolute;top:-12px;left:var(--space-6);background:var(--color-gold);color:var(--color-on-accent);font-size:var(--text-xs);
  font-weight:800;padding:.3rem .85rem;border-radius:var(--radius-full);letter-spacing:.03em;white-space:nowrap;}
.pl2-top{display:flex;align-items:center;gap:.55rem;}
.pl2-top [data-lucide]{width:1.3rem;height:1.3rem;color:var(--color-primary);flex:none;}
.pl2-top h3{font-family:var(--font-display);font-size:var(--text-lg);margin:0;line-height:1.2;}
.pl2-tag{color:var(--color-text-muted);font-size:var(--text-sm);margin:.35rem 0 var(--space-5);min-height:2.8em;}
.pl2-price{display:flex;flex-direction:column;align-items:flex-start;gap:.3rem;}
.pl2-amt{font-family:var(--font-display);font-weight:800;font-size:var(--text-2xl);line-height:1.05;color:var(--color-text);letter-spacing:-.02em;}
.pl2-per{font-size:var(--text-sm);color:var(--color-text-muted);font-weight:600;}
.pl2-sub{font-size:var(--text-xs);color:var(--color-text-faint);font-weight:600;margin:.45rem 0 var(--space-5);}
.pl2-list{display:grid;gap:.6rem;margin-bottom:var(--space-5);}
.pl2-list li{display:flex;gap:.5rem;font-size:var(--text-sm);align-items:flex-start;line-height:1.4;}
.pl2-list [data-lucide]{width:1.05rem;height:1.05rem;color:var(--color-primary);flex:none;margin-top:.12rem;}
.pl2-list .pl2-hi{color:var(--color-text);font-weight:600;}
.pl2-list .pl2-hi [data-lucide]{color:var(--color-teal);}
.pl2-alt{display:flex;gap:.5rem;align-items:flex-start;font-size:var(--text-xs);line-height:1.45;color:var(--color-text-muted);
  background:var(--color-surface-offset);border-radius:var(--radius-md);padding:.6rem .75rem;margin:auto 0 var(--space-4);}
.pl2-alt [data-lucide]{width:.95rem;height:.95rem;flex:none;margin-top:.08rem;color:var(--color-primary);}
.pl2-alt b{color:var(--color-text);}
.pl2-card > .btn{margin-top:auto;}
.pl2-alt + .btn{margin-top:0;}

.pl2-inst{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-6);margin-top:var(--space-6);
  padding:var(--space-6) var(--space-8);border-radius:var(--radius-xl);color:#fff;
  background:linear-gradient(120deg,var(--color-navy),var(--color-primary-active));}
[data-theme="dark"] .pl2-inst{background:linear-gradient(120deg,#1B1046 0%,#3A1C96 60%,#2B2F9E 100%);border:1px solid rgba(169,123,255,.28);}
.pl2-inst-txt{flex:1 1 30rem;max-width:46rem;}
.pl2-inst-k{display:inline-flex;align-items:center;gap:.45rem;text-transform:uppercase;letter-spacing:.14em;font-size:var(--text-xs);font-weight:800;color:var(--color-accent-bright);}
.pl2-inst-k [data-lucide]{width:1rem;height:1rem;}
.pl2-inst h3{color:#fff;font-size:var(--text-xl);margin:.45rem 0 .4rem;line-height:1.25;}
.pl2-inst p{color:rgba(255,255,255,.82);font-size:var(--text-sm);margin:0;max-width:62ch;}
.pl2-inst-cta{display:flex;flex-direction:column;align-items:flex-end;gap:.75rem;flex:none;}
.pl2-inst-p{font-family:var(--font-display);font-weight:800;font-size:var(--text-xl);color:#fff;white-space:nowrap;}
.pl2-inst-p small{font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;color:rgba(255,255,255,.72);}

.pl2-ws{margin-top:var(--space-10);}
.pl2-ws-h{font-size:var(--text-xl);margin-bottom:var(--space-5);text-wrap:balance;}
.pl2-ws-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4);}
.pl2-ws-row li{--w:34%;display:flex;flex-direction:column;gap:.35rem;padding:var(--space-5);border:1px solid var(--color-divider);
  border-radius:var(--radius-lg);background:var(--color-surface);}
.pl2-ws-row li::before{content:"";display:block;height:6px;width:var(--w);border-radius:var(--radius-full);margin-bottom:.55rem;
  background:linear-gradient(90deg,var(--color-primary),var(--color-teal));}
.pl2-ws-row li.is-big{--w:67%;}
.pl2-ws-row li:last-child{--w:100%;}
.pl2-ws-row b{font-family:var(--font-display);font-size:var(--text-base);}
.pl2-ws-row span{font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.45;}
.pl2-ws-row em{font-style:normal;margin-top:auto;padding-top:.4rem;font-size:var(--text-xs);font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--color-primary);}

.pl2-notes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-5);margin-top:var(--space-8);
  padding-top:var(--space-6);border-top:1px solid var(--color-divider);}
.pl2-notes li{display:flex;gap:.6rem;align-items:flex-start;font-size:var(--text-xs);line-height:1.5;color:var(--color-text-muted);}
.pl2-notes b{color:var(--color-text);}
.pl2-notes [data-lucide]{width:1.05rem;height:1.05rem;flex:none;margin-top:.1rem;color:var(--color-primary);}

@media (max-width:1100px){
  .pl2-grid,.pl2-notes{grid-template-columns:repeat(2,minmax(0,1fr));}
  .pl2-ctrl{flex-direction:row;flex-wrap:wrap;align-items:center;}
}
@media (max-width:720px){
  .pl2-ws-row{grid-template-columns:1fr;}
  .pl2-inst{padding:var(--space-6);}
  .pl2-inst-cta{align-items:flex-start;}
}
@media (max-width:620px){
  .pl2-grid,.pl2-notes{grid-template-columns:1fr;}
  .pl2-tag{min-height:0;}
  .pl2-ctrl{width:100%;flex-direction:column;align-items:stretch;}
  .pl2-ctrl .price-toggle{width:100%;}
  .pl2-ctrl .price-toggle button{flex:1 1 0;padding:.55rem .6rem;}
}
@media (prefers-reduced-motion:reduce){.pl2-card,.pl2-card:hover{transition:none;transform:none;}}

/* =====================================================================
   DataViz Pro "Your data" (.dsx) — lifecycle strip (upload → workspace →
   figure → download → deleted) with a travelling pulse, keep / never-keep
   columns, and three extra-protection notes. Scoped to .dsx.
   ===================================================================== */
.dsx .grad{background:linear-gradient(100deg,var(--color-primary),var(--color-indigo) 50%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.dsx-head{max-width:66rem;}
.dsx-head h2 .grad{display:block;}
@media (min-width:600px){.dsx-nw{white-space:nowrap;}}
.dsx-head p{max-width:60ch;}
.dsx-more a,.pl2-notes a{color:var(--color-primary);font-weight:600;text-decoration:underline;text-underline-offset:2px;}
.dsx-k{margin-top:var(--space-10);font-size:var(--text-xs);font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--color-primary);}

.dsx-flow{--dot:56px;position:relative;list-style:none;margin:var(--space-5) 0 0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--space-4);}
.dsx-flow::before{content:"";position:absolute;top:calc(var(--dot) / 2 - 1px);left:10%;right:10%;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--color-primary),var(--color-teal) 80%,transparent);opacity:.45;}
.dsx-flow::after{content:"";position:absolute;top:calc(var(--dot) / 2 - 5px);left:10%;width:10px;height:10px;border-radius:50%;
  background:var(--color-teal);box-shadow:0 0 0 4px color-mix(in srgb,var(--color-teal) 18%,transparent),0 0 14px var(--color-teal);animation:dsxRun 7s linear infinite;}
@keyframes dsxRun{0%{left:10%;opacity:0}6%{opacity:1}84%{left:calc(90% - 10px);opacity:1}92%,100%{left:calc(90% - 10px);opacity:0}}
.dsx-flow li{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:.35rem;}
.dsx-ico{position:relative;z-index:1;display:grid;place-items:center;width:var(--dot);height:var(--dot);border-radius:50%;margin-bottom:.45rem;
  background:var(--color-surface);border:1px solid var(--color-divider);box-shadow:var(--shadow-sm);}
.dsx-ico [data-lucide]{width:1.4rem;height:1.4rem;color:var(--color-primary);}
.dsx-flow b{font-family:var(--font-display);font-size:var(--text-base);}
.dsx-flow span:not(.dsx-ico){font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.45;max-width:24ch;}
.dsx-flow .is-end .dsx-ico{border:2px dashed var(--color-teal);background:transparent;box-shadow:none;}
.dsx-flow .is-end .dsx-ico [data-lucide]{color:var(--color-teal);}
.dsx-flow em{font-style:normal;margin-top:.2rem;padding:.18rem .6rem;border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:800;
  letter-spacing:.06em;text-transform:uppercase;background:var(--color-gold-soft);color:var(--color-text);}

.dsx-kn{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-5);margin-top:var(--space-10);}
.dsx-col{background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-xl);padding:var(--space-6);}
.dsx-col h3{display:flex;align-items:center;gap:.55rem;font-size:var(--text-lg);margin:0 0 var(--space-4);}
.dsx-col h3 [data-lucide]{width:1.25rem;height:1.25rem;color:var(--color-primary);flex:none;}
.dsx-col ul{list-style:none;margin:0;padding:0;display:grid;gap:.7rem;}
.dsx-col li{display:flex;gap:.55rem;align-items:flex-start;font-size:var(--text-sm);line-height:1.45;}
.dsx-col li [data-lucide]{width:1.05rem;height:1.05rem;flex:none;margin-top:.12rem;color:var(--color-primary);}
.dsx-col.is-no{border-color:color-mix(in srgb,var(--color-teal) 45%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-teal) 7%,transparent);}
.dsx-col.is-no h3 [data-lucide],.dsx-col.is-no li [data-lucide]{color:var(--color-teal);}
.dsx-chips{display:flex;flex-wrap:wrap;gap:.45rem;margin:var(--space-5) 0 0;}
.dsx-chips span{padding:.3rem .7rem;border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:700;
  background:var(--color-surface-offset);color:var(--color-text);border:1px solid var(--color-divider);}

.dsx-more{list-style:none;margin:var(--space-8) 0 0;padding:var(--space-6) 0 0;border-top:1px solid var(--color-divider);
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-5);}
.dsx-more li{display:flex;gap:.75rem;align-items:flex-start;}
.dsx-more li > [data-lucide]{width:1.2rem;height:1.2rem;flex:none;margin-top:.15rem;color:var(--color-primary);}
.dsx-more b{display:block;font-family:var(--font-display);font-size:var(--text-base);margin-bottom:.2rem;}
.dsx-more span{display:block;font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.45;}

@media (max-width:900px){
  .dsx-kn,.dsx-more{grid-template-columns:1fr;}
}
@media (max-width:720px){
  .dsx-flow{--dot:48px;grid-template-columns:1fr;gap:var(--space-5);}
  .dsx-flow::before{top:calc(var(--dot) / 2);bottom:calc(var(--dot) / 2);left:calc(var(--dot) / 2 - 1px);right:auto;width:2px;height:auto;
    background:linear-gradient(180deg,var(--color-primary),var(--color-teal) 80%,transparent);}
  .dsx-flow::after{left:calc(var(--dot) / 2 - 5px);top:calc(var(--dot) / 2);animation-name:dsxRunV;}
  .dsx-flow li{display:grid;grid-template-columns:var(--dot) 1fr;column-gap:var(--space-4);row-gap:.2rem;align-items:start;text-align:left;}
  .dsx-ico{grid-row:span 3;margin-bottom:0;}
  .dsx-flow b{padding-top:.35rem;}
  .dsx-flow span:not(.dsx-ico){max-width:none;}
  .dsx-flow em{justify-self:start;}
}
@keyframes dsxRunV{0%{top:calc(var(--dot) / 2);opacity:0}6%{opacity:1}84%{top:calc(100% - var(--dot) / 2 - 10px);opacity:1}92%,100%{top:calc(100% - var(--dot) / 2 - 10px);opacity:0}}
@media (prefers-reduced-motion:reduce){.dsx-flow::after{animation:none;display:none;}}


/* =====================================================================
   DATAVIZ PRO - GLIMPSE (real output: default vs customised, interactive)
   Figures always sit on white: they are scientific output and keep their
   true colours in both themes. JS: assets/js/glimpse.js
   ===================================================================== */
.gx-stats{list-style:none;margin:var(--space-6) 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.6rem;}
.gx-stats li{display:flex;align-items:baseline;gap:.45rem;padding:.5rem .95rem;border-radius:var(--radius-full);
  background:var(--color-surface);border:1px solid var(--color-divider);font-size:var(--text-sm);color:var(--color-text-muted);}
.gx-stats b{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);line-height:1;
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}

#gallery .sec-head h2 .grad{background:linear-gradient(100deg,var(--color-primary),var(--color-indigo) 50%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.gx{margin-top:var(--space-8);}
.gx-cats{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:var(--space-5);}
.gx-cat{display:inline-flex;align-items:center;gap:.5rem;padding:.55rem .95rem .55rem .8rem;border-radius:var(--radius-full);
  background:var(--color-surface);border:1px solid var(--color-divider);color:var(--color-text);cursor:pointer;
  font-family:var(--font-display);font-weight:800;font-size:var(--text-sm);line-height:1.1;white-space:nowrap;
  transition:background var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition),transform var(--transition);}
.gx-cat [data-lucide]{width:1rem;height:1rem;color:var(--color-primary);flex:none;}
.gx-cat em{font-style:normal;font-size:.7rem;font-weight:800;min-width:1.5rem;text-align:center;padding:.15rem .4rem;border-radius:var(--radius-full);
  background:color-mix(in srgb, var(--color-primary) 10%, transparent);color:color-mix(in srgb, var(--color-primary) 80%, var(--color-text));}
.gx-cat:hover{border-color:color-mix(in srgb, var(--color-primary) 40%, transparent);transform:translateY(-1px);}
.gx-cat.is-on{background:linear-gradient(135deg,var(--color-primary),var(--color-indigo));border-color:transparent;color:#fff;
  box-shadow:0 10px 26px color-mix(in srgb, var(--color-primary) 30%, transparent);}
.gx-cat.is-on [data-lucide]{color:#fff;}
.gx-cat.is-on em{background:rgba(255,255,255,.2);color:#fff;}
[data-theme="dark"] .gx-cat.is-on{background:linear-gradient(135deg,#6D3BE8,#3D53E0);}

.gx-main{display:block;}

/* the app-like canvas */
.gx-frame{border-radius:var(--radius-2xl);background:var(--color-surface);border:1px solid var(--color-divider);overflow:hidden;
  box-shadow:0 26px 60px color-mix(in srgb, var(--color-primary) 10%, transparent);}
.gx-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;
  padding:.6rem .75rem .6rem 1rem;border-bottom:1px solid var(--color-divider);
  background:color-mix(in srgb, var(--color-primary) 4%, var(--color-surface));}
.gx-crumb{margin:0;display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;min-width:0;font-size:var(--text-xs);color:var(--color-text-muted);}
.gx-crumb b{font-family:var(--font-display);font-weight:800;color:var(--color-text);}
.gx-crumb span::before{content:"\203A";margin-right:.35rem;opacity:.55;}
.gx-crumb span:last-child{color:var(--color-text);font-weight:700;}
.gx-tools{display:flex;align-items:center;gap:.5rem;}
.gx-seg{display:inline-flex;padding:3px;border-radius:var(--radius-full);background:color-mix(in srgb, var(--color-text) 7%, transparent);}
.gx-seg button{border:0;background:none;cursor:pointer;padding:.38rem .75rem;border-radius:var(--radius-full);
  font-family:var(--font-display);font-weight:800;font-size:.74rem;color:var(--color-text-muted);transition:background var(--transition),color var(--transition),box-shadow var(--transition);}
.gx-seg button:hover{color:var(--color-text);}
.gx-seg button.is-on{background:var(--color-surface);color:var(--color-text);box-shadow:0 2px 8px rgba(15,23,42,.12);}
.gx-ix{display:inline-flex;align-items:center;gap:.4rem;cursor:pointer;padding:.45rem .8rem;border-radius:var(--radius-full);
  border:1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);background:var(--color-surface);color:var(--color-primary);
  font-family:var(--font-display);font-weight:800;font-size:.74rem;transition:all var(--transition);}
.gx-ix [data-lucide]{width:.95rem;height:.95rem;}
.gx-ix:hover:not(:disabled){background:color-mix(in srgb, var(--color-primary) 8%, var(--color-surface));}
.gx-ix.is-on,.gx-ix.is-on:hover:not(:disabled){background:linear-gradient(135deg,#6D3BE8,#3D53E0);border-color:transparent;color:#fff;box-shadow:0 8px 20px color-mix(in srgb, #6D3BE8 35%, transparent);}
.gx-ix:disabled,.gx-ix.is-on:disabled{cursor:not-allowed;opacity:.5;border-style:dashed;background:var(--color-surface);color:var(--color-text-muted);box-shadow:none;border-color:var(--color-divider);}

.gx-stage{--p:50%;position:relative;margin:0;background:#fff;aspect-ratio:var(--ar,1.6);width:100%;
  max-height:min(76vh,780px);min-height:260px;overflow:hidden;}
.gx-view{position:absolute;inset:0;}
.gx-static{cursor:ew-resize;touch-action:pan-y;user-select:none;-webkit-user-select:none;transition:opacity .35s ease;}
.gx-static.is-swap{opacity:.35;}
.gx-img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:clamp(6px,1.2vw,14px);
  box-sizing:border-box;background:#fff;pointer-events:none;-webkit-user-drag:none;}
.gx-clip{position:absolute;inset:0;clip-path:inset(0 0 0 var(--p));will-change:clip-path;}
.gx-handle{position:absolute;top:0;bottom:0;left:var(--p);width:0;z-index:3;outline:none;}
.gx-handle::before{content:"";position:absolute;top:0;bottom:0;left:-1.5px;width:3px;border-radius:3px;
  background:linear-gradient(180deg,#8C52FF,#3D53E0 50%,#03C9BE);box-shadow:0 0 0 1px rgba(255,255,255,.7),0 0 18px rgba(109,59,232,.35);}
.gx-knob{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);width:44px;height:44px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;gap:0;background:#fff;color:#3D53E0;
  box-shadow:0 6px 18px rgba(15,23,42,.22),0 0 0 3px rgba(109,59,232,.18);transition:transform .2s ease,box-shadow .2s ease;}
.gx-knob [data-lucide]{width:15px;height:15px;stroke-width:2.6;}
.gx-static:hover .gx-knob,.gx-stage.is-drag .gx-knob,.gx-handle:focus-visible .gx-knob{transform:translate(-50%,-50%) scale(1.08);
  box-shadow:0 8px 22px rgba(15,23,42,.26),0 0 0 5px rgba(109,59,232,.24);}
.gx-handle:focus-visible .gx-knob{outline:3px solid var(--color-primary);outline-offset:3px;}
.gx-tag{position:absolute;top:12px;z-index:2;padding:.28rem .62rem;border-radius:var(--radius-full);pointer-events:none;
  font-family:var(--font-display);font-weight:800;font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;
  transition:opacity .25s ease,transform .25s ease;}
.gx-tag-l{left:12px;background:rgba(15,23,42,.78);color:#fff;}
.gx-tag-r{right:12px;background:linear-gradient(135deg,#6D3BE8,#3D53E0);color:#fff;box-shadow:0 4px 12px rgba(61,83,224,.3);}
.gx-stage.is-cus .gx-tag-l,.gx-stage.is-def .gx-tag-r{opacity:0;transform:translateY(-4px);}
/* a figure from the app's gallery: no default to compare */
.gx-stage.is-solo .gx-a,.gx-stage.is-solo .gx-handle,.gx-stage.is-solo .gx-tag-l{display:none;}
.gx-stage.is-solo .gx-static{cursor:default;}
.gx-stage.is-solo .gx-tag-r{opacity:1;transform:none;}
.gx-frame:has(.gx-stage.is-solo) .gx-seg{opacity:.4;pointer-events:none;}
/* interactive */
.gx-live{background:#fff;}
.gx-live .js-plotly-plot,.gx-live .plot-container{width:100%;height:100%;}
.gx-stage.is-live .gx-tag{display:none;}
.gx-frame:has(.gx-stage.is-live) .gx-seg button.is-on{background:none;box-shadow:none;color:var(--color-text-muted);}
.gx-load{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:4;display:none;align-items:center;gap:.5rem;
  padding:.4rem .8rem;border-radius:var(--radius-full);background:rgba(15,23,42,.8);color:#fff;font-size:.74rem;font-weight:600;}
.gx-stage.is-loading .gx-load:not(:empty){display:inline-flex;}
.gx-stage.is-note .gx-load:not(:empty){display:inline-flex;}
.gx-spin{width:12px;height:12px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:gxSpin .8s linear infinite;}
@keyframes gxSpin{to{transform:rotate(360deg);}}
.gx-stage.is-loading::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(100deg,transparent 30%,rgba(109,59,232,.06) 50%,transparent 70%);background-size:200% 100%;animation:gxShim 1.2s linear infinite;}
.gx-stage.is-live.is-loading::after{display:none;}
@keyframes gxShim{from{background-position:120% 0;}to{background-position:-80% 0;}}

/* info card */
@keyframes gxUp{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}
@keyframes gxChip{from{opacity:0;transform:translateY(6px) scale(.96);}to{opacity:1;transform:none;}}

/* filmstrip + controls */
.gx-foot{margin-top:var(--space-4);display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-4);align-items:center;}
.gx-strip{display:flex;gap:.6rem;overflow-x:auto;scroll-snap-type:x proximity;padding:.35rem .2rem .6rem;scrollbar-width:thin;}
.gx-th{position:relative;flex:0 0 auto;width:148px;padding:0;border-radius:var(--radius-lg);overflow:hidden;cursor:pointer;scroll-snap-align:start;
  background:var(--color-surface);border:1px solid var(--color-divider);text-align:left;color:var(--color-text);
  transition:transform var(--transition),border-color var(--transition),box-shadow var(--transition);}
.gx-strip.is-in .gx-th{animation:gxUp .4s cubic-bezier(.2,.7,.2,1) both;animation-delay:calc(var(--i) * .035s);}
.gx-th-img{display:block;height:88px;background:#fff;border-bottom:1px solid var(--color-divider);}
.gx-th-img img{width:100%;height:100%;object-fit:contain;padding:4px;box-sizing:border-box;display:block;}
.gx-th-t{display:block;padding:.4rem .55rem .5rem;font-size:.72rem;font-weight:700;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.gx-th-ix{position:absolute;top:6px;right:6px;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(135deg,#6D3BE8,#3D53E0);color:#fff;}
.gx-th-ix [data-lucide]{width:11px;height:11px;}
.gx-th:hover{transform:translateY(-2px);border-color:color-mix(in srgb, var(--color-primary) 35%, transparent);}
.gx-th.is-on{border-color:transparent;box-shadow:0 0 0 2px #6D3BE8,0 10px 24px color-mix(in srgb, #6D3BE8 22%, transparent);}
.gx-th-bar{position:absolute;left:0;bottom:0;height:3px;width:100%;transform:scaleX(0);transform-origin:left;
  background:linear-gradient(90deg,#8C52FF,#03C9BE);}
.gx-th.is-on .gx-th-bar{transform:scaleX(.001);}
.gx.is-playing .gx-th.is-on .gx-th-bar.is-run{animation:gxBar var(--hold,9000ms) linear forwards;}
.gx.is-held .gx-th.is-on .gx-th-bar.is-run{animation-play-state:paused;}
@keyframes gxBar{from{transform:scaleX(0);}to{transform:scaleX(1);}}
.gx-nav{display:flex;gap:.4rem;}
.gx-nav button{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;cursor:pointer;
  background:var(--color-surface);border:1px solid var(--color-divider);color:var(--color-text);transition:all var(--transition);}
.gx-nav button [data-lucide]{width:1.1rem;height:1.1rem;}
.gx-nav button:hover{border-color:color-mix(in srgb, var(--color-primary) 40%, transparent);color:var(--color-primary);}
.gx-nav .gx-play{background:linear-gradient(135deg,#6D3BE8,#3D53E0);border-color:transparent;color:#fff;}
.gx-nav .gx-play:hover{color:#fff;filter:brightness(1.08);}
/* one-line provenance badge under the Glimpse: flowing gradient border, shimmering name, live dot */
.gx-fine{margin:var(--space-6) 0 0;display:flex;justify-content:center;}
.gx-fine-in{position:relative;display:inline-flex;align-items:center;gap:.65rem;max-width:100%;overflow:hidden;
  padding:.62rem 1.25rem .62rem 1rem;border-radius:var(--radius-full);border:1.5px solid transparent;
  background:linear-gradient(var(--color-surface),var(--color-surface)) padding-box,
             linear-gradient(90deg,#8C52FF,#3D53E0,#03C9BE,#F95BF6,#8C52FF) border-box;
  background-size:100% 100%,300% 100%;animation:gxFlow 7s linear infinite;
  box-shadow:0 14px 34px -18px color-mix(in srgb, var(--color-primary) 55%, transparent);}
.gx-fine-in::after{content:"";position:absolute;top:0;bottom:0;left:-40%;width:30%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-18deg);
  animation:gxGlint 4.8s ease-in-out infinite;}
[data-theme="dark"] .gx-fine-in::after{background:linear-gradient(100deg,transparent,rgba(255,255,255,.14),transparent);}
.gx-fine-dot{position:relative;flex:none;width:9px;height:9px;border-radius:50%;background:#03C9BE;
  box-shadow:0 0 0 0 rgba(3,201,190,.55);animation:gxPing 2.2s ease-out infinite;}
.gx-fine-t{white-space:nowrap;font-family:var(--font-display);font-weight:700;letter-spacing:-.01em;
  font-size:clamp(.86rem,3.6vw,1rem);color:var(--color-text);}
.gx-fine-t b{font-weight:800;background:linear-gradient(90deg,#6D3BE8,#3D53E0,#03A99F,#C93BC6,#6D3BE8);background-size:300% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:gxFlowT 7s linear infinite;}
[data-theme="dark"] .gx-fine-t b{background-image:linear-gradient(90deg,#B79CFF,#8C9BFF,#03F7EB,#F95BF6,#B79CFF);}
.gx-fine-s{display:none;}
@media (max-width:560px){ .gx-fine-l{display:none;} .gx-fine-s{display:inline;} }
@media (max-width:360px){ .gx-fine-in{gap:.45rem;padding:.55rem .8rem .55rem .7rem;} .gx-fine-t{font-size:.74rem;} }
@keyframes gxFlow{to{background-position:0 0,300% 0;}}
@keyframes gxFlowT{to{background-position:300% 0;}}
@keyframes gxGlint{0%,55%{left:-40%;}85%,100%{left:120%;}}
@keyframes gxPing{0%{box-shadow:0 0 0 0 rgba(3,201,190,.55);}70%,100%{box-shadow:0 0 0 9px rgba(3,201,190,0);}}

/* before the script runs, show the first customised figure alone */
.gx:not(.is-ready) .gx-a,.gx:not(.is-ready) .gx-handle,.gx:not(.is-ready) .gx-tag,.gx:not(.is-ready) .gx-tools,.gx:not(.is-ready) .gx-foot{display:none;}
.gx:not(.is-ready) .gx-clip{clip-path:none;}

@media (max-width:760px){
  .gx-cats{flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x proximity;margin-left:calc(-1 * var(--space-4));margin-right:calc(-1 * var(--space-4));
    padding:0 var(--space-4) .4rem;scrollbar-width:none;}
  .gx-cats::-webkit-scrollbar{display:none;}
  .gx-cat{scroll-snap-align:start;}
  .gx-bar{padding:.55rem .6rem;}
  .gx-crumb{display:none;}
  .gx-tools{width:100%;justify-content:space-between;}
  .gx-seg button{padding:.36rem .6rem;}
  .gx-stage{max-height:none;min-height:220px;}
  .gx-tag{top:8px;font-size:.6rem;}
  .gx-tag-l{left:8px;} .gx-tag-r{right:8px;}
  .gx-knob{width:38px;height:38px;}
  .gx-foot{grid-template-columns:1fr;}
  .gx-nav{justify-content:center;order:-1;}
  .gx-th{width:120px;}
  .gx-th-img{height:72px;}
}
@media (max-width:520px){ .gx-ix{padding:.45rem .6rem;} .gx-ix span{display:none;} }
@media (max-width:380px){ .gx-seg button{padding:.34rem .48rem;font-size:.7rem;} }
@media (prefers-reduced-motion:reduce){
  .gx-fine-in,.gx-fine-in::after,.gx-fine-dot,.gx-fine-t b{animation:none;}
  .gx-strip.is-in .gx-th{animation:none;}
  .gx-stage.is-loading::after{animation:none;}
  .gx.is-playing .gx-th.is-on .gx-th-bar.is-run{animation:none;}
}


/* =====================================================================
   DATAVIZ PRO - DATA PREVIEW "DATA ROOM"
   An animated walk through the real Data Preview workspace, played on
   the app's own sample data (RCBD trial, HapMap panel). The window is a
   faithful schematic of the app layout: data sources and quick checks on
   the left, the data view in the middle, the nine action panels on the
   right. JS: assets/js/dataroom.js   Data: <script id="drmData">
   ===================================================================== */
.drm{--drm-a:#8C52FF;--drm-b:#3D53E0;--drm-c:#03C9BE;
  --w-bg:#ffffff;--w-rail:#f7f7fc;--w-line:#e7e7f2;--w-text:#141633;--w-muted:#6b6f8e;--w-head:#f2f1fb;--w-zebra:#fafaff;
  margin-top:var(--space-8);}
[data-theme="dark"] .drm{--w-bg:#11132a;--w-rail:#0d0f22;--w-line:#262a4a;--w-text:#e8e9f7;--w-muted:#9296b8;--w-head:#171a38;--w-zebra:#13163000;}

.drm-stage{position:relative;overflow:hidden;overflow:clip;border-radius:28px;padding:clamp(14px,2.2vw,28px);isolation:isolate;color:#fff;
  background:
    radial-gradient(60% 55% at 12% 0%,rgba(140,82,255,.55),transparent 70%),
    radial-gradient(45% 50% at 100% 100%,rgba(3,201,190,.30),transparent 70%),
    linear-gradient(155deg,#0B0A26 0%,#17104A 48%,#0A2B3C 100%);
  box-shadow:0 40px 90px -30px rgba(23,16,74,.55);}
.drm-stage::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.5;
  background-image:radial-gradient(rgba(255,255,255,.14) 1px,transparent 1.2px);background-size:22px 22px;
  -webkit-mask-image:radial-gradient(80% 70% at 50% 40%,#000 30%,transparent 80%);mask-image:radial-gradient(80% 70% at 50% 40%,#000 30%,transparent 80%);}
.drm-stage::after{content:"";position:absolute;left:-20%;right:-20%;top:-60%;height:120%;z-index:-1;pointer-events:none;
  background:conic-gradient(from 200deg at 50% 50%,transparent 0 40%,rgba(140,82,255,.16) 48%,transparent 56%);
  animation:drmSpin 18s linear infinite;}
@keyframes drmSpin{to{transform:rotate(360deg);}}

.drm-top{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap;margin-bottom:clamp(12px,1.6vw,20px);}
.drm-brand{margin:0;display:flex;align-items:center;gap:.55rem;font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.7);font-weight:700;}
.drm-brand b{color:#fff;letter-spacing:.12em;}
.drm-dot{width:9px;height:9px;border-radius:50%;background:var(--drm-c);box-shadow:0 0 0 4px rgba(3,201,190,.18),0 0 16px var(--drm-c);animation:drmPulse 2.4s ease-in-out infinite;}
@keyframes drmPulse{50%{box-shadow:0 0 0 7px rgba(3,201,190,.05),0 0 22px var(--drm-c);}}
.drm-specs{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.45rem;}
.drm-specs li{padding:.36rem .75rem;border-radius:var(--radius-full);font-size:.74rem;color:rgba(255,255,255,.72);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);backdrop-filter:blur(6px);}
.drm-specs b{color:#fff;font-family:var(--font-display);font-weight:800;margin-right:.2rem;}

/* ---- the app window ---- */
.drm-win{position:relative;border-radius:16px;overflow:hidden;overflow:clip;background:var(--w-bg);color:var(--w-text);
  box-shadow:0 30px 70px -20px rgba(0,0,0,.6),0 0 0 1px rgba(255,255,255,.08);}
.drm-bar{display:flex;align-items:center;gap:.8rem;padding:.55rem .9rem;border-bottom:1px solid var(--w-line);background:var(--w-rail);}
.drm-dots{display:flex;gap:6px;}
.drm-dots i{width:10px;height:10px;border-radius:50%;background:#ff5f57;}
.drm-dots i:nth-child(2){background:#febc2e;} .drm-dots i:nth-child(3){background:#28c840;}
.drm-title{font-family:var(--font-display);font-weight:800;font-size:.8rem;}
.drm-file{display:inline-flex;align-items:center;gap:.4rem;margin-left:auto;min-width:0;max-width:52%;
  padding:.25rem .65rem;border-radius:var(--radius-full);background:color-mix(in srgb,var(--drm-a) 10%,transparent);
  color:color-mix(in srgb,var(--drm-a) 70%,var(--w-text));font-size:.72rem;font-weight:700;transition:background .3s;}
.drm-file [data-lucide]{width:.85rem;height:.85rem;flex:none;}
.drm-fname{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.drm-file.is-flash{animation:drmFlash .9s ease;}
@keyframes drmFlash{30%{background:color-mix(in srgb,var(--drm-c) 30%,transparent);}}

.drm-body{position:relative;display:grid;grid-template-columns:168px minmax(0,1fr) 152px;height:486px;}
.drm-rail{padding:.75rem .6rem;background:var(--w-rail);display:flex;flex-direction:column;gap:.15rem;overflow:hidden;}
.drm-left{border-right:1px solid var(--w-line);} .drm-right{border-left:1px solid var(--w-line);}
.drm-rail h5{margin:.35rem .45rem .35rem;font-family:var(--font-body);font-size:.6rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--w-muted);}
.drm-rail h5:not(:first-child){margin-top:.8rem;}
.drm-it{position:relative;display:flex;align-items:center;gap:.5rem;padding:.38rem .55rem;border-radius:9px;font-size:.74rem;font-weight:600;color:var(--w-text);
  transition:background .35s ease,color .35s ease,box-shadow .35s ease,transform .35s ease;}
.drm-it [data-lucide]{width:.9rem;height:.9rem;flex:none;color:var(--w-muted);transition:color .35s;}
.drm-it.is-on{background:linear-gradient(135deg,var(--drm-a),var(--drm-b));color:#fff;transform:translateX(2px);
  box-shadow:0 8px 20px -6px rgba(61,83,224,.55);}
.drm-it.is-on [data-lucide]{color:#fff;}
.drm-it.is-on::after{content:"";position:absolute;inset:-3px;border-radius:12px;border:2px solid rgba(140,82,255,.45);animation:drmRing 1.4s ease-out 2;}
@keyframes drmRing{from{opacity:1;transform:scale(.96);}to{opacity:0;transform:scale(1.08);}}
.drm-it.was-on{background:color-mix(in srgb,var(--drm-a) 10%,transparent);}

.drm-center{position:relative;display:flex;flex-direction:column;min-width:0;}
.drm-strip{display:none;}
.drm-grid{position:relative;flex:1;overflow:hidden;overflow:clip;}
.drm-t.geno th{font-size:.64rem;letter-spacing:0;padding-left:.45rem;padding-right:.45rem;}
.drm-t{width:100%;border-collapse:separate;border-spacing:0;font-size:.74rem;font-variant-numeric:tabular-nums;table-layout:fixed;}
.drm-t th{position:relative;text-align:left;font-weight:700;font-size:.7rem;padding:1.35rem .6rem .5rem;background:var(--w-head);
  border-bottom:1px solid var(--w-line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--w-text);}
.drm-t td{padding:0 .6rem;height:31px;border-bottom:1px solid var(--w-line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  transition:background .4s ease,color .4s ease;}
.drm-t tbody tr:nth-child(even) td{background:var(--w-zebra);}
.drm-t td.n{text-align:right;} .drm-t th.n{text-align:right;}
.drm-t .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;letter-spacing:.02em;}
.drm-ty{position:absolute;top:.35rem;left:.6rem;font-size:.56rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  padding:.08rem .38rem;border-radius:5px;opacity:0;transform:translateY(-4px);transition:opacity .35s,transform .35s,background .35s,color .35s;}
.drm-t th.n .drm-ty{left:auto;right:.6rem;}
.drm-t.show-ty .drm-ty{opacity:1;transform:none;}
.drm-ty.t-chr{background:#eef2ff;color:#4338ca;} .drm-ty.t-num{background:#dcfce7;color:#15803d;}
.drm-ty.t-int{background:#e0f2fe;color:#0369a1;} .drm-ty.t-fct{background:#fae8ff;color:#a21caf;}
[data-theme="dark"] .drm-ty.t-chr{background:#262a5c;color:#c7d2fe;} [data-theme="dark"] .drm-ty.t-num{background:#12392a;color:#86efac;}
[data-theme="dark"] .drm-ty.t-int{background:#0c3346;color:#7dd3fc;} [data-theme="dark"] .drm-ty.t-fct{background:#3b1446;color:#f0abfc;}
.drm-more{color:var(--w-muted);font-weight:600;text-align:center;}
.drm-t tr.in td{animation:drmRow .45s cubic-bezier(.2,.7,.2,1) both;animation-delay:var(--d,0ms);}
@keyframes drmRow{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}
.drm-t tr.out td{animation:drmOut .35s ease both;animation-delay:var(--d,0ms);}
@keyframes drmOut{to{opacity:0;transform:translateX(-18px);}}
.drm-t tr.fold td{animation:drmFold .45s ease both;}
@keyframes drmFold{to{opacity:0;height:0;padding-top:0;padding-bottom:0;border-color:transparent;}}
.drm-t td.hl,.drm-t th.hl{background:color-mix(in srgb,var(--drm-c) 22%,transparent) !important;}
.drm-t td.hl2{background:color-mix(in srgb,var(--drm-a) 16%,transparent) !important;}
.drm-t th.typing::after{content:"";display:inline-block;width:1px;height:.9em;margin-left:1px;vertical-align:-2px;background:currentColor;animation:drmCaret .6s steps(1) infinite;}
@keyframes drmCaret{50%{opacity:0;}}
.drm-t td.pop{animation:drmPop .5s cubic-bezier(.2,.8,.2,1.3) both;animation-delay:var(--d,0ms);}
@keyframes drmPop{from{opacity:0;transform:scale(.6);}to{opacity:1;transform:none;}}
/* genotype cells */
.drm-t td.g{text-align:center;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:700;}
.drm-t td.g.flip{animation:drmFlip .5s ease both;animation-delay:var(--d,0ms);}
@keyframes drmFlip{0%{transform:rotateX(0);}50%{transform:rotateX(90deg);}100%{transform:rotateX(0);}}
.drm-t td.g.d0{background:#eef1ff !important;color:#3730a3;}
.drm-t td.g.d1{background:#a9b4fb !important;color:#1e1b4b;}
.drm-t td.g.d2{background:#4f46e5 !important;color:#fff;}
.drm-t td.g.dna{background:repeating-linear-gradient(135deg,#f1f1f6 0 5px,#e4e4ee 5px 10px) !important;color:#8a8aa3;}
[data-theme="dark"] .drm-t td.g.d0{background:#1e2250 !important;color:#c7d2fe;}
[data-theme="dark"] .drm-t td.g.dna{background:repeating-linear-gradient(135deg,#1a1d38 0 5px,#22254a 5px 10px) !important;}
/* scanning beam */
.drm-scan{position:absolute;left:0;right:0;top:0;height:64px;pointer-events:none;opacity:0;
  background:linear-gradient(180deg,transparent,rgba(3,201,190,.22) 70%,rgba(3,201,190,.55) 98%,transparent);}
.drm-scan.go{animation:drmScan 1.8s cubic-bezier(.5,0,.5,1) both;}
@keyframes drmScan{0%{opacity:0;transform:translateY(-64px);}10%{opacity:1;}90%{opacity:1;}100%{opacity:0;transform:translateY(380px);}}
.drm-empty{position:absolute;inset:0;display:grid;place-items:center;text-align:center;color:var(--w-muted);font-size:.8rem;transition:opacity .4s;}
.drm-empty [data-lucide]{width:1.8rem;height:1.8rem;display:block;margin:0 auto .5rem;color:color-mix(in srgb,var(--drm-a) 60%,var(--w-muted));}
.drm-empty.is-off{opacity:0;pointer-events:none;}

.drm-status{display:flex;align-items:center;gap:.9rem;padding:.45rem .8rem;border-top:1px solid var(--w-line);background:var(--w-rail);
  font-size:.68rem;color:var(--w-muted);font-variant-numeric:tabular-nums;min-height:31px;}
.drm-status b{color:var(--w-text);font-weight:800;}
.drm-st-undo{display:inline-flex;align-items:center;gap:.35rem;}
.drm-st-undo i{display:inline-block;width:7px;height:7px;border-radius:2px;background:var(--w-line);transition:background .3s;}
.drm-st-undo i.on{background:linear-gradient(135deg,var(--drm-a),var(--drm-c));}
.drm-st-msg{margin-left:auto;color:color-mix(in srgb,var(--drm-a) 75%,var(--w-text));font-weight:700;opacity:0;transform:translateY(4px);transition:opacity .35s,transform .35s;}
.drm-st-msg.on{opacity:1;transform:none;}

/* ---- insight tray (under the data view, like the app's result panels) ---- */
.drm-cards{position:relative;display:grid;transition:height .5s cubic-bezier(.2,.7,.2,1);grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;align-items:start;align-content:start;
  height:190px;padding:10px;overflow:hidden;overflow:clip;border-top:1px solid var(--w-line);
  background:linear-gradient(180deg,color-mix(in srgb,var(--drm-a) 5%,var(--w-rail)),var(--w-bg));}
.drm-card{padding:.8rem .95rem;border-radius:12px;color:var(--w-text);background:var(--w-bg);min-width:0;
  border:1px solid color-mix(in srgb,var(--drm-a) 20%,var(--w-line));box-shadow:0 10px 26px -14px rgba(23,16,74,.45);
  animation:drmCard .55s cubic-bezier(.2,.8,.2,1.1) both;}
.drm-card.wide{grid-column:1 / -1;}
@keyframes drmCard{from{opacity:0;transform:translateY(14px) scale(.97);}to{opacity:1;transform:none;}}
.drm-card h6{margin:0 0 .45rem;display:flex;align-items:center;gap:.4rem;font-family:var(--font-body);font-size:.6rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#6d3be8;}
[data-theme="dark"] .drm-card h6{color:#b79cff;}
.drm-card h6 [data-lucide]{width:.85rem;height:.85rem;}
.drm-card p{margin:0;font-size:.74rem;line-height:1.45;}
.drm-kv{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem;margin:.1rem 0 .5rem;}
.drm-kv div{font-size:.62rem;color:var(--w-muted);}
.drm-kv b{display:block;font-family:var(--font-display);font-weight:800;font-size:.95rem;color:inherit;}
.drm-card .drm-kv b{color:var(--w-text);}
.drm-hist{display:flex;align-items:flex-end;gap:3px;height:46px;}
.drm-hist i{flex:1;border-radius:3px 3px 0 0;background:linear-gradient(180deg,var(--drm-a),var(--drm-b));height:var(--h);
  transform-origin:bottom;animation:drmBar .6s cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--i) * 45ms + 200ms);}
@keyframes drmBar{from{transform:scaleY(0);}to{transform:none;}}
.drm-hist-ax{display:flex;justify-content:space-between;font-size:.58rem;color:var(--w-muted);margin-top:.2rem;}
.drm-list{list-style:none;margin:0;padding:0;display:grid;gap:.3rem;}
.drm-list li{display:flex;align-items:center;gap:.45rem;font-size:.74rem;animation:drmCard .45s ease both;animation-delay:calc(var(--i,0) * 110ms + 150ms);}
.drm-list li [data-lucide]{width:.85rem;height:.85rem;flex:none;color:#10b981;}
.drm-list li.st [data-lucide]{color:#8C52FF;}
.drm-list.g2{grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem .8rem;}
.drm-list li small{color:var(--w-muted);font-size:.66rem;}
.drm-list li em{margin-left:auto;font-style:normal;font-weight:800;font-family:var(--font-display);}
.drm-tok{display:flex;flex-wrap:wrap;gap:.35rem;}
.drm-tok span{padding:.28rem .55rem;border-radius:8px;font-size:.7rem;font-weight:800;font-family:var(--font-display);color:#fff;
  background:linear-gradient(135deg,var(--drm-a),var(--drm-b));animation:drmPop .45s cubic-bezier(.2,.8,.2,1.3) both;animation-delay:calc(var(--i) * 90ms + 150ms);}
.drm-tok.alt span{background:none;color:inherit;border:1px solid rgba(140,82,255,.35);font-weight:700;font-family:var(--font-body);}
.drm-seg{display:inline-flex;padding:3px;border-radius:999px;background:rgba(109,59,232,.1);margin-bottom:.55rem;}
.drm-seg span{padding:.22rem .6rem;border-radius:999px;font-size:.66rem;font-weight:700;color:var(--w-muted);transition:all .3s;}
.drm-seg span.on{background:var(--w-bg);color:var(--w-text);box-shadow:0 2px 6px rgba(0,0,0,.12);}

/* ---- the scrubber (chapters) ---- */
.drm-scrub{margin-top:clamp(12px,1.6vw,20px);display:grid;grid-template-columns:auto repeat(var(--n,6),minmax(0,1fr));gap:.5rem;align-items:stretch;}
.drm-play{width:46px;border-radius:14px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);color:#fff;cursor:pointer;display:grid;place-items:center;
  transition:background .25s;}
.drm-play:hover{background:rgba(255,255,255,.16);}
.drm-play [data-lucide]{width:1.05rem;height:1.05rem;}
.drm-step{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:.15rem;text-align:left;cursor:pointer;
  padding:.65rem .8rem .8rem;border-radius:14px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.62);
  overflow:hidden;transition:background .3s,color .3s,border-color .3s;}
.drm-step:hover{background:rgba(255,255,255,.08);color:#fff;}
.drm-step em{font-style:normal;font-family:var(--font-display);font-weight:800;font-size:.7rem;letter-spacing:.08em;color:rgba(255,255,255,.45);}
.drm-step b{font-family:var(--font-display);font-weight:800;font-size:.86rem;line-height:1.15;color:inherit;}
.drm-step.is-on{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.28);color:#fff;}
.drm-step.is-on em{color:var(--drm-c);}
.drm-step.is-done em{color:rgba(3,201,190,.8);}
.drm-step i.bar{position:absolute;left:0;bottom:0;height:3px;width:100%;background:linear-gradient(90deg,var(--drm-a),var(--drm-c));transform:scaleX(0);transform-origin:left;}
.drm-step.is-done i.bar{transform:scaleX(1);opacity:.45;}
.drm-step.is-on i.bar.run{animation:drmProg var(--dur,8000ms) linear forwards;}
.drm.is-held .drm-step.is-on i.bar.run{animation-play-state:paused;}
.drm:not(.is-playing) .drm-step.is-on i.bar{transform:scaleX(1);animation:none;}
@keyframes drmProg{from{transform:scaleX(0);}to{transform:scaleX(1);}}

/* ---- chapter detail (also the no-JS content) ---- */
.drm-chapters{list-style:none;margin:var(--space-6) 0 0;padding:0;display:grid;gap:var(--space-4);counter-reset:drm;}
.drm-chapters > li{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:var(--space-6);align-items:start;
  padding:var(--space-6);border-radius:var(--radius-2xl);background:var(--color-surface);border:1px solid var(--color-divider);}
.drm-chapters h3{margin:0 0 .4rem;font-family:var(--font-display);font-weight:800;font-size:var(--text-xl);letter-spacing:-.02em;display:flex;align-items:baseline;gap:.6rem;}
.drm-chapters h3 span{font-size:.8rem;letter-spacing:.08em;color:var(--color-primary);}
.drm-chapters p{margin:0;color:var(--color-text-muted);font-size:var(--text-sm);line-height:1.6;}
.drm-chapters .svc-chips{margin:0;padding:0;border:0;}
.drm-chapters .drm-src{margin-top:.6rem;font-size:var(--text-xs);color:var(--color-text-muted);}
.drm-chapters .drm-src b{color:var(--color-text);font-weight:700;}
.js .drm.is-ready .drm-chapters > li{display:none;}
.js .drm.is-ready .drm-chapters > li.is-on{display:grid;animation:gxUp .45s cubic-bezier(.2,.7,.2,1) both;}
.js .drm.is-ready .drm-chapters > li.is-on .svc-chips li{animation:gxChip .4s cubic-bezier(.2,.7,.2,1) both;animation-delay:calc(.12s + var(--i,0) * .045s);}
html:not(.js) .drm-stage{display:none;}
.drm:not(.is-ready) .drm-stage{visibility:hidden;}


/* ---- two walkthroughs: everyday data / big data & genotypes ---- */
.drm[data-mode="big"]{--n:4;}
.drm-specs[data-mode="big"],.drm-step[data-mode="big"]{display:none;}
.drm[data-mode="big"] .drm-specs[data-mode="std"],.drm[data-mode="big"] .drm-step[data-mode="std"]{display:none;}
.drm[data-mode="big"] .drm-specs[data-mode="big"]{display:flex;}
.drm[data-mode="big"] .drm-step[data-mode="big"]{display:flex;}
.drm-modes{display:flex;gap:.6rem;margin:0 0 clamp(12px,1.6vw,18px);}
.drm-mode{position:relative;flex:0 1 330px;min-width:0;display:flex;align-items:center;gap:.75rem;padding:.6rem 1rem .6rem .65rem;border-radius:16px;cursor:pointer;text-align:left;
  font:inherit;color:rgba(255,255,255,.72);background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.14);transition:background .3s,border-color .3s,color .3s,box-shadow .3s;}
.drm-mode:hover{background:rgba(255,255,255,.1);color:#fff;}
.drm-mode:focus-visible{outline:2px solid var(--drm-c);outline-offset:2px;}
.drm-mode > [data-lucide]{width:2.1rem;height:2.1rem;padding:.5rem;flex:none;border-radius:11px;color:#fff;background:rgba(255,255,255,.1);transition:background .3s;}
.drm-mode span{display:flex;flex-direction:column;min-width:0;}
.drm-mode b{font-family:var(--font-display);font-weight:800;font-size:.92rem;line-height:1.2;color:#fff;}
.drm-mode small{font-size:.7rem;color:rgba(255,255,255,.58);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.drm-mode.is-on{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.34);color:#fff;box-shadow:0 12px 30px -14px rgba(0,0,0,.6);}
.drm-mode.is-on > [data-lucide]{background:linear-gradient(135deg,var(--drm-a),var(--drm-b));}
.drm-mode[data-mode="big"].is-on > [data-lucide]{background:linear-gradient(135deg,var(--drm-c),var(--drm-b));}
.drm:not(.seen-big) .drm-mode[data-mode="big"]{border-color:rgba(3,201,190,.55);}
.drm:not(.seen-big) .drm-mode[data-mode="big"]::after{content:"";position:absolute;inset:-4px;border-radius:19px;border:2px solid rgba(3,201,190,.5);pointer-events:none;animation:drmCall 2.2s ease-out infinite;}
@keyframes drmCall{0%{opacity:.9;transform:scale(.98);}70%,100%{opacity:0;transform:scale(1.04);}}

/* data-view panes: stored-matrix notice, Matrix Preview text */
.drm-pane{position:absolute;inset:0;display:flex;flex-direction:column;background:var(--w-bg);opacity:0;pointer-events:none;transition:opacity .45s ease;}
.drm-pane.on{opacity:1;}
.drm-pane-t{padding:1.35rem .6rem .5rem;font-weight:700;font-size:.7rem;background:var(--w-head);border-bottom:1px solid var(--w-line);}
.drm-pane-m{padding:0 .6rem;height:31px;line-height:31px;border-bottom:1px solid var(--w-line);font-size:.74rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.drm-pane-in{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.3rem;text-align:center;padding:0 1rem;}
.drm-pane-n{font-family:var(--font-display);font-weight:800;font-size:clamp(1.7rem,3.4vw,2.7rem);letter-spacing:-.03em;line-height:1.05;animation:drmPop .6s cubic-bezier(.2,.8,.2,1.2) both;}
.drm-pane-n b{background:linear-gradient(135deg,var(--drm-a),var(--drm-b) 55%,var(--drm-c));-webkit-background-clip:text;background-clip:text;color:transparent;}
.drm-pane-n i{font-style:normal;font-weight:600;margin:0 .25em;color:var(--w-muted);}
.drm-pane-in p{margin:0;font-size:.74rem;color:var(--w-muted);}
.drm-pre{margin:0;padding:.8rem 1rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;line-height:1.75;white-space:pre;overflow:hidden;color:var(--w-muted);}
.drm-pre b{font-weight:700;color:var(--w-text);}
.drm-pre .hl{display:inline-block;border-radius:4px;background:color-mix(in srgb,var(--drm-c) 20%,transparent);animation:drmFlash 1.2s ease;}

/* Big Data > Preview: the real first 20 x 20, transposed in place */
.drm-mx{--s:11px;position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:.6rem .8rem;background:var(--w-bg);opacity:0;pointer-events:none;transition:opacity .45s ease;}
.drm-mx.on{opacity:1;}
.drm-mx-cap{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;justify-content:center;font-size:.64rem;color:var(--w-muted);}
.drm-mx-cap b{color:var(--w-text);font-size:.7rem;}
.drm-mx-ax{padding:.1rem .45rem;border-radius:6px;background:color-mix(in srgb,var(--drm-a) 10%,transparent);color:color-mix(in srgb,var(--drm-a) 70%,var(--w-text));font-weight:700;}
.drm-mx-leg{display:inline-flex;align-items:center;gap:.2rem;}
.drm-mx-leg i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-left:.3rem;}
.drm-mx-body{display:flex;align-items:flex-start;gap:.55rem;}
.drm-mx-lab{display:flex;flex-direction:column;align-items:flex-end;}
.drm-mx-lab span{height:var(--s);line-height:var(--s);font-size:.5rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--w-muted);white-space:nowrap;
  animation:drmCard .4s ease both;animation-delay:calc(var(--i) * 18ms);}
.drm-mx-cells{position:relative;flex:none;width:calc(var(--s) * 20);height:calc(var(--s) * 20);}
.drm-mx-cells i{position:absolute;left:0;top:0;width:calc(var(--s) - 1px);height:calc(var(--s) - 1px);border-radius:2px;
  transform:translate(calc(var(--c) * var(--s)),calc(var(--r) * var(--s)));
  transition:transform .95s cubic-bezier(.65,0,.25,1);transition-delay:calc((var(--r) + var(--c)) * 14ms);}
.drm-mx.is-t .drm-mx-cells i{transform:translate(calc(var(--r) * var(--s)),calc(var(--c) * var(--s)));}
.drm-mx .v0{background:#eef1ff;} .drm-mx .v1{background:#a9b4fb;} .drm-mx .v2{background:#4f46e5;}
.drm-mx .v0{box-shadow:inset 0 0 0 1px #dfe3fb;}
[data-theme="dark"] .drm-mx .v0{background:#1e2250;box-shadow:none;}

/* the figure (true colours on white), over the data view; timings beside it */
.drm-fig{position:absolute;left:0;right:0;top:0;bottom:32px;z-index:1;margin:0;background:#fff;opacity:0;transform:scale(.985);pointer-events:none;
  transition:opacity .6s ease,transform .6s cubic-bezier(.2,.7,.2,1),right .5s ease;}
.drm-fig.on{opacity:1;transform:none;}
.drm-fig img{position:absolute;left:.6rem;top:.6rem;display:block;width:calc(100% - 1.2rem);height:calc(100% - 1.2rem);object-fit:contain;transition:opacity .7s ease;}
.drm-fig img.f2,.drm-fig.is-2 img.f1{opacity:0;}
.drm-fig.is-2 img.f2{opacity:1;}
@media (min-width:761px){
  .drm.is-fig .drm-fig{right:280px;}
  .drm.is-fig .drm-cards{position:absolute;z-index:2;top:0;right:0;bottom:32px;width:280px;height:auto;grid-template-columns:1fr;align-content:center;
    border-top:0;border-left:1px solid var(--w-line);}
  .drm.is-fig .drm-time{flex-direction:column;gap:6px;margin-top:.4rem;}
  .drm.is-fig .drm-time span{position:relative;z-index:0;flex:none;flex-direction:row;align-items:baseline;gap:.5rem;padding:.4rem .6rem;border-top:0;border-left:3px solid var(--drm-b);background:none;}
  .drm.is-fig .drm-time span::before{content:"";position:absolute;z-index:-1;left:0;top:0;bottom:0;width:calc(var(--w) * 100%);border-radius:0 8px 8px 0;
    background:color-mix(in srgb,var(--drm-a) 12%,transparent);transform-origin:left;animation:drmProg .7s cubic-bezier(.2,.7,.2,1) both;animation-delay:calc(var(--i) * 160ms + 250ms);}
  .drm.is-fig .drm-time span:nth-child(2){border-left-color:var(--drm-a);} .drm.is-fig .drm-time span:nth-child(3){border-left-color:var(--drm-c);}
  .drm.is-fig .drm-time span.tot{border-left:0;border-radius:8px;justify-content:space-between;color:#fff;background:linear-gradient(135deg,var(--drm-a),var(--drm-b));}
  .drm.is-fig .drm-time span.tot::before{display:none;}
}

/* card parts used by the big-data chapters */
.drm-kv.k2{grid-template-columns:repeat(2,minmax(0,1fr));gap:.3rem .6rem;}
.drm-fl{display:flex;align-items:center;gap:.45rem;min-width:0;padding:.4rem .55rem;border-radius:9px;font-size:.72rem;background:var(--w-rail);
  border:1px dashed color-mix(in srgb,var(--drm-a) 40%,var(--w-line));}
.drm-fl [data-lucide]{width:.9rem;height:.9rem;flex:none;color:var(--drm-a);}
.drm-fl b{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.7rem;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.drm-fl span{margin-left:auto;flex:none;color:var(--w-muted);font-size:.66rem;}
.drm-row{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin:.5rem 0 .25rem;}
.drm-badge{display:inline-flex;align-items:center;gap:.3rem;padding:.24rem .55rem;border-radius:8px;font-size:.66rem;font-weight:700;
  background:color-mix(in srgb,var(--drm-c) 14%,transparent);color:color-mix(in srgb,var(--drm-c) 45%,var(--w-text));}
.drm-sel{padding:.22rem .55rem;border-radius:8px;border:1px solid var(--w-line);font-size:.66rem;color:var(--w-muted);}
.drm-sel b{color:var(--w-text);}
.drm-btn{margin-left:auto;display:inline-flex;align-items:center;gap:.35rem;padding:.34rem .8rem;border-radius:999px;font-size:.68rem;font-weight:800;color:#fff;
  background:linear-gradient(135deg,var(--drm-a),var(--drm-b));box-shadow:0 6px 16px -6px rgba(61,83,224,.6);}
.drm-btn [data-lucide],.drm-badge [data-lucide]{width:.8rem;height:.8rem;}
.drm-bdg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;}
.drm-bdg.c4{grid-template-columns:repeat(4,minmax(0,1fr));}
.drm-bdg span{padding:.3rem .3rem;border-radius:7px;font-size:.6rem;font-weight:700;text-align:center;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  background:linear-gradient(135deg,hsl(calc(262 - var(--i) * 6) 72% 60%),hsl(calc(232 - var(--i) * 6) 68% 50%));
  animation:drmPop .4s cubic-bezier(.2,.8,.2,1.3) both;animation-delay:calc(var(--i) * 50ms + 100ms);}
.drm-bdg.c4 span{font-size:.64rem;padding:.4rem .3rem;background:var(--w-rail);color:var(--w-text);border:1px solid var(--w-line);}
.drm-bdg.c4 span[data-b="Big Data"]{color:#fff;border-color:transparent;background:linear-gradient(135deg,var(--drm-c),var(--drm-b));}
.is-press{animation:drmPress .55s ease both !important;}
@keyframes drmPress{30%{transform:scale(.9);box-shadow:0 0 0 6px rgba(3,201,190,.35);}100%{transform:none;box-shadow:0 0 0 0 rgba(3,201,190,0);}}
.drm-spin{display:flex;align-items:center;gap:.7rem;font-size:.72rem;line-height:1.45;}
.drm-spin > i{flex:none;width:24px;height:24px;border-radius:50%;border:3px solid color-mix(in srgb,var(--drm-c) 22%,transparent);border-top-color:var(--drm-c);animation:drmSpin .8s linear infinite;}
.drm-spin small{color:var(--w-muted);}
.drm-prog{height:5px;margin-top:.6rem;border-radius:99px;background:var(--w-line);overflow:hidden;}
.drm-prog i{display:block;height:100%;background:linear-gradient(90deg,var(--drm-a),var(--drm-c));transform:scaleX(0);transform-origin:left;animation:drmProg var(--dur,1500ms) cubic-bezier(.3,.1,.3,1) forwards;}
.drm-big{display:flex;align-items:baseline;gap:.2rem;margin:.05rem 0 .2rem;}
.drm-big b{font-family:var(--font-display);font-weight:800;font-size:2.1rem;line-height:1;letter-spacing:-.03em;
  background:linear-gradient(135deg,var(--drm-a),var(--drm-c));-webkit-background-clip:text;background-clip:text;color:transparent;}
.drm-big span{font-weight:800;color:var(--w-muted);}
.drm-big.sm b{font-size:1.55rem;}
.drm-note{margin-top:.35rem !important;color:var(--w-muted);}
.drm-field{display:flex;justify-content:space-between;gap:.6rem;padding:.3rem 0;border-bottom:1px dashed var(--w-line);font-size:.72rem;}
.drm-field span{color:var(--w-muted);}
.drm-field b{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;}
.drm-num.typing::after{content:"";display:inline-block;width:1px;height:.9em;margin-left:1px;vertical-align:-2px;background:currentColor;animation:drmCaret .6s steps(1) infinite;}
.drm-time{display:flex;gap:4px;margin-top:.15rem;}
.drm-time span{flex:var(--w) 1 0;min-width:0;display:flex;flex-direction:column;gap:.05rem;padding:.3rem .5rem .35rem;border-radius:8px;border-top:3px solid var(--drm-b);
  font-size:.6rem;color:var(--w-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:color-mix(in srgb,var(--drm-a) 8%,transparent);
  animation:drmCard .45s ease both;animation-delay:calc(var(--i) * 160ms + 100ms);}
.drm-time span:nth-child(2){border-top-color:var(--drm-a);} .drm-time span:nth-child(3){border-top-color:var(--drm-c);}
.drm-time b{font-family:var(--font-display);font-weight:800;font-size:.84rem;color:var(--w-text);}
.drm-time span.tot{flex:0 0 auto;border-top-color:transparent;color:#fff;background:linear-gradient(135deg,var(--drm-a),var(--drm-b));}
.drm-time span.tot b{color:#fff;}
.drm-chunks{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:3px;margin:.45rem 0 .35rem;}
.drm-chunks i{position:relative;height:10px;border-radius:3px;background:var(--w-line);overflow:hidden;}
.drm-chunks i::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,var(--drm-a),var(--drm-c));transform:scaleX(0);transform-origin:left;
  animation:drmProg .26s linear forwards;animation-delay:calc(var(--i) * 290ms + 200ms);}
/* big-data chapters: headline + "measured on the example file" tiles across the top */
.drm-chapters > li.drm-ch-big{row-gap:var(--space-5);}
.drm-ch-head{grid-column:1 / -1;display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:var(--space-6);align-items:center;
  padding-bottom:var(--space-5);border-bottom:1px solid var(--color-divider);}
.drm-chapters .drm-ch-head h3{margin:0;font-size:clamp(1.45rem,2.5vw,2rem);line-height:1.12;letter-spacing:-.03em;display:block;}
.drm-chapters .drm-ch-head h3 span{display:block;margin-bottom:.45rem;font-size:.78rem;letter-spacing:.14em;}
.drm-wow{min-width:0;}
.drm-wow-k{display:flex;align-items:center;gap:.35rem;margin:0 0 .55rem !important;font-size:.66rem !important;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--color-primary) !important;}
.drm-wow-k [data-lucide]{width:.85rem;height:.85rem;}
.drm-wow ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.6rem;}
.drm-wow li{position:relative;display:flex;flex-direction:column;gap:.2rem;min-width:0;padding:.85rem .9rem .8rem;border-radius:var(--radius-lg);
  background:color-mix(in srgb, var(--color-primary) 5%, var(--color-surface));border:1px solid color-mix(in srgb, var(--color-primary) 16%, var(--color-divider));}
.drm-wow b{font-family:var(--font-display);font-weight:800;font-size:clamp(1.1rem,1.65vw,1.45rem);line-height:1.05;letter-spacing:-.03em;white-space:nowrap;
  color:var(--color-text);font-variant-numeric:tabular-nums;}
.drm-wow b i{font-style:normal;}
.drm-wow ul.w1{grid-template-columns:max-content repeat(3,minmax(0,1fr));}
.drm-wow li span{font-size:.72rem;line-height:1.3;color:var(--color-text-muted);}
.drm-wow li.is-key{border-color:transparent;background:linear-gradient(135deg,#6D3BE8,#3D53E0 60%,#0E9C95);
  box-shadow:0 14px 30px -14px color-mix(in srgb, #3D53E0 70%, transparent);}
.drm-wow li.is-key b,.drm-wow li.is-key span{color:#fff;}
.drm-wow li.is-key span{opacity:.85;}
.js .drm.is-ready .drm-chapters > li.is-on .drm-wow li{animation:gxUp .5s cubic-bezier(.2,.7,.2,1) both;}
.js .drm.is-ready .drm-chapters > li.is-on .drm-wow li:nth-child(2){animation-delay:.07s;}
.js .drm.is-ready .drm-chapters > li.is-on .drm-wow li:nth-child(3){animation-delay:.14s;}
.js .drm.is-ready .drm-chapters > li.is-on .drm-wow li:nth-child(4){animation-delay:.21s;}
@media (max-width:1079px){
  .drm-ch-head{grid-template-columns:1fr;gap:var(--space-4);}
}
@media (max-width:620px){
  .drm-wow ul,.drm-wow ul.w1{grid-template-columns:repeat(2,minmax(0,1fr));}
  .drm-wow ul.w1 li:first-child,.drm-wow ul.w1 li.is-key{grid-column:1 / -1;}
  .drm-wow b{font-size:1.25rem;}
}
.drm-ch-sep{display:none;}
html:not(.js) .drm-ch-sep{display:block;padding:var(--space-4) 0 0;background:none;border:0;}
html:not(.js) .drm-ch-sep h3{margin:0;font-family:var(--font-display);font-weight:800;font-size:var(--text-2xl);}
.drm-fine{margin:var(--space-4) 0 0;font-size:var(--text-xs);color:var(--color-text-muted);line-height:1.6;}

@media (max-width:1079px){
  .drm-body{grid-template-columns:150px minmax(0,1fr);}
  .drm-right{display:none;}
  .drm-step b{font-size:.78rem;}
  .drm-chapters > li{grid-template-columns:1fr;gap:var(--space-4);}
}
@media (max-width:760px){
  .drm-stage{border-radius:22px;}
  .drm-top{display:none;}
  .drm-body{grid-template-columns:1fr;height:auto;}
  .drm-left{display:none;}
  .drm-strip{display:flex;gap:.35rem;flex-wrap:wrap;min-height:40px;align-items:center;padding:.5rem .6rem;border-bottom:1px solid var(--w-line);background:var(--w-rail);}
  .drm-strip span{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .6rem;border-radius:999px;font-size:.68rem;font-weight:700;color:#fff;
    background:linear-gradient(135deg,var(--drm-a),var(--drm-b));animation:drmPop .4s ease both;}
  .drm-strip span [data-lucide]{width:.8rem;height:.8rem;}
  .drm-grid{height:267px;flex:none;}
  .drm-t .xs-hide{display:none;}
  .drm-cards{grid-template-columns:1fr;height:212px;padding:.6rem;}
  .drm-list.g2{grid-template-columns:1fr 1fr;}
  .drm-file{max-width:60%;}
  .drm-title{display:none;}
  .drm-status{gap:.6rem;white-space:nowrap;font-size:.64rem;padding:.4rem .6rem;}
  .drm-st-msg{display:none;}
  .drm-st-undo i{width:5px;height:5px;}
  .drm-scrub{gap:.35rem;}
  .drm-step{padding:.55rem .4rem .7rem;align-items:center;}
  .drm-step b{display:none;}
  .drm-play{width:40px;}
  .drm-chapters > li{padding:var(--space-5);}
  .drm-modes{gap:.4rem;}
  .drm-mode{flex:1 1 0;gap:.5rem;padding:.5rem .6rem .5rem .5rem;border-radius:14px;}
  .drm-mode > [data-lucide]{width:1.8rem;height:1.8rem;padding:.42rem;}
  .drm-mode b{font-size:.78rem;}
  .drm-mode small{display:none;}
  .drm.is-fig .drm-fig{top:41px;bottom:164px;}
  .drm.is-fig .drm-cards{height:132px;}
  .drm.is-fig .drm-grid{height:347px;}
  .drm[data-mode="big"] .drm-st-undo{display:none;}
  .drm-pre{font-size:.62rem;padding:.6rem .7rem;}
  .drm-pane-m{font-size:.66rem;}
  .drm-time span{padding:.28rem .4rem;font-size:.56rem;}
  .drm-time b{font-size:.74rem;}
}
@media (prefers-reduced-motion:reduce){
  .drm-stage::after,.drm-dot{animation:none;}
  .drm *{animation-duration:.001ms !important;animation-delay:0ms !important;transition-duration:.001ms !important;}
}
/* per-view rails: Data Preview (dp), Genomics Heatmaps (gh), Genotype Conversion (gc) */
.drm-grp{display:contents;}
.drm-grp[data-view="gh"],.drm-grp[data-view="gc"]{display:none;}
.drm[data-view="gh"] .drm-grp[data-view="dp"],.drm[data-view="gc"] .drm-grp[data-view="dp"]{display:none;}
.drm[data-view="gh"] .drm-grp[data-view="gh"],.drm[data-view="gc"] .drm-grp[data-view="gc"]{display:contents;}
.drm-grp > h5:first-child{margin-top:.35rem;}
.drm-left .drm-grp[data-view] .drm-it{white-space:nowrap;}
.drm-grp[data-view="gh"] .drm-it,.drm-grp[data-view="gc"] .drm-it{font-size:.72rem;}


/* =====================================================================
   DATAVIZ PRO - PRECISION A TO Z (#control)
   A. Tour: five plots (Box Plot, Circos, HaploView, Clustering Heatmap,
      PCA) each taken from one click to a finished figure, panel by panel.
   B. Maths console: equations typed into annotations on six modules.
   Every figure is real app output.
   JS: assets/js/control.js   Data: <script id="ctlData">
   ===================================================================== */
#control .sec-head h2 .grad,#control .ctl-h .grad{background:linear-gradient(100deg,var(--color-primary),var(--color-indigo) 50%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.ctl-stats{margin:var(--space-8) 0 0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-4);}
.ctl-stats > div{position:relative;overflow:hidden;padding:var(--space-5) var(--space-6);border-radius:var(--radius-2xl);
  background:var(--color-surface);border:1px solid var(--color-divider);}
.ctl-stats > div::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:linear-gradient(90deg,#8C52FF,#3D53E0,#03C9BE);transform:scaleX(.18);transform-origin:left;transition:transform 1.2s cubic-bezier(.2,.7,.2,1);}
.ctl-stats.in > div::after{transform:scaleX(1);}
.ctl-stats dt{font-size:var(--text-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);}
.ctl-stats dd{margin:.35rem 0 .2rem;font-family:var(--font-display);font-weight:800;font-size:clamp(2rem,1.5rem + 1.4vw,2.9rem);line-height:1;
  background:linear-gradient(140deg,var(--color-primary),var(--color-indigo) 60%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;font-variant-numeric:tabular-nums;}
.ctl-stats dd .u{font-size:.42em;letter-spacing:.02em;margin-right:.25em;vertical-align:.12em;}
.ctl-stats small{display:block;font-size:var(--text-xs);color:var(--color-text-muted);line-height:1.4;}

.ctl-kick{display:inline-flex;align-items:center;gap:.5rem;font-size:var(--text-xs);font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--color-primary);}
.ctl-kick [data-lucide]{width:1rem;height:1rem;}
.ctl-h{margin:var(--space-3) 0 var(--space-2);font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;font-size:var(--text-2xl);line-height:1.1;}
.ctl-p{margin:0;color:var(--color-text-muted);max-width:68ch;}

/* ---------- A. build: one plot, nine panels ---------- */
.cb{margin-top:var(--space-12);position:relative;padding:clamp(var(--space-6),3vw,var(--space-10));border-radius:28px;overflow:hidden;overflow:clip;isolation:isolate;
  background:radial-gradient(50% 60% at 0% 0%,color-mix(in srgb,#8C52FF 14%,transparent),transparent 70%),
             radial-gradient(40% 50% at 100% 100%,color-mix(in srgb,#03C9BE 14%,transparent),transparent 70%),
             var(--color-surface);border:1px solid var(--color-divider);}
.cb-top{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:var(--space-6);margin-bottom:var(--space-6);}
.cb-count span{display:block;max-width:16ch;margin-left:auto;}
.cb-count{text-align:right;}
.cb-count b{display:block;font-family:var(--font-display);font-weight:800;font-size:clamp(2.6rem,2rem + 2vw,3.8rem);line-height:.95;font-variant-numeric:tabular-nums;
  background:linear-gradient(140deg,#8C52FF,#3D53E0 55%,#03C9BE);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.cb-count span{font-size:var(--text-xs);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--color-text-muted);}
/* tour: plot tabs with story-style progress, and the play button */
.cb-tour{display:flex;align-items:stretch;gap:.5rem;margin:0 0 var(--space-6);}
.cb-plots{flex:1;min-width:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.5rem;}
.cb-plot{position:relative;display:flex;align-items:center;gap:.6rem;min-width:0;padding:.6rem .7rem .85rem;border-radius:14px;border:1px solid var(--color-divider);
  background:var(--color-surface);color:var(--color-text);text-align:left;cursor:pointer;overflow:hidden;transition:background .35s,border-color .35s,box-shadow .35s,transform .35s;}
.cb-plot:hover{border-color:color-mix(in srgb,#8C52FF 40%,var(--color-divider));transform:translateY(-1px);}
.cb-plot .ic{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--color-primary) 10%,transparent);color:var(--color-primary);}
.cb-plot .ic [data-lucide],.cb-plot .ic svg{width:1.05rem;height:1.05rem;}
.cb-plot .tx{min-width:0;}
.cb-plot b{display:block;font-family:var(--font-display);font-weight:800;font-size:.9rem;line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cb-plot small{display:block;margin-top:.15rem;font-size:.62rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cb-plot .bar{position:absolute;left:10px;right:10px;bottom:6px;height:3px;border-radius:3px;background:color-mix(in srgb,var(--color-text) 8%,transparent);overflow:hidden;}
.cb-plot .bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,#8C52FF,#03C9BE);}
.cb-plot.is-on{border-color:transparent;background:linear-gradient(150deg,#1B1046,#3A1C96 60%,#07535B);color:#fff;box-shadow:0 16px 32px -18px rgba(58,28,150,.75);}
.cb-plot.is-on small{color:rgba(255,255,255,.7);}
.cb-plot.is-on .ic{background:rgba(255,255,255,.14);color:#7ef3e9;}
.cb-plot.is-on .bar{background:rgba(255,255,255,.18);}
.cb-more{flex:none;display:flex;align-items:center;gap:.55rem;width:170px;padding:.6rem .7rem;border-radius:14px;border:1px dashed color-mix(in srgb,#8C52FF 45%,var(--color-divider));
  background:color-mix(in srgb,var(--color-primary) 5%,var(--color-surface));color:var(--color-text);text-decoration:none;transition:border-color .3s,transform .3s,background .3s;}
.cb-more:hover{transform:translateY(-1px);border-style:solid;background:color-mix(in srgb,var(--color-primary) 9%,var(--color-surface));}
.cb-more .ic{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:linear-gradient(135deg,#8C52FF,#3D53E0);color:#fff;}
.cb-more .ic svg,.cb-more .ic [data-lucide]{width:1.05rem;height:1.05rem;}
.cb-more b{display:block;font-family:var(--font-display);font-weight:800;font-size:.9rem;line-height:1.1;}
.cb-more small{display:block;margin-top:.15rem;font-size:.62rem;font-weight:700;letter-spacing:.04em;color:var(--color-text-muted);}
.cb-play{flex:none;width:56px;display:grid;place-items:center;gap:.1rem;padding:.4rem 0;border-radius:14px;border:1px solid var(--color-divider);background:var(--color-surface);
  color:var(--color-text);cursor:pointer;font-size:.6rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;transition:border-color .3s,background .3s;}
.cb-play:hover{border-color:color-mix(in srgb,#8C52FF 45%,var(--color-divider));}
.cb-play svg,.cb-play [data-lucide]{width:1.15rem;height:1.15rem;}
.cb-play .p-play{display:none;}
.cb-play[aria-pressed="false"] .p-pause{display:none;}
.cb-play[aria-pressed="false"] .p-play{display:grid;place-items:center;}
.cb-play .p-pause{display:grid;place-items:center;}
.cb-play .p-lab{display:block;}
.cb-sample{margin:var(--space-2) 0 0;font-size:.72rem;color:var(--color-text-muted);}
.cb-sample b{color:var(--color-text);font-weight:700;}
.cb-main{display:grid;grid-template-columns:minmax(250px,.78fr) minmax(0,2.2fr);gap:clamp(var(--space-5),2.4vw,var(--space-8));align-items:start;}
.cb-steps{list-style:none;margin:0;padding:0;position:relative;display:grid;gap:4px;}
.cb-steps::before{content:"";position:absolute;left:19px;top:14px;bottom:14px;width:2px;background:var(--color-divider);}
.cb-steps::after{content:"";position:absolute;left:19px;top:14px;width:2px;height:calc((100% - 28px) * var(--prog,0));background:linear-gradient(180deg,#8C52FF,#03C9BE);transition:height .6s cubic-bezier(.2,.7,.2,1);}
.cb-step{position:relative;z-index:1;display:grid;grid-template-columns:40px 1fr;gap:.6rem;align-items:center;width:100%;padding:.45rem .6rem .45rem 0;
  border:0;background:none;border-radius:12px;text-align:left;cursor:pointer;color:var(--color-text);transition:background var(--transition);}
.cb-step:hover{background:color-mix(in srgb,var(--color-primary) 6%,transparent);}
.cb-dot{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--color-surface);border:2px solid var(--color-divider);color:var(--color-text-muted);
  transition:all .35s ease;}
.cb-dot [data-lucide]{width:1rem;height:1rem;}
.cb-step b{display:block;font-family:var(--font-display);font-weight:800;font-size:.92rem;line-height:1.15;}
.cb-step i.pn{display:block;font-style:normal;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-muted);margin-top:.1rem;}
.cb-step.is-done .cb-dot{border-color:color-mix(in srgb,#8C52FF 45%,var(--color-divider));color:#8C52FF;}
.cb-step.is-on .cb-dot{border-color:transparent;color:#fff;background:linear-gradient(135deg,#8C52FF,#3D53E0);box-shadow:0 8px 20px -6px rgba(61,83,224,.6),0 0 0 5px color-mix(in srgb,#8C52FF 16%,transparent);}
.cb-step.is-on b{color:var(--color-text);}
.cb-stage{min-width:0;}
.cb-frame{position:relative;aspect-ratio:4/3;border-radius:18px;overflow:hidden;background:#fff;border:1px solid var(--color-divider);
  box-shadow:0 30px 60px -28px rgba(23,16,74,.45);}
.cb-frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:44px 12px 12px;box-sizing:border-box;transition:opacity .55s ease,transform .8s cubic-bezier(.2,.7,.2,1);}
.cb-frame img.off{opacity:0;transform:scale(1.015);}
.cb-badge{position:absolute;left:14px;top:12px;z-index:2;display:inline-flex;align-items:center;gap:.45rem;padding:.32rem .7rem;border-radius:999px;
  background:rgba(15,23,42,.82);color:#fff;font-size:.7rem;font-weight:700;letter-spacing:.04em;}
.cb-badge em{font-style:normal;color:#7ef3e9;font-family:var(--font-display);font-weight:800;}
.cb-desc{margin:var(--space-4) 0 var(--space-3);font-size:var(--text-sm);color:var(--color-text-muted);min-height:2.9em;}
.cb-desc b{color:var(--color-text);}
/* ---------- B. maths console ---------- */
.mx{margin-top:var(--space-10);}
.mx-stage{position:relative;margin-top:var(--space-6);border-radius:28px;overflow:hidden;overflow:clip;isolation:isolate;padding:clamp(14px,2.2vw,28px);color:#fff;
  background:radial-gradient(55% 60% at 100% 0%,rgba(3,201,190,.32),transparent 70%),radial-gradient(50% 60% at 0% 100%,rgba(140,82,255,.4),transparent 70%),
             linear-gradient(160deg,#07122E 0%,#101544 55%,#062B38 100%);box-shadow:0 40px 90px -30px rgba(7,18,46,.6);}
.mx-stage::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.35;pointer-events:none;
  background-image:linear-gradient(rgba(255,255,255,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px);background-size:28px 28px;
  -webkit-mask-image:radial-gradient(75% 75% at 50% 50%,#000,transparent);mask-image:radial-gradient(75% 75% at 50% 50%,#000,transparent);}
.mx-grid{display:grid;grid-template-columns:minmax(300px,.95fr) minmax(0,1.55fr);gap:clamp(14px,2vw,24px);align-items:stretch;}
.mx-panel{display:flex;flex-direction:column;border-radius:18px;padding:1rem 1.1rem;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);backdrop-filter:blur(8px);}
.mx-ph{display:flex;align-items:center;gap:.5rem;margin-bottom:.8rem;font-size:.66rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.62);}
.mx-ph [data-lucide]{width:.95rem;height:.95rem;color:#7ef3e9;}
.mx-ph .mod{color:#fff;letter-spacing:.08em;}
.mx-ph b{margin-left:auto;color:#7ef3e9;font-family:var(--font-display);letter-spacing:.06em;}
.mx-field{margin-bottom:.7rem;}
.mx-field label{display:block;font-size:.66rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:rgba(255,255,255,.55);margin-bottom:.3rem;}
.mx-in{position:relative;min-height:3.2em;padding:.65rem .75rem;border-radius:12px;background:#050a1f;border:1px solid rgba(126,243,233,.22);
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem;line-height:1.5;color:#e6e8ff;word-break:break-word;white-space:pre-wrap;}
.mx-in.is-typing{border-color:rgba(126,243,233,.6);box-shadow:0 0 0 3px rgba(3,201,190,.15);}
.mx-in .caret{display:inline-block;width:2px;height:1.05em;vertical-align:-2px;background:#7ef3e9;margin-left:1px;animation:mxCaret .8s steps(1) infinite;}
@keyframes mxCaret{50%{opacity:0;}}
.mx-in .g{color:#c4a8ff;} .mx-in .f{color:#7fb6ff;} .mx-in .o{color:#6ff0e4;} .mx-in .s{color:#ffd28a;} .mx-in .n{color:#ffb4a2;}
.mx-props{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.4rem;margin:auto 0 .9rem;padding-top:.9rem;}
.mx-props div{padding:.4rem .5rem;border-radius:9px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);font-size:.64rem;color:rgba(255,255,255,.55);}
.mx-props b{display:block;color:#fff;font-size:.74rem;font-weight:700;}
.mx-props i.sw{display:inline-block;width:.8rem;height:.8rem;border-radius:3px;background:#1a1a1a;border:1px solid rgba(255,255,255,.4);vertical-align:-2px;}
.mx-apply{margin-top:0;display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.65rem 1rem;border-radius:12px;border:0;
  background:linear-gradient(135deg,#8C52FF,#3D53E0);color:#fff;font-family:var(--font-display);font-weight:800;font-size:.85rem;cursor:default;transition:transform .2s,box-shadow .2s;}
.mx-apply [data-lucide]{width:1rem;height:1rem;}
.mx-apply.go{animation:mxPress .6s ease;}
@keyframes mxPress{30%{transform:scale(.95);box-shadow:0 0 0 8px rgba(140,82,255,.3);}}
.mx-note{margin:.7rem 0 0;font-size:.72rem;color:rgba(255,255,255,.62);min-height:2.4em;}
.mx-fig{position:relative;border-radius:18px;overflow:hidden;background:#fff;aspect-ratio:4/3;box-shadow:0 26px 60px -24px rgba(0,0,0,.6);}
.mx-fig img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;transition:opacity .5s ease;}
.mx-fig img.off{opacity:0;}
.mx-hl{position:absolute;border-radius:10px;border:2px solid #03C9BE;background:rgba(3,201,190,.10);box-shadow:0 0 0 6px rgba(3,201,190,.12);
  pointer-events:none;animation:mxHl 2.2s ease both;}
@keyframes mxHl{0%{opacity:0;transform:scale(1.08);}15%{opacity:1;transform:none;}75%{opacity:1;}100%{opacity:0;}}
.mx-steps{display:flex;gap:.4rem;margin-top:clamp(12px,1.6vw,18px);}
.mx-steps button{flex:1;min-width:0;padding:.5rem .6rem .6rem;border-radius:11px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.05);color:rgba(255,255,255,.66);
  font-family:var(--font-display);font-size:.8rem;font-weight:800;line-height:1.1;cursor:pointer;position:relative;overflow:hidden;text-align:left;}
.mx-steps button small{display:block;margin-top:.15rem;font-family:var(--font-body);font-size:.6rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:rgba(255,255,255,.45);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mx-steps button.is-on{color:#fff;border-color:rgba(255,255,255,.3);background:rgba(255,255,255,.12);}
.mx-steps button.is-on small{color:#7ef3e9;}
.mx-steps button i{position:absolute;left:0;bottom:0;height:2px;width:100%;background:linear-gradient(90deg,#8C52FF,#03C9BE);transform:scaleX(0);transform-origin:left;}
.mx-steps button.is-done i{transform:scaleX(1);opacity:.5;}
.mx-steps button.is-on i{animation:drmProg var(--dur,5000ms) linear forwards;}
.mx-foot{margin:var(--space-4) 0 0;font-size:var(--text-sm);color:var(--color-text-muted);max-width:80ch;}
.mx-foot b{color:var(--color-text);}

html.js .cb-nojs{display:none;}
.cb-nojs{margin:var(--space-5) 0 0;padding-left:1.1rem;font-size:var(--text-sm);color:var(--color-text-muted);display:grid;gap:.3rem;}
.cb-nojs b{color:var(--color-text);}
html:not(.js) .cb-tour,html:not(.js) .cb-count,
html:not(.js) .mx-stage,html:not(.js) .cb-main .cb-stage .cb-badge{display:none;}

@media (max-width:1279px) and (min-width:1080px){
  .cb-plot .ic{display:none;}
}
@media (max-width:1079px){
  .ctl-stats{grid-template-columns:repeat(2,minmax(0,1fr));}
  .cb-main{grid-template-columns:1fr;}
  .cb-steps{display:flex;overflow-x:auto;gap:.3rem;padding-bottom:.4rem;scroll-snap-type:x proximity;}
  .cb-steps::before,.cb-steps::after{display:none;}
  .cb-step{flex:0 0 auto;grid-template-columns:34px auto;padding:.35rem .7rem .35rem .35rem;border:1px solid var(--color-divider);scroll-snap-align:start;}
  .cb-dot{width:34px;height:34px;}
  .cb-step i.pn{display:none;}
  .mx-grid{grid-template-columns:1fr;}
  .mx-fig{order:-1;}
  .cb-plots{display:flex;overflow-x:auto;scroll-snap-type:x proximity;padding-bottom:4px;scrollbar-width:thin;}
  .cb-plot{flex:0 0 auto;min-width:168px;scroll-snap-align:start;}
  .mx-steps{overflow-x:auto;scrollbar-width:thin;padding-bottom:4px;}
  .mx-steps button{flex:0 0 auto;min-width:118px;}
}
@media (max-width:640px){
  .ctl-stats{grid-template-columns:1fr 1fr;gap:var(--space-3);}
  .ctl-stats > div{padding:var(--space-4);}
  .cb{padding:var(--space-5);border-radius:22px;}
  .cb-top{grid-template-columns:1fr;}
  .cb-count{text-align:left;}
  .cb-count span{margin-left:0;max-width:none;}
  .cb-step b{font-size:.8rem;}
  .mx-stage{border-radius:22px;}
  .mx-props{grid-template-columns:repeat(2,minmax(0,1fr));}
  .cb-plot{min-width:150px;}
  .cb-more{display:none;}
  .cb-play{width:48px;}
}
@media (prefers-reduced-motion:reduce){
  .cb *,.mx *{animation-duration:.001ms !important;animation-delay:0ms !important;transition-duration:.001ms !important;}
}


/* =====================================================================
   DATAVIZ PRO - HOW IT WORKS (#how)
   Four scenes on the app's own screens: Data Preview, choosing a module,
   the customisation panels and the export panel (its own labels, its own
   size estimate, and the real files it wrote).  JS: assets/js/howto.js
   ===================================================================== */
.hw{margin-top:var(--space-8);display:grid;grid-template-columns:minmax(240px,.7fr) minmax(0,2.3fr);gap:clamp(var(--space-5),2.4vw,var(--space-8));align-items:start;}
.hw-steps{list-style:none;margin:0;padding:0;display:grid;gap:.55rem;}
.hw-step{position:relative;display:grid;grid-template-columns:38px 1fr;gap:.7rem;align-items:start;width:100%;padding:.8rem .9rem 1rem;border-radius:16px;
  border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);text-align:left;cursor:pointer;overflow:hidden;
  transition:border-color .3s,box-shadow .3s,transform .3s;}
.hw-step:hover{transform:translateY(-1px);border-color:color-mix(in srgb,#8C52FF 40%,var(--color-divider));}
.hw-step .n{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-family:var(--font-display);font-weight:800;font-size:1.05rem;
  color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 10%,transparent);transition:all .3s;}
.hw-step b{display:block;font-family:var(--font-display);font-weight:800;font-size:1rem;line-height:1.15;margin-top:.1rem;}
.hw-step .tx > span{display:block;margin-top:.3rem;font-size:.8rem;line-height:1.45;color:var(--color-text-muted);}
.hw-step .bar{position:absolute;left:12px;right:12px;bottom:7px;height:3px;border-radius:3px;background:color-mix(in srgb,var(--color-text) 7%,transparent);overflow:hidden;}
.hw-step .bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,#8C52FF,#03C9BE);}
.hw-step.is-on{border-color:transparent;box-shadow:0 18px 40px -22px rgba(61,83,224,.55),0 0 0 1px color-mix(in srgb,#8C52FF 35%,transparent);}
.hw-step.is-on .n{color:#fff;background:linear-gradient(135deg,#8C52FF,#3D53E0);}
.hw-step.is-done .n{color:#fff;background:color-mix(in srgb,#8C52FF 55%,#3D53E0);}

/* window */
.hw-win{min-width:0;border-radius:20px;overflow:hidden;overflow:clip;background:#fff;color:#0f172a;border:1px solid var(--color-divider);
  box-shadow:0 36px 80px -34px rgba(23,16,74,.5);}
.hw-win h4{color:#0f172a;}
.hw-bar{display:flex;align-items:center;gap:.8rem;height:44px;padding:0 .8rem 0 1rem;background:#f4f5fa;border-bottom:1px solid #e6e8f0;font-size:.74rem;color:#64748b;}
.hw-bar .dots{display:flex;gap:6px;} .hw-bar .dots i{width:10px;height:10px;border-radius:50%;background:#d7dae6;}
.hw-bar .dots i:first-child{background:#ff8a80;} .hw-bar .dots i:nth-child(2){background:#ffd166;} .hw-bar .dots i:nth-child(3){background:#7bd88f;}
.hw-crumb b{color:#0f172a;font-weight:700;} .hw-crumb em{font-style:normal;margin:0 .3rem;color:#a3a9bc;}
.hw-play{margin-left:auto;display:inline-flex;align-items:center;gap:.35rem;height:28px;padding:0 .7rem;border-radius:8px;border:1px solid #dfe2ec;background:#fff;color:#334155;
  font-size:.66rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;}
.hw-play svg,.hw-play [data-lucide]{width:.9rem;height:.9rem;}
.hw-play .p-play{display:none;} .hw-play[aria-pressed="false"] .p-pause{display:none;} .hw-play[aria-pressed="false"] .p-play{display:inline-flex;}
.hw-play .p-pause{display:inline-flex;}
.hw-body{position:relative;height:540px;}
.hw-scene{position:absolute;inset:0;padding:18px;opacity:0;visibility:hidden;transition:opacity .45s ease,visibility 0s linear .45s;}
.hw-scene.is-on{opacity:1;visibility:visible;transition:opacity .45s ease;}
.press{animation:hwPress .45s ease;}
@keyframes hwPress{35%{transform:scale(.95);box-shadow:0 0 0 6px rgba(140,82,255,.22);}}
.hw-lab{display:block;margin:0 0 .35rem;font-size:.64rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#64748b;}
.hw-btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;height:36px;padding:0 1rem;border-radius:10px;border:0;
  background:linear-gradient(135deg,#8C52FF,#3D53E0);color:#fff;font-weight:800;font-size:.8rem;}
.hw-btn svg,.hw-btn [data-lucide]{width:.95rem;height:.95rem;}
.hw-btn.ok{background:linear-gradient(135deg,#16a34a,#0d9488);}

/* scene 1: Data Preview */
.hw-load{display:grid;grid-template-columns:190px minmax(0,1fr);gap:16px;}
.hw-rail{display:flex;flex-direction:column;gap:8px;padding:12px;border-radius:14px;background:#f7f8fc;border:1px solid #eceef5;}
.hw-src{display:flex;align-items:center;gap:.55rem;padding:.6rem .65rem;border-radius:11px;background:#fff;border:1px solid #e3e6ef;font-size:.76rem;font-weight:700;color:#334155;transition:all .3s;}
.hw-src .ic{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;background:#eef0fb;color:#4f46e5;flex:none;}
.hw-src .ic svg,.hw-src .ic [data-lucide]{width:.9rem;height:.9rem;}
.hw-src.is-on{border-color:transparent;background:linear-gradient(135deg,#8C52FF,#3D53E0);color:#fff;box-shadow:0 10px 22px -12px rgba(61,83,224,.7);}
.hw-src.is-on .ic{background:rgba(255,255,255,.2);color:#fff;}
.hw-rail small{margin-top:auto;font-size:.66rem;line-height:1.4;color:#64748b;}
.hw-main{position:relative;min-width:0;}
.hw-pick{position:absolute;inset:0;display:flex;flex-direction:column;gap:6px;padding:14px;border-radius:14px;border:1px solid #e3e6ef;background:#fff;
  opacity:0;transform:translateY(10px);transition:opacity .35s,transform .35s;pointer-events:none;}
.hw-pick.in{opacity:1;transform:none;}
.hw-opt{display:flex;flex-direction:column;padding:.5rem .7rem;border-radius:10px;border:1px solid #edf0f6;font-size:.78rem;font-weight:700;color:#334155;transition:all .2s;}
.hw-opt small{font-weight:500;font-size:.68rem;color:#64748b;}
.hw-opt.is-on{border-color:#8C52FF;background:#f5f0ff;color:#3b1f8f;}
.hw-pick .hw-btn{align-self:flex-end;margin-top:auto;}
.hw-table{position:absolute;inset:0 0 44px 0;overflow:hidden;border-radius:14px;border:1px solid #e3e6ef;opacity:0;transition:opacity .35s;}
.hw-table.in{opacity:1;}
.hw-table table{width:100%;border-collapse:collapse;font-size:.74rem;font-variant-numeric:tabular-nums;}
.hw-table th{position:sticky;top:0;padding:.55rem .6rem;text-align:left;background:#f4f5fa;border-bottom:1px solid #e3e6ef;font-weight:800;color:#334155;white-space:nowrap;}
.hw-table th small{display:block;font-weight:600;font-size:.62rem;color:#8b93a8;}
.hw-table td{padding:.45rem .6rem;border-bottom:1px solid #f0f2f7;white-space:nowrap;color:#1e293b;}
.hw-table tbody tr{opacity:0;transform:translateX(-6px);transition:opacity .3s,transform .3s;}
.hw-table tbody tr.in{opacity:1;transform:none;}
.hw-table tfoot td{color:#8b93a8;font-style:italic;border:0;}
.hw-status{position:absolute;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;gap:6px;}
.hw-status span{display:inline-flex;align-items:center;gap:.35rem;height:30px;padding:0 .7rem;border-radius:999px;background:#f1f5f9;border:1px solid #e2e8f0;font-size:.72rem;font-weight:700;color:#334155;
  opacity:0;transform:translateY(6px);transition:opacity .3s,transform .3s;}
.hw-status span.in{opacity:1;transform:none;}
.hw-status span.ok{background:#ecfdf5;border-color:#bbf7d0;color:#166534;}

/* scene 2: choose the module */
.hw-mod{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:16px;}
.hw-fams{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;align-content:start;}
.hw-fam.gv{grid-column:span 2;}
.hw-fam.gv ul{grid-template-columns:1fr 1fr;}
.hw-fam{padding:8px 6px;border-radius:12px;background:#f7f8fc;border:1px solid #eceef5;transition:all .3s;}
.hw-fam h5{margin:0 0 6px;font-size:.62rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#64748b;line-height:1.2;}
.hw-fam ul{list-style:none;margin:0;padding:0;display:grid;gap:4px;}
.hw-fam li{padding:.3rem .45rem;border-radius:7px;background:#fff;border:1px solid #e8ebf3;font-size:.68rem;font-weight:700;color:#334155;line-height:1.2;transition:all .25s;}
.hw-fam.lit{border-color:#c9b8ff;}
.hw-fam.is-on{background:#f3eeff;border-color:#b79cff;}
.hw-fam.is-on h5{color:#5b21b6;}
.hw-fam li.is-on{background:linear-gradient(135deg,#8C52FF,#3D53E0);border-color:transparent;color:#fff;box-shadow:0 8px 18px -10px rgba(61,83,224,.8);}
.hw-vars{display:flex;flex-direction:column;gap:10px;padding:14px;border-radius:14px;border:1px solid #e3e6ef;background:#fff;box-shadow:0 18px 40px -26px rgba(23,16,74,.45);
  opacity:0;transform:translateX(12px);transition:opacity .4s,transform .4s;}
.hw-vars.in{opacity:1;transform:none;}
.hw-vars h4{margin:0;font-family:var(--font-display);font-weight:800;font-size:1rem;}
.hw-seg{display:grid;grid-template-columns:1fr 1fr;gap:6px;}
.hw-seg span{display:grid;place-items:center;height:32px;border-radius:9px;border:1px solid #e3e6ef;font-size:.72rem;font-weight:800;color:#475569;}
.hw-seg span.is-on{background:#0f172a;border-color:#0f172a;color:#fff;}
.hw-sel{display:flex;align-items:center;justify-content:space-between;height:34px;padding:0 .7rem;border-radius:9px;border:1px solid #d9dde8;background:#fff;font-size:.76rem;color:#0f172a;}
.hw-sel b{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:600;font-size:.74rem;min-height:1em;}
.hw-sel b.typing::after{content:"";display:inline-block;width:1px;height:.95em;margin-left:1px;background:#4f46e5;vertical-align:-2px;animation:hwCaret .8s steps(1) infinite;}
@keyframes hwCaret{50%{opacity:0;}}
.hw-sel::after{content:"";width:7px;height:7px;border-right:2px solid #94a3b8;border-bottom:2px solid #94a3b8;transform:rotate(45deg) translateY(-2px);}
.hw-help{margin:0;font-size:.68rem;color:#64748b;}
.hw-vars .hw-btn{margin-top:.3rem;}
.hw-toast{display:flex;align-items:center;gap:.5rem;padding:.55rem .7rem;border-radius:10px;background:#ecfdf5;border:1px solid #bbf7d0;color:#166534;font-size:.72rem;font-weight:700;
  opacity:0;transform:translateY(6px);transition:opacity .3s,transform .3s;}
.hw-toast.in{opacity:1;transform:none;}
.hw-toast svg,.hw-toast [data-lucide]{width:.95rem;height:.95rem;flex:none;}

/* scene 3: customise */
.hw-cus{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:16px;}
.hw-fig{position:relative;border-radius:14px;border:1px solid #e3e6ef;background:#fff;overflow:hidden;}
.hw-fig img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:8px;box-sizing:border-box;transition:opacity .5s ease;}
.hw-fig img.off{opacity:0;}
.hw-side{display:flex;flex-direction:column;gap:10px;}
.hw-side h4{margin:0;display:flex;align-items:center;gap:.4rem;font-family:var(--font-display);font-weight:800;font-size:.95rem;}
.hw-side h4 svg,.hw-side h4 [data-lucide]{width:1rem;height:1rem;color:#4f46e5;}
.hw-pans{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;}
.hw-pan{display:flex;flex-direction:column;align-items:center;gap:.3rem;padding:.6rem .2rem;border-radius:11px;border:1px solid #e3e6ef;background:#fff;font-size:.62rem;font-weight:800;color:#475569;text-align:center;transition:all .3s;}
.hw-pan svg,.hw-pan [data-lucide]{width:1.05rem;height:1.05rem;color:#6366f1;}
.hw-pan.was-on{border-color:#c9b8ff;background:#faf7ff;}
.hw-pan.is-on{border-color:transparent;background:linear-gradient(135deg,#8C52FF,#3D53E0);color:#fff;box-shadow:0 10px 20px -10px rgba(61,83,224,.8);}
.hw-pan.is-on svg{color:#fff;}
.hw-cap{margin:0;padding:.7rem .8rem;border-radius:12px;background:#f7f8fc;border:1px solid #eceef5;font-size:.76rem;line-height:1.45;color:#475569;min-height:5.2em;}
.hw-cap b{color:#0f172a;}

/* scene 4: export */
.hw-exp{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:18px;}
.hw-paper-wrap{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-width:0;padding:18px 18px 12px 36px;border-radius:14px;
  background:repeating-linear-gradient(45deg,#f6f7fb 0 10px,#f1f3f9 10px 20px);border:1px solid #eceef5;}
.hw-paper{position:relative;width:min(100%,560px);max-height:300px;aspect-ratio:8/6;background:#fff;box-shadow:0 14px 30px -18px rgba(15,23,42,.5);transition:aspect-ratio .6s ease;}
.hw-paper img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;}
.hw-rx,.hw-ry{position:absolute;display:flex;align-items:center;justify-content:center;font-size:.64rem;font-weight:800;color:#4f46e5;}
.hw-rx{left:0;right:0;top:-14px;height:10px;border:1px solid #a5b4fc;border-bottom:0;}
.hw-ry{top:0;bottom:0;left:-22px;width:10px;border:1px solid #a5b4fc;border-right:0;}
.hw-rx b{padding:0 .35rem;background:#f4f5fb;transform:translateY(-1px);}
.hw-ry b{padding:.3rem 0;background:#f4f5fb;writing-mode:vertical-rl;transform:rotate(180deg);}
.hw-px{font-size:.72rem;color:#475569;} .hw-px b{color:#0f172a;font-variant-numeric:tabular-nums;}
.hw-files{display:grid;gap:6px;width:100%;max-width:560px;}
.hw-file{display:flex;align-items:center;gap:.6rem;padding:.5rem .7rem;border-radius:11px;background:#fff;border:1px solid #d1fae5;box-shadow:0 10px 22px -16px rgba(22,101,52,.6);
  opacity:0;transform:translateY(8px);transition:opacity .35s,transform .35s;}
.hw-file.in{opacity:1;transform:none;}
.hw-file .ic{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;background:#ecfdf5;color:#16a34a;flex:none;}
.hw-file .ic svg,.hw-file .ic [data-lucide]{width:.9rem;height:.9rem;}
.hw-file b{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;font-weight:600;color:#0f172a;}
.hw-file small{display:block;font-size:.66rem;color:#64748b;}
.hw-export{display:flex;flex-direction:column;gap:8px;min-width:0;}
.hw-export h4{margin:0 0 2px;display:flex;align-items:center;gap:.4rem;font-family:var(--font-display);font-weight:800;font-size:.95rem;}
.hw-export h4 svg,.hw-export h4 [data-lucide]{width:1rem;height:1rem;color:#4f46e5;}
.hw-card{padding:.6rem .7rem;border-radius:12px;border:1px solid #e3e6ef;background:#fff;transition:border-color .3s,box-shadow .3s,opacity .3s;}
.hw-card.focus{border-color:#8C52FF;box-shadow:0 0 0 3px rgba(140,82,255,.14);}
.hw-card h5{margin:0 0 .4rem;display:flex;align-items:center;gap:.35rem;font-size:.66rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#475569;}
.hw-card h5 svg,.hw-card h5 [data-lucide]{width:.85rem;height:.85rem;}
.hw-prev{background:#f8fafc;}
.hw-prev table{width:100%;border-collapse:collapse;font-size:.68rem;}
.hw-prev td{padding:.16rem 0;color:#334155;vertical-align:top;} .hw-prev td:first-child{width:38%;color:#64748b;font-weight:700;}
.hw-prev tr.is-hidden{display:none;}
.hw-row2{display:grid;grid-template-columns:1fr 1.1fr;gap:8px;}
.hw-fmt{position:relative;}
.hw-menu{position:absolute;left:0;right:0;top:100%;z-index:3;margin:4px 0 0;padding:4px;list-style:none;border-radius:9px;background:#fff;border:1px solid #d9dde8;box-shadow:0 14px 30px -16px rgba(15,23,42,.5);
  opacity:0;transform:translateY(-4px);pointer-events:none;transition:opacity .2s,transform .2s;}
.hw-menu.open{opacity:1;transform:none;}
.hw-menu li{padding:.3rem .5rem;border-radius:6px;font-size:.72rem;font-weight:700;color:#334155;}
.hw-menu li.is-on{background:#4f46e5;color:#fff;}
.hw-dims{display:grid;grid-template-columns:1fr 1fr;gap:6px;}
.hw-dims label{display:block;font-size:.62rem;font-weight:700;color:#64748b;margin-bottom:.2rem;}
.hw-num{display:flex;align-items:center;justify-content:space-between;height:32px;padding:0 .5rem;border-radius:8px;border:1px solid #d9dde8;font-size:.78rem;font-weight:700;font-variant-numeric:tabular-nums;}
.hw-num::after{content:"\2195";font-size:.7rem;color:#94a3b8;}
.hw-res{overflow:hidden;max-height:130px;transition:max-height .45s ease,opacity .35s,padding .35s,margin .35s,border-width .35s;}
.hw-res.is-hidden{max-height:0;opacity:0;padding-top:0;padding-bottom:0;margin-top:-8px;border-width:0;}
.hw-slider{position:relative;height:30px;margin:.1rem .4rem 0;}
.hw-track{position:absolute;left:0;right:0;top:18px;height:5px;border-radius:5px;background:#e2e8f0;}
.hw-fill{position:absolute;left:0;top:0;bottom:0;border-radius:5px;background:linear-gradient(90deg,#8C52FF,#3D53E0);}
.hw-knob{position:absolute;top:13px;width:15px;height:15px;margin-left:-7.5px;border-radius:50%;background:#fff;border:3px solid #4f46e5;box-shadow:0 2px 6px rgba(15,23,42,.3);}
.hw-knob .hw-dpi-v{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);padding:.1rem .35rem;border-radius:5px;background:#4f46e5;color:#fff;font-size:.62rem;font-weight:800;font-variant-numeric:tabular-nums;}
.hw-scale{display:flex;justify-content:space-between;margin:.2rem .1rem 0;font-size:.58rem;color:#94a3b8;}
.hw-note{margin:.3rem 0 0;font-size:.62rem;color:#64748b;}
.hw-dl-wrap{padding:0;border:0;background:none;}
.hw-dl-wrap .hw-btn{width:100%;height:38px;}
.hw-dl-wrap.focus .hw-btn{box-shadow:0 0 0 3px rgba(22,163,74,.25);}
.hw-dl{margin:var(--space-3) 0 0;grid-column:2;font-size:var(--text-sm);color:var(--color-text-muted);}
.hw-dl a{font-weight:700;white-space:nowrap;}
html:not(.js) .hw-win,html:not(.js) .hw-step .bar{display:none;}
html:not(.js) .hw{grid-template-columns:1fr;}

@media (max-width:1079px){
  .hw{grid-template-columns:1fr;}
  .hw-steps{grid-template-columns:repeat(4,minmax(0,1fr));}
  .hw-step{grid-template-columns:1fr;gap:.4rem;}
  .hw-step .tx > span{display:none;}
  .hw-dl{grid-column:1;}
}
@media (max-width:760px){
  .hw-steps{display:flex;overflow-x:auto;scroll-snap-type:x proximity;padding-bottom:4px;scrollbar-width:thin;}
  .hw-step{flex:0 0 auto;min-width:150px;scroll-snap-align:start;padding:.65rem .75rem .9rem;}
  .hw-step .n{width:32px;height:32px;font-size:.95rem;}
  .hw-body{height:auto;min-height:600px;}
  .hw-scene{position:relative;inset:auto;display:none;padding:12px;}
  .hw-scene.is-on{display:grid;}
  .hw-load,.hw-mod,.hw-cus,.hw-exp{grid-template-columns:1fr;}
  .hw-rail{flex-direction:row;flex-wrap:wrap;padding:8px;}
  .hw-src{flex:1 1 45%;padding:.45rem .5rem;font-size:.68rem;}
  .hw-rail small{display:none;}
  .hw-main{min-height:340px;}
  .hw-table{position:relative;inset:auto;overflow-x:auto;}
  .hw-status{position:relative;margin-top:8px;}
  .hw-pick{z-index:2;}
  .hw-fams{grid-template-columns:repeat(2,minmax(0,1fr));}
  .hw-fam.gv{grid-column:span 2;}
  .hw-fam{display:none;} .hw-fam.is-on,.hw-fam.show-m{display:block;}
  .hw-fig{aspect-ratio:4/3;}
  .hw-paper-wrap{padding:22px 12px 12px 30px;}
  .hw-bar .hw-crumb{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
}
@media (prefers-reduced-motion:reduce){
  .hw *{animation-duration:.001ms !important;transition-duration:.001ms !important;}
}

/* ---- Footer: WhatsApp line (28 Sept 2026) ---- */
.footer-wa{display:grid;place-items:center;flex:none;width:1.05rem;height:1.05rem;color:#1DA851;}
.footer-wa svg{width:100%;height:100%;display:block;}
[data-theme="dark"] .footer-wa{color:#25D366;}
.footer-contact small{font-size:.78em;opacity:.8;}

/* Enrolment modal: the pay step (Razorpay), 28 September 2026 */
.pay-summary{display:grid;gap:0;border:1px solid var(--color-divider);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:var(--space-5);
  background:color-mix(in srgb,var(--color-primary) 4%,var(--color-surface));}
.pay-summary > div{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-4);padding:.85rem 1rem;}
.pay-summary > div + div{border-top:1px solid var(--color-divider);}
.pay-summary span{font-size:var(--text-sm);color:var(--color-text-muted);}
.pay-summary b{font-weight:700;text-align:right;}
.pay-summary .pay-amt{font-family:var(--font-display);font-size:var(--text-xl);letter-spacing:-.02em;color:var(--color-primary);}
.pay-alert{margin:0 0 var(--space-4);padding:.75rem 1rem;border-radius:var(--radius-md);font-size:var(--text-sm);
  background:color-mix(in srgb,#ffb020 16%,transparent);border:1px solid color-mix(in srgb,#ffb020 45%,transparent);color:var(--color-text);}
.modal-body .modal-actions + .pay-note{margin-top:var(--space-5);}
.enroll-ref{font-size:var(--text-sm);color:var(--color-text-muted);}
.enroll-ref b{color:var(--color-text);letter-spacing:.02em;}
.enroll-status{font-size:var(--text-sm);font-weight:600;color:#c13a3a;min-height:0;}
.enroll-status:empty{display:none;}
[data-theme="dark"] .enroll-status{color:#ff8a8a;}

/* =====================================================================
   COURSE FEES AND BATCHES (course page #fees; fees.js), 28 Sept 2026
   ===================================================================== */
.fee-wrap{display:grid;gap:var(--space-6);}
/* how you join: three tabs with a sliding highlight */
.fee-modes{position:relative;display:inline-grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:.25rem;justify-self:start;
  padding:.3rem;border-radius:999px;background:var(--color-surface-2);border:1px solid var(--color-divider);max-width:100%;}
.fee-modes [role=tab]{position:relative;z-index:1;display:grid;justify-items:center;gap:.05rem;padding:.6rem 1.25rem;border:0;border-radius:999px;
  background:none;cursor:pointer;font:inherit;color:var(--color-text-muted);transition:color .3s ease;text-align:center;}
.fee-modes [role=tab] b{font-size:var(--text-sm);font-weight:700;}
.fee-modes [role=tab] span{font-size:.72rem;white-space:nowrap;}
.fee-modes [role=tab][aria-selected="true"]{color:#fff;}
.fee-modes [role=tab]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;}
.fee-modes-ink{position:absolute;z-index:0;top:0;left:0;border-radius:999px;
  background:linear-gradient(120deg,var(--color-primary),var(--color-indigo));box-shadow:0 8px 22px -10px color-mix(in srgb,var(--color-primary) 70%,transparent);
  transition:transform .5s cubic-bezier(.16,1,.3,1),width .5s cubic-bezier(.16,1,.3,1),height .5s cubic-bezier(.16,1,.3,1);}
/* the four fee cards */
.fee-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-4);}
.fee-card{position:relative;overflow:hidden;isolation:isolate;display:grid;align-content:start;gap:.35rem;padding:var(--space-6);
  border-radius:var(--radius-xl);background:var(--color-surface);border:1px solid var(--color-divider);
  transition:transform .5s cubic-bezier(.16,1,.3,1),box-shadow .4s ease,border-color .4s ease;}
.fee-card::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--color-primary),var(--color-indigo) 55%,var(--color-teal));transform:scaleX(.18);transform-origin:left;
  transition:transform .6s cubic-bezier(.16,1,.3,1);}
.fee-card::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:0;
  background:radial-gradient(320px circle at var(--sx,50%) var(--sy,0%),color-mix(in srgb,var(--color-primary) 10%,transparent),transparent 62%);transition:opacity .35s ease;}
.fee-card:hover,.fee-card.is-spot{transform:translateY(-4px);border-color:color-mix(in srgb,var(--color-primary) 30%,var(--color-divider));
  box-shadow:0 24px 50px -30px color-mix(in srgb,var(--color-brand-violet) 55%,transparent);}
.fee-card:hover::before,.fee-card.is-spot::before{transform:scaleX(1);}
.fee-card.is-spot::after{opacity:1;}
.fee-cat{font-weight:700;font-size:var(--text-base);display:flex;flex-wrap:wrap;align-items:baseline;gap:.4rem;}
.fee-cat small{font-weight:500;font-size:var(--text-xs);color:var(--color-text-muted);}
.fee-amt{font-family:var(--font-display);font-weight:800;font-size:clamp(1.8rem,1.3rem + 1.4vw,2.4rem);letter-spacing:-.03em;line-height:1.05;
  margin-top:var(--space-3);font-variant-numeric:tabular-nums;transition:opacity .17s ease,transform .17s ease;}
.fee-amt.is-swap{opacity:0;transform:translateY(6px);}
.fee-card:first-child .fee-amt{background:linear-gradient(100deg,var(--color-primary),var(--color-indigo) 50%,var(--color-teal));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;}
.fee-tax{font-size:var(--text-xs);color:var(--color-text-muted);}
.fee-foot{font-size:var(--text-sm);color:var(--color-text-muted);margin-top:calc(var(--space-2) * -1);}
/* batches: the ones that apply to the chosen way of joining are lit */
.fee-h{font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);letter-spacing:-.02em;margin-top:var(--space-4);}
.fee-batches{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4);}
.fee-batch{display:flex;gap:.8rem;align-items:flex-start;padding:var(--space-5);border-radius:var(--radius-lg);
  border:1px solid var(--color-divider);background:var(--color-surface);transition:opacity .4s ease,border-color .4s ease,background .4s ease;}
.fee-batch [data-lucide]{width:1.2rem;height:1.2rem;flex:none;margin-top:.15rem;color:var(--color-primary);}
.fee-batch b{display:block;font-size:var(--text-sm);}
.fee-batch span{display:block;font-family:var(--font-display);font-weight:700;font-size:var(--text-lg);letter-spacing:-.01em;margin-top:.15rem;}
.fee-batch small{display:block;font-size:var(--text-xs);color:var(--color-text-muted);margin-top:.2rem;}
.fee-wrap[data-mode="india"] .fee-batch[data-bmode="in-person"],
.fee-wrap[data-mode="abroad"] .fee-batch[data-bmode="in-person"],
.fee-wrap[data-mode="inperson"] .fee-batch[data-bmode="online"]{opacity:.42;}
.fee-wrap[data-mode="india"] .fee-batch[data-bmode="online"],
.fee-wrap[data-mode="abroad"] .fee-batch[data-bmode="online"],
.fee-wrap[data-mode="inperson"] .fee-batch[data-bmode="in-person"]{border-color:color-mix(in srgb,var(--color-primary) 35%,var(--color-divider));
  background:color-mix(in srgb,var(--color-primary) 5%,var(--color-surface));}
.fee-cta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-4) var(--space-6);margin-top:var(--space-8);}
.es-fees-link{display:block;font-size:var(--text-xs);font-weight:600;color:var(--color-primary);text-align:right;margin-top:.1rem;}
.course-price small a{color:var(--color-primary);font-weight:600;}
@media (max-width:1000px){.fee-grid{grid-template-columns:repeat(2,minmax(0,1fr));}.fee-batches{grid-template-columns:1fr;}}
@media (max-width:560px){
  .fee-modes{display:grid;grid-auto-flow:row;grid-auto-rows:1fr;border-radius:var(--radius-lg);justify-self:stretch;}
  .fee-modes [role=tab]{border-radius:var(--radius-md);grid-auto-flow:column;justify-content:space-between;padding:.7rem 1rem;}
  .fee-modes-ink{border-radius:var(--radius-md);}
  .fee-card{padding:var(--space-5);}
}
@media (prefers-reduced-motion:reduce){.fee-modes-ink,.fee-card,.fee-amt,.fee-card::before{transition:none;}}
/* the student discount on its fee card */
.fee-card.has-save{border-color:color-mix(in srgb,var(--color-primary) 40%,var(--color-divider));
  background:linear-gradient(160deg,color-mix(in srgb,var(--color-primary) 7%,var(--color-surface)),var(--color-surface) 60%);}
.fee-card.has-save::before{transform:scaleX(1);}
.fee-badge{position:absolute;top:var(--space-4);right:var(--space-4);padding:.28rem .6rem;border-radius:999px;font-size:.72rem;font-weight:800;letter-spacing:.02em;
  color:#fff;background:linear-gradient(120deg,var(--color-primary),var(--color-teal));box-shadow:0 8px 18px -10px color-mix(in srgb,var(--color-primary) 80%,transparent);}
.fee-badge:empty{display:none;}
.fee-was{margin-top:var(--space-2);margin-bottom:calc(var(--space-3) * -1);font-size:var(--text-sm);color:var(--color-text-muted);min-height:1.2em;}
.fee-was s{text-decoration-thickness:1.5px;text-decoration-color:color-mix(in srgb,#d64545 70%,transparent);}
.fee-savenote{font-size:var(--text-xs);font-weight:600;color:var(--color-primary);margin-top:.15rem;}
.fee-savenote:empty{display:none;}

/* Course application form in the enrolment modal (enroll.js), 28 Sept 2026 */
.modal.is-wide{width:min(760px,100%);}
.enrol-course{gap:var(--space-4);}
.enrol-sec{margin-top:var(--space-3);padding-top:var(--space-4);border-top:1px solid var(--color-divider);
  font-size:var(--text-xs);font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--color-primary);}
.enrol-course > .enrol-sec:first-child{margin-top:0;padding-top:0;border-top:0;}
.enrol-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4);}
.enrol-course .field :is(input,select){width:100%;min-width:0;}
.enrol-pick{border:0;padding:0;margin:0;min-width:0;}
.enrol-pick legend{font-size:var(--text-sm);font-weight:600;margin-bottom:.5rem;}
.ep-pills{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem;}
.ep-batches{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;}
.ep-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;}
.ep-pill,.ep-card{position:relative;display:block;cursor:pointer;}
.ep-pill input,.ep-card input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer;}
.ep-pill > span,.ep-card > span{display:grid;gap:.1rem;height:100%;padding:.7rem .85rem;border-radius:var(--radius-md);
  border:1px solid var(--color-border);background:var(--color-surface-2);transition:border-color .25s ease,background .25s ease,box-shadow .25s ease;}
.ep-pill b,.ep-card b{font-size:var(--text-sm);font-weight:700;}
.ep-pill small,.ep-card small{font-size:.74rem;color:var(--color-text-muted);}
.ep-card > span{padding:.8rem .85rem;align-content:start;}
.ep-amt{font-style:normal;font-family:var(--font-display);font-weight:800;font-size:var(--text-lg);letter-spacing:-.02em;margin-top:.35rem;}
.ep-card .ep-tax{font-size:.7rem;color:var(--color-text-muted);}
.ep-save{font-style:normal;justify-self:start;margin-top:.25rem;padding:.12rem .45rem;border-radius:999px;font-size:.68rem;font-weight:800;color:#fff;
  background:linear-gradient(120deg,var(--color-primary),var(--color-teal));}
.ep-save:empty{display:none;}
.ep-pill:hover > span,.ep-card:hover > span{border-color:color-mix(in srgb,var(--color-primary) 45%,var(--color-border));}
.ep-pill input:checked + span,.ep-card input:checked + span{border-color:var(--color-primary);
  background:color-mix(in srgb,var(--color-primary) 8%,var(--color-surface));box-shadow:0 0 0 3px var(--color-primary-soft);}
.ep-pill input:focus-visible + span,.ep-card input:focus-visible + span{outline:2px solid var(--color-primary);outline-offset:2px;}
.ep-hint{font-size:var(--text-xs);color:var(--color-text-muted);margin-top:.4rem;}
.enrol-total{border-radius:var(--radius-lg);padding:var(--space-4) var(--space-5);
  background:linear-gradient(140deg,color-mix(in srgb,var(--color-primary) 8%,var(--color-surface)),color-mix(in srgb,var(--color-accent-bright) 8%,var(--color-surface)));
  border:1px solid color-mix(in srgb,var(--color-primary) 25%,var(--color-divider));}
.enrol-total .et-empty{font-size:var(--text-sm);color:var(--color-text-muted);}
.enrol-total .et-what{font-weight:700;font-size:var(--text-sm);margin-bottom:.4rem;}
.enrol-total dl{display:grid;gap:.2rem;margin:0;}
.enrol-total dl > div{display:flex;justify-content:space-between;gap:var(--space-4);font-size:var(--text-sm);}
.enrol-total dt{color:var(--color-text-muted);}
.enrol-total dd{margin:0;font-variant-numeric:tabular-nums;}
.enrol-total .et-sum{margin-top:.3rem;padding-top:.4rem;border-top:1px dashed color-mix(in srgb,var(--color-primary) 30%,var(--color-divider));}
.enrol-total .et-sum dt{color:var(--color-text);font-weight:700;}
.enrol-total .et-sum dd{font-family:var(--font-display);font-weight:800;font-size:var(--text-xl);color:var(--color-primary);}
.enrol-consent{display:flex;gap:.6rem;align-items:flex-start;font-size:var(--text-sm);line-height:1.5;cursor:pointer;}
.enrol-consent input{margin-top:.2rem;width:1.05rem;height:1.05rem;flex:none;accent-color:var(--color-primary);}
.enrol-consent a{color:var(--color-primary);font-weight:600;}
.pay-summary .pay-break{font-weight:500;font-size:var(--text-xs);color:var(--color-text-muted);}
@media (max-width:640px){
  .enrol-row,.ep-batches{grid-template-columns:1fr;}
  .ep-cards{grid-template-columns:repeat(2,minmax(0,1fr));}
  .ep-pills{grid-template-columns:1fr;}
  .ep-pill > span{grid-auto-flow:column;justify-content:space-between;align-items:baseline;}
  .modal-head,.modal-body{padding-inline:var(--space-5);}
}

/* Internship Academy fees: track and length pickers above the fee cards,
   and the "From … + GST" line on each track card (28 September 2026). */
.ifee-pick{display:grid;gap:var(--space-4);margin-bottom:var(--space-6);}
.ifee-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-5);}
.ifee-lbl{margin:0;min-width:4.5rem;font-size:var(--text-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);}
.ifee-row .trk-lens{margin-bottom:0;}
.trk-fee{margin-top:var(--space-3);font-size:var(--text-sm);color:var(--color-text-muted);}
.trk-fee b{color:var(--color-text);font-weight:700;}
.trk-fee a{color:var(--color-primary);font-weight:600;}
.enrol-course .opt{font-weight:400;font-size:var(--text-xs);color:var(--color-text-muted);}
@media (max-width:640px){.ifee-row{display:grid;gap:var(--space-2);}}
.ep-pills.ep-lens{grid-template-columns:repeat(4,minmax(0,1fr));}
@media (max-width:640px){.ep-pills.ep-lens{grid-template-columns:repeat(2,minmax(0,1fr));}}
/* the "Save x%" badge never covers the category name */
.fee-card.has-save .fee-cat{padding-right:4.6rem;}
@media (max-width:640px){
  .fee-card.has-save .fee-cat{padding-right:0;}
  .fee-badge{position:static;justify-self:start;margin-bottom:.1rem;}
}
@media (max-width:640px){.ifee-row [data-pick="len"]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));}}
