/* ============================================================================
 * readability-boost.css —— 全站可读性提升（2026-10-23 用户令）
 * ----------------------------------------------------------------------------
 * 用户诉求：学员反馈「字体太小」。
 * 处理原则（按容器余量分两类，不搞一刀切）：
 *   ① 容器/按钮本身够大（有留白、min-height 富余）→ 只放大字号，不动盒子；
 *   ② 容器/按钮也小（文字贴边、高度只有 30px 上下）→ 字号与盒子一起放大。
 *
 * 字号阶梯（按原值分档，避免大小字挤在一起）：
 *   原 9-10px → 13px    原 11px → 13.5px    原 12px → 14px
 *   表格类密度高，只到 13px（再大会横向溢出）。
 *
 * 只改字号与必要的盒子尺寸；不改配色、不改栅格、不改交互。
 * 加载位置：index.html 最后一个 <link>（同选择器靠后覆盖，无需 !important）。
 * ⚠ 学习面 #stage1（固定 1180×500 画布）不在本文件范围 —— 那里放大字号会
 *   撑出画布，需按 learning-surface-fit 的缩放规则单独评估。
 * ==========================================================================*/

/* ==========================================================================
 * A 区：容器有余量，只放大字号
 * ==========================================================================*/

/* ---- A1 顶部导航：header 高 66px，按钮 min-height 36px ---- */
.header-tools {
  font-size: 14px;
}
.header-tools > span {
  font-size: 13.5px;
}
.workbench-header .brand div small {
  font-size: 13px;
}
.student-login-entry,
.student-profile-entry {
  font-size: 14px;
}
.global-search input {
  font-size: 14px;
}
.header-back-home {
  font-size: 14px;
}
.pwa-install-entry {
  font-size: 14px;
}

/* ---- A2 首页看板：卡片 128px 起，内容上下留白多 ---- */
body[data-current-view="home"] .home-heading span {
  font-size: 13.5px;
}
.dashboard-current__topline {
  font-size: 14px;
}
.dashboard-current > p {
  font-size: 14.5px;
}
.dashboard-progress span,
.dashboard-progress strong {
  font-size: 14px;
}
.dashboard-report-metrics small {
  font-size: 13px;
}
.dashboard-module small,
.dashboard-utility small {
  font-size: 14px;
}
body[data-current-view="home"] .home-compliance-note {
  font-size: 13.5px;
}

/* ---- A3 教材视图：页头、版本/册次选择器（min-height 50-54px） ---- */
/* Home typography only: preserve every existing card, grid and border. */
body[data-current-view="home"] .dashboard-module strong,
body[data-current-view="home"] .dashboard-utility strong { font-size: 24px; }
body[data-current-view="home"] .dashboard-module small { font-size: 17px; }
body[data-current-view="home"] .dashboard-report-metrics strong { font-size: 27px; }
body[data-current-view="home"] .dashboard-report-metrics small { font-size: 14px; }
@media (orientation: landscape) and (max-height: 620px) {
body[data-current-view="home"] .dashboard-current h2 { font-size: 23px; }
body[data-current-view="home"] .dashboard-current__topline,
body[data-current-view="home"] .dashboard-current > p,
body[data-current-view="home"] .dashboard-progress span,
body[data-current-view="home"] .dashboard-progress strong { font-size: 15px; }
body[data-current-view="home"] .dashboard-current > p strong { font-size: 19px; }
body[data-current-view="home"] .dashboard-current blockquote { font-size: 14px; }
}

.home-heading span,
.simple-view > header > span,
.home-section header span {
  font-size: 13.5px;
}
.selected-book span {
  font-size: 13.5px;
}
.edition-level > span {
  font-size: 14px;
}
.book-list .edition-menu button {
  font-size: 15px;
}
.volume-menu small {
  font-size: 14px;
}

/* ---- A4 单元卡：卡片 min-height 338px，成绩行 min-height 36px ---- */
.unit-attempts {
  font-size: 13.5px;
}
.unit-assessment b {
  font-size: 13px;
}
.unit-assessment small {
  font-size: 13px;
}
.unit-card > em {
  font-size: 13.5px;
}
.unit-score-row {
  font-size: 13px;
}
.unit-score-row > b {
  font-size: 13px;
}
.unit-score-row > small {
  font-size: 12.5px;
}
.unit-score-row > small strong {
  font-size: 15px;
}
.unit-score-row > em {
  font-size: 13px;
}
.unit-progress-copy b,
.unit-progress-copy small {
  font-size: 13.5px;
}

