/* ===== 课堂互动工具箱（V5.17.8） ===== */
#toolLayer{position:fixed;inset:0;z-index:10001;display:none}
#toolLayer.show{display:block}
#toolLayer.tl-modal-mode{background:rgba(15,23,42,.55);backdrop-filter:blur(4px)}
#toolLayer.tl-float-mode{background:transparent;pointer-events:none}
.tl-wrap{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:20px;overflow:auto}
.tl-card{background:#fff;border-radius:16px;width:min(960px,96vw);max-height:92vh;display:flex;flex-direction:column;box-shadow:0 30px 80px rgba(0,0,0,.45);overflow:hidden;animation:fi .25s ease}
.tl-h{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--g200);font-size:16px;font-weight:700;color:var(--g800);flex-shrink:0}
.tl-x{background:none;border:none;font-size:18px;cursor:pointer;color:var(--g400);line-height:1}
.tl-x:hover{color:var(--rose)}
.tl-b{padding:20px;overflow:auto}
.tl-sub{font-size:13px;color:var(--g600);margin-bottom:8px}
.tl-sub b{color:var(--primary)}

.tool-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.tool-card{background:#fff;border:1px solid var(--g200);border-radius:14px;padding:18px;cursor:pointer;transition:var(--tr);display:flex;flex-direction:column;gap:8px}
.tool-card:hover{transform:translateY(-3px);box-shadow:var(--shm);border-color:var(--primary)}
.tool-card-ic{width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px}
.tool-card-name{font-size:15px;font-weight:700;color:var(--g800)}
.tool-card-desc{font-size:12px;color:var(--g500);line-height:1.6;flex:1}
.tool-card-go{font-size:12px;font-weight:600;color:var(--primary)}

.roll-stage{height:160px;border-radius:14px;background:linear-gradient(135deg,#EEF2FF,#F5F3FF);display:flex;align-items:center;justify-content:center;font-size:40px;font-weight:800;color:var(--primary);margin-bottom:16px;overflow:hidden;padding:10px;text-align:center}
.roll-stage .roll-hit{animation:rollpop .4s ease;color:var(--rose)}
@keyframes rollpop{0%{transform:scale(.6);opacity:.3}60%{transform:scale(1.15)}100%{transform:scale(1)}}
.roll-modes{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.roll-actions{display:flex;gap:10px;flex-wrap:wrap}
.roll-info{margin:12px 0;font-size:13px;color:var(--g600)}
.roll-picked{display:flex;flex-wrap:wrap;gap:6px;min-height:10px}
.roll-chip{background:var(--p50);color:var(--primary);font-size:12px;padding:3px 10px;border-radius:20px}
.roll-edit{margin-top:14px;font-size:13px;color:var(--g600)}
.roll-edit summary{cursor:pointer;user-select:none}
.roll-edit textarea{margin-top:8px;border:1px solid var(--g300);border-radius:8px;padding:8px;font-size:13px;resize:vertical}

.buzz-picks{display:flex;flex-wrap:wrap;gap:8px 14px;max-height:160px;overflow:auto;padding:10px;border:1px solid var(--g200);border-radius:10px}
.buzz-pick{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--g700)}
.buzz-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.buzz-card{border:1px solid var(--g200);border-radius:12px;padding:12px;text-align:center;background:#fff;transition:var(--tr)}
.buzz-card.buzz-buzzed{border-color:var(--amber);box-shadow:0 0 0 3px var(--a50);transform:scale(1.03)}
.buzz-card.buzz-dead{opacity:.45;filter:grayscale(.6)}
.buzz-name{font-weight:700;font-size:14px;color:var(--g800);margin-bottom:8px}
.buzz-hpbar{height:10px;background:var(--g100);border-radius:6px;overflow:hidden;margin-bottom:6px}
.buzz-hpfill{height:100%;border-radius:6px;transition:width .4s ease,background .4s ease}
.buzz-hptxt{font-size:12px;color:var(--g600);margin-bottom:8px}
.buzz-q{min-height:46px;background:var(--g50);border-radius:10px;padding:10px 12px;font-size:14px;color:var(--g800);margin-bottom:14px;font-weight:600}
.buzz-ctrl{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;align-items:center}
.buzz-judge{background:var(--a50);border-radius:10px;padding:10px 12px;font-size:13px;color:var(--g800);margin-top:12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}

.match-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}
.match-tile{border:1px solid var(--g300);border-radius:12px;padding:16px 12px;text-align:center;font-size:14px;font-weight:600;color:var(--g800);background:#fff;cursor:pointer;transition:var(--tr);min-height:64px;display:flex;align-items:center;justify-content:center}
.match-tile:hover{border-color:var(--primary);background:var(--p50)}
.match-tile.match-sel{border-color:var(--primary);background:var(--primary);color:#fff;transform:scale(1.04);box-shadow:0 0 0 3px var(--p50)}
/* 配对正确：蓝色 + 计分 */
.match-tile.match-ok{border-color:var(--primary);background:var(--primary);color:#fff;cursor:default;animation:matchOkPop .3s ease}
.match-tile.match-ok:hover{transform:none}
/* 配对错误：红色报警 + 抖动 */
.match-tile.match-bad{border-color:var(--rose);background:#ffe4e6;color:var(--rose);animation:matchShake .38s ease}
.match-tile.match-bad:hover{transform:none}
@keyframes matchOkPop{0%{transform:scale(1.1)}100%{transform:scale(1)}}
@keyframes matchShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}
/* 分数实时弹跳提示 */
.match-score{display:inline-block;font-weight:800;min-width:14px;text-align:center}
.match-score-pop{color:var(--primary);animation:scorePop .42s ease}
.match-score-bad{color:var(--rose);animation:scorePop .42s ease}
@keyframes scorePop{0%{transform:scale(1.5)}60%{transform:scale(1.5)}100%{transform:scale(1)}}

/* 智趣消消乐 · 老师题目录入/题库（V5.18.5） */
.match-setup{padding:4px 0}
.match-inp-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0}
.match-inp{flex:1;min-width:150px;height:40px;border:1px solid var(--g300);border-radius:var(--rs);padding:0 12px;font-size:14px}
.match-inp:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--p50)}
.match-add{height:40px;padding:0 18px;border:none;border-radius:var(--rs);background:var(--primary);color:#fff;font-weight:700;cursor:pointer;white-space:nowrap}
.match-add:hover{filter:brightness(1.05)}
.match-draft{margin:6px 0 4px;border:1px solid var(--g200);border-radius:12px;padding:6px;max-height:230px;overflow:auto;background:var(--g50)}
.match-pair{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px}
.match-pair:nth-child(even){background:#fff}
.match-pair.match-pair-ed{outline:2px solid var(--primary);background:var(--p50)}
.match-pair-a{font-weight:700;color:var(--g800);word-break:break-all}
.match-pair-b{color:var(--g600);word-break:break-all}
.match-pair-mid{color:var(--primary);font-weight:700;flex:none}
.match-pair-act{margin-left:auto;display:flex;gap:6px;flex:none}
.mini-btn{border:1px solid var(--g300);background:#fff;border-radius:8px;width:30px;height:30px;cursor:pointer;font-size:13px;line-height:1}
.mini-btn:hover{border-color:var(--primary);background:var(--p50)}
.match-bank-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0}
.match-bank-name{flex:1;min-width:140px;height:38px;border:1px solid var(--g300);border-radius:var(--rs);padding:0 12px;font-size:14px}
.match-bank-sel{height:38px;border:1px solid var(--g300);border-radius:var(--rs);padding:0 10px;font-size:13px;max-width:210px}
.match-count{color:var(--primary);font-weight:700}
.match-limit{margin:14px 0 4px;padding:12px 14px;background:var(--g50);border:1px solid var(--g200);border-radius:var(--rs)}
.match-limit-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:6px}
.match-limit-opt{display:inline-flex;align-items:center;gap:6px;font-size:14px;cursor:pointer;user-select:none}
.match-limit-opt input{width:16px;height:16px;accent-color:var(--primary);cursor:pointer}
.match-limit-n{width:72px;height:34px;border:1px solid var(--g300);border-radius:var(--rs);padding:0 10px;font-size:14px;text-align:center}
.match-limit-n:disabled{background:var(--g100);color:var(--g400);cursor:not-allowed}
.match-tile.match-locked{opacity:.45;filter:grayscale(.6);cursor:not-allowed;background:var(--g100);border-color:var(--g200);color:var(--g500)}

/* ===== 声境花园（V5.18.8：先选状态 · 满屏/正常/最小化 · 鲜艳花海） ===== */
.garden-modes{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:10px}
.garden-mode{border:2px solid var(--g200);border-radius:16px;padding:16px 14px;cursor:pointer;background:linear-gradient(180deg,#fff,#F8FAFC);transition:.18s;text-align:center}
.garden-mode:hover{border-color:var(--primary);transform:translateY(-2px)}
.garden-mode.on{border-color:var(--primary);background:linear-gradient(180deg,#EFF6FF,#FFF);box-shadow:0 8px 24px rgba(59,130,246,.18)}
.garden-mode .gm-ic{font-size:34px;line-height:1}
.garden-mode .gm-t{font-weight:800;font-size:15px;margin:6px 0 4px;color:var(--g800)}
.garden-mode .gm-d{font-size:12px;color:var(--g500);line-height:1.5}
.garden-modehint{font-size:13px;color:var(--g600);background:var(--g50);border:1px dashed var(--g200);border-radius:10px;padding:8px 10px;margin-bottom:4px}
.garden-stage{border-radius:18px;overflow:hidden;background:#fff;border:1px solid var(--g200);box-shadow:0 10px 30px rgba(15,23,42,.08)}
.garden-stage.view-full{position:fixed;inset:0;z-index:10003;width:auto;height:auto;border-radius:0}
.garden-stage.view-mini{position:fixed;right:16px;bottom:16px;left:auto;top:auto;width:242px;z-index:10003;box-shadow:0 14px 40px rgba(0,0,0,.28)}
.garden-viewbar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;background:linear-gradient(90deg,#0EA5E9,#22C55E);color:#fff}
.garden-vmode{font-weight:800;font-size:14px}
.garden-vacts{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}
.gb-btn{border:none;background:rgba(255,255,255,.22);color:#fff;font-size:12px;font-weight:700;padding:5px 9px;border-radius:8px;cursor:pointer;transition:.15s}
.gb-btn:hover{background:rgba(255,255,255,.4)}
.garden-sky{position:relative;min-height:340px;padding:14px;display:flex;flex-direction:column;gap:8px;overflow:hidden;background:linear-gradient(180deg,#bfe9ff 0%,#d6f3ff 26%,#e4fae0 58%,#a9e89f 100%)}
.garden-stage.view-full .garden-sky{min-height:calc(100vh - 44px)}
.garden-sun{position:absolute;top:8px;right:16px;width:96px;height:96px;border-radius:50%;pointer-events:none;background:radial-gradient(circle,#fff7c2 0%,#ffe27a 42%,rgba(255,226,122,0) 70%);filter:blur(1px)}
.garden-fake{position:relative;z-index:3;background:rgba(255,255,255,.72);border-radius:10px;padding:6px 10px;font-size:12px;color:var(--g700)}
.garden-stage.view-mini .garden-sky{display:none}
.garden-meter{height:14px;background:rgba(255,255,255,.65);border-radius:8px;overflow:hidden;position:relative;z-index:3}
.garden-meterfill{height:100%;width:0;background:var(--green);border-radius:8px;transition:width .12s linear,background .2s}
.garden-state{text-align:center;font-size:14px;font-weight:700;color:#1f6b2e;position:relative;z-index:3;text-shadow:0 1px 2px rgba(255,255,255,.6);margin-bottom:6px}
.garden-bloom{position:relative;z-index:2;flex:1;display:flex;flex-wrap:wrap;gap:8px;align-content:flex-start;min-height:160px;font-size:42px;line-height:1.2;padding-top:6px}
.garden-flower{display:inline-block;transform-origin:bottom center;animation:sway 4s ease-in-out infinite}
.garden-flower .gf{display:inline-block;animation:bloom2 .6s cubic-bezier(.2,1.5,.4,1) both;filter:drop-shadow(0 5px 7px rgba(0,0,0,.18)) drop-shadow(0 0 12px rgba(255,170,80,.45))}
.garden-stage.mode-quiet .garden-flower .gf{filter:drop-shadow(0 5px 7px rgba(0,0,0,.16)) drop-shadow(0 0 12px rgba(120,220,160,.5))}
.garden-spark{display:inline-block;font-size:22px;animation:spark 1.1s ease-out forwards}
.garden-count{font-size:13px;font-weight:700;color:#1f6b2e;text-align:right;position:relative;z-index:3}
@keyframes bloom2{0%{transform:scale(0) rotate(-28deg);opacity:0}55%{transform:scale(1.25) rotate(10deg);opacity:1}100%{transform:scale(1) rotate(0)}}
@keyframes sway{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
@keyframes spark{0%{transform:translateY(6px) scale(.4);opacity:0}30%{opacity:1}100%{transform:translateY(-26px) scale(1);opacity:0}}

.quest-prog{height:10px;background:var(--g100);border-radius:6px;overflow:hidden;margin-bottom:6px}
.quest-progfill{height:100%;background:linear-gradient(90deg,var(--purple),var(--pl));border-radius:6px;transition:width .5s ease}
.quest-card{border:1px solid var(--g200);border-radius:14px;padding:20px;background:#fff;text-align:center;margin-bottom:12px}
.quest-lvtag{display:inline-block;font-size:12px;font-weight:700;color:var(--purple);background:var(--p50b);padding:2px 12px;border-radius:20px;margin-bottom:10px}
.quest-lvtitle{font-size:22px;font-weight:800;color:var(--g800)}
.quest-lvdesc{font-size:14px;color:var(--g600);margin-top:8px}
.quest-win{background:linear-gradient(135deg,#F5F3FF,#ECFDF5);border-color:var(--purple)}
.quest-next{font-size:13px;color:var(--g500);text-align:center;padding:8px}

.mem-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:12px}
.mem-card{position:relative;height:84px;border-radius:12px;cursor:pointer;perspective:600px}
.mem-card > div{position:absolute;inset:0;backface-visibility:hidden;display:flex;align-items:center;justify-content:center;border-radius:12px;font-size:14px;font-weight:700;padding:8px;text-align:center}
.mem-front{background:linear-gradient(135deg,var(--pl),var(--pl2));color:#fff;font-size:24px}
.mem-back{background:#fff;border:1px solid var(--g300);color:var(--g800);transform:rotateY(180deg)}
.mem-card.mem-open .mem-front{transform:rotateY(180deg)}
.mem-card.mem-open .mem-back{transform:rotateY(0)}
.mem-card.mem-ok .mem-back{background:var(--g50);border-color:var(--green);color:var(--green)}

.cd-widget{position:fixed;top:80px;right:20px;width:300px;background:#fff;border-radius:14px;box-shadow:0 16px 40px rgba(0,0,0,.3);overflow:hidden;pointer-events:auto;z-index:10002;border:1px solid var(--g200)}
.cd-bar{display:flex;align-items:center;gap:8px;padding:8px 12px;background:linear-gradient(90deg,var(--primary),var(--pl2));color:#fff;cursor:default}
.cd-ic{font-size:16px}
.cd-mini{font-weight:700;font-size:15px}
.cd-acts{margin-left:auto;display:flex;gap:10px}
.cd-acts span{cursor:pointer;opacity:.85;font-weight:700}
.cd-acts span:hover{opacity:1}
.cd-body{padding:14px}
.cd-set,.cd-warn{font-size:13px;color:var(--g600);margin-bottom:10px}
.cd-warn input{vertical-align:middle}
.cd-time{font-size:40px;font-weight:800;text-align:center;color:var(--g800);letter-spacing:1px;margin:6px 0;white-space:nowrap}
.cd-prog{height:10px;background:var(--g100);border-radius:6px;overflow:hidden;margin-bottom:12px}
.cd-progfill{height:100%;width:100%;background:var(--primary);border-radius:6px;transition:width 1s linear,background .3s}
.cd-btns{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.cd-btn-mini{height:30px;padding:0 12px;border:none;border-radius:var(--rs);background:var(--pl2);color:var(--primary);font-weight:700;cursor:pointer;font-size:13px;white-space:nowrap}
.cd-btn-mini:hover{background:var(--primary);color:#fff}
.cd-set-r{background:#F2FAFF;border:1px dashed #CFE8FF;border-radius:10px;padding:8px 10px}
.cd-widget.cd-yellow .cd-time{color:var(--amber)}
.cd-widget.cd-red .cd-time{color:var(--rose)}
.cd-widget.cd-red{animation:cdflash 1s infinite}
.cd-widget.cd-flash{animation:cdflash .6s infinite}
@keyframes cdflash{0%,100%{box-shadow:0 16px 40px rgba(239,68,68,.3)}50%{box-shadow:0 16px 50px rgba(239,68,68,.85)}}
.cd-widget.cd-min{width:140px}
/* 满屏投影模式：覆盖整个视口、超大数字居中，适合课堂投屏 */
.cd-widget.cd-full{position:fixed;inset:0;top:0;left:0;right:0;bottom:0;width:auto;height:auto;border-radius:0;z-index:10005;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:#fff}
.cd-widget.cd-full .cd-bar{position:absolute;top:0;left:0;right:0;width:100%;font-size:18px}
.cd-widget.cd-full .cd-body{display:flex!important;flex-direction:column;align-items:center;justify-content:center;width:100%;max-width:860px;padding:40px;box-sizing:border-box}
.cd-widget.cd-full .cd-set,.cd-widget.cd-full .cd-warn{font-size:16px;margin-bottom:14px}
.cd-widget.cd-full .cd-time{font-size:clamp(64px,15vw,180px);line-height:1;margin:8px 0;white-space:nowrap}
.cd-widget.cd-full .cd-mood{font-size:28px;font-weight:800;margin-bottom:10px}
.cd-widget.cd-full .cd-prog{height:16px;max-width:720px;margin:2px auto 14px;border-radius:8px}
.cd-widget.cd-full .cd-progfill{border-radius:8px}
.cd-widget.cd-full .cd-btns{margin-top:18px;gap:16px}
.cd-widget.cd-full .cd-btns .cd-btn{font-size:18px;padding:14px 26px}
.cd-widget.cd-full .cd-pop{top:0}

.word-modes{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.word-top{font-size:13px;color:var(--g600);margin-bottom:12px}
.word-drawbar{display:flex;gap:10px;align-items:center;margin-bottom:8px;flex-wrap:wrap}
.word-canvas{border:2px solid var(--g300);border-radius:10px;background:#fff;width:100%;max-width:520px;touch-action:none;cursor:crosshair}
.word-wordbox{text-align:center;margin:12px 0}
.word-show{font-size:18px;color:var(--g800)}
.word-show b{color:var(--primary);font-size:22px}
.word-hidden{font-size:16px;color:var(--g500);padding:14px;background:var(--g50);border-radius:10px}
.word-timer{text-align:center;font-size:13px;color:var(--g600);margin-bottom:10px}
.word-btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}

@media(max-width:1100px){.tool-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:768px){.tool-grid{grid-template-columns:repeat(2,1fr)}.garden-modes{grid-template-columns:1fr}}
@media(max-width:480px){.tool-grid{grid-template-columns:1fr}}

/* ===== 课堂随机点名 · 可爱卡通版（V5.17.9） ===== */
.roll-cute{position:relative;overflow:hidden}
.roll-deco{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.roll-deco .rd{position:absolute;font-size:26px;opacity:.5;animation:floaty 6s ease-in-out infinite}
.roll-deco .r1{top:6px;left:5%;animation-delay:0s}
.roll-deco .r2{top:36px;right:7%;animation-delay:1.2s;font-size:22px}
.roll-deco .r3{top:128px;left:9%;animation-delay:2.1s;font-size:20px}
.roll-deco .r4{top:8px;right:22%;animation-delay:.6s;font-size:30px}
.roll-deco .r5{bottom:58px;left:13%;animation-delay:3s;font-size:22px}
.roll-deco .r6{bottom:28px;right:11%;animation-delay:1.8s;font-size:20px}
@keyframes floaty{0%,100%{transform:translateY(0) rotate(-6deg)}50%{transform:translateY(-14px) rotate(6deg)}}

.roll-stage-cute{position:relative;z-index:1;height:220px;border-radius:24px;margin-bottom:18px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:linear-gradient(135deg,#FFE3F1 0%,#E3F0FF 50%,#E8FFF4 100%);border:4px solid #fff;box-shadow:0 16px 40px rgba(255,150,200,.25),inset 0 0 0 2px rgba(255,255,255,.6);overflow:hidden}
.roll-emoji{font-size:54px;line-height:1;animation:bob 2s ease-in-out infinite}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
.roll-name{font-size:clamp(40px,9vw,76px);font-weight:900;letter-spacing:2px;background:linear-gradient(90deg,#FF6B9D,#7C5CFF,#23C9A6);-webkit-background-clip:text;background-clip:text;color:transparent;transition:transform .25s ease,filter .25s ease;text-align:center;padding:0 12px;word-break:break-all;max-width:100%;line-height:1.15}
.roll-name.roll-spin{animation:wob .28s linear infinite}
@keyframes wob{0%{transform:scale(1) rotate(-1deg)}50%{transform:scale(1.04) rotate(1deg)}100%{transform:scale(1) rotate(-1deg)}}
.roll-name.roll-hit{animation:rollpop2 .6s cubic-bezier(.18,.89,.32,1.28);transform:scale(1.25);filter:drop-shadow(0 6px 14px rgba(124,92,255,.35))}
@keyframes rollpop2{0%{transform:scale(.6);filter:blur(2px)}55%{transform:scale(1.35)}100%{transform:scale(1.25)}}
.roll-stage-cute.rolled{background:linear-gradient(135deg,#FFF1C2 0%,#FFD6EC 50%,#D6F5FF 100%);box-shadow:0 16px 50px rgba(255,160,80,.35),inset 0 0 0 2px rgba(255,255,255,.7)}

.roll-modes-cute{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-bottom:14px}
.rmode-btn{border:2px solid #FFD0E6;background:#FFF4FA;color:#C2568F;font-size:14px;font-weight:700;padding:8px 16px;border-radius:20px;cursor:pointer;transition:.2s}
.rmode-btn:hover{background:#FFE3F1;transform:translateY(-2px)}
.rmode-btn.rmode-on{background:linear-gradient(90deg,#FF8FB8,#A78BFA);color:#fff;border-color:transparent;box-shadow:0 8px 20px rgba(255,143,184,.4)}

.roll-speed{display:flex;align-items:center;gap:12px;margin:6px 4px 16px;font-size:13px;color:#7C6BA8}
.roll-speed .rs-label{white-space:nowrap;font-weight:600}
.roll-speed input[type=range]{-webkit-appearance:none;appearance:none;flex:1;height:10px;border-radius:6px;background:linear-gradient(90deg,#FFC2DD,#A78BFA);outline:none;cursor:pointer}
.roll-speed input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:26px;height:26px;border-radius:50%;background:#fff;border:4px solid #FF8FB8;box-shadow:0 3px 8px rgba(255,143,184,.5);cursor:pointer;transition:transform .15s}
.roll-speed input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.12)}
.roll-speed input[type=range]::-moz-range-thumb{width:26px;height:26px;border-radius:50%;background:#fff;border:4px solid #FF8FB8;box-shadow:0 3px 8px rgba(255,143,184,.5);cursor:pointer}

.roll-actions-cute{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-bottom:14px}
.roll-go{background:linear-gradient(135deg,#FF7EB3,#8B6CFF);color:#fff;border:none;font-size:20px;font-weight:800;padding:14px 40px;border-radius:30px;cursor:pointer;box-shadow:0 12px 30px rgba(255,126,179,.45);transition:.2s}
.roll-go:hover{transform:translateY(-2px) scale(1.03);box-shadow:0 16px 40px rgba(255,126,179,.6)}
.roll-go:active{transform:scale(.97)}
.roll-reset{border:2px solid #CFE8FF;background:#F2FAFF;color:#3B82C4;font-size:15px;font-weight:700;padding:14px 24px;border-radius:30px;cursor:pointer;transition:.2s}
.roll-reset:hover{background:#E3F2FF;transform:translateY(-2px)}

.roll-pop{position:absolute;inset:0;pointer-events:none;z-index:2}
.roll-pop .pop-p{position:absolute;top:38%;font-size:26px;animation:popfly 1.4s ease-out forwards}
@keyframes popfly{0%{opacity:0;transform:translate(0,0) scale(.4) rotate(0)}15%{opacity:1}100%{opacity:0;transform:translate(var(--dx),-160px) scale(1.1) rotate(var(--rot))}}

@media(max-width:480px){
  .roll-stage-cute{height:180px}
  .roll-emoji{font-size:44px}
  .roll-go{font-size:18px;padding:12px 28px}
  .rmode-btn{padding:7px 12px;font-size:13px}
  .roll-deco .rd{font-size:20px}
}

/* ===== 通用彩屑（抢答 / 倒计时复用） ===== */
.buzz-pop,.cd-pop{position:absolute;inset:0;pointer-events:none;z-index:5;overflow:hidden}
.buzz-pop .pop-p,.cd-pop .pop-p{position:absolute;top:40%;font-size:26px;animation:popfly 1.4s ease-out forwards}
@keyframes popfly{0%{opacity:0;transform:translate(0,0) scale(.4) rotate(0)}15%{opacity:1}100%{opacity:0;transform:translate(var(--dx),-160px) scale(1.1) rotate(var(--rot))}}

/* ===== 抢答大战 · 可爱卡通版（V5.18.0） ===== */
.buzz-h{background:linear-gradient(90deg,#FFF1F1,#FFE9F4);border-bottom:none;color:#E0386B}
.buzz-setup{position:relative;overflow:hidden}
.buzz-deco{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.buzz-deco .bd{position:absolute;font-size:24px;opacity:.45;animation:floaty 6s ease-in-out infinite}
.buzz-deco .b1{top:6px;left:5%}
.buzz-deco .b2{top:30px;right:8%;animation-delay:1.2s;font-size:20px}
.buzz-deco .b3{bottom:120px;left:8%;animation-delay:2.1s;font-size:22px}
.buzz-deco .b4{top:10px;right:24%;animation-delay:.6s;font-size:28px}
.buzz-deco .b5{bottom:90px;right:12%;animation-delay:1.8s;font-size:22px}
.buzz-hero{position:relative;z-index:1;text-align:center;font-size:clamp(22px,4vw,32px);font-weight:900;letter-spacing:1px;background:linear-gradient(90deg,#FF8FB8,#A78BFA,#23C9A6);-webkit-background-clip:text;background-clip:text;color:transparent;margin:6px 0 16px;animation:bob 2.4s ease-in-out infinite}
.buzz-picks{position:relative;z-index:1}
.buzz-pick{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:#7A5270;background:#FFF4FA;border:2px solid #FFD9EC;border-radius:18px;padding:6px 13px;cursor:pointer;transition:.18s}
.buzz-pick:hover{background:#FFE6F3;transform:translateY(-2px)}
.buzz-pick-ava{font-size:17px}
.buzz-pick input{accent-color:#FF6FA3}
.buzz-add{border:none;background:linear-gradient(135deg,#FFB36B,#FF8FB8);color:#fff;font-weight:700;font-size:14px;padding:8px 16px;border-radius:12px;cursor:pointer;box-shadow:0 6px 16px rgba(255,143,184,.35);transition:.18s}
.buzz-add:hover{transform:translateY(-2px)}
.buzz-actions{display:flex;justify-content:center;flex-wrap:wrap}
.buzz-go{background:linear-gradient(135deg,#FF7E7E,#FF6FA3,#8B6CFF);color:#fff;border:none;font-size:19px;font-weight:800;padding:13px 38px;border-radius:28px;cursor:pointer;box-shadow:0 12px 30px rgba(255,111,163,.45);transition:.2s}
.buzz-go:hover{transform:translateY(-2px) scale(1.03);box-shadow:0 16px 40px rgba(255,111,163,.6)}
.buzz-go:active{transform:scale(.97)}
.buzz-go-sm{font-size:15px;padding:9px 26px;margin-top:6px}

.buzz-round{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:800;color:#fff;background:linear-gradient(90deg,#FF8FB8,#A78BFA);padding:6px 16px;border-radius:18px;margin-bottom:10px}
.buzz-round b{font-size:17px}
.buzz-live{font-size:11px;background:#fff;color:#E0386B;padding:1px 9px;border-radius:10px;font-weight:800}
.buzz-q{min-height:46px;background:linear-gradient(135deg,#FFF6FB,#F3F0FF);border:2px solid #FFE0EE;border-radius:14px;padding:12px 14px;font-size:15px;font-weight:700;color:#5B4B6B;margin-bottom:14px;line-height:1.6}
.buzz-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.buzz-card{position:relative;border:2px solid #FFE3F1;background:linear-gradient(180deg,#FFFFFF,#FFF7FB);border-radius:18px;padding:14px;text-align:center;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}
.buzz-card.buzz-buzzed{border-color:#FFB36B;box-shadow:0 0 0 4px rgba(255,179,107,.35);transform:scale(1.05);animation:buzzglow .7s ease-in-out infinite}
@keyframes buzzglow{0%,100%{box-shadow:0 0 0 4px rgba(255,179,107,.25)}50%{box-shadow:0 0 0 7px rgba(255,179,107,.5)}}
.buzz-card.buzz-dead{opacity:.5;filter:grayscale(.7);transform:scale(.96)}
.buzz-card.buzz-heal{animation:healpulse .7s ease}
@keyframes healpulse{0%,100%{box-shadow:0 0 0 0 rgba(16,185,129,0)}40%{box-shadow:0 0 0 6px rgba(16,185,129,.5);border-color:#10B981}}
.buzz-card.buzz-hurt{animation:hurtshake .4s ease}
@keyframes hurtshake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}
.buzz-card.buzz-ko{animation:ko .5s ease}
@keyframes ko{0%{transform:scale(1)}30%{transform:scale(1.1) rotate(-4deg)}100%{transform:scale(.96) rotate(0)}}
.buzz-ava{width:54px;height:54px;margin:0 auto 8px;border-radius:50%;background:linear-gradient(135deg,#FFE3F1,#E3F0FF);display:flex;align-items:center;justify-content:center;font-size:30px;box-shadow:inset 0 0 0 3px #fff}
.buzz-name{font-weight:800;font-size:15px;color:#5B4B6B;margin-bottom:9px}
.buzz-hpbar{height:12px;background:#FFE9F3;border-radius:8px;overflow:hidden;margin-bottom:7px;box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}
.buzz-hpfill{height:100%;border-radius:8px;transition:width .45s cubic-bezier(.4,0,.2,1),background .4s ease}
.buzz-hptxt{font-size:12px;font-weight:700;color:#9A7B8C;margin-bottom:10px}
.buzz-buzz{border:none;background:linear-gradient(135deg,#FFB36B,#FF8FB8);color:#fff;font-weight:800;font-size:14px;padding:9px 0;width:100%;border-radius:14px;cursor:pointer;box-shadow:0 6px 16px rgba(255,143,184,.35);transition:.18s}
.buzz-buzz:hover{transform:translateY(-2px)}
.buzz-buzz:active{transform:scale(.96)}
.buzz-buzz-off{background:#E9DDE6;color:#B7A6B0;box-shadow:none;cursor:not-allowed}
.buzz-judge{background:linear-gradient(135deg,#FFF3E0,#FFE9F4);border:2px solid #FFD9B0;border-radius:14px;padding:12px 14px;font-size:14px;font-weight:700;color:#C2568F;margin-top:14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;animation:buzzglow2 .8s ease}
@keyframes buzzglow2{0%{box-shadow:0 0 0 0 rgba(255,179,107,.5)}100%{box-shadow:0 0 0 0 rgba(255,179,107,0)}}
.buzz-yes{border:none;background:linear-gradient(135deg,#34D399,#10B981);color:#fff;font-weight:800;font-size:14px;padding:9px 14px;border-radius:12px;cursor:pointer;box-shadow:0 6px 16px rgba(16,185,129,.35);transition:.18s}
.buzz-yes:hover{transform:translateY(-2px)}
.buzz-no{border:none;background:linear-gradient(135deg,#FB7185,#EF4444);color:#fff;font-weight:800;font-size:14px;padding:9px 14px;border-radius:12px;cursor:pointer;box-shadow:0 6px 16px rgba(239,68,68,.35);transition:.18s}
.buzz-no:hover{transform:translateY(-2px)}
.buzz-hint{font-size:13px;color:#A98FA8;margin-top:14px;text-align:center;background:#FFF7FB;border:2px dashed #FFE0EE;border-radius:12px;padding:10px}
.buzz-ctrl{position:relative;display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;align-items:center}
.buzz-chip{border:2px solid #CFE8FF;background:#F2FAFF;color:#3B82C4;font-weight:700;font-size:13px;padding:7px 14px;border-radius:14px;cursor:pointer;transition:.18s}
.buzz-chip:hover{background:#E3F2FF;transform:translateY(-2px)}
.buzz-chip-p{border-color:#FFD0E6;background:#FFF4FA;color:#C2568F}
.buzz-chip-p:hover{background:#FFE3F1}

.buzz-podium{position:relative;text-align:center;padding:6px 0;animation:fi .3s ease}
.buzz-podium-banner{font-size:22px;font-weight:900;background:linear-gradient(90deg,#FFB36B,#FF6FA3,#A78BFA);-webkit-background-clip:text;background-clip:text;color:transparent;margin-bottom:14px}
.buzz-champ{display:inline-flex;flex-direction:column;align-items:center;gap:4px;background:linear-gradient(135deg,#FFF6DC,#FFE6F4);border:3px solid #FFD9A0;border-radius:22px;padding:16px 30px;box-shadow:0 14px 34px rgba(255,179,107,.35);animation:bob 2.4s ease-in-out infinite}
.buzz-champ{font-size:46px}
.buzz-champ-name{font-size:17px;font-weight:800;color:#C2568F}
.buzz-champ-score{font-size:14px;font-weight:700;color:#FF8A3D}
.buzz-ranks{display:flex;flex-direction:column;gap:8px;margin:16px 0 4px;max-width:340px;margin-left:auto;margin-right:auto}
.buzz-rank{display:flex;align-items:center;gap:10px;background:#FFF7FB;border:2px solid #FFE3F1;border-radius:14px;padding:8px 14px;font-size:14px;color:#5B4B6B}
.buzz-rank-win{border-color:#FFD9A0;background:linear-gradient(135deg,#FFF6DC,#FFE6F4);font-weight:800}
.buzz-rank-m{font-size:18px;width:26px;text-align:center}
.buzz-rank-ava{font-size:22px}
.buzz-rank-n{flex:1;text-align:left;font-weight:700}
.buzz-rank-s{font-weight:800;color:#FF8A3D}

/* ===== 课堂倒计时 · 可爱卡通版（V5.18.0） ===== */
.cd-bar{background:linear-gradient(90deg,#7DD3FC,#38BDF8,#A78BFA);cursor:default}
.cd-select{border:2px solid #CFE8FF;border-radius:10px;padding:5px 8px;font-size:13px;color:#3B6CA8;background:#F2FAFF;outline:none;cursor:pointer}
.cd-mini-inp,.cd-warn-inp{border:2px solid #CFE8FF;border-radius:8px;padding:3px 6px;font-size:13px;color:#3B6CA8;background:#F2FAFF;width:52px;outline:none;text-align:center}
.cd-warn-inp{width:46px}
.cd-time{font-size:44px;font-weight:900;text-align:center;background:linear-gradient(90deg,#38BDF8,#A78BFA);-webkit-background-clip:text;background-clip:text;color:transparent;letter-spacing:2px;margin:6px 0;transition:transform .2s ease;white-space:nowrap}
.cd-time.cd-boom{animation:cdboom .5s ease}
@keyframes cdboom{0%{transform:scale(1)}40%{transform:scale(1.25)}100%{transform:scale(1)}}
.cd-mood{text-align:center;font-size:15px;font-weight:800;color:#5B8BB0;margin-bottom:8px}
.cd-widget.cd-yellow .cd-time{background:linear-gradient(90deg,#F59E0B,#FBBF24);-webkit-background-clip:text;background-clip:text;color:transparent}
.cd-widget.cd-yellow .cd-mood{color:#C27A0A}
.cd-widget.cd-red .cd-time{background:linear-gradient(90deg,#EF4444,#FB7185);-webkit-background-clip:text;background-clip:text;color:transparent;animation:cdthrob .5s ease-in-out infinite}
@keyframes cdthrob{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
.cd-widget.cd-red .cd-mood{color:#D63B5A}
.cd-btn{border:2px solid #CFE8FF;background:#F2FAFF;color:#3B6CA8;font-weight:700;font-size:13px;padding:8px 14px;border-radius:14px;cursor:pointer;transition:.18s}
.cd-btn:hover{background:#E3F2FF;transform:translateY(-2px)}
.cd-btn-p{border:none;background:linear-gradient(135deg,#38BDF8,#A78BFA);color:#fff;box-shadow:0 6px 16px rgba(56,189,248,.35)}
.cd-btn-p:hover{background:linear-gradient(135deg,#38BDF8,#A78BFA);transform:translateY(-2px)}

/* ===== 课堂表现计分（V5.18.4）：选班门 / 班级条 / 计分榜 / 记分面板 ===== */
.ct-gate{max-width:520px;margin:24px auto;text-align:center;padding:36px 24px;border:none;background:linear-gradient(135deg,#EEF2FF,#F5F3FF);border-radius:18px}
.ct-gate-ic{font-size:48px;margin-bottom:10px}
.ct-gate .ct-title{font-size:20px}
.ct-classbar{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:12px;background:linear-gradient(135deg,#EEF2FF,#FAF5FF);border:1px solid #E0E7FF;margin-bottom:16px;flex-wrap:wrap}
.ct-classbar-ic{font-size:20px}
.ct-classbar b{font-size:15px;color:#4338CA}
.ct-classbar .tsm{margin:0}
/* 计分榜 */
.ct-board{border-top:3px solid #8B5CF6}
.ct-board-stat{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}
.ct-board-stat span{background:#F5F3FF;border:1px solid #EDE9FE;color:#6D28D9;padding:5px 12px;border-radius:20px;font-size:13px}
.ct-board-stat b{color:#7C3AED}
.ct-board-tb{width:100%;border-collapse:collapse;font-size:13px;margin-top:12px}
.ct-board-tb th{text-align:left;padding:7px 8px;color:var(--g500);border-bottom:2px solid var(--g200);font-weight:600}
.ct-board-tb td{padding:7px 8px;border-top:1px solid var(--g100)}
.ct-board-tb tr:nth-child(even){background:#FAFAFF}
.ct-board-recent{margin-top:14px;display:flex;flex-direction:column;gap:6px}
.ct-rec{display:flex;align-items:center;gap:8px;font-size:13px;padding:6px 8px;border-radius:8px;background:#F8FAFC;border-left:3px solid var(--g200)}
.ct-rec-dot{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:22px;border-radius:11px;color:#fff;font-weight:700;font-size:12px}
.ct-rec-name{font-weight:600;color:var(--g700)}
.ct-rec-tool{color:var(--g500)}
.ct-rec-reason{color:var(--g600);background:#fff;padding:2px 8px;border-radius:10px;border:1px solid var(--g200)}
.ct-rec-date{margin-left:auto;color:var(--g400);font-size:12px}
/* 工具头部记分按钮 */
.tl-score-btn{background:linear-gradient(135deg,#8B5CF6,#EC4899);color:#fff;border:none;border-radius:8px;padding:4px 12px;font-size:13px;font-weight:600;cursor:pointer;margin-right:8px;box-shadow:0 2px 8px rgba(139,92,246,.3)}
.tl-score-btn:hover{transform:translateY(-1px)}
/* 记分面板 */
.tool-score-panel{background:linear-gradient(135deg,#FAF5FF,#FDF2F8);border:1px solid #E9D5FF;border-radius:12px;padding:14px;margin-bottom:14px}
.tsp-h{display:flex;align-items:center;font-weight:700;color:#7C3AED;margin-bottom:10px}
.tsp-x{margin-left:auto;cursor:pointer;color:var(--g400);font-weight:400}
.tsp-x:hover{color:var(--rose)}
.tsp-row{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;color:var(--g600)}
.tsp-row>span:first-child{min-width:36px}
.tsp-row select,.tsp-row input{border:1px solid var(--g300);border-radius:8px;padding:6px 8px;font-size:13px;background:#fff}
.tsp-step{width:30px;height:30px;border:1px solid var(--g300);background:#fff;border-radius:8px;font-size:16px;cursor:pointer;color:var(--g700)}
.tsp-step:hover{background:#F3E8FF;color:#7C3AED}
.tsp-hint{color:var(--g400);font-size:12px}
.tsp-actions{text-align:right}

/* ===== 课堂工具 · AI 内容生成面板（V5.18.13） ===== */
.ai-gen{background:linear-gradient(135deg,#ECFEFF,#F0F9FF);border:1px solid #A5F3FC;border-radius:12px;padding:12px 14px;margin:12px 0}
.ai-gen-h{display:flex;align-items:center;font-weight:700;color:#0E7490;margin-bottom:10px}
.ai-set{margin-left:auto;font-size:12px;font-weight:500;color:#0891B2;cursor:pointer;text-decoration:underline}
.ai-set:hover{color:#155E75}
.ai-gen-row{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.ai-topic{flex:1;min-width:0;border:1px solid var(--g300);border-radius:8px;padding:7px 10px;font-size:13px}
.ai-cnt{font-size:13px;color:var(--g600);white-space:nowrap}
.ai-cnt input{width:54px;border:1px solid var(--g300);border-radius:8px;padding:6px 6px;font-size:13px;text-align:center}
.ai-gen-row2{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.ai-grade-label{font-size:13px;color:var(--g600);white-space:nowrap}
.ai-grade{flex:1;min-width:0;border:1px solid var(--g300);border-radius:8px;padding:7px 10px;font-size:13px;background:#fff}
.btn-ai{background:linear-gradient(135deg,#06B6D4,#3B82F6);color:#fff;border:none;font-weight:600;box-shadow:0 2px 8px rgba(6,182,212,.3)}
.btn-ai:hover{transform:translateY(-1px)}
.btn-ai:disabled{opacity:.6;cursor:not-allowed;transform:none}
.ai-gen-tip{margin-top:8px;font-size:12px;color:var(--g400);line-height:1.5}
/* AI 接口设置弹窗 */
.ai-settings-panel{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10010;width:min(440px,92vw);background:#fff;border:1px solid #A5F3FC;border-radius:16px;padding:18px;box-shadow:0 20px 60px rgba(8,145,178,.25)}
.ai-set-h{display:flex;align-items:center;font-weight:700;color:#0E7490;margin-bottom:14px;font-size:15px}
.ai-set-x{margin-left:auto;cursor:pointer;color:var(--g400);font-weight:400}
.ai-set-x:hover{color:var(--rose)}
.ai-set-row{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:13px}
.ai-set-row label{min-width:64px;color:var(--g600)}
.ai-set-row input{flex:1;min-width:0;border:1px solid var(--g300);border-radius:8px;padding:8px 10px;font-size:13px}
.ai-set-row select{flex:1;min-width:0;border:1px solid var(--g300);border-radius:8px;padding:8px 10px;font-size:13px;background:#fff;color:var(--g700)}
.ai-set-tip{font-size:12px;color:var(--g400);line-height:1.6;background:#F0F9FF;border:1px dashed #A5F3FC;border-radius:8px;padding:8px 10px;margin-bottom:14px}
.ai-set-acts{display:flex;gap:8px;justify-content:flex-end}

