:root{
  --ink:#fff8ee; --ink-dim:#cfc6e8; --night:#1b1640; --night2:#2a1f5c; --plum:#4a2a6e;
  --mint:#6ff0b4; --mint2:#2fc98a; --sky:#5cc8ff; --sky2:#3a7bff; --amber:#ffc46b; --peach:#ff8f6b;
  --violet:#b38cff; --pink:#ff7ac3;
  --orb: min(64vw, 300px, 40vh);
  --font: ui-rounded, "SF Pro Rounded", "Nunito", "Varela Round", "Quicksand", system-ui, -apple-system, "Segoe UI", sans-serif;
  --c1:var(--mint); --c2:var(--mint2); --glow: rgba(111,240,180,.55);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  font-family:var(--font); color:var(--ink); background:var(--night);
  -webkit-tap-highlight-color:transparent; overflow-x:hidden;
  min-height:100dvh;
}
button{font-family:inherit;cursor:pointer;color:inherit}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
[hidden]{display:none!important}

/* ---------- sky ---------- */
.sky{position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(120% 70% at 50% 110%, #ff9a7a33 0%, transparent 60%),
    radial-gradient(90% 60% at 80% -10%, #7b5cff44 0%, transparent 60%),
    linear-gradient(180deg,#14103a 0%, #241a57 50%, #3b2366 100%);}
.stars{position:absolute;inset:-50%;background-repeat:repeat;opacity:.7}
.stars.s1{background-image:radial-gradient(1.5px 1.5px at 20px 30px,#fff,transparent),radial-gradient(1px 1px at 120px 80px,#fff,transparent),radial-gradient(1.5px 1.5px at 200px 160px,#ffe9b0,transparent),radial-gradient(1px 1px at 60px 190px,#fff,transparent);background-size:240px 220px;animation:drift 120s linear infinite}
.stars.s2{background-image:radial-gradient(2px 2px at 80px 40px,#cfe9ff,transparent),radial-gradient(1.2px 1.2px at 260px 210px,#fff,transparent),radial-gradient(1.6px 1.6px at 170px 300px,#ffd6f0,transparent);background-size:340px 360px;opacity:.5;animation:drift 200s linear infinite reverse, twinkle 4s ease-in-out infinite}
.glow-floor{position:absolute;left:50%;bottom:-30vh;width:140vw;height:60vh;transform:translateX(-50%);border-radius:50%;background:radial-gradient(closest-side,#ffb27a33,transparent)}
@keyframes drift{to{transform:translate(120px,80px)}}
@keyframes twinkle{50%{opacity:.25}}
#confetti{position:fixed;inset:0;z-index:30;pointer-events:none;width:100%;height:100%}

/* ---------- screens ---------- */
.screen{position:relative;z-index:1;display:none;min-height:100dvh}
body[data-screen="setup"] #setup{display:flex}
body[data-screen="lesson"] #lesson{display:flex}
#setup{align-items:center;justify-content:center;padding:24px}
.setup-card{width:min(440px,100%);background:linear-gradient(180deg,#ffffff14,#ffffff08);border:1px solid #ffffff22;border-radius:32px;padding:30px 26px 24px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 30px 80px #0006, inset 0 1px 0 #ffffff22;text-align:center}
.brand{display:inline-flex;align-items:center;gap:10px;font-weight:800;letter-spacing:.02em;font-size:18px;color:var(--mint)}
.brand.small{font-size:16px}
.mini-orb{width:22px;height:22px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#eafff5,var(--mint) 45%,var(--mint2));box-shadow:0 0 14px var(--mint)}
h1{font-size:clamp(38px,9vw,52px);margin:10px 0 4px;line-height:1;letter-spacing:-.01em;background:linear-gradient(90deg,#ffe3a3,#ff9f7a 50%,#ff7ac3);-webkit-background-clip:text;background-clip:text;color:transparent}
.sub{margin:0 0 22px;color:var(--ink-dim);font-size:15px}
.field{display:block;border:0;margin:0 0 18px;padding:0;text-align:left}
.field>span,.field legend{display:block;font-weight:700;font-size:14px;color:var(--ink-dim);margin:0 0 8px 4px;padding:0}
.field input{width:100%;font:inherit;font-size:22px;font-weight:700;padding:14px 18px;border-radius:18px;border:2px solid #ffffff26;background:#0e0b2a99;color:var(--ink);outline:none}
.field input:focus{border-color:var(--mint);box-shadow:0 0 0 4px #6ff0b433}
.themes{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.theme{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 6px 12px;border-radius:20px;border:2px solid #ffffff22;background:#ffffff0d;font-weight:800;font-size:15px}
.theme .em{font-size:30px}
.theme small{font-weight:700;font-size:11px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.06em}
.theme.on{border-color:var(--amber);background:#ffc46b22;box-shadow:0 0 0 4px #ffc46b22}
.theme.soon{opacity:.5;cursor:not-allowed;filter:grayscale(.6)}
.big-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;width:100%;margin-top:6px;padding:18px 24px;font-size:22px;font-weight:800;border:0;border-radius:999px;color:#2a1240;background:linear-gradient(180deg,#ffd98a,#ff9f6b);box-shadow:0 10px 0 #c8603e, 0 18px 40px #ff8f6b55;transition:transform .12s, box-shadow .12s}
.big-btn:active{transform:translateY(6px);box-shadow:0 4px 0 #c8603e, 0 10px 20px #ff8f6b55}
.big-btn.alt{background:linear-gradient(180deg,#9ff7cf,#43d69b);box-shadow:0 10px 0 #22916a,0 18px 40px #43d69b44;width:auto;padding:16px 34px}
.big-btn.alt:active{box-shadow:0 4px 0 #22916a}
.fine{color:var(--ink-dim);font-size:13px;margin:16px 0 0;line-height:1.45}
.link-btn{background:none;border:0;color:var(--ink-dim);text-decoration:underline;text-underline-offset:3px;font-size:15px;font-weight:700;margin-top:12px;padding:8px}

/* ---------- lesson layout ---------- */
#lesson{flex-direction:column;align-items:center;padding:max(12px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom))}
.topbar{width:100%;max-width:880px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.steps{display:flex;gap:7px;list-style:none;margin:0;padding:0}
.steps li{width:10px;height:10px;border-radius:50%;background:#ffffff26;transition:all .4s}
.steps li.done{background:var(--mint)}
.steps li.now{background:var(--amber);box-shadow:0 0 0 4px #ffc46b33;width:22px;border-radius:6px}
.toggles{display:flex;gap:8px}
.chip{min-width:44px;height:36px;padding:0 10px;border-radius:12px;border:1.5px solid #ffffff33;background:#ffffff10;font-weight:800;font-size:13px;letter-spacing:.06em;display:inline-flex;align-items:center;justify-content:center}
.chip:not(.on){opacity:.5;text-decoration:line-through}
.ico-sound{width:18px;height:16px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 20'%3E%3Cpath d='M2 7h4l6-5v16l-6-5H2z'/%3E%3Cpath d='M16 6c1.5 1.2 1.5 6.8 0 8M19 3c3 2.5 3 11.5 0 14' stroke='black' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 20'%3E%3Cpath d='M2 7h4l6-5v16l-6-5H2z'/%3E%3Cpath d='M16 6c1.5 1.2 1.5 6.8 0 8M19 3c3 2.5 3 11.5 0 14' stroke='black' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}

.stage{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;max-width:640px;padding:14px 0 6px;min-height:0}

/* ---------- the orb ---------- */
.orb{position:relative;width:var(--orb);height:var(--orb);border:0;padding:0;background:none;border-radius:50%;flex-shrink:0;outline:none}
.orb:focus-visible{box-shadow:0 0 0 4px #fff6}
.orb .halo{position:absolute;inset:-22%;border-radius:50%;background:radial-gradient(closest-side,var(--glow),transparent 70%);filter:blur(6px);transition:background .6s;animation:breathe 4.5s ease-in-out infinite}
.orb .ring{position:absolute;inset:-4%;border-radius:50%;border:3px solid var(--c1);opacity:.0;transition:border-color .5s}
.orb .core{position:absolute;inset:0;border-radius:50%;overflow:hidden;
  background:
    radial-gradient(circle at 32% 26%, #ffffffee 0%, #ffffff55 12%, transparent 30%),
    radial-gradient(circle at 50% 60%, var(--c1) 0%, var(--c2) 62%, #0d0a2a 112%);
  box-shadow: inset 0 -18px 40px #0004, inset 0 10px 30px #fff4, 0 0 60px var(--glow), 0 0 0 6px #ffffff14;
  transition:box-shadow .6s;animation:breathe-core 4.5s ease-in-out infinite;display:flex;flex-direction:column;align-items:center;justify-content:center}
.orb .core::after{content:"";position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0deg, transparent 0 70%, #ffffff55 85%, transparent 100%);opacity:0;transition:opacity .4s}
.face{display:flex;gap:calc(var(--orb)*.14);margin-top:-4%}
.eye{display:block;width:calc(var(--orb)*.06);height:calc(var(--orb)*.09);background:#1b1640;border-radius:50%;animation:blink 5s infinite;transform-origin:center;transition:all .3s}
.wordmark{margin-top:calc(var(--orb)*.07);font-weight:800;color:#1b1640cc;font-size:calc(var(--orb)*.075);letter-spacing:.08em;text-transform:lowercase}
@keyframes blink{0%,46%,50%,100%{transform:scaleY(1)}48%{transform:scaleY(.1)}}
@keyframes breathe{0%,100%{transform:scale(.96);opacity:.8}50%{transform:scale(1.04);opacity:1}}
@keyframes breathe-core{0%,100%{transform:scale(.985)}50%{transform:scale(1.015)}}

/* idle = mint (Sprout is waiting / your turn) */
body[data-orb="idle"]{--c1:#7df5be;--c2:#23b47c;--glow:rgba(111,240,180,.5)}
body[data-orb="idle"] .orb .r1{opacity:.35;animation:ringpulse 3.6s ease-out infinite}
/* waiting for child: ring invites */
body[data-orb="idle"].await .orb .r1,body[data-orb="idle"].await .orb .r2{animation:ringpulse 2.4s ease-out infinite;opacity:.5}
body[data-orb="idle"].await .orb .r2{animation-delay:1.2s}
/* listening = sky blue ripples */
body[data-orb="listening"]{--c1:#7fd8ff;--c2:#2f6dff;--glow:rgba(92,200,255,.65)}
body[data-orb="listening"] .orb .ring{opacity:.7;animation:ripple 1.5s ease-out infinite}
body[data-orb="listening"] .orb .r2{animation-delay:.5s}
body[data-orb="listening"] .orb .r3{animation-delay:1s}
body[data-orb="listening"] .eye{height:calc(var(--orb)*.1);width:calc(var(--orb)*.07)}
/* thinking = violet sweep */
body[data-orb="thinking"]{--c1:#c9a8ff;--c2:#6b46e8;--glow:rgba(179,140,255,.6)}
body[data-orb="thinking"] .orb .core::after{opacity:1;animation:spin 1.1s linear infinite}
body[data-orb="thinking"] .eye{transform:translateY(-30%) translateX(20%)}
/* speaking = warm amber, talks */
body[data-orb="speaking"]{--c1:#ffd27a;--c2:#ff8a5c;--glow:rgba(255,170,100,.65)}
body[data-orb="speaking"] .orb .core{animation:talk .42s ease-in-out infinite alternate}
body[data-orb="speaking"] .orb .halo{animation:talkhalo .42s ease-in-out infinite alternate}
body[data-orb="speaking"] .orb .r1{opacity:.45;animation:ringpulse 1.2s ease-out infinite}
/* celebrating = rainbow */
body[data-orb="celebrating"]{--c1:#ffe27a;--c2:#ff6fb5;--glow:rgba(255,140,200,.7)}
body[data-orb="celebrating"] .orb .halo{background:conic-gradient(from 0deg,#ff7ac3,#ffc46b,#6ff0b4,#5cc8ff,#b38cff,#ff7ac3);filter:blur(22px);opacity:.85;animation:spin 2.2s linear infinite}
body[data-orb="celebrating"] .orb .core{animation:bounce .6s ease-in-out infinite alternate}
body[data-orb="celebrating"] .orb .ring{border-color:#fff;opacity:.6;animation:ripple 1s ease-out infinite}
body[data-orb="celebrating"] .orb .r2{animation-delay:.33s;border-color:#ffc46b}
body[data-orb="celebrating"] .orb .r3{animation-delay:.66s;border-color:#ff7ac3}
body[data-orb="celebrating"] .eye{height:calc(var(--orb)*.035);border-radius:50% 50% 0 0;background:none;border:calc(var(--orb)*.016) solid #1b1640;border-bottom:0;width:calc(var(--orb)*.08);animation:none}
@keyframes ringpulse{0%{transform:scale(1);opacity:.5}100%{transform:scale(1.28);opacity:0}}
@keyframes ripple{0%{transform:scale(1);opacity:.8}100%{transform:scale(1.45);opacity:0}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes talk{from{transform:scale(.985)}to{transform:scale(1.035)}}
@keyframes talkhalo{from{transform:scale(.95);opacity:.75}to{transform:scale(1.1);opacity:1}}
@keyframes bounce{from{transform:scale(1) translateY(0)}to{transform:scale(1.05) translateY(-4%)}}

.state-label{margin-top:18px;font-weight:800;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--c1);min-height:18px;transition:color .4s}
.caption{margin-top:10px;max-width:560px;min-height:3.2em;text-align:center;font-size:clamp(16px,2.4vw,19px);line-height:1.4;color:var(--ink);background:#0b08245c;border:1px solid #ffffff14;border-radius:18px;padding:10px 16px;opacity:1;transition:opacity .3s}
body.no-cc .caption{opacity:0;visibility:hidden}
.heard{min-height:22px;margin-top:6px;font-size:14px;color:#9fd9ff;font-style:italic;text-align:center}

/* ---------- controls ---------- */
.controls{width:100%;max-width:880px;display:flex;flex-direction:column;align-items:center;gap:14px;padding-bottom:4px}
.ptt{display:inline-flex;align-items:center;justify-content:center;gap:12px;min-width:min(320px,86vw);padding:18px 30px;border-radius:999px;border:0;font-size:21px;font-weight:800;color:#0d1b3c;background:linear-gradient(180deg,#a8e6ff,#4fb2ff);box-shadow:0 9px 0 #2b6fc0,0 16px 40px #4fb2ff55;touch-action:none;user-select:none;-webkit-user-select:none;transition:transform .1s, box-shadow .1s, filter .3s}
.ptt .mic svg{width:28px;height:28px;display:block;fill:#0d1b3c;stroke:#0d1b3c;stroke-width:2;stroke-linecap:round}
.ptt:active,.ptt.live{transform:translateY(6px);box-shadow:0 3px 0 #2b6fc0,0 0 0 10px #5cc8ff33,0 0 50px #5cc8ff99}
.ptt.live .mic{animation:micpulse .8s ease-in-out infinite alternate}
.ptt.off{filter:grayscale(.85) brightness(.8)}
@keyframes micpulse{to{transform:scale(1.2)}}
.pill-btn{padding:14px 30px;border-radius:999px;border:0;font-size:19px;font-weight:800;color:#2a1240;background:linear-gradient(180deg,#ffe3a3,#ffb36b);box-shadow:0 7px 0 #c97b3d;transition:transform .1s}
.pill-btn:active{transform:translateY(5px);box-shadow:0 2px 0 #c97b3d}
.pill-btn.done{animation:nudge 2.2s ease-in-out infinite}
@keyframes nudge{0%,80%,100%{transform:none}88%{transform:scale(1.06)}}
.text-row{display:flex;gap:10px;width:min(460px,100%)}
.text-row input{flex:1;min-width:0;font:inherit;font-size:20px;font-weight:700;padding:12px 18px;border-radius:999px;border:2px solid #ffc46b88;background:#0e0b2acc;color:var(--ink);outline:none}
.text-row input:focus{border-color:var(--amber);box-shadow:0 0 0 4px #ffc46b33}

.tiles-wrap{width:100%;display:flex;flex-direction:column;align-items:center}
.tiles-label{font-size:11px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:#ffffff66;margin-bottom:8px}
.tiles{display:grid;grid-template-columns:repeat(10,1fr);gap:10px;width:100%;max-width:760px}
.tile{--h:0;aspect-ratio:1/1.08;border:0;border-radius:16px;font-size:clamp(24px,4vw,34px);font-weight:900;color:#3a2410;
  background:linear-gradient(180deg,#fff3dc 0%,#f6dcb0 100%);
  box-shadow:inset 0 -6px 0 hsl(var(--h) 70% 62%), 0 6px 0 #a3794a, 0 10px 18px #0005;
  position:relative;transition:transform .1s, box-shadow .1s, opacity .3s, filter .3s}
.tile::before{content:"";position:absolute;top:7px;right:8px;width:7px;height:7px;border-radius:50%;background:hsl(var(--h) 70% 60%);opacity:.8}
.tile:active,.tile.hit{transform:translateY(5px);box-shadow:inset 0 -6px 0 hsl(var(--h) 70% 62%), 0 1px 0 #a3794a, 0 0 0 5px #fff8, 0 0 30px hsl(var(--h) 90% 70%)}
body:not(.want-number) .tile{opacity:.55;filter:saturate(.6)}
body.want-number .tile{animation:tilewake .5s ease-out}
@keyframes tilewake{from{transform:translateY(6px)}}
.tile.wiggle{animation:wiggle .4s}
@keyframes wiggle{25%{transform:rotate(-6deg)}75%{transform:rotate(6deg)}}

.end-row{display:flex;flex-direction:column;align-items:center;gap:4px;margin:4px 0 8px}
.toast{position:fixed;left:50%;bottom:22px;transform:translate(-50%,calc(100% + 60px));visibility:hidden;background:#fff;color:#2a1240;font-weight:700;font-size:15px;padding:12px 18px;border-radius:16px;box-shadow:0 10px 30px #0007;transition:transform .35s cubic-bezier(.2,1.4,.4,1);z-index:40;max-width:min(92vw,520px);text-align:center}
.toast.show{transform:translate(-50%,0);visibility:visible}

/* ---------- parent panel ---------- */
.parent{position:fixed;inset:0;z-index:50;background:#0a0720b3;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;align-items:flex-end;justify-content:center}
.parent-sheet{width:min(720px,100%);max-height:92dvh;overflow:auto;background:#fffaf2;color:#2a1f3d;border-radius:28px 28px 0 0;padding:22px 22px 30px;box-shadow:0 -20px 60px #0008;animation:sheet .45s cubic-bezier(.2,1,.3,1);font-family:system-ui,-apple-system,"Segoe UI",sans-serif}
@media (min-width:760px){.parent{align-items:center}.parent-sheet{border-radius:28px}}
@keyframes sheet{from{transform:translateY(60px);opacity:0}}
.parent-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.eyebrow{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#8a6fb0}
.parent h2{margin:4px 0 2px;font-size:26px;font-family:var(--font)}
.parent .x{border:0;background:#efe6f7;width:40px;height:40px;border-radius:50%;font-size:26px;line-height:1;color:#4a2a6e}
.p-meta{color:#7a6d8c;font-size:14px;margin-bottom:16px}
.p-card{background:#fff;border:1px solid #eadff3;border-radius:20px;padding:16px 18px;margin:12px 0;box-shadow:0 2px 0 #eadff3}
.p-card h3{margin:0 0 10px;font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:#8a6fb0}
.skill{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.skill-name{font-size:20px;font-weight:800;font-family:var(--font)}
.badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:800;background:#e2fbef;color:#147a50}
.badge.warn{background:#fff1d6;color:#9a5a00}
.badge.blue{background:#e3f1ff;color:#1f5fa8}
.bar{height:14px;border-radius:999px;background:#f0e9f6;overflow:hidden;margin:12px 0 6px}
.bar>i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#6ff0b4,#2fc98a);transition:width 1s}
.small{font-size:13px;color:#7a6d8c}
.mist{display:flex;gap:12px;padding:10px 0;border-top:1px dashed #eadff3}
.mist:first-of-type{border-top:0}
.mist .dot{flex:none;width:34px;height:34px;border-radius:12px;background:#fff1d6;display:flex;align-items:center;justify-content:center;font-weight:900;color:#9a5a00}
.mist b{display:block}
.inv{display:flex;align-items:center;gap:14px}
.inv .rk{font-size:40px;width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,#ffe3a3,#ff9fc8);display:flex;align-items:center;justify-content:center}
.inv-name{font-size:20px;font-weight:800;font-family:var(--font)}
table.log{width:100%;border-collapse:collapse;font-size:14px}
table.log th,table.log td{text-align:left;padding:7px 6px;border-bottom:1px solid #f0e9f6}
table.log th{font-size:12px;color:#8a6fb0;text-transform:uppercase;letter-spacing:.06em}
.privacy{display:flex;gap:12px;align-items:flex-start;background:#eefbf4;border:1px solid #c7efd9;border-radius:20px;padding:14px 16px;margin-top:14px}
.privacy .lock{font-size:22px}
.privacy b{font-size:17px;color:#147a50}
.p-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
.p-actions button{border:1px solid #e0d3ec;background:#fff;border-radius:12px;padding:9px 14px;font-weight:700;color:#4a2a6e}

/* ---------- responsive ---------- */
@media (max-width:640px){
  .tiles{grid-template-columns:repeat(5,1fr);gap:9px;max-width:420px}
  .tile{aspect-ratio:1.25/1;font-size:26px}
  .ptt{font-size:19px;padding:16px 24px}
  .steps li{width:8px;height:8px}.steps li.now{width:18px}
  .caption{font-size:16px}
  :root{--orb:min(58vw,260px,34vh)}
}
@media (max-height:700px) and (min-width:641px){:root{--orb:min(34vh,260px)}}
@media (prefers-reduced-motion:reduce){*{animation-duration:0s!important;animation-iteration-count:1!important}}

body.finished .controls{display:none}
body.finished .end-row{margin-bottom:24px}
