:root{
  --bg1:#120e35;--bg2:#1f1660;--card:rgba(255,255,255,.08);--card2:rgba(255,255,255,.13);
  --line:rgba(255,255,255,.14);--txt:#f6f4ff;--muted:#bdb6e8;--gold:#ffc83d;--gold2:#ff9f1c;
  --ok:#22c55e;--bad:#ff5a6e;--violet:#7c5cff;--radius:22px;
  --shadow:0 18px 50px rgba(5,2,30,.45);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;min-height:100%;}
html{background:var(--bg1)}
body{font-family:Nunito,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--txt);background:var(--bg1);font-size:18px;line-height:1.5;overflow-x:hidden;min-height:100vh}
body::before{content:"";position:fixed;inset:0;z-index:-2;background:radial-gradient(1200px 800px at 80% -10%,#3b2a9e 0%,transparent 60%),linear-gradient(160deg,var(--bg1),var(--bg2) 60%,#0d0a2a)}
h1,h2,h3,.display{font-family:"Baloo 2",Nunito,sans-serif;line-height:1.1;margin:0}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}
.hidden{display:none!important}
.bg-orbs i{position:fixed;border-radius:50%;filter:blur(70px);opacity:.35;z-index:-1;animation:float 16s ease-in-out infinite}
.bg-orbs i:nth-child(1){width:340px;height:340px;background:#ff8a3d;left:-120px;top:40%}
.bg-orbs i:nth-child(2){width:300px;height:300px;background:#14b8a6;right:-100px;top:70%;animation-delay:-5s}
.bg-orbs i:nth-child(3){width:260px;height:260px;background:#f43f8e;left:40%;top:-120px;animation-delay:-9s}
@keyframes float{50%{transform:translate(30px,-40px) scale(1.1)}}

/* topbar */
.topbar{position:sticky;top:0;z-index:20;display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:calc(10px + env(safe-area-inset-top)) 16px 10px;background:rgba(18,14,53,.72);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
.who{display:flex;align-items:center;gap:10px;font-weight:800;font-size:17px;max-width:45%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.avatar{flex:none;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;font-family:"Baloo 2";font-size:20px;
  background:linear-gradient(135deg,var(--gold),var(--gold2));color:#2a1600;box-shadow:0 4px 14px rgba(255,159,28,.45)}
.stats{display:flex;gap:8px;align-items:center}
.pill{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:999px;background:var(--card2);border:1px solid var(--line);font-weight:800;font-size:16px;transition:transform .25s}
.pill.pts b{color:var(--gold)} .pill.icon{padding:7px 11px}
.pill.bump{animation:bump .5s}
.streak.hot{background:linear-gradient(135deg,#ff6a3d,#ffb03d);color:#2a0d00;border-color:transparent}
@keyframes bump{40%{transform:scale(1.25)}}

main{max-width:1180px;margin:0 auto;padding:18px 16px 60px}
.screen{animation:enter .55s cubic-bezier(.2,.8,.2,1) both}
@keyframes enter{from{opacity:0;transform:translateY(24px) scale(.98)}to{opacity:1;transform:none}}

/* welcome */
.welcome{display:grid;gap:22px;align-items:center;min-height:calc(100vh - 80px)}
.hero-card{position:relative;border-radius:30px;overflow:hidden;min-height:330px;box-shadow:var(--shadow)}
.hero-card img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scale(1.05);animation:kenburns 18s ease-in-out infinite alternate}
@keyframes kenburns{to{transform:scale(1.15) translateY(-10px)}}
.hero-card::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 35%,rgba(18,14,53,.95))}
.hero-txt{position:absolute;left:22px;right:22px;bottom:20px;z-index:2}
.tag{display:inline-block;padding:5px 12px;border-radius:999px;background:rgba(255,200,61,.18);color:var(--gold);font-weight:800;font-size:14px;letter-spacing:.3px;border:1px solid rgba(255,200,61,.4)}
.hero-txt h1{font-size:clamp(38px,8vw,64px);margin-top:10px;background:linear-gradient(90deg,#fff,#ffd98a);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero-txt p{margin:6px 0 0;color:#e7e3ff;font-size:18px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:22px;backdrop-filter:blur(10px);box-shadow:var(--shadow)}
.panel h2{font-size:28px;margin-bottom:6px}
.muted{color:var(--muted)}
.field{display:flex;flex-direction:column;gap:8px;margin:16px 0}
.field label{font-weight:800}
input.big{width:100%;font:inherit;font-size:22px;font-weight:700;padding:16px 18px;border-radius:16px;border:2px solid var(--line);background:rgba(0,0,0,.25);color:#fff;outline:none;transition:border-color .2s, box-shadow .2s}
input.big:focus{border-color:var(--gold);box-shadow:0 0 0 5px rgba(255,200,61,.18)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:16px 24px;border-radius:16px;font-weight:800;font-size:19px;transition:transform .15s, box-shadow .2s, opacity .2s;user-select:none}
.btn:active{transform:scale(.96)}
.btn.primary{background:linear-gradient(135deg,var(--gold),var(--gold2));color:#2a1600;box-shadow:0 10px 26px rgba(255,159,28,.4)}
.btn.primary:hover{box-shadow:0 14px 34px rgba(255,159,28,.55)}
.btn.ghost{background:var(--card2);border:1px solid var(--line)}
.btn.block{width:100%}
.btn[disabled]{opacity:.45;pointer-events:none}
.polya-mini{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:16px}
.polya-mini div{background:rgba(255,255,255,.06);border:1px solid var(--line);border-radius:14px;padding:10px 4px;text-align:center;font-size:13px;font-weight:800}
.polya-mini span{display:block;font-size:24px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}

/* listen button */
.listen{display:inline-flex;align-items:center;gap:12px;padding:10px 18px 10px 10px;border-radius:999px;background:linear-gradient(135deg,#ff6fae,#a855f7);font-weight:800;box-shadow:0 10px 26px rgba(168,85,247,.4)}
.listen .ic{width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.25);display:grid;place-items:center;font-size:18px}
.wave{display:inline-flex;gap:3px;align-items:flex-end;height:18px}
.wave i{width:4px;height:6px;background:#fff;border-radius:3px}
.playing .wave i{animation:wv .9s ease-in-out infinite}
.wave i:nth-child(2){animation-delay:-.2s}.wave i:nth-child(3){animation-delay:-.4s}.wave i:nth-child(4){animation-delay:-.6s}
@keyframes wv{50%{height:18px}}

/* map */
.map-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin:6px 0 18px}
.map-head h2{font-size:clamp(30px,6vw,44px)}
.progress{height:14px;border-radius:999px;background:rgba(255,255,255,.1);overflow:hidden;margin-top:10px;min-width:220px}
.progress>i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--gold),#ff6fae);border-radius:999px;transition:width 1s cubic-bezier(.2,.8,.2,1)}
.grid{display:grid;gap:16px;grid-template-columns:1fr}
.pcard{position:relative;display:flex;flex-direction:column;border-radius:var(--radius);overflow:hidden;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);text-align:left;transition:transform .25s, box-shadow .25s;animation:enter .6s both}
.pcard:hover{transform:translateY(-4px);box-shadow:0 24px 60px rgba(5,2,30,.6)}
.pcard .ph{position:relative;height:170px}
.pcard .ph img{width:100%;height:100%;object-fit:cover}
.pcard .ph::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 40%,rgba(18,14,53,.85))}
.pcard .num{position:absolute;left:14px;top:12px;z-index:2;width:44px;height:44px;border-radius:14px;display:grid;place-items:center;font-family:"Baloo 2";font-size:24px;background:rgba(18,14,53,.75);backdrop-filter:blur(6px);border:1px solid var(--line)}
.pcard .state{position:absolute;right:12px;top:12px;z-index:2;padding:6px 12px;border-radius:999px;font-weight:800;font-size:14px;background:rgba(18,14,53,.75);backdrop-filter:blur(6px)}
.state.done{background:var(--ok);color:#03210f}
.pcard .body{padding:16px 18px 18px}
.pcard h3{font-size:24px;margin:6px 0 8px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{padding:4px 11px;border-radius:999px;font-size:13.5px;font-weight:800;border:1px solid var(--line);background:rgba(255,255,255,.07)}
.dots{display:flex;gap:6px;margin-top:12px}
.dots i{flex:1;height:7px;border-radius:9px;background:rgba(255,255,255,.12)}
.dots i.on{background:linear-gradient(90deg,var(--gold),var(--gold2))}
.badges-strip{display:flex;gap:10px;overflow-x:auto;padding:4px 2px 10px;scrollbar-width:none}
.badge{flex:none;width:96px;text-align:center;font-size:12.5px;font-weight:800;color:var(--muted)}
.badge .medal{width:70px;height:70px;margin:0 auto 6px;border-radius:50%;display:grid;place-items:center;font-size:32px;background:rgba(255,255,255,.06);border:2px dashed rgba(255,255,255,.2);filter:grayscale(1);opacity:.55;transition:all .4s}
.badge.on{color:#fff}
.badge.on .medal{filter:none;opacity:1;border:3px solid #fff3;background:radial-gradient(circle at 30% 25%,#fff8,transparent 40%),var(--c,linear-gradient(135deg,var(--gold),var(--gold2)));box-shadow:0 8px 24px rgba(0,0,0,.35),0 0 0 4px rgba(255,200,61,.25)}
.section-title{font-size:22px;margin:26px 0 10px;display:flex;align-items:center;gap:8px}

/* problem */
.prob{display:grid;gap:18px}
.media{position:relative;border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);aspect-ratio:16/9;background:#000}
.media img{width:100%;height:100%;object-fit:cover;animation:kenburns 22s ease-in-out infinite alternate}
.media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.15),transparent 30%,transparent 50%,rgba(18,14,53,.92))}
.media .over{position:absolute;left:16px;right:16px;bottom:14px;z-index:2}
.media h2{font-size:clamp(28px,6vw,40px);text-shadow:0 3px 18px rgba(0,0,0,.6)}
.back{position:absolute;left:12px;top:12px;z-index:3;width:46px;height:46px;border-radius:50%;background:rgba(18,14,53,.7);backdrop-filter:blur(6px);font-size:22px;border:1px solid var(--line)}
.statement{font-size:19px}
.statement p{margin:0 0 12px}
.question{margin-top:6px;padding:14px 16px;border-radius:16px;background:linear-gradient(135deg,rgba(255,200,61,.18),rgba(255,111,174,.12));border:1px solid rgba(255,200,61,.35);font-weight:800;font-size:20px}
.src{margin-top:12px;font-size:14px;color:var(--muted)}
.src a{color:#cfc6ff}
table.dt{width:100%;border-collapse:separate;border-spacing:0;margin:8px 0 14px;font-size:17px;overflow:hidden;border-radius:14px;border:1px solid var(--line)}
.dt th,.dt td{padding:9px 6px;text-align:center;border-bottom:1px solid var(--line)}
.dt th{background:rgba(255,255,255,.1);font-weight:800}
.dt td:first-child{font-weight:800;text-align:left;padding-left:12px}
.dt tr:last-child td{border-bottom:0}
.stepper{scroll-margin-top:80px;display:flex;align-items:center;justify-content:space-between;position:relative;margin:4px 6px 18px}
.stepper::before{content:"";position:absolute;left:24px;right:24px;top:24px;height:5px;border-radius:5px;background:rgba(255,255,255,.12)}
.stepper .fill{position:absolute;left:24px;top:24px;height:5px;border-radius:5px;background:linear-gradient(90deg,var(--gold),#ff6fae);transition:width .8s cubic-bezier(.2,.8,.2,1)}
.st{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:6px;font-size:13px;font-weight:800;color:var(--muted);width:70px}
.st .c{width:50px;height:50px;border-radius:50%;display:grid;place-items:center;font-size:22px;background:#2a2170;border:2px solid var(--line);transition:all .4s}
.st.cur{color:#fff}.st.cur .c{background:linear-gradient(135deg,var(--violet),#a855f7);border-color:#fff;transform:scale(1.12);box-shadow:0 0 0 6px rgba(124,92,255,.3)}
.st.ok .c{background:var(--ok);border-color:#bbf7d0}
.stepcard{border-radius:var(--radius);padding:22px;background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.06));border:1px solid var(--line);box-shadow:var(--shadow);animation:enter .5s both}
.phase{display:inline-flex;gap:8px;align-items:center;font-weight:800;color:var(--gold);text-transform:uppercase;letter-spacing:1px;font-size:14px}
.stepcard h3{font-size:clamp(22px,4.6vw,27px);margin:8px 0 16px;font-family:Nunito;font-weight:800;line-height:1.3}
.opts{display:grid;gap:10px}
.opt{display:flex;align-items:center;gap:12px;padding:15px 16px;border-radius:16px;background:rgba(0,0,0,.22);border:2px solid var(--line);font-size:19px;font-weight:700;text-align:left;transition:all .2s}
.opt:hover{border-color:#a99bff;background:rgba(124,92,255,.15)}
.opt .k{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:rgba(255,255,255,.1);font-family:"Baloo 2";font-size:18px}
.opt.sel{border-color:var(--gold);background:rgba(255,200,61,.14)}
.opt.sel .k{background:var(--gold);color:#2a1600}
.opt.right{border-color:var(--ok);background:rgba(34,197,94,.18)}
.opt.wrong{border-color:var(--bad);background:rgba(255,90,110,.15);animation:shake .45s}
.numwrap{display:flex;align-items:center;gap:10px}
.numwrap input{flex:1;text-align:center;font-size:30px}
.numwrap .unit{font-weight:800;font-size:22px;color:var(--muted);min-width:30px}
.numwrap.wrong input{border-color:var(--bad);animation:shake .45s}
.numwrap.right input{border-color:var(--ok)}
@keyframes shake{20%,60%{transform:translateX(-8px)}40%,80%{transform:translateX(8px)}}
.actions{display:flex;gap:10px;margin-top:16px}
.actions .btn{flex:1;white-space:nowrap;padding:16px 14px}
.hint{margin-top:14px;padding:14px 16px;border-radius:16px;background:rgba(56,189,248,.12);border:1px solid rgba(56,189,248,.4);animation:enter .4s both}
.hint b{color:#7dd3fc}
.fb{margin-top:14px;padding:16px;border-radius:16px;animation:pop .45s cubic-bezier(.2,1.4,.4,1) both}
.fb.ok{background:rgba(34,197,94,.16);border:1px solid rgba(34,197,94,.5)}
.fb.bad{background:rgba(255,90,110,.13);border:1px solid rgba(255,90,110,.45)}
.fb .t{font-family:"Baloo 2";font-size:24px}
.fb .plus{float:right;font-family:"Baloo 2";font-size:24px;color:var(--gold)}
@keyframes pop{from{opacity:0;transform:scale(.9)}}
.done-list{display:grid;gap:8px;margin-top:16px}
.done-item{display:flex;gap:10px;padding:10px 14px;border-radius:14px;background:rgba(34,197,94,.08);border:1px solid rgba(34,197,94,.25);font-size:16px}

/* modal */
.modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:20px;background:rgba(8,5,30,.72);backdrop-filter:blur(8px);animation:fade .3s both}
@keyframes fade{from{opacity:0}}
.modal .box{width:min(480px,100%);text-align:center;border-radius:28px;padding:28px 22px;background:linear-gradient(180deg,#2d2380,#1b1452);border:1px solid var(--line);box-shadow:0 30px 80px rgba(0,0,0,.6);animation:pop .5s cubic-bezier(.2,1.4,.4,1) both;max-height:90vh;overflow:auto}
.trophy{font-size:76px;animation:bounce 1.4s ease-in-out infinite}
@keyframes bounce{50%{transform:translateY(-10px) rotate(-5deg)}}
.bigpts{font-family:"Baloo 2";font-size:64px;color:var(--gold);line-height:1;text-shadow:0 6px 30px rgba(255,200,61,.45)}
.newbadges{display:flex;justify-content:center;gap:12px;flex-wrap:wrap;margin:16px 0}
.newbadges .badge .medal{animation:spinIn 1s cubic-bezier(.2,1.4,.4,1) both}
@keyframes spinIn{from{transform:scale(0) rotate(-200deg)}}

/* final */
.final{text-align:center}
.final .score{margin:10px auto 20px;width:220px;height:220px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--gold) var(--p,0%),rgba(255,255,255,.08) 0);box-shadow:var(--shadow);transition:--p 1s}
.final .score>div{width:180px;height:180px;border-radius:50%;background:#1d165a;display:grid;place-items:center;align-content:center}
.final .badges-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:14px;margin:16px 0}
.final .badges-grid .badge{width:auto}
.statgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:16px 0}
.statgrid div{padding:14px 6px;border-radius:16px;background:var(--card);border:1px solid var(--line)}
.statgrid b{display:block;font-family:"Baloo 2";font-size:30px;color:var(--gold)}
.credits li{margin-bottom:10px}
.credits a{color:#cfc6ff}
.foot{margin-top:28px;text-align:center;font-size:14px;color:var(--muted)}
.linkbtn{color:#cfc6ff;text-decoration:underline;font-weight:700}
.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,120px);z-index:60;padding:14px 20px;border-radius:16px;background:#fff;color:#1b1452;font-weight:800;box-shadow:var(--shadow);transition:transform .4s cubic-bezier(.2,1.4,.4,1);max-width:90vw}
.toast.show{transform:translate(-50%,0)}
#confetti{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:70}
.switch{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px}
.switch input{width:22px;height:22px;accent-color:var(--gold)}

@media (min-width:700px){.grid{grid-template-columns:repeat(2,1fr)}}
@media (min-width:980px){
  .gores{display:none!important}
  .welcome{grid-template-columns:1.1fr .9fr}
  .hero-card{min-height:560px}
  .grid{grid-template-columns:repeat(3,1fr)}
  .prob{grid-template-columns:1.05fr .95fr;align-items:start}
  .prob .right{position:sticky;top:86px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
