/* ============================================================
   KinOrbit — mockup2 shared design system
   High-fidelity marketing layout: rounded-card-on-colour-frame,
   bold alternating colour blocks, big type, blob badges,
   device-frame media, scroll-reveal + carousel motion.
   Brand = "The Secure Bubble". Original KinOrbit design + content.
   ============================================================ */
:root{
  --guardian:#1A2B48; --guardian-d:#0E1C32; --guardian-m:#2C4677;
  --amber:#FFBF00; --amber-l:#FFE9A0; --amber-d:#E0A300;
  --sky:#77B5FE; --sky-300:#8FBDFF; --sky-100:#DCEBFF; --sky-50:#EFF6FF;
  --teal:#008080; --teal-l:#12b894;
  --sage:#87A96B; --sage-100:#DBE5CF; --sage-50:#EEF3E7;
  --cream:#FDF8F0; --cream-2:#F6EFDD; --cream-3:#EFE7D3;
  --white:#fff; --ink:#1A2B48; --muted:#5a6a7a;
  --line:rgba(26,43,72,.10);
  --shadow-sm:0 8px 24px -10px rgba(26,43,72,.18);
  --shadow-md:0 26px 60px -28px rgba(26,43,72,.42);
  --shadow-lg:0 50px 110px -40px rgba(26,43,72,.5);
  --maxw:1240px;
  --frame:18px;            /* gap between stacked rounded blocks */
  --block-r:40px;          /* big rounded corners */
}
*{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;overflow-anchor:none;} /* overflow-anchor:none stops the auto-advancing
   how-it-works carousel's height changes from nudging scrollY (which made the auto-hide nav flicker) */
body{font-family:'Manrope',system-ui,sans-serif;color:var(--ink);background:var(--cream);-webkit-font-smoothing:antialiased;line-height:1.5;}
img{max-width:100%;display:block;}
a{text-decoration:none;color:inherit;}
.sora{font-family:'Sora',sans-serif;}

/* ── Type scale (big & bold like reference) ───────────────── */
.eyebrow{display:inline-flex;align-items:center;gap:9px;font-size:.8rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--teal);}
.eyebrow::before{content:"";width:26px;height:2px;background:currentColor;border-radius:2px;}
.hero-slogan{display:block;font-size:1rem;font-weight:600;color:var(--teal);margin-top:10px;}
.hero-descriptor{display:block;font-size:.7rem;font-weight:600;letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin-top:4px;}
.h-display{font-family:'Sora';font-weight:800;font-size:clamp(2.7rem,6vw,5rem);line-height:1.02;letter-spacing:-.03em;}
.h-section{font-family:'Sora';font-weight:800;font-size:clamp(2.1rem,4vw,3.4rem);line-height:1.08;letter-spacing:-.025em;}
.h-3{font-family:'Sora';font-weight:700;font-size:1.45rem;letter-spacing:-.01em;}
.lede{font-size:1.18rem;line-height:1.65;color:var(--muted);max-width:560px;}
.accent{color:var(--teal);} .amber-t{color:var(--amber-d);} .sky-t{color:var(--sky);}

/* ── Buttons (black/navy pill like reference) ─────────────── */
.btn{display:inline-flex;align-items:center;gap:9px;font-weight:700;font-size:1rem;border-radius:999px;padding:15px 28px;cursor:pointer;border:none;transition:transform .2s,box-shadow .2s,background .2s;}
.btn-dark{background:var(--guardian);color:#fff;box-shadow:0 14px 30px -12px rgba(26,43,72,.5);}
.btn-dark:hover{transform:translateY(-2px);}
.btn-amber{background:var(--amber);color:var(--guardian);box-shadow:0 14px 30px -12px rgba(255,191,0,.6);}
.btn-amber:hover{transform:translateY(-2px);}
.btn-ghost{background:transparent;color:var(--guardian);border:1.5px solid rgba(26,43,72,.25);}
.btn-ghost:hover{background:rgba(26,43,72,.05);}
.btn-lg{padding:18px 34px;font-size:1.05rem;}

/* ── NAV ──────────────────────────────────────────────────── */
/* Floating glass pill nav (styling + fade-in/out behaviour ported from Fable_5).
   Detached from the top, centred, rounded, translucent-blur; slides up and
   fades out on scroll-down, back in on scroll-up (JS toggles .nav--hidden). */
.nav{position:fixed;top:14px;left:50%;transform:translateX(-50%);z-index:90;
  width:min(var(--maxw),calc(100% - 28px));border-radius:18px;
  background:linear-gradient(to bottom,rgba(253,252,248,.62) 0%,rgba(253,252,248,.74) 40%,rgba(253,252,248,.82) 100%);
  backdrop-filter:blur(28px) saturate(190%);-webkit-backdrop-filter:blur(28px) saturate(190%);
  border:1px solid rgba(255,255,255,.72);box-shadow:var(--shadow-md);
  transition:transform .32s cubic-bezier(.4,0,.2,1),opacity .32s;will-change:transform,opacity;}
.nav.nav--hidden{transform:translateX(-50%) translateY(-120%);opacity:0;}
@media (prefers-reduced-transparency:reduce){.nav{background:rgba(253,252,248,.96);backdrop-filter:none;-webkit-backdrop-filter:none;}}
/* Nav content sits inside the pill (no longer full-bleed to the window edges). */
.nav-inner{max-width:none;width:100%;margin:0;display:flex;align-items:center;gap:18px;height:64px;padding:0 20px;}
@media(max-width:760px){.nav-inner{padding:0 16px;}}
.brand{display:flex;align-items:center;gap:11px;}
.brand img{width:56px;height:56px;}
.brand .wm{font-family:'Sora';font-weight:800;font-size:1.5rem;letter-spacing:-.02em;}
/* Wordmark Kin defaults to the DARK-ground token, sky-400 — the wordmark lands
   on navy (footer, bg-navy blocks) more often than not, and guardian-700 is the
   ground there, so guardian would be invisible. DESIGN-Claude_Aurarides.md §26.7
   "Wordmark exception (dark)". Orbit stays amber-400 on both grounds (§1). */
.wm .k{color:var(--sky);} .wm .o{color:var(--amber);}
/* Nav pill is cream glass, i.e. a LIGHT ground, so it keeps the §1 brand pairing.
   Wins on specificity (0,3,0 vs 0,2,0), not order. */
.brand .wm .k{color:var(--guardian);} .brand .wm .o{color:var(--amber);}
.persona-toggle{display:inline-flex;background:transparent;border-radius:12px;padding:0;margin-left:6px;gap:4px;}
/* Every item in the bar — persona toggle, centre links, .lnk, .nav-pill and the
   nav-right button — is set at .92rem/700. They used to run at three different
   size/weight pairs (.86/700, .95/600, .92/700), which read as a typo in the bar. */
.persona-toggle a{font-size:.92rem;font-weight:700;color:var(--muted);padding:7px 16px;border-radius:9px;transition:background .18s,color .18s;}
.persona-toggle a:hover{color:var(--guardian);background:rgba(26,43,72,.06);}
/* Fable_5 active nav-link: dark guardian pill, white text */
.persona-toggle a.active{background:var(--guardian);color:#fff;box-shadow:var(--shadow-sm);}
.nav-center{display:flex;align-items:center;gap:4px;margin:0 auto;}
.nav-center a,.nav-center .ddt{display:inline-flex;align-items:center;gap:5px;padding:9px 14px;border-radius:11px;font-size:.92rem;font-weight:700;color:rgba(26,43,72,.74);cursor:pointer;}
.nav-center a:hover,.nav-center .ddt:hover{color:var(--guardian);background:rgba(26,43,72,.05);}
.chev{width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid currentColor;opacity:.55;transition:transform .2s;}
/* Nav dropdown menus (Products / Resources) */
.ddwrap{position:relative;display:inline-flex;}
.ddwrap::after{content:"";position:absolute;left:0;right:0;top:100%;height:14px;}  /* hover bridge over the gap */
.ddmenu{position:absolute;top:calc(100% + 12px);left:50%;transform:translateX(-50%) translateY(6px);
  min-width:196px;background:#fff;border:1px solid var(--line);border-radius:14px;
  box-shadow:0 22px 48px -18px rgba(26,43,72,.34);padding:8px;display:flex;flex-direction:column;gap:2px;
  opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,transform .18s ease;z-index:120;}
.ddwrap:hover .ddmenu,.ddwrap:focus-within .ddmenu,.ddwrap.open .ddmenu{opacity:1;visibility:visible;pointer-events:auto;transform:translateX(-50%) translateY(0);}
.nav-center .ddmenu a{display:block;width:100%;padding:9px 14px;border-radius:10px;font-size:.92rem;font-weight:600;color:var(--guardian);background:none;white-space:nowrap;}
.nav-center .ddmenu a:hover{background:rgba(26,43,72,.06);color:var(--guardian);}
.ddwrap:hover .chev,.ddwrap.open .chev{transform:rotate(180deg);}
body.kids .nav-center .ddmenu a{color:var(--guardian);}
body.kids .nav-center .ddmenu a:hover{background:rgba(26,43,72,.06);color:var(--guardian);}
.nav-right{display:flex;align-items:center;gap:10px;}
.lnk{font-size:.92rem;font-weight:700;padding:9px 12px;border-radius:10px;}
.lnk:hover{background:rgba(26,43,72,.05);}
/* Fable_5 nav buttons: rounded-rect, not pill */
.nav-pill{font-size:.92rem;font-weight:700;border:1.5px solid rgba(26,43,72,.22);padding:9px 18px;border-radius:12px;transition:background .18s,border-color .18s;}
.nav-pill:hover{background:rgba(26,43,72,.05);border-color:rgba(26,43,72,.4);}
.nav-right .btn{border-radius:12px;}
@media(max-width:1080px){.nav-center,.nav-right .lnk,.nav-right .nav-pill{display:none;}}

/* ── Mobile nav: hamburger + slide-in drawer ── */
.nav-burger{display:none;margin-left:auto;flex-direction:column;justify-content:center;gap:5px;
  width:44px;height:44px;padding:10px;border:0;background:transparent;cursor:pointer;}
.nav-burger span{display:block;height:2.5px;width:100%;border-radius:2px;background:var(--guardian);
  transition:transform .28s ease,opacity .2s ease;}
.nav-burger.open span:nth-child(1){transform:translateY(7.5px) rotate(45deg);}
.nav-burger.open span:nth-child(2){opacity:0;}
.nav-burger.open span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg);}
.nav-backdrop{position:fixed;inset:0;background:rgba(13,20,34,.42);opacity:0;visibility:hidden;
  transition:opacity .3s ease,visibility .3s ease;z-index:190;backdrop-filter:blur(2px);}
