:root{
  --teal:#0E8C8B;
  --teal-deep:#0B3B3A;
  --teal-soft:#DEF0EF;
  --ink:#12161F;
  --ink2:#3D4552;
  --muted:#6E7682;
  --hair:#E7E9ED;
  --paper:#FAFAF8;
  --card:#FFFFFF;
  --band:#F3F4F5;
  --amber:#C4914E;
  --red:#C0574F;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font:14px/1.6 "Microsoft YaHei","PingFang SC","Hiragino Sans GB",-apple-system,"Segoe UI",sans-serif;
  -webkit-font-smoothing:antialiased;
}
.app{display:grid;grid-template-columns:248px 1fr;min-height:100vh}

/* ---------- 侧栏 ---------- */
.side{
  border-right:1px solid var(--hair);background:var(--card);
  padding:22px 16px;display:flex;flex-direction:column;gap:22px;
  position:sticky;top:0;height:100vh;
}
.brand{display:flex;gap:11px;align-items:center;padding:0 6px}
.logo{
  width:34px;height:34px;border-radius:10px;background:var(--teal);position:relative;flex:0 0 auto;
}
.logo::before,.logo::after{content:"";position:absolute;background:#fff;border-radius:2px;left:11px}
.logo::before{top:11px;width:12px;height:3px}
.logo::after{top:18px;width:7px;height:3px}
.name{font-size:17px;font-weight:700;letter-spacing:.5px}
.slogan{font-size:11px;color:var(--muted);margin-top:1px}

nav{display:flex;flex-direction:column;gap:4px}
nav button{
  text-align:left;border:0;background:transparent;color:var(--ink2);
  padding:10px 12px;border-radius:9px;font:inherit;cursor:pointer;display:flex;align-items:center;gap:9px;
}
nav button::before{
  content:"";width:5px;height:5px;border-radius:50%;background:#C8CDD4;flex:0 0 auto;
}
nav button:hover{background:var(--band)}
nav button.on{background:var(--teal-soft);color:var(--teal-deep);font-weight:700}
nav button.on::before{background:var(--teal)}

.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:6px}
.api-state{font-size:11.5px;color:var(--muted);padding:7px 10px;background:var(--band);border-radius:8px}
.api-state.ok{background:var(--teal-soft);color:var(--teal-deep)}
.api-state.bad{background:#FBEFEE;color:#8C3F38}
.hint{font-size:10.5px;color:#9AA1AB;line-height:1.5}

/* ---------- 主区 ---------- */
main{padding:34px 40px 60px;max-width:1180px}
.view{display:none;animation:fade .35s ease}
.view.on{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

.view-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:22px}
h1{font-size:27px;margin:0 0 6px;letter-spacing:.3px}
.sub{margin:0;color:var(--muted);font-size:13px}

/* 进度环 */
.ring-wrap{position:relative;width:88px;height:88px;flex:0 0 auto}
.ring{width:88px;height:88px;transform:rotate(-90deg)}
.ring-bg{fill:none;stroke:#EDEFF1;stroke-width:9}
.ring-fg{fill:none;stroke:var(--teal);stroke-width:9;stroke-linecap:round;
  stroke-dasharray:201;stroke-dashoffset:201;transition:stroke-dashoffset .5s ease}
.ring-txt{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.ring-txt b{font-size:17px}
.ring-txt span{font-size:10px;color:var(--muted)}

/* 通用 */
.card{background:var(--card);border:1px solid var(--hair);border-radius:12px;padding:18px}
.btn{
  border:0;background:var(--teal-deep);color:#fff;font:inherit;font-weight:700;
  padding:9px 18px;border-radius:9px;cursor:pointer;transition:.2s;
}
.btn:hover{background:#0F4A48}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.ghost{background:var(--band);color:var(--teal-deep)}
.btn.big{width:100%;padding:12px;margin-top:6px}
.btn.mini{padding:4px 10px;font-size:11.5px;border-radius:7px;background:var(--band);color:var(--teal-deep);font-weight:700}
.btn.mini:hover{background:var(--teal-soft)}

.tabs{display:flex;gap:8px;margin-bottom:16px}
.tabs button{
  border:1px solid var(--hair);background:var(--card);color:var(--ink2);
  padding:7px 16px;border-radius:20px;font:inherit;cursor:pointer;
}
.tabs button.on{background:var(--teal-soft);border-color:transparent;color:var(--teal-deep);font-weight:700}

/* 任务 */
.add-row{display:flex;gap:10px;margin-bottom:16px}
.add-row input{
  flex:1;border:1px solid var(--hair);background:var(--card);border-radius:9px;
  padding:11px 14px;font:inherit;outline:none;
}
.add-row input:focus{border-color:var(--teal)}
.add-row select{
  border:1px solid var(--hair);background:var(--card);border-radius:9px;padding:0 12px;font:inherit;color:var(--ink2);
}
.task-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
.task-item{
  display:flex;align-items:center;gap:13px;background:var(--card);
  border:1px solid var(--hair);border-radius:11px;padding:13px 16px;transition:.15s;
}
.task-item:hover{border-color:#D7DBE1}
.task-item.done{background:#FCFCFB}
.task-item.done .t-title{color:#9EA4AD;text-decoration:line-through}
.check{
  width:20px;height:20px;border-radius:50%;border:2px solid #C6CCD3;flex:0 0 auto;
  cursor:pointer;display:grid;place-items:center;transition:.15s;
}
.task-item.done .check{border-color:var(--teal);background:var(--teal)}
.check svg{width:11px;height:11px;opacity:0}
.task-item.done .check svg{opacity:1}
.t-title{flex:1;font-size:14px}
.pill{
  font-size:11px;padding:3px 9px;border-radius:20px;background:var(--band);color:var(--muted);white-space:nowrap;
}
.pill.high{background:#FBEFEE;color:#8C3F38}
.pill.mid{background:#FBF4EA;color:#8A6226}
.pill.low{background:var(--band);color:var(--muted)}
.del{border:0;background:transparent;color:#B6BCC4;cursor:pointer;font-size:16px;line-height:1;padding:4px}
.del:hover{color:var(--red)}

/* 白名单 */
.chips{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.chips button{
  border:1px solid var(--hair);background:var(--card);color:var(--ink2);
  padding:6px 15px;border-radius:20px;font:inherit;font-size:12.5px;cursor:pointer;
}
.chips button.on{background:var(--teal-deep);border-color:transparent;color:#fff}
.score-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.score-item{
  display:flex;align-items:center;gap:14px;background:var(--card);
  border:1px solid var(--hair);border-radius:11px;padding:14px 18px;
}
.score-item.no{background:#FCFCFB;border-style:dashed}
.bar-l{width:4px;height:38px;border-radius:4px;background:var(--teal);flex:0 0 auto}
.score-item.no .bar-l{background:#D6DAE0}
.s-name{font-weight:700;font-size:14.5px}
.s-meta{font-size:11.5px;color:var(--muted);margin-top:2px}
.s-score{margin-left:auto;text-align:right}
.s-score b{font-size:19px;color:var(--teal)}
.score-item.no .s-score b{color:#C3C8CF}
.s-score span{display:block;font-size:10.5px;color:var(--muted)}
.note-bar{margin-top:18px;background:var(--teal-soft);color:var(--teal-deep);font-weight:700;
  border-radius:10px;padding:14px 18px;font-size:13.5px}

/* 考点 */
.exam-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.exam-card{background:var(--card);border:1px solid var(--hair);border-radius:12px;padding:20px}
.exam-top{display:flex;justify-content:space-between;align-items:baseline}
.exam-name{font-size:16px;font-weight:700}
.exam-meta{font-size:11.5px;color:var(--muted);margin-top:4px}
.progress{height:7px;border-radius:7px;background:#EDEFF1;margin:16px 0 10px;overflow:hidden}
.progress i{display:block;height:100%;border-radius:7px;background:var(--teal);transition:width .4s ease}
.exam-foot{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--muted)}
.exam-foot .ops{display:flex;gap:6px}

/* 看板 */
.board{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.col{background:var(--band);border-radius:12px;padding:14px}
.col.doing{background:var(--teal-soft)}
.col-head{display:flex;justify-content:space-between;font-size:12.5px;font-weight:700;color:var(--muted);margin-bottom:12px}
.col.doing .col-head{color:var(--teal-deep)}
.col-body{display:flex;flex-direction:column;gap:9px}
.bcard{background:var(--card);border:1px solid #EDEFF1;border-radius:10px;padding:12px 13px}
.bcard .t{font-size:13.5px}
.bcard .row{display:flex;justify-content:space-between;align-items:center;margin-top:9px}
.role{font-size:10.5px;background:var(--teal-soft);color:var(--teal-deep);padding:2px 8px;border-radius:20px}
.col-empty{font-size:12px;color:#A7ADB6;text-align:center;padding:14px 0}

/* AI */
.ai-grid{display:grid;grid-template-columns:340px 1fr;gap:16px;align-items:start}
.form{display:flex;flex-direction:column;gap:13px}
.form label{display:flex;flex-direction:column;gap:6px;font-size:12.5px;color:var(--ink2)}
.form input,.form select{
  border:1px solid var(--hair);border-radius:9px;padding:10px 12px;font:inherit;background:var(--paper);outline:none;
}
.form input:focus,.form select:focus{border-color:var(--teal);background:#fff}
.key-box{border-top:1px dashed var(--hair);padding-top:11px;font-size:12px;color:var(--muted)}
.key-box summary{cursor:pointer;color:var(--teal-deep);font-weight:700}
.key-box input{width:100%;margin-top:9px}
.tiny{font-size:10.5px;color:#9AA1AB;margin:7px 0 0}
.tiny code{background:var(--band);padding:1px 5px;border-radius:4px}
.msg{font-size:12px;line-height:1.6;min-height:0;margin-top:8px}
.msg.err{color:#8C3F38;background:#FBEFEE;border-radius:9px;padding:11px 13px}
.msg.info{color:var(--teal-deep);background:var(--teal-soft);border-radius:9px;padding:11px 13px}

.result{min-height:420px}
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:380px;color:#A7ADB6;text-align:center}
.empty-mark{width:64px;height:64px;border-radius:50%;border:2px dashed #DDE1E6;margin-bottom:16px}

.plan-sum{display:flex;gap:14px;align-items:flex-start;margin-bottom:16px;flex-wrap:wrap}
.plan-sum h3{margin:0 0 8px;font-size:16px}
.focus{display:flex;gap:7px;flex-wrap:wrap}
.focus span{font-size:11.5px;background:var(--teal-soft);color:var(--teal-deep);padding:4px 11px;border-radius:20px;font-weight:700}
.days{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.day{background:var(--paper);border:1px solid var(--hair);border-radius:10px;padding:12px 14px}
.day h4{margin:0 0 8px;font-size:12.5px;color:var(--teal-deep);letter-spacing:.5px}
.day ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:7px}
.day li{font-size:12.5px;line-height:1.5;display:flex;gap:7px;align-items:flex-start}
.tag{font-size:10px;padding:1px 7px;border-radius:20px;background:var(--band);color:var(--muted);flex:0 0 auto;margin-top:2px}
.tag.学业{background:#E8F1FB;color:#2E5E8E}
.tag.复习{background:#FBEFEE;color:#8C3F38}
.tag.综测{background:var(--teal-soft);color:var(--teal-deep)}
.tag.团队{background:#FBF4EA;color:#8A6226}
.min{color:#9AA1AB;font-size:10.5px;margin-left:auto;flex:0 0 auto;margin-top:2px}
.advice{margin-top:14px;background:var(--band);border-radius:10px;padding:13px 16px;font-size:12.5px;color:var(--ink2)}
.advice b{color:var(--teal-deep)}
.plan-ops{margin-top:14px;display:flex;gap:10px;align-items:center}
.spinner{display:inline-block;width:13px;height:13px;border:2px solid rgba(255,255,255,.35);
  border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;vertical-align:-2px;margin-right:7px}
@keyframes spin{to{transform:rotate(360deg)}}

@media (max-width:900px){
  .app{grid-template-columns:1fr}
  .side{position:static;height:auto;flex-direction:row;align-items:center;gap:14px;flex-wrap:wrap}
  nav{flex-direction:row;flex-wrap:wrap}
  main{padding:22px}
  .exam-grid,.board,.days,.ai-grid{grid-template-columns:1fr}
}
/* ===== v3 additions =====

/* ===== v3 additions ===== */

/* ---- 任务台账：多选 / 批量 ---- */
.task-item { gap: 11px; }
.task-item .t-title { cursor: text; }
.row-chk {
  width: 15px; height: 15px; flex: 0 0 auto; cursor: pointer;
  accent-color: var(--teal); margin: 0;
}
.icon-btn {
  border: 0; background: transparent; color: #B6BCC4; cursor: pointer;
  font-size: 14px; line-height: 1; padding: 4px 6px; border-radius: 6px;
}
.icon-btn:hover { color: var(--teal); background: var(--teal-soft); }
.edit-input {
  flex: 1; border: 1px solid var(--teal); border-radius: 7px;
  padding: 5px 9px; font: inherit; outline: none; background: #fff;
}
.bulkbar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  background: var(--card); border: 1px solid var(--hair); border-radius: 10px;
  padding: 9px 14px; margin-bottom: 14px; font-size: 12.5px; color: var(--ink2);
}
.bulkbar .chk-all { display: flex; align-items: center; gap: 7px; cursor: pointer; user-select: none; }
.bulkbar .chk-all input { width: 15px; height: 15px; accent-color: var(--teal); cursor: pointer; }
.bulkbar .sel-count { color: var(--muted); }
.bulkbar .bulk-spacer { flex: 1; }
.bulkbar select {
  border: 1px solid var(--hair); border-radius: 8px; padding: 5px 9px;
  font: inherit; font-size: 12.5px; color: var(--ink2); background: var(--paper);
}
.btn.mini.danger { background: #FBEFEE; color: #8C3F38; }
.btn.mini.danger:hover { background: #F6DEDC; }
.btn:disabled, .btn.mini:disabled { opacity: .38; cursor: not-allowed; }
.tip { font-size: 11.5px; color: #A7ADB6; margin: 12px 0 0; }

/* ---- 综测白名单：搜索 ---- */
.searchbar { display: flex; gap: 10px; margin-bottom: 14px; }
.searchbar input {
  flex: 1; border: 1px solid var(--hair); border-radius: 9px; padding: 11px 14px;
  font: inherit; outline: none; background: var(--card);
}
.searchbar input:focus { border-color: var(--teal); }
.search-panel {
  border: 1px solid var(--hair); border-radius: 12px; background: var(--card);
  padding: 16px 18px; margin-bottom: 16px;
}
.sr-head { font-size: 13px; color: var(--ink2); margin-bottom: 12px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.sr-head b { color: var(--teal); }
.sr-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.sr-item {
  display: flex; align-items: center; gap: 12px;
  background: var(--paper); border-radius: 9px; padding: 11px 13px;
}
.sr-name { font-weight: 700; font-size: 13.5px; }
.sr-meta { font-size: 11px; color: var(--muted); margin-top: 3px; }
.sr-score { margin-left: auto; font-weight: 700; color: var(--teal); font-size: 15px; white-space: nowrap; }
.sr-score small { color: var(--muted); font-weight: 400; font-size: 10px; }
.sr-foot { font-size: 11px; color: #9AA1AB; margin-top: 10px; }
.sr-loading { font-size: 13px; color: var(--ink2); display: flex; align-items: center; }
.sr-empty { font-size: 13px; color: var(--muted); }
.sr-empty.err { color: #8C3F38; }
.spinner.dark { border-color: rgba(14,140,139,.25); border-top-color: var(--teal); }

/* AI 结果卡 */
.ai-badge {
  font-size: 10.5px; font-weight: 700; color: #8A6226;
  background: #FBF4EA; border-radius: 20px; padding: 3px 10px;
}
.ai-card { border-radius: 11px; padding: 15px 17px; background: var(--paper); border-left: 3px solid var(--muted); }
.ai-card.yes { border-left-color: var(--teal); }
.ai-card.maybe { border-left-color: var(--amber); }
.ai-card.no { border-left-color: #C0C6CD; }
.ai-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 14px; }
.ai-name { font-size: 15px; font-weight: 700; }
.ai-meta { font-size: 11px; color: var(--muted); margin-top: 5px; }
.ai-verdict { text-align: right; font-weight: 700; font-size: 14px; white-space: nowrap; }
.ai-verdict small { display: block; font-weight: 400; font-size: 10.5px; color: var(--muted); margin-top: 3px; }
.ai-verdict.yes { color: var(--teal); }
.ai-verdict.maybe { color: var(--amber); }
.ai-verdict.no { color: #A8AEB6; }
.ai-row { font-size: 12.5px; color: var(--ink2); margin-top: 10px; line-height: 1.6; }
.ai-row b { color: var(--teal-deep); margin-right: 8px; }

/* 五育标签 */
.tag-mod {
  font-style: normal; font-size: 10px; padding: 1px 7px; border-radius: 20px;
  background: var(--band); color: var(--muted); margin-right: 4px;
}
.tag-mod.智育 { background: #E8F1FB; color: #2E5E8E; }
.tag-mod.德育 { background: var(--teal-soft); color: var(--teal-deep); }
.tag-mod.体育 { background: #FBF4EA; color: #8A6226; }
.tag-mod.美育 { background: #F1EDFB; color: #5B4A8A; }
.tag-mod.劳育 { background: #EAF5EC; color: #2F6B3C; }

/* 小节说明 */
.disc { font-size: 11px; color: #9AA1AB; line-height: 1.6; margin: 14px 0 0; }

/* 考点卡里的要点列表 */
.exam-grid { grid-template-columns: repeat(3, 1fr); }
.points { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.points li {
  font-size: 11.5px; color: var(--ink2); line-height: 1.5;
  padding-left: 12px; position: relative;
}
.points li::before {
  content: ""; position: absolute; left: 0; top: 7px;
  width: 4px; height: 4px; border-radius: 50%; background: var(--teal);
}
.exam-card .progress { margin: 14px 0 8px; }

@media (max-width: 1180px) {
  .exam-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 900px) {
  .exam-grid { grid-template-columns: 1fr; }
  .bulkbar { gap: 8px; }
}

/* 让同一行的考点卡底部（进度条/按钮）对齐 */
.exam-card { display: flex; flex-direction: column; }
.exam-card .progress { margin-top: auto; }
/* ===== v4 modal/quiz =====

/* ===== v4 modal/quiz ===== */
body.modal-open { overflow: hidden; }

.exam-card.clickable { cursor: pointer; transition: border-color .18s, transform .18s; }
.exam-card.clickable:hover { border-color: var(--teal); transform: translateY(-1px); }
.exam-stats { font-size: 11.5px; color: var(--muted); margin-top: 12px; }
.open-hint { color: var(--teal); font-weight: 600; font-size: 11.5px; }

.modal-mask {
  position: fixed; inset: 0; z-index: 80;
  background: rgba(18, 22, 31, .38);
  display: flex; align-items: center; justify-content: center;
  padding: 32px 20px;
}
.modal-mask[hidden] { display: none; }
.modal {
  background: var(--card); width: min(860px, 100%); max-height: 86vh;
  border-radius: 16px; box-shadow: 0 24px 60px rgba(11, 59, 58, .22);
  display: flex; flex-direction: column; overflow: hidden;
}
.modal-head {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 18px 22px; border-bottom: 1px solid var(--hair);
}
.modal-title { font-size: 16px; font-weight: 700; }
.modal-close {
  border: 0; background: transparent; font-size: 22px; line-height: 1;
  color: var(--muted); cursor: pointer; padding: 2px 8px; border-radius: 8px;
}
.modal-close:hover { background: var(--band); color: var(--ink); }
.modal-body { padding: 20px 22px 24px; overflow-y: auto; }
.m-sub { font-size: 12px; color: var(--muted); margin: 0 0 6px; }
.m-tip { font-size: 12px; color: var(--ink2); margin: 0 0 14px; line-height: 1.6; }
.m-back { margin-top: 18px; }

.ch-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ch-item {
  display: grid; grid-template-columns: 1fr 150px auto; align-items: center; gap: 14px;
  border: 1px solid var(--hair); border-radius: 10px; padding: 12px 14px; background: var(--paper);
}
.ch-title { font-size: 13.5px; font-weight: 700; }
.ch-meta { font-size: 11px; color: var(--muted); margin-top: 3px; }
.ch-bar { height: 6px; background: var(--band); border-radius: 6px; overflow: hidden; }
.ch-bar > i { display: block; height: 100%; background: var(--teal); border-radius: 6px; }

/* 学习卡片 */
.study { font-size: 13px; line-height: 1.85; color: var(--ink2); }
.study h5 {
  font-size: 13px; color: var(--teal-deep); margin: 16px 0 6px;
  padding-left: 9px; border-left: 3px solid var(--teal);
}
.study h5:first-child { margin-top: 0; }
.study p { margin: 0 0 4px; }
.study p.pt { padding-left: 14px; position: relative; }
.study p.pt::before {
  content: ""; position: absolute; left: 3px; top: 10px;
  width: 4px; height: 4px; border-radius: 50%; background: var(--teal);
}

.quiz-start {
  display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap;
  margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--hair);
}
.qs-left { font-size: 13px; color: var(--ink2); }
.qs-left b { color: var(--teal); font-size: 16px; }
.qs-hint { font-size: 11px; color: var(--muted); margin-top: 3px; }

/* 测验 */
.quiz-loading, .quiz-error {
  font-size: 13px; color: var(--ink2); display: flex; align-items: center; gap: 10px;
  padding: 24px 0;
}
.quiz-error { color: #8C3F38; }
.q { padding: 16px 0; border-bottom: 1px dashed var(--hair); }
.q:last-of-type { border-bottom: 0; }
.q.right .q-title b { color: var(--teal); }
.q.wrong .q-title b { color: #B4483F; }
.q-title { font-size: 13.5px; font-weight: 600; margin-bottom: 10px; line-height: 1.6; }
.q-opts { display: flex; flex-direction: column; gap: 7px; }
.opt {
  display: flex; align-items: flex-start; gap: 9px; cursor: pointer;
  border: 1px solid var(--hair); border-radius: 9px; padding: 9px 12px;
  font-size: 13px; color: var(--ink2); background: var(--paper);
}
.opt:hover { border-color: var(--teal); }
.opt input { margin-top: 2px; accent-color: var(--teal); }
.opt.is-right { border-color: var(--teal); background: var(--teal-soft); color: var(--teal-deep); }
.opt.is-wrong { border-color: #E0A9A4; background: #FBEFEE; color: #8C3F38; }
.q-explain { margin-top: 10px; font-size: 12px; color: var(--ink2); background: var(--band); border-radius: 8px; padding: 9px 12px; line-height: 1.6; }
.q-explain b { margin-right: 6px; }
.quiz-ops { display: flex; gap: 10px; margin-top: 18px; }
.quiz-result:empty { display: none; }
.qr-box {
  margin-top: 16px; padding: 14px 16px; border-radius: 10px;
  background: var(--band); font-size: 13px; color: var(--ink2);
}
.qr-box b { color: var(--teal-deep); font-size: 15px; }
.qr-box.perfect { background: var(--teal-soft); }
.qr-tip { font-size: 11.5px; color: var(--muted); margin-top: 6px; }

.sr-askai {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  font-size: 12px; color: var(--ink2); margin-top: 12px;
  padding: 10px 12px; background: #FBF4EA; border-radius: 9px;
}

@media (max-width: 720px) {
  .ch-item { grid-template-columns: 1fr; }
  .ch-bar { width: 100%; }
}
/* ===== v5 tasks quad + grade =====

/* ===== v5 tasks quad + grade ===== */
.task-search { margin-bottom: 12px; }
.pill.lowest { background: #F1F3F5; color: #5F6773; }

/* 添加任务弹窗 */
.fld { display: block; font-size: 12px; color: var(--muted); }
.fld input {
  display: block; width: 100%; margin-top: 7px;
  border: 1px solid var(--hair); border-radius: 9px; padding: 11px 13px;
  font: inherit; font-size: 13.5px; color: var(--ink); background: var(--paper); outline: none;
}
.fld input:focus { border-color: var(--teal); background: #fff; }

.sw-row { display: flex; align-items: center; gap: 16px; margin-top: 18px; }
.sw-label { font-size: 12.5px; color: var(--ink2); width: 64px; flex: 0 0 auto; }
.seg { display: flex; border: 1px solid var(--hair); border-radius: 9px; overflow: hidden; background: var(--paper); }
.seg button {
  border: 0; background: transparent; padding: 8px 20px; cursor: pointer;
  font: inherit; font-size: 12.5px; color: var(--muted);
}
.seg button.on { background: var(--teal); color: #fff; font-weight: 600; }

.quad-preview {
  margin-top: 20px; padding: 14px 16px; border-radius: 10px;
  background: var(--teal-soft); border-left: 3px solid var(--teal);
}
.qp-name { font-size: 15px; font-weight: 700; color: var(--teal-deep); }
.qp-meta { font-size: 12px; color: var(--ink2); margin-top: 4px; }
.qp-meta b { color: var(--teal); }

.modal-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 22px; }

/* 拍照交卷 */
.grade-entry { margin-top: 22px; padding-top: 18px; border-top: 1px dashed var(--hair); }
.ge-title { font-size: 13px; font-weight: 700; color: var(--ink); }
.ge-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 10px; }
.ge-row input[type="file"] { font-size: 12px; color: var(--ink2); }
.ge-hint { font-size: 11px; color: var(--muted); }
.grade-loading { display: flex; align-items: center; gap: 10px; font-size: 12.5px; color: var(--ink2); margin-top: 12px; }
.grade-err { font-size: 12.5px; color: #8C3F38; margin-top: 12px; }

.grade-card { margin-top: 14px; border: 1px solid var(--hair); border-radius: 12px; padding: 16px 18px; background: var(--paper); }
.grade-top { display: flex; align-items: baseline; gap: 14px; }
.grade-score b { font-size: 30px; color: var(--teal); line-height: 1; }
.grade-score span { font-size: 12px; color: var(--muted); margin-left: 3px; }
.grade-verdict { font-size: 13px; font-weight: 700; color: var(--ink2); }
.grade-rec { font-size: 12px; color: var(--ink2); margin-top: 10px; line-height: 1.7; }
.grade-rec b, .grade-row b { color: var(--teal-deep); margin-right: 8px; font-size: 11.5px; }
.grade-row { margin-top: 10px; font-size: 12px; color: var(--ink2); }
.grade-row ul { margin: 5px 0 0; padding-left: 16px; }
.grade-row li { line-height: 1.7; }
.grade-row.ok b { color: #2F6B3C; }
.grade-row.no b { color: #B4483F; }
.grade-row.miss b { color: #8A6226; }
.grade-comment {
  margin-top: 12px; font-size: 12.5px; color: var(--ink2); line-height: 1.7;
  background: var(--band); border-radius: 8px; padding: 10px 12px;
}
.grade-mastery { margin-top: 12px; font-size: 12px; color: var(--muted); }
.grade-mastery b { color: var(--teal); font-size: 14px; }
/* ===== v6 mixed quiz =====

/* ===== v6 mixed quiz ===== */
.q-head { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; flex-wrap: wrap; }
.q-no { font-size: 13px; font-weight: 700; color: var(--ink); }
.q-tag {
  font-size: 10px; padding: 1px 8px; border-radius: 20px; font-weight: 700;
}
.q-tag.choice { background: #E8F1FB; color: #2E5E8E; }
.q-tag.short { background: var(--teal-soft); color: var(--teal-deep); }
.q-diff { font-size: 10px; color: var(--muted); }
.q-diff.难 { color: #B4483F; }
.q-diff.易 { color: #2F6B3C; }
.q-src { font-size: 10.5px; color: #9AA1AB; margin-left: auto; }

.short-wrap { display: flex; gap: 12px; align-items: flex-start; }
.short-input {
  flex: 1; min-height: 74px; resize: vertical;
  border: 1px solid var(--hair); border-radius: 9px; padding: 10px 12px;
  font: inherit; font-size: 13px; line-height: 1.65; color: var(--ink);
  background: var(--paper); outline: none;
}
.short-input:focus { border-color: var(--teal); background: #fff; }
.short-side { display: flex; flex-direction: column; gap: 8px; align-items: center; width: 128px; flex: 0 0 auto; }
.short-side .btn.mini { white-space: nowrap; }
.img-prev { width: 100%; }
.img-prev:empty { display: none; }
.img-loading, .img-err { font-size: 10.5px; color: var(--muted); }
.img-err { color: #B4483F; }
.img-chip { position: relative; display: block; }
.img-chip img {
  width: 100%; border-radius: 8px; border: 1px solid var(--hair); display: block;
}
.img-del {
  position: absolute; top: -6px; right: -6px; width: 20px; height: 20px;
  border: 0; border-radius: 50%; background: rgba(18,22,31,.72); color: #fff;
  font-size: 13px; line-height: 1; cursor: pointer; padding: 0;
}

.q-fb {
  margin-top: 10px; font-size: 12px; color: var(--ink2); line-height: 1.7;
  background: var(--band); border-radius: 8px; padding: 10px 12px;
}
.q-fb b { color: var(--teal-deep); margin-right: 6px; }
.q.right .q-fb { background: var(--teal-soft); }
.q.wrong .q-fb { background: #FBEFEE; }
.fb-score { font-size: 12.5px; }
.fb-score b { color: var(--teal); font-size: 15px; }
.fb-hit { color: #2F6B3C; }
.fb-miss { color: #B4483F; }
.fb-comment { color: var(--ink2); }
.fb-ref { color: var(--muted); font-size: 11.5px; margin-top: 4px; }

@media (max-width: 640px) {
  .short-wrap { flex-direction: column; }
  .short-side { width: 100%; flex-direction: row; }
}

.src-note { font-size: 10.5px; color: #9AA1AB; }
