:root{
  --night-950:#0d1129; --night-900:#131838; --night-800:#1a2150; --night-700:#232c66;
  --night-600:#303a82; --night-500:#3f4a9a;
  --cream-50:#fffaf0; --cream-100:#fff3da; --cream-200:#ffe9bf; --cream-300:#f7d99c;
  --coral-300:#ffa37e; --coral-400:#ff8a5e; --coral-500:#ff7048; --coral-600:#e8542b;
  --sunny-200:#ffe4a1; --sunny-300:#ffd775; --sunny-400:#ffc84a; --sunny-500:#f2ac1e;
  --mint-300:#86ead6; --mint-400:#4fd8bd; --mint-500:#23b89b;
  --berry-300:#ff9ec4; --berry-400:#ff7fae; --berry-500:#f0568f;
  --grape-300:#b7a6ff; --grape-400:#9d8bff; --grape-500:#7f68f2;
  --sky-soft:#9ad7f5;
  --bg:#0d1129; --bg2:#131838; --card:#1a2150; --accent:#ff7048; --accent2:#ffc84a;
  --text:#fffaf0; --muted:#b9aed6;
  --radius:26px; --shadow:0 18px 45px rgba(0,0,0,.45);
  --font-display:"Fredoka","Nunito",system-ui,sans-serif;
  --font-body:"Nunito",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box}
html{overscroll-behavior:none}
body{margin:0;font-family:var(--font-body);color:var(--text);overflow-x:hidden;min-height:100dvh;
  background:linear-gradient(180deg,#0d1129 0%,#171d4a 55%,#232c66 100%);
  touch-action:manipulation;user-select:none;-webkit-user-select:none}
.selectable{user-select:text;-webkit-user-select:text}
.topbar{display:flex;align-items:center;gap:10px;padding:10px 14px;position:sticky;top:0;z-index:30;
  background:rgba(13,17,41,.62);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid rgba(255,255,255,.12)}
.topbar h1{font-family:var(--font-display);font-size:1.25rem;margin:0;font-weight:600;letter-spacing:.02em;
  text-shadow:0 2px 14px rgba(6,8,26,.65)}
.icon-btn{background:rgba(13,17,41,.62);border:1px solid rgba(255,255,255,.12);color:var(--text);
  font-size:1.3rem;min-width:52px;min-height:52px;border-radius:999px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;backdrop-filter:blur(14px)}
.icon-btn:hover{transform:scale(1.06)}.icon-btn:active{transform:scale(.88)}
main{padding:16px;max-width:1000px;margin:0 auto;position:relative;z-index:2}

/* ---------- Starfield + moon ---------- */
#stars{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#stars .star{position:absolute;border-radius:999px;background:#fff;animation:twinkle var(--tw,3s) ease-in-out infinite;animation-delay:var(--td,0s)}
#stars .cloud{position:absolute;border-radius:999px;background:#fff;filter:blur(14px);animation:drift var(--dr,70s) linear infinite}
#moon{position:fixed;top:54px;right:5vw;width:92px;height:92px;border-radius:999px;z-index:0;pointer-events:none;
  background:radial-gradient(circle at 35% 35%,#fff3da 0%,#ffd775 58%,#f2ac1e 100%);
  box-shadow:0 0 60px rgba(255,215,117,.35),0 0 18px rgba(255,215,117,.5)}

/* ---------- Panels & buttons ---------- */
.panel{background:rgba(13,17,41,.62);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--shadow)}
.card{background:rgba(13,17,41,.62);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius);
  padding:18px;box-shadow:var(--shadow);margin-bottom:16px;backdrop-filter:blur(14px)}
.btn{font-family:var(--font-display);border:none;border-radius:999px;padding:14px 24px;font-size:1.05rem;font-weight:600;
  cursor:pointer;transition:transform .15s,filter .15s;background:var(--coral-500);color:#fff;
  box-shadow:0 8px 0 0 rgba(0,0,0,.25)}
.btn:hover{filter:brightness(1.1);transform:scale(1.04)}
.btn:active{transform:scale(.93)}
.btn.secondary{background:var(--night-600);box-shadow:0 8px 0 0 rgba(0,0,0,.25)}
.btn.success{background:var(--sunny-400);color:#3a2b00}
.btn:disabled{opacity:.45;cursor:default;transform:none}
.squish{transition:transform .15s}.squish:hover{transform:scale(1.06)}.squish:active{transform:scale(.88)}

/* ---------- Home ---------- */
.hero{text-align:center;padding:8px 0 4px}
.hero .mascot{font-size:4.2rem;display:inline-block;animation:floaty 7s ease-in-out infinite;filter:drop-shadow(0 10px 24px rgba(0,0,0,.4))}
.hero h2{font-family:var(--font-display);font-size:2.6rem;margin:10px 0 4px;font-weight:600;
  text-shadow:0 2px 14px rgba(6,8,26,.65)}
.hero h2 .alt{color:var(--sunny-400);display:inline-block;transform:rotate(2deg)}
.hero p{color:var(--muted);margin:0 0 12px}
.pill{display:inline-block;padding:6px 16px;border-radius:999px;background:rgba(255,255,255,.1);
  border:1px solid rgba(255,255,255,.12);font-size:.9rem}
.story-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:22px}
.story-card{position:relative;border-radius:var(--radius);overflow:hidden;cursor:pointer;
  border:1px solid rgba(255,255,255,.15);box-shadow:var(--shadow);
  animation:floaty 6.5s ease-in-out infinite;transition:transform .2s}
