* { margin:0; padding:0; box-sizing:border-box; }
:root {
  --primary:#1677ff; --primary-light:#e8f3ff; --bg:#f5f8fc; --border:#e5eaf3;
  --text:#1f2329; --text2:#646a73; --green:#00b578; --red:#fa5151; --orange:#ff8f1f;
  --radius:10px; --shadow:0 2px 12px rgba(31,56,88,.08);
}
body { font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif; background:var(--bg); color:var(--text); font-size:14px; }
a { color:var(--primary); text-decoration:none; }
button { cursor:pointer; font-family:inherit; }
input,select,textarea { font-family:inherit; font-size:14px; border:1px solid var(--border); border-radius:8px; padding:8px 12px; outline:none; background:#fff; transition:border .2s; }
input:focus,select:focus,textarea:focus { border-color:var(--primary); }
textarea { resize:vertical; }

/* ---- 布局 ---- */
.layout { display:flex; min-height:100vh; }
.sidebar { width:200px; background:linear-gradient(180deg,#f0f6ff,#f7fafd); border-right:1px solid var(--border); padding:16px 12px; position:fixed; top:0; bottom:0; display:flex; flex-direction:column; }
.logo { display:flex; align-items:center; gap:8px; padding:6px 8px 18px; }
.logo .mark { width:34px; height:34px; border-radius:9px; background:var(--primary); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:700; font-size:15px; }
.logo b { font-size:14px; }
.logo small { display:block; color:var(--text2); font-size:11px; }
.nav { flex:1; overflow-y:auto; }
.nav-item { display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:8px; color:var(--text); margin-bottom:2px; cursor:pointer; }
.nav-item:hover { background:#e8f1fd; }
.nav-item.active { background:var(--primary); color:#fff; font-weight:600; }
.nav-item .ico { width:18px; text-align:center; }
.foot { color:var(--text2); font-size:11px; padding:10px 8px 0; border-top:1px solid var(--border); }
.verline { margin-top:8px; font-size:10.5px; color:#aab3c2; letter-spacing:.3px; font-variant-numeric:tabular-nums; }
.main { flex:1; margin-left:200px; padding:20px 24px 40px; }
.topbar { display:flex; align-items:center; justify-content:space-between; margin-bottom:18px; }
.topbar h1 { font-size:20px; }
.topbar .right { display:flex; gap:10px; align-items:center; }

/* ---- 组件 ---- */
.btn { border:none; border-radius:8px; padding:8px 16px; background:var(--primary); color:#fff; font-size:13px; }
.btn:hover { opacity:.9; }
.btn.plain { background:#fff; color:var(--text); border:1px solid var(--border); }
.btn.plain:hover { border-color:var(--primary); color:var(--primary); opacity:1; }
.btn.green { background:var(--green); }
.btn.red { background:var(--red); }
.btn.warn { background:var(--orange); }
.btn.sm { padding:4px 10px; font-size:12px; border-radius:6px; }
.btn:disabled { opacity:.5; cursor:not-allowed; }
.card { background:#fff; border-radius:var(--radius); box-shadow:var(--shadow); padding:18px; margin-bottom:16px; }
.card h3 { font-size:15px; margin-bottom:12px; }
.grid { display:grid; gap:12px; }
.stats { display:grid; grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); gap:12px; }
.stat { background:#fff; border-radius:var(--radius); box-shadow:var(--shadow); padding:14px 16px; }
.stat .num { font-size:26px; font-weight:700; color:var(--primary); }
.stat .num.green { color:var(--green); } .stat .num.orange { color:var(--orange); } .stat .num.red { color:var(--red); }
.stat .lbl { color:var(--text2); font-size:12px; margin-top:2px; }
table.tb { width:100%; border-collapse:collapse; }
.tb th { text-align:left; color:var(--text2); font-weight:500; font-size:12px; padding:8px; border-bottom:1px solid var(--border); white-space:nowrap; }
.tb td { padding:9px 8px; border-bottom:1px solid #f2f4f8; font-size:13px; vertical-align:top; }
/* 可排序表头（v1.58.45 成绩页考生成绩）：点一下排序，再点切换升/降 */
.tb th.sorth { cursor:pointer; user-select:none; -webkit-user-select:none; }
.tb th.sorth:hover { color:var(--primary); }
.tb th.sorth.on { color:var(--primary); font-weight:600; }
.tb th.sorth .so { font-size:9px; margin-left:3px; }
.tb tr:hover td { background:#fafcff; }
.tag { display:inline-block; padding:2px 8px; border-radius:5px; font-size:12px; background:var(--primary-light); color:var(--primary); }
.tag.green { background:#e6f7f0; color:var(--green); }
.tag.red { background:#ffecec; color:var(--red); }
.tag.orange { background:#fff4e5; color:var(--orange); }
.tag.gray { background:#f0f1f5; color:var(--text2); }
/* 作业批改：贴纸与快捷评语 */
.stag { font-size:20px; line-height:1; padding:5px 9px; border:1.5px solid #e6e8ee; background:#fff;
  border-radius:9px; cursor:pointer; transition:.15s; filter:grayscale(.55); opacity:.72;
  display:inline-flex; align-items:center; justify-content:center; }
.stag svg { display:block; }
.stag:hover { filter:none; opacity:1; }
.stag.on { border-color:#ffb020; background:#fff8e8; filter:none; opacity:1;
  box-shadow:0 0 0 2px rgba(255,176,32,.18); transform:translateY(-1px); }
.stag.bad.on { border-color:#fa5151; background:#fff0f0; box-shadow:0 0 0 2px rgba(250,81,81,.16); }
.phr { font-size:12px; padding:4px 9px; border:1px solid #e6e8ee; background:#fafbfc; color:var(--text2);
  border-radius:14px; cursor:pointer; transition:.15s; }
.phr:hover { border-color:var(--primary); color:var(--primary); background:#f0f7ff; }
.hw-sticks { display:flex; gap:6px; align-items:center; flex-wrap:wrap; margin-bottom:6px; }
.hw-sticks .stag { cursor:default; pointer-events:none; padding:4px; width:28px; height:28px; }
.hw-sticks .stag svg { width:18px; height:18px; }
/* 评语里的行内贴纸：与文字同排 */
.stag.inline-stag { padding:1px; width:22px; height:22px; vertical-align:-6px; margin:0 2px;
  border:none; background:transparent; box-shadow:none; pointer-events:none; }
.stag.inline-stag svg { width:20px; height:20px; }
/* 分数未选择提示 */
select.need { border-color:#fa5151 !important; box-shadow:0 0 0 3px rgba(250,81,81,.14); animation:hwShake .35s; }
@keyframes hwShake { 0%,100%{transform:translateX(0)} 25%{transform:translateX(-3px)} 75%{transform:translateX(3px)} }
.hw-thumb { transition:.15s; }
.hw-thumb:hover { transform:scale(1.04); box-shadow:0 3px 12px rgba(0,0,0,.15); }
.filters { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-bottom:12px; }
.filters input,.filters select { padding:6px 10px; font-size:13px; }
.empty { text-align:center; color:var(--text2); padding:40px 0; }
.muted { color:var(--text2); font-size:12px; }
.form-row { margin-bottom:12px; }
.form-row label { display:block; font-size:13px; color:var(--text2); margin-bottom:5px; }
.form-row input,.form-row select,.form-row textarea { width:100%; }

/* v1.56.1：表单行里的「勾选框 / 单选框」不要跟着上面那条 width:100% 走。
   它们本该只有内容那么宽 —— 被撑成整行宽会把同一行的其它元素挤成 0 宽度
   （批改设置「逐题指定」就因此看不到题号，和 v1.53.1 下拉框那次同源）。 */
.form-row input[type=checkbox],
.form-row input[type=radio] { width:auto; flex:0 0 auto; }
.flex { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.chart { width:100%; height:300px; }
/* v1.58.21：成绩页的两个图表（分数段人数分布 / 各题型得分率）用更紧凑的高度，别占满屏 */
.reschart { height:200px; }
@media (max-width:800px){ .reschart { height:158px; } }

/* ---- 弹窗 ---- */
.mask { position:fixed; inset:0; background:rgba(15,27,45,.45); z-index:100; display:flex; align-items:flex-start; justify-content:center; padding:40px 16px; overflow-y:auto; }
.modal { background:#fff; border-radius:14px; width:720px; max-width:100%; padding:22px 24px; box-shadow:0 10px 40px rgba(0,0,0,.2); }
.modal h3 { margin-bottom:16px; font-size:16px; }
.modal .close { float:right; border:none; background:none; font-size:20px; color:var(--text2); }

/* ---- Toast ---- */
#toast-root { position:fixed; top:20px; left:50%; transform:translateX(-50%); z-index:200; }
.toast { background:#fff; box-shadow:var(--shadow); border-left:4px solid var(--green); padding:10px 18px; border-radius:8px; margin-bottom:8px; font-size:13px; }
.toast.err { border-left-color:var(--red); }

/* ---- 登录 ---- */
.login-wrap { min-height:100vh; display:flex; align-items:center; justify-content:center; background:linear-gradient(135deg,#dbeafe,#f0f9ff 60%,#e0f2f1); }
.login-card { background:#fff; border-radius:18px; box-shadow:0 20px 60px rgba(22,119,255,.15); padding:40px 44px; width:400px; }
.login-card h2 { text-align:center; margin-bottom:6px; }
.login-card .sub { text-align:center; color:var(--text2); margin-bottom:24px; font-size:13px; }
.login-card input { width:100%; margin-bottom:14px; padding:11px 14px; }
.login-card .btn { width:100%; padding:12px; font-size:15px; }

/* ---- 答题 ---- */
.exam-head { position:sticky; top:0; z-index:50; background:#fff; box-shadow:var(--shadow); padding:12px 24px; display:flex; justify-content:space-between; align-items:center; }
.timer { font-size:22px; font-weight:700; color:var(--primary); font-variant-numeric:tabular-nums; }
.timer.warn { color:var(--red); }
.q-item { background:#fff; border-radius:var(--radius); box-shadow:var(--shadow); padding:20px; margin-bottom:14px; }
.q-item .stem { font-size:15px; margin-bottom:12px; line-height:1.6;
  /* v1.45.0：保留题干里的换行 —— 阅读理解类题目「Directions / 短文 / 词库」
     原本会被压成一整块，学生读起来很费劲（英文长文尤其明显） */
  white-space: pre-wrap; word-break: break-word; }
.opt { display:block; padding:10px 14px; border:1px solid var(--border); border-radius:8px; margin-bottom:8px; cursor:pointer; transition:.15s; }
.opt:hover { border-color:var(--primary); }
.opt.sel { border-color:var(--primary); background:var(--primary-light); }
.opt.correct { border-color:var(--green); background:#e6f7f0; }
.opt.wrong { border-color:var(--red); background:#ffecec; }
.sheet { display:grid; grid-template-columns:repeat(auto-fill,minmax(36px,1fr)); gap:8px; }
.sheet .cell { height:36px; display:flex; align-items:center; justify-content:center; border:1px solid var(--border); border-radius:8px; cursor:pointer; font-size:13px; }
.sheet .cell.done { background:var(--primary); color:#fff; border-color:var(--primary); }
.sheet .cell.cur { outline:2px solid var(--orange); }
.ans-box { background:#e6f7f0; border-radius:8px; padding:10px 14px; margin-top:10px; font-size:13px; }
.ans-box.wrong { background:#ffecec; }
.drop { border:2px dashed var(--border); border-radius:12px; padding:40px; text-align:center; color:var(--text2); transition:.2s; }
.drop.over { border-color:var(--primary); background:var(--primary-light); }
.kbd { background:#f0f1f5; border-radius:4px; padding:1px 6px; font-size:12px; }

/* ---- 入口选择页 ---- */
.gate-wrap { min-height:100vh; display:flex; align-items:center; justify-content:center; padding:20px;
  background:linear-gradient(135deg,#dbeafe,#f0f9ff 50%,#e0f2f1); }
.gate-card { background:#fff; border-radius:22px; box-shadow:0 20px 60px rgba(22,119,255,.16); padding:44px 40px; width:520px; max-width:100%; text-align:center; }
.gate-logo { font-size:48px; margin-bottom:8px; }
.gate-card h1 { font-size:24px; margin-bottom:4px; }
.gate-card .sub { color:var(--text2); margin-bottom:28px; }
.gate-btns { display:grid; gap:14px; }
.gate-btn { display:flex; align-items:center; gap:14px; text-align:left; padding:18px 20px; border:2px solid var(--border); border-radius:14px; cursor:pointer; transition:.2s; }
.gate-btn:hover { border-color:var(--primary); box-shadow:var(--shadow); transform:translateY(-2px); }
.gate-btn.student .ico { background:#e6f7f0; }
.gate-btn.teacher .ico { background:var(--primary-light); }
.gate-btn .ico { width:52px; height:52px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:26px; flex-shrink:0; }
.gate-btn .t { font-size:17px; font-weight:700; white-space:nowrap; }
.gate-btn .d { font-size:12px; color:var(--text2); margin-top:2px; white-space:nowrap; }
.gate-foot { margin-top:26px; color:#aaa; font-size:12px; }

/* ---- 学生中心 ---- */
.stu-wrap { max-width:860px; margin:0 auto; padding:20px 16px 40px; }
.stu-head { background:linear-gradient(135deg,#e8f3ff,#f0f9ff); border-radius:var(--radius); box-shadow:var(--shadow); padding:20px 22px; margin-bottom:16px; display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:10px; }
.stu-head .hi { font-size:20px; font-weight:700; }
.stu-head .encourage { color:var(--primary); margin-top:8px; font-size:15px; }
/* ---- 欢迎卡（定版：姓名+徽章 / 资料一行 / 鼓励语竖线） ---- */
.hi-b-top { display:flex; align-items:center; gap:7px; }
.hi-b-name { font-size:18px; font-weight:700; }
.hi-b-badge { font-size:11px; font-weight:600; color:#fff; background:linear-gradient(135deg,#5fa2ff,#8b8cff); padding:2px 8px; border-radius:20px; }
.hi-b-meta { margin-top:6px; font-size:12.5px; color:var(--text2); }
.hi-b-meta b { color:var(--primary); }
.hi-c-line { margin-top:8px; font-size:12.5px; color:var(--primary); padding-left:10px; border-left:3px solid rgba(22,119,255,.35); line-height:1.5; }
/* ---- 运行面板 ---- */
.dash-sub { font-size:11.5px; color:#9aa5b5; margin-top:4px; line-height:1.4; }
.stat .num.blue { color:#1677ff; }
.stat .num.green { color:#00b578; }
.stat .num.red { color:#fa5151; }
.barchart { display:flex; align-items:flex-end; gap:6px; height:120px; padding:6px 2px 0; border-bottom:1px solid #eef1f6; }
.barcol { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:flex-end; height:100%; min-width:0; }
.bar { width:100%; max-width:52px; background:linear-gradient(180deg,#7aa8ff,#5b8def); border-radius:5px 5px 0 0; transition:.2s; min-height:3px; }
.bar.act { background:linear-gradient(180deg,#5fd3a8,#31b98a); }
.barcol:hover .bar { filter:brightness(1.12); }
.barlb { font-size:10px; color:#9aa5b5; margin-top:4px; white-space:nowrap; }
.rk { display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px; border-radius:50%; font-size:11.5px; font-weight:700; color:#fff; }
.rk1 { background:linear-gradient(135deg,#ffc53d,#ff9c14); }
.rk2 { background:linear-gradient(135deg,#c9d3e0,#9aa8bd); }
.rk3 { background:linear-gradient(135deg,#e8a97a,#cf8a52); }

/* ---- 课时添加：链接校验提示 ---- */
.lnk-ok { background:#e9f9f1; color:#0a8a5a; border-radius:8px; padding:9px 12px; font-size:12.5px; margin-top:6px; }
.lnk-bad { background:#fff1f0; color:#c9392b; border-radius:8px; padding:9px 12px; font-size:12.5px; margin-top:6px; line-height:1.6; }
.lnk-bad code, .lnk-ok code { background:rgba(0,0,0,.07); padding:1px 5px; border-radius:4px; font-size:12px; }

/* ---- 学生端：已完成练习折叠条 ---- */
.pdone-bar { margin-top:16px; padding:11px 14px; background:#f2f4f8; border-radius:10px; color:#6b7686;
  font-size:13px; cursor:pointer; display:flex; align-items:center; gap:7px; user-select:none; transition:.15s; }
.pdone-bar:hover { background:#e9edf4; color:var(--primary); }
.pdone-bar svg { transition:transform .2s; flex-shrink:0; }
.pdone-bar.open svg { transform:rotate(90deg); }

/* ---- 后台练习卷拖拽排序 ---- */
.tb.pset-tb tr[draggable] { cursor:default; }
.pset-handle { cursor:grab; text-align:center; user-select:none; }
.pset-handle:active { cursor:grabbing; }
.pset-handle svg { display:block; margin:0 auto; }
.tb.pset-tb tr.dragging { opacity:.45; background:#f0f6ff; }
.tb.pset-tb tr.dragging td { border-top:2px dashed var(--primary); border-bottom:2px dashed var(--primary); }

.shome-foot { text-align:center; margin-top:18px; font-size:12px; color:#b3bcc9; letter-spacing:2px; }
.exam-row { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:8px; padding:14px 0; border-bottom:1px solid #f2f4f8; }
.exam-row:last-child { border-bottom:none; }

/* ---- 响应式：手机端 ---- */
.mnav { display:none; }
.mtop, .mtabbar, .drawer, .drawer-mask { display:none; }
.tplbar { display:flex; flex-wrap:wrap; gap:8px; align-items:center; background:#f0f6ff; border:1px dashed #b8d4ff;
  border-radius:10px; padding:10px 14px; margin-bottom:14px; }

@media (max-width:800px){
  /* 关键：锁死横向溢出，避免宽表格把整页撑开 */
  html, body { max-width:100%; overflow-x:hidden; }
  .layout { display:block; }
  .page, #page { max-width:100%; overflow-x:hidden; }

  /* 侧边栏与顶部 mnav 在手机端隐藏，改用抽屉 + 底部 Tab */
  .sidebar{ display:none; }
  .mnav{ display:none; }
  .main{ margin-left:0; padding:12px 12px 104px; width:100%; max-width:100%; box-sizing:border-box; }

  /* 顶部标题栏 */
  .mtop{ display:flex; align-items:center; gap:10px; position:sticky; top:0; z-index:60;
    width:100%; box-sizing:border-box;
    background:#fff; border-bottom:1px solid var(--border);
    padding:calc(10px + env(safe-area-inset-top,0px)) 12px 10px; margin:-12px -12px 12px; }
  .mburger{ border:none; background:transparent; font-size:21px; line-height:1; color:var(--text); padding:4px 6px; flex-shrink:0; }
  .mtitle{ flex:1 1 0; min-width:0; font-size:16px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .mright{ display:flex; gap:6px; align-items:center; flex-shrink:0; }
  .mright .btn{ padding:6px 10px; font-size:12px; }

  /* 桌面顶栏在手机端默认隐藏（老师端标题已在 mtop，不必重复）
     例外：学生端页面没有 mtop —— 必须保留自己的顶栏，否则手机上没有标题、也没有「返回」按钮 */
  .topbar{ display:none; }
  .stu-wrap > .topbar{ display:flex; margin-bottom:14px; }
  .stu-wrap > .topbar h1{ font-size:17px; }
  .stu-wrap > .topbar .right .btn{ padding:6px 10px; font-size:12.5px; white-space:nowrap; }

  /* 抽屉菜单 */
  .drawer-mask{ display:block; position:fixed; inset:0; background:rgba(0,0,0,.42); z-index:200;
    opacity:0; visibility:hidden; transition:opacity .22s; }
  .drawer-mask.open{ opacity:1; visibility:visible; }
  .drawer{ display:flex; flex-direction:column; position:fixed; top:0; bottom:0; left:0; width:255px; max-width:82vw;
    background:#fff; z-index:210; transform:translateX(-102%); transition:transform .25s ease;
    box-shadow:2px 0 18px rgba(0,0,0,.14);
    padding-top:env(safe-area-inset-top,0px); padding-bottom:env(safe-area-inset-bottom,0px); }
  .drawer.open{ transform:translateX(0); }
  .drawer-head{ padding:16px 16px 12px; border-bottom:1px solid var(--border); }
  .drawer-head b{ font-size:15px; display:block; }
  .drawer-head small{ color:var(--text2); font-size:12px; }
  .drawer-nav{ flex:1; overflow-y:auto; padding:10px 10px 16px; }
  .drawer-nav .nav-item{ padding:12px; }
  .drawer-foot{ padding:10px 16px; border-top:1px solid var(--border); font-size:12px; color:var(--text2); }

  /* 底部 Tab 栏 */
  .mtabbar{ display:flex; position:fixed; left:0; right:0; bottom:0; z-index:150;
    background:#fff; border-top:1px solid var(--border); padding:4px 0 calc(10px + env(safe-area-inset-bottom,0px)); }
  .mtabbar a{ flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center;
    gap:2px; padding:5px 2px; color:var(--text2); font-size:11px; text-decoration:none; }
  .mtabbar a .ti{ font-size:18px; line-height:1; }
  .mtabbar a.active{ color:var(--primary); font-weight:600; }
  .mtabbar a.more{ color:#8a93a3; }

  /* 教师端页脚：手机端最下方的留白区 —— 放鼓励语与机构名，
     同时作为「内容」与「底部 Tab 栏 + 系统手势条/智能条」之间的缓冲，降低误触 */
  .tfoot{ margin:26px 0 6px; padding:20px 12px 10px; border-top:1px dashed #e7ebf2; text-align:center; }
  .tfoot-quote{ font-size:12.5px; line-height:1.9; color:#9aa4b2; }
  .tfoot-org{ margin-top:8px; font-size:11.5px; color:#b9c1cd; letter-spacing:1.5px; }

  /* 弹窗与表格 */
  .modal{ width:auto !important; max-width:96vw !important; margin:12px; padding:18px 15px; max-height:88vh; overflow-y:auto; }
  .mask{ padding:0; align-items:center; }
  .grid{ grid-template-columns:1fr !important; }
  /* 内联写死列数的栅格（如 repeat(4,1fr)）在手机上强制单/双列 */
  [style*="grid-template-columns:repeat"]{ grid-template-columns:repeat(2,1fr) !important; }
  [style*="grid-template-columns:repeat(6"]{ grid-template-columns:repeat(3,1fr) !important; }
  [style*="grid-template-columns:1fr 1fr 1fr 1fr"]{ grid-template-columns:repeat(2,1fr) !important; }
  [style*="minmax(220px"]{ grid-template-columns:repeat(2,1fr) !important; }
  [style*="minmax(180px"]{ grid-template-columns:repeat(2,1fr) !important; }
  [style*="minmax(130px"]{ grid-template-columns:repeat(2,1fr) !important; }
  .stats{ grid-template-columns:repeat(2,1fr); gap:10px; }
  .stat .num{ font-size:20px; }
  .card{ padding:14px; }
  .tb{ display:block; width:100%; max-width:100%; overflow-x:auto; white-space:nowrap; -webkit-overflow-scrolling:touch; }
  .tb th, .tb td{ padding:8px 6px; }
  /* 表格外层容器也要能横向滚动而不撑破页面 */
  .card{ overflow-x:auto; }
  .tplbar{ width:100%; box-sizing:border-box; }
  .filters{ gap:6px; }
  .filters input, .filters select{ flex:1 1 auto; min-width:0; }
  .filters .btn{ flex:0 0 auto; }
  .form-row label{ font-size:13px; }
  .gate-card{ padding:32px 24px; }
  .stu-head{ flex-direction:column; }
  .exam-head{ flex-direction:column; align-items:stretch; gap:6px; padding:8px 14px; }
  /* 手机端：倒计时与交卷同排，中间留出安全间距，降低滑动误触 */
  .exam-head .exam-actions{ width:100%; justify-content:space-between; flex-wrap:nowrap; }
  .exam-head .exam-gap{ display:inline-block; width:24px; flex:0 0 24px; }
  .exam-head .timer{ font-size:20px; }
  .exam-head .exam-actions .btn{ padding:8px 16px; flex:0 0 auto; }
  .exam-head > div:first-child{ font-size:13px; line-height:1.6; }
  .pet{ font-size:38px; }
  /* 手机端卡片内按钮组换行更友好 */
  .flex{ flex-wrap:wrap; }
}

/* 超小屏进一步压缩 */
@media (max-width:380px){
  .stats{ grid-template-columns:1fr; }
  .mtabbar a .tt{ font-size:10px; }
}



/* ---- 小宠物 ---- */
/* ---- v1.58.27：消消乐「本组完成」的随机鼓励语（带入场动画）---- */
.mm-done{ min-height:190px; margin:18px 0 6px; text-align:center;
  display:flex; flex-direction:column; align-items:center; justify-content:center; }
@media (max-width:800px){ .mm-done{ min-height:156px; } }
.mm-done-btn{ margin-top:16px; }
.mm-praise{ position:relative; z-index:2; margin:0 auto; padding:16px 14px; border-radius:14px;
  background:linear-gradient(135deg,#fff8e6,#ffe9cf); border:1px solid #ffe0a8;
  display:flex; align-items:center; justify-content:center; gap:10px; }
/* 烟花层：铺满整个弹窗内容区，纯装饰不挡点击 */
.mm-fw{ position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:1; border-radius:6px; }
.mm-fw i{ position:absolute; width:8px; height:8px; border-radius:50%; background:var(--c);
  box-shadow:0 0 12px var(--c), 0 0 4px #fff inset; opacity:0;
  transform:translate(-50%,-50%); animation: fwBurst 1.75s var(--d) ease-out infinite; }
@keyframes fwBurst{
  0%{ transform:translate(-50%,-50%) scale(.25); opacity:0 }
  8%{ opacity:1 }
  55%{ opacity:.92 }
  100%{ transform:translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) scale(.35); opacity:0 }
}
.mm-praise-emo{ font-size:27px; line-height:1; display:inline-block;
  animation: mmPop .62s cubic-bezier(.2,1.6,.4,1) both, mmSwing 1.7s .62s ease-in-out infinite; }
.mm-praise-txt{ font-size:15.5px; font-weight:800; color:#d46b08; letter-spacing:.4px;
  animation: mmRise .5s .12s ease-out both; }
@keyframes mmPop{ 0%{transform:scale(.2) rotate(-22deg);opacity:0}
  60%{transform:scale(1.28) rotate(9deg);opacity:1} 100%{transform:scale(1) rotate(0)} }
@keyframes mmSwing{ 0%,100%{transform:rotate(-9deg) scale(1)} 50%{transform:rotate(9deg) scale(1.09)} }
@keyframes mmRise{ from{transform:translateY(12px);opacity:0} to{transform:translateY(0);opacity:1} }
@media (max-width:800px){ .mm-praise-txt{ font-size:14.5px } .mm-praise-emo{ font-size:24px } }

.pet { position:absolute; left:0; right:0; bottom:64px; text-align:center; cursor:pointer; user-select:none; z-index:5; animation: petwalk 24s ease-in-out infinite alternate; }
.pet span { display:inline-block; font-size:46px; filter:drop-shadow(0 3px 5px rgba(0,0,0,.2)); animation: petidle 1.6s ease-in-out infinite; }@keyframes petidle { 0%{transform:translateY(0) rotate(0)} 25%{transform:translateY(-4px) rotate(-6deg)} 50%{transform:translateY(0) rotate(0)} 75%{transform:translateY(-4px) rotate(6deg)} 100%{transform:translateY(0) rotate(0)} }
.pet.play span { animation: petjump .82s ease; }
@keyframes petwalk { 0%{bottom:64px} 100%{bottom:74%} }
@keyframes petjump { 0%{transform:translateY(0) rotate(0) scale(1)} 28%{transform:translateY(-44px) rotate(-14deg) scale(1.22)} 55%{transform:translateY(0) rotate(0) scale(.94,1.08)} 78%{transform:translateY(-19px) rotate(10deg) scale(1.1)} 100%{transform:translateY(0) rotate(0) scale(1)} }
.pettip { position:absolute; bottom:100%; left:50%; transform:translateX(-50%); background:#333; color:#fff; padding:7px 12px; border-radius:10px; font-size:12px; line-height:1.6; white-space:normal; width:max-content; max-width:230px; text-align:center; margin-bottom:10px; display:none; z-index:50; box-shadow:0 4px 14px rgba(0,0,0,.25); }
.pettip::after { content:''; position:absolute; top:100%; left:50%; transform:translateX(-50%); border:5px solid transparent; border-top-color:#333; }
/* ---- 列头筛选 ---- */
.colfilter { color:#1677ff; cursor:pointer; font-size:15px; padding:1px 5px; border-radius:5px; background:#e8f1ff; vertical-align:middle; }
.colfilter:hover { background:#1677ff; color:#fff; }
.citem { padding:8px 14px; cursor:pointer; }
.citem:hover { background:#f5f7fa; }
.citem.on { color:#1677ff; font-weight:600; background:#f0f6ff; }
/* ---- 学生端宠物：色块内左右巡游 ---- */
.stu-head { position:relative; }
.pet.spet { left:auto; right:16px; bottom:8px; animation: petwalkx 16s ease-in-out infinite alternate; }
@keyframes petwalkx { 0%{right:3%} 100%{right:82%} }
.pet.spet span { font-size:38px; }
.pet.spet .pettip { bottom:calc(100% + 6px); left:50%; }
.pet.spet .pettip { bottom:calc(100% + 6px); }
/* ---- 侧边栏折叠二级菜单 ---- */
.nav-parent { position:relative; }
.nav-parent .arrow { position:absolute; right:12px; top:50%; transform:translateY(-50%); font-size:11px; color:var(--text2); }
.nav-sub { margin-left:12px; border-left:2px solid #e6edf5; padding-left:2px; }
.nav-item.sub { padding:8px 12px; font-size:13px; }
.nav-item.sub .ico { font-size:14px; }
/* ---- 消消乐 ---- */
.mm-cell { padding:11px 14px; border:1px solid var(--border); border-radius:8px; margin-bottom:8px; cursor:pointer; background:#fff; transition:.15s; text-align:center; font-size:14px; }
.mm-cell:hover { border-color:var(--primary); background:#f0f6ff; }
.mm-cell.sel { border-color:var(--primary); background:#e6f0ff; box-shadow:0 0 0 2px rgba(22,119,255,.15); }
.mm-cell.gone { visibility:hidden; border:1px dashed #eee; background:transparent; }
/* ---- 翻牌记忆 ---- */
.mm-card { aspect-ratio:1; display:flex; align-items:center; justify-content:center; border:1px solid var(--border); border-radius:8px; background:#eef1f6; cursor:pointer; font-size:13px; text-align:center; padding:6px; transition:.2s; word-break:break-all; }
.mm-card.up { background:#fff; border-color:var(--primary); }
.mm-card.gone { visibility:hidden; }

/* ---- 学生端首页 7 宫格入口（淡色渐变卡） ---- */
.shome-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-top:12px; }
.scard { border-radius:14px; padding:14px 12px; color:#fff; text-decoration:none; display:block; transition:.15s; }
.scard { position:relative; }
/* 学生首页红点角标（有新批改时显示） */
.scard-badge { position:absolute; top:-7px; right:-7px; min-width:20px; height:20px; line-height:20px; padding:0 6px; box-sizing:border-box; background:#fa5151; color:#fff; font-size:11.5px; font-weight:700; text-align:center; border-radius:10px; box-shadow:0 2px 8px rgba(250,81,81,.45); border:2px solid #fff; animation:badgePop .35s ease; }
@keyframes badgePop { 0%{transform:scale(0)} 60%{transform:scale(1.25)} 100%{transform:scale(1)} }
.scard:hover { transform:translateY(-2px); box-shadow:0 6px 16px rgba(0,0,0,.12); }
.scard .ico { font-size:24px; line-height:1; }
.scard .nm { font-size:13.5px; font-weight:700; margin-top:6px; }
.scard .ds { font-size:10.5px; opacity:.92; margin-top:2px; }
.scard.wide { grid-column:1/-1; display:flex; align-items:center; gap:12px; padding:14px 16px; }
.scard.wide .ico { font-size:26px; }
.shome-logout { text-align:center; color:#98a2b3; font-size:12.5px; padding:10px; background:#eef1f6; border-radius:10px; margin-top:12px; cursor:pointer; }
.sver { text-align:center; margin-top:10px; font-size:11px; color:#b3bcc9; letter-spacing:.3px; font-variant-numeric:tabular-nums; }
.scard.c1 { background:linear-gradient(135deg,#7aa8ff,#9288ff); }
.scard.c2 { background:linear-gradient(135deg,#ff9a7c,#ff7ba3); }
.scard.c3 { background:linear-gradient(135deg,#4fc9a2,#45c5b2); }
.scard.c4 { background:linear-gradient(135deg,#ffb066,#ff8f66); }
.scard.c5 { background:linear-gradient(135deg,#a897ff,#c07dff); }
.scard.c6 { background:linear-gradient(135deg,#6b9dff,#5fc4ff); }
.scard.c7 { background:linear-gradient(135deg,#ff8a9c,#ffb066); }

/* ============ 错题本「消灭错题」游戏 ============ */
.stats.stats4{ grid-template-columns:repeat(4,1fr); }
.stat.stat-game{ cursor:pointer; background:linear-gradient(135deg,#fff7e6,#ffe9c7);
  border:1.5px solid #ffd591; position:relative; overflow:hidden; transition:transform .15s, box-shadow .15s; }
.stat.stat-game:hover{ transform:translateY(-2px); box-shadow:0 6px 16px rgba(255,152,0,.25); }
.stat.stat-game .num{ font-size:24px; }
.stat.stat-game .lbl{ color:#d46b08; font-weight:700; }
.stat.stat-game .game-sub{ font-size:11px; color:#ad6800; margin-top:3px; }
.stat.stat-game::after{ content:''; position:absolute; right:-14px; top:-14px; width:52px; height:52px;
  background:radial-gradient(circle,rgba(255,193,7,.45),transparent 70%); border-radius:50%; }

/* 游戏舞台 */
.wg-wrap{ padding:4px 2px; }
.wg-hud{ display:flex; align-items:center; justify-content:space-between; font-size:13px;
  font-weight:700; color:var(--text2); margin-bottom:8px; }
.wg-hud-l,.wg-hud-r{ min-width:76px; }
.wg-hud-r{ text-align:right; color:var(--primary); }
.wg-combo{ display:inline-block; padding:2px 10px; border-radius:20px; background:#f2f4f8; color:#8a94a6;
  transition:all .2s; }
.wg-combo.hot{ background:linear-gradient(90deg,#ff7a45,#ffc53d); color:#fff;
  box-shadow:0 0 12px rgba(255,122,69,.55); animation:wgComboPulse .5s ease; }
@keyframes wgComboPulse{ 0%{transform:scale(1)} 45%{transform:scale(1.18)} 100%{transform:scale(1)} }

.wg-timerbar{ height:7px; background:#eef1f6; border-radius:6px; overflow:hidden; margin-bottom:14px; }
.wg-timerbar > i{ display:block; height:100%; width:100%; border-radius:6px;
  background:linear-gradient(90deg,#36cfc9,#00b578); transition:width .1s linear, background .3s; }
.wg-timerbar > i.warn{ background:linear-gradient(90deg,#ffc53d,#ff9800); }
.wg-timerbar > i.danger{ background:linear-gradient(90deg,#ff7875,#f5222d); }

.wg-tag{ font-size:12px; color:var(--text2); margin-bottom:8px; }
.wg-stem{ font-size:16px; line-height:1.75; margin-bottom:14px; word-break:break-word; }
.wg-opts{ display:flex; flex-direction:column; gap:9px; }
.wg-opt{ display:flex; align-items:flex-start; gap:10px; width:100%; text-align:left; cursor:pointer;
  padding:12px 14px; border:1.5px solid var(--border); border-radius:10px; background:#fff;
  font-size:14.5px; line-height:1.6; font-family:inherit; color:var(--text);
  transition:border-color .15s, background .15s, transform .1s; }
.wg-opt:hover{ border-color:var(--primary); background:#f6faff; }
.wg-opt:active{ transform:scale(.985); }
.wg-opt b{ flex:0 0 22px; height:22px; border-radius:50%; background:#f2f4f8; color:var(--text2);
  font-size:12.5px; display:flex; align-items:center; justify-content:center; margin-top:1px; }
.wg-opt span{ flex:1; }
.wg-opt.right{ border-color:#00b578; background:#e9faf3; }
.wg-opt.right b{ background:#00b578; color:#fff; }
.wg-opt.wrong{ border-color:#f5222d; background:#fff1f0; }
.wg-opt.wrong b{ background:#f5222d; color:#fff; }
.wg-tip{ font-size:12px; text-align:center; margin-top:14px; }

/* 卡片碎裂 / 失败抖动 */
.wg-wrap .wg-body-anim, #wg-body{ transition:transform .35s cubic-bezier(.4,0,.2,1), opacity .35s; }
#wg-body.wg-kill{ animation:wgKill .6s forwards; }
@keyframes wgKill{
  0%{ transform:scale(1); opacity:1; }
  35%{ transform:scale(1.04) rotate(-1deg); opacity:1; }
  100%{ transform:scale(.72) rotate(6deg); opacity:0; filter:blur(3px); }
}
#wg-body.wg-fail{ animation:wgFail .7s; }
@keyframes wgFail{
  0%,100%{ transform:translateX(0); }
  15%,45%,75%{ transform:translateX(-9px); background:#fff5f5; border-radius:8px; }
  30%,60%,90%{ transform:translateX(9px); background:#fff5f5; border-radius:8px; }
}

/* 飘字 */
.wg-wrap{ position:relative; }
.wg-float{ position:absolute; left:50%; top:32%; transform:translateX(-50%); pointer-events:none;
  font-size:22px; font-weight:800; animation:wgFloat 1s ease-out forwards; text-shadow:0 2px 6px rgba(0,0,0,.12); }
@keyframes wgFloat{ 0%{ opacity:1; transform:translate(-50%,0) scale(.8); }
  30%{ transform:translate(-50%,-22px) scale(1.15); }
  100%{ opacity:0; transform:translate(-50%,-58px) scale(1); } }
.wg-float.good{ color:#00b578; }
.wg-float.combo{ color:#ff7a45; top:42%; font-size:26px; }

/* 填空题自评 */
.wg-answer-box{ padding:12px 14px; background:#f0f9ff; border-radius:10px; font-size:14px; line-height:1.7; }
.wg-answer-box b.ok{ color:#00b578; }
.wg-self{ display:flex; gap:10px; justify-content:center; margin-top:14px; flex-wrap:wrap; }

/* 结算 */
.wg-finish{ text-align:center; padding:8px 4px; }
.wg-fireworks{ font-size:54px; animation:wgFire .9s ease-out; }
@keyframes wgFire{ 0%{ transform:scale(.5); opacity:0; } 55%{ transform:scale(1.25); opacity:1; } 100%{ transform:scale(1); } }
.wg-finish h3{ margin:10px 0 14px; color:var(--primary); }
.wg-sum{ display:flex; justify-content:center; gap:8px; }
.wg-sum > div{ flex:1; background:#f7f9fc; border-radius:10px; padding:12px 6px; }
.wg-sum b{ display:block; font-size:24px; color:#00b578; }
.wg-sum span{ font-size:12px; color:var(--text2); }

@media (max-width:640px){
  .stats.stats4{ grid-template-columns:repeat(2,1fr) !important; gap:10px; }
  .wg-stem{ font-size:15.5px; }
  .wg-opt{ padding:11px 12px; font-size:14px; }
  .wg-opt b{ flex:0 0 20px; height:20px; font-size:12px; }
  .wg-float{ font-size:20px; }
  .wg-sum b{ font-size:20px; }
}
.stat.stat-game .game-ico{ display:flex; align-items:center; height:30px; }

/* ---- 学生端课程详情页：折叠章节 ---- */
.chbox{ border-bottom:1px solid #f0f2f6; }
.chbox:last-child{ border-bottom:0; }
.chhead{ display:flex; align-items:center; gap:10px; padding:13px 14px; cursor:pointer;
         user-select:none; transition:background .15s; }
.chhead:hover{ background:#f7f9fc; }
.chhead .charrow{ flex:0 0 auto; font-size:11px; color:#9aa3b2; transition:transform .2s; display:inline-block; }
.chbox.open .chhead .charrow{ transform:rotate(90deg); }
.chbox.open .chhead{ background:#f7f9fc; }
.chbody{ border-top:1px solid #f5f6fa; background:#fcfdff; }
.lsrow{ display:flex; align-items:center; gap:10px; padding:11px 14px 11px 30px; cursor:pointer;
        border-bottom:1px solid #f5f6fa; transition:background .15s; }
.lsrow:last-child{ border-bottom:0; }
.lsrow:hover{ background:#eef4ff; }
.lsrow .lsico{ flex:0 0 auto; font-size:13px; }
@media (max-width:640px){
  .lsrow{ padding:11px 12px 11px 18px; }
  .chhead{ padding:12px; }
}

/* ---- 试卷操作「更多」下拉菜单 ---- */
.more-wrap{ position:relative; display:inline-block; }
.more-menu{ display:none; position:absolute; right:0; top:calc(100% + 4px); z-index:60;
  background:#fff; border:1px solid #e5e9f0; border-radius:9px; min-width:170px;
  box-shadow:0 8px 26px rgba(20,30,60,.14); padding:5px; }
.more-menu.open{ display:block; }
.more-menu a{ display:flex; align-items:center; gap:7px; padding:8px 11px; font-size:13px;
  color:var(--text1,#1f2430); text-decoration:none; border-radius:6px; white-space:nowrap; }
.more-menu a:hover{ background:#f2f6fd; }
.more-menu a.danger{ color:#d93b3b; }
.more-menu a.danger:hover{ background:#fdeeee; }

/* ---- 试卷编辑弹窗 ---- */
.ee-item{ border:1px solid #e8ecf3; border-radius:10px; padding:11px 12px; margin-bottom:11px;
  background:#fcfdff; }
.ee-head{ display:flex; align-items:center; gap:8px; margin-bottom:8px; }
.ee-no{ flex:0 0 auto; width:23px; height:23px; line-height:23px; text-align:center;
  border-radius:50%; background:#1677ff; color:#fff; font-size:12px; font-weight:700; }
.ee-type{ padding:4px 7px; border:1px solid #dfe4ec; border-radius:6px; font-size:12.5px; background:#fff; }
.ee-score{ width:62px; padding:4px 7px; border:1px solid #dfe4ec; border-radius:6px; font-size:12.5px; }
.ee-stem{ width:100%; min-height:52px; padding:8px 10px; border:1px solid #dfe4ec; border-radius:7px;
  font-size:13px; font-family:inherit; resize:vertical; box-sizing:border-box; }
.ee-opts{ margin:8px 0 4px 0; display:flex; flex-direction:column; gap:6px; }
.ee-opt{ display:flex; align-items:center; gap:8px; }
.ee-opt b{ flex:0 0 18px; text-align:center; color:#5a6478; font-size:13px; }
.ee-opt input{ flex:1; padding:6px 9px; border:1px solid #dfe4ec; border-radius:6px; font-size:13px; }
.ee-row{ display:flex; align-items:center; gap:8px; margin-top:7px; }
.ee-row label{ flex:0 0 34px; font-size:12.5px; color:#5a6478; }
.ee-row input{ flex:1; padding:6px 9px; border:1px solid #dfe4ec; border-radius:6px; font-size:13px; }
.ee-ans{ background:#f4faf6 !important; border-color:#bfe3cd !important; }
@media (max-width:640px){
  .ee-head{ flex-wrap:wrap; }
  .ee-score{ width:54px; }
}

/* ---- 课时转码状态标签 ---- */
.tc-badge{ display:inline-flex; align-items:center; gap:3px; font-size:12px;
  padding:1px 7px; border-radius:20px; background:#f4f6fa; white-space:nowrap; }
.tc-badge .tc-txt{ font-size:11.5px; }

/* ================= 宠物养成（新版） ================= */
.pet-slot { padding:12px 10px 4px; border-top:1px solid var(--border); margin-top:auto; }
.pet-slot .pet { position:relative; left:auto; right:auto; bottom:auto; animation:none;
  background:linear-gradient(160deg,#fff7ec,#fff1f5); border:1px solid #f5dfc9; border-radius:16px;
  padding:12px 10px 10px; text-align:center; cursor:pointer; user-select:none; }
.pet-slot .pet-body { position:relative; display:inline-block; }
.pet-slot .pet-face { display:inline-block; font-size:44px; line-height:1;
  filter:drop-shadow(0 4px 6px rgba(0,0,0,.16)); animation:petIdleBreathe 2.2s ease-in-out infinite; transform-origin:50% 90%; }
@keyframes petIdleBreathe {
  0%,100% { transform:translateY(0) scale(1); }
  50%     { transform:translateY(-3px) scale(1.035); }
}
/* 尾巴：默认轻微摆动 */
.pet-slot .pet-tail { position:absolute; right:-4px; bottom:4px; width:12px; height:22px;
  border-radius:7px; background:#f7b267; transform-origin:top center;
  animation:petTail 1.1s ease-in-out infinite; opacity:.95; }
@keyframes petTail {
  0%,100% { transform:rotate(-14deg); }
  50%     { transform:rotate(16deg); }
}
/* 动作① 翘尾巴：尾巴幅度变大 + 身体左右摇 */
.pet.wag .pet-tail { animation:petTailBig .45s ease-in-out 6; background:#ff9f43; }
@keyframes petTailBig {
  0%,100% { transform:rotate(-26deg) scaleY(1); }
  50%     { transform:rotate(32deg) scaleY(1.12); }
}
.pet.wag .pet-face { animation:petHappyShake .45s ease-in-out 6; }
@keyframes petHappyShake {
  0%,100% { transform:rotate(0) scale(1); }
  25%     { transform:rotate(-9deg) scale(1.06); }
  75%     { transform:rotate(9deg) scale(1.06); }
}
/* 动作② 打哈欠：嘴部放大 + 上下拉伸 */
.pet.yawn .pet-face { animation:petYawn 1.1s ease-in-out 3; }
@keyframes petYawn {
  0%,100% { transform:scale(1) translateY(0); }
  45%     { transform:scale(1.18,1.22) translateY(2px); }
  70%     { transform:scale(1.1,1.14) translateY(1px); }
}
/* 动作③ 喝咖啡：轻微上仰 + 左右小晃（模拟举杯） */
.pet.sip .pet-face { animation:petSip 1.2s ease-in-out 3; }
@keyframes petSip {
  0%,100% { transform:rotate(0) translateY(0); }
  30%     { transform:rotate(-8deg) translateY(-3px); }
  60%     { transform:rotate(-4deg) translateY(-1px); }
}
/* 点击跳动 */
.pet.play .pet-face { animation:petJump .6s ease; }
@keyframes petJump {
  0%   { transform:translateY(0) rotate(0) scale(1); }
  30%  { transform:translateY(-16px) rotate(-12deg) scale(1.15); }
  60%  { transform:translateY(0) rotate(0) scale(1); }
  80%  { transform:translateY(-7px) rotate(8deg) scale(1.08); }
  100% { transform:translateY(0) rotate(0) scale(1); }
}
/* 动作气泡（🎵 / 😪 / ☕） */
.pet-slot .pet-act { position:absolute; top:-6px; right:-14px; font-size:17px; opacity:0;
  transition:opacity .3s, transform .3s; transform:translateY(6px) scale(.8); pointer-events:none; }
.pet-slot .pet-act.show { opacity:1; transform:translateY(-6px) scale(1); }
/* 台词气泡 */
.pet-slot .pet-bubble { position:absolute; left:50%; bottom:calc(100% + 8px); transform:translateX(-50%) translateY(6px);
  background:#2f3542; color:#fff; font-size:12px; line-height:1.55; padding:8px 12px; border-radius:12px;
  width:max-content; max-width:210px; text-align:center; opacity:0; pointer-events:none;
  transition:opacity .28s, transform .28s; z-index:20; box-shadow:0 6px 18px rgba(0,0,0,.22); }
.pet-slot .pet-bubble.show { opacity:1; transform:translateX(-50%) translateY(0); }
.pet-slot .pet-bubble b { color:#ffd479; }
.pet-slot .pet-bubble::after { content:''; position:absolute; top:100%; left:50%; transform:translateX(-50%);
  border:6px solid transparent; border-top-color:#2f3542; }
/* 名称 / 状态条 */
.pet-slot .pet-name { font-size:12px; color:#8a6a4f; margin-top:6px; font-weight:600; }
.pet-slot .pet-stat { display:flex; justify-content:space-between; font-size:10.5px; color:#9b8571; margin:6px 2px 3px; }
.pet-slot .pet-stat b { color:#6b5540; font-weight:600; }
.pet-slot .pet-bar { height:6px; background:#efe3d6; border-radius:4px; overflow:hidden; margin:0 2px; }
.pet-slot .pet-bar i { display:block; height:100%; border-radius:4px; transition:width .5s ease; }
.pet-slot .pet-hint { font-size:10px; color:#c0ab97; margin-top:7px; }
/* 养成面板 */
.pet-panel-top { display:flex; gap:16px; align-items:center; background:#fffaf3; border:1px solid #f5e6d3;
  border-radius:14px; padding:14px; }
.ppet-big { font-size:52px; line-height:1; filter:drop-shadow(0 4px 8px rgba(0,0,0,.14)); }
.ppet-info { font-size:13px; color:#5c4a38; line-height:1.9; }
.skin-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
.skin-cell { border:1px solid #eee; border-radius:12px; padding:10px 6px; text-align:center; background:#fafbfc; }
.skin-cell.on { border-color:#ffcf8f; background:#fffaf2; cursor:pointer; transition:.18s; }
.skin-cell.on:hover { transform:translateY(-2px); box-shadow:0 6px 16px rgba(255,159,67,.22); }
.skin-cell.off { opacity:.62; }
.sk-e { font-size:30px; line-height:1.2; }
.sk-n { font-size:12.5px; font-weight:600; color:#3d4a5c; margin-top:2px; }
.sk-t { font-size:10.5px; color:#98a2b3; margin-top:2px; }
.food-log { max-height:190px; overflow-y:auto; border:1px solid #f0f2f5; border-radius:10px; padding:6px 10px; }
.food-row { display:flex; align-items:center; gap:8px; padding:6px 0; border-bottom:1px solid #f6f8fa; font-size:12.5px; }
.food-row:last-child { border-bottom:none; }
.food-row .fe { font-size:17px; }
/* 覆盖旧的 .pet span 通配动画，避免新结构被干扰 */
.pet-slot .pet span { animation:none; filter:none; font-size:inherit; display:inline; }
.pet-slot .pet .pet-face { display:inline-block; font-size:44px; filter:drop-shadow(0 4px 6px rgba(0,0,0,.16)); }
.pet-slot .pet .pet-name { display:block; }
.pet-slot .pet .pet-stat span { display:inline; }
/* 手机端侧栏宠物缩小 */
@media (max-width:820px){
  .pet-slot { padding:8px 6px 2px; }
  .pet-slot .pet-face { font-size:34px; }
  .pet-slot .pet-hint { display:block; font-size:10.5px; color:#b9a48f; }
  .skin-grid { grid-template-columns:repeat(3,1fr); }
}
/* 喂食提示条 */
.petfeed { position:fixed; right:18px; bottom:18px; z-index:9999; display:flex; gap:12px; align-items:flex-start;
  background:#fff; border:1px solid #ffe0b8; border-radius:16px; padding:12px 16px 12px 12px;
  box-shadow:0 10px 30px rgba(0,0,0,.16); max-width:320px;
  opacity:0; transform:translateY(20px) scale(.96); pointer-events:none;
  transition:opacity .3s, transform .3s; }
.petfeed.show { opacity:1; transform:translateY(0) scale(1); }
.petfeed .pf-e { font-size:34px; line-height:1; animation:petFeedPop .6s ease; }
@keyframes petFeedPop { 0%{transform:scale(.4) rotate(-18deg); opacity:0} 55%{transform:scale(1.22) rotate(6deg); opacity:1} 100%{transform:scale(1) rotate(0)} }
.petfeed .pf-t { font-size:13.5px; font-weight:700; color:#3d4a5c; }
.petfeed .pf-s { font-size:12px; color:#7a8798; margin-top:2px; line-height:1.5; }
.petfeed .pf-b { font-size:11px; color:#ff9f43; margin-top:5px; font-weight:600; }
@media (max-width:820px){ .petfeed { right:10px; left:10px; bottom:10px; max-width:none; } }
/* 学生端宠物区：横向卡片，独立一行 */
.stu-wrap .pet-slot { padding:0; border-top:none; margin:10px 0 0; }
.stu-wrap .pet-slot .pet { display:flex; align-items:center; gap:14px; text-align:left;
  padding:12px 16px; border-radius:16px; max-width:100%; overflow:hidden; }
.stu-wrap .pet-slot .pet-body { flex:0 0 auto; position:relative; display:block; width:56px; text-align:center; }
.stu-wrap .pet-slot .pet-name,
.stu-wrap .pet-slot .pet-stat,
.stu-wrap .pet-slot .pet-bar,
.stu-wrap .pet-slot .pet-hint { position:relative; }
.stu-wrap .pet-slot .pet-info { flex:1 1 auto; min-width:0; }
.stu-wrap .pet-slot .pet-name { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.stu-wrap .pet-slot .pet-bubble { left:0; transform:translateY(6px); bottom:calc(100% + 6px); }
.stu-wrap .pet-slot .pet-bubble.show { transform:translateY(0); }
.stu-wrap .pet-slot .pet-bubble::after { left:34px; }
@media (max-width:820px){
  .stu-wrap .pet-slot .pet { flex-direction:row; gap:12px; padding:10px 12px; }
  .stu-wrap .pet-slot .pet-body { width:44px; }
  .stu-wrap .pet-slot .pet-face { font-size:36px; }
}
/* 老师端侧栏：竖向布局（信息块居中） */
.sidebar .pet-slot .pet-info { text-align:center; }
.sidebar .pet-slot .pet-stat { margin:6px 4px 3px; }
.sidebar .pet-slot .pet-bar { margin:0 4px; }
/* 学生端横向：给信息块左侧留出气泡空间 */
.stu-wrap .pet-slot .pet-info { text-align:left; }

/* 学生端横向宠物卡：气泡与动作图标绝对定位，不占 flex 空间 */
.stu-wrap .pet-slot .pet > .pet-bubble,
.stu-wrap .pet-slot .pet > .pet-act { position:absolute; }
.stu-wrap .pet-slot .pet > .pet-act { left:auto; right:6px; top:4px; }
.stu-wrap .pet-slot .pet { position:relative; }

/* 学生端横向宠物卡：信息区紧凑化（进度条不过长） */
.stu-wrap .pet-slot .pet-info { max-width:420px; }
.stu-wrap .pet-slot .pet-name { margin-top:0; font-size:13px; }
.stu-wrap .pet-slot .pet-stat { font-size:11.5px; margin:3px 2px 2px; }
.stu-wrap .pet-slot .pet-bar { height:6px; }
.stu-wrap .pet-slot .pet-name-row { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.stu-wrap .pet-slot .pet-name-row .pn-txt { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.stu-wrap .pet-slot .pet-name-row .pn-age { flex:0 0 auto; color:#ff9800; font-weight:700; font-size:12.5px; }
.stu-wrap .pet-slot .pet-hint { margin-top:6px; }
@media (max-width:820px){
  .stu-wrap .pet-slot .pet-info { max-width:none; }
}

/* ================= 学生端课程目录（清晰进度） ================= */
/* 统一进度条 */
.crs-bar { height:7px; background:#eef1f6; border-radius:4px; overflow:hidden; margin:9px 0 0; }
.crs-bar > i { display:block; height:100%; border-radius:4px;
  background:linear-gradient(90deg,#4f9cff,#1677ff); transition:width .35s ease; }

/* 顶部「继续学习」条 */
.crs-resume { display:flex; align-items:center; gap:16px; padding:15px 17px; flex-wrap:wrap;
  border-left:4px solid #1677ff; background:linear-gradient(120deg,#f4f9ff,#ffffff); }
.crs-resume .cr-left { flex:1 1 260px; min-width:0; }
.crs-resume .cr-tag { display:inline-block; font-size:11px; font-weight:700; color:#1677ff;
  background:#e8f2ff; border-radius:20px; padding:2px 10px; letter-spacing:.5px; }
.crs-resume .cr-title { font-size:16px; font-weight:700; margin:7px 0 3px; }
.crs-resume .cr-next { font-size:12.5px; color:#7a8798; margin-bottom:8px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.crs-resume .cr-meta { font-size:11.5px; color:#98a3b3; margin-top:6px; }
.crs-resume .cr-right { display:flex; align-items:center; gap:8px; flex:0 0 auto; }

/* 课程卡 */
.crs-card { padding:14px; cursor:pointer; transition:transform .16s, box-shadow .16s; }
.crs-card:hover { transform:translateY(-2px); box-shadow:0 8px 22px rgba(22,119,255,.12); }
.crs-head { display:flex; align-items:center; justify-content:space-between; }
.crs-ico { font-size:26px; }
.crs-name { font-weight:700; margin:7px 0 5px; font-size:15px; }
.crs-meta { font-size:12px; margin-top:7px; }
.crs-nx { font-size:12px; color:#1677ff; margin-top:7px; padding-top:7px;
  border-top:1px dashed #e8eef7; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* 课程详情：概要 */
.ch-sum { font-size:12px; color:#98a3b3; margin-top:8px; }
.ch-cont { display:flex; align-items:center; gap:12px; margin-top:12px; padding:11px 14px;
  background:#f4f9ff; border-radius:10px; flex-wrap:wrap; }
.ch-cont-t { flex:1 1 200px; font-size:13.5px; color:#1677ff; font-weight:600;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* 章节头：小进度条 */
.ch-mini { flex:0 0 46px; height:5px; background:#eef1f6; border-radius:3px; overflow:hidden; }
.ch-mini > i { display:block; height:100%; background:#1677ff; border-radius:3px; transition:width .3s; }

/* 课时行：编号 + 状态 + 待学标记 */
.lsrow { position:relative; }
.lsrow .ls-no { flex:0 0 22px; font-size:11.5px; color:#b6c0cd;
  font-variant-numeric:tabular-nums; text-align:right; }
.lsrow.nx { background:#f0f7ff; }
.lsrow.nx .ls-no { color:#1677ff; font-weight:700; }
.lsrow.done .ls-no { color:#c8d2de; }
.lsrow .ls-dur { flex:0 0 auto; font-size:11.5px; color:#aab5c2; font-variant-numeric:tabular-nums; }
.ls-badge { display:inline-block; font-size:10.5px; padding:1px 7px; border-radius:20px;
  margin-left:7px; background:#eef1f6; color:#8e9aab; vertical-align:middle; }
.ls-badge.nx { background:#e2efff; color:#1677ff; font-weight:600; }

/* 播放浮层：左视频 + 右目录 */
.play-wrap { display:flex; gap:16px; align-items:flex-start; }
.play-wrap .play-main { flex:1 1 auto; min-width:0; }
.play-wrap .toc { flex:0 0 216px; max-height:74vh; overflow:auto;
  border:1px solid #eef1f6; border-radius:10px; background:#fbfcfe; }
.play-wrap .toc-h { padding:10px 12px; font-size:13px; font-weight:700; color:#5b6b7f;
  border-bottom:1px solid #eef1f6; display:flex; align-items:center; justify-content:space-between;
  position:sticky; top:0; background:#fbfcfe; z-index:1; }
.play-wrap .toc-body { padding:6px 0 8px; }
.play-wrap .toc-ch { padding:6px 0; }
.play-wrap .toc-ch-t { font-size:11.5px; color:#98a3b3; padding:4px 12px;
  display:flex; align-items:center; justify-content:space-between; }
.play-wrap .toc-l { display:flex; align-items:center; gap:6px; padding:6px 12px;
  font-size:12.5px; cursor:pointer; border-left:3px solid transparent; }
.play-wrap .toc-l:hover { background:#eef4ff; }
.play-wrap .toc-l.cur { background:#e8f2ff; border-left-color:#1677ff; font-weight:700; color:#1677ff; }
.play-wrap .toc-l.done .toc-n { color:#c8d2de; }
.play-wrap .toc-n { flex:0 0 20px; font-size:11px; color:#b6c0cd; font-variant-numeric:tabular-nums; }
.play-wrap .toc-t { flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.play-wrap .toc-i { flex:0 0 auto; font-size:11px; }

@media (max-width:820px){
  /* 手机端：目录收到视频下方，不再左右分栏 */
  .play-wrap { flex-direction:column; gap:12px; }
  .play-wrap .toc { flex:0 0 auto; width:100%; max-height:260px; }
  .crs-resume { gap:12px; }
  .crs-resume .cr-right { width:100%; }
  .crs-resume .cr-right .btn { flex:1; }
}
/* 全学完提示 */
.ch-done { margin-top:12px; padding:11px 14px; background:#f0fbf5; border-radius:10px;
  font-size:13px; color:#00a05a; }


/* ===== 宠物吃东西动画（2026-10-03 新增）===== */
.pet.eating .pet-body { animation: petEat .52s ease-in-out 3; }
@keyframes petEat {
  0%,100% { transform: translateY(0) scale(1); }
  35%     { transform: translateY(-7px) scale(1.09); }
  70%     { transform: translateY(0) scale(.96); }
}
.pet-food-fly {
  position: absolute; left: 50%; top: -4px;
  font-size: 22px; transform: translateX(-50%);
  pointer-events: none; z-index: 20;
  animation: petFoodFly 1.25s cubic-bezier(.4,0,.3,1) forwards;
}
@keyframes petFoodFly {
  0%   { opacity: 0; transform: translate(-50%,-16px) scale(.6) rotate(-12deg); }
  22%  { opacity: 1; transform: translate(-50%,2px)   scale(1.05) rotate(6deg); }
  60%  { opacity: 1; transform: translate(-50%,22px)  scale(.85) rotate(-4deg); }
  100% { opacity: 0; transform: translate(-50%,36px)  scale(.5)  rotate(0); }
}


/* ===== 班级徽章 & 底部机构名（2026-10-03 加粗强调）===== */
.hi-b-class {
  display: inline-block;
  font-weight: 800;
  color: #111;
  background: #eaf2ff;
  border: 1px solid #d3e2ff;
  padding: 1px 9px;
  border-radius: 20px;
  font-size: 12.5px;
  margin-right: 2px;
  letter-spacing: .3px;
}
.shome-foot .foot-org {
  font-weight: 800;
  color: #111;
  font-size: 13.5px;
  letter-spacing: .8px;
}


/* ===== 阅卷页统计卡片可点击筛选（2026-10-03）===== */
.stat.quick { cursor: pointer; transition: transform .15s, box-shadow .15s; position: relative; }
.stat.quick:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,.08); }
.stat.quick.on { outline: 2px solid var(--primary, #1677ff); background: #f0f7ff; }
.stat.quick .qf-tip { font-size: 10.5px; color: var(--text-secondary, #8a94a6); margin-top: 3px; opacity: .85; }
.stat.quick.on .qf-tip { color: var(--primary, #1677ff); font-weight: 600; }
.stat.quick.on .qf-tip::after { content: "（已筛选）"; }


/* ===== 角色权限：老师角色隐藏「删除」按钮（2026-10-03）===== */
/* 删除按钮的 onclick 统一以 del/libDel/eeDel/stuBatchDel 开头 */
body.role-teacher [onclick^="del"],
body.role-teacher [onclick^="libDel"],
body.role-teacher [onclick^="eeDel"],
body.role-teacher [onclick^="stuBatchDel"] { display: none !important; }
/* 老师角色隐藏「阅卷分工」入口（后端也有校验） */
body.role-teacher [onclick^="assignModal"] { display: none !important; }

/* ---------- 宠物点击动效（v1.22.0） ---------- */
.pet.spin .pet-face { animation: petSpin 1.5s ease-in-out; }
@keyframes petSpin { 0%{transform:rotate(0) scale(1)} 50%{transform:rotate(360deg) scale(1.25)} 100%{transform:rotate(360deg) scale(1)} }
.pet.shake .pet-face { animation: petShake .6s ease; }
@keyframes petShake { 0%,100%{transform:rotate(0)} 20%{transform:rotate(-16deg)} 60%{transform:rotate(16deg)} }
.pet.bounce .pet-face { animation: petBounce .75s cubic-bezier(.28,.84,.42,1); }
@keyframes petBounce { 0%{transform:translateY(0) scale(1,1)} 25%{transform:translateY(-22px) scale(.92,1.12)} 55%{transform:translateY(0) scale(1.14,.86)} 78%{transform:translateY(-8px) scale(.98,1.02)} 100%{transform:translateY(0) scale(1,1)} }
.pet-fly { position:absolute; left:50%; top:50%; margin:-12px 0 0 -12px; width:24px; text-align:center; line-height:1; pointer-events:none; z-index:30; will-change:transform,opacity; }
@keyframes petFly {
  0%   { opacity:0; transform: translate(var(--x0,0px), var(--y0,0px)) scale(.5); }
  14%  { opacity:1; transform: translate(var(--x0,0px), var(--y0,0px)) scale(1.15); }
  60%  { opacity:1; transform: translate(var(--x0,0px), var(--y0,0px)) scale(1); }      /* 先在宠物周围一圈停住，看得清 */
  100% { opacity:0; transform: translate(var(--x1,0px), var(--y1,0px)) scale(1.4) rotate(var(--rot,20deg)); }
}
.pet-slot .pet-face { transition: font-size .3s ease; }

/* ---------- v1.22.6 烟花式粒子：固定在视口最上层，不被任何容器裁剪 ---------- */
.pet-fly-fixed {
  position: fixed !important;
  width: 26px; margin: -13px 0 0 -13px;
  pointer-events: none; z-index: 99999;
  will-change: transform, opacity;
  text-shadow: 0 1px 3px rgba(0,0,0,.18);
}

/* 资料库卡片配色（学生首页第 8 张卡） */
.scard.c8 { background:linear-gradient(135deg,#5b8def,#3f6fd8); }

/* ---------- 答题页防外传（v1.29.0） ---------- */
#exam-wm { position:fixed; left:0; top:0; right:0; bottom:0; pointer-events:none; z-index:9990; background-repeat:repeat; }
.exam-protect, .exam-protect * { -webkit-user-select:none; -moz-user-select:none; user-select:none; -webkit-touch-callout:none; -webkit-tap-highlight-color:transparent; }
.exam-protect img { -webkit-user-drag:none; pointer-events:none; }
/* 打印时也保留水印（截图/打印都能溯源） */
@media print { #exam-wm { position:fixed !important; } }

/* ---------- v1.31.0 侧边栏紧凑化（笔记本小屏友好） ---------- */
/* 菜单区独立滚动：宠物卡与底部信息固定，不跟着滚 */
.sidebar { padding:12px 10px; }
.logo { padding:4px 8px 10px; }
.logo .mark { width:30px; height:30px; }
.foot { padding:8px 8px 0; line-height:1.5; }
.sidebar .nav { flex:1 1 auto; min-height:0; overflow-y:auto; overflow-x:hidden; padding-right:2px; }
.sidebar .nav::-webkit-scrollbar { width:6px; }
.sidebar .nav::-webkit-scrollbar-thumb { background:#cfdcf0; border-radius:3px; }
.sidebar .nav::-webkit-scrollbar-track { background:transparent; }
/* 菜单项收紧一点，一屏多显示几项 */
.sidebar .nav-item { padding:5px 11px; margin-bottom:0; line-height:1.35; }
.sidebar .nav-item .ico { width:17px; }
.sidebar .logo { padding-bottom:6px; margin-bottom:6px; }
.sidebar .logo b { font-size:14px; }
.sidebar .foot { padding-top:6px; font-size:11px; }
/* 宠物卡「折叠态」：只留一行（图标+名字+年龄），点箭头展开 */
.pet-slot.mini { padding:8px 12px; }
.pet-slot.mini .pet-body,
.pet-slot.mini .pet-stat,
.pet-slot.mini .pet-bar,
.pet-slot.mini .pet-tip-line,
.pet-slot.mini .pet-actions,
.pet-slot.mini .pet-bubble,
.pet-slot.mini .pet-act { display:none !important; }
.pet-slot.mini .pet-info, .pet-slot.mini .pet-name { margin:0; }
.pet-slot.mini .pn-txt { font-size:12px; }
.pet-slot.mini .pn-age { font-size:11px; }
/* 折叠箭头 */
.pet-fold { cursor:pointer; color:#b9a48f; font-size:12px; padding:0 3px; user-select:none; }
.pet-fold:hover { color:#8a6a4f; }

/* ---------- v1.38.1 题库列表：只滚题目区，表头吸顶 ---------- */
#banktbl { max-height: calc(100vh - 350px); min-height: 260px; overflow-y: auto; overflow-x: auto; }
#banktbl table tr:first-child th {
  position: sticky; top: 0; z-index: 3;
  background: #f7f9fc; box-shadow: 0 1px 0 #e6edf5;
}
/* 其它长列表页同样处理（作业/试卷/阅卷的表格容器） */
#subtbl { max-height: calc(100vh - 420px); min-height: 240px; overflow-y: auto; }
#subtbl table tr:first-child th { position: sticky; top: 0; z-index: 3; background: #f7f9fc; box-shadow: 0 1px 0 #e6edf5; }


/* ===== v1.42.0 课程章节 / 课时 拖拽排序 ===== */
.drag-h{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;
  border-radius:5px;cursor:grab;color:#9aa5b5;flex:0 0 auto;touch-action:none}
.drag-h:hover{background:#eef2f8;color:#4a5c78}
.drag-h:active{cursor:grabbing}
.chbox.dragging,.lsrow.dragging{opacity:.5}
.chbox.dragging{border-color:#2f7cf6 !important;border-style:dashed;background:#f7faff}
.lsrow.dragging{background:#eef4ff}
.lsrow{display:flex;justify-content:space-between;align-items:center;padding:6px 0 6px 2px;
  border-top:1px solid #f5f5f5;margin-top:6px}


/* ===== v1.48.0 同页题「共用材料」区块 ===== */
.q-material{background:#f7fafe;border:1px solid #e3ecf7;border-radius:12px;
  padding:14px;margin-bottom:12px;font-size:15px;line-height:1.65;
  white-space:pre-wrap;word-break:break-word;color:#2b3445}
