/* =========================================================
   FONTS — self-hosted, one variable file per family.
   Fredoka (display) + Figtree (body), LET's own faces.
   ========================================================= */
@font-face{
  font-family:"Fredoka";
  src:url("assets/fonts/fredoka-latin-var.woff2") format("woff2");
  font-weight:300 700;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Figtree";
  src:url("assets/fonts/figtree-latin-var.woff2") format("woff2");
  font-weight:300 900;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

/* =========================================================
   LET Junior — "playground" design tokens
   Vibrant, cartoony, game-like: a fixed sky/hills world behind the page,
   chunky cards with a solid bottom "edge" shadow, 3D push buttons.
   Every bright hue has an -ink twin for white text / small text (WCAG AA)
   and an -edge twin for the solid 3D shadow.
   ========================================================= */
:root{
  --grape:#7B61FF;  --grape-ink:#5A3FE0;  --grape-edge:#3F2AA8;  --grape-soft:#ECE8FF;
  --mango:#FF7A3D;  --mango-ink:#C4490F;  --mango-soft:#FFE7D9;
  --cta:#CA4B15;    --cta-deep:#B5410F;   --cta-edge:#8A310A;
  --sun:#FFC93D;    --sun-ink:#8A5A00;    --sun-edge:#E0A200;    --sun-soft:#FFF3C9;
  --bubble:#FF4D8D; --bubble-ink:#C7205E; --bubble-soft:#FFE0EC;
  --grass:#6CCB4F;  --grass-ink:#237A33;  --grass-edge:#3E9B45;  --grass-soft:#E3F7D9;
  --sky:#4AA8FF;    --sky-ink:#1B62B8;    --sky-edge:#134A8C;    --sky-soft:#DDF0FF;
  --splash:#22AECB;

  --ink:#1F1A3D;
  --ink-2:#433C63;
  --muted:#5E587A;
  --line:#E6E3F3;
  --line-2:#D7D2EE;       /* card edges */
  --surface:#ffffff;
  --cream:#F7F5FF;
  --on-color:#ffffff;

  --shadow-soft:0 18px 30px -16px rgba(31,26,61,.35);

  --display:"Fredoka","Trebuchet MS",system-ui,sans-serif;
  --body:"Figtree","Helvetica Neue",Arial,sans-serif;

  --fs-hero:clamp(38px,8vw,72px);
  --fs-h2:clamp(28px,4.8vw,46px);
  --fs-h3:clamp(19px,2.2vw,23px);
  --fs-body:clamp(16px,1.1vw,17px);
  --fs-small:14px;
  --fs-label:12px;

  --r-s:16px; --r-m:20px; --r-l:28px; --r-xl:40px; --r-pill:3000px;

  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; --s6:32px;
  --s7:48px; --s8:64px; --s9:96px; --s10:120px;

  --e-standard:cubic-bezier(.32,.72,0,1);
  --e-entrance:cubic-bezier(.16,1,.3,1);
  --e-spring:cubic-bezier(.34,1.56,.64,1);
  --t-micro:140ms; --t-ui:280ms; --t-scene:520ms; --t-hero:760ms;

  --hdr-h:64px;
  --sec-y:var(--s8);
  --pad-x:20px;
  --maxw:1200px;
  --land-h:170px;
}
@media (min-width:768px){ :root{ --sec-y:88px; --pad-x:32px; --hdr-h:74px; --land-h:240px; } }
@media (min-width:1024px){ :root{ --sec-y:var(--s10); --land-h:280px; } }

/* =========================================================
   BASE
   ========================================================= */
*{box-sizing:border-box}
[hidden]{display:none !important}
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--hdr-h) + var(--s5))}
body{
  margin:0;
  background:#BDE6FF;   /* shows only before the world layer paints */
  color:var(--ink);
  font-family:var(--body);
  font-size:var(--fs-body);
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
h1,h2,h3{font-family:var(--display);font-weight:600;line-height:1.12;margin:0;text-wrap:balance}
h1{font-size:var(--fs-hero);font-weight:700;line-height:1.04;letter-spacing:-.02em}
h2{font-size:var(--fs-h2);font-weight:700;letter-spacing:-.01em}
h3{font-size:var(--fs-h3);font-weight:600}
p,ul,ol,blockquote,figure{margin:0}
ul,ol{list-style:none;padding:0}
img{max-width:100%;display:block}
a{color:inherit}

.wrap{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad-x)}
.wrap.narrow{max-width:780px}
.center{text-align:center}

:focus-visible{outline:3px solid var(--grape-ink);outline-offset:3px;border-radius:6px}
::selection{background:var(--sun);color:var(--ink)}
input,textarea{caret-color:var(--ink)}
html{scrollbar-color:var(--grape) transparent;scrollbar-width:thin}

a,button,summary,.opt,.tile-btn{-webkit-tap-highlight-color:rgba(123,97,255,.18);touch-action:manipulation}
button,summary,.opt,.tile-btn{user-select:none;-webkit-user-select:none}
html,body{overscroll-behavior-x:none}

.skip{
  position:absolute;left:var(--s4);top:-64px;z-index:100;
  background:var(--surface);color:var(--ink);padding:var(--s3) var(--s4);
  border-radius:var(--r-s);box-shadow:var(--shadow-soft);font-weight:700;text-decoration:none;
  transition:top var(--t-ui) var(--e-standard);
}
.skip:focus{top:var(--s4)}

main,.ftr{position:relative;z-index:1}
main > section{position:relative;padding-block:var(--sec-y);overflow-x:clip}
main > section > .wrap,main > section > .rail-wrap,main > section > .dots,main > section > p.wrap{position:relative;z-index:1}

/* Text that sits straight on the sky/hills gets a soft light halo so it
   stays crisp over clouds and mountains. */
.hero-copy .lede,.hero-copy .fineprint,.hero-copy .link-under,
main > section > .wrap > h2,main > section > .wrap > .lede,main > section .closing{
  text-shadow:0 0 14px rgba(255,255,255,.9),0 0 3px rgba(255,255,255,.9);
}
.lede{color:var(--ink);font-weight:500;max-width:60ch;font-size:clamp(16px,1.3vw,18px)}
h2 + .lede{margin-top:var(--s3)}
.fineprint{font-size:13px;color:var(--ink-2);font-weight:600}

/* =========================================================
   THE WORLD — fixed sky, sun, clouds, panning hills
   ========================================================= */