/* ---- A5 抗遗训练（复习）视图 ---- */
.review-metrics span {
  font-size: 14px;
}
.review-mode-picker span {
  font-size: 14px;
}
.review-batch-tabs small {
  font-size: 13px;
}
.review-queue em {
  font-size: 13.5px;
}
/* 九宫格：按钮 min-height 82px、每列约 108px 宽，字号放到 13 不挤 */
.review-nine-grid span,
.review-nine-grid em {
  font-size: 13px;
}
.review-group-actions button {
  font-size: 14px;
}

/* ---- A6 学情报告：原 12px 的正文辅助文字 ---- */
.report-page-head > span,
.rsx-hero-period,
.rsx-hero-cumulalign,
.rsx-metric-value em,
.rsx-freshness,
.rsx-block-note,
.rsx-card-note,
.rsx-stepcard-no,
.rsx-stepcard-head small,
.rsx-clegend,
.rsx-clegend b,
.rsx-wronglist > summary,
.rsx-weak-more > summary,
.rsx-wrongrow,
.rsx-ipa-row,
.rsx-confuse li,
.rsx-drill-rate em,
.rsx-unit-name,
.rsx-unit-clean,
.rsx-shape-row,
.rsx-shape-advice,
.rsx-attention-row,
.rsx-attention-more > summary,
.rsx-partial-row,
.rsx-diff,
.rsx-summary-rate em,
.rsx-status-item > span:first-child,
.rsx-verdict,
.rsx-empty p,
.rsx-disclosure-fold > summary,
.report-summary-row .rs-k,
.report-summary-row .rs-w {
  font-size: 14px;
}

/* 表格密度高，只到 13px（再大会横向溢出 860px 页面） */
.rsx-table,
.rsx-atable,
.rsx-thead,
.rsx-atable thead th,
.rsx-tr b span,
.rsx-tr em,
.rsx-tr.is-units span small {
  font-size: 13px;
}

/* ---- A7 学情报告：原 11px 的标签/徽标 ---- */
.rsx-panel-head .rsx-kicker,
.rsx-hero-range,
.rsx-metric-label,
.rsx-metric-note p,
.rsx-count,
.rsx-badge,
.rsx-action-meta dd,
.rsx-evidence,
.rsx-flag,
.rsx-norecord-mark,
.rsx-wronglist-more,
.rsx-times,
.rsx-ipa-pick,
.rsx-ipa-right,
.rsx-ipa-none,
.rsx-subtask > header b,
.rsx-subtask > p,
.rsx-drill-group span,
.rsx-drill-advice,
.rsx-phase,
.rsx-phase-note,
.rsx-unit-no,
.rsx-unit-stat,
.rsx-unit-steps,
.rsx-shape-count,
.rsx-summary-desc,
.rsx-summary-weak,
.rsx-status-item em,
.rsx-weak-item span,
.rsx-chip,
.rsx-disclosure-fold > summary em,
.rsx-disclosure-fold ul {
  font-size: 13.5px;
}

/* ---- A8 学情报告：原 10px 的注脚/计数 ---- */
.rsx-metric-label i,
.rsx-metric-note summary,
.rsx-kicker,
.rsx-badge i,
.rsx-action-label,
.rsx-action-meta dt,
.rsx-evidence-list code,
.rsx-mini-tag,
.rsx-wronglist > summary i,
.rsx-weak-more > summary::before,
.rsx-confuse-label,
.rsx-confuse li i,
.rsx-confuse li em,
.rsx-drill-rate i,
.rsx-dstat span,
.rsx-gmodule-stat,
.rsx-gmodule-note,
.rsx-shape-advice span,
.rsx-taps b,
.rsx-kind,
.rsx-card.is-collapsible > summary::after,
.rsx-weak-item em {
  font-size: 13px;
}

/* ---- A9 AI 精准测 / 错题练习 ---- */
.vst-donut .label,
.vst-stats .stat small,
.vst-history-head span,
.hint-guess,
.vst-range,
.vst-ab-row .fill,
.vst-ab-row .go,
.matrix th,
.matrix td.c,
.legend,
.cause .sub,
.wrong-card .meta,
.path-card small,
.path-card span,
.vst-disclaimer,
.pet-info small,
.vst-report-history button span,
.vst-report-history button time {
  font-size: 14px;
}
.wrong-card .tag {
  font-size: 13.5px;
}

/* ---- A10 句型练习：工具条与提示（画布内已可滚动，不裁切） ---- */
.grammar-mode-entry span,
.grammar-study-toolbar button,
.grammar-explanation-toolbar .grammar-pronunciation-round,
.grammar-follow-read__listen-hint,
.grammar-rec-history__row time,
.grammar-rec-history__row button,
.grammar-fingering__controls button {
  font-size: 14px;
}
.grammar-study-toolbar button small {
  font-size: 13px;
}
.grammar-fingering__status,
.grammar-fingering .grammar-teach-head__step,
.grammar-follow-read__meaning i,
.grammar-fingering__meaning i {
  font-size: 13.5px;
}

