/* Giao diện chung: trang quản lý + game trên lớp */
:root{
  --bg1:#312e81; --bg2:#6d28d9; --bg3:#db2777; --pri:#7c3aed; --pri-d:#5b21b6; --accent:#facc15;
  --card:#ffffff; --soft:#f5f3ff; --line:#ede9fe; --text:#1e1b4b; --muted:#6b7280;
  --a:#f43f5e; --a-d:#be123c; --b:#3b82f6; --b-d:#1d4ed8; --c:#f59e0b; --c-d:#b45309; --d:#10b981; --d-d:#047857;
  --ok:#16a34a; --bad:#dc2626; --radius:22px;
}
html[data-theme="ocean"]{ --bg1:#0c4a6e; --bg2:#0284c7; --bg3:#06b6d4; --pri:#0284c7; --pri-d:#075985; --soft:#f0f9ff; --line:#e0f2fe; --text:#0c4a6e; }
html[data-theme="forest"]{ --bg1:#14532d; --bg2:#15803d; --bg3:#84cc16; --pri:#16a34a; --pri-d:#166534; --soft:#f0fdf4; --line:#dcfce7; --text:#14532d; }
html[data-theme="candy"]{ --bg1:#be185d; --bg2:#ec4899; --bg3:#fb923c; --pri:#db2777; --pri-d:#9d174d; --soft:#fdf2f8; --line:#fce7f3; --text:#500724; }
html[data-theme="sunset"]{ --bg1:#7c2d12; --bg2:#ea580c; --bg3:#facc15; --pri:#ea580c; --pri-d:#9a3412; --soft:#fff7ed; --line:#ffedd5; --text:#431407; }

*{box-sizing:border-box}
html,body{background:var(--bg1)}
body{margin:0;min-height:100vh;font-family:"Be Vietnam Pro","Segoe UI",Roboto,Arial,sans-serif;color:var(--text);
  background:radial-gradient(1200px 600px at 10% -10%,var(--bg3) 0,transparent 60%),
             radial-gradient(900px 600px at 110% 10%,var(--bg2) 0,transparent 60%),
             linear-gradient(160deg,var(--bg1),var(--bg2));background-attachment:fixed;overflow-x:hidden}
#decor{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}
#decor span{position:absolute;opacity:.16;animation:floaty linear infinite}
@keyframes floaty{0%{transform:translateY(0) rotate(0)}50%{transform:translateY(-40px) rotate(14deg)}100%{transform:translateY(0) rotate(0)}}
.wrap{position:relative;z-index:1;max-width:1100px;margin:0 auto;padding:22px 16px 40px}
.hidden{display:none!important}
h1{color:#fff;text-align:center;font-size:clamp(28px,5vw,46px);font-weight:900;margin:8px 0 4px;letter-spacing:-.5px;text-shadow:0 4px 0 rgba(0,0,0,.18),0 10px 30px rgba(0,0,0,.25)}
h3{margin:0 0 10px;font-weight:800}
.sub{color:rgba(255,255,255,.85);text-align:center;margin:0 0 24px;font-weight:500}
.muted{color:var(--muted)}
.card{background:var(--card);border-radius:var(--radius);padding:24px;box-shadow:0 18px 50px rgba(0,0,0,.22);position:relative}
.btn{border:0;border-radius:14px;padding:12px 20px;font-size:16px;font-weight:700;cursor:pointer;font-family:inherit;text-decoration:none;display:inline-block;
  background:var(--pri);color:#fff;box-shadow:0 4px 0 var(--pri-d);transition:transform .08s,filter .15s,box-shadow .08s;position:relative}
.btn:hover{filter:brightness(1.08);transform:translateY(-1px)}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--pri-d)}
.btn.gray{background:#eef0f4;color:#1f2937;box-shadow:0 4px 0 #cdd2db}
.btn.red{background:#ef4444;box-shadow:0 4px 0 #b91c1c} .btn.green{background:#22c55e;box-shadow:0 4px 0 #15803d}
.btn.orange{background:#f97316;box-shadow:0 4px 0 #c2410c} .btn.pink{background:#ec4899;box-shadow:0 4px 0 #be185d} .btn.sky{background:#0ea5e9;box-shadow:0 4px 0 #0369a1}
.btn.big{font-size:19px;padding:15px 28px;border-radius:16px}
.btn.sm{padding:7px 12px;font-size:14px;border-radius:11px;box-shadow:0 3px 0 rgba(0,0,0,.18)}
.btn.gray.sm{box-shadow:0 3px 0 #cdd2db}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.center{justify-content:center} .between{justify-content:space-between}
label{font-weight:700;font-size:14px}
input[type=text],input[type=number],input[type=password],input[type=datetime-local],textarea,select{width:100%;padding:10px 12px;border:2px solid var(--line);border-radius:12px;font-size:16px;font-family:inherit;background:#fff;color:var(--text)}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--pri);box-shadow:0 0 0 4px rgba(124,58,237,.15)}
input[type=checkbox],input[type=radio]{accent-color:var(--pri);width:18px;height:18px}
hr.sep{margin:22px 0;border:0;border-top:2px dashed var(--line)}
.count{color:#fff;text-align:center;margin-top:14px;font-size:15px;font-weight:600;opacity:.9}

/* Trang chủ game */
.hero{display:flex;align-items:center;justify-content:center;gap:18px;margin:6px 0 20px;flex-wrap:wrap}
.hero .mascot{width:120px;height:auto;filter:drop-shadow(0 10px 18px rgba(0,0,0,.3));animation:bobm 2.4s ease-in-out infinite}
@keyframes bobm{50%{transform:translateY(-8px) rotate(-3deg)}}
.hero h1{text-align:left;margin:0} .hero .sub{text-align:left;margin:4px 0 0}
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
@media (max-width:760px){.tiles{grid-template-columns:repeat(2,1fr)}} @media (max-width:440px){.tiles{grid-template-columns:1fr}}
.tile{border:0;border-radius:20px;padding:18px;color:#fff;text-align:left;cursor:pointer;font-family:inherit;display:flex;gap:14px;align-items:center;text-decoration:none;
  box-shadow:0 6px 0 rgba(0,0,0,.2);transition:transform .12s,filter .12s;min-height:92px}
.tile:hover{transform:translateY(-3px);filter:brightness(1.06)} .tile:active{transform:translateY(3px)}
.tile .ic{font-size:30px;width:56px;height:56px;border-radius:16px;background:rgba(255,255,255,.25);display:grid;place-items:center;flex-shrink:0}
.tile b{display:block;font-size:18px;font-weight:800} .tile small{display:block;opacity:.9;font-size:13px;font-weight:500;margin-top:2px}
.tile.play{grid-column:1/-1;background:linear-gradient(135deg,#22c55e,#16a34a);min-height:110px;justify-content:center}
.tile.play b{font-size:26px} .tile.play .ic{width:70px;height:70px;font-size:38px}
.t1{background:linear-gradient(135deg,#8b5cf6,#6d28d9)} .t2{background:linear-gradient(135deg,#fb923c,#ea580c)}
.t3{background:linear-gradient(135deg,#38bdf8,#0284c7)} .t4{background:linear-gradient(135deg,#f472b6,#db2777)} .t5{background:linear-gradient(135deg,#94a3b8,#475569)}
.setup{margin-top:18px}
.settings{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}
.settings .field{display:grid;gap:6px}
.settings .opt,.opt{display:flex;align-items:center;gap:8px;font-weight:600;background:var(--soft);padding:10px 12px;border-radius:12px}
.themes{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.sw{width:34px;height:34px;border-radius:50%;border:3px solid #fff;cursor:pointer;box-shadow:0 2px 6px rgba(0,0,0,.25)}
.sw.on{outline:3px solid var(--text);outline-offset:2px}

/* Danh sách câu hỏi */
.qlist{margin-top:16px;display:grid;gap:10px;max-height:60vh;overflow:auto;padding-right:4px}
.qitem{border:2px solid var(--line);border-radius:16px;padding:12px;display:flex;gap:12px;align-items:flex-start;background:#fff}
.qitem .num{background:var(--pri);color:#fff;border-radius:10px;min-width:34px;height:34px;display:grid;place-items:center;font-weight:800}
.qitem .body{flex:1;min-width:0} .qitem .q{font-weight:700;margin-bottom:4px;word-wrap:break-word}
.qitem .ans{font-size:14px;color:var(--muted)} .qitem .ans b{color:var(--ok)}
.qitem .thumb{width:64px;height:48px;object-fit:cover;border-radius:8px;border:2px solid var(--line)}
.qitem .acts{display:flex;gap:6px;align-items:center} .qitem .acts button{padding:6px 10px;font-size:14px}
.form-grid{display:grid;gap:10px;margin-top:12px}
.opt-input{display:flex;gap:8px;align-items:center}
.opt-input .letter{min-width:38px;height:38px;border-radius:10px;display:grid;place-items:center;color:#fff;font-weight:800}
.opt-input input[type=radio]{width:24px;height:24px;accent-color:var(--ok)}
.img-pick{display:flex;gap:12px;align-items:center;flex-wrap:wrap;background:var(--soft);padding:10px;border-radius:12px}
.img-pick img{max-height:90px;border-radius:10px;border:2px solid var(--line)}
.hint{font-size:13px;color:var(--muted);background:var(--soft);border-radius:12px;padding:10px 12px;white-space:pre-wrap;font-family:Consolas,monospace}
.bank-bar{background:var(--soft);border-radius:16px;padding:14px;margin-bottom:16px;border:2px solid var(--line)}
.tabs{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.tabs button.active{background:var(--pri);color:#fff;box-shadow:0 4px 0 var(--pri-d)}

/* Lớp, học sinh */
.cls-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px} @media (max-width:820px){.cls-grid{grid-template-columns:1fr}}
.stu-list{display:grid;gap:6px;max-height:440px;overflow:auto;margin-top:10px;padding-right:4px}
.stu{display:flex;gap:8px;align-items:center;border:2px solid var(--line);border-radius:14px;padding:7px 9px;background:#fff}
.stu .n{min-width:24px;color:var(--muted);font-size:13px;text-align:right}
.stu .nm{flex:1;font-weight:700;word-break:break-word;min-width:0}
.stu select{width:auto;padding:6px 8px;font-size:14px}
.stu .st{font-weight:900;color:#ca8a04;min-width:48px;text-align:right;font-size:17px}
.stu .meta{font-size:12px;color:var(--muted);font-weight:500;margin-top:2px}
.av{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--soft);font-size:20px;flex-shrink:0;border:2px solid var(--line);cursor:pointer;user-select:none}
.av.sm{width:24px;height:24px;font-size:14px;border-width:1px;cursor:inherit}
.groups{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-top:12px}
.group{border-radius:16px;padding:10px;border:3px solid;background:#fff}
.group input{font-weight:800;padding:6px 8px;margin-bottom:6px}
.group .mem{display:flex;flex-wrap:wrap;gap:4px}
.tag{background:var(--soft);border-radius:999px;padding:3px 10px;font-size:13px;display:inline-flex;align-items:center;gap:4px}
.empty{color:var(--muted);text-align:center;padding:18px}

/* Chơi */
.topbar{display:flex;justify-content:space-between;align-items:center;color:#fff;margin-bottom:14px;gap:10px;flex-wrap:wrap}
.pill{background:rgba(255,255,255,.18);backdrop-filter:blur(6px);padding:8px 16px;border-radius:999px;font-weight:800;font-size:17px;border:2px solid rgba(255,255,255,.25)}
.timer{width:68px;height:68px;border-radius:50%;background:#fff;color:var(--pri);display:grid;place-items:center;font-size:27px;font-weight:900;box-shadow:0 5px 0 rgba(0,0,0,.2)}
.timer.warn{color:var(--bad);animation:pulse .6s infinite alternate}
@keyframes pulse{to{transform:scale(1.1)}}
.progress{height:10px;background:rgba(255,255,255,.2);border-radius:99px;overflow:hidden;margin-bottom:14px}
.progress div{height:100%;background:linear-gradient(90deg,#fde047,#f59e0b);transition:width .4s}
.resp{padding:14px 18px;margin-bottom:14px}
.resp-name{font-size:clamp(22px,3.5vw,32px);font-weight:900;color:var(--pri)} .resp-name.rolling{color:#ea580c}
.resp-sub{font-size:14px;color:var(--muted)}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;max-height:190px;overflow:auto;padding-top:10px;border-top:2px dashed var(--line)}
.chip{border:2px solid var(--line);background:#fff;border-radius:999px;padding:5px 12px 5px 6px;font-size:15px;cursor:pointer;font-weight:700;display:inline-flex;align-items:center;gap:6px;font-family:inherit;color:var(--text)}
.chip:hover{border-color:var(--pri)} .chip.on{background:var(--pri);color:#fff;border-color:var(--pri)}
.chip.tried{opacity:.4;text-decoration:line-through;cursor:not-allowed} .chip small{font-weight:500;opacity:.8}
.qcard{padding:22px 24px;overflow:hidden}
.qcard::before{content:"";position:absolute;inset:0 0 auto 0;height:8px;background:linear-gradient(90deg,var(--a),var(--c),var(--d),var(--b))}
.qimg{display:block;max-width:100%;max-height:36vh;margin:6px auto 12px;border-radius:16px;box-shadow:0 6px 20px rgba(0,0,0,.15)}
.question{font-size:clamp(20px,3.5vw,32px);font-weight:800;text-align:center;min-height:90px;display:grid;place-items:center;word-wrap:break-word;line-height:1.35}
.answers{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:18px} @media (max-width:640px){.answers{grid-template-columns:1fr}}
.ans-btn{border:0;border-radius:20px;padding:18px 20px;color:#fff;font-size:clamp(16px,2.4vw,22px);font-weight:700;cursor:pointer;display:flex;align-items:center;gap:14px;text-align:left;min-height:88px;transition:transform .1s,opacity .2s;font-family:inherit;position:relative;overflow:hidden}
.ans-btn::after{content:"";position:absolute;right:-30px;top:-30px;width:110px;height:110px;border-radius:50%;background:rgba(255,255,255,.12)}
.ans-btn:hover:not(:disabled){transform:translateY(-3px)} .ans-btn:active:not(:disabled){transform:translateY(4px)}
.ans-btn .l{background:#fff;border-radius:14px;min-width:46px;height:46px;display:grid;place-items:center;font-size:22px;font-weight:900}
.ans-btn:disabled{cursor:default} .ans-btn.dim{opacity:.3;filter:grayscale(.5)}
.ans-btn.correct{outline:5px solid #fff;box-shadow:0 0 0 10px var(--ok),0 0 40px var(--ok);animation:pop .4s}
.ans-btn.wrong{outline:5px solid #fff;box-shadow:0 0 0 10px var(--bad);opacity:.55;animation:shake .35s}
@keyframes shake{25%{transform:translateX(-8px)}75%{transform:translateX(8px)}}
.A{background:linear-gradient(135deg,#fb7185,var(--a));box-shadow:0 6px 0 var(--a-d)} .A .l{color:var(--a)}
.B{background:linear-gradient(135deg,#60a5fa,var(--b));box-shadow:0 6px 0 var(--b-d)} .B .l{color:var(--b)}
.C{background:linear-gradient(135deg,#fbbf24,var(--c));box-shadow:0 6px 0 var(--c-d)} .C .l{color:var(--c)}
.D{background:linear-gradient(135deg,#34d399,var(--d));box-shadow:0 6px 0 var(--d-d)} .D .l{color:var(--d)}
.letter.A,.letter.B,.letter.C,.letter.D,.l.A,.l.B,.l.C,.l.D{box-shadow:none}
.feedback{margin-top:18px;text-align:center;font-size:24px;font-weight:900;color:#fff;min-height:36px;text-shadow:0 3px 0 rgba(0,0,0,.2)}
.popmenu{position:absolute;z-index:6;background:#fff;border-radius:16px;box-shadow:0 12px 40px rgba(0,0,0,.25);padding:8px;display:grid;gap:4px;min-width:250px}
.popmenu button{border:0;background:none;text-align:left;padding:10px 12px;border-radius:10px;cursor:pointer;font-family:inherit;font-size:15px;font-weight:600;color:var(--text)}
.popmenu button:hover{background:var(--soft)}

/* Kết quả, bảng điểm */
.result{text-align:center}
.result .score{font-size:52px;font-weight:900;color:var(--pri);margin:8px 0}
.trophy{font-size:70px;animation:pop .6s}
.review{text-align:left;margin-top:20px;display:grid;gap:8px;max-height:40vh;overflow:auto;padding-right:4px}
.review > div{padding:10px 12px;border-radius:12px;background:var(--soft);font-size:15px}
.review .r-ok{border-left:6px solid var(--ok)} .review .r-bad{border-left:6px solid var(--bad)}
table.board{width:100%;border-collapse:separate;border-spacing:0;text-align:left;font-size:16px}
table.board th{background:var(--soft);padding:10px;font-size:14px}
table.board td{padding:10px;border-bottom:1px solid var(--line)} table.board td.num{text-align:center;font-weight:800}
table.board tr.top1 td{background:#fef9c3}
.board-wrap{max-height:55vh;overflow:auto;margin-top:12px}
.modal{position:fixed;inset:0;background:rgba(15,10,40,.6);backdrop-filter:blur(3px);display:grid;place-items:center;z-index:8;padding:16px}
.modal .card{width:min(640px,100%);max-height:90vh;overflow:auto;animation:pop .25s}

/* Đua vịt */
.track{position:relative;background:linear-gradient(180deg,#7dd3fc,#0284c7 60%,#0369a1);border-radius:18px;overflow:hidden;padding:4px 0;margin-top:10px;box-shadow:inset 0 0 0 4px rgba(255,255,255,.35)}
.track::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 40px,rgba(255,255,255,.08) 40px 44px);pointer-events:none}
.lane{display:grid;grid-template-columns:minmax(90px,170px) 1fr;align-items:center;border-bottom:2px dashed rgba(255,255,255,.35);position:relative}
.lane:last-child{border-bottom:0}
.lane .ln{color:#fff;font-weight:800;padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.5);background:rgba(0,0,0,.18);height:100%;display:flex;align-items:center;gap:5px}
.lane .water{position:relative;height:100%}
.lane .finish{position:absolute;top:0;bottom:0;right:0;width:12px;background:repeating-conic-gradient(#111 0 25%,#fff 0 50%) 0 0/12px 12px;opacity:.9}
.lane .pts{position:absolute;right:18px;top:50%;transform:translateY(-50%);color:#fff;font-weight:900;text-shadow:0 1px 2px rgba(0,0,0,.6)}
.lane.win{background:rgba(250,204,21,.6)}
.duck{position:absolute;left:0;top:5%;height:90%;will-change:transform}
.duck svg{display:block;height:100%;width:auto;animation:bob .45s ease-in-out infinite alternate}
.duck.still svg{animation:none}
@keyframes bob{from{transform:translateY(4%) rotate(2deg)}to{transform:translateY(-10%) rotate(-5deg)}}
.race-win{text-align:center;font-size:clamp(24px,4.5vw,44px);font-weight:900;color:#ca8a04;padding:10px;animation:pop .5s ease-out}
@keyframes pop{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}

/* Điểm cộng & quà */
.gifts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:10px}
.gift{border:2px solid var(--line);border-radius:18px;padding:12px;text-align:center;position:relative;display:grid;gap:4px;background:#fff}
.gift .ge{font-size:42px;line-height:1.1} .gift .gn{font-weight:800;word-break:break-word}
.gift .gc{color:#ca8a04;font-weight:800;font-size:14px} .gift .gs{font-size:12px;color:var(--muted)}
.gift .gx{position:absolute;top:4px;right:6px;border:0;background:none;cursor:pointer;color:var(--muted);font-size:14px}
.gift.can{border-color:#86efac;background:linear-gradient(#f0fdf4,#fff)}
.catb{display:inline-flex;align-items:center;gap:2px;font-size:12px;font-weight:700;padding:1px 7px;border-radius:999px;margin:2px 3px 0 0;color:#fff}
.prog{height:8px;background:#eef0f4;border-radius:99px;overflow:hidden;margin-top:4px}
.prog div{height:100%;background:linear-gradient(90deg,#f472b6,#db2777);border-radius:99px}
.sum-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-top:14px}
.sum{background:var(--soft);border-radius:16px;padding:12px;text-align:center;display:grid;gap:2px;border:2px solid var(--line)}
.sum b{font-size:28px;color:var(--pri);word-break:break-word;font-weight:900} .sum span{font-size:13px;color:var(--muted)}
.stars-box{margin-top:18px;padding:16px;border-radius:16px;background:linear-gradient(#fffbeb,#fefce8);border:2px solid #fde68a;text-align:left}
.award-bar{background:linear-gradient(135deg,var(--soft),#fff);border:2px solid var(--line);border-radius:16px;padding:12px;margin-top:10px}
.cats{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.cat{border:2px solid transparent;border-radius:999px;padding:6px 12px;font-family:inherit;font-weight:700;font-size:14px;cursor:pointer;color:#fff;opacity:.55}
.cat.on{opacity:1;border-color:#fff;box-shadow:0 0 0 3px var(--text)}
.scope{display:inline-flex;align-items:center;gap:6px;background:var(--pri);color:#fff;border-radius:999px;padding:4px 12px;font-weight:700;font-size:13px}
.plusbtn{background:#22c55e!important;box-shadow:0 3px 0 #15803d!important;color:#fff!important}

/* Camera */
.cam-layout{display:flex;gap:20px;flex-wrap:wrap}
.cam-box{position:relative;background:#111;border-radius:18px;overflow:hidden;min-height:200px;max-width:760px;margin:0 auto}
.cam-box video,.cam-box canvas{display:block;width:100%;height:auto}
.cam-box canvas{position:absolute;inset:0;height:100%}
.cam-box video.mirror{transform:scaleX(-1)}
.cam-status{position:absolute;left:50%;top:12px;transform:translateX(-50%);background:rgba(0,0,0,.65);color:#fff;padding:8px 16px;border-radius:999px;font-weight:800;font-size:clamp(15px,2.4vw,22px);white-space:nowrap;max-width:95%;overflow:hidden;text-overflow:ellipsis}
.cam-status.go{background:#16a34a;font-size:clamp(22px,4vw,36px);animation:pulse .4s infinite alternate}
.cam-status.warn{background:#dc2626} .cam-status.win{background:#7c3aed}
.cam-ctrl{position:absolute;right:10px;bottom:10px;display:flex;gap:6px}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:#1e1b4b;color:#fff;padding:12px 20px;border-radius:14px;z-index:50;max-width:90vw;font-weight:600;box-shadow:0 10px 30px rgba(0,0,0,.3);animation:pop .25s}
#confetti{position:fixed;inset:0;pointer-events:none;z-index:30}