.defs{position:absolute;width:0;height:0;overflow:hidden}
.world{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.sky{position:absolute;inset:0}
.sky-1{background:linear-gradient(180deg,#7FC8FF 0%,#B4E2FF 50%,#E2F4FF 100%)}
.sky-2{background:linear-gradient(180deg,#A99BFF 0%,#CFC6FF 50%,#F1ECFF 100%);opacity:0}
.sky-3{background:linear-gradient(180deg,#FF9E7A 0%,#FFC9A0 50%,#FFEBCC 100%);opacity:0}
.sky-2,.sky-3{will-change:opacity}

.sun{
  position:absolute;top:calc(var(--hdr-h) + 34px);right:5vw;
  width:clamp(78px,11vw,132px);aspect-ratio:1;will-change:transform;
}
.sun svg{width:100%;height:100%;display:block;overflow:visible}
.sun .rays{transform-origin:60px 60px;animation:spin 40s linear infinite}
.sun .eyes{transform-origin:60px 58px;animation:blink 5s infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes blink{0%,92%,100%{transform:scaleY(1)}95%{transform:scaleY(.1)}}

.clouds{position:absolute;inset:0;will-change:transform}
.cloud{
  position:absolute;left:0;top:var(--y);width:var(--w);height:calc(var(--w) * .5);
  animation:drift var(--t) linear var(--d) infinite;
  will-change:transform;
}
@keyframes drift{from{transform:translateX(-100%)}to{transform:translateX(100vw)}}

.land{position:absolute;left:0;right:0;bottom:0;height:var(--land-h)}
.lyr{position:absolute;left:0;bottom:0;height:100%;display:flex;will-change:transform}
.lyr svg{flex:0 0 auto;height:100%;width:calc(var(--land-h) * 4);display:block}

/* =========================================================
   STICKERS — floating, tappable decorative emoji
   ========================================================= */
.stk{
  position:absolute;left:var(--x);top:var(--y);z-index:0;
  font-size:clamp(30px,4vw,50px);line-height:1;cursor:pointer;
  user-select:none;-webkit-user-select:none;
}
.stk i{
  display:block;font-style:normal;
  animation:bobslow 6s ease-in-out infinite;
}
.stk:nth-of-type(2n) i{animation-delay:-2.5s;animation-duration:7s}
.stk.d{display:none}
.stk.jump i{animation:jump 700ms var(--e-spring)}
@media (min-width:900px){ .stk.d{display:block} }
@keyframes bobslow{0%,100%{transform:translateY(0) rotate(-6deg)}50%{transform:translateY(-10px) rotate(6deg)}}
@keyframes jump{0%{transform:scale(1)}30%{transform:translateY(-26px) scale(1.25) rotate(-14deg)}60%{transform:translateY(0) scale(.9) rotate(8deg)}100%{transform:scale(1)}}

.confetti{
  position:fixed;z-index:300;pointer-events:none;
  width:9px;height:14px;border-radius:3px;
}
.confetti.e{width:auto;height:auto;background:none;font-size:24px;line-height:1}

/* =========================================================
   BUTTONS — chunky 3D push buttons
   ========================================================= */
.btn{
  position:relative;
  display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);
  font-family:var(--display);font-weight:600;font-size:17px;line-height:1.1;letter-spacing:.01em;
  border:none;border-radius:var(--r-pill);text-decoration:none;cursor:pointer;text-align:center;
  padding:var(--s4) var(--s5);min-height:48px;
  transition:transform var(--t-micro) var(--e-standard),
             box-shadow var(--t-micro) var(--e-standard),
             background-color var(--t-ui) var(--e-standard);
}
.btn .arrow{display:inline-block;transition:transform var(--t-ui) var(--e-spring)}
.btn-lg{min-height:58px;padding-inline:var(--s5);font-size:16px}
@media (min-width:480px){ .btn-lg{padding-inline:var(--s6);font-size:18px} }
.btn-sm{min-height:40px;font-size:15px;padding:var(--s2) var(--s4)}

.btn-primary{background:var(--cta);color:var(--on-color);box-shadow:0 5px 0 var(--cta-edge),0 14px 22px -10px rgba(202,75,21,.55)}
.btn-primary:active{transform:translateY(4px);box-shadow:0 1px 0 var(--cta-edge)}

.btn-outline{background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 2.5px var(--ink),0 5px 0 var(--ink)}
.btn-outline:active{transform:translateY(4px);box-shadow:inset 0 0 0 2.5px var(--ink),0 1px 0 var(--ink)}

/* the app's "Student" door colour, so the button already looks like the app */
.btn-play{background:var(--grape-ink);color:var(--on-color);box-shadow:0 5px 0 var(--grape-edge),0 14px 22px -10px rgba(90,63,224,.55)}
.btn-play:active{transform:translateY(4px);box-shadow:0 1px 0 var(--grape-edge)}
@media (hover:hover){ .btn-play:hover{transform:translateY(-2px);box-shadow:0 7px 0 var(--grape-edge),0 18px 24px -10px rgba(90,63,224,.6)} }

/* bridge to app.letjunior.com: circle wipe out of the tapped button (same as the app's) */
.bridge{
  position:fixed;inset:0;z-index:200;pointer-events:none;display:grid;place-items:center;
  background:radial-gradient(circle at 50% 45%,var(--grape),var(--grape-ink) 60%);
  clip-path:circle(0% at var(--wx,50%) var(--wy,50%));
}
.bridge.in{pointer-events:auto;animation:bridgeIn 550ms var(--e-entrance) forwards}
@keyframes bridgeIn{to{clip-path:circle(150% at var(--wx,50%) var(--wy,50%))}}
.bridge-logo{font-family:var(--display);font-weight:700;font-size:clamp(36px,7vw,64px);color:#fff;opacity:0}
.bridge-logo span{color:var(--sun)}
.bridge-logo img{display:block;width:clamp(96px,18vw,150px);height:auto;margin:0 auto 10px;filter:drop-shadow(0 8px 0 rgba(0,0,0,.18))}
.bridge-logo{text-align:center}
.bridge.in .bridge-logo{animation:bridgePop 600ms var(--e-spring) 250ms both,bridgeBob 1.1s ease-in-out 850ms infinite}
@keyframes bridgePop{from{opacity:0;transform:scale(.4) rotate(-8deg)}to{opacity:1;transform:none}}
@keyframes bridgeBob{50%{transform:translateY(-8px) rotate(2deg)}}

/* back from the app: it dropped these four stripes over itself, we lift them off (staggered) on arrival */
.leave{display:none}
.from-app #splash{display:none}
.from-app .leave{position:fixed;inset:0;z-index:1000;display:flex;pointer-events:none;animation:leaveGone 0s 1.3s forwards}
.leave i{flex:1;animation:stripeLift 550ms var(--e-entrance) 350ms forwards}
.leave i:nth-child(1){background:var(--mango)} .leave i:nth-child(2){background:var(--sun);animation-delay:420ms}
.leave i:nth-child(3){background:var(--grass);animation-delay:490ms} .leave i:nth-child(4){background:var(--sky);animation-delay:560ms}
.leave b{position:absolute;top:50%;left:50%;white-space:nowrap;transform:translate(-50%,-50%);padding:14px 28px;border-radius:999px;background:#fff;color:var(--ink);
  font:700 clamp(28px,6vw,48px)/1 var(--display);box-shadow:0 6px 0 rgba(31,26,61,.2);animation:leaveFade 250ms ease-in 250ms forwards}
@keyframes stripeLift{to{transform:translateY(-101%)}}
@keyframes leaveFade{to{opacity:0;transform:translate(-50%,-50%) scale(.8)}}
@keyframes leaveGone{to{visibility:hidden}}
@media (prefers-reduced-motion:reduce){ .from-app .leave{display:none} }

.btn-invert{background:var(--ink);color:var(--surface);box-shadow:0 5px 0 #000,0 14px 22px -10px rgba(0,0,0,.5)}
.btn-invert:active{transform:translateY(4px);box-shadow:0 1px 0 #000}

.btn:disabled{
  background:var(--line);color:var(--muted);
  box-shadow:0 4px 0 var(--line-2);
  transform:none;pointer-events:none;
}

.link-under{
  color:var(--ink);font-weight:700;text-decoration:none;
  box-shadow:inset 0 -3px 0 0 var(--mango);
  transition:box-shadow var(--t-ui) var(--e-standard);
}
.link-under:hover{box-shadow:inset 0 -1.2em 0 0 color-mix(in srgb,var(--sun) 70%,transparent)}

.chip{
  display:inline-flex;align-items:center;gap:var(--s2);
  background:var(--surface);border-radius:var(--r-pill);
  padding:var(--s2) var(--s4) var(--s2) var(--s2);font-size:var(--fs-small);font-weight:700;
  box-shadow:0 4px 0 var(--line-2);
}
.chip-dot{
  display:grid;place-items:center;width:28px;height:28px;border-radius:50%;
  background:var(--sun-soft);font-size:15px;
  animation:wave 2.4s ease-in-out infinite;transform-origin:70% 70%;
}
@keyframes wave{0%,60%,100%{transform:rotate(0)}10%,30%{transform:rotate(16deg)}20%,40%{transform:rotate(-10deg)}}

/* Section kicker pill with emoji */
.kicker{
  display:inline-flex;align-items:center;gap:6px;margin-bottom:var(--s3);
  background:var(--surface);color:var(--k-ink);
  border:2.5px solid var(--k);border-radius:var(--r-pill);
  padding:5px 14px;font-size:14px;font-weight:800;letter-spacing:.01em;
  box-shadow:0 4px 0 var(--k);
}
.k-bubble{--k:var(--bubble);--k-ink:var(--bubble-ink)}
.k-grape{--k:var(--grape);--k-ink:var(--grape-ink)}
.k-grass{--k:var(--grass);--k-ink:var(--grass-ink)}
.k-mango{--k:var(--mango);--k-ink:var(--mango-ink)}
.k-sky{--k:var(--sky);--k-ink:var(--sky-ink)}
.k-sun{--k:var(--sun-edge);--k-ink:var(--sun-ink)}

.hl{padding:0 .08em;border-radius:.2em;box-decoration-break:clone;-webkit-box-decoration-break:clone}
.hl-sun{background:linear-gradient(transparent 58%,var(--sun) 58%)}

.ck{
  display:inline-block;width:1em;height:1em;flex:0 0 auto;vertical-align:-.14em;
  background:currentColor;
  -webkit-mask:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1 6l3.2 3.2L11 2.4' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  mask:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1 6l3.2 3.2L11 2.4' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

/* =========================================================
   HEADER — floating nav card
   ========================================================= */
.hdr{
  position:fixed;inset:0 0 auto 0;z-index:50;
  padding:var(--s3) var(--pad-x) 0;
  max-width:calc(var(--maxw) + var(--pad-x) * 2);margin-inline:auto;
}
.hdr-in{
  position:relative;
  display:flex;align-items:center;gap:var(--s4);height:var(--hdr-h);
  background:var(--surface);border-radius:26px;
  padding-inline:var(--s4) var(--s3);
  box-shadow:0 5px 0 rgba(31,26,61,.10),0 16px 30px -18px rgba(31,26,61,.45);
  max-width:none;
}
.logo{display:inline-flex;align-items:center;gap:var(--s2);text-decoration:none;font-family:var(--display);font-weight:700}
.logo-mark{width:36px;height:34px;object-fit:contain;display:block;filter:drop-shadow(0 3px 0 rgba(31,26,61,.14))}   /* still: the brand mark is not a toy */
.logo picture{display:contents}
.logo-word{font-size:18px;white-space:nowrap;color:var(--ink)}
.hdr-cta,.hdr-app{white-space:nowrap}
.hdr-actions .hdr-app{gap:6px}
@media (max-width:430px){
  .hdr-cta,.hdr-app{font-size:13px;padding-inline:var(--s3)}
  .logo-word{display:none}
}
@media (max-width:374px){
  .hdr-app-word{display:none}   /* 🎮 alone (aria-label says Zona alumnos), or the CTA spills out of the card */
}
.hdr-nav{display:none;gap:var(--s5);margin-left:var(--s5)}
.hdr-nav a{
  position:relative;text-decoration:none;color:var(--ink-2);font-size:15px;font-weight:700;
  transition:color var(--t-micro) var(--e-standard);
}
.hdr-nav a:hover{color:var(--grape-ink)}
.hdr-nav a::after{
  content:"";position:absolute;left:0;right:0;bottom:-7px;height:4px;border-radius:4px;
  background:var(--grape);transform:scaleX(0);
  transition:transform var(--t-ui) var(--e-spring);
}
.hdr-nav a.is-current{color:var(--grape-ink)}
.hdr-nav a.is-current::after{transform:scaleX(1)}
.hdr-actions{margin-left:auto;display:flex;align-items:center;gap:var(--s4)}
.hdr-nav a{white-space:nowrap}
/* 1100, not 900: with the Alumnos button too, the links wrap below this */
@media (min-width:1100px){ .hdr-nav{display:flex} }


/* =========================================================
   1 — HERO
   ========================================================= */
.hero{padding-top:calc(var(--hdr-h) + var(--s7))}
.hero-in{display:grid;gap:var(--s7)}
.hero-copy{display:flex;flex-direction:column;align-items:flex-start;gap:var(--s4)}
.hero h1{color:var(--ink);text-shadow:0 3px 0 rgba(255,255,255,.6)}
.hero h1 em{
  display:inline-block;font-style:normal;color:var(--ink);
  background:var(--sun);padding:0 .16em;border-radius:.22em;
  transform:rotate(-4deg);box-shadow:0 5px 0 var(--sun-edge);
  text-shadow:none;
}
.squiggle{
  background:no-repeat left 100%/0% .32em url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 12' preserveAspectRatio='none'%3E%3Cpath d='M2 7Q12 1 22 7T42 7T62 7T82 7T98 7' fill='none' stroke='%23FF4D8D' stroke-width='4' stroke-linecap='round'/%3E%3C/svg%3E");
  padding-bottom:.14em;
  animation:draw 900ms var(--e-entrance) 500ms forwards;
}
.js:not(.ready) .squiggle,.js:not(.ready) .wave-emoji{animation-play-state:paused}
@keyframes draw{to{background-size:100% .32em}}
.wave-emoji{display:inline-block;animation:party 2.8s var(--e-spring) 1s infinite;transform-origin:50% 80%}
@keyframes party{0%,70%,100%{transform:rotate(0) scale(1)}78%{transform:rotate(-18deg) scale(1.2)}88%{transform:rotate(14deg) scale(1.1)}}

.hero-cta{display:flex;flex-direction:column;align-items:stretch;gap:var(--s3);width:100%;margin-top:var(--s3)}
.hero-cta .btn{width:100%}
.hero-cta .fineprint,.hero-cta .link-under{text-align:center;align-self:center}

/* Hero age picker: the first tap already answers question 1 of /cupo */
.age-card{
  width:100%;max-width:460px;align-self:center;text-align:center;
  background:var(--surface);border-radius:var(--r-l);padding:var(--s5) var(--s4) var(--s3);
  box-shadow:inset 0 0 0 3px var(--mango),0 8px 0 var(--mango-ink),var(--shadow-soft);
}
.age-q{font-family:var(--display);font-weight:600;font-size:20px;line-height:1.2;color:var(--ink);margin-bottom:var(--s4)}
.age-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s3)}
.age-btn{
  display:grid;place-items:center;min-height:60px;border-radius:18px;
  background:var(--surface);color:var(--ink);text-decoration:none;
  font-family:var(--display);font-weight:700;font-size:26px;font-variant-numeric:tabular-nums;
  box-shadow:inset 0 0 0 2.5px var(--ink),0 5px 0 var(--ink);
  transition:transform var(--t-micro) var(--e-standard),box-shadow var(--t-micro) var(--e-standard),background-color var(--t-ui) var(--e-standard);
}
.age-btn:active{transform:translateY(4px);box-shadow:inset 0 0 0 2.5px var(--ink),0 1px 0 var(--ink);background:var(--sun)}
@media (hover:hover){ .age-btn:hover{background:var(--sun)} }
.age-other{display:inline-block;margin-top:var(--s2);padding:var(--s3);font-weight:700;color:var(--ink-2);text-underline-offset:3px}

.breathe::after{
  content:"";position:absolute;inset:-3px;border-radius:inherit;pointer-events:none;
  border:3px solid var(--mango);
  animation:breathe 2.4s var(--e-standard) infinite;
}
.breathe.is-calm::after{animation:none;opacity:0}
@keyframes breathe{0%{transform:scale(1);opacity:.7}70%,100%{transform:scale(1.12,1.3);opacity:0}}

/* Product frame: a purple game "card" holding the real class photo grid */
.hero-visual{
  position:relative;
  background:var(--grape);
  background-image:radial-gradient(rgba(255,255,255,.18) 2px,transparent 2px);
  background-size:18px 18px;
  border-radius:var(--r-xl);padding:var(--s4);
  box-shadow:0 10px 0 var(--grape-edge),var(--shadow-soft);
}
.rainbow{display:none}
.screen-mock{
  background:var(--surface);border-radius:22px;
  padding:var(--s3) var(--s3) var(--s4);
  display:flex;flex-direction:column;gap:var(--s3);
  position:relative;overflow:hidden;
}
.screen-mock::before{
  content:"";position:absolute;top:14px;left:14px;width:10px;height:10px;border-radius:50%;
  background:var(--bubble);
  box-shadow:16px 0 0 var(--sun), 32px 0 0 var(--grass);
  z-index:2;
}
.mock-top{display:flex;align-items:center;gap:var(--s3);padding-top:22px}
.mock-top .bar{flex:1;height:10px;border-radius:var(--r-pill);background:var(--cream);overflow:hidden}
.mock-top .bar i{display:block;width:62%;height:100%;border-radius:var(--r-pill);background:var(--grass);animation:grow 2.4s var(--e-entrance) .6s both}
@keyframes grow{from{width:8%}}
.mock-top .hearts{flex:0 0 auto;color:var(--bubble);font-size:14px;letter-spacing:1px}
.mock-top .hearts b{color:var(--line);font-weight:400}
.mock-say{
  font-family:var(--display);font-weight:600;font-size:15px;color:var(--ink);
  background:var(--sky-soft);border-radius:var(--r-s);padding:var(--s2) var(--s3);
}
.mock-say b{background:var(--grass);padding:0 .2em;border-radius:.2em}
.hero-chips{
  position:absolute;left:-8px;right:-8px;bottom:-22px;
  display:flex;justify-content:space-between;gap:var(--s2);pointer-events:none;
}
.hero-chip{
  display:inline-flex;align-items:center;gap:5px;
  border-radius:var(--r-pill);
  padding:8px 14px;font-family:var(--display);font-weight:700;font-size:15px;
  white-space:nowrap;
}
.chip-xp{background:var(--sun);color:var(--ink);box-shadow:0 4px 0 var(--sun-edge);animation:bobslow 6s ease-in-out -1s infinite}
.chip-streak{background:var(--surface);color:var(--ink);box-shadow:0 4px 0 var(--line-2);animation:bobslow 6s ease-in-out -4s infinite}
.screen-grid{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;position:relative;z-index:1}
.tile picture{display:contents}
.tile img{width:100%;height:100%;object-fit:cover;border-radius:inherit}
.tile{
  flex:0 0 calc((100% - 18px) / 4);
  aspect-ratio:1;border-radius:14px;background:var(--cream);
  overflow:hidden;position:relative;
}
.tile:nth-child(2){box-shadow:inset 0 0 0 3px var(--mango)}
.tile-teacher{
  flex:0 0 100%;aspect-ratio:16/9;border-radius:var(--r-s);
  box-shadow:inset 0 0 0 3px var(--sky);
}
.live{
  position:absolute;top:var(--s2);left:var(--s2);z-index:1;display:inline-flex;align-items:center;gap:5px;
  font-family:var(--body);font-size:10px;font-weight:800;letter-spacing:.08em;
  background:var(--bubble-ink);color:#fff;border-radius:var(--r-pill);padding:3px 8px;
}
.live i{width:6px;height:6px;border-radius:50%;background:#fff;animation:blip 1.2s ease-in-out infinite}
@keyframes blip{50%{opacity:.25}}

.trust{
  display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:calc(var(--s7) + var(--s3));
  padding-inline:var(--pad-x);justify-content:center;position:relative;z-index:1;
}
.trust li{
  border-radius:var(--r-pill);padding:var(--s2) var(--s4);
  font-size:14px;font-weight:800;background:var(--surface);
  color:var(--t-ink);box-shadow:inset 0 0 0 2px var(--t),0 4px 0 var(--t);
}
.t-grape{--t:var(--grape);--t-ink:var(--grape-ink)}
.t-mango{--t:var(--mango);--t-ink:var(--mango-ink)}
.t-bubble{--t:var(--bubble);--t-ink:var(--bubble-ink)}
.t-grass{--t:var(--grass);--t-ink:var(--grass-ink)}

@media (min-width:900px){
  .hero{padding-top:calc(var(--hdr-h) + var(--s8))}
  .hero-in{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);align-items:center;gap:var(--s8)}
  .hero-cta{flex-direction:row;align-items:center;flex-wrap:wrap;width:auto;gap:var(--s4)}
  .hero-cta .btn{width:auto}
  .hero-cta .age-card{flex-basis:100%;align-self:flex-start}
  .hero-cta .fineprint{order:3;flex-basis:100%;text-align:left;align-self:flex-start}
  .hero-visual{transform:rotate(2deg)}
  .js .hero-visual.reveal.is-in{transform:rotate(2deg)}
  .rainbow{
    display:block;position:absolute;left:-54px;top:-92px;width:200px;height:100px;z-index:-1;
    border-radius:200px 200px 0 0;
    background:radial-gradient(circle at 50% 100%,transparent 42%,var(--grape) 42% 50%,var(--sky) 50% 58%,var(--grass) 58% 66%,var(--sun) 66% 74%,var(--mango) 74% 82%,var(--bubble) 82% 90%,transparent 90%);
  }
}

/* =========================================================
   1b — STATS (chunky outlined counters, ref: game dashboards)
   ========================================================= */
.stats{padding-block:var(--s6) var(--s4)}
.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s4)}
.stat{
  position:relative;overflow:hidden;
  background:var(--surface);border-radius:var(--r-l);
  padding:52px var(--s4) var(--s4);
  box-shadow:inset 0 0 0 3px var(--c),0 7px 0 var(--c);
  display:flex;flex-direction:column;gap:2px;
  transition:transform var(--t-ui) var(--e-spring);
}
.stat-ic{
  position:absolute;top:0;left:0;width:62px;height:52px;display:grid;place-items:center;
  background:var(--c-soft);border-bottom-right-radius:26px;font-size:24px;
}
.stat-n{font-family:var(--display);font-weight:700;font-size:clamp(42px,6vw,56px);line-height:1;color:var(--c-ink);font-variant-numeric:tabular-nums}
.stat span:last-child{font-size:14px;font-weight:700;color:var(--ink-2);line-height:1.3}
.s-mango{--c:var(--mango);--c-ink:var(--mango-ink);--c-soft:var(--mango-soft)}
.s-grape{--c:var(--grape);--c-ink:var(--grape-ink);--c-soft:var(--grape-soft)}
.s-sky{--c:var(--sky);--c-ink:var(--sky-ink);--c-soft:var(--sky-soft)}
.s-grass{--c:var(--grass);--c-ink:var(--grass-ink);--c-soft:var(--grass-soft)}
@media (min-width:768px){ .stat-grid{grid-template-columns:repeat(4,1fr);gap:var(--s5)} }

/* =========================================================
   CARDS on rails (videos, teachers)
   ========================================================= */
.rail-wrap{margin-top:var(--s5)}
.rail{
  display:flex;gap:var(--s4);overflow-x:auto;
  scroll-snap-type:x mandatory;overscroll-behavior-x:contain;
  padding:var(--s5) var(--pad-x) var(--s6);
  scrollbar-width:none;-webkit-overflow-scrolling:touch;
}
.rail::-webkit-scrollbar{display:none}
.rail:focus-visible{outline:3px solid var(--grape-ink);outline-offset:-3px;border-radius:var(--r-m)}
.rail > .card{
  --edge:var(--grape);
  flex:0 0 86%;scroll-snap-align:center;
  background:var(--surface);border-radius:var(--r-l);
  padding:var(--s5);
  box-shadow:inset 0 0 0 3px var(--edge),0 8px 0 var(--edge);
  transition:transform var(--t-ui) var(--e-spring);
}
.rail > .card:nth-child(4n+2){--edge:var(--mango)}
.rail > .card:nth-child(4n+3){--edge:var(--sky)}
.rail > .card:nth-child(4n+4){--edge:var(--bubble)}
.stars{color:#F2A900;letter-spacing:.1em;font-size:16px;text-shadow:0 1px 0 rgba(31,26,61,.2)}
.who{display:flex;align-items:center;gap:var(--s2);font-size:13px;color:var(--muted);margin-top:auto}

.card.vid{padding:3px;overflow:hidden;display:flex;flex-direction:column}
.vid-shot{
  position:relative;display:block;aspect-ratio:16/9;
  background:var(--ink);overflow:hidden;text-decoration:none;
  border-radius:calc(var(--r-l) - 3px) calc(var(--r-l) - 3px) 0 0;
}
.vid-shot img{width:100%;height:100%;object-fit:cover;transition:transform var(--t-scene) var(--e-standard)}
.vid-shot::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,.05),rgba(0,0,0,.3));
}
.vid-play{
  position:absolute;left:50%;top:50%;z-index:1;
  width:68px;height:68px;margin:-34px 0 0 -34px;
  display:grid;place-items:center;color:var(--ink);
  background:var(--sun);border-radius:50%;box-shadow:0 5px 0 var(--sun-edge);
  transition:transform var(--t-ui) var(--e-spring);
}
.vid-play::before{
  content:"";position:absolute;inset:-6px;border-radius:50%;border:3px solid var(--sun);
  animation:breathe 2s var(--e-standard) infinite;
}
.vid-play svg{margin-left:3px}
.vid-shot:focus-visible{outline:3px solid var(--sun);outline-offset:-3px}
.vid-shot.is-playing::after{display:none}
.vid-shot iframe{position:absolute;inset:0;width:100%;height:100%;border:0}

.vid-body{padding:var(--s5);display:flex;flex-direction:column;gap:var(--s2);flex:1}
.vid blockquote{font-family:var(--display);font-weight:600;font-size:19px;line-height:1.3;color:var(--ink);text-wrap:balance}
.vid blockquote::before{content:"“"}
.vid blockquote::after{content:"”"}
.vid .who{flex-wrap:wrap;font-size:13px;font-weight:700;color:var(--ink-2);margin-top:var(--s1)}
.vid-course{font-size:var(--fs-label);font-weight:800;color:#fff;background:var(--grape-ink);border-radius:var(--r-pill);padding:2px 10px}
.vid-note{font-size:14px;color:var(--muted);line-height:1.5;margin-top:auto;padding-top:var(--s2)}

.dots{display:flex;justify-content:center;gap:4px;margin-top:calc(var(--s3) * -1)}
.dots i{
  width:22px;height:8px;border-radius:var(--r-pill);background:rgba(255,255,255,.8);
  transform:scaleX(.36);
  transition:transform var(--t-ui) var(--e-spring),background-color var(--t-ui) var(--e-standard);
}
.dots i.on{transform:none;background:var(--grape)}

@media (min-width:900px){
  .rail > .card{flex-basis:calc((100% - var(--s4) * 2) / 3)}
  .rail{scroll-snap-type:none;padding-inline:max(var(--pad-x),calc((100vw - var(--maxw)) / 2 + var(--pad-x)))}
}

@keyframes bob{0%{transform:translateY(0)}40%{transform:translateY(-10px) rotate(-8deg)}100%{transform:translateY(0)}}

/* =========================================================
   3 — LO QUE RECIBE — one idea per slide: picture + two lines.
   Native swipe on phones; arrows + "1 / 4" counter everywhere.
   ========================================================= */
.gets .wrap > .kicker,.gets .wrap > h2{display:flex;width:fit-content;margin-inline:auto;text-align:center}
.gets-box{
  margin-top:var(--s6);background:var(--surface);border-radius:32px;overflow:hidden;
  padding:var(--s4) 0 var(--s5);
  box-shadow:inset 0 0 0 3px var(--grape),0 10px 0 var(--grape-edge),var(--shadow-soft);
}
.gets-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none}
.gets-track::-webkit-scrollbar{display:none}
.gets-track:focus-visible{outline:3px solid var(--grape-ink);outline-offset:-3px}
.get{flex:0 0 100%;scroll-snap-align:start;display:grid;gap:var(--s5);align-content:start;padding:0 var(--s4)}
.get-art{
  position:relative;overflow:hidden;min-height:250px;border-radius:24px;
  display:grid;place-items:center;padding:var(--s4);
}
.get-kick{font-size:13px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--grape-ink)}
.get-copy h3{font-size:clamp(24px,3.2vw,36px);line-height:1.1;margin:4px 0 var(--s2);max-width:18ch}
.get-copy p:last-child{font-size:16.5px;color:var(--ink-2);max-width:40ch}

/* slide 1 — live class */
.art-live{background:var(--grape);background-image:radial-gradient(rgba(255,255,255,.18) 2px,transparent 2px);background-size:18px 18px}
.art-live .frame{position:relative;width:100%;max-width:440px;border-radius:18px;background:#fff;padding:6px;box-shadow:0 8px 0 var(--grape-edge);transform:rotate(-2deg)}
.art-live picture{display:block;aspect-ratio:16/9;border-radius:13px;overflow:hidden}
.art-live img{width:100%;height:100%;object-fit:cover}
.art-live .live{top:16px;left:16px}
.art-live .bubble{
  position:absolute;right:-6px;bottom:-16px;
  font-family:var(--display);font-weight:700;font-size:16px;color:var(--ink);
  background:var(--sun);border-radius:16px 16px 4px 16px;padding:8px 14px;box-shadow:0 4px 0 var(--sun-edge);
  animation:bobslow 5s ease-in-out infinite;
}
/* slide 2 — game platform */
.art-game{background:linear-gradient(160deg,var(--sky-soft),#C9F1F4);align-content:center;gap:var(--s3)}
.game-top{display:flex;gap:6px;justify-content:flex-end;width:100%;max-width:440px}
.g-chip{font-family:var(--display);font-weight:700;font-size:13px;background:#fff;color:var(--ink);border-radius:var(--r-pill);padding:4px 10px;box-shadow:0 3px 0 var(--line-2)}
.g-chip.g-xp{background:var(--sun);box-shadow:0 3px 0 var(--sun-edge)}
.game-grid{display:grid;grid-template-columns:1fr 1.1fr 1fr;grid-template-rows:1fr 1fr;gap:10px;width:100%;max-width:440px;height:180px}
.game-grid li{
  border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  background:var(--c);box-shadow:0 5px 0 var(--c-edge);color:#fff;
}
.game-grid span{font-size:34px;line-height:1}
.game-grid b{font-family:var(--display);font-weight:700;font-size:14px;letter-spacing:.02em;text-transform:uppercase;text-shadow:0 2px 0 rgba(0,0,0,.2)}
.game-grid .g-big{grid-column:2;grid-row:1 / span 2}
.game-grid .g-big span{font-size:56px;animation:bobslow 5s ease-in-out infinite}
.g-sky{--c:var(--sky-ink);--c-edge:var(--sky-edge)}
.g-bubble{--c:var(--bubble-ink);--c-edge:#8E1442}
.g-grass{--c:var(--grass-ink);--c-edge:#17561F}
.g-sun{--c:var(--sun);--c-edge:var(--sun-edge)}
.g-sun b{color:var(--ink);text-shadow:none}
/* slide 3 — monthly report */
.art-report{background:var(--sun-soft)}
.report{width:100%;max-width:380px;background:#fff;border-radius:20px;padding:var(--s4);box-shadow:0 6px 0 var(--sun-edge);transform:rotate(1.5deg)}
.rp-head{font-family:var(--display);font-weight:700;font-size:17px;margin-bottom:var(--s3)}
.rp-bars{display:flex;flex-direction:column;gap:10px}
.rp-bars li{display:grid;grid-template-columns:92px 1fr;align-items:center;gap:var(--s2);font-size:13px;font-weight:700;color:var(--ink-2)}
.rp-bars i{display:block;height:12px;border-radius:var(--r-pill);background:var(--cream);overflow:hidden;position:relative}
.rp-bars i::after{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--grass);transform-origin:left;transform:scaleX(var(--v))}
.rp-bars li:nth-child(2) i::after{background:var(--sky)}
.rp-bars li:nth-child(3) i::after{background:var(--mango)}
.rp-note{margin-top:var(--s3);font-size:14px;background:var(--grape-soft);border-radius:12px;padding:8px 12px;color:var(--ink)}
.rp-note b{font-weight:700;color:var(--grape-ink)}
/* slide 4 — WhatsApp with the teacher */
.art-chat{background:var(--grass-soft)}
.chat{display:flex;flex-direction:column;gap:10px;width:100%;max-width:360px}
.msg{max-width:82%;font-size:15px;font-weight:600;color:var(--ink);padding:10px 14px;border-radius:18px;box-shadow:0 3px 0 rgba(31,26,61,.12)}
.msg.me{align-self:flex-end;background:#D6F8C4;border-bottom-right-radius:4px}
.msg.them{align-self:flex-start;background:#fff;border-bottom-left-radius:4px}

.gets-nav{display:flex;align-items:center;gap:var(--s3);padding:var(--s5) var(--s4) 0}
.round{
  width:56px;height:56px;border:0;border-radius:50%;display:grid;place-items:center;cursor:pointer;
  background:var(--grape-ink);color:#fff;box-shadow:0 5px 0 var(--grape-edge);
  transition:transform var(--t-micro) var(--e-standard),box-shadow var(--t-micro) var(--e-standard);
}
.round:active{transform:translateY(4px);box-shadow:0 1px 0 var(--grape-edge)}
.round + .round{background:var(--sun);color:var(--ink);box-shadow:0 5px 0 var(--sun-edge)}
.round + .round:active{box-shadow:0 1px 0 var(--sun-edge)}
.gets-count{font-family:var(--display);font-weight:700;font-size:20px;color:var(--grape-ink);margin-left:var(--s2);font-variant-numeric:tabular-nums}
.gets-try{margin-top:var(--s7)}
@media (min-width:900px){
  .gets-box{padding:var(--s6) 0}
  .get{grid-template-columns:1.1fr 1fr;align-items:center;gap:var(--s7);padding:0 var(--s6)}
  .get-art{min-height:340px}
  .gets-nav{justify-content:flex-end;padding:var(--s5) var(--s6) 0}
}

/* =========================================================
   3b — CRAFTS — real things they made in class
   ========================================================= */
.crafts-rail > .card{--edge-ink:var(--grape-ink);padding:3px;overflow:hidden;display:flex;flex-direction:column}
.crafts-rail > .card:nth-child(4n+2){--edge-ink:var(--mango-ink)}
.crafts-rail > .card:nth-child(4n+3){--edge-ink:var(--sky-ink)}
.crafts-rail > .card:nth-child(4n+4){--edge-ink:var(--bubble-ink)}
.craft-shot{position:relative;aspect-ratio:374/196;background:var(--cream);border-radius:calc(var(--r-l) - 3px) calc(var(--r-l) - 3px) 0 0}
.craft-shot picture{display:block;height:100%;overflow:hidden;border-radius:inherit}
.craft-shot img{width:100%;height:100%;object-fit:cover;transition:transform var(--t-scene) var(--e-standard)}
.craft-stk{
  position:absolute;right:var(--s4);bottom:-26px;z-index:1;
  width:56px;height:56px;border-radius:50%;display:grid;place-items:center;font-size:30px;line-height:1;
  background:var(--surface);box-shadow:inset 0 0 0 3px var(--edge),0 4px 0 var(--edge);
  animation:bobslow 5s ease-in-out infinite;
}
.crafts-rail > .card:nth-child(2n) .craft-stk{animation-delay:-2.5s}
.craft-body{padding:var(--s5);display:flex;flex-direction:column;gap:var(--s2);flex:1}
.craft-body h3{padding-right:52px}
.craft-kids{font-size:14px;font-weight:800;color:var(--edge-ink)}
.craft-body > p:not(.craft-kids){font-size:15px;color:var(--ink-2)}
.craft-words{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:auto;padding-top:var(--s2)}
.craft-words li{
  font-family:var(--display);font-weight:600;font-size:15px;
  padding:4px 12px;border-radius:var(--r-s);background:var(--cream);
  border:2px solid var(--line-2);border-bottom-width:4px;
}
@media (min-width:1024px){
  .crafts-rail{display:grid;grid-template-columns:repeat(4,1fr);overflow:visible;padding-inline:max(var(--pad-x),calc((100vw - var(--maxw)) / 2 + var(--pad-x)))}
  .crafts .dots{display:none}
}
@media (hover:hover){
  .crafts-rail > .card:hover .craft-shot img{transform:scale(1.05)}
}

/* =========================================================
   3a — JOURNEY MAP — a road that draws itself as you scroll
   ========================================================= */
.map{position:relative;margin-top:var(--s7)}
.map-path{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.map-path path{fill:none;stroke-linecap:round;stroke-linejoin:round}
.map-path .road{stroke:#fff;stroke-width:12;stroke-dasharray:1 22}
.map-path .trail{stroke:var(--mango);stroke-width:8}
.steps{position:relative;display:flex;flex-direction:column;gap:var(--s6)}
.step{display:flex;align-items:center;gap:var(--s4);width:calc(100% - 40px)}
.step:nth-child(even){margin-left:40px}
.node{
  flex:0 0 68px;height:68px;border-radius:50%;display:grid;place-items:center;
  font-size:30px;background:var(--n);border:4px solid #fff;
  box-shadow:0 6px 0 var(--n-edge),var(--shadow-soft);
  transition:transform var(--t-scene) var(--e-spring),filter var(--t-scene) var(--e-standard),opacity var(--t-scene) var(--e-standard);
}
.n-bubble{--n:var(--bubble);--n-edge:var(--bubble-ink)}
.n-sun{--n:var(--sun);--n-edge:var(--sun-edge)}
.n-grape{--n:var(--grape);--n-edge:var(--grape-edge)}
.n-mango{--n:var(--mango);--n-edge:var(--mango-ink)}
.n-grass{--n:var(--grass);--n-edge:var(--grass-edge)}
.step-card{
  flex:1;background:var(--surface);border-radius:24px;padding:var(--s4) var(--s5);
  box-shadow:0 6px 0 var(--line-2),var(--shadow-soft);
  transition:transform var(--t-scene) var(--e-entrance),opacity var(--t-scene) var(--e-entrance);
}
.lvl{font-size:13px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--grape-ink)}
.step-card h3{font-size:21px;margin:2px 0 4px}
.step-card p:last-child{font-size:15px;color:var(--ink-2)}
.js .step .node{transform:scale(.7);filter:grayscale(1);opacity:.6}
.js .step .step-card{transform:translateX(24px);opacity:.001}
.js .step.lit .node{transform:none;filter:none;opacity:1;animation:nodepop 600ms var(--e-spring)}
.js .step.lit .step-card{transform:none;opacity:1}
@keyframes nodepop{0%{transform:scale(.7)}50%{transform:scale(1.25) rotate(-10deg)}100%{transform:scale(1)}}
@media (min-width:768px){
  .step{width:62%}
  .step:nth-child(even){margin-left:38%}
}

/* =========================================================
   3b — INTERACTIVE DEMO LESSON
   ========================================================= */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.lesson{
  margin-top:var(--s6);background:var(--surface);
  border-radius:32px;overflow:hidden;
  box-shadow:inset 0 0 0 4px var(--grape),0 10px 0 var(--grape-edge),var(--shadow-soft);
  padding:4px;
}
.lesson-hud{display:flex;align-items:center;gap:var(--s3);padding:var(--s4) var(--s4) 0}
.hud-bar{flex:1;height:16px;border-radius:var(--r-pill);background:var(--cream);overflow:hidden;box-shadow:inset 0 2px 0 rgba(31,26,61,.06)}
.hud-bar i{
  display:block;width:100%;height:100%;border-radius:var(--r-pill);
  background:var(--grass);
  background-image:linear-gradient(180deg,rgba(255,255,255,.35) 0 40%,transparent 40%);
  transform-origin:left center;
  transition:transform var(--t-scene) var(--e-spring);
}
.hud-hearts{flex:0 0 auto;color:var(--bubble);font-size:20px;letter-spacing:2px;line-height:1}
.hud-hearts .off{color:var(--line)}
.hud-hearts .lost{display:inline-block;animation:heartbreak 520ms var(--e-standard) both}
@keyframes heartbreak{0%{transform:scale(1);color:var(--bubble)}30%{transform:scale(1.5) rotate(-10deg);color:var(--bubble)}100%{transform:scale(1);color:var(--line)}}
.hud-mute{
  flex:0 0 auto;width:44px;height:44px;margin:-10px -8px -10px 0;
  display:grid;place-items:center;color:var(--ink-2);
  background:none;border:none;border-radius:50%;cursor:pointer;
  opacity:.7;transition:opacity var(--t-micro) var(--e-standard),background-color var(--t-micro) var(--e-standard);
}
.hud-mute svg{width:20px;height:20px;display:block}
.hud-mute .slash{opacity:0}
.hud-mute[aria-pressed="true"] .wave{opacity:0}
.hud-mute[aria-pressed="true"] .slash{opacity:1}
.hud-mute:hover{opacity:1;background:var(--cream)}
.hud-mute[aria-pressed="true"]{opacity:.4}

@keyframes shake{
  10%,90%{transform:translateX(-2px)}
  20%,80%{transform:translateX(4px)}
  30%,50%,70%{transform:translateX(-7px)}
  40%,60%{transform:translateX(7px)}
}
@keyframes pop{0%{transform:scale(1)}40%{transform:scale(1.06)}100%{transform:scale(1)}}
.shake{animation:shake 460ms cubic-bezier(.36,.07,.19,.97) both}
.pop{animation:pop 420ms var(--e-spring) both}

.lesson-body{padding:var(--s4);display:flex;flex-direction:column;gap:var(--s3);min-height:238px}
.lesson-step{font-size:13px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--grape-ink)}
.lesson-q{font-size:var(--fs-h3);line-height:1.3}
.lesson-q b{background:var(--sun);padding:0 .2em;border-radius:.2em}
.q-emoji{display:block;width:max-content;font-size:60px;line-height:1.15;margin-top:var(--s2);animation:bob 2.6s ease-in-out infinite}

.opts{display:flex;flex-direction:column;gap:var(--s3)}
.opt{
  width:100%;display:flex;align-items:center;gap:var(--s3);text-align:left;
  min-height:56px;padding:var(--s3) var(--s4);
  font-family:var(--body);font-size:16px;font-weight:700;color:var(--ink);
  background:var(--surface);border:2.5px solid var(--line-2);border-bottom-width:6px;border-radius:var(--r-m);
  cursor:pointer;-webkit-tap-highlight-color:transparent;
  transition:transform var(--t-micro) var(--e-standard),border-color var(--t-micro) var(--e-standard),background-color var(--t-micro) var(--e-standard);
}
.opt .key{
  flex:0 0 28px;width:28px;height:28px;border-radius:9px;display:grid;place-items:center;
  background:var(--cream);font-size:13px;font-weight:800;color:var(--muted);
}
.opt:active{transform:translateY(3px);border-bottom-width:3px}
.opt[aria-pressed="true"]{border-color:var(--sky);background:var(--sky-soft)}
.opt[aria-pressed="true"] .key{background:var(--sky-ink);color:#fff}
.opt.right{border-color:var(--grass-edge);background:var(--grass-soft)}
.opt.right .key{background:var(--grass-ink);color:#fff}
.opt.wrong{border-color:var(--bubble);background:var(--bubble-soft)}
.opt:disabled{cursor:default}

.bank{display:flex;flex-direction:column;gap:var(--s4)}
.bank-line{
  display:flex;flex-wrap:wrap;gap:var(--s2);align-content:flex-start;
  min-height:62px;padding:var(--s2);border-radius:var(--r-m);
  background:var(--cream);border:2.5px dashed var(--line-2);
}
.bank-tiles{display:flex;flex-wrap:wrap;gap:var(--s2)}
.tile-btn{
  min-height:46px;padding:var(--s2) var(--s4);
  font-family:var(--display);font-size:17px;font-weight:600;color:var(--ink);
  background:var(--surface);border:2.5px solid var(--line-2);border-bottom-width:5px;
  border-radius:var(--r-s);cursor:pointer;-webkit-tap-highlight-color:transparent;
  transition:transform var(--t-micro) var(--e-standard),opacity var(--t-micro) var(--e-standard);
}
.tile-btn:active{transform:translateY(3px);border-bottom-width:2.5px}
.tile-btn.used{opacity:.3;pointer-events:none}
.bank.right .bank-line{border-color:var(--grass-edge);border-style:solid;background:var(--grass-soft)}
.bank.wrong .bank-line{border-color:var(--bubble);border-style:solid;background:var(--bubble-soft)}

.lesson-foot{border-top:2px solid var(--line);background:var(--cream);border-radius:0 0 28px 28px}
.feedback{
  padding:var(--s4) var(--s4) 0;display:flex;flex-direction:column;gap:2px;
  opacity:0;transform:translateY(8px);
  transition:opacity var(--t-ui) var(--e-entrance),transform var(--t-ui) var(--e-entrance);
}
.feedback.show{opacity:1;transform:none}
.fb-title{font-family:var(--display);font-weight:700;font-size:18px}
.feedback.ok .fb-title{color:var(--grass-ink)}
.feedback.no .fb-title{color:var(--bubble-ink)}
.fb-why{font-size:14px;color:var(--ink-2)}
.fb-why b{color:var(--ink)}
.lesson-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);flex-wrap:wrap;padding:var(--s4)}
.hud-chips{display:flex;gap:var(--s2);flex-wrap:wrap}
.hud-chip{
  display:inline-flex;align-items:center;gap:5px;
  background:var(--surface);border-radius:var(--r-pill);
  padding:6px 12px;font-size:13px;font-weight:700;color:var(--ink-2);
  box-shadow:0 3px 0 var(--line-2);
}
.hud-chip b{font-family:var(--display);font-size:15px;color:var(--ink);font-variant-numeric:tabular-nums}
.lesson-actions .btn{flex:1 1 160px;min-height:54px}

.lesson-end{
  padding:var(--s7) var(--s5);text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:var(--s3);
}
.end-emoji{font-size:56px;line-height:1;animation:jump 900ms var(--e-spring)}
.lesson-end p{color:var(--ink-2);max-width:38ch}
.lesson-end .btn-lg{margin-top:var(--s2)}
.demo .closing{text-align:center;font-size:14px;color:var(--ink);font-weight:600}
@media (min-width:560px){ .lesson-actions .btn{flex:0 0 auto;min-width:180px} }

/* =========================================================
   4 — TEACHERS — polaroids with washi tape
   ========================================================= */
.teachers .rail{padding-top:var(--s6)}
.teachers .rail > .card{flex-basis:72%}
.teacher{
  position:relative;display:flex;flex-direction:column;gap:2px;text-align:center;
  padding:var(--s3) var(--s3) var(--s5) !important;
}
.teacher:nth-child(odd){transform:rotate(-2deg)}
.teacher:nth-child(even){transform:rotate(2deg)}
.teacher::before{
  content:"";position:absolute;left:50%;top:-14px;width:96px;height:28px;margin-left:-48px;z-index:1;
  background:var(--edge);opacity:.75;border-radius:4px;transform:rotate(-4deg);
}
.teacher .portrait{aspect-ratio:4/5;border-radius:18px;margin-bottom:var(--s3);overflow:hidden;background:var(--cream)}
.teacher .portrait img{width:100%;height:100%;object-fit:cover;transition:transform var(--t-scene) var(--e-standard)}
.teacher h3{font-size:24px}
.teacher .cred{font-size:13px;color:var(--muted);font-weight:700}
.teacher .t-ages{font-size:14px;color:var(--ink);font-weight:800;margin-top:2px}
.teacher .ph{display:grid;place-items:center;background:var(--line);font-size:88px;line-height:1;filter:grayscale(1);opacity:.7}
/* Full teachers: grey, locked, still readable underneath */
.teacher .veil{
  position:absolute;inset:0;z-index:2;border-radius:inherit;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s2);
  background:rgba(74,70,94,.9);color:#fff;font-family:var(--display);font-size:22px;text-align:center;
}
.teacher .veil span{font-size:44px;line-height:1}
.teacher:has(.veil) .portrait img{filter:grayscale(1)}

.team{
  margin:var(--s6) 0 0;border-radius:32px;overflow:hidden;
  border:6px solid #fff;box-shadow:0 10px 0 var(--sky),var(--shadow-soft);
}
.team img{width:100%;height:auto;display:block}
.closing{margin-top:var(--s5);color:var(--ink);font-weight:600;font-size:15px}
.teachers .closing{text-align:center}
@media (min-width:900px){
  .teachers .rail > .card{flex-basis:calc((100% - var(--s4) * 3) / 4)}
  .team{transform:rotate(-1deg)}
  html.js .team.reveal.is-in{transform:rotate(-1deg)}
}

/* =========================================================
   4b — WRITTEN REVIEWS — pastel notes
   ========================================================= */
.reviews h2{margin-bottom:var(--s6)}
.rv-grid{display:grid;gap:var(--s5)}
.rv{
  --rv:var(--line-2);
  background:var(--rv-bg,var(--surface));border-radius:var(--r-l);
  padding:var(--s5);
  box-shadow:inset 0 0 0 3px var(--rv),0 7px 0 var(--rv);
  display:flex;flex-direction:column;gap:var(--s4);
  transition:transform var(--t-ui) var(--e-spring);
}
.rv-sky{--rv:var(--sky);--rv-bg:var(--sky-soft)}
.rv-pink{--rv:var(--bubble);--rv-bg:var(--bubble-soft)}
.rv-green{--rv:var(--grass);--rv-bg:var(--grass-soft)}
.rv-feature{--rv:var(--sun-edge);--rv-bg:var(--sun-soft);position:relative}
.rv-feature::after{
  content:"💛";position:absolute;right:18px;bottom:-18px;font-size:40px;
  animation:bobslow 5s ease-in-out infinite;
}
.rv-head{display:flex;align-items:center;gap:var(--s3)}
.rv-face{
  width:56px;height:56px;flex:0 0 56px;border-radius:50%;object-fit:cover;background:var(--cream);
  box-shadow:0 0 0 3px #fff,0 0 0 5px var(--rv);
}
.rv-who{min-width:0}
.rv-name{font-family:var(--display);font-weight:700;font-size:17px;line-height:1.2}
.rv-role{font-size:13px;color:var(--muted);font-weight:600}
.rv-head .stars{margin-left:auto;align-self:flex-start;font-size:14px;flex:0 0 auto}
.rv blockquote{color:var(--ink);font-size:15.5px;line-height:1.6;max-width:62ch}
.rv blockquote p + p{margin-top:var(--s3)}
.rv-feature .rv-name{font-size:19px}
.rv-feature blockquote{font-size:16.5px}
@media (min-width:600px){
  .rv-grid{grid-template-columns:repeat(2,1fr)}
  .rv-wide,.rv-feature{grid-column:1 / -1}
}
@media (min-width:900px){
  .rv-grid{grid-template-columns:repeat(3,1fr)}
  .rv-wide{grid-column:1 / span 2;grid-row:1}
  .rv-feature{grid-column:3;grid-row:1 / span 2}
}

/* =========================================================
   4c — PLANS + GUARANTEE
   ========================================================= */
.plans .lede{margin-bottom:var(--s6)}
.plan-grid{display:grid;gap:var(--s4);margin-top:var(--s6)}
.plan{
  position:relative;
  background:var(--surface);border-radius:32px;
  padding:var(--s6) var(--s5) var(--s5);
  display:flex;flex-direction:column;gap:var(--s3);
}
.plan-entry{box-shadow:inset 0 0 0 4px var(--mango),0 10px 0 var(--mango-ink),var(--shadow-soft)}
.plan-star{position:absolute;right:18px;top:-26px;font-size:48px;line-height:1;animation:spin-wobble 4s ease-in-out infinite}
@keyframes spin-wobble{0%,100%{transform:rotate(-12deg) scale(1)}50%{transform:rotate(12deg) scale(1.12)}}
.plan-tag{
  display:inline-flex;align-self:flex-start;
  font-size:13px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
  color:#fff;background:var(--bubble-ink);border-radius:var(--r-pill);padding:5px 14px;
  box-shadow:0 3px 0 #8E1442;
}
.plan h3{font-size:24px}
.plan-price{display:flex;align-items:baseline;gap:var(--s2)}
.plan-price b{font-family:var(--display);font-weight:700;font-size:64px;line-height:1;color:var(--mango-ink);font-variant-numeric:tabular-nums}
.plan-price span{color:var(--ink-2);font-weight:700;font-size:16px}
.plan-specs{display:flex;flex-direction:column;gap:var(--s3);margin-top:var(--s2)}
.plan-specs li{position:relative;padding-left:32px;font-size:15.5px;color:var(--ink-2);line-height:1.45}
.plan-specs li::before{
  content:"";position:absolute;left:0;top:1px;width:22px;height:22px;border-radius:50%;
  background:var(--grass-ink) no-repeat center/12px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1 6l3.2 3.2L11 2.4' stroke='%23fff' stroke-width='2.2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.plan-specs b{color:var(--ink);font-weight:800}
.plan-days{display:block;font-size:13px;color:var(--muted)}
.plan-note{font-size:14px;color:var(--muted);font-weight:600;margin-top:auto;padding-top:var(--s2)}
.plan .btn{margin-top:var(--s3)}

/* One plan: price card as one centred column. */
.plans-body{max-width:640px;margin-inline:auto}
.plans .kicker,.plans h2,.plans .lede{margin-inline:auto;text-align:center}
.plans .kicker{display:flex;width:fit-content}

/* =========================================================
   4d — GUARANTEE — one big promise over a ribbon, real kids + speech bubble
   ========================================================= */
.promise-ribbon{position:absolute;left:0;top:18%;width:100%;height:55%;z-index:0}
.promise-in{display:grid;gap:var(--s8);align-items:center}
.promise-copy{
  position:relative;background:var(--surface);border-radius:32px;padding:var(--s7) var(--s5) var(--s5);
  box-shadow:inset 0 0 0 3px var(--grass),0 10px 0 var(--grass-edge),var(--shadow-soft);
}
.promise-mark{position:absolute;top:-34px;left:22px;font-size:56px;line-height:1;transform:rotate(-12deg)}
.promise-copy h2{font-size:clamp(28px,4vw,42px)}
.promise-copy > p{margin-top:var(--s3);font-size:17px;color:var(--ink-2)}
.promise-pills{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s4)}
.promise-pills li{
  font-size:14px;font-weight:800;color:var(--grass-ink);background:var(--grass-soft);
  border-radius:var(--r-pill);padding:6px 14px 6px 12px;
}
.promise-pills li::before{content:"✓ ";font-weight:900}
.promise-art{position:relative;width:100%;max-width:440px;margin-inline:auto;aspect-ratio:1/.92}
.promise-blob{
  position:absolute;inset:14% 6% 4% 10%;border-radius:44% 56% 50% 50% / 52% 44% 56% 48%;
  background:var(--grape);background-image:radial-gradient(rgba(255,255,255,.18) 2px,transparent 2px);background-size:18px 18px;
  box-shadow:0 10px 0 var(--grape-edge);transform:rotate(-6deg);
}
.promise-face{
  position:absolute;border-radius:50%;overflow:hidden;background:var(--cream);
  border:6px solid #fff;box-shadow:0 6px 0 rgba(31,26,61,.2);
  animation:bobslow 6s ease-in-out infinite;
}
.promise-face img{width:100%;height:100%;object-fit:cover}
.promise-face.f1{width:44%;aspect-ratio:1;left:8%;top:36%}
.promise-face.f2{width:38%;aspect-ratio:1;right:4%;top:24%;animation-delay:-2s}
.promise-face.f3{width:32%;aspect-ratio:1;right:22%;bottom:0;animation-delay:-4s}
.promise-bubble{
  position:absolute;left:0;top:0;z-index:1;max-width:62%;
  font-family:var(--display);font-weight:600;font-size:17px;line-height:1.15;color:var(--grape-ink);text-align:center;
  background:#fff;border:4px solid var(--ink);border-radius:22px;padding:12px 16px;
  box-shadow:6px 6px 0 var(--ink);transform:rotate(-8deg);
}
.promise-bubble b{display:block;font-weight:700;font-size:36px;color:var(--ink)}
.promise-bubble::after{
  content:"";position:absolute;right:26px;bottom:-15px;width:22px;height:22px;background:#fff;
  border:solid var(--ink);border-width:0 4px 4px 0;transform:rotate(45deg);
}
.promise-art.is-in .promise-bubble{animation:pop 700ms var(--e-spring) 300ms both}
@keyframes pop{0%{transform:rotate(-8deg) scale(.6)}60%{transform:rotate(-4deg) scale(1.08)}100%{transform:rotate(-8deg) scale(1)}}
@media (min-width:900px){
  .promise-in{grid-template-columns:1fr 1fr;gap:var(--s8)}
  .promise-copy{padding:var(--s8) var(--s6) var(--s6)}
}

/* Marquee band opening the teachers section */
.ticker{
  position:relative;z-index:1;width:110%;margin:calc(var(--sec-y) * -1 + var(--s5)) 0 var(--s7) -5%;
  background:var(--grass);box-shadow:0 5px 0 var(--grass-edge);transform:rotate(-1.5deg);overflow:hidden;
}
.ticker p{display:flex;width:max-content;animation:tick 30s linear infinite}
.ticker span{
  white-space:pre;padding:10px 0;
  font-family:var(--display);font-weight:700;font-size:clamp(20px,3vw,30px);letter-spacing:.02em;
  text-transform:uppercase;color:var(--ink);
}
@keyframes tick{to{transform:translateX(-50%)}}

/* =========================================================
   5 — FAQ
   ========================================================= */
.faq h2{margin-bottom:var(--s5)}
.acc{background:var(--surface);border-radius:var(--r-l);overflow:hidden;box-shadow:inset 0 0 0 3px var(--line-2),0 8px 0 var(--line-2)}
.acc details{--p:var(--grape)}
.acc details:nth-child(6n+2){--p:var(--mango)}
.acc details:nth-child(6n+3){--p:var(--sky)}
.acc details:nth-child(6n+4){--p:var(--bubble)}
.acc details:nth-child(6n+5){--p:var(--grass)}
.acc details:nth-child(6n+6){--p:var(--sun)}
.acc details + details{border-top:2px solid var(--line)}
.acc summary{
  list-style:none;cursor:pointer;display:flex;align-items:center;gap:var(--s3);
  min-height:60px;padding:var(--s4) 20px;
  font-family:var(--display);font-weight:600;font-size:17.5px;
  transition:background-color var(--t-micro) var(--e-standard);
}
.acc summary::-webkit-details-marker{display:none}
.acc summary:hover{background:var(--cream)}
.plus{
  position:relative;margin-left:auto;flex:0 0 32px;width:32px;height:32px;border-radius:50%;
  background:var(--p);color:var(--ink);font-size:0;
  box-shadow:0 3px 0 rgba(31,26,61,.25);
  transition:background-color var(--t-ui) var(--e-standard),transform var(--t-ui) var(--e-spring);
}
.plus::before,.plus::after{
  content:"";position:absolute;left:50%;top:50%;
  width:13px;height:2.6px;margin:-1.3px 0 0 -6.5px;
  border-radius:2px;background:currentColor;
  transition:transform var(--t-ui) var(--e-spring);
}
.plus::after{transform:rotate(90deg)}
.acc details[open] .plus{background:var(--ink);color:#fff}
.acc details[open] .plus::after{transform:rotate(90deg) scaleX(0)}
.acc-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--t-ui) var(--e-standard)}
.acc details[open] .acc-body{grid-template-rows:1fr}
.acc details.is-closing .acc-body{grid-template-rows:0fr}
.acc-body > div{overflow:hidden}
.acc-body p{
  padding:0 20px var(--s4);font-size:15.5px;color:var(--ink-2);max-width:62ch;
  opacity:0;transition:opacity var(--t-ui) var(--e-standard) 120ms;
}
.acc details[open] .acc-body p{opacity:1}
.acc details.is-closing .acc-body p{opacity:0;transition-delay:0ms}
.faq .closing{text-align:center}

/* =========================================================
   6 — FINAL CTA — sunny panel with peeking friends
   ========================================================= */
.final{padding-block:var(--s8) calc(var(--sec-y) + var(--s6))}
.panel{
  position:relative;overflow:hidden;isolation:isolate;
  background:var(--sun);
  background-image:radial-gradient(rgba(255,255,255,.35) 2.5px,transparent 2.5px);
  background-size:22px 22px;
  box-shadow:0 12px 0 var(--sun-edge),var(--shadow-soft);
  border-radius:var(--r-xl);
  padding:var(--s9) var(--s5) var(--s8);text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:var(--s4);
}
.panel h2{color:var(--ink);max-width:20ch}
.panel p{max-width:42ch;font-size:16px;color:var(--ink);font-weight:500}
.peek{position:absolute;z-index:-1;font-size:clamp(46px,12vw,80px);line-height:1;animation:bobslow 6s ease-in-out infinite}
.peek-l{top:var(--s3);left:5%;animation-delay:-1s}
.peek-r{top:var(--s4);right:6%;animation-delay:-3.5s}
.peek-b{bottom:-10px;left:4%;animation-delay:-2s;font-size:clamp(50px,13vw,96px)}
.risk{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--s2) var(--s4);margin-top:var(--s2)}
.risk li{color:var(--ink);font-size:14px;font-weight:800;display:flex;align-items:center;gap:6px}
.risk li::before{
  content:"";width:14px;height:14px;flex:0 0 14px;background:var(--ink);
  -webkit-mask:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1 6l3.2 3.2L11 2.4' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  mask:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1 6l3.2 3.2L11 2.4' stroke='%23000' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
@media (min-width:768px){ .panel{padding:var(--s9) var(--s7)} }

/* =========================================================
   FOOTER — the grass the whole page lands on
   ========================================================= */
.ftr{padding-block:var(--s6) var(--s9);background:#267A33;color:#fff}
.ftr-hill{position:absolute;left:0;bottom:calc(100% - 1px);width:100%;height:90px;display:block}
.ftr-in{display:grid;gap:var(--s6)}
.ftr .logo-word{color:#fff}
.ftr-brand p{color:#EAF7EC;font-size:var(--fs-small);max-width:34ch;margin-top:var(--s3)}
.social{display:flex;gap:var(--s2);margin-top:var(--s4)}
.social a{
  display:grid;place-items:center;width:40px;height:40px;border-radius:50%;
  background:#fff;box-shadow:0 4px 0 #17561F;text-decoration:none;color:var(--grass-ink);
  transition:transform var(--t-ui) var(--e-spring);
}
.social a svg{width:18px;height:18px;display:block}
.ftr-col h3,.ftr-col .ftr-h{font-size:16px;margin-bottom:var(--s3);font-family:var(--display);font-weight:700;color:#fff}
.ftr-col li + li{margin-top:var(--s2)}
.ftr-col a{text-decoration:none;font-size:var(--fs-small);color:#fff;font-weight:600}
.ftr-col a:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.legal{margin-top:var(--s7);font-size:13px;color:#EAF7EC}
@media (min-width:768px){ .ftr-in{grid-template-columns:2fr 1fr 1fr 1fr;gap:var(--s6)} }

/* =========================================================
   LEGAL PAGES — aviso legal, privacidad, cookies
   ========================================================= */
.legal-page{background:linear-gradient(180deg,#7FC8FF 0,#B4E2FF 420px,#E2F4FF 900px) #E2F4FF}
.legal-page main{padding:calc(var(--hdr-h) + var(--s7)) 0 calc(var(--s9) + var(--s6))}
.doc{
  width:auto;max-width:820px;margin-inline:var(--pad-x);background:var(--surface);border-radius:32px;
  padding:var(--s6) var(--s5);
  box-shadow:inset 0 0 0 3px var(--line-2),0 8px 0 var(--line-2),var(--shadow-soft);
}
@media (min-width:768px){ .doc{padding:var(--s7) var(--s8)} }
@media (min-width:884px){ .doc{margin-inline:auto} }
.doc-back{margin-bottom:var(--s5);font-size:15px}
.doc h1{font-size:clamp(32px,5vw,46px)}
.doc-meta{margin-top:var(--s2);font-size:14px;font-weight:600;color:var(--muted)}
.doc h2{font-size:clamp(20px,2.4vw,24px);margin:var(--s6) 0 var(--s2)}
.doc p,.doc li{color:var(--ink-2);max-width:68ch;line-height:1.65}
.doc p + p{margin-top:var(--s3)}
.doc ul{list-style:disc;padding-left:1.3em;display:flex;flex-direction:column;gap:var(--s2);margin-top:var(--s3)}
.doc ul.doc-data{list-style:none;padding:var(--s4) var(--s5);background:var(--cream);border-radius:var(--r-m)}
.doc b{color:var(--ink)}
.doc a:not(.link-under){color:var(--sky-ink);font-weight:600;text-underline-offset:3px}
.doc code{font-size:.9em;background:var(--cream);border-radius:6px;padding:1px 6px}
.todo{background:var(--sun-soft);color:var(--ink);border-radius:6px;padding:0 4px;box-shadow:0 0 0 2px var(--sun-edge)}
.doc-table{overflow-x:auto;margin-top:var(--s4);border-radius:var(--r-m);box-shadow:inset 0 0 0 2px var(--line)}
.doc-table:focus-visible{outline:3px solid var(--grape-ink)}
.doc table{width:100%;min-width:620px;border-collapse:collapse;font-size:14px}
.doc th,.doc td{text-align:left;vertical-align:top;padding:var(--s3) var(--s4);border-bottom:1px solid var(--line)}
.doc th{font-family:var(--display);font-weight:600;color:var(--ink);background:var(--cream)}
.doc td{color:var(--ink-2)}
.ftr .logo{text-decoration:none}
.ftr-col a[aria-current="page"]{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}

/* =========================================================
   STICKY MOBILE CTA
   ========================================================= */
.sticky-cta{
  position:fixed;left:0;right:0;bottom:0;z-index:45;
  padding:12px var(--pad-x) calc(14px + env(safe-area-inset-bottom));
  background:var(--surface);border-radius:24px 24px 0 0;
  box-shadow:0 -10px 30px rgba(31,26,61,.18);
  transform:translateY(110%);
  transition:transform var(--t-ui) var(--e-entrance);
}
.sticky-cta.is-in{transform:none}
.sticky-cta .btn{width:100%;min-height:54px}
@media (min-width:900px){ .sticky-cta{display:none} }

/* =========================================================
   SCROLL REVEAL — only active when JS runs
   ========================================================= */
.js .reveal{
  opacity:.001;transform:translateY(22px);
  transition:opacity var(--t-scene) var(--e-entrance),transform var(--t-scene) var(--e-spring);
  transition-delay:var(--d,0ms);
}
.js .reveal.is-in{opacity:1;transform:none}
.js .kicker.reveal{transform:translateY(12px) scale(.8)}
.js .kicker.reveal.is-in{transform:none}
.js .team.reveal,.js .lesson.reveal{transform:scale(.94);transition-duration:var(--t-hero)}
.js .team.reveal.is-in,.js .lesson.reveal.is-in{transform:none}
.js .stat.reveal{transform:translateY(30px) scale(.9) rotate(-3deg)}
.js .stat.reveal.is-in{transform:none}
.js .rv.reveal{transform:translateY(24px) rotate(2deg)}
.js .rv.reveal.is-in{transform:none}
.js .panel.reveal{transform:scale(.9)}
.js .panel.reveal.is-in{transform:none}

/* Hover lifts, after the reveal rules so they win once a card is in. */
/* Every hover lift lives here, so a tap on a phone never leaves a card or
   button stuck in its hover pose. Touch gets the :active press instead. */
@media (hover:hover){
  .btn:hover .arrow{transform:translateX(4px)}
  .btn-primary:not(:disabled):hover{background:var(--cta-deep);transform:translateY(-2px);box-shadow:0 7px 0 var(--cta-edge),0 18px 24px -10px rgba(202,75,21,.6)}
  .btn-outline:hover{transform:translateY(-2px);box-shadow:inset 0 0 0 2.5px var(--ink),0 7px 0 var(--ink)}
  .btn-invert:hover{transform:translateY(-2px);box-shadow:0 7px 0 #000,0 18px 24px -10px rgba(0,0,0,.5)}
  .vid-shot:hover img{transform:scale(1.05)}
  .vid-shot:hover .vid-play{transform:scale(1.12) rotate(-6deg)}
  .opt:hover{border-color:var(--grape)}
  .tile-btn:hover{border-color:var(--grape)}
  .teacher:hover .portrait img{transform:scale(1.05)}
  .acc summary:hover .plus{transform:rotate(90deg) scale(1.08)}
  .social a:hover{transform:translateY(-3px) rotate(-8deg)}
  .rail > .card:hover{transform:translateY(-6px) rotate(-1deg)}
  .rail > .teacher:hover{transform:translateY(-6px) rotate(0)}
  .js .reveal.is-in:hover{transition-delay:0ms}
  .js .stat.is-in:hover{transform:translateY(-4px) rotate(-1.5deg)}
  .js .rv.is-in:hover{transform:translateY(-5px) rotate(-1deg)}
}

/* =========================================================
   CUPO — the /cupo placement funnel (cupo.html + cupo.js)
   One card on the still cartoon world; each screen slides in.
   ========================================================= */
.cupo-page main{
  min-height:100svh;display:flex;flex-direction:column;align-items:center;
  padding:calc(var(--hdr-h) + var(--s6)) var(--pad-x) calc(var(--land-h) * .55 + env(safe-area-inset-bottom));
}
.cupo-page .stk{pointer-events:none}
.quiz{position:relative;z-index:1;width:100%;max-width:480px;margin-top:0;scroll-margin-top:calc(var(--hdr-h) + var(--s5))}
.scr{
  display:flex;flex-direction:column;gap:var(--s3);padding:var(--s5) var(--s4) var(--s4);
  animation:scr-in var(--t-scene) var(--e-entrance) both;
}
.scr.back{animation-name:scr-back}
.scr[data-static]{animation:none} /* server-rendered intro: visible at first paint */
@keyframes scr-in{from{opacity:0;transform:translateX(32px)}}
@keyframes scr-back{from{opacity:0;transform:translateX(-32px)}}
.scr-center{align-items:center;text-align:center}
.scr > .kicker{align-self:flex-start;margin-bottom:0}
.scr-center > .kicker{align-self:center}
.scr h1{font-size:clamp(30px,8vw,40px)}
.scr h2{font-size:clamp(24px,6.4vw,30px)}
.scr h1:focus,.scr h2:focus{outline:none}
.scr > p{color:var(--ink-2);max-width:40ch}
.scr > p b{color:var(--ink)}
.btn-block{width:100%;margin-top:var(--s2)}
.btn[aria-disabled]{background:var(--line);color:var(--muted);box-shadow:0 4px 0 var(--line-2);transform:none}

.big-emoji{font-size:64px;line-height:1;display:inline-block;animation:bob 2.6s ease-in-out infinite}
.big-emoji.seek{animation:seek 1.1s ease-in-out infinite}
.big-emoji.party{animation:party 1.6s ease-in-out infinite}
@keyframes seek{0%,100%{transform:translate(-14px,0) rotate(-12deg)}50%{transform:translate(14px,-10px) rotate(12deg)}}

.q-preview{display:flex;gap:var(--s2);flex-wrap:wrap;justify-content:center;margin-block:var(--s2)}
.q-preview li{
  display:flex;align-items:center;gap:6px;padding:6px 14px 6px 8px;border-radius:var(--r-pill);
  background:var(--cream);font-weight:800;font-size:14px;
  animation:opt-in 480ms var(--e-spring) both;animation-delay:calc(200ms + var(--i) * 90ms);
}
.q-preview span{font-size:20px}

/* Question HUD: back · progress · n/3 */
.q-hud{padding:0 0 var(--s2)}
.q-back{
  flex:0 0 auto;width:40px;height:40px;margin-left:-6px;border-radius:50%;border:none;cursor:pointer;
  background:var(--cream);color:var(--ink-2);font:700 26px/1 var(--display);padding-bottom:3px;
}
.q-count{font-family:var(--display);font-weight:700;font-size:15px;color:var(--grape-ink);min-width:2.2em;text-align:right}
.q-hint{font-size:15px;margin-top:calc(var(--s2) * -1)}

.quiz .opt{animation:opt-in 420ms var(--e-spring) both;animation-delay:calc(var(--i,0) * 40ms)}
.quiz .opt.pop{animation:pop 320ms var(--e-spring) both}
@keyframes opt-in{from{opacity:0;transform:translateY(14px) scale(.94)}}

.ages{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s3)}
.opt.age{
  flex-direction:column;justify-content:center;gap:0;padding:var(--s2) 0;min-height:80px;text-align:center;
  border-color:var(--c);border-bottom-color:var(--c-edge);background:var(--c-soft);
}
.opt.age b{font-family:var(--display);font-size:32px;line-height:1;font-weight:700}
.opt.age small{font-size:12px;font-weight:700;color:var(--ink-2)}
.ages li:nth-child(4n+1) .age{--c:var(--sun);--c-edge:var(--sun-edge);--c-soft:var(--sun-soft)}
.ages li:nth-child(4n+2) .age{--c:var(--grass);--c-edge:var(--grass-edge);--c-soft:var(--grass-soft)}
.ages li:nth-child(4n+3) .age{--c:var(--sky);--c-edge:var(--sky-edge);--c-soft:var(--sky-soft)}
.ages li:nth-child(4n+4) .age{--c:var(--bubble);--c-edge:var(--bubble-ink);--c-soft:var(--bubble-soft)}
.opt.age[aria-pressed="true"]{border-color:var(--grape);border-bottom-color:var(--grape-edge);background:var(--grape);color:#fff}
.opt.age[aria-pressed="true"] small{color:#fff}

.countries{display:grid;grid-template-columns:1fr 1fr;gap:var(--s2)}
.opt.country{min-height:52px;padding:var(--s2) var(--s3);font-size:15px;gap:var(--s2);line-height:1.2}
.opt.country .flag{font-size:22px;line-height:1}
.opt.country .here{margin-left:auto;font-size:14px}
.countries li:first-child:has(.here){grid-column:1 / -1}

.opt.level{padding:var(--s3) var(--s4)}
.opt.level .lvl-emoji{font-size:32px;line-height:1}
.opt.level b,.opt.level small{display:block}
.opt.level small{font-weight:600;font-size:14px;color:var(--muted)}

/* "Buscando grupos…": each line ticks green in turn */
.checks{display:flex;flex-direction:column;gap:var(--s3);margin-top:var(--s2);text-align:left}
.checks li{
  display:flex;align-items:center;gap:var(--s3);font-weight:700;opacity:.3;
  animation:check-on 1ms linear both;animation-delay:calc(350ms + var(--i) * 420ms);
}
.checks .ck{
  position:relative;width:26px;height:26px;border-radius:50%;background:var(--line);
  -webkit-mask:none;mask:none;vertical-align:0;
  animation:check-pop 420ms var(--e-spring) both;animation-delay:inherit;
}
.checks .ck::after{content:"✓";position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-weight:800;font-size:15px}
@keyframes check-on{to{opacity:1}}
@keyframes check-pop{from{transform:scale(.4)}to{background:var(--grass-ink);transform:none}}

.slots{margin-top:var(--s2)}
.opt.slot{gap:var(--s3);padding:var(--s3) var(--s4);min-height:76px}
.slot-radio{
  flex:0 0 28px;height:28px;border-radius:50%;border:2.5px solid var(--line-2);
  display:grid;place-items:center;color:transparent;
  transition:background-color var(--t-micro) var(--e-standard),border-color var(--t-micro) var(--e-standard);
}
.slot-radio .ck{font-size:14px}
.slot-main{display:flex;flex-direction:column;flex:1;min-width:0}
.slot-days{font-size:15px;font-weight:700;color:var(--ink-2)}
.slot-time{font-family:var(--display);font-size:26px;font-weight:700;line-height:1.1}
.slot-tag{
  flex:0 0 auto;font-size:12px;font-weight:800;white-space:nowrap;
  color:var(--bubble-ink);background:var(--bubble-soft);border-radius:var(--r-pill);padding:4px 10px;
}
.opt.slot[aria-pressed="true"]{border-color:var(--grass-edge);background:var(--grass-soft)}
.opt.slot[aria-pressed="true"] .slot-radio{background:var(--grass-ink);border-color:var(--grass-ink);color:#fff}
.tz-note{font-weight:700;color:var(--sky-ink)}

.recap{
  display:inline-flex;align-items:center;gap:var(--s2);padding:var(--s2) var(--s4);border-radius:var(--r-pill);
  background:var(--grass-soft);color:var(--grass-ink);font-weight:800;
}
.recap.price-line{display:block;align-self:stretch;border-radius:var(--r-m);font-size:14px;font-weight:700;padding:var(--s2) var(--s3);text-align:center}
.recap.price-line b{font-weight:900}
/* Results: the whole screen (slots, price, button) fits a 375x667 phone without scrolling */
.scr-results{gap:var(--s2)}
.scr-results .opt.slot{min-height:60px;padding-block:var(--s2)}
.scr-results .slot-time{font-size:22px}
.end-actions{display:flex;flex-direction:column;gap:var(--s3);width:100%;margin-top:var(--s2)}
.end-actions .btn-block{margin-top:0}

/* =========================================================
   LITE MODE — low-memory devices and Data Saver (set in <head>).
   Scenery holds still; scroll parallax, reveals and the demo stay.
   ========================================================= */
.lite .cloud,.lite .sun .rays,.lite .sun .eyes,.lite .stk i,.lite .ticker p,.lite .peek,
.lite .chip-xp,.lite .chip-streak,.lite .vid-play::before,.lite .plan-star,.lite .rv-feature::after,
.lite .breathe::after,.lite .chip-dot{animation:none}
.lite .cloud:nth-child(1){left:6%} .lite .cloud:nth-child(2){left:62%} .lite .cloud:nth-child(3){left:30%}
.lite .cloud:nth-child(4){left:80%} .lite .cloud:nth-child(5){left:44%}

/* /cupo — "Otra edad" */
.opt.age-other{justify-content:center;min-height:52px;font-size:15px}
.opt.age-other[aria-expanded="true"]{border-color:var(--grape);background:var(--grape-soft)}
.age-form{display:flex;flex-direction:column;gap:6px}
.age-form[hidden]{display:none}
.age-form label{font-weight:800;font-size:15px;color:var(--ink)}
.age-row{display:flex;gap:var(--s2);align-items:stretch}
.age-row input{
  flex:0 0 96px;min-height:54px;padding:var(--s3);text-align:center;font:700 22px var(--display);color:var(--ink);
  background:var(--surface);border:2.5px solid var(--line-2);border-bottom-width:5px;border-radius:var(--r-m);
}
.age-row input:focus-visible{outline:3px solid color-mix(in srgb,var(--grape) 40%,transparent);outline-offset:2px;border-color:var(--grape)}
.age-row .btn{flex:1 1 0;min-width:0;margin-top:0;padding-inline:var(--s3)}
.age-row input{min-width:0;flex-basis:84px}

/* /cupo — "Ya casi estamos": name + WhatsApp number with country-code picker */
button.link-under{background:none;border:0;padding:0;font:inherit;cursor:pointer}
.fld{display:flex;flex-direction:column;gap:6px;position:relative}
.fld label{font-weight:800;font-size:15px;color:var(--ink)}
.fld input[type=text],.fld input[type=tel]{
  width:100%;min-height:54px;padding:var(--s3) var(--s4);font:700 16px var(--body);color:var(--ink);
  background:var(--surface);border:2.5px solid var(--line-2);border-bottom-width:5px;border-radius:var(--r-m);
}
.fld input::placeholder{color:var(--muted);font-weight:600;opacity:.8}
.fld input:focus-visible,.cc-btn:focus-visible{outline:3px solid color-mix(in srgb,var(--grape) 40%,transparent);outline-offset:2px;border-color:var(--grape)}
.fld input[aria-invalid=true],.tel.bad .cc-btn{border-color:var(--bubble-ink);background:var(--bubble-soft)}
.fld-hint{font-size:13px;font-weight:600;color:var(--muted)}
.fld-err{font-size:14px;font-weight:700;color:var(--bubble-ink);line-height:1.35}
.tel{display:flex;gap:var(--s2);align-items:stretch}
.tel input{flex:1 1 auto;min-width:0}
.cc{flex:0 0 auto}
.cc-btn{
  display:flex;align-items:center;gap:6px;height:100%;min-height:54px;padding:0 var(--s3);cursor:pointer;
  font:800 16px var(--body);color:var(--ink);background:var(--cream);
  border:2.5px solid var(--line-2);border-bottom-width:5px;border-radius:var(--r-m);
}
.cc-btn .flag{font-size:22px;line-height:1}
.cc-btn i{font-style:normal;font-size:12px;color:var(--ink-2)}
.cc-pop{
  position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:5;background:var(--surface);
  border:2.5px solid var(--line-2);border-radius:var(--r-m);box-shadow:var(--shadow-soft);overflow:hidden;
}
.cc-pop[hidden]{display:none}
.cc-pop input{width:100%;padding:var(--s3) var(--s4);font:700 16px var(--body);color:var(--ink);border:0;border-bottom:2px solid var(--line);background:var(--cream)}
.cc-pop input:focus-visible{outline:none;background:var(--grape-soft)}
.cc-list{max-height:248px;overflow-y:auto;overscroll-behavior:contain}
.cc-opt,.cc-none{display:flex;align-items:center;gap:var(--s3);padding:10px var(--s4);font-size:15px;font-weight:700;cursor:pointer}
.cc-opt .flag{font-size:22px;line-height:1}
.cc-opt .cc-n{flex:1 1 auto;min-width:0}
.cc-opt b{color:var(--ink-2);font-variant-numeric:tabular-nums}
.cc-opt.act,.cc-opt:hover{background:var(--grape-soft)}
.cc-opt[aria-selected=true]{background:var(--sky-soft)}
.cc-none{color:var(--muted);cursor:default}

/* =========================================================
   REDUCED MOTION — non-negotiable
   ========================================================= */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.001ms !important;animation-iteration-count:1 !important;
    transition-duration:.001ms !important;transition-delay:0ms !important;
  }
  .cloud{animation:none !important;transform:none}
  .cloud:nth-child(1){left:6%} .cloud:nth-child(2){left:62%} .cloud:nth-child(3){left:30%}
  .cloud:nth-child(4){left:80%} .cloud:nth-child(5){left:44%}
  .squiggle{background-size:100% .32em}
  .js .reveal{opacity:1;transform:none}
}