/* ==========================================================================
 * B 区：只给「本来就装不下」的极小按钮补一点内边距
 * ----------------------------------------------------------------------------
 * 2026-10-23 23:42 用户二次令：卡片 / 菜单 / 按钮的框本身能容下，
 * 就只放大字体，不要动盒子尺寸。
 * 因此单元卡按钮 height 40px、学段标签 min-height 42px、专项单元按钮
 * 38px、语法胶囊、句型页头标签一律保持原尺寸，只留 font-size 覆盖。
 * ==========================================================================*/

/* 顶部「家长绑定 / 退出」胶囊：原 padding 4px 9px，字号提到 13.5px 后
   上下只剩 3px，属于「框本身太小」，内边距同步加 1px */
.student-parent-entry {
  padding: 5px 10px;
  font-size: 13.5px;
}
.student-account button {
  padding: 5px 10px;
  font-size: 13.5px;
}

/* 首页报告区「查看完整报告」：min-height 32px 能容 13.5px 字，只加字号 */
.dashboard-report-summary header button {
  font-size: 13.5px;
}

/* 单元卡四联按钮：框 40px 高，14.5px 字上下余 11px ⇒ 只加字号 */
.unit-learning-actions button {
  font-size: 14.5px;
}

/* 教材页学段标签：框 42px 高，15.5px 字上下余 13px ⇒ 只加字号 */
.filter-row button {
  font-size: 15.5px;
}

/* 句型练习页头标签：只加字号 */
.grammar-fingering .grammar-teach-head__board {
  font-size: 13.5px;
}

/* 单元卡「语法待接入」胶囊：只加字号 */
.unit-grammar-progress {
  font-size: 13.5px;
}

/* ==========================================================================
 * C 区：学习面防出框（用户令：任何情况下「进入下一步」不许被裁）
 * ----------------------------------------------------------------------------
 * 现象：第 0 步（#stage0）内容高 493 逻辑像素 > 可用 460，底部
 *       「跟读 1 遍 + 进入下一步」被 overflow:hidden 裁掉一条。
 * 处理：只收紧块间距与内留白，共约 32 逻辑像素；不动
 *       learning-surface-fit 的等比缩放，不动 1180×500 画布尺寸，
 *       因此电脑 / 手机 / 平板横屏的适配逻辑完全不变。
 * ==========================================================================*/
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .lesson-group-tracker {
  margin-bottom: 6px;
}
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .overview-word {
  margin-block: 0 4px;
}
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .overview-meaning {
  padding: 6px 18px;
  margin-bottom: 4px;
}
/* 词义行高 1.35 → 1.2：长词义换行时省一行的高度 */
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .overview-meaning strong {
  line-height: 1.2;
}
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .accent-grid {
  margin-bottom: 0;
}
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .read-aloud {
  gap: 6px 18px;
  padding: 6px 14px;
}
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .practice-copy {
  gap: 2px;
  margin-bottom: 0;
}
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .overview-stage .practice-button {
  min-height: 46px;
  margin-top: 6px;
}
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) #stage0 {
  padding-block: 4px;
}

/* 兜底：词义特别长（换行多）时，宁可框内滚动一条，也不许把
   「进入下一步」裁掉。正常内容不会触发滚动条。 */
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) #stage0 {
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: thin;
}

/* ==========================================================================
 * C2 区：训练结果页防出框（2026-10-24 用户令）
 * ----------------------------------------------------------------------------
 * 现象：句型 / 口语 / 指法 / 全拼 四种训练结束后的「句型学习完成 100%」页，
 *       底部三个按钮被裁掉一半。四种模式共用同一个 #grammarResult。
 * 原因：`.grammar-result` 的 min-height = 100vh - 76px，而它并不从视口顶端
 *       开始（上方还留着一条 202px 的空区），两者相加超过视口高；
 *       外层 .special-training-run-view 是 overflow:hidden，超出的部分直接裁掉。
 * 处理：结果页不再按视口高度撑高，改成由内容决定高度并在剩余空间居中；
 *       外层容器在结果页显示时允许框内滚动做兜底。
 *       不改训练卡片（#grammarTrainingCard）的任何尺寸。
 * ==========================================================================*/
body[data-current-view="grammarRun"] .grammar-result {
  min-height: 0;
  height: auto;
  max-height: 100%;
  padding: 18px 20px;
  gap: 14px;
  overflow: visible;
  justify-content: center;
}

/* 结果页显示时才允许滚动：训练卡片仍在时保持原样，避免答题区跟着变 */
body[data-current-view="grammarRun"] .grammar-run-view:has(.grammar-result:not([hidden])) {
  overflow-y: auto !important;
  overscroll-behavior: contain;
  scrollbar-width: thin;
}

