/* ===== RESET & VARIABLES ===== */
:root {
  --bg:     #07071a;
  --card:   #0f0f2e;
  --card2:  #161644;
  --navy:   #1a1a50;
  --cyan:   #00e5ff;
  --pink:   #ff4ddb;
  --yellow: #ffe94d;
  --green:  #00ff9d;
  --orange: #ff6b35;
  --purple: #b04dff;
  --blue:   #4488ff;
  --red:    #ff4455;
  --white:  #eef4ff;
  --muted:  #5566aa;
  --hot:    #ff3333;
  --cold:   #88ccff;
}
*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
html { scroll-behavior:smooth; }
body {
  background: var(--bg);
  color: var(--white);
  font-family: 'Nunito', sans-serif;
  min-height: 100vh;
  overflow-x: hidden;
  background-image:
    radial-gradient(ellipse at 10% 5%,  rgba(0,229,255,.06) 0%, transparent 50%),
    radial-gradient(ellipse at 90% 95%, rgba(176,77,255,.06) 0%, transparent 50%);
}

/* ===== PARTICLES ===== */
#particles { position:fixed; inset:0; z-index:0; pointer-events:none; overflow:hidden; }
.particle {
  position:absolute; border-radius:50%;
  animation: rise linear infinite;
}
@keyframes rise {
  0%   { transform:translateY(105vh) scale(0); opacity:0; }
  8%   { opacity:.45; }
  92%  { opacity:.12; }
  100% { transform:translateY(-5vh)  scale(1); opacity:0; }
}

/* ===== LAYOUT ===== */
.app { position:relative; z-index:1; max-width:980px; margin:0 auto; padding:12px 14px 70px; }

/* ===== HEADER ===== */
.header { text-align:center; padding:20px 0 6px; }
.header-badge {
  display:inline-block;
  background: linear-gradient(135deg, var(--purple), var(--cyan));
  color:#fff; font-family:'Fredoka One',cursive; font-size:10px;
  padding:4px 16px; border-radius:20px; letter-spacing:2px; margin-bottom:10px;
}
.header-logo {
  font-size:54px; display:block;
  animation: wobble 3s ease-in-out infinite;
}
@keyframes wobble {
  0%,100% { transform:rotate(-4deg) scale(1); }
  50%      { transform:rotate( 4deg) scale(1.06); }
}
.header-title {
  font-family:'Fredoka One',cursive;
  font-size: clamp(24px, 5vw, 46px);
  background: linear-gradient(135deg, var(--cyan), var(--pink), var(--yellow));
  -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text;
  line-height:1.1; margin:8px 0 4px;
}
.header-sub { font-size:13px; color:var(--muted); }

/* ===== PROGRESS BAR ===== */
.progress {
  background:var(--card); border-radius:16px; padding:14px 18px;
  margin:12px 0; border:1px solid rgba(0,229,255,.1);
}
.progress-stars { display:flex; gap:6px; justify-content:center; flex-wrap:wrap; margin-bottom:8px; }
.pstar {
  width:40px; height:40px; border-radius:50%;
  background:rgba(255,255,255,.04); border:2px solid rgba(255,255,255,.09);
  display:flex; align-items:center; justify-content:center;
  font-size:17px; transition:all .4s;
}
.pstar.lit {
  background:rgba(255,233,77,.16); border-color:var(--yellow);
  box-shadow:0 0 14px rgba(255,233,77,.4);
}
.progress-track { height:5px; background:rgba(255,255,255,.06); border-radius:3px; overflow:hidden; }
.progress-fill  { height:100%; border-radius:3px; background:linear-gradient(90deg,var(--cyan),var(--pink)); transition:width .6s ease; width:0%; }

/* ===== SECTION TABS ===== */
.section-tabs { display:flex; gap:7px; margin:12px 0; }
.stab {
  flex:1; padding:11px 6px; border-radius:16px;
  border:2px solid rgba(255,255,255,.07);
  font-family:'Fredoka One',cursive; font-size:14px;
  cursor:pointer; background:var(--card); color:var(--muted);
  text-align:center; transition:all .22s; user-select:none;
}
.stab .stab-icon { display:block; font-size:20px; margin-bottom:2px; }
.stab:hover { border-color:rgba(255,255,255,.22); color:var(--white); }
.stab.active { color:var(--bg); transform:translateY(-2px); box-shadow:0 6px 22px rgba(0,0,0,.35); }
.stab-0.active { background:linear-gradient(135deg,var(--orange),var(--yellow)); border-color:var(--yellow); }
.stab-1.active { background:linear-gradient(135deg,var(--purple),var(--pink));  border-color:var(--pink);   }
.stab-2.active { background:linear-gradient(135deg,var(--green), var(--cyan));  border-color:var(--cyan);   }