.nav-backdrop.open{opacity:1;visibility:visible;}
.nav-drawer{position:fixed;top:0;right:0;height:100%;width:min(84vw,340px);background:var(--cream);
  transform:translateX(100%);transition:transform .32s cubic-bezier(.4,0,.2,1);z-index:200;
  overflow-y:auto;box-shadow:-24px 0 60px -24px rgba(13,20,34,.5);
  padding:calc(env(safe-area-inset-top,0px) + 76px) 24px 32px;}
.nav-drawer.open{transform:none;}
.nav-drawer-inner{display:flex;flex-direction:column;gap:4px;}
.nav-drawer .nd-title{font-family:'Sora';font-weight:700;font-size:.72rem;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);margin:18px 0 6px;}
.nav-drawer .nd-title:first-child{margin-top:0;}
.nav-drawer a{display:block;padding:12px 6px;font-family:'Manrope';font-weight:600;font-size:1.05rem;
  color:var(--guardian);text-decoration:none;border-radius:12px;border-bottom:1px solid var(--line);}
.nav-drawer a:hover{background:rgba(26,43,72,.05);}
.nav-drawer a:last-child{border-bottom:0;}
body.kids .nav-drawer{background:#0B1224;box-shadow:-24px 0 60px -24px rgba(0,0,0,.7);}
body.kids .nav-drawer a{color:#fff;border-bottom-color:rgba(255,255,255,.1);}
body.kids .nav-drawer a:hover{background:rgba(255,255,255,.06);}
body.kids .nav-drawer .nd-title{color:rgba(255,255,255,.55);}
@media(max-width:880px){
  .persona-toggle,.nav-right{display:none;}
  .nav-burger{display:flex;}
}

/* ── BLOCK: rounded card on colour frame ──────────────────── */
.block{position:relative;border-radius:var(--block-r);margin:var(--frame);padding:96px 64px;overflow:hidden;}
.block-inner{max-width:var(--maxw);margin:0 auto;width:100%;}
.bg-cream{background:var(--cream);} .bg-cream2{background:var(--cream-2);}
.bg-sky{background:linear-gradient(165deg,var(--sky-100),var(--sky-50));}
.bg-amber{background:linear-gradient(165deg,#FFF1C2,#FFE59A);}
.bg-sage{background:linear-gradient(165deg,var(--sage-50),var(--sage-100));}
.bg-navy{background:linear-gradient(160deg,var(--guardian),var(--guardian-d));color:#fff;}
.bg-navy .h-section,.bg-navy .h-display{color:#fff;} .bg-navy .lede{color:rgba(255,255,255,.72);}
.bg-photo{background:#cdd8ea;}
/* Full-bleed lifestyle photo hero: school-run photograph fills the block,
   with a cream scrim weighted to the left so the dark headline stays legible
   while the photo shows through on the right behind the device + blobs. */
.bg-hero-photo{
  background:
    linear-gradient(100deg,
      rgba(253,248,240,.92) 0%,
      rgba(253,248,240,.84) 34%,
      rgba(253,248,240,.62) 50%,
      rgba(253,248,240,.20) 64%,
      rgba(247,239,221,.06) 82%,
      rgba(119,181,254,.03) 100%),
    url('/images/hero-bg.png');
  background-size:cover; background-position:center 32%;
}
/* The cream scrim thins across the copy column, so --muted (#5a6a7a) drops
   under AA by the end of a long lede line — the tail runs over the dark car.
   Same ink as the headline, and the 34%/50% scrim stops above were firmed so
   the column stays covered to where the copy actually ends. */
.bg-hero-photo .lede,.bg-hero-photo .micro{color:var(--guardian);}
@media(max-width:760px){
  .block{padding:56px 26px;border-radius:30px;margin:12px;}
  /* On narrow screens the grid stacks; darken the scrim overall so the
     stacked copy stays readable over the photo. */
  .bg-hero-photo{background:
    linear-gradient(180deg, rgba(253,248,240,.95) 0%, rgba(253,248,240,.86) 55%, rgba(253,248,240,.6) 100%),
    url('/images/hero-bg.png'); background-size:cover; background-position:center;}
}

/* Full-bleed REALISTIC photo hero (cinematic): photo fills the whole block,
   dark navy scrim weighted left+bottom so white overlaid copy stays readable.
   Swap the photo by changing --hero-photo. */
.bg-photo-hero{
  position:relative;color:#fff;
  --hero-photo:url('/images/mockups/schools/admin-dashboard.png');
  background:
    linear-gradient(100deg, rgba(6,12,22,.82) 0%, rgba(8,15,28,.62) 30%, rgba(10,18,32,.28) 48%, transparent 62%),
    linear-gradient(0deg, rgba(6,12,22,.5) 0%, transparent 36%),
    var(--hero-photo);
  background-size:cover; background-position:center 46%;
}
.bg-photo-hero .eyebrow{color:#ffd34d;} .bg-photo-hero .eyebrow::before{background:#FFBF00;}
.bg-photo-hero .h-display{color:#fff;} .bg-photo-hero .accent{color:#ffce4a;}
.bg-photo-hero .lede{color:rgba(255,255,255,.88);}
.bg-photo-hero .hero-slogan{color:#ffd34d;}
.bg-photo-hero .hero-descriptor{color:rgba(255,255,255,.6);}
.bg-photo-hero .micro{color:rgba(255,255,255,.72);}

/* ── HERO ─────────────────────────────────────────────────── */
.hero-grid{display:grid;grid-template-columns:1.04fr .96fr;gap:54px;align-items:center;}
.hero-copy .lede{margin-top:20px;}
.hero-copy .cta-row{display:flex;gap:14px;margin-top:34px;flex-wrap:wrap;}
.hero-copy .micro{margin-top:16px;font-size:.86rem;color:var(--muted);display:flex;align-items:center;gap:8px;}
.hero-media{position:relative;display:flex;justify-content:center;align-items:center;min-height:520px;}
/* Containing block for the hero badges, locked to the phone's width. Without it
   they anchor to .hero-media, which is ~250px wider on a laptop and wider still
   on a big screen, so each badge drifts further from the device as the viewport
   grows. Pinned here, they hang off the phone's own edges at every width. */
.hero-media .device-stage{position:relative;flex:none;width:300px;}
.hero-media .device-frame{position:relative;z-index:2;width:300px;padding:14px 12px;border-radius:44px;background:linear-gradient(160deg,#1A2B48,#0B1220);box-shadow:0 40px 70px rgba(26,43,72,.34),inset 0 0 0 1.5px rgba(255,255,255,.08);}
.hero-media .device-frame::before{content:"";position:absolute;top:26px;left:50%;transform:translateX(-50%);width:70px;height:6px;border-radius:9999px;background:rgba(255,255,255,.25);z-index:1;}
.hero-media .device-frame .device{display:block;width:100%;border-radius:32px;position:relative;z-index:0;filter:none;}
.hero-media .photo-card{width:100%;height:100%;border-radius:32px;overflow:hidden;box-shadow:var(--shadow-md);}
@media(max-width:880px){.hero-grid{grid-template-columns:1fr;gap:30px;}.hero-media{min-height:auto;}}

/* ── Blob badges (organic shapes) ─────────────────────────── */
.blob{position:absolute;z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;font-family:'Sora';font-weight:800;color:var(--guardian);padding:18px 22px;line-height:1.05;box-shadow:var(--shadow-sm);}
.blob.green{background:#B7E26B;border-radius:62% 38% 56% 44% / 54% 60% 40% 46%;transform:rotate(-8deg);}
.blob.amber{background:var(--amber);border-radius:50% 50% 48% 52% / 56% 44% 56% 44%;transform:rotate(7deg);font-size:.72rem;letter-spacing:.04em;}
.blob.sky{background:var(--sky);color:#fff;border-radius:58% 42% 50% 50% / 46% 56% 44% 54%;transform:rotate(-5deg);}
.blob.teal{background:var(--teal);color:#fff;border-radius:54% 46% 60% 40% / 48% 52% 48% 52%;transform:rotate(6deg);font-size:.72rem;letter-spacing:.03em;}
.blob.violet{background:#7C6CF0;color:#fff;border-radius:60% 40% 46% 54% / 52% 46% 54% 48%;transform:rotate(-6deg);font-size:.72rem;letter-spacing:.03em;}
.blob .big{font-size:1.7rem;}
.blob .sm{font-size:.74rem;font-weight:700;}
/* Rubber-stamp badge stamped over the device image (round, distressed ink) */
.stamp{position:absolute;z-index:4;width:152px;height:152px;transform:rotate(-9deg);
  filter:drop-shadow(0 8px 18px rgba(26,43,72,.32));pointer-events:none;}
.stamp svg{width:100%;height:100%;display:block;}

/* Rectangular rubber stamp, lower-right of a full-bleed photo hero. Tilted
   counter-clockwise (negative rotation) so the right edge rides HIGHER than the
   left. Ink colour is the host hero's own accent, passed in as --stamp-ink.
   Hidden under 1024px: below that the hero copy column and, on kids, the inline
   orbit graphic both reclaim the bottom-right corner. */
.stamp-rect{position:absolute;right:64px;bottom:44px;z-index:4;pointer-events:none;
  width:clamp(240px,24vw,340px);color:var(--stamp-ink,#B7E26B);opacity:.92;
  transform:rotate(-6deg);
  filter:drop-shadow(0 10px 22px rgba(0,0,0,.45));}
.stamp-rect svg{width:100%;height:auto;display:block;}
@media(max-width:1024px){.stamp-rect{display:none;}}

/* An absolute box shrink-to-fits into what is left of its containing block, and
   left:calc(100% - 20px) leaves 20px of the stage — without this every badge
   collapses to min-content and stacks its copy one word per line. */
.device-stage .blob{width:max-content;}
/* Parents hero badge placement. Each one is anchored by its INNER edge, not its
   outer one, so it laps the phone by a fixed amount whatever width the badge's
   own copy asks for: 20px puts it over the 12px bezel and 8px of screen —
   resting on the device rather than floating beside it. The stamp laps further
   because it is meant to read as stamped onto the screen. */
.device-stage .blob.green{top:-20px;left:calc(100% - 20px);}
.device-stage .blob.violet{top:150px;left:calc(100% - 20px);}
.device-stage .blob.sky{bottom:80px;left:calc(100% - 20px);}
.device-stage .blob.amber{bottom:30px;right:calc(100% - 20px);}
.device-stage .stamp{top:6px;right:calc(100% - 34px);}
/* The hero's media column is under half the block, so below 1185px there is no
   longer 133px clear between the phone and the block's right edge — where
   .block's overflow:hidden cuts — and the widest badge loses its far end. Under
   that, badges go back over the screen, anchored by their outer edge, which is
   what keeps them inside. */
@media(max-width:1200px){
  .device-stage .blob.green{left:auto;right:-24px;}
  .device-stage .blob.violet{left:auto;right:-30px;}
  .device-stage .blob.sky{left:auto;right:-26px;}
  .device-stage .blob.amber{right:auto;left:-30px;}
  .device-stage .stamp{right:auto;left:-34px;}
}

/* ── Trust band ───────────────────────────────────────────── */
.trust-band{display:flex;flex-wrap:wrap;gap:14px 40px;align-items:center;justify-content:center;}
.trust-band .item{display:flex;align-items:center;gap:9px;font-weight:700;font-size:.96rem;color:var(--guardian);}
.trust-band .item .d{width:9px;height:9px;border-radius:50%;background:var(--teal-l);}

/* ── Stats strip ──────────────────────────────────────────── */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:28px;}
.stat .n{font-family:'Sora';font-weight:800;font-size:2.6rem;color:var(--amber);line-height:1;}
.bg-navy .stat .n{color:var(--amber);}
.stat .l{font-size:.92rem;color:rgba(255,255,255,.72);margin-top:8px;}
@media(max-width:760px){.stats{grid-template-columns:repeat(2,1fr);gap:22px;}}

/* ── Section header ───────────────────────────────────────── */
.sec-head{max-width:720px;margin-bottom:48px;}
.sec-head.center{margin-left:auto;margin-right:auto;text-align:center;}
.sec-head .lede{margin-top:16px;}
.sec-head.center .lede{margin-left:auto;margin-right:auto;}

/* ── How it works — timeline carousel ─────────────────────── */
.tl-wrap{display:grid;grid-template-columns:.9fr 1.1fr;gap:56px;align-items:center;}
.tl-steps{display:flex;flex-direction:column;gap:10px;}
.tl-step{position:relative;display:flex;gap:16px;padding:18px 20px;border-radius:20px;cursor:pointer;transition:background .3s,box-shadow .3s;border:1px solid transparent;}
/* Aura-style separators + per-step progress: a thin divider sits beneath
   every step; the ACTIVE step's divider carries an animated fill that times
   the auto-advance (the single bottom bar is gone). JS drives .tl-fill. */
.tl-step::after{
  content:"";position:absolute;left:20px;right:20px;bottom:-6px;height:2px;border-radius:2px;
  background:var(--line);opacity:.85;z-index:0;}
.tl-fill{
  position:absolute;left:20px;right:20px;bottom:-6px;height:2px;border-radius:2px;
  background:var(--teal);z-index:1;transform:scaleX(0);transform-origin:left center;will-change:transform;}
/* Kids timeline runs on a dark cosmos background — lift divider + fill colours. */
body.kids .tl-step::after{background:rgba(255,255,255,.18);opacity:1;}
body.kids .tl-fill{background:#50e3c2;}
.tl-step .num{position:relative;z-index:1;width:38px;height:38px;border-radius:50%;background:var(--cream-3);color:var(--guardian);font-family:'Sora';font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .3s,color .3s;}
.tl-step .tl-t{font-family:'Sora';font-weight:700;font-size:1.12rem;}
.tl-step .tl-d{font-size:.95rem;color:var(--muted);margin-top:4px;max-width:380px;overflow:hidden;max-height:0;opacity:0;transition:max-height .4s,opacity .3s,margin .3s;}
.tl-step.active{background:#fff;box-shadow:var(--shadow-sm);border-color:var(--line);}
.tl-step.active .num{background:var(--amber);}
.tl-step.active .tl-d{max-height:120px;opacity:1;margin-top:6px;}
.tl-media{position:relative;display:flex;justify-content:center;align-items:center;min-height:660px;}
/* Each step's media is a self-contained blue card (phone rendered on blue),
   floating on the section — same treatment as the reference how-it-works. */
.tl-media img{position:absolute;width:min(88%,400px);border-radius:30px;
  box-shadow:0 44px 84px -26px rgba(26,43,72,.5),0 0 0 1px rgba(26,43,72,.05);
  opacity:0;transform:translateY(26px) scale(.97);transition:opacity .55s cubic-bezier(.16,1,.3,1),transform .55s cubic-bezier(.16,1,.3,1);}
.tl-media img.show{opacity:1;transform:none;}
.tl-ctrl{position:absolute;bottom:22px;right:22px;width:46px;height:46px;border-radius:50%;
  background:rgba(13,27,42,.55);color:#fff;border:none;font-size:1rem;display:flex;align-items:center;justify-content:center;
  cursor:pointer;z-index:6;backdrop-filter:blur(4px);transition:background .2s,transform .2s;}
.tl-ctrl:hover{background:rgba(13,27,42,.78);transform:scale(1.06);}
/* .tl-progress (old single bottom bar) removed — progress now lives under the active step. */
@media(max-width:880px){.tl-wrap{grid-template-columns:1fr;gap:30px;}.tl-media{min-height:560px;}.tl-step .tl-d{max-height:120px;opacity:1;margin-top:6px;}}

/* ── Split (alternating) ──────────────────────────────────── */
.split{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center;}
.split.rev .split-media{order:2;}
.split-media{display:flex;justify-content:center;}
.split-media .device{width:280px;border-radius:36px;filter:drop-shadow(0 40px 70px rgba(26,43,72,.3));}
.split-media .illus{width:100%;border-radius:28px;box-shadow:var(--shadow-sm);}
/* Phone mockup bleeding into a gradient panel (kids 'For grown-ups' live tracking) */
.split-media .phone-stage{position:relative;width:100%;max-width:420px;margin:0 auto;height:430px;
  border-radius:30px;overflow:hidden;
  background:linear-gradient(180deg,#1A2B48 0%,#4C5C86 46%,#9C93A8 74%,var(--cream) 100%);}
.split-media .phone-mock{position:absolute;left:50%;top:44px;transform:translateX(-50%);
  width:252px;background:#0E1422;border-radius:40px 40px 0 0;padding:11px 11px 0;
  box-shadow:0 28px 60px -22px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.06) inset;}
.split-media .phone-notch{position:absolute;top:21px;left:50%;transform:translateX(-50%);
  width:84px;height:23px;background:#0E1422;border-radius:13px;z-index:3;}
.split-media .phone-mock img{display:block;width:100%;border-radius:30px 30px 0 0;}
@media(max-width:880px){.split-media .phone-stage{max-width:360px;height:400px;}}
.split-text .lede{margin-top:14px;}
.checks{list-style:none;margin-top:24px;display:flex;flex-direction:column;gap:12px;}
.checks li{display:flex;gap:12px;font-size:1.02rem;align-items:flex-start;}
.checks .c{width:24px;height:24px;border-radius:50%;background:var(--teal);color:#fff;font-size:.8rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;}
@media(max-width:880px){.split{grid-template-columns:1fr;gap:30px;}.split.rev .split-media{order:0;}}

/* ── Feature cards ────────────────────────────────────────── */
.feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;}
.feat-card{background:#fff;border:1px solid var(--line);border-radius:26px;padding:28px;box-shadow:var(--shadow-sm);}
.feat-card .ic{width:54px;height:54px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:1.6rem;background:var(--sky-100);}
.feat-card h3{font-family:'Sora';font-weight:700;font-size:1.2rem;margin:16px 0 8px;}
.feat-card p{color:var(--muted);font-size:.98rem;line-height:1.6;}
@media(max-width:880px){.feat-grid{grid-template-columns:1fr;}}

/* ── Zone/persona cards ───────────────────────────────────── */
.cards-3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;}
@media(max-width:880px){.cards-3{grid-template-columns:1fr;}}
.cards-2{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;}
@media(max-width:880px){.cards-2{grid-template-columns:1fr;}}
.vp-tag{display:inline-block;background:var(--sky-100);color:var(--guardian);font-size:.7rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;padding:5px 12px;border-radius:999px;margin-bottom:14px;}

/* ── Comparison table ─────────────────────────────────────── */
.cmp{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border-radius:26px;overflow:hidden;box-shadow:var(--shadow-sm);}
.cmp th,.cmp td{padding:18px 20px;text-align:center;border-bottom:1px solid var(--line);}
.cmp th:first-child,.cmp td:first-child{text-align:left;font-weight:700;}
.cmp thead th{font-family:'Sora';font-weight:800;background:var(--cream-2);font-size:1rem;}
.cmp thead .own{background:var(--amber);color:var(--guardian);}
.cmp .own{background:rgba(255,191,0,.08);font-weight:800;}
.cmp .yes{color:var(--teal);font-weight:800;font-size:1.1rem;} .cmp .no{color:#c2c8d0;}
.cmp tr:last-child td{border-bottom:none;}
/* On narrow screens the 4-column table can't shrink to fit; let it scroll
   horizontally inside a wrapper instead of being clipped by the block. */
.cmp-wrap{width:100%;}
@media(max-width:760px){
  .cmp-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:6px;
    -webkit-mask-image:linear-gradient(90deg,#000 92%,transparent);mask-image:linear-gradient(90deg,#000 92%,transparent);}
  .cmp{min-width:520px;}
}

/* ── Pricing ──────────────────────────────────────────────── */
.toggle{display:inline-flex;background:#fff;border:1px solid var(--line);border-radius:999px;padding:5px;gap:4px;box-shadow:var(--shadow-sm);}
.toggle button{font:inherit;font-weight:700;font-size:.9rem;border:none;background:transparent;padding:10px 22px;border-radius:999px;cursor:pointer;color:var(--muted);}
.toggle button.active{background:var(--guardian);color:#fff;}
.price-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;align-items:start;margin-top:40px;}
.price-card{background:#fff;border:1px solid var(--line);border-radius:30px;padding:32px 28px;position:relative;box-shadow:var(--shadow-sm);}
.price-card.feat{border:2px solid var(--teal);box-shadow:var(--shadow-md);transform:translateY(-8px);}
.price-card.prem{background:linear-gradient(165deg,#13243f,#0c1c33);color:#fff;border:none;}
.p-badge{position:absolute;top:-13px;left:28px;background:var(--teal);color:#fff;font-size:.7rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;padding:6px 14px;border-radius:999px;}
.p-badge.amber{background:var(--amber);color:var(--guardian);}
.save{display:inline-block;background:var(--sage-100);color:#3c5a2a;font-size:.72rem;font-weight:800;padding:4px 10px;border-radius:999px;margin-left:8px;}
.prem .save{background:rgba(255,191,0,.2);color:var(--amber);}
.pc-name{font-family:'Sora';font-weight:800;font-size:1.25rem;}
.pc-price{font-family:'Sora';font-weight:800;font-size:2.7rem;margin-top:12px;}
.pc-price small{font-size:.95rem;font-weight:600;color:var(--muted);} .prem .pc-price small{color:rgba(255,255,255,.6);}
.pc-year{font-size:.82rem;font-weight:600;color:var(--muted);margin-top:5px;} .prem .pc-year{color:rgba(255,255,255,.6);}
.pc-tag{font-size:.95rem;color:var(--muted);margin-top:6px;} .prem .pc-tag{color:rgba(255,255,255,.7);}
.pc-soon{display:inline-block;vertical-align:middle;margin-left:10px;padding:4px 9px;border:1px solid rgba(255,255,255,.34);border-radius:999px;font-family:'Manrope',sans-serif;font-size:.62rem;font-weight:800;letter-spacing:.11em;text-transform:uppercase;color:rgba(255,255,255,.78);}
.pc-feats{list-style:none;margin:22px 0;display:flex;flex-direction:column;gap:11px;font-size:.96rem;}
.pc-feats li{display:flex;gap:9px;} .pc-feats .c{color:var(--teal);font-weight:800;} .prem .pc-feats .c{color:var(--amber);}
.pc-cta{display:block;text-align:center;padding:14px;border-radius:999px;font-weight:700;}
.pc-cta.ghost{border:1.5px solid rgba(26,43,72,.2);} .pc-cta.solid{background:var(--teal);color:#fff;} .pc-cta.amber{background:var(--amber);color:var(--guardian);}
.pc-cta.dark{background:var(--guardian);color:#fff;}
@media(max-width:880px){.price-grid{grid-template-columns:1fr;}.price-card.feat{transform:none;}}

/* Founding-offer badge on the Orbit Free card. Family already owns the teal
   badge and Plus the amber one, so the free term gets the navy/amber pairing —
   reads as a seal rather than a third product label. */
.p-badge.founding{background:var(--guardian);color:var(--amber);}

/* The feedback trade, sat between the feature list and the CTA. Sage is used
   nowhere else on this card, which is the point: it marks the one line that is
   an exchange rather than an inclusion. */
.pc-trade{margin:0 0 20px;padding:13px 15px;border-radius:14px;background:var(--sage-50);border-left:3px solid var(--sage);font-size:.9rem;line-height:1.5;color:var(--muted);}
.pc-trade strong{display:block;font-family:'Sora';font-weight:800;font-size:.92rem;color:var(--ink);margin-bottom:3px;}

/* ── Founding-offer steps ──────────────────────────────────────────
   Same three columns and 22px gutter as .price-grid below, so each step
   sits directly over its card. Breaks out of the 720px .sec-head measure. */
.ff-steps{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:22px;text-align:left;}
.ff-step{display:flex;gap:14px;}
.ff-n{width:32px;height:32px;flex-shrink:0;border-radius:50%;background:var(--cream-3);color:var(--guardian);font-family:'Sora';font-weight:800;font-size:.95rem;display:flex;align-items:center;justify-content:center;}
.ff-step p{font-size:.98rem;line-height:1.6;color:var(--muted);}
.ff-close{max-width:640px;margin:32px auto 0;text-align:center;font-size:1.05rem;line-height:1.6;}
@media(max-width:880px){.ff-steps{grid-template-columns:1fr;gap:18px;}}

/* Founding-offer terms, closing the pricing section. */
.ff-fine{max-width:640px;margin:34px auto 0;text-align:center;font-size:.78rem;line-height:1.6;color:var(--muted);}

/* ── Disclaimer + testimonials ────────────────────────────── */
.disc{display:inline-flex;align-items:center;gap:8px;font-size:.78rem;font-weight:700;color:#9a6a00;background:#fff5da;border:1px solid #ffe6a8;padding:6px 14px;border-radius:999px;}
.testi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;}
.testi{background:#fff;border:1px solid var(--line);border-radius:26px;padding:26px;box-shadow:var(--shadow-sm);}
.testi .stars{color:var(--amber);font-size:1.05rem;} .testi p{margin:12px 0 18px;line-height:1.6;}
.testi .who{display:flex;align-items:center;gap:11px;} .testi .av{width:42px;height:42px;border-radius:50%;background:var(--sky-100);display:flex;align-items:center;justify-content:center;font-weight:800;}
.testi .who .n{font-weight:700;font-size:.95rem;} .testi .who .r{font-size:.82rem;color:var(--muted);}
@media(max-width:880px){.testi-grid{grid-template-columns:1fr;}}

/* ── FAQ ──────────────────────────────────────────────────── */
.faq{max-width:840px;margin:0 auto;}
.faq details{background:#fff;border:1px solid var(--line);border-radius:18px;margin-bottom:14px;box-shadow:var(--shadow-sm);}
.faq summary{cursor:pointer;list-style:none;padding:22px 24px;font-family:'Sora';font-weight:700;font-size:1.1rem;display:flex;justify-content:space-between;gap:16px;align-items:center;}
.faq summary::-webkit-details-marker{display:none;}
.faq summary::after{content:"+";font-size:1.6rem;color:var(--teal);font-weight:300;line-height:1;}
.faq details[open] summary::after{content:"\2013";}
.faq p{padding:0 24px 22px;color:var(--muted);line-height:1.7;}

/* ── CTA + app badges ─────────────────────────────────────── */
.cta-band{text-align:center;}
.badges{display:flex;gap:16px;justify-content:center;margin-top:30px;flex-wrap:wrap;}
.app-badge{display:flex;align-items:center;gap:12px;background:#fff;color:var(--guardian);border-radius:16px;padding:12px 22px;box-shadow:var(--shadow-sm);}
.app-badge img{width:26px;height:26px;flex:none;}
.app-badge .t{font-size:.68rem;color:var(--muted);font-weight:600;} .app-badge .l{font-family:'Sora';font-weight:800;font-size:1.05rem;}

/* ── Footer ───────────────────────────────────────────────── */
.foot{background:var(--guardian-d);color:#fff;margin:var(--frame);border-radius:var(--block-r);padding:64px 64px 36px;}
.foot-inner{max-width:var(--maxw);margin:0 auto;}
.foot-top{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:34px;}
.foot-brand{display:flex;align-items:center;gap:11px;margin-bottom:2px;}
.foot-globe{width:34px;height:34px;flex:none;}
.foot .wm{font-family:'Sora';font-weight:800;font-size:1.4rem;} .foot .wm .o{color:var(--amber);}
.foot p.tg{color:rgba(255,255,255,.6);margin-top:12px;max-width:280px;line-height:1.6;}
.foot h5{font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.5);margin-bottom:16px;}
.foot ul{list-style:none;display:flex;flex-direction:column;gap:10px;}
.foot a{color:rgba(255,255,255,.78);font-size:.94rem;} .foot a:hover{color:#fff;}
.foot-badges{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px;}
/* Badges are placeholders until the apps ship — no href, so the reason rides on
   a hover tip. Pointer devices only: touch has no hover and gets nothing. */
/* The apps are not published yet. This used to say "Coming soon" in a tooltip
   revealed on :hover, which no touch device can fire — so on a phone the badges
   read as live store links. Stated as a persistent line under the row instead. */
.app-badge[data-tip]{position:relative;cursor:default;}
.foot-badges::after{content:attr(data-badges-note);flex-basis:100%;margin-top:2px;font-size:.78rem;font-weight:600;letter-spacing:.01em;color:rgba(255,255,255,.5);}
.foot-badges .app-badge{background:rgba(255,255,255,.06);color:#fff;} .foot-badges .app-badge .t{color:rgba(255,255,255,.55);}
.foot-bottom{border-top:1px solid rgba(255,255,255,.12);margin-top:40px;padding-top:20px;font-size:.84rem;color:rgba(255,255,255,.5);}
@media(max-width:880px){
  .foot{padding:48px 30px 30px;}
  /* minmax(0,1fr) stops the app-badges' min-width from blowing out one column;
     the brand block spans the full width above the link groups. */
  .foot-top{grid-template-columns:repeat(2,minmax(0,1fr));gap:30px 24px;}
  .foot-top>div:first-child{grid-column:1/-1;}
}
@media(max-width:480px){.foot-top{grid-template-columns:1fr;gap:26px;}}

/* ── Scroll reveal ────────────────────────────────────────── */
.reveal{opacity:0;transform:translateY(34px);transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1);}
.reveal.vis{opacity:1;transform:none;}
.reveal.d1{transition-delay:.1s;}.reveal.d2{transition-delay:.2s;}.reveal.d3{transition-delay:.3s;}.reveal.d4{transition-delay:.4s;}

/* ── Cosmic (kids) overrides ──────────────────────────────── */
body.kids{background:#02050f;}
/* Kids nav matches Fable_5: stays light glass (no dark flip); only the
   active "Kids" pill flips — guardian-900 bg + sky text (Fable .nl-kids). */
body.kids .persona-toggle a.active{background:var(--guardian-d);color:var(--sky-300);}
.bg-cosmos{background:radial-gradient(ellipse at 50% 0%,#142042,#0a1024 55%,#05080f);color:#fff;position:relative;}
.bg-cosmos .h-display,.bg-cosmos .h-section,.bg-cosmos .h-3{color:#fff;}
.bg-cosmos .lede{color:rgba(255,255,255,.74);}
.bg-cosmos .eyebrow{color:#50e3c2;}
.bg-cosmos-deep{background:linear-gradient(180deg,#05080f,#02050f);color:#fff;}
.stars{position:absolute;inset:0;pointer-events:none;background-image:
  radial-gradient(1.6px 1.6px at 12% 18%,rgba(255,255,255,.85),transparent),
  radial-gradient(1.5px 1.5px at 68% 12%,rgba(185,164,255,.9),transparent),
  radial-gradient(1.5px 1.5px at 86% 38%,rgba(80,227,194,.8),transparent),
  radial-gradient(1.3px 1.3px at 28% 62%,rgba(255,255,255,.6),transparent),
  radial-gradient(1.4px 1.4px at 52% 84%,rgba(255,255,255,.55),transparent),
  radial-gradient(1.4px 1.4px at 90% 72%,rgba(185,164,255,.7),transparent);}
.kids-accent{color:#50e3c2;}

/* Kids hero — nebula texture over the cosmos for depth */
.bg-cosmos-hero{color:#fff;position:relative;
  background:
    radial-gradient(46% 38% at 78% 16%, rgba(141,107,255,.34), transparent 70%),
    radial-gradient(40% 34% at 16% 72%, rgba(80,227,194,.22), transparent 72%),
    radial-gradient(60% 50% at 50% 120%, rgba(119,181,254,.18), transparent 70%),
    radial-gradient(ellipse at 50% 0%, #16224a, #0a1024 52%, #05080f 100%);}
.bg-cosmos-hero .h-display,.bg-cosmos-hero .h-section{color:#fff;}
.bg-cosmos-hero .lede{color:rgba(255,255,255,.76);}
.bg-cosmos-hero .eyebrow{color:#50e3c2;}
.bg-cosmos-hero .hero-slogan{color:#50e3c2;}
.bg-cosmos-hero .hero-descriptor{color:rgba(255,255,255,.6);}

/* Animated orbit system (kids hero centrepiece) */
.orbit-system{position:relative;width:min(460px,90%);aspect-ratio:1/1;margin:0 auto;display:flex;align-items:center;justify-content:center;}
.orbit-system .o-ring{position:absolute;border:1.4px dashed rgba(255,255,255,.18);border-radius:50%;}
.orbit-system .r1{width:38%;height:38%;animation:kn-spin 16s linear infinite;}
.orbit-system .r2{width:66%;height:66%;animation:kn-spin 26s linear infinite;}
.orbit-system .r3{width:100%;height:100%;animation:kn-spin 42s linear infinite;}
.orbit-system .sat{position:absolute;top:-26px;left:calc(50% - 26px);width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.5rem;background:rgba(8,12,26,.6);box-shadow:0 0 18px rgba(185,164,255,.5),0 0 0 1px rgba(255,255,255,.15) inset;}
.orbit-system .r1 .sat{animation:kn-spin-rev 16s linear infinite;}
.orbit-system .r2 .sat{animation:kn-spin-rev 26s linear infinite;box-shadow:0 0 18px rgba(80,227,194,.5),0 0 0 1px rgba(255,255,255,.15) inset;}
.orbit-system .r3 .sat{animation:kn-spin-rev 42s linear infinite;box-shadow:0 0 18px rgba(255,191,0,.5),0 0 0 1px rgba(255,255,255,.15) inset;}
/* Sun = soft glow/haze, no hard-edged disc */
.orbit-system .sun{position:absolute;width:170px;height:170px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle, rgba(255,243,205,.92) 0%, rgba(255,206,90,.5) 20%, rgba(255,168,40,.24) 40%, rgba(255,150,0,.08) 58%, transparent 72%);
  animation:kn-pulse 5s ease-in-out infinite;}
.orbit-system .sun-core{position:absolute;width:46px;height:46px;border-radius:50%;
  background:radial-gradient(circle at 44% 40%, #fff7e0, #ffd75e 60%, rgba(255,191,0,.4));
  box-shadow:0 0 30px 6px rgba(255,200,80,.55);}
.orbit-system .sun-lbl{position:absolute;bottom:-6px;left:50%;transform:translateX(-50%);font-family:'Sora';font-weight:700;font-size:.64rem;color:#fff;background:rgba(5,8,15,.55);padding:3px 9px;border-radius:999px;white-space:nowrap;}
@keyframes kn-spin{to{transform:rotate(360deg);}}
@keyframes kn-spin-rev{to{transform:rotate(-360deg);}}
@keyframes kn-pulse{0%,100%{transform:scale(1);}50%{transform:scale(1.06);}}
@media(prefers-reduced-motion:reduce){
  .orbit-system .o-ring,.orbit-system .sat,.orbit-system .sun{animation:none !important;}
  .et-ship,.tp-ship,.et-float{animation:none !important;}
}

/* ── Kids hero splash stage ───────────────────────────────────
   Bubbled spaceships (crews) orbiting the sun as a nebula
   background, top-right; a parent on Earth tracking the ride on
   a phone, bottom-left. */
.kids-hero-stage{position:relative;overflow:hidden;min-height:520px;aspect-ratio:1376/694;display:flex;align-items:center;}
.kids-hero-stage .h-display{font-size:clamp(2.3rem,4.4vw,3.7rem);}
/* Photoreal hero background (Gemini render) + left-weighted scrim for readable copy.
   The photo carries the sun, Earth and the driving car, so the CSS orbit + CSS planet
   are retired on this hero (kept in the stylesheet, just hidden here). */
.bg-cosmos-hero.kids-hero-stage{
  background:
    radial-gradient(120% 108% at -6% 30%, rgba(5,8,15,.95) 0%, rgba(6,10,22,.72) 26%, rgba(8,14,30,.34) 47%, rgba(8,14,30,.08) 64%, transparent 78%),
    url('/images/mockups/kids/Hero.webp');
  background-size:cover; background-position:center center; background-repeat:no-repeat;}
.kids-hero-stage .kids-orbit-bg{display:none;}
.kids-hero-stage .earth-tracker .earth{display:none;}
.kids-orbit-bg{position:absolute;top:34px;right:28px;width:min(500px,44vw);height:min(500px,44vw);pointer-events:none;z-index:1;}
.kids-orbit-bg .orbit-system{width:100%;height:100%;}
/* bubbled spaceship satellites */
.orbit-system .sat.bubble{
  background:radial-gradient(circle at 34% 28%, rgba(255,255,255,.6), rgba(119,181,254,.30) 58%, rgba(80,227,194,.18));
  border:1px solid rgba(255,255,255,.5);
  box-shadow:0 0 20px rgba(141,107,255,.55), inset 0 0 14px rgba(255,255,255,.3);}
.orbit-system .sat.bubble .car{width:34px;height:auto;display:block;filter:drop-shadow(0 1px 2px rgba(0,0,0,.45));}
.kids-hero-stage .block-inner{position:relative;z-index:3;}
.kids-hero-stage .hero-copy{max-width:620px;}

/* Earth + parent tracker, bottom-left */
.earth-tracker{position:absolute;left:0;bottom:0;width:480px;height:420px;z-index:2;pointer-events:none;}
.earth-tracker .earth{position:absolute;left:-90px;bottom:-200px;width:420px;height:420px;border-radius:50%;
  background:radial-gradient(circle at 38% 30%, #b8dcff 0%, #5a93e6 48%, #2c5bb0 100%);
  box-shadow:0 -10px 70px rgba(119,181,254,.5), inset -26px -26px 70px rgba(0,0,0,.35), inset 14px 14px 50px rgba(255,255,255,.25);}
.earth-tracker .earth::after{content:"";position:absolute;inset:0;border-radius:50%;
  background:radial-gradient(40% 26% at 60% 36%, rgba(135,169,107,.7), transparent 70%),
            radial-gradient(30% 20% at 32% 60%, rgba(135,169,107,.6), transparent 70%);}
.tracker-phone{position:absolute;left:66px;bottom:46px;width:210px;border-radius:22px;padding:12px;
  background:linear-gradient(165deg,#13243f,#0b1830);border:1px solid rgba(255,255,255,.14);
  box-shadow:0 26px 50px -18px rgba(0,0,0,.6); animation:et-float 5s ease-in-out infinite;}
@keyframes et-float{0%,100%{transform:translateY(0) rotate(-3deg);}50%{transform:translateY(-10px) rotate(-3deg);}}
.tp-top{display:flex;align-items:center;gap:7px;font-size:.66rem;font-weight:800;color:#50e3c2;text-transform:uppercase;letter-spacing:.06em;}
.tp-top .d{width:7px;height:7px;border-radius:50%;background:#50e3c2;box-shadow:0 0 8px #50e3c2;}
.tp-map{position:relative;height:104px;border-radius:14px;margin:8px 0;overflow:hidden;
  background:radial-gradient(circle at 70% 20%, rgba(80,227,194,.18), transparent 60%),linear-gradient(160deg,#1a2b48,#0e1c32);}
.tp-map svg{position:absolute;inset:0;width:100%;height:100%;}
.tp-sun{position:absolute;right:8px;top:6px;width:32px;height:32px;border-radius:50%;
  background:radial-gradient(circle, rgba(255,240,185,.95), rgba(255,198,72,.5) 42%, transparent 72%);}
.tp-home{position:absolute;left:10px;bottom:10px;width:15px;height:15px;border-radius:50%;
  background:radial-gradient(circle at 38% 32%, #bcdcff, #4f86d8 70%);box-shadow:0 0 8px rgba(120,170,255,.6);}
.tp-car{position:absolute;left:88px;top:42px;font-size:1.1rem;filter:drop-shadow(0 2px 5px rgba(0,0,0,.55));animation:et-ship 3s ease-in-out infinite;}
@keyframes et-ship{0%,100%{transform:translate(0,0);}50%{transform:translate(-3px,3px);}}
.tp-eta{font-size:.72rem;color:#fff;font-weight:600;}
.tp-eta b{color:#50e3c2;}
@media(max-width:980px){
  .kids-orbit-bg{position:relative;top:auto;right:auto;width:min(420px,80vw);height:min(420px,80vw);margin:30px auto 0;max-width:none;}
  .earth-tracker{display:none;}
  /* aspect-ratio + min-height derives width (520*1376/694≈1031px), which on a
     phone forces a desktop-width hero and disables every mobile media query.
     Drop the ratio so the hero sizes by its content on small screens. */
  .kids-hero-stage{display:block;aspect-ratio:auto;min-height:0;padding-top:96px;padding-bottom:40px;}
}

body.kids .feat-card{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.12);}
body.kids .feat-card h3{color:#fff;} body.kids .feat-card p{color:rgba(255,255,255,.66);}
body.kids .feat-card .ic{background:rgba(80,227,194,.16);}

/* ── Blog ─────────────────────────────────────────────────── */
.blog-head{max-width:680px;}
.post-cat{display:inline-block;font-family:'Sora';font-weight:700;font-size:.7rem;letter-spacing:.07em;text-transform:uppercase;color:var(--teal);background:rgba(0,128,128,.09);padding:5px 11px;border-radius:999px;}
.blog-featured{display:grid;grid-template-columns:1.12fr .88fr;background:#fff;border:1px solid var(--line);border-radius:26px;overflow:hidden;box-shadow:var(--shadow-sm);text-decoration:none;transition:transform .25s,box-shadow .25s;}
.blog-featured:hover{transform:translateY(-4px);box-shadow:0 30px 60px -26px rgba(26,43,72,.34);}
.blog-featured .bf-media{min-height:330px;background-size:cover;background-position:center;}
.blog-featured .bf-body{padding:40px 44px;display:flex;flex-direction:column;justify-content:center;gap:14px;}
.blog-featured h2{font-family:'Sora';font-weight:800;font-size:clamp(1.5rem,2.3vw,2.05rem);line-height:1.13;color:var(--guardian);}
.blog-featured p{color:var(--muted);font-size:1.02rem;line-height:1.55;}
.post-meta{font-size:.82rem;color:var(--muted);font-weight:600;}
.blog-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;margin-top:30px;}
.post-card{display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:20px;overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .25s,box-shadow .25s;text-decoration:none;}
.post-card:hover{transform:translateY(-6px);box-shadow:0 30px 58px -26px rgba(26,43,72,.34);}
.post-card .pc-media{height:198px;background-size:cover;background-position:center;}
.post-card .pc-body{padding:20px 22px 24px;display:flex;flex-direction:column;gap:10px;flex:1;}
.post-card h3{font-family:'Sora';font-weight:700;font-size:1.14rem;line-height:1.22;color:var(--guardian);}
.post-card p{font-size:.93rem;color:var(--muted);line-height:1.5;flex:1;}
.post-card .post-meta{margin-top:2px;}
/* Article */
.article{max-width:760px;margin:0 auto;}
.article .art-hero{height:380px;border-radius:24px;background-size:cover;background-position:center;}
.article h1{font-family:'Sora';font-weight:800;font-size:clamp(1.8rem,3.3vw,2.6rem);line-height:1.12;color:var(--guardian);margin:14px 0 10px;}
.prose{color:#33405a;font-size:1.06rem;line-height:1.72;margin-top:28px;}
.prose h2{font-family:'Sora';font-weight:700;font-size:1.38rem;color:var(--guardian);margin:30px 0 12px;}
.prose p{margin:0 0 16px;}
.prose ul{margin:0 0 16px;padding-left:22px;}
.prose li{margin:0 0 8px;}
.prose strong{color:var(--guardian);}
.art-note{background:var(--cream-2,#f7efdd);border:1px solid var(--line);border-radius:16px;padding:16px 20px;font-size:.9rem;color:var(--muted);margin:26px 0;}
.back-link{display:inline-flex;align-items:center;gap:6px;font-weight:700;color:var(--teal);text-decoration:none;font-size:.92rem;}
@media(max-width:880px){.blog-featured{grid-template-columns:1fr;}.blog-featured .bf-media{min-height:220px;}.blog-grid{grid-template-columns:1fr;}.article .art-hero{height:240px;}}

/* ── Desktop-screenshot how-it-works (schools & operators) + framed console ── */
.tl-wrap.desk{grid-template-columns:.84fr 1.16fr;align-items:center;}
.tl-wrap.desk .tl-media{min-height:0;display:block;}
/* Show every step's description (no accordion) in the desk variant: the steps
   column stays a constant height, so the section can't resize as the carousel
   auto-advances — which was shifting the page vertically every ~4s. */
.tl-wrap.desk .tl-step .tl-d{max-height:none;opacity:1;margin-top:6px;}
.tl-screen{position:relative;border-radius:14px;overflow:hidden;background:#fff;
  box-shadow:0 34px 80px -26px rgba(13,27,42,.6),0 0 0 1px rgba(26,43,72,.14);}
.tl-screen .frame{position:relative;aspect-ratio:1440/940;background:#fff;border-radius:14px;}
.tl-screen .frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:top left;
  border-radius:0;opacity:0;transition:opacity .55s ease;}
.tl-screen .frame img.show{opacity:1;}
.tl-screen.solo .frame img{opacity:1;position:relative;}
.tl-wrap.desk .tl-ctrl{bottom:18px;right:18px;}
@media(max-width:880px){.tl-wrap.desk{grid-template-columns:1fr;gap:26px;}}

/* ── Blog card-slider (center-active, vev-style) ── */
.blog-carousel{position:relative;overflow:hidden;margin-top:34px;padding:38px 0;}
.bc-track{display:flex;gap:26px;align-items:center;will-change:transform;
  transition:transform .62s cubic-bezier(.22,1,.36,1);}
.blog-carousel .post-card{flex:0 0 clamp(264px,36vw,360px);display:flex;
  opacity:.42;transform:scale(.84);
  transition:transform .62s cubic-bezier(.22,1,.36,1),opacity .5s ease,box-shadow .5s ease;
  will-change:transform,opacity;}
.blog-carousel .post-card.active{opacity:1;transform:scale(1.05);z-index:3;
  box-shadow:0 46px 84px -30px rgba(26,43,72,.46);}
.blog-carousel .post-card:not(.active){pointer-events:none;}
.blog-carousel .post-card.active:hover{transform:scale(1.07);}
.bc-dots{display:flex;justify-content:center;gap:8px;margin-top:14px;}
.bc-dots button{width:9px;height:9px;border-radius:50%;border:0;padding:0;cursor:pointer;background:rgba(26,43,72,.2);transition:background .25s,width .25s;}
.bc-dots button.on{background:var(--teal);width:26px;border-radius:6px;}
@media(max-width:880px){
  .blog-carousel{padding:26px 0;}
  .blog-carousel .post-card{flex:0 0 80vw;transform:scale(.86);}
  .blog-carousel .post-card.active{transform:scale(1);}
  .blog-carousel .post-card.active:hover{transform:scale(1);}
}
/* kids dark theme */
body.kids .blog-carousel .post-card{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.12);}
body.kids .blog-carousel .post-card h3{color:#fff;}
body.kids .blog-carousel .post-card p{color:rgba(255,255,255,.66);}
body.kids .bc-dots button{background:rgba(255,255,255,.25);}
body.kids .bc-dots button.on{background:#50e3c2;}

/* ===================================================================
   Website lead forms — registration + feedback (mockup2, migration 066)
   =================================================================== */
/* minmax(0,…) not 1fr, on BOTH tracks. A bare `1fr` is `minmax(auto,1fr)`, and
   that auto floor is the item's min-content width — a grid track will happily
   grow past its container rather than shrink below it. The floor here is set by
   the Turnstile widget, which reports a 300px MIN-CONTENT contribution:

       300 (widget) + 26x2 (card padding) + 1x2 (card border) = 354px

   which is what the track resolved to inside a 335px column at a 375px
   viewport. The card overflowed 19px to the right and `.block{overflow:hidden}`
   clipped it — so the form appeared cut off down its right edge with no
   scrollbar to reveal it. minmax(0,…) lets the track shrink to the container.

   That 300px is only an intrinsic-sizing contribution. The widget itself lays
   out fluidly (226px at a 320px viewport), so this one change is the whole fix —
   nothing needs to scale or be given a mobile size. Verified by hiding every
   .cf-turnstile: the track drops 354 -> 335 exactly, and back. */
.ko-register-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.9fr);gap:44px;align-items:start;}
@media(max-width:900px){.ko-register-grid{grid-template-columns:minmax(0,1fr);gap:28px;}}
.ko-aside{display:flex;flex-direction:column;gap:22px;}

.ko-card{background:#fff;border-radius:26px;padding:clamp(26px,4vw,40px);box-shadow:var(--shadow-md);border-top:4px solid var(--sage);}
.ko-card.amber{border-top-color:var(--amber);}
.ko-card.teal{border-top-color:var(--teal);}
.ko-card .ko-title{font-family:'Sora';font-weight:800;font-size:1.5rem;letter-spacing:-.02em;color:var(--ink);}
.ko-card .ko-lede{margin-top:8px;font-size:1rem;line-height:1.6;color:var(--muted);max-width:52ch;}
/* clamp()'s 4vw never bites on a phone (4vw of 375 = 15px, below the 26px floor),
   so every phone got the full 26px — 52px of a 375px screen spent on padding.
   18px keeps the card feeling like a card and gives the fields real width. */
@media(max-width:560px){.ko-card{padding:18px;}}

.ko-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:22px;}
.ko-grid .col-2{grid-column:1 / -1;}
@media(max-width:560px){.ko-grid{grid-template-columns:minmax(0,1fr);}}
.field{display:flex;flex-direction:column;gap:7px;position:relative;}
.field label{font-size:.82rem;font-weight:800;letter-spacing:.02em;color:var(--ink);}
.field input,.field select,.field textarea{
  width:100%;font:inherit;font-size:.98rem;color:var(--ink);background:#fff;
  border:1.5px solid var(--line);border-radius:14px;padding:12px 14px;transition:border-color .18s,box-shadow .18s;}
.field textarea{min-height:104px;resize:vertical;}
.field input::placeholder,.field textarea::placeholder{color:#9aa7b4;}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--teal);box-shadow:0 0 0 3px rgba(0,128,128,.14);}
.field input[aria-invalid],.field textarea[aria-invalid]{border-color:#C0392B;box-shadow:0 0 0 3px rgba(192,57,43,.12);}
.ko-err{font-size:.78rem;font-weight:700;color:#C0392B;}

.ko-consent{display:flex;align-items:flex-start;gap:11px;margin-top:18px;font-size:.84rem;line-height:1.5;color:var(--muted);cursor:pointer;}
.ko-consent input{width:18px;height:18px;margin-top:2px;accent-color:var(--teal);flex-shrink:0;}
.ko-hp{position:absolute!important;left:-9999px!important;width:1px;height:1px;opacity:0;}
/* Turnstile widget, injected above the submit row of every lead form. Only the
   spacing is ours — sizing is data-size="flexible" on the widget itself
   (Cloudflare's supported responsive mode), not a CSS transform. A transform
   scale on Cloudflare's own iframe interfered with its internal size/visibility
   negotiation and could stall the challenge — removed 2026-08-29. */
.cf-turnstile{
  margin-top:18px;
}

.ko-actions{display:flex;align-items:center;gap:16px;margin-top:24px;flex-wrap:wrap;}
.ko-secure{display:inline-flex;align-items:center;gap:7px;font-size:.78rem;font-weight:800;color:var(--muted);}
.ko-secure::before{content:"🔒";font-size:.9rem;}
.ko-banner{margin-top:16px;padding:13px 16px;border-radius:12px;background:rgba(192,57,43,.08);color:#C0392B;font-size:.86rem;font-weight:700;}

/* feedback stars */
.ko-stars{display:flex;gap:6px;margin:16px 0 4px;}
.ko-star{font-size:1.5rem;line-height:1;background:none;border:none;cursor:pointer;color:var(--cream-3);padding:2px;transition:color .12s,transform .12s;}
.ko-star.on{color:var(--amber);}
.ko-star:hover{transform:scale(1.12);}

/* success state */
.ko-success{background:#fff;border-radius:26px;padding:clamp(28px,4vw,44px);text-align:center;box-shadow:var(--shadow-md);border-top:4px solid var(--teal);}
.ko-success-mark{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:50%;background:#E6F2F2;color:var(--teal);font-size:1.5rem;font-weight:800;}
.ko-success h3{font-family:'Sora';font-weight:800;font-size:1.5rem;margin-top:16px;color:var(--ink);}
.ko-success p{margin-top:10px;font-size:1rem;color:var(--muted);max-width:46ch;margin-inline:auto;line-height:1.6;}
.ko-ref{margin-top:14px;font-size:.75rem;letter-spacing:.08em;color:#9aa7b4;font-weight:700;}

/* "Run a car company?" aside card */
.ko-mini{background:var(--cream);border-radius:20px;padding:24px;border:1px solid var(--line);}
.ko-mini .ic{font-size:1.4rem;}
.ko-mini h3{font-family:'Sora';font-weight:800;font-size:1.1rem;margin-top:10px;color:var(--ink);}
.ko-mini p{font-size:.92rem;color:var(--muted);margin-top:8px;line-height:1.55;}
.ko-mini a{display:inline-block;margin-top:12px;font-weight:800;font-size:.9rem;color:var(--amber-d);text-decoration:none;}
.ko-mini.sage a{color:var(--sage);}

/* dark variant (operators navy block) */
.ko-form.dark .ko-card,.ko-register-grid.dark .ko-card{background:rgba(255,255,255,.04);border:1px solid rgba(122,141,179,.3);border-top:4px solid var(--amber);}
.ko-form.dark .ko-title,.ko-form.dark .field label{color:#fff;}
.ko-form.dark .ko-lede{color:rgba(255,255,255,.72);}
.ko-form.dark .field input,.ko-form.dark .field select,.ko-form.dark .field textarea{background:rgba(255,255,255,.06);border-color:rgba(122,141,179,.4);color:#fff;}
.ko-form.dark .field input::placeholder,.ko-form.dark .field textarea::placeholder{color:rgba(255,255,255,.5);}
.ko-form.dark .ko-consent{color:rgba(255,255,255,.72);}
.ko-form.dark .ko-secure{color:rgba(255,255,255,.6);}

/* ── Kids Safe-Pass swap: phone image <-> pulsing NFC card (ported from Fable_5) ── */
.sp-swap{position:relative;width:290px;max-width:100%;min-height:470px;margin:0 auto;display:flex;align-items:center;justify-content:center;}
.sp-slide{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .6s ease;pointer-events:none;}
.sp-slide.active{opacity:1;pointer-events:auto;}
.sp-slide img.device{max-height:470px;width:auto;}
.sp-cardwrap{position:relative;}
.sp-card{position:relative;width:290px;height:440px;border-radius:28px;background:linear-gradient(160deg,#1A2B48 0%,#2A66A8 100%);padding:28px;display:flex;flex-direction:column;color:#fff;overflow:hidden;box-shadow:0 0 0 3px rgba(119,181,254,.35),0 0 40px rgba(119,181,254,.55),0 0 80px rgba(119,181,254,.3);animation:sp-glow 3s ease-in-out infinite;}
@keyframes sp-glow{0%,100%{box-shadow:0 0 0 3px rgba(119,181,254,.30),0 0 34px rgba(119,181,254,.45),0 0 70px rgba(119,181,254,.22);}50%{box-shadow:0 0 0 3px rgba(119,181,254,.48),0 0 62px rgba(119,181,254,.7),0 0 120px rgba(119,181,254,.42);}}
.sp-dash{position:absolute;right:-50px;top:-50px;width:190px;height:190px;border-radius:50%;border:1.5px dashed rgba(255,255,255,.25);}
.sp-top{display:flex;align-items:center;justify-content:space-between;}
.sp-top img{width:40px;height:40px;}
.sp-nfc{color:#8FBDFF;}
.sp-body{margin-top:auto;}
.sp-lbl{font-size:12px;font-weight:800;letter-spacing:.22em;color:#8FBDFF;}
.sp-name{font-family:'Sora',sans-serif;font-weight:800;font-size:30px;margin-top:8px;}
.sp-sub{font-size:13.5px;color:#DCEBFF;margin-top:4px;}
.sp-mono{font-size:12.5px;letter-spacing:.18em;color:rgba(255,255,255,.65);margin-top:22px;font-variant-numeric:tabular-nums;}
.sp-tap{margin-top:20px;padding:12px 0;text-align:center;border-radius:14px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.28);font-size:13px;font-weight:800;letter-spacing:.16em;}
.sp-ring{position:absolute;inset:-20px;border-radius:40px;border:2px solid rgba(119,181,254,.5);animation:sp-ripple 2.2s ease-out infinite;pointer-events:none;}
.sp-ring.r2{animation-delay:1.1s;}
@keyframes sp-ripple{0%{transform:scale(.7);opacity:.7;}100%{transform:scale(1.7);opacity:0;}}
@media (prefers-reduced-motion:reduce){.sp-card{animation:none;}.sp-ring{display:none;}.sp-slide{transition:none;}}

/* ── Operators demand-stream cards (dark, tone top-border) — ported from Fable_5 ── */
.stream-card{height:100%;padding:26px;border-radius:20px;background:rgba(255,255,255,.05);border:1px solid rgba(122,141,179,.3);border-top:4px solid var(--tone,var(--sky));}
.stream-card svg{color:var(--tone,var(--sky));display:block;}
.stream-card h3{color:#fff;margin-top:14px;font-size:1.15rem;}
.stream-card p{font-size:.92rem;color:rgba(255,255,255,.74);margin-top:10px;line-height:1.6;}
.stream-card .checks li{color:rgba(255,255,255,.74);font-size:.92rem;}
.stream-card .checks .c{background:var(--tone,var(--sky));}

/* ── Product explainer video modal ───────────────────────── */
.btn-video{display:inline-flex;align-items:center;gap:9px;}
.btn-video-icon{flex:0 0 auto;}
.video-modal{position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center;padding:5vh 24px;}
.video-modal.open{display:flex;}
.video-modal-backdrop{position:absolute;inset:0;background:rgba(11,20,38,.86);backdrop-filter:blur(6px);}
.video-modal-panel{position:relative;width:min(920px,100%);aspect-ratio:16/9;border-radius:18px;overflow:hidden;box-shadow:0 30px 80px rgba(3,8,20,.5);background:#000;}
.video-modal-player{width:100%;height:100%;display:block;background:#000;}
.video-modal-close{position:absolute;top:-44px;right:0;width:36px;height:36px;border-radius:50%;border:1.5px solid rgba(255,255,255,.5);background:rgba(11,20,38,.5);color:#fff;font-size:22px;line-height:1;cursor:pointer;}
@media(max-width:640px){.video-modal-close{top:-40px;}}
