:root{
  --blue:#003D7A; --blue-l:#E8EFF7; --blue-m:#5B7FA6;
  --gold:#C49A2A; --gold-l:#FBF3E0;
  --ink:#1F2933; --ink2:#52606D; --ink3:#8A94A0;
  --line:#E3E8EF; --bg:#F7F9FC; --white:#fff;
  --red:#C0392B; --green:#2E7D32;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);
  font:14px/1.7 -apple-system,"Microsoft YaHei","PingFang SC",sans-serif;}

/* 顶栏 */
.top{background:var(--white);border-bottom:1px solid var(--line);
  padding:14px 26px;display:flex;align-items:center;justify-content:space-between;
  position:sticky;top:0;z-index:20}
.brand{display:flex;align-items:center;gap:12px}
.logo{width:38px;height:38px;border-radius:9px;background:var(--blue);color:#fff;
  display:grid;place-items:center;font-size:18px;font-weight:500}
.top h1{margin:0;font-size:16px;font-weight:500;letter-spacing:.3px}
.sub{margin:0;font-size:12px;color:var(--ink3)}
.top-right{display:flex;align-items:center;gap:10px}
.tag{font-size:12px;color:var(--blue);background:var(--blue-l);
  padding:4px 10px;border-radius:20px}
.tag.demo{color:var(--gold);background:var(--gold-l)}
/* 返回公司主页：与家庭资产/退休金/税务等系统同款（蓝框白底，悬停反色） */
.top-home{display:inline-flex;align-items:center;padding:5px 12px;border-radius:8px;
  border:1px solid var(--blue);background:var(--white);color:var(--blue);
  font-size:12.5px;font-weight:500;text-decoration:none;white-space:nowrap;transition:.15s}