/* ===== SECTIONS ===== */
.section { display:none; animation:fadein .3s ease both; }
.section.active { display:block; }
@keyframes fadein { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }

/* ===== EXPERIMENT TABS ===== */
.exp-tabs {
  display:flex; gap:5px; margin-bottom:12px;
  overflow-x:auto; padding-bottom:4px;
}
.exp-tabs::-webkit-scrollbar { height:3px; }
.exp-tabs::-webkit-scrollbar-thumb { background:var(--purple); border-radius:2px; }
.etab {
  flex-shrink:0; padding:8px 14px; border-radius:50px;
  border:1.5px solid rgba(255,255,255,.09);
  font-family:'Fredoka One',cursive; font-size:12px;
  cursor:pointer; background:var(--card); color:var(--muted);
  transition:all .2s; white-space:nowrap; user-select:none;
}
.etab:hover { border-color:rgba(255,255,255,.28); color:var(--white); }
.etab.active { color:var(--bg); border-color:transparent; }

/* Experiment tab colour variants */
.etab-0.active  { background:linear-gradient(135deg,var(--orange),var(--yellow)); }
.etab-1.active  { background:linear-gradient(135deg,var(--blue),  var(--cyan));   }
.etab-2.active  { background:linear-gradient(135deg,var(--green), var(--blue));   }
.etab-3.active  { background:linear-gradient(135deg,var(--orange),var(--red));    }
.etab-4.active  { background:linear-gradient(135deg,var(--cyan),  var(--blue));   }
.etab-5.active  { background:linear-gradient(135deg,var(--pink),  var(--purple)); }
.etab-6.active  { background:linear-gradient(135deg,var(--green), var(--cyan));   }

.exp-panel { display:none; animation:fadein .28s ease both; }
.exp-panel.active { display:block; }

/* ===== CARDS ===== */
.card {
  background:var(--card); border-radius:18px; padding:18px;
  margin-bottom:13px; border:1px solid rgba(255,255,255,.06);
}
.card.glow { box-shadow:0 0 28px rgba(0,229,255,.1); }
.card-title { font-family:'Fredoka One',cursive; font-size:18px; color:var(--white); margin-bottom:10px; }