/* ==========================================================================
 * D 区：全站复查补漏（2026-10-23 第二轮，逐视图实测后再补）
 * ----------------------------------------------------------------------------
 * 用 Playwright 遍历 9 个主视图，抓所有可见且 ≤12.5px 的文本节点，
 * 再逐条核对容器余量。以下均为「容器有余量，只加字号」。
 * ==========================================================================*/

/* ---- D1 顶部「已同步」状态 ---- */
.student-account .student-sync-status {
  font-size: 13.5px;
}

/* ---- D2 单元卡成绩行（12.5 仍偏小，补到 13） ---- */
.unit-score-row > small {
  font-size: 13px;
}

/* ---- D3 单词本 ---- */
.wordbook-tabs button {
  font-size: 15px;
}
.wordbook-tabs b {
  font-size: 13px;
}
.wordbook-add label span {
  font-size: 13.5px;
}
.wordbook-toolbar div > span {
  font-size: 13.5px;
}

/* ---- D4 专项训练 / 句型练习的单元选择器 ---- */
.special-unit-buttons button small {
  font-size: 13.5px;
}
.special-training-selectors span {
  font-size: 13.5px;
}
/* 左列固定 82px：字号变大后「教材版本」被断成两行，禁止折断 */
.special-training-selectors section > span {
  white-space: nowrap;
}

/* ---- D5 学情报告（旧类：report-section / period-* / test-history-*） ---- */
.report-section > header span,
.report-inline-toggle span,
.word-collection-toolbar span,
.period-report-metrics article span,
.period-learning-analysis p strong {
  font-size: 13.5px;
}
.report-inline-toggle b,
.report-record-tabs button em,
.test-history-head span,
.test-history-table article time,
.test-history-table article span,
.word-collection-tabs button small,
.test-history-table article b small,
.weak-word-list button em,
.period-report-metrics strong small {
  font-size: 13px;
}
.report-generated {
  font-size: 13px;
}

/* ---- D6 「展开 / 0 条」小按钮：原 padding 4px 7px，四周太贴边 ---- */
.report-inline-toggle {
  padding: 5px 9px;
}

/* ---- D7 学情报告顶部三行汇总（单词学习 / 句型练习 / 语法练习） ----
   行高 = padding 16px×2 + 24px 数字，框内空间充足 ⇒ 只放大字体。 */
.report-summary-row .rs-n {
  font-size: 17px;
}
.report-summary-row .rs-k {
  font-size: 14.5px;
}
.report-summary-row .rs-w {
  font-size: 15px;
}

/* ---- D8 内容反馈弹窗（宽 620px，空间充足） ---- */
.content-feedback-dialog header span {
  font-size: 13.5px;
}
.feedback-context span {
  font-size: 13px;
}

/* ---- D9 登录页 / 家长登录页（portal.css 体系） ---- */
.portal-tabs button {
  font-size: 13.5px;
}
.portal-hint {
  font-size: 13.5px;
}
.login-panel label {
  font-size: 13.5px;
}
.login-panel .form-error {
  font-size: 13px;
}

/* Increase text without changing the layout system or border styling.
   Content-sized controls may grow naturally to retain legibility. */
.filter-row button,
.wordbook-tabs button,
.unit-learning-actions button { font-size: 16px; }

.unit-score-row > small,
.unit-score-row > b,
.unit-attempts,
.special-training-selectors span,
.special-unit-buttons button small,
.unit-grammar-progress,
.wordbook-add label span,
.wordbook-toolbar div > span { font-size: 15px; }

.rsx-metric-label,
.rsx-metric-note p,
.rsx-block-note,
.rsx-card-note,
.rsx-stepcard-head small,
.rsx-evidence,
.rsx-phase-note,
.report-generated,
.report-section > header span { font-size: 15px; }

.setting-list label small,
.review-nine-grid span,
.review-nine-grid em,
.library-list small { font-size: 15px; }

/* Fixed canvases: preserve existing line boxes as well as outer geometry. */
body:is([data-current-view="lesson"], [data-current-view="reviewPractice"]) .practice-copy span { font-size: 14px; line-height: 20.8px; }

.vst-stats .stat small,
.vst-history-head span,
.hint-guess,
.vst-range,
.vst-disclaimer,
.wrong-card .meta,
.path-card small,
.path-card span { font-size: 15px; }

/* Fixed training toolbars keep their approved sizing; do not inherit list rules. */

.login-panel label,
.portal-hint,
.portal-tabs button { font-size: 15px; }

/* Scrollable staff tables and textbook pickers. */
.table-row > span > small,
.institution-detail h3 small,
.tb-picker__summary,
.tb-step h4,
.tb-chip small,
.tb-group__name,
.tb-book,
.tb-hint { font-size: 14px; }

.parent-eyebrow,
.parent-student span,
.parent-manage-panel .rsnap-note { font-size: 14px; }
