/* 教学部数据工作台 —— 文本考核模块（老师端工作台 + 学生端反馈页）
 * 复用 app.css 的配色令牌（--brand / --line / --ok / --warn / --danger）。 */

/* ==================== 工具条 ==================== */
/* 老师 2026-10-19 提的：填完一屏学员想保存还得滚回最上面，太麻烦。
   改成「吸顶」—— 往下滚的时候这条工具条（含「保存考核」）一直贴在顶栏下面。
   top 用的是 JS 量出来的顶栏高度（--tx-sticky-top），因为顶栏是 sticky 的，
   写死 0 会被顶栏盖住。 */
.tx-bar{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;justify-content:space-between;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}
.tx-bar.sticky{position:sticky;top:var(--tx-sticky-top,64px);z-index:20;
  box-shadow:0 8px 20px rgba(16,24,40,.10)}
.tx-bar.sticky::before{content:"";position:absolute;left:0;right:0;top:-14px;height:14px;background:#fff}

.tx-bar-l{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap}
.tx-bar-r{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tx-fld{display:block}
.tx-fld > span{display:block;font-size:12px;color:var(--mut);margin-bottom:4px}
.tx-fld select,.tx-fld input{min-width:150px}
.tx-modes{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden}
.tx-modes button{appearance:none;border:0;background:#fff;color:var(--mut);font-family:inherit;
  font-size:13px;padding:8px 14px;cursor:pointer;transition:.15s;white-space:nowrap}
.tx-modes button + button{border-left:1px solid var(--line)}
.tx-modes button:hover{background:#fafcff}
.tx-modes button[aria-pressed="true"]{background:var(--brand);color:#fff;font-weight:600}
.tx-hint{font-size:12px;color:var(--dim)}

/* ==================== 学员卡 ==================== */
.tx-roster{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.tx-roster-head{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.tx-roster-head h3{font-size:14px}
.tx-roster-head p{margin:2px 0 0;font-size:12px;color:var(--dim)}

/* 学员搜索（2026-10-20）：输名字 / 英文名任意一段，卡片实时筛；回车进第一位 */
.tx-stu-search{position:relative;display:flex;align-items:center;margin-bottom:9px}
.tx-stu-search .tx-ss-ic{position:absolute;left:11px;font-size:13px;opacity:.55;pointer-events:none}
.tx-stu-search input{width:100%;padding:8px 34px 8px 32px;border:1px solid var(--line);border-radius:9px;
  background:#fbfcfe;font-size:13px;color:inherit;font-family:inherit}
.tx-stu-search input:focus{outline:none;border-color:var(--brand);background:#fff}
.tx-ss-x{position:absolute;right:6px;width:24px;height:24px;border:0;border-radius:7px;background:transparent;
  color:var(--dim);cursor:pointer;font-size:13px;line-height:1;font-family:inherit}
.tx-ss-x:hover{background:#eef2f8;color:var(--ink)}

/* 搜索框 + 「选学员 ▾」（2026-10-20）：名单默认收起，一个搜索框就够 */
.tx-pick{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.tx-pick .tx-stu-search{flex:1 1 auto;margin-bottom:0;min-width:0}
.tx-pick-btn{flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;padding:8px 12px;
  border:1px solid var(--line);border-radius:9px;background:#fbfcfe;color:inherit;
  font:inherit;font-size:13px;cursor:pointer;white-space:nowrap;transition:.15s}
.tx-pick-btn:hover{border-color:#c9d8f5;background:#fafcff}
.tx-pick-btn b{font-weight:600;font-variant-numeric:tabular-nums}
.tx-pick-btn[aria-expanded="true"]{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}
.tx-pick-car{font-size:10px;opacity:.7;line-height:1}
/* 收起时那一行「现在在考谁」 */
.tx-picked{padding:8px 11px;border-radius:9px;background:#f7f9fd;border:1px dashed var(--line);
  font-size:13px;color:var(--dim)}
.tx-picked b{color:var(--ink);font-weight:600}
.tx-picklist[hidden],.tx-picked[hidden],.tx-ss-x[hidden]{display:none}
/* type=search 自带的清除叉不要 —— 我们自己有一个，否则出现两个 ✕ */
.tx-stu-search input[type="search"]::-webkit-search-cancel-button,
.tx-stu-search input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}

.tx-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:8px}
.tx-stu{display:flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line);border-radius:10px;
  padding:8px 10px;cursor:pointer;font-family:inherit;text-align:left;transition:.15s;color:inherit}
.tx-stu:hover{border-color:#c9d8f5;background:#fafcff}
.tx-stu[aria-pressed="true"]{border-color:var(--brand);background:var(--brand-soft)}
.tx-stu-av{flex:0 0 30px;height:30px;line-height:30px;text-align:center;border-radius:9px;font-size:12px;font-weight:600;
  background:#eef3fb;color:#4a6fa8}
.tx-stu-av.a1{background:#eef0ff;color:#4a52a8}
.tx-stu-av.a2{background:#eaf7f2;color:#2f7f63}
.tx-stu-av.a3{background:#fdf3e6;color:#9a6a16}
.tx-stu-body{min-width:0;flex:1}
.tx-stu-body b{display:block;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tx-stu-body small{display:block;font-size:11px;color:var(--dim)}
.tx-stu-score{flex:0 0 auto;font-size:15px;font-weight:600;color:var(--txt)}
.tx-stu-score small{font-size:10px;font-weight:400;color:var(--dim);margin-left:1px}
.tx-attempts{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:10px;
  padding-top:10px;border-top:1px dashed var(--line)}
.tx-attempts > b{font-size:12px;color:var(--mut);font-weight:600}
.tx-attempt{appearance:none;font-family:inherit;font-size:12px;border:1px solid var(--line);background:#fff;
  color:var(--mut);border-radius:20px;padding:3px 10px;cursor:pointer;transition:.15s}
.tx-attempt:hover{border-color:#c9d8f5}
.tx-attempt[aria-pressed="true"]{background:var(--brand-soft);color:var(--brand-deep);border-color:var(--brand)}

/* ==================== 元信息 ==================== */
.tx-meta{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}
.tx-meta .tx-fld select,.tx-meta .tx-fld input{min-width:130px}
.tx-score{display:flex;align-items:center;gap:6px}
.tx-score input{width:86px;min-width:0!important}
.tx-score span{font-size:12px;color:var(--dim)}
.tx-status{display:flex;gap:14px;align-items:center;font-size:12px;color:var(--mut);
  margin-left:auto;flex-wrap:wrap}
.tx-status b{font-size:14px;color:var(--txt)}
.tx-dirty{color:var(--warn);font-weight:600}
.tx-saved{color:var(--ok);font-weight:600}

/* ==================== 历史错音复查 ==================== */
.tx-reviews{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.tx-reviews h3{font-size:14px}
.tx-reviews h3 small{font-size:11px;color:var(--dim);font-weight:400;margin-left:6px}
.tx-reviews > p.tx-sub{margin:2px 0 0;font-size:12px;color:var(--dim)}
.tx-rv-group{border:1px solid var(--line);border-radius:10px;margin-top:8px;overflow:hidden}
.tx-rv-group > summary{cursor:pointer;padding:9px 12px;background:#fbfcfe;list-style:none;transition:.15s}
.tx-rv-group > summary::-webkit-details-marker{display:none}
.tx-rv-group[open] > summary{border-bottom:1px solid var(--line2)}
.tx-rv-top{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tx-rv-top strong{font-size:13px}
.tx-rv-top .tx-chipcat{font-size:11px;color:var(--mut);background:var(--line2);border-radius:20px;padding:1px 8px}
.tx-rv-top b{font-size:11px;color:var(--danger);background:var(--danger-soft);border-radius:20px;padding:1px 8px}
.tx-rv-words{margin:4px 0 0;font-size:12px;color:var(--mut)}
.tx-rv-meta{margin:3px 0 0;font-size:11px;color:var(--dim)}
.tx-rv-body{padding:10px 12px;background:#fff}
.tx-rv-sent{margin-bottom:8px}
.tx-rv-sent > b{display:block;font-size:11px;color:var(--dim);font-weight:600;margin-bottom:2px}
.tx-rv-sent p{margin:0;font-size:13px;line-height:1.9;word-break:break-word}
.tx-rv-sent mark{background:#ffe9b8;color:#8a5c11;padding:0 1px;border-radius:3px}
.tx-rv-card{border:1px solid var(--line2);border-radius:9px;padding:8px 10px;margin-top:6px;background:#fcfdff}
.tx-rv-card.is-fixed{border-color:#bfe7d5;background:#f4fcf8}
.tx-rv-card.is-practice{border-color:#f3d9a8;background:#fffbf3}
.tx-rv-loc{margin:0 0 6px;font-size:12px;color:var(--mut)}
.tx-rv-opts{display:flex;gap:6px;flex-wrap:wrap}
.tx-rv-opts button{appearance:none;font-family:inherit;font-size:12px;border:1px solid var(--line);background:#fff;
  border-radius:20px;padding:3px 11px;cursor:pointer;color:var(--mut);transition:.15s}
.tx-rv-opts button:hover{border-color:#c9d8f5}
.tx-rv-opts button[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:#fff}
.tx-rv-src{margin-top:8px;font-size:11px;color:var(--dim)}
.tx-rv-src summary{cursor:pointer}
.tx-rv-src p{margin:4px 0 0;line-height:1.6}
.tx-rv-absent{margin-top:10px;font-size:12px;color:var(--dim)}
.tx-rv-absent summary{cursor:pointer}
.tx-rv-absent p{margin:5px 0 0}

/* ==================== 工作区：上原文 / 下报告（一页流） ====================
   2026-10-29 改成纵向一页流：选人 → 原文标注 → 往下拉填报告，不用再来回翻。
   以前是「左原文 / 右面板」两栏，填报告时要上下左右一起找。 */
.tx-report{display:flex;flex-direction:column;gap:12px}
.tx-rep-head{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;flex-wrap:wrap;
  padding:2px 2px 0}
.tx-rep-head h3{font-size:15px;margin:0}
.tx-rep-head p{margin:3px 0 0;font-size:12px;color:var(--dim)}
.tx-foot{position:sticky;bottom:0;display:flex;justify-content:space-between;align-items:center;gap:10px;
  flex-wrap:wrap;padding:11px 13px;background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:0 -3px 12px rgba(20,40,80,.07)}
.tx-foot-l{font-size:12px;min-width:0}
.tx-foot-r{display:flex;gap:8px;flex-wrap:wrap}
.tx-auto{font-size:11px;color:var(--dim);white-space:nowrap}
.tx-draft{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.tx-draft b{font-size:13px}

/* 共同问题（双人 / 多人） */
.tx-common-card{padding:0}
.tx-common-h{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;
  padding:12px 14px;border-bottom:1px solid var(--line2)}
.tx-common-h h3{font-size:14px;margin:0}
.tx-common-list{padding:8px 14px 12px}
.tx-common-row{border:1px solid var(--line2);border-radius:10px;padding:9px 11px;margin-bottom:8px;background:#fbfcfe}
.tx-common-row:last-child{margin-bottom:0}
.tx-common-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tx-common-top b{font-size:13px;color:var(--brand-deep)}
.tx-common-tip{font-size:12px;color:var(--mut)}
.tx-common-n{margin-left:auto;font-size:11px;color:var(--dim)}
.tx-common-who{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.tx-common-p{display:flex;align-items:center;gap:6px;flex-wrap:wrap;border:1px solid var(--line);border-radius:20px;
  padding:3px 10px;background:#fff}
.tx-common-p b{font-size:12px}
.tx-common-cnt{font-size:12px;font-weight:700;color:var(--brand-deep)}

/* 整词问题：词下面那条线
   🔴 必须绝对定位、不能 display:block —— .tx-tok 是 display:inline，
   里面有 block 子元素会把「一行一句」拆成「一词一行」，线还会横贯整个容器。 */
.tx-tok.is-word{position:relative;padding-bottom:4px}
/* 每一个单词下面都有这条线（只要 kind=word 就画，18 篇文本通用）；
   没标记时也要看得清（#b9c6d6），否则老师会以为只有标过的词才有。 */
.tx-uw{position:absolute;left:0;right:0;bottom:-1px;height:7px;padding:0;border:0;border-radius:2px;
  background:transparent;cursor:pointer;box-shadow:inset 0 -2px 0 #b9c6d6}
.tx-uw:hover{box-shadow:inset 0 -2px 0 var(--brand);background:#eef3fb}
.tx-uw.is-marked{box-shadow:inset 0 -3px 0 #e08a4a}
.tx-uw.is-marked.w-missed{box-shadow:inset 0 -3px 0 #c0563f}
.tx-uw.is-marked.w-other{box-shadow:inset 0 -3px 0 #a05ba8}
/* 整词标完：词本身给个浅底，三种问题用颜色区分（读错橙 / 漏掉红 / 读成别的词紫） */
.tx-tok.is-whole{background:#fff3e6;border-radius:3px}
.tx-tok.is-whole.w-missed{background:#fdecea}
.tx-tok.is-whole.w-other{background:#f6eefb}
.tx-uw-list{display:flex;flex-direction:column;gap:8px}
.tx-uw-opt{display:flex;flex-direction:column;gap:3px;text-align:left;appearance:none;font-family:inherit;
  border:1px solid var(--line);border-radius:10px;padding:9px 11px;background:#fff;cursor:pointer}
.tx-uw-opt:hover{border-color:var(--brand);background:#f7faff}
.tx-uw-opt.on{border-color:var(--brand);background:var(--brand-soft)}
.tx-uw-opt b{font-size:13px}

/* 滑动标注 */
.tx-swipe-tip{margin:0;padding:8px 14px;background:#fff8e8;border-bottom:1px solid var(--line2);
  font-size:12px;color:#7a5a12}
.tx-letter.is-swipe{background:#bcd6ff;color:#1b3a6b;font-weight:700}
.tx-doc.is-swipe .tx-text{-webkit-user-select:none;user-select:none;touch-action:pan-y}

/* 最近三天练习数据那个 ⏱ */
.tx-peek{appearance:none;border:0;background:#eef3fb;color:#40639b;font-family:inherit;font-size:12px;
  line-height:1;border-radius:20px;padding:2px 7px;margin-left:6px;cursor:pointer;vertical-align:middle}
.tx-peek:hover{background:var(--brand);color:#fff}

/* 双人选人：输入名字即筛 */
.tx-dual-list{display:flex;flex-direction:column;gap:5px;max-height:216px;overflow:auto;margin-top:7px}
.tx-dual-opt{display:flex;align-items:center;gap:7px;flex-wrap:wrap;text-align:left;appearance:none;
  font-family:inherit;border:1px solid var(--line);border-radius:9px;padding:6px 9px;background:#fff;cursor:pointer}
.tx-dual-opt:hover{border-color:var(--brand);background:#f7faff}
.tx-dual-opt.on{border-color:var(--brand);background:var(--brand-soft)}
.tx-dual-opt b{font-size:13px}

.tx-doc{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.tx-doc-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;
  padding:12px 14px;border-bottom:1px solid var(--line2)}
.tx-doc-head h3{font-size:14px}
.tx-doc-head .tx-doc-sub{font-size:12px;color:var(--dim);margin-left:6px;font-weight:400}
.tx-legend{display:flex;gap:12px;flex-wrap:wrap;padding:8px 14px;background:#fafcff;
  border-bottom:1px solid var(--line2);font-size:11px;color:var(--dim)}
.tx-legend u{text-decoration:underline;text-decoration-color:var(--brand);text-underline-offset:2px;color:var(--txt)}
.tx-legend b{color:var(--txt)}
.tx-lines{padding:6px 0}
.tx-line{display:grid;grid-template-columns:44px minmax(0,1fr);gap:10px;padding:9px 14px;border-bottom:1px solid var(--line2)}
.tx-line:last-child{border-bottom:0}
.tx-line.is-active{background:#f7faff}
.tx-rail{display:flex;flex-direction:column;align-items:center;gap:5px}
.tx-rail .tx-no{font-size:11px;color:var(--dim);font-variant-numeric:tabular-nums}
.tx-role{appearance:none;font-family:inherit;width:26px;height:22px;border-radius:6px;border:1px solid var(--line);
  background:#fff;font-size:11px;font-weight:600;cursor:pointer;color:var(--mut);transition:.15s}
.tx-role:hover{border-color:var(--brand);color:var(--brand)}
.tx-role.role-a{background:#eef3fb;color:#40639b;border-color:#dbe6f6}
.tx-role.role-b{background:#f4effb;color:#6a4d9b;border-color:#e7dcf6}
.tx-text{margin:0;font-size:15px;line-height:2.15;word-break:break-word;
  font-family:"SF Mono",Consolas,"Segoe UI",-apple-system,"Microsoft YaHei",sans-serif}
.tx-tok{display:inline;border:0;background:transparent;font:inherit;padding:1px 0;cursor:pointer;
  border-radius:4px;transition:background .12s;color:inherit}
.tx-tok:hover{background:#eef3fb}
.tx-tok.is-marked{background:#ffe9b8;box-shadow:inset 0 -2px 0 #e2b73f}
.tx-tok.is-selected{background:var(--brand-soft);box-shadow:inset 0 0 0 1px #b9cdf6}
.tx-tok.is-range-start{background:#d9e7ff;box-shadow:inset 0 0 0 1px var(--brand)}
.tx-tok.is-stress{text-decoration:underline;text-decoration-color:#9aa5b4;text-underline-offset:3px;text-decoration-thickness:1px}
.tx-tok.is-link,.tx-tok.is-tone,.tx-tok.is-pause{color:#8a94a6;font-weight:600}
.tx-letter{display:inline;border:0;background:transparent;font:inherit;padding:1px 0;cursor:pointer;
  border-radius:3px;transition:background .12s;color:inherit}
.tx-letter:hover{background:#dbe7fb}
.tx-letter.is-marked{background:#ffd98a;color:#5f4006;font-weight:700}
.tx-punct{color:var(--mut)}
.tx-quick{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px;padding-left:1px}
.tx-qp{display:inline-flex;border:1px solid var(--line);border-radius:20px;overflow:hidden;background:#fff}
.tx-qp.is-on{border-color:var(--brand);background:var(--brand-soft)}
.tx-qp-main{appearance:none;border:0;background:transparent;font-family:inherit;font-size:12px;color:var(--mut);
  padding:3px 4px 3px 10px;cursor:pointer;white-space:nowrap}
.tx-qp.is-on .tx-qp-main{color:var(--brand-deep);font-weight:600}
.tx-qp-exp{appearance:none;border:0;border-left:1px solid var(--line);background:transparent;font-family:inherit;
  font-size:11px;color:var(--dim);padding:3px 8px;cursor:pointer}
.tx-qp-exp:hover{background:#eef3fb;color:var(--brand)}
.tx-doc-foot{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;
  padding:9px 14px;border-top:1px solid var(--line2);background:#fafcff;font-size:11px;color:var(--dim)}

/* ==================== 报告区面板（原来在右侧，现在原文下面） ==================== */
.tx-side{display:flex;flex-direction:column;gap:12px}
.tx-panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.tx-tabs{display:flex;border-bottom:1px solid var(--line2)}
.tx-tabs button{appearance:none;border:0;background:#fff;font-family:inherit;font-size:13px;color:var(--mut);
  padding:10px 12px;cursor:pointer;transition:.15s;flex:1;white-space:nowrap}
.tx-tabs button:hover{background:#fafcff}
.tx-tabs button[aria-pressed="true"]{color:var(--brand-deep);font-weight:600;box-shadow:inset 0 -2px 0 var(--brand)}
.tx-tabs .tx-undo{flex:0 0 auto;padding:10px 12px;font-size:15px;color:var(--dim)}
.tx-tabs .tx-undo:hover{color:var(--brand)}
.tx-panel-body{padding:12px;max-height:62vh;overflow:auto}

.tx-target{border:1px solid var(--line);border-radius:10px;padding:9px 11px;background:#fbfcfe;margin-bottom:10px}
.tx-target-top{display:flex;justify-content:space-between;gap:8px;align-items:center;font-size:11px;color:var(--dim)}
.tx-target-top button{appearance:none;border:0;background:transparent;cursor:pointer;color:var(--dim);font-size:15px;line-height:1;padding:0 2px}
.tx-target-top button:hover{color:var(--danger)}
.tx-target-en{font-size:15px;margin-top:3px;word-break:break-word}
.tx-target-en small{display:block;font-size:11px;color:var(--dim);margin-top:2px}
.tx-refining{margin-top:6px;font-size:11px;color:var(--ok);background:var(--ok-soft);border-radius:7px;padding:5px 8px}
.tx-refining small{display:block;color:#4e8f77}

.tx-head2{font-size:11px;color:var(--mut);font-weight:600;margin:10px 0 6px;display:flex;
  justify-content:space-between;align-items:center;gap:8px}
.tx-head2 span{font-weight:400;color:var(--dim)}
.tx-head2 button{appearance:none;border:0;background:transparent;font-family:inherit;font-size:11px;
  color:var(--brand);cursor:pointer;padding:0}
.tx-letters{display:flex;gap:4px;flex-wrap:wrap}
.tx-letters button{appearance:none;font-family:inherit;min-width:26px;height:26px;border-radius:7px;
  border:1px solid var(--line);background:#fff;font-size:13px;cursor:pointer;color:var(--txt);transition:.15s}
.tx-letters button:hover{border-color:#c9d8f5}
.tx-letters button[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.tx-letters-note{margin:6px 0 0;font-size:11px;color:var(--dim)}
.tx-subsel{display:inline-block;margin-top:5px;font-size:11px;background:var(--brand-soft);color:var(--brand-deep);
  border-radius:6px;padding:2px 8px}

.tx-cats{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0 2px}
.tx-cats button{appearance:none;font-family:inherit;font-size:12px;border:1px solid var(--line);background:#fff;
  border-radius:20px;padding:3px 12px;cursor:pointer;color:var(--mut);transition:.15s}
.tx-cats button:hover{border-color:#c9d8f5}
.tx-cats button[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}

.tx-phon{border:1px solid var(--line2);border-radius:9px;background:#fbfcfe;margin-top:8px;overflow:hidden}
.tx-phon > summary{cursor:pointer;padding:7px 10px;font-size:12px;color:var(--mut);list-style:none}
.tx-phon > summary::-webkit-details-marker{display:none}
.tx-phon > summary strong{color:var(--brand-deep)}
.tx-phon-grid{display:flex;gap:4px;flex-wrap:wrap;padding:8px 10px;border-top:1px solid var(--line2)}
.tx-phon-grid button{appearance:none;font-family:inherit;font-size:12px;border:1px solid var(--line);
  background:#fff;border-radius:6px;padding:2px 7px;cursor:pointer;color:var(--mut)}
.tx-phon-grid button[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:#fff}
.tx-phon p{margin:0;padding:0 10px 8px;font-size:11px;color:var(--dim)}

.tx-problems{display:flex;flex-direction:column;gap:5px}
.tx-problems button{appearance:none;font-family:inherit;text-align:left;font-size:12px;border:1px solid var(--line);
  background:#fff;border-radius:8px;padding:6px 10px;cursor:pointer;color:var(--txt);transition:.15s;
  display:flex;gap:6px;align-items:center}
.tx-problems button:hover{border-color:#c9d8f5;background:#fafcff}
.tx-problems button[aria-pressed="true"]{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-deep);font-weight:600}
.tx-problems button i{font-style:normal;flex:0 0 14px;color:var(--dim)}
.tx-problems button[aria-pressed="true"] i{color:var(--brand)}

.tx-start{padding:18px 8px;text-align:center;color:var(--dim)}
.tx-start h3{font-size:13px;color:var(--mut);margin-bottom:5px}
.tx-start p{font-size:12px;margin:0 0 10px;line-height:1.7}

.tx-list-intro{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--mut);margin-bottom:8px}
.tx-list-intro b{color:var(--txt)}
.tx-nomark{padding:18px 8px;text-align:center;color:var(--dim);font-size:12px;line-height:1.8}
.tx-mk{border:1px solid var(--line);border-radius:10px;padding:9px 10px;margin-bottom:7px;background:#fff;transition:.15s}
.tx-mk.is-pri{border-color:#f0cf8a;background:#fffdf6}
.tx-mk-top{display:flex;justify-content:space-between;align-items:center;gap:6px;
  font-size:11px;color:var(--dim);margin-bottom:4px}
.tx-mk-top > span:first-child{font-weight:600;color:var(--mut)}
.tx-mk-acts{display:flex;gap:2px}
.tx-mk-acts button{appearance:none;border:0;background:transparent;cursor:pointer;font-size:14px;
  line-height:1;color:var(--dim);padding:1px 3px;border-radius:5px}
.tx-mk-acts button:hover{background:var(--line2);color:var(--txt)}
.tx-mk-acts button.on{color:#e2a217}
.tx-mk-ex{appearance:none;border:0;background:transparent;font-family:inherit;font-size:14px;text-align:left;
  cursor:pointer;color:var(--brand-deep);padding:0;word-break:break-word;line-height:1.6}
.tx-mk-ex:hover{text-decoration:underline}
.tx-mk-pb{font-size:12px;color:var(--txt);margin-top:3px}
.tx-mk-pb b{color:var(--brand-deep)}
.tx-mk-ac{font-size:11px;color:var(--mut);margin-top:5px;background:#f8fafd;border-radius:7px;padding:5px 8px;line-height:1.6}
.tx-mk-ac > span{display:block;font-size:10px;color:var(--dim);margin-bottom:1px}
.tx-mk-alt{appearance:none;border:0;background:transparent;font-family:inherit;font-size:11px;color:var(--dim);
  cursor:pointer;padding:4px 0 0;display:flex;align-items:center;gap:3px}
.tx-mk-alt:hover{color:var(--brand)}
.tx-mk-alts{display:flex;flex-direction:column;gap:4px;margin-top:5px}
.tx-mk-alts button{appearance:none;font-family:inherit;text-align:left;font-size:11px;border:1px solid var(--line);
  background:#fff;border-radius:7px;padding:5px 8px;cursor:pointer;color:var(--mut);line-height:1.5}
.tx-mk-alts button:hover{border-color:#c9d8f5;color:var(--txt)}
.tx-mk-alts button[aria-pressed="true"]{border-color:var(--brand);color:var(--brand-deep);background:var(--brand-soft)}

.tx-praise{border-top:1px solid var(--line2);padding:11px 12px;background:#fbfcfe}
.tx-praise h3{font-size:12px;color:var(--mut);margin-bottom:7px}
.tx-praise h3 span{font-weight:400;color:var(--dim);margin-left:5px}
.tx-praise-chips{display:flex;gap:5px;flex-wrap:wrap}
.tx-praise-chips button{appearance:none;font-family:inherit;font-size:12px;border:1px solid var(--line);background:#fff;
  border-radius:20px;padding:3px 10px;cursor:pointer;color:var(--mut);transition:.15s}
.tx-praise-chips button:hover{border-color:#c9d8f5}
.tx-praise-chips button[aria-pressed="true"]{background:var(--ok-soft);border-color:#9fd9c0;color:#0c6e49;font-weight:600}

/* 老师自己写的表扬：淡蓝虚线圈，跟预设项一眼能分开，右边带 × 可以删 */
.tx-own{display:inline-flex;align-items:stretch}
.tx-own > button[data-act="praise"]{border-radius:20px 0 0 20px;border-right:0;
  background:#eef4ff;border-color:#bcd0f7;color:var(--brand-deep);font-weight:600}
.tx-own > button[data-act="praise"]:hover{border-color:#9fbcfa}
.tx-own-del{border-radius:0 20px 20px 0;border-color:#bcd0f7;background:#eef4ff;color:var(--brand-deep)}
.tx-own-del:hover{background:#dde9ff}

/* 自填那一行：输入框 + 添加 */
.tx-own-add{display:flex;gap:6px;margin-top:7px}
.tx-own-add input{flex:1 1 auto;min-width:0;font-family:inherit;font-size:12px;color:var(--txt);
  border:1px solid var(--line);border-radius:9px;padding:6px 10px;background:#fff}
.tx-own-add input:focus{border-color:var(--brand);outline:none}
.tx-own-add input::placeholder{color:#a7b0c0}
.tx-own-add button{flex:0 0 auto;appearance:none;font-family:inherit;font-size:12px;cursor:pointer;
  border:1px solid var(--brand);background:var(--brand);color:#fff;border-radius:9px;padding:6px 13px;transition:.15s}
.tx-own-add button:hover{background:var(--brand-deep);border-color:var(--brand-deep)}
.tx-own-add button[disabled]{border-color:var(--line);background:#f2f4f8;color:#a7b0c0;cursor:default}
.tx-note{padding:9px 12px;border-top:1px solid var(--line2);font-size:11px;color:var(--dim);line-height:1.6;background:#fff}

/* ==================== 反馈预览 / 学生端 ==================== */
.tx-fb{max-width:760px;margin:0 auto}
.tx-fb-hero{background:linear-gradient(135deg,#2f6bff,#5b8bff);color:#fff;border-radius:var(--radius);
  padding:18px 20px;display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;box-shadow:var(--shadow)}
.tx-fb-hero h1{font-size:19px}
.tx-fb-hero p{margin:6px 0 0;font-size:12px;opacity:.9}
.tx-fb-score{text-align:right}
.tx-fb-score strong{font-size:34px;line-height:1}
.tx-fb-score span{display:block;font-size:11px;opacity:.85;margin-top:2px}
.tx-fb-sec{background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 16px;box-shadow:var(--shadow);margin-top:12px}
.tx-fb-sec > h2{font-size:15px;margin-bottom:8px}
.tx-fb-sec > h2 small{font-size:11px;color:var(--dim);font-weight:400;margin-left:6px}
.tx-fb-kicker{display:block;font-size:10px;letter-spacing:.08em;color:var(--dim);font-weight:700;margin-bottom:2px}
.tx-fb-grow p{margin:0 0 5px;font-size:13px;color:#0c6e49}
.tx-fb-pos{display:flex;flex-direction:column;gap:6px}
.tx-fb-pos span{display:flex;gap:7px;align-items:flex-start;font-size:13px;color:#0c6e49;background:var(--ok-soft);
  border-radius:9px;padding:7px 11px}
.tx-fb-pos span i{font-style:normal}
.tx-fb-note{font-size:12px;color:var(--dim);margin:6px 0 0}
.tx-fb-issue{border:1px solid var(--line);border-radius:10px;padding:11px 13px;margin-bottom:9px;background:#fff}
.tx-fb-issue.is-pri{border-color:#f0cf8a;background:#fffdf6}
.tx-fb-issue-top{display:flex;gap:7px;align-items:center;flex-wrap:wrap;font-size:11px;color:var(--dim)}
.tx-fb-issue-top .tx-fb-cat{background:var(--line2);border-radius:20px;padding:1px 8px;color:var(--mut)}
.tx-fb-issue-top .tx-fb-pri{background:#fdf3e2;color:#8a5c11;border-radius:20px;padding:1px 8px;font-weight:600}
.tx-fb-issue h3{font-size:16px;margin:6px 0 3px;word-break:break-word;font-weight:600}
.tx-fb-issue h3 mark{background:#ffe9b8;color:#5f4006;padding:0 1px;border-radius:3px}
.tx-fb-issue .tx-fb-prob{margin:0 0 7px;font-size:13px;color:var(--txt)}
.tx-fb-issue .tx-fb-prob strong{color:var(--brand-deep)}
.tx-fb-issue .tx-fb-act{margin:0;font-size:12px;color:var(--mut);background:#f8fafd;border-radius:7px;padding:6px 9px;line-height:1.6}
.tx-fb-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:9px}
.tx-fb-rec{appearance:none;font-family:inherit;text-align:left;background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:11px 13px;cursor:pointer;transition:.15s;color:inherit;box-shadow:var(--shadow)}
.tx-fb-rec:hover{border-color:#c9d8f5;transform:translateY(-1px)}
.tx-fb-rec h3{font-size:14px;margin:0 0 3px}
.tx-fb-rec p{margin:0;font-size:12px;color:var(--dim)}
.tx-fb-rec .tx-fb-rec-score{font-size:20px;font-weight:600;margin-top:6px}
.tx-fb-rec .tx-fb-rec-score small{font-size:11px;font-weight:400;color:var(--dim)}
.tx-fb-filter{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin-bottom:12px}
.tx-fb-gate{max-width:520px;margin:40px auto}
.tx-fb-bad{max-width:520px;margin:60px auto;text-align:center}
.tx-fb-bad h1{font-size:18px;margin-bottom:8px}
.tx-fb-page{max-width:1120px;margin:0 auto;padding:16px 16px 64px}
.tx-fb-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.tx-fb-brand{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600}
.tx-fb-brand .mk{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;border-radius:7px;
  background:var(--brand);color:#fff;font-size:12px;font-weight:700}

/* ==================== 双人考核 ==================== */
.tx-dual-people{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:760px){.tx-dual-people{grid-template-columns:1fr}}
.tx-dual-card{border:1px solid var(--line);border-radius:10px;padding:11px 12px;background:#fff;transition:.15s}
.tx-dual-card.is-active{border-color:var(--brand);background:#f7faff;box-shadow:0 0 0 3px var(--brand-soft)}
.tx-dual-card h4{margin:0 0 3px;font-size:14px}
.tx-dual-card p{margin:0;font-size:11px;color:var(--dim)}
.tx-dual-card .tx-dual-score{margin-top:6px;display:flex;align-items:center;gap:6px}
.tx-dual-card .tx-dual-score input{width:74px}
.tx-dual-card .tx-dual-count{font-size:11px;color:var(--mut);margin-top:4px}
.tx-dual-badge{display:inline-block;font-size:10px;background:var(--brand-soft);color:var(--brand-deep);
  border-radius:20px;padding:1px 8px;margin-left:6px;vertical-align:1px}
.tx-pair-records{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}
.tx-pair-records summary{cursor:pointer;font-size:13px;font-weight:600}
.tx-pair-row{display:flex;justify-content:space-between;align-items:center;gap:10px;width:100%;
  appearance:none;font-family:inherit;text-align:left;background:#fbfcfe;border:1px solid var(--line2);
  border-radius:9px;padding:8px 11px;margin-top:7px;cursor:pointer;font-size:12px;color:var(--mut)}
.tx-pair-row:hover{border-color:#c9d8f5}
.tx-pair-row b{color:var(--txt);font-size:13px}

/* ==================== 本课听说重点 + 原文点亮 ==================== */
.tx-focus{display:flex;gap:9px;align-items:center;flex-wrap:wrap;padding:8px 14px;
  background:linear-gradient(90deg,#f6faff,#fdfeff);border-bottom:1px solid var(--line2);font-size:12.5px;color:var(--mut)}
.tx-focus-tag{flex:0 0 auto;background:var(--brand);color:#fff;border-radius:6px;padding:2px 8px;font-size:11px;font-weight:600}
.tx-focus-txt{font-weight:600;color:var(--txt)}
.tx-focus .btn{margin-left:auto}
.tx-tok.is-focus{background:#fff6dd;border-radius:3px;box-shadow:inset 0 -2px 0 #f0c14b}
.tx-tok.is-focus.is-marked{background:#ffe9b8;box-shadow:inset 0 -2px 0 #e2b73f}
.tx-tok.is-focus.is-selected{background:var(--brand-soft);box-shadow:inset 0 0 0 1px #b9cdf6}

/* ==================== 学生状态（当次考核的心情 / 具体情况） ==================== */
.tx-mood{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}
.tx-mood + .tx-mood{margin-top:8px}
.tx-mood-head{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:9px}
.tx-mood-head b{font-size:14px}
.tx-mood-chips{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.tx-mood-chips .chip.pick{font-size:12.5px;padding:5px 13px}
.tx-mood-note{margin-top:10px}
.tx-mood-note input{width:100%;max-width:560px}

/* ==================== 学员历史考核记录（补充 / 修改） ==================== */
.tx-hist{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.tx-hist-head{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;flex-wrap:wrap}
.tx-hist-head h3{font-size:14px}
.tx-hist-head p{margin:2px 0 0;font-size:12px;color:var(--dim)}
.tx-hist-list{margin-top:10px;display:flex;flex-direction:column;gap:6px}
.tx-hist-row{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;
  border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:#fff;transition:.15s}
.tx-hist-row:hover{border-color:#c9d8f5;background:#fafcff}
.tx-hist-row.is-open{border-color:var(--brand);background:var(--brand-soft)}
.tx-hist-main{display:flex;gap:8px;align-items:center;flex-wrap:wrap;min-width:0}
.tx-hist-main b{font-size:13px}
.tx-hist-mood{font-size:12px;background:#eef7f1;color:#2f7f63;border-radius:20px;padding:2px 9px;white-space:nowrap}
.tx-fb-focus{margin:12px 0 0;padding:9px 13px;border-radius:10px;background:#f6faff;
  border:1px solid var(--line);font-size:13px;color:var(--brand-deep)}

/* ==================== 学生端统一入口：3 个大板块 ====================
   学生端只发一条链接。进来先选「你是谁」，然后看到 3 个大框：
     ① 课堂记录（内容之后接）② 考核叠楼（原来的预约功能一个都没少）③ 成长记录（反馈 + 学生秀）
   点进其中一个才显示那一块的内容 —— 一次只干一件事，界面保持简洁（用户明确要求）。
   栏头左边是「← 返回」回首页；「选第几周」搬进了②里面，默认落在「进行中」那一周。
   这套样式也在 booking.html 用（那个页面同时引 app.css 与 text.css）。 */
.ck-wrap.ck-wide{max-width:920px}

/* 首页：3 个板块卡片 */
.blk-home{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.blk-home[hidden]{display:none}
.blk-card{display:flex;align-items:center;gap:12px;text-align:left;font-family:inherit;color:var(--txt);
  min-width:0;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 14px;
  cursor:pointer;transition:.14s}
.blk-card:hover{border-color:#c9d8f5;background:#fafcff;box-shadow:0 6px 16px rgba(24,52,110,.07)}
.blk-card .blk-ic{font-size:26px;line-height:1;flex:0 0 auto}
.blk-card .blk-tx{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1 1 auto}
.blk-card .blk-tx b{font-size:15px}
.blk-card .blk-tx em{font-style:normal;font-size:12px;color:var(--dim)}
.blk-card .blk-go{flex:0 0 auto;font-size:18px;color:var(--dim)}
/* 手机上就一行一个，好点也好读（两个挤一行会让第 3 个孤零零） */
@media(max-width:560px){
  .blk-home{grid-template-columns:1fr}
  .blk-card{padding:14px 13px}
}
.blk-who{grid-column:1 / -1;justify-self:start;font-family:inherit;font-size:12.5px;color:var(--mut);
  background:none;border:0;padding:6px 2px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.blk-who:hover{color:var(--brand-deep)}

/* 内容区：一次只显示一块（data-view="" = 停在首页，内容全收起来） */
.gr-wrap{display:block}
.gr-wrap[data-view=""]{display:none}
.gr-col{display:none;min-width:0}
.gr-wrap[data-view="cls"] .gr-col.cls,
.gr-wrap[data-view="bk"] .gr-col.bk,
.gr-wrap[data-view="pr"] .gr-col.pr,
.gr-wrap[data-view="gr"] .gr-col.gr{display:block}

/* 栏头：左边「← 返回」，然后是这块的名字 */
.gr-head{display:flex;align-items:center;gap:9px;margin:0 0 10px;padding:0 2px}
.gr-back{flex:0 0 auto;font-family:inherit;font-size:13px;color:var(--brand-deep);background:#fff;
  border:1px solid var(--line);border-radius:9px;padding:5px 10px;cursor:pointer;transition:.14s}
.gr-back:hover{border-color:#c9d8f5;background:#fafcff}
.gr-head .ic{font-size:18px;line-height:1;flex:0 0 auto}
.gr-head .tx{display:flex;flex-direction:column;min-width:0;flex:1 1 auto}
.gr-head .tx b{font-size:14.5px}
.gr-head .tx em{font-style:normal;font-size:11.5px;color:var(--dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gr-close{flex:0 0 auto;font-family:inherit;font-size:12px;color:var(--mut);background:none;border:0;
  padding:5px 2px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.gr-close:hover{color:var(--brand-deep)}

/* 「课堂记录」还没接内容时的占位：虚线框，一眼看出是待补的 */
.gr-placeholder{border-style:dashed;background:#fcfdff}

/* 「考核叠楼」里的「第几周」 */
.wk-pick{margin-bottom:10px}
.wk-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:9px 12px}
.wk-line .wk-k{font-size:12px;color:var(--mut)}
.wk-line b{font-size:13.5px}
.wk-line .wk-t{font-size:12px;color:var(--dim)}

/* 右边栏：成长记录 */
.gr-hero h2{font-size:16px;margin:0}
.gr-hero p{margin:5px 0 0}
.gr-sec{display:flex;align-items:center;gap:9px}
.gr-sec .ic{font-size:17px;line-height:1;flex:0 0 auto}
.gr-sec .tx{display:flex;flex-direction:column;min-width:0}
.gr-sec .tx b{font-size:14px}
.gr-sec .tx em{font-style:normal;font-size:12px;color:var(--dim)}
.gr-list{display:flex;flex-direction:column;gap:7px}
.gr-item{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;text-align:left;
  font-family:inherit;color:var(--txt);background:#fff;border:1px solid var(--line);border-radius:11px;
  padding:10px 12px;cursor:pointer;transition:.14s}
.gr-item:hover{border-color:#c9d8f5;background:#fafcff}
.gr-item-main{display:flex;flex-direction:column;gap:3px;min-width:0}
.gr-item-main b{font-size:13.5px}
.gr-item-main em{font-style:normal;font-size:11.5px;color:var(--dim)}
.gr-item-score{flex:0 0 auto;font-size:18px;font-weight:600;color:var(--brand-deep)}
.gr-item-score small{font-size:11px;font-weight:400;color:var(--dim)}

/* ==================== 打分：标准条 + 原记录得分 → 修改分 + 评分明细 ====================
   口径：记了就按标准扣（不看学生哪一档）；系统判不出来的两项由老师人工判定。
   学生端只看得到「修改分」。 */
.tx-stdbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;background:#1b2430;color:#fff;
  border-radius:var(--radius);padding:9px 14px;margin-bottom:10px;font-size:13px}
.tx-stdbar > b{font-size:11px;letter-spacing:1px;color:#8fa6c8;font-weight:600}
.tx-stdbar i{font-style:normal;background:rgba(255,255,255,.12);border-radius:20px;padding:2px 11px;font-size:12.5px}
.tx-stdbar .tx-stdbar-sp{flex:1}
.tx-stdbar .tx-stdbar-note{font-size:12px;color:#8fa6c8}
.tx-stdbar .tx-stdbar-note b{color:#ffd479}

.tx-scorecard{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.tx-scorecard + .tx-scorecard{margin-top:10px}
.tx-sc-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.tx-sc-head > b{font-size:14px}
.tx-sc-head .tx-hint{font-size:12px;color:var(--dim)}
.tx-sc-live{margin-left:auto;font-size:12px;color:var(--mut)}
.tx-sc-live b{font-size:14px;color:var(--txt)}

.tx-lv-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}
@media(max-width:700px){.tx-lv-row{grid-template-columns:1fr}}
.tx-lv{appearance:none;text-align:left;font-family:inherit;cursor:pointer;background:#fff;
  border:1.5px solid var(--line);border-radius:10px;padding:8px 11px;transition:.15s;color:var(--txt)}
.tx-lv:hover{border-color:#c9d6e8}
.tx-lv[aria-pressed="true"]{border-color:var(--brand);background:var(--brand-soft);box-shadow:0 0 0 3px rgba(47,107,255,.08)}
.tx-lv b{display:block;font-size:14px;font-weight:600}
.tx-lv em{font-style:normal;display:block;font-size:11.5px;color:var(--mut);margin-top:2px}
.tx-lv[aria-pressed="true"] em{color:var(--brand-deep)}

.tx-scbar{display:flex;align-items:stretch;gap:10px;flex-wrap:wrap}
.tx-scchip{flex:0 0 auto;background:#f7f9fc;border:1px solid var(--line);border-radius:12px;padding:9px 13px;min-width:150px}
.tx-scchip.is-hot{background:linear-gradient(180deg,#f2f7ff,#eaf2ff);border:1.5px solid var(--brand);
  box-shadow:0 0 0 3px rgba(47,107,255,.07)}
.tx-sccap{display:block;font-size:11.5px;color:var(--mut);margin-bottom:4px}
.tx-sccap em{font-style:normal;font-size:10.5px;color:var(--dim)}
.tx-scnum{display:flex;align-items:baseline;gap:5px}
.tx-scnum b{font-size:36px;line-height:1;letter-spacing:-1.5px;font-weight:700;color:var(--txt)}
.tx-scchip.is-hot .tx-scnum b{color:var(--brand-deep)}
.tx-scnum span{font-size:12px;color:var(--dim)}
.tx-scsub{font-size:11.5px;color:var(--dim);margin-top:4px;line-height:1.6}
.tx-scsub b{color:var(--txt)}
.tx-scarrow{display:flex;align-items:center;font-size:19px;color:var(--dim);flex:none}
.tx-dim{color:var(--dim)}

.tx-sctags{display:flex;gap:5px;flex-wrap:wrap;margin-top:9px}
.tx-sctags i{font-style:normal;font-size:11px;background:var(--danger-soft);color:#a82c2c;border-radius:20px;padding:1px 8px}
.tx-sctags i.mute{background:var(--line2);color:var(--mut)}
.tx-sctags i.man{background:var(--brand-soft);color:var(--brand-deep)}
.tx-sctags i.up{background:var(--ok-soft);color:#0d7a52}

.tx-adjrow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:9px;
  padding-top:9px;border-top:1px dashed var(--line)}
.tx-adjcap{font-size:11.5px;color:var(--mut);flex:none}
.tx-adjcap em{font-style:normal;font-size:10.5px;color:var(--dim)}
.tx-adjn{font-size:13px;min-width:38px;font-weight:600;color:var(--txt)}
.tx-manitem{display:inline-flex;align-items:center;gap:4px;font-size:12px;background:#fff;
  border:1px dashed var(--line);border-radius:8px;padding:2px 7px 2px 9px}
.tx-manitem b{font-weight:600;color:var(--txt)}
.tx-manitem i{font-style:normal;min-width:28px;text-align:center;color:var(--brand-deep);font-weight:600}
.tx-mini{appearance:none;border:1px solid var(--line);background:#fff;border-radius:8px;
  padding:3px 10px;font-size:12px;cursor:pointer;font-family:inherit;color:var(--txt)}
.tx-mini:hover{border-color:#c9d6e8;background:#fafcff}
.tx-mini[disabled]{opacity:.4;cursor:default}
/* v20261010e：手动记录两行 —— 「手动加减」＋/− 就是加分/扣分；「直接改分」直接写最终分 */
.tx-manitem i.up{color:var(--ok)}
.tx-manitem i.down{color:var(--danger)}
.tx-manitem i.zero{color:var(--dim)}
.tx-fixscore{display:inline-flex;align-items:center;gap:5px;background:#fff;
  border:1.5px solid var(--brand);border-radius:8px;padding:1px 9px}
.tx-fixscore input{width:56px;border:0;outline:0;background:transparent;padding:0;
  font-family:inherit;font-size:17px;font-weight:700;color:var(--brand-deep);text-align:center}
.tx-fixscore input::-webkit-outer-spin-button,
.tx-fixscore input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.tx-fixunit{font-size:11.5px;color:var(--mut)}
.tx-fixnote{font-size:11.5px;color:var(--mut)}
.tx-fixnote b{color:var(--brand-deep)}
.tx-fixnote.dim{color:var(--dim)}
.tx-scnote{margin:11px 0 0;padding-top:10px;border-top:1px dashed var(--line);
  font-size:12px;color:var(--mut);line-height:1.8}
.tx-scnote b{color:var(--txt)}

.tx-rubric{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.tx-rubric-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:4px}
.tx-rubric-head h3{font-size:14px}
.tx-rc-who{font-size:13px;font-weight:600;color:var(--brand-deep);margin:10px 0 2px}
.tx-rdim{margin-top:14px;border-radius:var(--radius)}
.tx-rdim.is-focus{background:linear-gradient(180deg,#f2f7ff,#fbfdff);border:1.5px solid var(--brand);
  box-shadow:0 0 0 4px rgba(47,107,255,.07);padding:11px 13px 3px;margin-left:-13px;margin-right:-13px}
.tx-rdim-h{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:8px;
  font-size:13px;font-weight:600;color:var(--mut)}
.tx-rdim-h b{font-size:17px;color:var(--brand-deep)}
.tx-rdim-tip{font-weight:400;font-size:12px;color:var(--dim)}
.tx-rdim-sp{flex:1}
.tx-rdim-sum{font-weight:400;font-size:12px;color:var(--dim)}
.tx-dimtag{font-size:11px;border-radius:20px;padding:1.5px 9px;font-weight:600}
.tx-dimtag.s{background:var(--danger-soft);color:#a82c2c}
.tx-dimtag.x{background:var(--line2);color:var(--dim)}
.tx-dimtag.star{background:var(--brand);color:#fff}
.tx-rnote{margin:0 0 8px;font-size:12px;color:var(--dim);background:var(--line2);border-radius:8px;padding:6px 10px}
.tx-ritem{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px}
.tx-ritem.is-bad{border-color:#f2cdcd}
.tx-ritem.is-main{border-color:#cfe0ff;background:#fcfdff}
.tx-ritem-h{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.tx-ritem-h h4{margin:0;font-size:13.5px;font-weight:600}
.go{font-size:10.5px;border-radius:20px;padding:1px 8px;font-weight:600;white-space:nowrap}
.go-auto{background:var(--danger-soft);color:#a82c2c}
.go-manual{background:var(--brand-soft);color:var(--brand-deep)}
.go-mark{background:var(--line2);color:var(--mut)}
.tx-rcnt{font-size:12px;color:var(--mut);white-space:nowrap}
.tx-rcnt b{font-size:15px;color:var(--danger);margin:0 2px}
.tx-rcnt.zero b{color:var(--ok)}
.tx-rcnt.mark b{color:var(--warn)}
.tx-rcnt.done b{color:var(--brand-deep)}
.tx-rcnt.up b{color:var(--ok)}
.tx-rstd{margin:6px 0 0;font-size:12.5px;color:var(--mut);line-height:1.65}
.tx-rstd:before{content:"判定：";color:var(--dim)}
.tx-rfrom{margin:3px 0 0;font-size:11.5px;color:var(--dim)}
.tx-rok{margin:7px 0 0;font-size:12.5px;color:var(--ok)}
.tx-rok.dim{color:var(--dim)}
.tx-rok.ok{color:var(--ok)}

.tx-dual-card .tx-dual-score b{font-size:20px;font-weight:600;color:var(--brand-deep)}

/* ==================== 学生端：新版反馈（三项标准 + 按评级高亮） ==================== */
.tx-fb2{max-width:820px}
.tx-fb-std{margin-top:9px;display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-size:12.5px}
.tx-fb-std .tx-fb-stdk{font-size:11px;letter-spacing:1px;opacity:.8}
.tx-fb-std i{font-style:normal;background:rgba(255,255,255,.18);border-radius:20px;padding:2px 11px}
.tx-fb-std i.on{background:#fff;color:var(--brand-deep);font-weight:700}
.tx-fb-std em{font-style:normal;font-size:12px;opacity:.85}
.tx-fb-blks{display:flex;flex-direction:column;gap:11px;margin-top:12px}
.tx-fb-blk{background:#fff;border:1px solid var(--line);border-radius:14px;padding:13px 15px;box-shadow:var(--shadow)}
.tx-fb-blk.is-focus{border:2px solid var(--brand);box-shadow:0 0 0 5px rgba(47,107,255,.1)}
.tx-fb-blk.is-later{background:#fafbfd}
.tx-fb-blk.is-later h3{color:var(--mut)}
.tx-fb-blk h3{margin:0 0 4px;font-size:15px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tx-fb-blk h3 em{font-style:normal;font-size:12px;font-weight:400;color:var(--dim)}
.tx-fb-blk h3 .fstar{margin-left:auto;font-size:12px;font-weight:700;color:#fff;background:var(--brand);
  border-radius:20px;padding:2px 11px}
.tx-fb-bnote{font-size:12.5px;color:var(--brand-deep);background:var(--brand-soft);
  border-radius:8px;padding:6px 10px;margin:6px 0 2px}
.tx-fb-bnote.warn{background:var(--warn-soft);color:#8a5c11}
.tx-fb-bnote.mute{background:var(--line2);color:var(--mut)}
.tx-fb-row{display:flex;gap:10px;padding:9px 0;border-top:1px dashed var(--line2);align-items:flex-start}
.tx-fb-row:first-of-type{border-top:0}
.tx-fb-ic{flex:none;width:20px;text-align:center;font-size:14px;line-height:1.6}
.tx-fb-k{font-size:13px;font-weight:600;min-width:80px;flex:none}
.tx-fb-v{font-size:13px;color:var(--mut);line-height:1.75;flex:1;min-width:0}
.tx-fb-row.bad .tx-fb-k{color:#a82c2c}
.tx-fb-row.bad .tx-fb-v{color:var(--txt)}
.tx-fb-row.good .tx-fb-k{color:#0d7a52}
.tx-fb-row.good .tx-fb-v{color:var(--txt)}
.tx-fb-v b{color:var(--brand-deep)}
.tx-fb-fix{margin-top:3px;font-size:12.5px;color:var(--mut)}
.tx-fb-foot{margin-top:12px;background:#fff;border:1px dashed var(--line);border-radius:14px;
  padding:13px 16px;font-size:13px;color:var(--mut);line-height:1.9}
.tx-fb-foot b{color:var(--txt)}
.tx-fb-fixline{margin-top:2px}
.tx-fb-soft{margin-top:7px;color:var(--warn)}
.tx-fb-praise{margin-top:9px}
.tx-fb-praise .tx-fb-np{font-size:11.5px;color:var(--dim);margin-left:6px}
.tx-fb-tip{display:block;margin-top:9px;font-size:11.5px;color:var(--dim)}

/* ---------- 学员身上的目标（学生预约时自己写的） ---------- */
.tx-stu-body .tx-goal{display:block;color:var(--brand-deep);background:var(--brand-soft);
  border-radius:7px;padding:1px 7px;margin-top:3px;font-size:11.5px;line-height:1.5;
  white-space:normal;text-align:left;overflow:hidden;text-overflow:ellipsis}
.tx-goalbox{margin-top:10px;padding:10px 13px;border:1px solid #dbe7f8;border-radius:11px;background:#f7faff}
.tx-goal-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--brand-deep)}
.tx-goal-h em{font-style:normal;font-size:11.5px;color:var(--dim)}
.tx-goal-v{margin-top:5px;font-size:13.5px;line-height:1.75;white-space:pre-wrap;word-break:break-word}
.tx-goalbox .goal-tag{font-size:11px}