/* ===== PROFESSOR SPEECH ===== */
.prof {
  display:flex; align-items:flex-start; gap:12px;
  background:var(--card2); border-radius:16px; padding:14px 16px;
  margin-bottom:13px; border-left:4px solid var(--cyan);
}
.prof-face { font-size:34px; flex-shrink:0; animation:bob .95s ease-in-out infinite; }
@keyframes bob { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-5px)} }
.prof-name { font-family:'Fredoka One',cursive; color:var(--cyan); font-size:11px; margin-bottom:3px; }
.prof-text { font-size:13.5px; color:var(--white); line-height:1.7; }
.prof-text b   { color:var(--yellow); }
.hl  { background:rgba(255,233,77,.2); padding:1px 6px; border-radius:4px; font-weight:800; color:var(--yellow); }
.vp  { display:inline-block; background:rgba(176,77,255,.25); color:#d4a8ff; font-weight:800; font-size:11px; padding:2px 8px; border-radius:10px; border:1px solid rgba(176,77,255,.38); }

/* ===== CANVAS ===== */
canvas { display:block; border-radius:10px; }

/* ===== DIAL ===== */
.dial-wrap { margin:10px 0; }
.dial-track { position:relative; height:46px; width:100%; max-width:460px; margin:0 auto; }
.dial-bg { position:absolute; top:50%; left:0; right:0; height:10px; transform:translateY(-50%); border-radius:5px; }
input.dial-input {
  position:absolute; inset:0; width:100%; opacity:0;
  cursor:pointer; z-index:3; height:46px;
}
.dial-thumb {
  position:absolute; top:50%; width:34px; height:34px; border-radius:50%;
  transform:translate(-50%,-50%); background:var(--card);
  border:3px solid var(--cyan); display:flex; align-items:center;
  justify-content:center; font-size:15px; pointer-events:none;
  transition:left .08s, border-color .3s;
  box-shadow:0 0 12px rgba(0,229,255,.28);
}
.dial-value { font-family:'Fredoka One',cursive; font-size:24px; text-align:center; margin-top:5px; transition:color .3s; }
.dial-desc  { font-size:12px; color:var(--muted); text-align:center; margin-top:2px; }

/* ===== BUTTONS ===== */
.btn {
  display:inline-flex; align-items:center; gap:6px;
  padding:10px 20px; border-radius:50px; border:none;
  font-family:'Fredoka One',cursive; font-size:15px;
  cursor:pointer; transition:all .2s;
}
.btn:hover:not(:disabled) { transform:translateY(-2px); filter:brightness(1.1); }
.btn:disabled { opacity:.38; cursor:default; }
.btn-cyan   { background:var(--cyan);   color:var(--bg); }
.btn-pink   { background:var(--pink);   color:#fff; }
.btn-green  { background:var(--green);  color:var(--bg); }
.btn-orange { background:var(--orange); color:#fff; }
.btn-purple { background:var(--purple); color:#fff; }
.btn-yellow { background:var(--yellow); color:var(--bg); }
.btn-blue   { background:var(--blue);   color:#fff; }
.btn-ghost  { background:rgba(255,255,255,.08); color:var(--white); border:1px solid rgba(255,255,255,.15); }
.btn-row    { display:flex; gap:8px; flex-wrap:wrap; margin:10px 0; }
.btn-full   { display:block; width:100%; margin-top:10px; }

/* ===== CHIPS / BADGES ===== */
.chip { display:inline-flex; align-items:center; gap:8px; padding:9px 15px; border-radius:50px; font-family:'Fredoka One',cursive; font-size:13px; margin-top:8px; }
.chip-green  { background:rgba(0,255,157,.1);  border:2px solid var(--green);  color:var(--green);  }
.chip-red    { background:rgba(255,68,85,.1);   border:2px solid var(--red);    color:var(--red);    }
.chip-cyan   { background:rgba(0,229,255,.1);   border:2px solid var(--cyan);   color:var(--cyan);   }
.chip-yellow { background:rgba(255,233,77,.1);  border:2px solid var(--yellow); color:var(--yellow); }

/* ===== FACT BOX ===== */
.fact { background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.08); border-radius:14px; padding:13px; margin-top:12px; }
.fact-title { font-family:'Fredoka One',cursive; font-size:14px; margin-bottom:8px; }
.fact-row   { display:flex; align-items:flex-start; gap:9px; font-size:13px; color:#a8bcd8; line-height:1.7; margin-bottom:5px; }
.fact-dot   { width:7px; height:7px; border-radius:50%; flex-shrink:0; margin-top:6px; }

/* ===== COMPARE BARS ===== */
.cbar { margin:8px 0; }
.cbar-label { font-size:13px; font-weight:700; color:var(--white); margin-bottom:3px; }
.cbar-track { height:22px; background:rgba(255,255,255,.05); border-radius:11px; overflow:hidden; position:relative; }
.cbar-fill  {
  height:100%; border-radius:11px; width:0%;
  display:flex; align-items:center; padding-left:10px;
  font-family:'Fredoka One',cursive; font-size:11px;
  transition:width 1.2s ease;
}
.cbar-unit { position:absolute; right:8px; top:50%; transform:translateY(-50%); font-family:'Fredoka One',cursive; font-size:11px; color:var(--white); }

/* ===== SUBSTANCE GRID ===== */
.sub-grid { display:flex; flex-wrap:wrap; gap:9px; justify-content:center; margin-bottom:12px; }
.sub-card {
  width:82px; background:var(--card2); border-radius:14px;
  padding:12px 8px; text-align:center; cursor:pointer;
  border:2.5px solid rgba(255,255,255,.09); transition:all .2s;
}
.sub-card:hover          { border-color:var(--cyan); transform:translateY(-3px); }
.sub-card.selected       { border-color:var(--orange); background:rgba(255,107,53,.1); transform:translateY(-3px); }
.sub-card .sub-emoji     { font-size:28px; display:block; margin-bottom:5px; }
.sub-card .sub-name      { font-family:'Fredoka One',cursive; font-size:12px; }

/* ===== DRAG & DROP ===== */
.drag-pool {
  display:flex; flex-wrap:wrap; gap:8px; padding:12px;
  background:rgba(255,255,255,.03); border-radius:14px;
  border:2px dashed rgba(255,255,255,.1); min-height:52px; margin-bottom:12px;
}
.drag-item {
  display:inline-flex; align-items:center; gap:6px;
  background:var(--card2); border:2px solid rgba(255,255,255,.11);
  border-radius:12px; padding:7px 12px; cursor:grab;
  font-family:'Fredoka One',cursive; font-size:13px;
  transition:all .2s; user-select:none;
}
.drag-item:hover, .drag-item.dragging { transform:scale(1.06) rotate(2deg); border-color:var(--cyan); }
.drop-zones { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:12px; }
.drop-zone {
  border-radius:16px; padding:14px; min-height:88px;
  border:3px dashed rgba(255,255,255,.12); text-align:center; transition:all .2s;
}
.drop-zone.over { transform:scale(1.02); border-color:var(--cyan); background:rgba(0,229,255,.04); }
.dz-title { font-family:'Fredoka One',cursive; font-size:14px; margin-bottom:3px; }
.dz-sub   { font-size:11px; color:var(--muted); margin-bottom:8px; }
.dz-chips { display:flex; flex-wrap:wrap; gap:5px; justify-content:center; }
.dz-chip  { background:var(--card); border-radius:8px; padding:4px 9px; font-size:12px; font-weight:700; }

/* ===== QUIZ ===== */
.quiz-card { background:var(--card); border-radius:18px; padding:18px; margin-bottom:12px; border:1px solid rgba(255,255,255,.06); }
.quiz-num  { font-family:'Fredoka One',cursive; font-size:12px; color:var(--blue); margin-bottom:4px; }
.quiz-q    { font-size:16px; font-weight:800; line-height:1.55; margin-bottom:12px; }
.quiz-opts { display:grid; grid-template-columns:1fr 1fr; gap:9px; }
.quiz-opt  {
  background:rgba(255,255,255,.04); border:2.5px solid rgba(255,255,255,.09);
  border-radius:13px; padding:11px; cursor:pointer; font-size:13px;
  font-weight:700; text-align:center; transition:all .2s;
}
.quiz-opt:hover:not(.answered) { border-color:var(--purple); background:rgba(176,77,255,.1); transform:translateY(-2px); }
.quiz-opt.correct { background:rgba(0,255,157,.1);  border-color:var(--green); color:var(--green); }
.quiz-opt.wrong   { background:rgba(255,68,85,.1);  border-color:var(--red);   color:var(--red);   }
.quiz-fb { font-size:13px; margin-top:9px; padding:10px 13px; border-radius:10px; display:none; font-weight:700; }
.quiz-fb.correct  { background:rgba(0,255,157,.1);  color:var(--green); }
.quiz-fb.wrong    { background:rgba(255,233,77,.1);  color:var(--yellow); }

/* ===== SCORE BOX ===== */
.score-box {
  background:linear-gradient(135deg,var(--purple),var(--blue));
  border-radius:20px; padding:26px; text-align:center;
  display:none; box-shadow:0 8px 30px rgba(176,77,255,.3);
}
.score-num { font-family:'Fredoka One',cursive; font-size:62px; line-height:1; }

/* ===== VOCAB ===== */
.vocab-grid { display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-top:10px; }
.vocab-item { background:var(--card2); border-radius:12px; padding:12px; border-left:4px solid var(--purple); }
.vocab-word { font-family:'Fredoka One',cursive; font-size:15px; color:var(--purple); }
.vocab-def  { font-size:12px; color:var(--muted); margin-top:3px; line-height:1.55; }

/* ===== COMPLETE MESSAGE ===== */
.complete-msg {
  display:none; text-align:center; margin-top:14px; padding:26px;
  background:linear-gradient(135deg,var(--purple),var(--blue));
  border-radius:20px; box-shadow:0 8px 30px rgba(176,77,255,.35);
}

/* ===== ANIMATIONS ===== */
@keyframes pop { 0%{transform:scale(.65);opacity:0} 75%{transform:scale(1.08)} 100%{transform:scale(1);opacity:1} }
.pop { animation:pop .38s ease both; }
@keyframes confetti-fall { 0%{transform:translateY(-20px) rotate(0deg);opacity:1} 100%{transform:translateY(105vh) rotate(720deg);opacity:0} }
.confetti-piece { position:fixed; border-radius:3px; pointer-events:none; z-index:9999; animation:confetti-fall linear forwards; }

/* ===== RESPONSIVE ===== */
@media (max-width:600px) {
  .section-tabs .stab { font-size:12px; padding:9px 4px; }
  .quiz-opts, .drop-zones, .vocab-grid { grid-template-columns:1fr; }
  .header-logo { font-size:42px; }
}