.top-home:hover{background:var(--blue);color:#fff}

/* 课程空间（v16）：课程下拉 + 家底一行 + 归档按钮 */
.courseSel{min-width:230px;max-width:420px;font-size:14px;font-weight:500}
#courseMeta{font-size:12px;color:var(--ink2);line-height:1.9}

/* 布局 */
.wrap{display:flex;gap:20px;padding:20px 26px;align-items:flex-start;
  max-width:1280px;margin:0 auto}
.steps{width:172px;flex:0 0 172px;display:flex;flex-direction:column;gap:6px;
  position:sticky;top:86px}
.step{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid transparent;
  background:transparent;border-radius:9px;cursor:pointer;text-align:left;
  font-size:13px;color:var(--ink2);font-family:inherit}
.step b{width:20px;height:20px;border-radius:50%;background:var(--line);color:var(--ink2);
  font-size:11px;font-weight:500;display:grid;place-items:center;flex:0 0 20px}
.step:hover{background:var(--white)}
.step.active{background:var(--white);border-color:var(--line);color:var(--blue)}
.step.active b{background:var(--blue);color:#fff}
/* 七步 · 两段：分段小标题（客观题出题程序 / 主观题出题程序 / 组卷） */
.step-seg{margin:12px 0 2px;padding:0 4px;font-size:11px;font-weight:700;
  letter-spacing:.5px;color:var(--ink2);opacity:.6;border-top:1px dashed var(--line);
  padding-top:8px}
.step-seg:first-child{margin-top:0;border-top:0;padding-top:0}
.content{flex:1;min-width:0}

/* 第七步 · 试卷在线浏览（学生卷 / 教师卷） */
.paper-view{max-height:62vh;overflow:auto;padding:6px 4px;font-size:13.5px;
  color:var(--ink);line-height:1.75}
.paper-view .pv-part{margin:14px 0 6px;font-size:14px;color:var(--blue);
  border-bottom:1px dashed var(--line);padding-bottom:4px}
.paper-view .pv-q{margin:8px 0 12px}
.paper-view .pv-line{margin:3px 0 3px 16px}
.paper-view .pv-mat{margin:4px 0 6px 16px;color:var(--ink2);font-style:italic}
.paper-view .pv-ans{color:#0a7d5a;margin-left:6px}

/* 面板 */
.panel{display:none}
.panel.show{display:block}
.panel h2{font-size:15px;font-weight:500;margin:0 0 6px}
.hint{font-size:12px;color:var(--ink3);margin:6px 0 14px;line-height:1.6}

/* 卡片 */
.card{background:var(--white);border:1px solid var(--line);border-radius:12px;
  padding:16px 18px;margin-bottom:14px}
.card-head{display:flex;align-items:center;justify-content:space-between;
  margin-bottom:10px;gap:12px;flex-wrap:wrap}
.card-head h3{margin:0;font-size:13px;font-weight:500;color:var(--blue)}

/* 表单 */
.row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.row label{width:86px;flex:0 0 86px;font-size:12px;color:var(--ink2)}
input[type=text],input[type=file],input:not([type]),select{
  border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:13px;
  font-family:inherit;color:var(--ink);background:var(--white);min-width:150px}
input:not([type]):focus,select:focus{outline:none;border-color:var(--blue-m)}
input[type=file]{padding:5px 8px;font-size:12px}
.btn{border:1px solid var(--line);background:var(--white);border-radius:8px;
  padding:7px 14px;font-size:13px;cursor:pointer;font-family:inherit;color:var(--ink)}
.btn:hover{border-color:var(--blue-m);color:var(--blue)}
.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn.primary:hover{background:#00325f;color:#fff}
.btn.ghost{background:transparent}
.muted{font-size:12px;color:var(--ink3)}
.mini{font-size:12px;color:var(--ink2);display:flex;align-items:center;gap:5px}

/* 选择芯片 */
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{border:1px solid var(--line);background:var(--white);border-radius:20px;
  padding:5px 13px;font-size:12px;cursor:pointer;color:var(--ink2);font-family:inherit}
.chip:hover{border-color:var(--blue-m)}
.chip.on{background:var(--blue);border-color:var(--blue);color:#fff}
.chip.on.gold{background:var(--gold);border-color:var(--gold)}

/* 技能卡 */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:10px}
.sk{border:1px solid var(--line);border-radius:10px;padding:11px 13px;cursor:pointer;
  background:var(--white)}
.sk:hover{border-color:var(--blue-m)}
.sk.on{border-color:var(--blue);background:var(--blue-l)}
.sk .id{font-size:11px;color:var(--gold);letter-spacing:.4px;font-weight:500}
.sk .nm{font-size:13px;font-weight:500;margin:2px 0 4px}
.sk .ds{font-size:11px;color:var(--ink3);line-height:1.5}
.sk .star{color:var(--gold);font-size:11px}

/* 表格 */
.tb{width:100%;border-collapse:collapse;font-size:12.5px}
.tb th{background:var(--blue-l);color:var(--blue);font-weight:500;text-align:left;
  padding:7px 9px;border:1px solid var(--line);white-space:nowrap}
.tb td{padding:5px 9px;border:1px solid var(--line);vertical-align:top}
.tb input{width:100%;min-width:52px;border:1px solid transparent;background:transparent;
  padding:3px 5px;font-size:12.5px}
.tb input:focus{border-color:var(--blue-m);background:#fff}
.tb tr.warn td{background:#FFFBEF}
.tb tr.fail td{background:#FDF0EF}

/* 题目卡 */
.item{border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:10px;
  background:var(--white);position:relative}
.item.warn{border-left:3px solid var(--gold)}
.item.fail{border-left:3px solid var(--red)}
.item.flagged{border-left:3px solid var(--red);background:#FFFBFB}
.item.deleted{opacity:.5;background:#FAFAFA;border-style:dashed}
.item.deleted .stem{text-decoration:line-through}
.item .h{display:flex;gap:8px;align-items:center;font-size:11px;color:var(--ink3);
  margin-bottom:6px;flex-wrap:wrap}
.item .pill{background:var(--blue-l);color:var(--blue);border-radius:4px;padding:1px 7px;
  font-size:11px}
.item .pill.dark{background:var(--blue);color:#fff;font-weight:500}
.item .pill.g{background:var(--gold-l);color:#8a6a12}
.item .pill.r{background:#FDF0EF;color:var(--red)}
.item .pill.gold{background:#FDF6E3;color:#9A7B1A}
.item .pill.sec{background:#EAF3DE;color:#3B6D11}
.item .h-actions{margin-left:auto;display:flex;gap:4px}
.item .h-actions .btn{padding:1px 7px;font-size:11px}
.item .stem{font-size:13px;margin:4px 0 8px;line-height:1.65}
.opt{font-size:12.5px;color:var(--ink2);padding:2px 0}
.opt.right{color:var(--green);font-weight:500}
.audit{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);
  font-size:11.5px;color:var(--ink3);line-height:1.7}
.audit b{color:var(--ink2);font-weight:500}

/* 题目卡 · 线上审改 */
.item-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:9px;
  padding-top:8px;border-top:1px solid var(--line)}
.item.edit-on{border-left:3px solid var(--blue);background:#FBFCFE}
.edit-box{margin:6px 0 4px;padding:10px 12px;background:#F7F9FC;border:1px solid var(--line);
  border-radius:8px}
.ed-row{display:flex;gap:10px;align-items:flex-start;margin-bottom:7px;font-size:12px}
.ed-row>span{flex:0 0 72px;color:var(--ink2);padding-top:5px}
.ed-row input,.ed-row textarea,.ed-row select{flex:1;font:inherit;font-size:12.5px;
  padding:5px 8px;border:1px solid var(--line);border-radius:6px;background:#fff;
  resize:vertical;box-sizing:border-box}
.ed-row textarea{line-height:1.6}
.ed-actions{display:flex;gap:8px;align-items:center;margin-top:9px}
.item .btn.ghost.danger{border-color:#E7B4B0;color:var(--red)}
.item .btn.ghost.danger:hover{background:#FDF0EF}
.filters{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.parse-opts{margin-top:10px;padding:10px 12px;background:var(--bg2,#f6f7f9);border:1px solid var(--line,#e6e8ec);border-radius:8px;display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.parse-opts .opt{display:inline-flex;gap:5px;align-items:center}

/* 综合试卷（组卷导出） */
.paper-files{margin-top:12px;display:flex;flex-direction:column;gap:8px}
.pf-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 12px;
  background:var(--bg2,#f6f7f9);border:1px solid var(--line,#e6e8ec);border-radius:8px;font-size:12.5px}
.pf-row .pf-tag{flex:0 0 auto;font-weight:500;color:var(--blue)}
.pf-row .pf-dl{color:var(--blue);text-decoration:none;border-bottom:1px solid var(--blue-l,#d7e3f4)}
.pf-row .pf-dl:hover{opacity:.82}
.pf-row .pf-meta{color:var(--ink2);margin-left:auto}
/* 组卷提示：题池不够、某类题会重复时的一句话提醒 */
.pf-row.pf-note{display:block;line-height:1.75;color:#7A5B0E;background:#FFF8E6;border-color:#EBD9A6}
/* 综合题·时事素材输入 */
.tf{width:100%;box-sizing:border-box;padding:7px 10px;border:1px solid var(--line,#e6e8ec);border-radius:7px;font:inherit;font-size:13px}
.ta{width:100%;box-sizing:border-box;padding:7px 10px;border:1px solid var(--line,#e6e8ec);border-radius:7px;font:inherit;font-size:13px;line-height:1.6;resize:vertical}
.tf:focus,.ta:focus{outline:none;border-color:var(--blue-m,#3a7bd5)}
label.cb{display:inline-flex;gap:6px;align-items:center;font-size:13px;color:var(--ink2)}
/* ★「出题内容」区里的跨章综合题勾选行：必须覆盖 .row label 的固定 86px 宽度，
   否则这行长中文说明会被压成一字一行的竖条、右侧大片留白。 */
.row label.cb{width:auto;flex:1 1 100%;display:flex;flex-wrap:wrap;align-items:center;row-gap:6px}

/* 题目审阅 modal */
.modal-mask{position:fixed;inset:0;background:rgba(31,41,51,.4);z-index:60;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto}
.modal-mask .modal{background:#fff;border-radius:14px;max-width:780px;width:100%;box-shadow:0 12px 40px rgba(0,0,0,.18);display:block;position:relative;inset:auto;z-index:61}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line,#e6e8ec)}
.modal-head h3{margin:0;font-size:15px;font-weight:500;color:var(--blue)}
.modal-body{padding:16px 18px;max-height:72vh;overflow:auto}
.rv{border:1px solid var(--line,#e6e8ec);border-radius:10px;padding:12px 14px;margin-bottom:12px;background:var(--bg2,#f6f7f9)}
.rv-h{font-size:12.5px;font-weight:500;color:var(--ink);margin-bottom:8px}
.rv-f{margin-bottom:8px}
.rv-f label{display:block;font-size:12px;color:var(--ink2);margin-bottom:3px}
.rv-f .ta{font-size:12.5px}
.rv-act{display:flex;align-items:center;gap:10px;margin-top:6px}
.rv-msg{font-size:12px;color:var(--green,#1f9d55)}
/* 综合题三问缺失的红色警示（2026-09-30：卷面只剩材料、没有问题） */
.rv-warn{font-size:12.5px;color:#9a3412;background:#fff7ed;border:1px solid #fdba74;
  border-radius:8px;padding:6px 9px;margin:-2px 0 8px;line-height:1.6}

/* 报告 */
.rep{display:flex;gap:22px;flex-wrap:wrap;margin-bottom:10px}
.rep div{font-size:12px;color:var(--ink2)}
.rep b{display:block;font-size:19px;font-weight:500;color:var(--blue)}
.rep b.gold{color:var(--gold)}
.rep b.red{color:var(--red)}
.detail{font-size:12px;color:var(--ink2);line-height:1.8}

/* 弹窗 */
.modal{display:none;position:fixed;inset:0;background:rgba(31,41,51,.35);
  z-index:50;padding:60px 20px}
.modal.show{display:block}
.modal-box{background:#fff;border-radius:14px;max-width:520px;margin:0 auto;padding:18px 20px}

/* ---------- 资料槽位（教材 / 大纲 / 学时表） ---------- */
.sec-title{font-size:13px;font-weight:500;color:var(--blue);margin:4px 0 10px;
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.sec-title .muted{font-weight:400}
.slot{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;
  background:#FCFDFF}
.slot-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.slot-head b{font-size:13px;font-weight:500}
.slot-head .muted{font-size:11.5px}
.slot-body{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.slot-body .fname{font-size:12.5px;color:var(--ink);background:var(--blue-l);
  border-radius:6px;padding:3px 9px;max-width:340px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.req{font-size:11px;color:var(--red);background:#FDF0EF;border-radius:4px;padding:1px 7px}

/* 批量学时输入 */
.bulk{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink2)}
.bulk input[type=number]{width:66px;min-width:0;border:1px solid var(--line);
  border-radius:7px;padding:5px 8px;font-size:13px;font-family:inherit}

/* 章节汇总条 */
.summary{margin-top:10px;padding:9px 12px;background:var(--blue-l);border-radius:9px;
  font-size:12.5px;color:var(--ink2);line-height:1.7}
.summary b{color:var(--blue);font-weight:500}
.summary .gold{color:var(--gold)}

/* 学时是推测值 → 标黄，提示人工核对 */
.tb tr.row-warn td{background:#FFFBEF}
.tb input.suspect{border-color:var(--gold);background:#FFFDF6}

/* 小节骨架：每章一行分组标题 */
.tb tr.sec-ch td{background:var(--blue-l);color:var(--blue);font-weight:500;font-size:12px}
.tb tr.sec-ch .btn{padding:1px 7px;font-size:10.5px;vertical-align:middle}

/* 小节题量输入 + 排除行（软删） */
.tb input.qty{width:58px;min-width:0;border:1px solid var(--line);border-radius:6px;
  padding:3px 6px;font-size:12.5px;font-family:inherit;text-align:center;
  background:var(--white)}
.tb input.qty:hover{border-color:var(--blue-m)}
.tb tr.row-off td{background:#FAFAFA;color:var(--ink3)}
.tb tr.row-off td b{color:var(--ink3)}
.tb tr.row-off input.qty{background:#F4F4F4;color:var(--ink3)}
.tag-m{background:#FDF6E3;color:#9A7B1A;border-radius:4px;padding:1px 5px;
  font-size:10.5px;margin-left:5px;white-space:nowrap}

/* 技能卡里的题量输入 */
.qty-row{display:flex;align-items:center;gap:6px;margin-top:7px;padding-top:7px;
  border-top:1px dashed var(--line);font-size:11.5px;color:var(--ink2);cursor:default}
.qty-row input.qty{width:52px;min-width:0;border:1px solid var(--line);border-radius:6px;
  padding:3px 6px;font-size:12.5px;font-family:inherit;text-align:center}
.qty-row input.qty:focus{outline:none;border-color:var(--blue-m)}
.btn.tiny{padding:2px 8px;font-size:11px;border-radius:6px}
.btn.danger{color:var(--red)}
.btn.danger:hover{border-color:var(--red);color:var(--red)}
input[type=number]{font-family:inherit}

/* 章节进度总览：状态徽章 + 当前批次行高亮 */
.badge{display:inline-block;border-radius:20px;padding:1px 9px;font-size:11px;
  white-space:nowrap;border:1px solid transparent}
.badge.b-draft{background:var(--gold-l);color:#8a6a12;border-color:#EBD9A6}
.badge.b-dirty{background:#FDF0EF;color:var(--red);border-color:#F3C9C4}
.badge.b-done{background:#EAF3DE;color:#3B6D11;border-color:#CBDCA8}
.badge.b-hist{background:#F1F1F1;color:#777;border-color:#E0E0E0}
.tb tr.cur td{background:#F5F9FF}
.tb tr.cur td:first-child{font-weight:500;color:var(--blue)}
#progTable td,#mgTable td{vertical-align:middle}
#progTable .btn,#mgTable .btn{margin:0 2px}
#mgTable .btn.danger{color:var(--red)}
#mgTable input[type=checkbox]{cursor:pointer}
#progTable td.nowrap,#progTable th{white-space:nowrap}
#progStat{font-weight:400}

/* ================= 费用 / 余额 / 限量（v11） ================= */

/* 顶部余额状态条：全站可见，颜色随级别变 */
.budget-bar{display:flex;align-items:center;gap:10px;margin:0 0 14px;padding:9px 14px;
  border-radius:10px;font-size:13.5px;line-height:1.5;border:1px solid transparent}
.budget-bar .bb-ico{font-size:16px;flex:0 0 auto}
.budget-bar .bb-text{flex:1 1 auto}
.budget-bar .bb-act{flex:0 0 auto;display:flex;gap:6px}
.budget-bar .bb-stop{color:var(--red)}
.budget-bar.ok{background:#EAF3DE;border-color:#CBDCA8;color:#2F5A0C}
.budget-bar.warn{background:#FFF8E6;border-color:#EBD9A6;color:#7A5B0E}
.budget-bar.alert{background:#FFF3E0;border-color:#F0CFA8;color:#8A4B0B}
.budget-bar.brake{background:#FDF0EF;border-color:#F3C9C4;color:#8E1F17}

/* 限额提示条（第一步 / 第二步） */
.limit-note{margin:10px 0 4px;padding:9px 14px;border-radius:9px;font-size:13.5px;line-height:1.6;
  background:#F5F9FF;border:1px solid #D6E4F5;color:#274A79}
.limit-note b{color:var(--blue)}
.limit-note .muted{display:block;margin-top:2px;font-size:12.5px;color:#6b7d92}

/* 费用面板 */
.cost-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:6px 0 12px}
.cost-box{background:#F7FAFF;border:1px solid #E1ECFA;border-radius:9px;padding:9px 12px}
.cost-box .cb-label{font-size:12.5px;color:#5b6b7f}
.cost-box .cb-val{font-size:19px;font-weight:600;color:var(--blue);margin:2px 0 1px}
.cost-box .cb-sub{font-size:12px;color:#8a97a6}
.cost-two{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.tiny-tb{font-size:12.5px}
.tiny-tb th,.tiny-tb td{padding:4px 8px}
.tiny-tb td:first-child{color:#44556b}
.budget-rows{display:flex;flex-direction:column;gap:5px;margin:4px 0 2px}
.budget-row{font-size:13px;line-height:1.6;color:#33475e;background:#FAFBFD;
  border:1px solid #EDF1F7;border-radius:7px;padding:6px 11px}
.budget-row span{display:inline-block;min-width:66px;font-weight:600}
.budget-row .bwarn{color:#8a6a12}
.budget-row .balert{color:#A7610C}
.budget-row .bbrake{color:var(--red)}
.budget-row .bauto{color:#3f6d3f}
@media (max-width:760px){
  .cost-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cost-two{grid-template-columns:1fr}
  .budget-bar{flex-wrap:wrap}
}

/* ⚠️ .wrap 本身是「侧栏 + 内容」两栏 flex；余额状态条要独占一整行，
   所以给 .wrap 允许换行，并让状态条占满一行（否则会被排成第 3 列，布局挤歪）。 */
.wrap{flex-wrap:wrap}
.budget-bar{flex:1 1 100%;width:100%}

/* ---- 整门课一键生成 · 后台任务进度（v12） ----
   一门课 12 章要跑 15~25 分钟，同步请求会被 nginx 的 60 秒超时掐断，
   所以改成服务器后台跑 + 这里显示进度条。关掉网页也不影响。 */
.run-card{border:1px solid #CFE0F2;background:linear-gradient(180deg,#F7FBFF,#fff)}
.run-card .card-head h3{color:var(--blue)}
.btn.big{padding:10px 22px;font-size:15px;font-weight:500}
.pbar{height:12px;border-radius:20px;background:#EEF2F7;overflow:hidden;
  border:1px solid var(--line);margin:2px 0 10px}
.pbar-in{height:100%;width:0;border-radius:20px;
  background:linear-gradient(90deg,#2E6FB7,#003D7A);transition:width .5s ease}
.task-line{font-size:13px;color:var(--ink2);margin-bottom:8px}
.task-stats{display:flex;gap:18px;flex-wrap:wrap;font-size:13px;color:var(--ink2);
  padding:8px 12px;background:#F7F9FC;border-radius:8px;margin-bottom:10px}
.task-stats b{color:var(--blue);font-size:15px}
.task-stats b.gold{color:var(--gold)}
.task-chs{display:flex;flex-wrap:wrap;gap:6px}
.tch{font-size:11.5px;border-radius:20px;padding:2px 10px;border:1px solid var(--line);
  background:#fff;color:var(--ink2)}
.tch i{font-style:normal;opacity:.7}
.tch.ok{background:#EAF3DE;color:#3B6D11;border-color:#CBDCA8}
.tch.bad{background:#FDF0EF;color:var(--red);border-color:#F3C9C4}
.tch.wait{background:#F7F9FC;color:var(--ink3)}

/* ---- 出题中「等待提示」动效（v13）----
   诉求：用户必须**看得出系统在干活**，才肯耐心等、不乱点。
   做法：进度条流光 + 三点跳动 + 当前步骤高亮 + 正在跑的那一格闪 + 顶部常驻药丸。
   所有动画都挂在 .task-live.running 下，跑完自动停，不白耗电。 */
.task-live{border:1px solid #CFE0F2;background:linear-gradient(180deg,#F5FAFF,#fff);
  box-shadow:0 2px 14px rgba(0,61,122,.07)}
.task-live .card-head h3{display:flex;align-items:center;gap:8px;color:var(--blue)}

/* 三点跳动 */
.dots{display:inline-flex;gap:3px;align-items:flex-end;height:12px}
.dots>span{width:5px;height:5px;border-radius:50%;background:var(--blue);opacity:.35}
.dots.sm{height:9px}
.dots.sm>span{width:4px;height:4px;background:#fff}
.task-live.running .dots>span{animation:dotJump 1s infinite ease-in-out}
.task-live.running .dots>span:nth-child(2){animation-delay:.15s}
.task-live.running .dots>span:nth-child(3){animation-delay:.3s}
@keyframes dotJump{0%,80%,100%{transform:translateY(0);opacity:.35}
  40%{transform:translateY(-5px);opacity:1}}

/* 大号百分比 + 当前动作 */
.tl-top{display:flex;gap:16px;align-items:center;margin:4px 0 10px}
.tl-pct{flex:0 0 auto;display:flex;align-items:baseline;gap:2px;font-variant-numeric:tabular-nums}
.tl-pct b{font-size:34px;line-height:1;color:var(--blue);font-weight:600}
.tl-pct i{font-style:normal;font-size:14px;color:var(--ink3)}
.tl-main{min-width:0;flex:1}
.tl-msg{font-size:13.5px;color:var(--ink);margin-bottom:6px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-crumb{display:flex;gap:6px;flex-wrap:wrap;font-size:11.5px}
.tl-crumb span{color:var(--ink3);border:1px solid var(--line);border-radius:20px;
  padding:1px 9px;background:#fff}
.tl-crumb span.past{color:#3B6D11;background:#EAF3DE;border-color:#CBDCA8}
.tl-crumb span.on{color:#fff;background:var(--blue);border-color:var(--blue)}
.task-live.running .tl-crumb span.on{animation:crumbPulse 1.6s infinite}
@keyframes crumbPulse{0%,100%{opacity:1}50%{opacity:.6}}

/* 进度条流光 */
.pbar.live{position:relative}
.pbar.live .pbar-in{position:relative;overflow:hidden}
.task-live.running .pbar.live .pbar-in::after{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.6),transparent);
  transform:translateX(-100%);animation:sheen 1.4s infinite}
@keyframes sheen{100%{transform:translateX(100%)}}

/* 正在跑的那一格闪 */
.tch.run{background:#E3EFFC;color:var(--blue);border-color:#9CC3E8}
.task-live.running .tch.run{animation:chipPulse 1.2s infinite}
@keyframes chipPulse{0%,100%{box-shadow:0 0 0 0 rgba(46,111,183,.4)}
  50%{box-shadow:0 0 0 4px rgba(46,111,183,0)}}

.tl-note{font-size:12px;color:var(--ink3);margin-top:10px;padding-top:9px;
  border-top:1px dashed var(--line);line-height:1.6}

/* 顶部常驻状态药丸：切到别的步骤也看得见"还在跑" */
.run-pill{display:inline-flex;align-items:center;gap:6px;cursor:pointer;
  background:var(--blue);color:#fff;border-radius:20px;padding:3px 11px;font-size:12.5px}
.run-pill b{font-weight:500}
/* 药丸里的三点自己跳（药丸在 header 里，不在 .task-live 体内） */
.run-pill .dots>span{animation:dotJump 1s infinite ease-in-out}
.run-pill .dots>span:nth-child(2){animation-delay:.15s}
.run-pill .dots>span:nth-child(3){animation-delay:.3s}
.run-pill.ok{background:#3B6D11}
.run-pill.bad{background:var(--red)}
.run-pill.mut{background:var(--ink3)}

/* 生成期间锁住按钮的提示 */
.lock-hint{margin-top:9px;font-size:12.5px;color:#8A5A00;background:#FFF7E6;
  border:1px solid #F0DCB0;border-radius:8px;padding:7px 11px;line-height:1.55}
.btn:disabled,.btn[disabled]{opacity:.5;cursor:not-allowed;filter:grayscale(.35)}

/* ============ 额度用完的提示弹层（v14） ============
   费用数据不显示给老师，但"为什么出不了题"必须说清楚 —— 用居中弹层让人看得到。 */
.notice-mask{position:fixed;inset:0;z-index:200;background:rgba(15,23,42,.42);
  display:flex;align-items:center;justify-content:center;padding:20px}
.notice-box{background:#fff;border-radius:12px;max-width:460px;width:100%;
  padding:22px 24px 18px;box-shadow:0 18px 50px rgba(0,0,0,.22)}
.notice-box h3{margin:0 0 10px;font-size:16px;color:var(--ink)}
.notice-box p{margin:0 0 16px;font-size:14px;line-height:1.75;color:#4B5563}
.notice-box button{width:100%}

/* ---- 额度批复提示条（v17）：管理员批准/驳回后，老师端顶部显示一次 ---- */
.qv-bar{position:relative;background:#EAF4EC;border:1px solid #BFE0C6;border-radius:10px;
  padding:11px 40px 11px 14px;margin:0 0 14px;font-size:13.5px;line-height:1.7;color:#25603a}
.qv-bar .qb-inner b{color:#1B4D2E}
.qv-bar .qb-x{position:absolute;top:8px;right:10px;border:0;background:transparent;cursor:pointer;
  font-size:14px;color:#5b7a65;line-height:1;padding:4px}
.qv-bar .qb-x:hover{color:#25603a}


/* ============ ⑤ 题库 · 课程题库总览（v22） ============
   一门课一行：左边课程名+状态+家底，右边三个常驻动作（查看/下载/删除）。
   老师最常干的就是"下载那门课的题库"，所以下载键必须一直看得见。 */
.bk-row{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:var(--white);
  margin-bottom:8px;flex-wrap:wrap}
.bk-row:hover{border-color:var(--blue-m)}
.bk-row .bk-main{min-width:180px}
.bk-row .bk-main b{font-size:14px;color:var(--ink)}
.bk-row .bk-main .muted{margin-top:3px}
.bk-row .bk-act{display:flex;gap:8px;flex-wrap:wrap}
.tag.on{color:#2E7D32;background:#EAF4EC}
.tag.arch{color:var(--ink3);background:#F2F4F7}
.btn.ghost.danger{border-color:#E7B4B0;color:var(--red)}
.btn.ghost.danger:hover{background:#FDF0EF;border-color:var(--red);color:var(--red)}
#bankOpenBody .row label{width:auto;flex:0 0 auto}

/* v30：审阅分组 + 时事题关键要求 */
.rv-group { margin: 14px 0 6px; border: 1px solid #e6ebf2; border-radius: 12px; padding: 10px 12px 4px; background: #fbfcfe; }
.rv-group-h { font-weight: 700; color: #003D7A; font-size: 14px; margin: 2px 0 10px; padding-bottom: 6px; border-bottom: 1px dashed #d6deea; }
.rv-group.rv-case{background:#fff8ef;border:1px solid #f6c177;}
.rv-group.rv-case .rv-group-h{color:#b45309;}
.rv-group .rv-h{font-size:12px;color:#475569;margin-bottom:4px;}

.rv-case { border-left: 4px solid #C49A2A; background: #fffdf6; }
.btn.warn { background: #C49A2A; color: #fff; border-color: #C49A2A; }
.btn.warn:hover { background: #a9851f; }

/* v33：每用户钱包 —— 顶栏余额药丸 + 避峰提醒条 */
.wallet-pill { background: #E8EFF7; color: #003D7A; border: 1px solid #b9cdec;
  font-weight: 700; cursor: pointer; }
.wallet-pill:hover { background: #d7e4f6; }
.peak-bar { padding: 8px 16px; font-size: 13px; font-weight: 600; border-radius: 0 0 10px 10px;
  margin: 0 0 10px; }
.peak-bar.peak { background: #FEF3C7; color: #92400E; border-bottom: 1px solid #FCD34D; }
.peak-bar.idle { background: #ECFDF5; color: #065F46; border-bottom: 1px solid #A7F3D0; }

/* ---- 按章主观题矩阵（出题内容）---- */
.subj-matrix { border: 1px solid #e1e8f0; border-radius: 10px; overflow: hidden; }
.subj-matrix .sm-head, .subj-matrix .sm-row {
  display: grid; grid-template-columns: 34px 1fr 92px 92px; align-items: center;
  gap: 6px; padding: 6px 10px; }
.subj-matrix .sm-head { background: #f3f7fc; font-size: 12px; color: #5a6b7e; font-weight: 700; }
.subj-matrix .sm-row { border-top: 1px solid #eef2f7; }
.subj-matrix .sm-row:nth-child(odd) { background: #fbfdff; }
.subj-matrix .sm-ch { font-weight: 700; color: #003D7A; text-align: center; }
.subj-matrix .sm-name { font-size: 13px; color: #334; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.subj-matrix .sm-cell { display: flex; align-items: center; gap: 4px; font-size: 12px; }
.subj-matrix .sm-cell input { width: 52px; }
.subj-matrix .sm-tip { font-size: 11px; color: #9aa7b5; }
.subj-matrix .sm-empty { padding: 14px; text-align: center; color: #9aa7b5; font-size: 13px; }

/* ============ 首行：使用说明 + 充值入口（v38） ============
   老师一进页面就看到"避峰省时省钱 / 一门课约 30 分钟 ￥2 / 建议先充 ￥10"，
   右侧常驻「💰 充值」，点开即弹微信收款码。
   注意：宽度必须铺满整行（此处是文章级横幅，不是 .row 里的字段标签，
   别被 .row label{width:86px} 这类后代选择器压窄 —— 参考 v37 跨章综合题竖排那次踩坑）。 */
.rc-wrap{max-width:1280px;margin:0 auto;padding:14px 26px 0}
.rc-bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  background:linear-gradient(90deg,#FFF8E8,#FFFDF8);
  border:1px solid #F0DCB0;border-left:4px solid var(--gold);
  border-radius:10px;padding:11px 16px}
.rc-bar-txt{flex:1 1 340px;min-width:0;font-size:13px;line-height:1.75;color:#7A5A12}
.rc-bar-t{font-size:13.5px;font-weight:700;color:#8A5A00;margin-bottom:2px}
.rc-bar-d b{color:#B45309}
.rc-bar-btn{flex:0 0 auto;white-space:nowrap;font-weight:600;padding:8px 18px}
/* 顶栏常驻充值键（金色，与"模型设置"区分开） */
.btn.gold{background:var(--gold);border-color:var(--gold);color:#fff}
.btn.gold:hover{background:#A87F1E;color:#fff}
/* 「重新生成」态：本批已有题时按钮由蓝转金，提示"再点会覆盖本批"（文案由 syncGenBtn() 切换） */
.btn.primary.regen{background:var(--gold);border-color:var(--gold);color:#fff}
.btn.primary.regen:hover{background:#A87F1E;border-color:#A87F1E;color:#fff}
.top-pay{white-space:nowrap}
/* 收款码图片：按原比例显示（竖版海报裁出的紧凑版），不要写死正方形免得拉变形 */
.rc-qr{width:240px;height:auto;max-width:100%;border:1px solid #e5e7eb;
  border-radius:8px;background:#fff;display:block;margin:0 auto}
@media (max-width:640px){
  .rc-wrap{padding:10px 14px 0}
  .rc-qr{width:200px}
  .rc-bar{padding:10px 12px}
}
/* 首行使用说明：自然流成段，填满宽度、不强制断行，段间留一点空隙 */
.rc-bar-d p{margin:0 0 6px;line-height:1.6}
.rc-bar-d p:last-child{margin-bottom:0}
/* 系统操作七步卡片已移除（左侧步骤导航即七步，不重复），保留样式无副作用，注释备忘 */

/* 第三步 · 历史遗留批次：默认收起，不占空间，点击展开 */
.collapse-card{display:block}
.collapse-card > summary{cursor:pointer}
.collapse-card > summary::-webkit-details-marker{display:none}
.collapse-card > summary::after{content:" \25B8";color:var(--muted,#888);font-size:12px}
.collapse-card[open] > summary::after{content:" \25BE"}

/* ============ 系统操作七步 · 可折叠卡片（v56） ============ */
.guide-card{background:var(--white);border:1px solid var(--line);border-radius:12px;
  padding:12px 16px;cursor:pointer}
.guide-card>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;
  font-size:13.5px;font-weight:600;color:var(--blue)}
.guide-card>summary::-webkit-details-marker{display:none}
.guide-card>summary::before{content:"▸";display:inline-block;color:var(--blue-m);
  transition:transform .15s;font-size:12px}
.guide-card[open]>summary::before{transform:rotate(90deg)}
.guide-card>summary:focus{outline:none}
.guide-card .gc-body{margin-top:10px;font-size:13px;line-height:1.9;color:var(--ink)}
.guide-card .gc-body ol{margin:4px 0 0;padding-left:22px}
.guide-card .gc-body li{margin-bottom:4px}
.guide-card .gc-body b{color:var(--blue)}
.guide-card .gc-note{margin:8px 0 0;font-size:12px;color:var(--ink3);line-height:1.7}