.story-card:hover{transform:rotate(-1deg) scale(1.03)}
.story-card img,.story-card .cover{width:100%;aspect-ratio:4/3.4;object-fit:cover;display:flex;align-items:center;
  justify-content:center;font-size:3rem;background:linear-gradient(135deg,var(--night-600),var(--night-800))}
.story-card .shade{position:absolute;inset:0;background:linear-gradient(180deg,transparent 40%,rgba(13,17,41,.85) 100%);pointer-events:none}
.story-card .meta{position:absolute;left:0;right:0;bottom:0;padding:12px}
.story-card h3{margin:0 0 2px;font-family:var(--font-display);font-size:1.15rem;text-shadow:0 2px 14px rgba(6,8,26,.65)}
.story-card p{margin:0;color:var(--cream-200);font-size:.85rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.story-card .row{display:flex;align-items:center;gap:8px;margin-top:8px}
.badge{display:inline-block;padding:3px 10px;border-radius:999px;background:rgba(13,17,41,.7);
  border:1px solid rgba(255,255,255,.15);font-size:.75rem;color:var(--cream-200)}
.playdot{margin-left:auto;width:48px;height:48px;border-radius:999px;display:flex;align-items:center;justify-content:center;
  font-size:1.3rem;color:#fff;background:var(--coral-500);box-shadow:0 8px 0 0 rgba(0,0,0,.25)}
.done-star{background:var(--sunny-400);color:#3a2b00;border-radius:999px;padding:3px 10px;font-size:.8rem;font-weight:700}

/* ---------- Player ---------- */
.player-stage{position:relative;border-radius:var(--radius);overflow:hidden;aspect-ratio:16/9;background:#000;
  border:1px solid rgba(255,255,255,.15);box-shadow:var(--shadow)}
.player-stage img{width:100%;height:100%;object-fit:cover;animation:kenburns 16s ease-in-out infinite alternate}
.player-stage .tint{position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,17,41,.25) 0%,transparent 30%,rgba(13,17,41,.78) 100%)}
.overlay-layer{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.overlay-layer .drop{position:absolute;top:-12%;width:2px;border-radius:2px;background:rgba(154,215,245,.7);animation:rain-fall var(--rd,.9s) linear infinite;animation-delay:var(--td,0s)}
.overlay-layer .fly{position:absolute;border-radius:999px;background:#ffe4a1;box-shadow:0 0 8px 2px rgba(255,212,117,.8);animation:firefly-path var(--fd,14s) ease-in-out infinite alternate}
.overlay-layer .tw{position:absolute;border-radius:999px;background:#fff;animation:twinkle var(--tw,3s) ease-in-out infinite;animation-delay:var(--td,0s)}
.overlay-layer .spk{position:absolute;color:#ffe4a1;animation:sparkle-spin var(--sd,4s) linear infinite}
.player-title{font-family:var(--font-display);font-size:1.6rem;font-weight:600;margin:14px 0 2px;
  text-shadow:0 2px 14px rgba(6,8,26,.65)}
.player-text{font-size:1.2rem;line-height:1.45;padding:18px;cursor:pointer}
.player-text.speaking{outline:3px solid var(--sunny-400);animation:pulse-ring 1.4s ease-out infinite}
.dialogues{display:flex;flex-direction:column;gap:10px}
.dialogue{display:flex;gap:10px;align-items:flex-start;background:rgba(13,17,41,.62);border:1px solid rgba(255,255,255,.12);
  padding:12px 14px;border-radius:22px;border-bottom-left-radius:6px;font-size:1.05rem}
.dialogue .avatar{flex:0 0 44px;width:44px;height:44px;border-radius:999px;display:flex;align-items:center;justify-content:center;font-size:1.3rem}
.dialogue b{display:block;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--sunny-300)}
.controls{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;align-items:center;margin-top:6px}
.ctl-prev,.ctl-next-round{width:56px;height:56px;border-radius:999px;font-size:1.4rem}
.ctl-play{width:72px;height:72px;border-radius:999px;font-size:1.8rem;background:var(--coral-500);color:#fff;border:none;cursor:pointer;
  box-shadow:0 8px 0 0 rgba(0,0,0,.25)}
.ctl-play.stop{background:var(--night-600)}
.ctl-next{width:84px;height:84px;border-radius:999px;font-size:2rem;background:var(--sunny-400);border:none;cursor:pointer;
  box-shadow:0 8px 24px rgba(242,172,30,.45)}
.switch{position:relative;width:56px;height:32px;border-radius:999px;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.2);cursor:pointer}
.switch .knob{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:999px;background:#fff;transition:left .2s}
.switch[aria-checked="true"]{background:rgba(79,216,189,.35)}
.switch[aria-checked="true"] .knob{left:27px;background:var(--mint-400)}
.stars-progress{display:flex;gap:10px;justify-content:center;margin:4px 0}
.stars-progress .st{font-size:1.3rem;color:rgba(255,250,240,.25);cursor:pointer;transition:transform .15s}
.stars-progress .st.seen{color:var(--sunny-400)}
.stars-progress .st.now{color:#fff;transform:scale(1.25);text-shadow:0 0 12px var(--sunny-400)}
.progress{height:6px;background:rgba(255,255,255,.15);border-radius:999px;overflow:hidden;margin-top:8px}
.progress>span{display:block;height:100%;background:var(--sunny-400);width:0%;transition:width .3s}

/* ---------- End screen ---------- */
.end-wrap{text-align:center;padding:32px 16px;position:relative}
.end-wrap h2{font-family:var(--font-display);font-size:2.4rem;margin:8px 0}
.confetti{position:fixed;top:-5vh;z-index:50;pointer-events:none;animation:confetti-fall var(--cd,4.5s) linear infinite;animation-delay:var(--td,0s)}

/* ---------- Bottom sheet (sons) ---------- */
.sidepanel{position:fixed;left:0;right:0;bottom:0;top:auto;width:100%;max-height:72dvh;background:rgba(19,24,56,.97);
  border-radius:28px 28px 0 0;border:1px solid rgba(255,255,255,.15);padding:16px 16px 28px;overflow-y:auto;z-index:60;
  animation:sheet-up .45s ease}
.sidepanel-header{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0}
.fx-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:12px}
.fx-item{display:flex;flex-direction:column;align-items:center;gap:6px;background:var(--night-800);
  padding:12px 6px;border-radius:18px;border:2px solid transparent;font-size:.8rem;text-align:center}
.fx-item .emo{font-size:1.7rem}
.fx-item button{border:none;border-radius:999px;width:40px;height:40px;font-size:1rem;cursor:pointer;background:rgba(255,255,255,.12);color:#fff}
.fx-item.playing{border-color:var(--mint-400);background:rgba(79,216,189,.15)}

/* ---------- Keyframes ---------- */
@keyframes floaty{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-10px) rotate(1deg)}}
@keyframes twinkle{0%,100%{transform:scale(.75);opacity:.5}50%{transform:scale(1.2);opacity:1}}
@keyframes drift{from{transform:translateX(-20vw)}to{transform:translateX(120vw)}}
@keyframes kenburns{from{transform:scale(1.02)}to{transform:scale(1.12)}}
@keyframes scene-in{from{transform:translateY(18px);opacity:0}to{transform:none;opacity:1}}
@keyframes fade-in{from{opacity:0}to{opacity:1}}
@keyframes pop-in{0%{transform:scale(.5);opacity:0}70%{transform:scale(1.07)}100%{transform:scale(1);opacity:1}}
@keyframes sheet-up{from{transform:translateY(60px);opacity:0}to{transform:none;opacity:1}}
@keyframes modal-in{from{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes rain-fall{to{transform:translateY(120vh)}}
@keyframes firefly-path{from{transform:translate(0,0)}to{transform:translate(60px,-50px)}}
@keyframes sparkle-spin{to{transform:rotate(160deg) scale(1.2)}}
@keyframes confetti-fall{to{transform:translateY(115vh) rotate(660deg)}}
@keyframes pulse-ring{0%{box-shadow:0 0 0 0 var(--ring,rgba(255,200,74,.6))}100%{box-shadow:0 0 0 22px transparent}}
@keyframes wiggle{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}
.anim-scene-in{animation:scene-in .55s ease}
.anim-pop-in{animation:pop-in .6s ease}
.empty{color:var(--muted);text-align:center;padding:40px 10px}
.badge{display:inline-block;padding:2px 8px;border-radius:999px;background:rgba(255,255,255,.1);font-size:.75rem;color:var(--muted);margin-left:6px}
@media(max-width:600px){.player-text{font-size:1.1rem}.hero h2{font-size:2rem}.fx-grid{grid-template-columns:repeat(3,1fr)}}
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms !important;transition-duration:.01ms !important}}
