/* 智慧升学 v1 —— 视觉对齐《UI效果图_v1.html》：主色 #2B5CE6 / 橙 #FF8A3D */

/* ==========================================================================
   设计令牌（2026-08-13 全站排版体系改造）
   ------------------------------------------------------------------------
   改造前：44K 样式表零变量、21 档硬编码字号、9 种灰、4 种圆角，
   且「小字设了好行高、大字全漏设」——标题 14px 反而比正文 16px 小。
   现在全站字号/行高/间距/颜色/圆角只准从这里取值，新增模块直接复用。
   ========================================================================== */
:root {
  /* 字号阶梯（6 档）。12px 是全站可读下限，不许再低 */
  --fs-display: 21px;    /* 报告 / 页面主标题 */
  --fs-section: 18px;    /* 章节标题（如「① 孩子差在哪」） */
  --fs-title:   16px;    /* 卡片标题 */
  --fs-body:    16px;    /* 正文（家长年龄段读着舒服，保持不变） */
  --fs-sm:      13.5px;  /* 说明 / 辅助文字 */
  --fs-caption: 12px;    /* 注释 / 元信息（下限） */

  /* 展示位：统计数值与品牌字，不属于正文阶梯，不参与上面 6 档收敛 */
  --fs-num-xl: 30px;
  --fs-num-lg: 24px;
  --fs-brand:  24px;

  /* 行高（3 档）。凡承载成段文字的元素都必须显式取值，不许留 normal(≈1.2) */
  --lh-tight:   1.35;  /* 标题 */
  --lh-body:    1.75;  /* 长正文 */
  --lh-compact: 1.6;   /* 密集小字 / 交互项 */

  /* 间距（4px 刻度）。margin / padding / gap 一律落在这上面 */
  --sp-1: 4px;   --sp-2: 8px;   --sp-3: 12px;  --sp-4: 16px;
  --sp-5: 20px;  --sp-6: 24px;  --sp-8: 32px;  --sp-10: 40px; --sp-12: 48px;

  /* 颜色。灰阶收敛为三档，括号内为对各自标注基底的实测对比度（WCAG AA 正文需 ≥4.5:1） */
  /* 🔴 2026-09-02 两套色板收敛为一套（UI 对齐效果图）。
     由来：v8 玻璃改造新增了 --accent/--t1/--t2/--t3（下方第二个 :root，取自
     效果图 UI-v7-液态玻璃-全屏定稿-20260831.html 的原表），但只有玻璃卡片改用了新的；
     其余 277 处仍引用这四个旧名 → 同屏两套绿、两套灰，家长一眼看得出「上下不是一个东西」。
     改法：**旧名保留为别名**，值统一指向 v8 那套 —— 一处改，277 处同时对齐，
     不用去动 277 个引用点（动引用点才是真会漏的做法）。
     对比度方向安全：四个新值都比旧值**更深**，对浅底的对比度只升不降，
     旧注释里那几个 WCAG 数字是下限而不是等号，故不会因此跌破 4.5。 */
  --c-brand:      var(--accent);   /* 旧 #2F5D50 → 现 #1F5346 */
  --c-brand-soft: #EAF0ED;
  --c-brand-deep: #14382F;         /* 旧 #24493F 比新的 --c-brand 还浅，会把「深色」画成浅色 */
  --c-ink:        var(--t1);       /* 旧 #1B2420 → 现 #0C1B16 */
  --c-ink-2:      var(--t2);       /* 旧 #41504A → 现 #3A4A43 */
  --c-ink-3:      var(--t3);       /* 旧 #5F6B66 → 现 #55655D */
  --c-line:       #E6E3DC;
  --c-bg-soft:    #FBFAF7;
  --c-warn-bg:    #F7EFE6;
  --c-warn-ink:   #8F5B27;  /* 对 --c-warn-bg 4.99:1 · 2026-08-31 重算：原 #B8763A 标注 4.64 是假数，
     实测仅 3.24，不到 WCAG 正文线 4.5，三轮评审全部漏查，见效果图同源整改 */

  /* 圆角（3 档）。🔴 2026-09-02 对齐效果图 :root{--r-lg:22px;--r-md:16px;--r-sm:10px}
     旧值 14/18 是 v1 时代的，v8 玻璃卡已经在各处硬写 22/16 绕开它 ——
     于是「玻璃卡 22、旁边按钮 14」，同屏两种圆角。改 token 一处，硬写的那些也就不必再加。 */
  --r-sm: 10px;  --r-md: 16px;  --r-lg: 22px;

  /* 触控目标最小高度（移动端标准） */
  --tap: 44px;
}

/* ==========================================================================
   液态玻璃 UI v8（2026-08-31 · UI 落地与上线方案 步骤1：只落地「今天」这一屏）
   参照 reports/UI-v7-液态玻璃-全屏定稿-20260831.html 的玻璃体系落地，不是照抄。
   圆角三档 / 4px 间距刻度沿用上面已有的 --r-sm/--r-md/--r-lg 与 --sp-*，不重复定义；
   这里只新增玻璃卡专属的强调色 token（v7 原表）与背景光斑层。 */
:root {
  --accent:   #1F5346;
  --accent-2: #2F7D68;
  --warn:     #8A5100;
  --t1:       #0C1B16;
  --t2:       #3A4A43;
  --t3:       #55655D;
  --glass:    rgba(255,255,255,.58);
  --edge:     rgba(255,255,255,.75);
}

/* 背景光斑层：v7 的 .aurora 四团模糊光晕。本轮只有首页用，挂在 #screen-home 上；
   #screen-home 可滚动，.aurora 只覆盖首屏可视高度（v7 原图同样的限制，不是本轮引入的新缺口）。 */
#screen-home { position: relative; }
#screen-home > .home-head,
#screen-home > .home-intent,
#screen-home > .today-pane,
#screen-home > .hm-dash,
#screen-home > .home-section-label,
#screen-home > .feature-cards { position: relative; z-index: 1; }
.aurora { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.aurora i { position: absolute; border-radius: 50%; filter: blur(58px); opacity: .5; }
.aurora .a1 { width: 260px; height: 260px; top: -60px;  left: -50px;  background: #7FD3B8; }
.aurora .a2 { width: 220px; height: 220px; top: 100px;  right: -70px; background: #9FD8E8; }
.aurora .a3 { width: 240px; height: 240px; top: 360px;  left: -70px;  background: #F2D6A8; }
.aurora .a4 { width: 200px; height: 200px; bottom: -50px; right: -40px; background: #A8CFC0; }

/* 玻璃卡：半透明 + 模糊 + 边缘高光。::after 是「像玻璃」而非「像半透明色块」的关键——
   顶部内高光，模拟玻璃厚度上表面的反光，漏了这条就只是个毛玻璃色块。 */
.glass {
  position: relative; overflow: hidden; border-radius: var(--r-lg);
  background: var(--glass); border: 1px solid var(--edge);
  -webkit-backdrop-filter: blur(26px) saturate(190%);
  backdrop-filter: blur(26px) saturate(190%);
  box-shadow: 0 8px 32px rgba(12,27,22,.10), 0 2px 8px rgba(12,27,22,.05);
}
.glass::after {
  content: ""; position: absolute; inset: 0 0 auto; height: 52%; pointer-events: none;
  background: linear-gradient(180deg, rgba(255,255,255,.55), rgba(255,255,255,0));
}
.glass > * { position: relative; z-index: 1; }

/* X5 回退（任务书硬约束）：微信安卓 X5 内核对 backdrop-filter 支持不完整，一旦失效，
   玻璃卡会变成半透明块、文字直接压在彩色光斑上——家长根本看不清。
   退成不透明白卡：边框/阴影仍在，只是不再透光，可读性优先于美观。 */
@supports not (backdrop-filter: blur(1px)) {
  .glass, .tabbar {
    background: rgba(255,255,255,.97) !important;
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
  }
}

* { margin: 0; padding: 0; box-sizing: border-box; }
[hidden] { display: none !important; } /* 保证 hidden 属性优先于 display:flex */

body {
  font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", -apple-system, sans-serif;
  /* 🔴 2026-09-02 第二次修：手机壳**外面**那一大片底色。
     前一轮我只改了 .screen（屏内）和 .phone（机身），漏了 body ——
     于是屏内是效果图的绿灰、屏外还是 v1 的蓝紫渐变 #eef2f9→#e4ebf7，
     桌面浏览器上一眼就是「手机是绿的、桌布是紫的」。
     漏的原因：本轮所有截图与门禁都跑在 390px 手机视口，那个宽度下
     手机壳铺满整屏，body 一个像素都露不出来，**结构上看不见这个缺陷**。
     效果图 body 是 #C9D6CF 平铺，这里给一点点起伏免得死板。 */
  background: linear-gradient(135deg, #CFDBD4 0%, #C9D6CF 52%, #D4DFD8 100%);
  background-attachment: fixed;
  min-height: 100vh; color: var(--c-ink);
  font-size: var(--fs-body); line-height: var(--lh-compact);
  -webkit-font-smoothing: antialiased;
}

/* B3-1（2026-08-21 版式扫描）：正文段落一行最大宽度。
   760px+ 桌面演示壳（B0 降级）下 .screen 铺满整个视口，纯正文 <p> 因此被拉到
   一行 50~60 字，中文正文超过 45 字/行就很难连续读。34em 是相对单位——不管
   font-size 落在哪一档（13.5px 说明文字还是 16px 正文），换算下来都稳定落在
   ~34 字/行，比写死 px 更抗字号漂移。只管文字元素本身，不加到卡片/表格/网格
   容器上，避免把已经调好的横条流又勒窄。 */
p { max-width: 34em; }

/* B3-4（2026-08-21 版式扫描）：长词/长路径名不断行导致横向溢出。
   命中样本：li「尖子生走竞赛班+强基（其他学科不能太瘸）」、h4「免费医学生
   （农村订单定向免费医学生）」、.ai-para——都是不含空格的长中文短语，浏览器
   默认按词断行时无处可断，直接撑破容器。 */
li, h4, .ai-para { overflow-wrap: anywhere; word-break: break-word; }

/* ---------- 手机壳舞台 ---------- */
.stage { display: flex; flex-direction: column; align-items: center; padding: var(--sp-10) var(--sp-4) var(--sp-12); }
/* B2（2026-08-23 F5 修复）：桌面壳下这行说明文字背景透明到根，1440 视口会跟屏内
   文案叠成一片。加不透明底 + 内边距留白，视觉上彻底脱离内容投影区。 */
.stage-caption { display: none !important; }
.phone {
  width: 350px;
  height: 730px;
  /* 当视口矮于 phone+stage边距（88px）时，外框收缩到恰好填满视口，
     避免手机底部落在窗口外且外层无法滚动的缺陷（2026-08-13 fix） */
  max-height: calc(100dvh - var(--sp-10) - var(--sp-12));
  /* 效果图 .device：机身 #0C120F、投影 rgba(12,27,22,.45)（绿黑），
     旧值是 v1 蓝调 rgba(30,50,110,.35)，跟绿色底一起看会发紫。 */
  background: #0C120F; border-radius: 48px; padding: 10px;
  box-shadow: 0 0 0 2px #2C3A33, 0 30px 60px -20px rgba(12,27,22,.45);
}
.screen {
  width: 100%; height: 100%; border-radius: 40px; overflow: hidden;
  /* 🔴 2026-09-02 UI 对齐效果图：底色从 v1 的蓝白 #f6f8fc 换成效果图的
     .screen{background:#EFF4F1}。这是「一眼就不一样」里最大的一块——
     整机底色是蓝调还是绿调，比任何单个组件都先被看到。
     另外把 aurora 的四团光晕同时画进**不滚动的这一层**：
     `.aurora` 是 `position:absolute` 挂在可滚动的 #screen-home 上，只覆盖首屏可视高度，
     往下滚就是纯底色（大圣 09-02 截图「上面好看下面像半成品」就是这个）。
     背景画在 .screen 上则铺满整个屏，滚多远都还在。 */
  background:
    radial-gradient(320px 300px at -8% -6%,   rgba(127,211,184,.42), transparent 70%),
    radial-gradient(280px 260px at 108% 12%,  rgba(159,216,232,.36), transparent 70%),
    radial-gradient(300px 280px at -10% 46%,  rgba(242,214,168,.30), transparent 70%),
    radial-gradient(260px 240px at 106% 92%,  rgba(168,207,192,.38), transparent 70%),
    #EFF4F1;
  display: flex; flex-direction: column; position: relative;
  /* 2026-08-22（大圣实测「昨天说过的横排怎么还是竖排」）：
     手机适配一直写在 `@media (max-width: …)` 里，看的是**视口宽度**。
     今晚把桌面手机壳改成默认开之后，壳内容器只有 370px，可视口是 1440px——
     `@media` 一条都不命中，于是「表格换成卡片」「四列折成字段块」这些昨天就做好的
     手机版式，在壳里全部失效，看到的还是给桌面用的四列表格挤成窄柱。
     改用容器查询：判据从「屏幕多宽」换成「这块内容区多宽」，
     真机 390px 与壳内 370px 都命中同一套规则，一次改两处都对。 */
  container-type: inline-size;
  container-name: screen;
}
.notch {
  display: none !important;
}
/* ---------- 屏切换 ---------- */
.app-screen { flex: 1; display: none; flex-direction: column; overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; min-height: 0; }
.app-screen.active { display: flex; }

/* B1（2026-08-23 F5 修复）：navbar 同理需要不透明背景 + 高于内容的层级，
   避免各屏聊天/建议 chip 在滚动边缘与标题条叠出「糊在一起的字」。 */
.navbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--sp-1) var(--sp-4);
  flex-shrink: 0;
  background: rgba(255, 255, 255, 0.88);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border-bottom: 1px solid var(--c-line);
  position: relative;
  z-index: 2;
}
.navbar .title { font-size: var(--fs-title); font-weight: 700; line-height: var(--lh-tight); }
.navbar .icon-btn {
  color: var(--c-ink-2); font-size: var(--fs-title); min-width: 32px; min-height: var(--tap);
  display: inline-flex; align-items: center; justify-content: center; cursor: pointer;
}

/* ---------- 屏1 首页 ---------- */
.home-head { padding: var(--sp-4) var(--sp-5) var(--sp-1); }
.home-head .appname { font-size: var(--fs-brand); font-weight: 800; color: var(--c-brand); margin-top: var(--sp-1); letter-spacing: 1px; }
/* 🔴 2026-09-02：首页主标题「今天」原为 --fs-display(21px)，其余三屏的主标题已经是
   效果图的 30px（.navbar .title），于是四屏里只有首页的标题小一圈。
   效果图 .head h1 = 30px/700/-.4px，四屏同一档。
   （这条是把尺子的配对键换成「文字+角色」之后才露出来的：原来按纯文字配对时，
   「今天」被配成了 tab 对 tab，页面标题这一档根本没进过比对。） */
.today-page-title {
  margin-top: var(--sp-4); font-size: 30px; font-weight: 700; letter-spacing: -.4px;
  line-height: var(--lh-tight);
  white-space: nowrap;
}
.today-pane { padding: var(--sp-3) var(--sp-4) 0; }
.today-card {
  padding: var(--sp-4); border: 1px solid var(--c-line); border-radius: var(--r-lg);
  background: var(--c-bg-soft); line-height: var(--lh-body);
}
.today-card[data-state="empty"], .today-card[data-state="confirmed"] { background: var(--c-brand-soft); }
.today-card[data-state="pending"], .today-card[data-state="error"] { background: var(--c-warn-bg); }
.today-badge {
  display: inline-flex; align-items: center; min-height: var(--sp-6); padding: 0 var(--sp-2);
  border-radius: var(--r-sm); background: var(--c-bg-soft); color: var(--c-ink-2);
  font-size: var(--fs-caption); font-weight: 700; line-height: var(--lh-compact);
}
.today-card h2 { margin-top: var(--sp-3); font-size: var(--fs-section); line-height: var(--lh-tight); }
.today-card h3 { margin-top: var(--sp-4); font-size: var(--fs-title); line-height: var(--lh-tight); }
.today-card > p { margin-top: var(--sp-2); color: var(--c-ink-2); font-size: var(--fs-sm); }
.today-card strong, .today-goal { color: var(--c-ink); font-weight: 800; }
.today-cta { margin: var(--sp-4) 0 0; width: 100%; }
/* 方案 v3 §三 第③态：「今天这一件」是首屏焦点，比整周清单更重，所以给实底卡而不是列表行。 */
.today-one {
  margin-top: var(--sp-3); padding: var(--sp-4);
  border: 1px solid var(--c-brand); border-radius: var(--r-lg); background: #fff;
}
.today-one-label {
  display: block; color: var(--c-brand); font-size: var(--fs-caption);
  font-weight: 700; line-height: var(--lh-compact);
}
.today-one-action {
  margin-top: var(--sp-2); color: var(--c-ink); font-size: var(--fs-title);
  font-weight: 700; line-height: var(--lh-tight); overflow-wrap: anywhere;
}
.today-one[data-today-one="rest"] { border-color: var(--c-line); }
.today-one[data-today-one="rest"] .today-one-label { color: var(--c-ink-3); }
.today-one[data-today-one="rest"] .today-one-action { color: var(--c-ink-2); font-size: var(--fs-sm); font-weight: 400; }
/* 第②态的次级按钮：报告入口是主行动，「继续补充情况」退一级，避免两个实心按钮抢焦点。 */
.ghost-btn {
  min-height: 44px; padding: 0 var(--sp-4); border: 1px solid var(--c-line);
  border-radius: var(--r-md); background: transparent; color: var(--c-ink-2);
  font-size: var(--fs-sm); font-weight: 700; cursor: pointer;
}
.ghost-btn.full { width: 100%; }
.today-cta-sub { margin-top: var(--sp-2); }
.today-progress {
  display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2);
  margin-top: var(--sp-4); color: var(--c-ink-2); font-size: var(--fs-sm);
}
.today-progress strong { color: var(--c-brand); font-size: var(--fs-num-lg); white-space: nowrap; }
.today-progress-track { height: var(--sp-2); margin-top: var(--sp-2); overflow: hidden; border-radius: var(--r-sm); background: var(--c-line); }
.today-progress-track span { display: block; height: 100%; border-radius: inherit; background: var(--c-brand); }
.today-actions { display: flex; flex-direction: column; gap: var(--sp-2); margin-top: var(--sp-2); list-style: none; }
.today-actions li { display: grid; grid-template-columns: 3.5em minmax(0, 1fr); gap: var(--sp-2); padding: var(--sp-2); border: 1px solid var(--c-line); border-radius: var(--r-sm); }
.today-actions li > span { color: var(--c-brand); font-size: var(--fs-sm); font-weight: 700; white-space: nowrap; }
.today-actions p, .today-observation { color: var(--c-ink-2); font-size: var(--fs-sm); line-height: var(--lh-compact); overflow-wrap: anywhere; }
.home-section-label { padding: var(--sp-5) var(--sp-4) 0; color: var(--c-ink-3); font-size: var(--fs-caption); font-weight: 700; }
.feature-cards { padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-4); flex: 1; }
.fcard {
  border-radius: var(--r-lg); padding: var(--sp-5); color: #fff; position: relative; overflow: hidden;
  cursor: pointer; transition: transform .25s ease; min-height: 120px;
  display: flex; flex-direction: column; justify-content: center;
}
.fcard:hover { transform: scale(1.025); }
/* 首页「已经做过体检？直接开聊」的次要口子：紧贴在体检卡下面，做成一行文字链接，
   不能长得像第二张主卡——那正是 08-18 要修掉的「两张卡不知道点哪个」。 */
/* U1（2026-08-23 F5 修复）：家长原话「先做体检又冒出直接开聊按钮，矛盾」——
   进一步降级视觉权重：居中、字号降到 caption 档、透明度调低，读起来是页脚级
   的小字链接，不再跟下面的橙卡形成「两个入口」的观感。 */
.home-skip-row { margin-top: calc(var(--sp-4) * -1 + var(--sp-2)); padding: 0 var(--sp-1); text-align: center; }
.home-skip-link {
  background: none; border: 0; padding: var(--sp-1) 0; cursor: pointer;
  font-size: var(--fs-caption); color: var(--c-ink-3); text-decoration: underline;
  text-underline-offset: 3px; font-family: inherit; opacity: .8;
  /* B3-3（0821 版式扫描）：实测触控高 27px，小于 44px 拇指最小触控区 */
  min-height: var(--tap); display: inline-flex; align-items: center;
}
.home-skip-link:hover { color: var(--c-brand); opacity: 1; }
.fcard .emoji {
  position: absolute; right: var(--sp-4); top: 50%; transform: translateY(-50%);
  font-size: 44px; opacity: .92; filter: drop-shadow(0 4px 8px rgba(0,0,0,.18));
}
/* 2026-08-31：内容从 emoji 字符换成内联 SVG（硬约束：首页 0 emoji）。
   .emoji 类名与容器尺寸原样保留，只是子节点从文字换成矢量图标。 */
.fcard .emoji svg {
  display: block; width: 40px; height: 40px;
  stroke: #fff; fill: none; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round;
}
.fcard h3 { font-size: var(--fs-display); font-weight: 800; letter-spacing: .5px; line-height: var(--lh-tight); }
/* R6（0822）：.emoji 绝对定位居中于卡片右侧（right:sp-4，宽约44px），
   而 h3/p 是 .fcard（flex-direction:column，align-items 默认 stretch）里的
   flex item，会被拉伸铺满卡片横向可用宽度，标题短还好，摘要文字换行到
   第二行时会在纵向上撞进图标的高度区间——形状是「文字底下压着图标」。
   注意这里必须用 margin-right 不能用 padding-right：全局 box-sizing:
   border-box 下，stretch 出来的 border-box 宽度已经把 padding 算在内，
   加 padding 只会让文字在盒子内部往左缩、盒子本身（getBoundingClientRect）
   右边界纹丝不动，量出来的重叠面积不变；margin 会在 stretch 计算可用宽度
   时被减掉，才能真正把整个盒子的右边界收窄，永远让在图标左边。 */
.fcard h3, .fcard p { margin-right: calc(var(--sp-4) + 44px + var(--sp-3)); }
.fcard p { font-size: var(--fs-sm); line-height: var(--lh-compact); opacity: .9; margin-top: var(--sp-2); }
/* U-CTA（2026-08-23 ux-accept X4 重跑逐像素实测）：原为 rgba(255,255,255,.22)
   ——白字压 22% 白蒙层，底色深浅全看卡片自己的渐变。实测：蓝卡 4.91:1 勉强过，
   橙卡「生成规划 →」只有 2.24:1、紫卡「开始测评 →」4.18:1，均低于 12px 文字
   要求的 4.5:1。白蒙层等于没有底，对比度是随卡色浮动的。
   改成深色蒙层：白字任何卡色下都有稳定深底，与卡色解耦。实测见下方复验脚本。 */
.fcard .arrow {
  margin-top: var(--sp-3); font-size: var(--fs-caption); background: rgba(0,0,0,.45);
  display: inline-block; width: fit-content; padding: var(--sp-1) var(--sp-3); border-radius: 999px;
}
.fcard.blue { background: linear-gradient(135deg, #1F5346, #3E9C82); box-shadow: 0 10px 22px -8px #1F534688; }
.fcard.orange { background: linear-gradient(135deg, #2F7D68, #7FD3B8); box-shadow: 0 10px 22px -8px rgba(47,125,104,.53); }
.fcard.purple { background: linear-gradient(135deg, #1F5346, #2F7D68); box-shadow: 0 10px 22px -8px rgba(31,83,70,.53); }
.tabbar {
  display: flex; justify-content: space-around; padding: var(--sp-2) 0 var(--sp-6);
  /* 2026-08-31：玻璃化，配套 X5 回退（见上方 @supports not(backdrop-filter) 块，
     命中时整条规则连同 .glass 一起退成 rgba(255,255,255,.97) 不透明白）。 */
  /* 🔴 2026-09-02：不透明度从 .72 提到 .90（模糊按效果图取 28px）。
     效果图里 .tabbar 是滚动区 .body 的**兄弟**（flex:none，永远不与内容重叠），
     所以 .62 半透明很干净；产品这边 tabbar 是滚动容器 .app-screen 的最后一个孩子、
     靠 sticky 钉底，**内容会从它下面滚过去** —— .72 的白透出下方文字，
     首页实测「完成诊断后，这里会出现家庭系统画像」压在「今天」上成了叠字。
     结构上的差异改不了（要动 index.html，本轮 write-scope 不许），
     所以用不透明度兜住；仍保留玻璃模糊，底下的光晕色照样透上来。 */
  background: rgba(255,255,255,.90);
  -webkit-backdrop-filter: blur(28px) saturate(190%);
  backdrop-filter: blur(28px) saturate(190%);
  border-top: 1px solid var(--edge); flex-shrink: 0;
}
/* 🔴 2026-09-02 对齐效果图底部 tab（.tabbar .tab span）：
   未选中 11px/600/--t2，选中 11px/800/--accent。
   线上原为 12px/600(选中)/400(未选中)/--t3 —— 字大半档、选中态又不够重，
   底部 5 个 tab 是每屏都在的东西，差半档字号是最先被看出来的地方之一。
   11px 低于本表 12px 的正文下限，但 tab 是图标下的短标签、不是正文，效果图即取 11。 */
.tab {
  text-align: center; font-size: 11px; font-weight: 600; color: var(--t2); cursor: pointer;
  min-height: var(--tap); min-width: var(--tap);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
}
.tab .t-icon { display: block; margin-bottom: 2px; line-height: 0; }
.tab .t-icon svg {
  width: 22px; height: 22px; display: block; margin: 0 auto;
  /* B-4（2026-09-05 D11）：未激活态原用 --c-ink-3（--t3 #55655D），比效果图定的
     --t2 #3A4A43 浅一档，激活/未激活图标色差比文字色差更明显。 */
  stroke: var(--t2); fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round;
}
.tab.active { color: var(--accent); font-weight: 800; }
.tab.active .t-icon svg { stroke: var(--accent); stroke-width: 2.2; }
.family-tabbar { position: sticky; bottom: 0; z-index: 4; }
.family-tabbar .tab { flex: 1; min-width: 0; padding: 0 var(--sp-1); white-space: nowrap; }

/* ---------- 首页仪表盘：四块可视化（2026-08-31，只做首页这一屏） ---------- */
.hm-dash { padding: 0 !important; margin: 0 !important; display: flex; flex-direction: column; gap: 0 !important; }
.hm-card { padding-bottom: var(--sp-3); }
.hm-ch { display: flex; align-items: center; justify-content: space-between; padding: var(--sp-3) var(--sp-4) 0; gap: var(--sp-2); }
/* 效果图图表卡标题 .ch .ct = 15px/700；线上取 --fs-title(16px) 偏大半档 */
.hm-ct { font-size: 15px; font-weight: 700; color: var(--t1); letter-spacing: -.1px; }
.hm-cs { font-size: var(--fs-caption); color: var(--t2); font-weight: 600; text-align: right; }
.hm-loading { padding: var(--sp-5) var(--sp-4); color: var(--t3); font-size: var(--fs-sm); }

/* 空态：拿不到真实数据一律走这里，禁止塞假数字/示例文案（任务硬约束）。 */
.hm-empty { padding: var(--sp-5) var(--sp-4) var(--sp-4); text-align: center; }
.hm-empty svg { opacity: .45; }
/* 效果图空态 .empty .et = 14px/600、.empty .es = 12px/500 */
.hm-empty .hm-et { font-size: 14px; font-weight: 600; color: var(--t1); margin-top: var(--sp-2); }
.hm-empty .hm-es { font-size: var(--fs-caption); font-weight: 500; line-height: var(--lh-compact); color: var(--t2); margin-top: var(--sp-1); }

/* 雷达：家庭执行力六维 */
.hm-radar { display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-2) var(--sp-4) var(--sp-3); }
.hm-radar-fig { width: 128px; height: 128px; flex: none; }
.hm-legend { flex: 1; min-width: 0; }
.hm-lg { display: flex; align-items: center; gap: var(--sp-2); padding: 2px 0; }
.hm-lg .hm-nm { font-size: var(--fs-caption); color: var(--t2); width: 60px; flex: none; font-weight: 500; }
.hm-lg .hm-bar { flex: 1; height: 6px; border-radius: 3px; background: rgba(12,27,22,.10); overflow: hidden; }
.hm-lg .hm-bar i { display: block; height: 100%; border-radius: 3px; background: var(--accent); }
.hm-lg .hm-bar i.low { background: var(--warn); }
.hm-lg .hm-vl { font-size: var(--fs-caption); font-weight: 800; width: 14px; text-align: right; color: var(--t1); }
.hm-lg .hm-vl.low { color: var(--warn); }
.hm-conc {
  margin: 0 var(--sp-4) var(--sp-3); padding: var(--sp-3); border-radius: var(--r-sm);
  background: rgba(255,255,255,.55); border: 1px solid rgba(255,255,255,.7);
  font-size: var(--fs-sm); line-height: var(--lh-compact); color: var(--t1);
}
.hm-conc b { color: var(--warn); }

/* 九科条形：先攻（warn）/ 已稳（on）/ 暂缓（off，未填分数） */
.hm-bars { display: flex; align-items: flex-end; gap: 6px; height: 84px; padding: var(--sp-3) var(--sp-4) var(--sp-2); }
.hm-bars .hm-b { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; height: 100%; justify-content: flex-end; }
.hm-bars .hm-b .hm-col { width: 100%; border-radius: 5px 5px 0 0; background: rgba(31,83,70,.16); min-height: 4px; }
.hm-bars .hm-b .hm-col.on { background: linear-gradient(180deg, var(--accent-2), var(--accent)); }
.hm-bars .hm-b .hm-col.warn { background: linear-gradient(180deg, #C08A2E, var(--warn)); }
.hm-bars .hm-b .hm-col.off { background: repeating-linear-gradient(45deg, rgba(12,27,22,.10), rgba(12,27,22,.10) 3px, transparent 3px, transparent 6px); }
.hm-bars .hm-b .hm-nm { font-size: 10px; color: var(--t2); font-weight: 600; }
.hm-blg { display: flex; gap: var(--sp-3); padding: 0 var(--sp-4) var(--sp-3); font-size: var(--fs-caption); color: var(--t2); font-weight: 500; flex-wrap: wrap; }
.hm-blg i { display: inline-block; width: 8px; height: 8px; border-radius: 2px; margin-right: 4px; vertical-align: -1px; }

/* 升学路径匹配环：主路径 / 备选 / 保底 */
.hm-paths { display: flex; gap: var(--sp-2); padding: var(--sp-3) var(--sp-3) var(--sp-3); }
.hm-pth {
  flex: 1; text-align: center; border-radius: var(--r-md); padding: var(--sp-2) 4px;
  background: rgba(255,255,255,.5); border: 1px solid rgba(255,255,255,.68);
}
.hm-pth .hm-dial { width: 100%; aspect-ratio: 1; max-width: 64px; margin: 0 auto 6px; position: relative; }
.hm-pth .hm-dial .hm-n {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 16px; font-weight: 800; color: var(--t1);
}
.hm-pth .hm-lb { font-size: var(--fs-caption); font-weight: 700; color: var(--t1); }
.hm-pth .hm-sub { font-size: 11px; color: var(--t2); margin-top: 1px; font-weight: 500; }

/* 本周三件事 */
.hm-todo { padding: var(--sp-1) var(--sp-4) var(--sp-3); }
.hm-ti { display: flex; gap: var(--sp-2); padding: var(--sp-2) 0; align-items: flex-start; }
.hm-ti + .hm-ti { border-top: 1px solid rgba(12,27,22,.09); }
/* 44px 触控目标（硬约束）：可见方块只有 22px，靠 padding 把命中区撑到 44px，
   不能把方块本身画到 44px——那会比文字还显眼，喧宾夺主。 */
.hm-ck {
  width: 44px; height: 44px; flex: none; margin: -11px -11px -11px 0; cursor: pointer;
  display: flex; align-items: center; justify-content: center; border: 0; background: none; padding: 0;
}
.hm-ck::before {
  content: ""; width: 22px; height: 22px; border-radius: 7px;
  border: 1.8px solid rgba(12,27,22,.18); background: rgba(255,255,255,.5);
}
.hm-ck.done::before { background: var(--accent); border-color: var(--accent); }
.hm-ck svg { position: absolute; width: 12px; height: 12px; stroke: #fff; stroke-width: 2.6; fill: none; stroke-linecap: round; stroke-linejoin: round; display: none; }
.hm-ck.done svg { display: block; }
.hm-tt { flex: 1; min-width: 0; }
.hm-tt .hm-a { font-size: var(--fs-sm); line-height: var(--lh-compact); font-weight: 600; color: var(--t1); }
.hm-tt .hm-a.done { color: var(--t3); text-decoration: line-through; font-weight: 500; }
.hm-tt .hm-m { font-size: var(--fs-caption); line-height: var(--lh-compact); color: var(--t2); margin-top: 2px; }

/* ---------- 屏2 提分聊天 ---------- */
.chat-area {
  flex: 1; padding: var(--sp-3); overflow-y: auto; display: flex; flex-direction: column; gap: var(--sp-3);
  scrollbar-width: none;
}
.chat-area::-webkit-scrollbar { display: none; }
/* 滚动锚点用的弹性留白：高度由 JS 算，保证「问题置顶、答案从上往下读」能真的顶到顶 */
.chat-tail { flex-shrink: 0; height: 0; }
.msg { display: flex; gap: var(--sp-2); align-items: flex-start; flex-shrink: 0; }
.msg .avatar {
  width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700;
  background: linear-gradient(135deg, #1F5346, #358B74); color: #fff;
  box-shadow: 0 2px 6px rgba(31,83,70,0.18);
  margin-top: 2px;
}
.bubble {
  max-width: 84%; padding: 10px 14px; border-radius: 14px;
  font-size: 13.5px; line-height: 1.58;
  background: rgba(255, 255, 255, 0.96); color: var(--c-ink); border-top-left-radius: 4px;
  border: 1px solid rgba(226, 232, 240, 0.85);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.04); white-space: pre-wrap; word-break: break-word;
}
.msg.user { justify-content: flex-end; }
.msg.user .bubble {
  background: linear-gradient(135deg, #1F5346 0%, #167448 100%); color: #fff;
  border: none;
  border-radius: 14px; border-top-right-radius: 4px;
  box-shadow: 0 2px 8px rgba(22, 116, 72, 0.22);
}
.diag-card {
  background: #fff; border-radius: var(--r-lg); padding: var(--sp-4); margin: 0 2px;
  box-shadow: 0 4px 14px rgba(40,60,120,.08); flex-shrink: 0;
}
.diag-card h4 {
  font-size: var(--fs-title); font-weight: 800; line-height: var(--lh-tight);
  margin-bottom: var(--sp-3); display: flex; align-items: center; gap: var(--sp-2);
}
.diag-card h4::before { content: ""; width: 4px; height: 16px; background: var(--c-brand); border-radius: 2px; }
.bar-row { margin-bottom: var(--sp-3); }
.bar-row .bar-label { display: flex; justify-content: space-between; font-size: var(--fs-caption); color: var(--c-ink-2); margin-bottom: var(--sp-1); }
.bar-row .bar-label b { color: var(--c-brand); }
.bar-track { height: var(--sp-2); background: #eef1f7; border-radius: 999px; overflow: hidden; }
.bar-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, #1F5346, #57B79A); animation: grow 1.2s ease; }
@keyframes grow { from { width: 0; } }
.diag-btn {
  width: 100%; margin-top: var(--sp-2); background: linear-gradient(180deg, #2F7D68, #1F5346);
  color: #fff; border: none; padding: var(--sp-3); border-radius: var(--r-md);
  font-size: var(--fs-title); font-weight: 700; min-height: var(--tap);
  cursor: pointer; box-shadow: 0 6px 20px rgba(31,83,70,.32);
}
.subject-chips { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-left: var(--sp-10); flex-shrink: 0; }
.s-chip {
  border: 1.5px solid #d7e2ff; background: #fff; color: var(--c-brand); font-size: var(--fs-sm); font-weight: 600;
  padding: var(--sp-2) var(--sp-4); border-radius: 999px; cursor: pointer; transition: all .15s ease;
  min-height: var(--tap); display: inline-flex; align-items: center;
}
.s-chip:hover { background: var(--c-brand); color: #fff; }
.stuck-row {
  display: flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: var(--sp-1); width: 100%;
  background: var(--c-bg-soft); border: 1.5px solid #e3e8f2; border-radius: var(--r-md); padding: var(--sp-3);
  margin-bottom: var(--sp-2); cursor: pointer; text-align: left; transition: all .15s ease; min-height: var(--tap);
}
.stuck-row:hover { border-color: var(--c-brand); background: #f0f5ff; }
.stuck-row .stuck-name { font-size: var(--fs-title); font-weight: 700; color: var(--c-brand); line-height: var(--lh-tight); }
.stuck-row .stuck-sig { font-size: var(--fs-sm); color: var(--c-ink-3); line-height: var(--lh-compact); }
.stuck-row .stuck-sig.clamp {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.stuck-row .sig-more { font-size: var(--fs-caption); color: var(--c-brand); font-weight: 600; cursor: pointer; }

/* 批0-2（2026-08-29）：卡点行上的方案预览。与识别信号拉开层次——
   信号是「像不像你家孩子」，预览是「选了之后要做什么」，两块不能糊成一片，
   所以加一条左边线并整体缩进，视觉上归成卡点行的下挂内容。 */
.stuck-row .stuck-prev {
  display: flex; flex-direction: column; gap: 5px; width: 100%;
  margin-top: var(--sp-2); padding: 8px 10px 9px var(--sp-2);
  border-left: 2px solid var(--c-brand, #1F5346);
  background: rgba(31, 83, 70, .045); border-radius: 0 8px 8px 0;
}
.stuck-row .stuck-prev .sp-label {
  font-size: var(--fs-caption); font-weight: 700; color: var(--c-brand); letter-spacing: .02em;
  margin-bottom: 1px;
}
.stuck-row .stuck-prev .sp-step {
  font-size: var(--fs-caption); color: var(--c-ink-2); line-height: 1.55;
}
.stuck-row .stuck-prev .sp-step::before { content: "· "; color: var(--c-brand); font-weight: 700; }
.stuck-row .stuck-prev .sp-meta {
  font-size: 11px; color: var(--c-ink-3); margin-top: 3px;
  align-self: flex-start; padding: 1px 8px; border-radius: 999px;
  background: rgba(31, 83, 70, .08);
}

/* 判定卡沿用诊断卡与卡点行，只给系统推荐和家长改判补一层状态。 */
.recommend-card { display: flex; flex-direction: column; gap: var(--sp-2); }
.recommend-card h4 { margin-bottom: var(--sp-1); }
.recommend-basis { background: var(--c-bg-soft); border-radius: var(--r-sm); color: var(--c-ink-2); font-size: var(--fs-sm); line-height: var(--lh-compact); padding: var(--sp-3); }
.recommend-options { display: flex; flex-direction: column; gap: var(--sp-2); }
.recommend-card .stuck-row { margin-bottom: 0; }
.recommend-card .stuck-row.is-recommended,
.recommend-card .stuck-row.is-selected { border-color: var(--c-brand); background: #f0f5ff; }
.recommend-tag { font-size: var(--fs-caption); font-weight: 700; color: var(--c-brand); }
.recommend-confirm:disabled { cursor: not-allowed; opacity: .55; box-shadow: none; }

/* ---- 提分行动方案图文卡（blocks 渲染） ---- */
.plan-card-h5 {
  background: #fff; border-radius: var(--r-lg); padding: var(--sp-4); margin: 0 2px;
  box-shadow: 0 6px 18px rgba(40,60,120,.10); flex-shrink: 0;
  display: flex; flex-direction: column; gap: var(--sp-3);
}

/* ---- C3：每日进度卡（附着在动态聊天流，不占固定页面容器） ---- */
.tf-progress-card {
  background: #fff; border: 1px solid #d7e2ff; border-radius: var(--r-lg); padding: var(--sp-4); margin: 0 2px;
  box-shadow: 0 6px 18px rgba(40,60,120,.10); display: flex; flex-direction: column; gap: var(--sp-2);
}
.tf-progress-head b { display: block; font-size: var(--fs-title); line-height: var(--lh-tight); }
.tf-progress-head span, .tf-progress-yesterday, .tf-progress-restart, .tf-progress-notice {
  display: block; color: var(--c-ink-2); font-size: var(--fs-sm); line-height: var(--lh-compact);
}
.tf-progress-tasks { padding-left: var(--sp-5); color: var(--c-ink); font-size: var(--fs-sm); line-height: var(--lh-body); }
.tf-progress-quality, .tf-progress-actor { color: var(--c-ink-2); font-size: var(--fs-sm); font-weight: 600; }
.tf-progress-quality input, .tf-progress-actor select { width: 100%; min-height: var(--tap); margin-top: var(--sp-1); border: 1px solid var(--c-line); border-radius: var(--r-sm); padding: 0 var(--sp-3); font: inherit; background: #fff; }
.tf-progress-done { color: var(--c-ink); font-size: var(--fs-sm); display: flex; align-items: center; gap: var(--sp-2); min-height: var(--tap); }
.tf-progress-submit { min-height: var(--tap); border: 0; border-radius: var(--r-sm); background: var(--c-brand); color: #fff; font-size: var(--fs-body); font-weight: 700; cursor: pointer; }
.tf-progress-submit:disabled { opacity: .6; cursor: wait; }
.tf-progress-card.is-degraded { border-color: #f0c36a; background: var(--c-warn-bg); }
.tf-progress-card.is-degraded .tf-progress-notice { color: var(--c-warn-ink); }
.pk-header { display: flex; align-items: flex-start; gap: var(--sp-3); }
.pk-badge {
  flex-shrink: 0; color: #fff; font-size: var(--fs-sm); font-weight: 800; letter-spacing: 1px;
  width: 40px; height: 40px; border-radius: var(--r-md); display: flex; align-items: center;
  justify-content: center; box-shadow: 0 4px 10px -3px rgba(30,50,110,.4);
}
.pk-head-main { flex: 1; min-width: 0; }
.pk-title { font-size: var(--fs-title); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); }
.pk-signal { font-size: var(--fs-sm); color: var(--c-ink-3); margin-top: var(--sp-1); line-height: var(--lh-compact); }

/* 分节：标题上边距远大于下边距 —— 亲密性原则，让标题视觉归属它下方的内容 */
.pk-sec { display: flex; flex-direction: column; }
.pk-sec > * + * { margin-top: var(--sp-2); }
.pk-sec-title {
  font-size: var(--fs-section); font-weight: 800; line-height: var(--lh-tight);
  color: var(--c-ink); margin: var(--sp-5) 0 var(--sp-2);
}
.pk-sec > .pk-sec-title + * { margin-top: 0; }
.plan-card-h5 > .pk-sec-title:first-child,
.form-card > .pk-sec-title:first-child { margin-top: 0; }
.pk-sec-no { font-style: normal; color: var(--c-brand); margin-right: var(--sp-1); }
.pk-sec p {
  font-size: var(--fs-body); line-height: var(--lh-body); color: var(--c-ink);
  margin: 0 0 var(--sp-3);
}
/* 2026-09-05 大圣裁定：初筛诊断单（#diag-body）上半截①②③正文比下半截「我是怎么
   判断的」（.ev-basis/.dp-pair-row，均 --fs-sm/--lh-compact）明显大一号，视觉断层。
   以下半截为准统一，只在诊断单容器内覆盖，不动 .pk-sec p 在 tifen.js/ai-rich.js
   里的既有用法（--fs-body 变量本身注释写明"保持不变"，不能改变量）。 */
#diag-body .pk-sec p {
  font-size: var(--fs-sm); line-height: var(--lh-compact);
}
/* 关键数字（"566分""还差96分"）：正文里挑出来加色加重，家长一眼能抓到 */
em.num { font-style: normal; font-weight: 700; color: var(--c-brand); }
/* 「结论」段单独成块，与①②③三段拉开 */
.pk-sec--summary {
  background: var(--c-brand-soft); border-radius: var(--r-md);
  padding: var(--sp-4); margin-top: var(--sp-5);
}
.pk-sec--summary .pk-sec-title { margin-top: 0; color: var(--c-brand); }

.pk-step {
  display: flex; gap: var(--sp-3); align-items: flex-start; background: var(--c-bg-soft);
  border: 1px solid var(--c-line); border-radius: var(--r-md); padding: var(--sp-3);
  line-height: var(--lh-body);
}
.pk-no {
  flex-shrink: 0; width: 32px; height: 32px; border-radius: 50%; font-size: var(--fs-title); font-weight: 800;
  display: flex; align-items: center; justify-content: center; line-height: 1;
}
.pk-step-body { flex: 1; min-width: 0; }
.pk-step-title { font-size: var(--fs-title); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); }
.pk-step-desc { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); margin-top: var(--sp-1); }
.pk-tip {
  background: var(--c-warn-bg); border: 1px solid #ffedb8; border-radius: var(--r-md);
  padding: var(--sp-3); font-size: var(--fs-sm); color: var(--c-warn-ink); line-height: var(--lh-body);
}
.pk-alt { border: 1.5px dashed #d7e0f2; border-radius: var(--r-md); overflow: hidden; }
.pk-alt-toggle {
  width: 100%; background: #f6f8fd; border: none; padding: var(--sp-3); cursor: pointer;
  font-size: var(--fs-sm); font-weight: 700; color: var(--c-brand); text-align: left; min-height: var(--tap);
}
.pk-alt-toggle i { font-style: normal; float: right; }
.pk-alt-body { padding: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2); }
.pk-alt-title { font-size: var(--fs-sm); font-weight: 700; color: var(--c-ink-2); line-height: var(--lh-compact); }
.pk-tasks { display: flex; flex-direction: column; gap: var(--sp-2); }
.pk-task {
  display: flex; gap: var(--sp-2); align-items: flex-start; font-size: var(--fs-sm); color: var(--c-ink-2);
  line-height: var(--lh-body); background: var(--c-bg-soft); border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3);
}
.pk-task .pk-box { color: var(--c-ink-3); font-size: var(--fs-title); line-height: var(--lh-tight); flex-shrink: 0; }
.pk-ai {
  background: #f0f6ff; border: 1px solid #d7e6ff; border-radius: var(--r-md); padding: var(--sp-3);
  display: flex; flex-direction: column; gap: var(--sp-2);
}
.pk-ai-title { font-size: var(--fs-title); font-weight: 800; color: var(--c-brand); line-height: var(--lh-tight); }
.pk-ai-item {
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); padding-left: var(--sp-3);
  border-left: 3px solid #b9d2fb;
}
.pk-disc {
  font-size: var(--fs-caption); color: var(--c-ink-3); line-height: var(--lh-compact);
  border-top: 1px dashed var(--c-line); padding-top: var(--sp-2);
}

/* U4（0821）：「我是怎么判断的」按「看了什么／发现什么／接下来核对什么」分组，
   复用既有 token（.f-label 字号 + .c-bg-soft 卡片背景），不新引入配色/圆角。 */
/* P1 把「判断依据」拆成独立条目后，条目起行会浪费句尾残余宽度，总高度容易超出改造前——
   靠压缩组间距找回空间：sp-3→sp-2，不影响可读性，只是三组标题之间的呼吸感略紧。 */
.dp-group + .dp-group { margin-top: var(--sp-2); }
.dp-group-title { font-size: var(--fs-sm); font-weight: 700; color: var(--c-ink-2); }
.dp-group-title + * { margin-top: var(--sp-1); }
/* D4/P3（0821）：「发现什么」是结论，视觉要跳出来——但区块总高度不许比改前增加，
   放弃会占竖向空间的 padding 背景盒，改用 .pk-ai-item 同款左侧强调边（border-left +
   padding-left，只占横向空间）+ 品牌色标题，字重/边框都是已有 token，不新引入配色。
   只加后代选择器，不改 .dp-group-title 自身 class（见 screening.js 里的断言注释）。 */
.dp-group--focus .dp-group-title { color: var(--c-brand); font-weight: 800; }
.dp-group--focus .ev-basis {
  border-left: 3px solid var(--c-brand); padding-left: var(--sp-2); color: var(--c-ink);
}
.dp-pair {
  background: var(--c-bg-soft); border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3);
}
.dp-pair + .dp-pair { margin-top: var(--sp-2); }
.dp-pair-row { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); }
.dp-pair-row + .dp-pair-row { margin-top: var(--sp-1); }
.dp-pair-row b { color: var(--c-ink); font-weight: 700; margin-right: var(--sp-1); }

/* ---- 意图层：真实案例卡 / 知识命中 / 下一步 chips ---- */
.intent-card {
  background: #fff; border-radius: var(--r-lg); padding: var(--sp-4); margin: 0 2px;
  box-shadow: 0 6px 18px rgba(40,60,120,.10); flex-shrink: 0;
  display: flex; flex-direction: column; gap: var(--sp-3);
}
.case-card {
  position: relative; background: #fffdf7; border: 1px solid #f2e7c9;
  border-left: 4px solid #e8a23d; border-radius: var(--r-md); padding: var(--sp-3);
  display: flex; flex-direction: column; gap: var(--sp-2);
}
.cc-badge {
  position: absolute; top: -1px; right: var(--sp-3); background: #e8a23d; color: #fff;
  font-size: var(--fs-caption); font-weight: 800; letter-spacing: 1px;
  padding: var(--sp-1) var(--sp-2); border-radius: 0 0 8px 8px;
}
.cc-title { font-size: var(--fs-title); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); padding-right: 64px; }
.cc-meta { font-size: var(--fs-sm); color: var(--c-ink-3); line-height: var(--lh-compact); }
.cc-meta b { color: #8a6d2b; font-weight: 700; margin-right: var(--sp-1); font-size: var(--fs-caption); }
.cc-essence { display: flex; flex-direction: column; gap: var(--sp-2); }
.cc-step { display: flex; gap: var(--sp-2); align-items: flex-start; }
.cc-no {
  flex-shrink: 0; width: 20px; height: 20px; border-radius: 50%; margin-top: var(--sp-1);
  background: #f6e8c8; color: #8a6d2b; font-size: var(--fs-caption); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
}
.cc-text { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); }
.cc-src { font-size: var(--fs-caption); color: var(--c-ink-3); border-top: 1px dashed #eee2c2; padding-top: var(--sp-2); }
/* GPT 自然回答气泡：正文同普通气泡，底部小字"依据"可点开折叠的参考卡 */
.llm-bubble { display: flex; flex-direction: column; }
.la-text { word-break: break-word; }
.la-src {
  margin-top: var(--sp-2); padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--c-line); background: var(--c-bg-soft);
  border-radius: var(--r-sm); cursor: pointer; white-space: normal;
  word-break: break-word; width: 100%; text-align: left;
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-compact);
}
.la-src:hover { color: var(--c-brand); }
.la-refs { margin-top: var(--sp-2); border-top: 1px dashed var(--c-line); padding-top: var(--sp-2); }
.la-refs .kh-item { background: var(--c-bg-soft); }
/* AI 补充段占位态（替代行内 style）*/
.ai-pending { color: var(--c-ink-3); font-style: italic; }
/* pk-sec-title 主题色通过 CSS 自定义属性传递，替代行内 style="color:..." */
.pk-sec-title--brand { color: var(--subject-color, var(--c-brand)); }
/* ---- AI 自由文本 → 卡片化渲染（js/ai-rich.js 输出，与 pk-* 同源视觉） ---- */
.ai-rich { display: flex; flex-direction: column; }
.ai-rich > * + * { margin-top: var(--sp-3); }

/* 小标题：emoji + 主题色，规格对齐 .pk-sec-title--brand */
.ai-sec-title {
  display: flex; align-items: baseline; gap: var(--sp-2); flex-wrap: wrap;
  font-size: var(--fs-section); font-weight: 800; line-height: var(--lh-tight);
  color: var(--subject-color, var(--c-brand));
}
.ai-rich > .ai-sec-title + * { margin-top: var(--sp-2); }
.ai-rich > * + .ai-sec-title { margin-top: var(--sp-5); }
.ai-sec-emoji { flex-shrink: 0; font-size: var(--fs-title); line-height: 1; }

/* 结论段：左边框引用块，规格对齐 .pk-ai-item */
.ai-lead {
  font-size: var(--fs-body); line-height: var(--lh-body); color: var(--c-ink);
  padding-left: var(--sp-3); border-left: 3px solid #b9d2fb;
}
.ai-para {
  font-size: var(--fs-body); line-height: var(--lh-body); color: var(--c-ink); margin: 0;
}

/* 列表项：灰底圆角卡。
   字号必须与 .ai-lead / .ai-para 同为 --fs-body ——AI 回复是「通篇读下来」的场景，
   不是模板卡那种「扫一眼」的场景。此前照搬 .pk-task 的 --fs-sm，正文 16px 与列表 13.5px
   在同一段回答里来回跳，家长看着就是「忽大忽小、很粗糙」。
   层次改由背景块 + 间距 + 圆点承担，不由字号承担。 */
.ai-cards { display: flex; flex-direction: column; gap: var(--sp-2); }
.ai-card {
  display: flex; gap: var(--sp-3); align-items: flex-start;
  font-size: var(--fs-body); color: var(--c-ink); line-height: var(--lh-body);
  background: var(--c-bg-soft); border-radius: var(--r-sm); padding: var(--sp-3);
}
.ai-card-dot {
  flex-shrink: 0; width: 6px; height: 6px; border-radius: 50%;
  background: var(--subject-color, var(--c-brand));
  /* 对齐首行文字的视觉中线：(16px × 1.75 - 6px) / 2 */
  margin-top: 11px;
}
.ai-step-badge {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: rgba(22, 116, 72, 0.12);
  color: var(--subject-color, #167448);
  font-size: 13px;
  font-weight: 800;
  line-height: 1;
  margin-top: 2px;
}
.ai-card-text { flex: 1; min-width: 0; }

.ai-strong { font-weight: 800; color: var(--c-ink); }
.ai-ref { color: var(--c-brand); font-weight: 700; white-space: normal; overflow-wrap: anywhere; }
.kh-list { display: flex; flex-direction: column; gap: var(--sp-2); }
.kh-item {
  background: var(--c-bg-soft); border: 1px solid var(--c-line); border-left: 4px solid var(--c-brand);
  border-radius: var(--r-md); padding: var(--sp-3); line-height: var(--lh-body);
}
.kh-title { font-size: var(--fs-title); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); }
.kh-snippet { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); margin-top: var(--sp-1); }
.kh-hint { font-size: var(--fs-caption); color: var(--c-brand); font-weight: 600; margin-top: var(--sp-1); }
.sg-wrap { margin-left: var(--sp-10); flex-shrink: 0; }
.sg-chips { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.plan-card-h5 .sg-chips { border-top: 1px dashed var(--c-line); padding-top: var(--sp-3); }
.sg-chip {
  border: 1.5px solid #d7e2ff; background: #f6f9ff; color: var(--c-brand); font-size: var(--fs-sm);
  font-weight: 600; padding: var(--sp-2) var(--sp-4); border-radius: 999px; cursor: pointer;
  transition: all .15s ease; min-height: var(--tap); display: inline-flex; align-items: center; justify-content: center;
}
.sg-chip:hover { background: var(--c-brand); color: #fff; }
/* 🔴 2026-09-04 大圣实拍「试卷证据」步：.sg-chip 本是居中的纯文字胶囊按钮，
   这里被当 <label> 包 checkbox/radio 用，justify-content:center 把「框+字」
   当一个整体居中，勾选框和换行文字对不齐、看着错位。只在真的包了勾选控件的
   .sg-chip 上改成「框左对齐+文字左对齐」，不碰其它纯文字胶囊按钮。 */
.sg-chip:has(> input[type="checkbox"]),
.sg-chip:has(> input[type="radio"]) {
  justify-content: flex-start; text-align: left; gap: 8px;
}
.sg-chip:has(> input[type="checkbox"]) > input,
.sg-chip:has(> input[type="radio"]) > input {
  flex: none; margin: 0;
}
.pk-lead { font-size: var(--fs-body); color: var(--c-ink-2); line-height: var(--lh-body); }
.pen {
  background: #fff; border: 1px dashed #cdd8ee; border-radius: var(--r-md); padding: 13px 15px;
  display: flex; align-items: center; gap: 5px;
}
.pen i { width: 6px; height: 6px; border-radius: 50%; background: #b8c4dc; display: block; animation: blink 1.3s infinite; }
.pen i:nth-child(2) { animation-delay: .18s; }
.pen i:nth-child(3) { animation-delay: .36s; }
.pen span { font-size: 13px; color: #6f7b93; font-style: italic; margin-left: var(--sp-1); }
.caret { display: inline-block; width: 2px; height: 1em; margin-left: 2px; background: var(--c-brand); vertical-align: -2px; animation: blink 1s infinite; }
.typing {
  display: flex; gap: var(--sp-1); padding: var(--sp-3) var(--sp-4); background: #fff; border-radius: var(--r-md);
  border-top-left-radius: 4px; width: fit-content; box-shadow: 0 2px 8px rgba(40,60,120,.06);
}
.typing span { width: 6px; height: 6px; background: #b9c2d8; border-radius: 50%; animation: blink 1.2s infinite; }
.typing span:nth-child(2) { animation-delay: .2s; }
.typing span:nth-child(3) { animation-delay: .4s; }
@keyframes blink { 0%, 60%, 100% { opacity: .3; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-3px); } }
.chat-input {
  margin: 0 var(--sp-3) var(--sp-5); background: #fff; border-radius: 999px;
  padding: var(--sp-1) var(--sp-1) var(--sp-1) var(--sp-4);
  display: flex; align-items: center; gap: var(--sp-2);
  box-shadow: 0 4px 14px rgba(40,60,120,.08); flex-shrink: 0; box-sizing: border-box; min-width: 0; max-width: 100%;
}
/* 输入框 16px 不只是排版：iOS Safari 对 <16px 的输入框会在聚焦时强制放大整页 */
.chat-input input { flex: 1; min-height: var(--tap); min-width: 0; border: none; outline: none; font-size: var(--fs-body); background: transparent; color: var(--c-ink); }
.chat-input input::placeholder { color: var(--c-ink-3); }
.chat-input .send {
  width: var(--tap); height: var(--tap); border-radius: 50%; border: none; cursor: pointer;
  background: var(--c-brand); color: #fff; font-size: var(--fs-title); flex-shrink: 0;
}

/* ---------- 屏3 升学规划 ---------- */
.planner-pane { flex: 1; display: flex; flex-direction: column; overflow-y: auto; min-height: 0; scrollbar-width: none; }
.planner-pane::-webkit-scrollbar { display: none; }
.form-card {
  margin: var(--sp-2) var(--sp-4); background: #fff; border-radius: var(--r-lg); padding: var(--sp-4);
  box-shadow: 0 4px 14px rgba(40,60,120,.07); display: flex; flex-direction: column; gap: var(--sp-3);
}
.f-label { font-size: var(--fs-sm); font-weight: 600; color: var(--c-ink-2); margin-top: var(--sp-1); }
/* H1（2026-08-23 F5 修复）：<small> 浏览器默认 font-size:smaller（约 83%），
   套在 13.5px 的 .f-label 上会掉到 ~11px，跌破全站 12px 可读下限，必须显式钉住。 */
.f-label small { font-size: var(--fs-caption); }
/* R4（0822）：U2（0821）把这里下调到 33px 制造了与 --tap(44px) 并存的第二条触控
   基线——提分链必经的九科分数框、年级/省份下拉全部低于 iOS/Android 公认的
   44px 最小热区。统一收回到 var(--tap)，全站只留一条基线。
   390px 下九科 27 格表是九宫格布局，加高后靠 .diag-exam-table 的窄列宽度
   （非高度）兜住不撑破一屏——已用真机渲染核对过。 */
.form-card select, .form-card input {
  border: 1px solid var(--c-line); border-radius: var(--r-sm); padding: 6px var(--sp-3);
  font-size: var(--fs-body); min-height: var(--tap);
  color: var(--c-ink); background: #f9fafd; outline: none; width: 100%;
}
.form-card select:focus, .form-card input:focus { border-color: var(--c-brand); }
.planner-concern { border: 0; padding: 0; margin: var(--sp-1) 0 0; min-width: 0; }
.planner-concern .f-label { padding: 0; }
.planner-concern .f-label small { font-weight: 400; opacity: .75; }
.planner-concern-options { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2); margin-top: var(--sp-2); }
.planner-concern-option {
  display: flex; align-items: center; gap: var(--sp-1); min-height: var(--tap); padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--c-line); border-radius: var(--r-sm); background: #f9fafd; color: var(--c-ink-2); font-size: var(--fs-sm); cursor: pointer;
}
.planner-concern-option input { accent-color: var(--c-brand); }
.planner-concern-hint { margin-top: var(--sp-1); color: var(--c-ink-3); font-size: var(--fs-caption); line-height: var(--lh-compact); }
/* 2026-08-22 大圣实测反馈：.form-hint 承载的早就不只是「记下了：浙江」这种短标签，
   还有「这一页只是初筛结论。接着和提分智能体聊…」这类成段正文。中文成句居中后
   每行起点都在动，眼睛没有固定的回行锚点，读起来不像正文像海报字幕。
   正文一律左对齐（与任务卡、方案卡的排版对齐）；padding 同步收窄，
   原来左右各 sp-6 是为居中留的对称留白，左对齐后会显得整段莫名内缩。 */
.form-hint { text-align: left; font-size: var(--fs-sm); color: var(--c-ink-3); padding: var(--sp-3) var(--sp-4); line-height: var(--lh-compact); word-break: keep-all; overflow-wrap: break-word; line-break: strict; }
/* H3（2026-08-23 F5 修复，「生成升学规划 →」等 .primary-btn 共用）：渐变右端
   #2F7D68 对白字实测最低 3.28:1。右端加深到 #2F7D68，逐像素实测右端最低
   5.0+:1，左端 #1F5346 本身已达标不动。 */
/* 🔴 2026-09-02 对齐效果图主 CTA（.cta）：
   渐变方向 180deg 浅→深（线上是 135deg 深→浅，正好反着，看上去「上面发暗」）、
   顶部 1px 内高光（inset 白线，玻璃体系里让按钮有厚度的那一笔，线上整条没有）、
   投影用品牌绿而不是黑。圆角走 --r-md，已随 token 从 14 改到效果图的 16。 */
.primary-btn {
  margin: var(--sp-3) var(--sp-4) var(--sp-5);
  background: linear-gradient(180deg, var(--accent-2), var(--accent)); color: #fff;
  border: none; padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md);
  font-size: var(--fs-title); font-weight: 700; min-height: var(--tap);
  cursor: pointer;
  box-shadow: 0 6px 20px rgba(31,83,70,.32), inset 0 1px 0 rgba(255,255,255,.25);
  flex-shrink: 0;
}
.primary-btn.full { margin: var(--sp-4) 0 var(--sp-1); min-height: 52px; }
.chips { display: flex; gap: var(--sp-2); padding: var(--sp-2) var(--sp-4) var(--sp-3); flex-shrink: 0; }
.chip {
  flex: 1; background: #fff; border-radius: var(--r-md); padding: var(--sp-3) var(--sp-2); text-align: center;
  box-shadow: 0 3px 10px rgba(40,60,120,.06);
}
.chip .c-label { font-size: var(--fs-caption); color: var(--c-ink-3); }
.chip .c-value { font-size: var(--fs-title); font-weight: 700; margin-top: var(--sp-1); color: var(--c-brand); }
.section-title {
  font-size: var(--fs-section); font-weight: 800; line-height: var(--lh-tight);
  padding: var(--sp-1) var(--sp-4) var(--sp-3); color: var(--c-ink); flex-shrink: 0;
}
.section-title small {
  display: block;
  font-weight: 400;
  color: var(--c-ink-3);
  font-size: var(--fs-caption);
  margin-top: 4px;
  margin-left: 0;
}
.path-list { padding: 0 var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3); }
.path-card {
  background: #fff; border-radius: var(--r-lg); padding: var(--sp-4); display: flex; align-items: center; gap: var(--sp-3);
  box-shadow: 0 4px 14px rgba(40,60,120,.07); position: relative; flex-shrink: 0;
}
.rp-path-gates { display: flex; flex-direction: column; gap: var(--sp-3); margin: var(--sp-3) 0; }
.rp-path-gate {
  background: #fff; border: 1px solid rgba(31,83,70,.12); border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
}
.rp-path-gate-top {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: nowrap; gap: var(--sp-2); margin-bottom: var(--sp-2);
}
.rp-path-gate-name {
  font-size: var(--fs-title); font-weight: 800; color: var(--c-ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  min-width: 0; flex: 1 1 auto;
}
.rp-path-gate-tag {
  white-space: nowrap !important; flex-shrink: 0 !important;
}
.rp-path-gate-desc {
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body);
}
.rp-cmp { display: flex; flex-direction: column; gap: var(--sp-3); margin: var(--sp-3) 0; }
.rp-cmp-row {
  background: #fff; border: 1px solid rgba(31,83,70,.12); border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
}
.rp-cmp-head {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: nowrap; gap: var(--sp-2);
}
.rp-cmp-name {
  font-size: var(--fs-title); font-weight: 800; color: var(--c-ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  min-width: 0; flex: 1 1 auto;
}
.rp-cmp-why {
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body);
  overflow-wrap: anywhere; margin-top: var(--sp-2);
}
.rp-cmp-grid {
  display: grid; grid-template-columns: 1fr; gap: 8px;
  margin-top: var(--sp-2); overflow-wrap: anywhere;
}
@media (min-width: 640px) {
  body:not(.shell-phone) .rp-cmp-grid { grid-template-columns: 1fr 1fr 1fr; }
}
.rp-cmp-grid ul { margin: 4px 0 0; padding-left: 1.2em; overflow-wrap: anywhere; }
.rp-cmp-more, .rp-cmp-note {
  font-size: var(--fs-sm); color: var(--c-ink-2); overflow-wrap: anywhere; margin-top: var(--sp-2);
}
.rp-gates-fold { margin: var(--sp-3) 0; }
.rp-gates-fold > summary {
  cursor: pointer; white-space: nowrap; flex-shrink: 0;
}
.rp-exam-items { display: flex; flex-direction: column; gap: var(--sp-3); margin: var(--sp-3) 0; }
.rp-exam-item {
  background: #fff; border: 1px solid rgba(31,83,70,.12); border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
}
.rp-exam-item-top {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: nowrap; gap: var(--sp-2); margin-bottom: var(--sp-2);
}
.rp-exam-item-name {
  font-size: var(--fs-title); font-weight: 800; color: var(--c-ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  min-width: 0; flex: 1 1 auto;
}
.rp-exam-item-tag {
  white-space: nowrap !important; flex-shrink: 0 !important;
}
.rp-exam-item-desc {
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body);
}
.rp-family-pack { display: flex; flex-direction: column; gap: var(--sp-3); margin: var(--sp-3) 0; }
.rp-family-pack-h {
  font-size: var(--fs-sm); font-weight: 800; color: var(--c-ink);
  white-space: nowrap; flex-shrink: 0;
}
.rp-family-pack-empty {
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body);
  margin: var(--sp-2) 0;
}
/* 08-17 排版收口：徽章原来绝对定位压在卡片圆角上，和标题抢视线；改成顶部一行的
   普通 chip，和标签、档位徽章排一起，标题因此能独占整行不再被圆环挤到换行。 */
.path-meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); margin-bottom: var(--sp-2); }
.path-rank {
  font-size: var(--fs-caption); color: #fff; font-weight: 700; line-height: 1.5;
  padding: 1px var(--sp-2); border-radius: 999px; background: var(--c-ink-3); flex-shrink: 0;
}
.path-rank.top1 { background: var(--c-brand); }
.path-rank.top2 { background: var(--accent-2); }
.path-info { flex: 1; min-width: 0; }   /* 徽章已不再绝对定位，顶部不用再留避让空间 */
/* 旧版 h4 用 display:flex 让标签紧跟名称、太长时挤到下一行——但「名称单独撑满一整行」正是
   flexbox 的已知边界情况：一堆 CJK 长名称在只有它自己独占一行时，浏览器不会对它做
   flex-shrink（反正换个新行也塞不下），于是原样溢出撑破容器（2026-08-11 排版扫描命中，
   免费医学生/农村订单定向免费医学生 等长路径名）。改用普通行内流：标签本来就是
   inline-block，直接和名称文字一起走浏览器原生的逐字换行，不必自己算 flex-shrink，
   也就不会再踩这个边界情况。2026-08-12 排版收口：修的是这里，不是砍字或藏起来。 */
.path-info h4 { font-size: var(--fs-title); font-weight: 800; line-height: var(--lh-tight); overflow-wrap: break-word; word-break: break-word; }
.path-tag { font-size: var(--fs-caption); padding: 2px var(--sp-2); border-radius: 999px; background: #eef3ff; color: var(--c-brand); font-weight: 600; white-space: nowrap; display: inline-block; margin-left: 2px; vertical-align: middle; }
.path-info p { font-size: var(--fs-sm); color: var(--c-ink-3); margin-top: var(--sp-2); line-height: var(--lh-compact); }
.path-note { font-size: var(--fs-caption); color: var(--c-warn-ink); margin-top: var(--sp-1); line-height: var(--lh-compact); }
/* 条件摘要：一条一行，左侧竖线统领，不再是一整坨橙色长文 */
.cond-brief {
  margin-top: var(--sp-3); padding: var(--sp-2) 0 var(--sp-2) var(--sp-3);
  border-left: 2px solid #f0c67a;
}
.cb-head { font-size: var(--fs-caption); font-weight: 700; color: var(--c-warn-ink); margin-bottom: var(--sp-1); }
.cb-item {
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-compact);
  padding: 3px 0 3px 12px; position: relative; overflow-wrap: break-word;
}
.cb-item::before { content: ""; position: absolute; left: 2px; top: 11px; width: 4px; height: 4px; border-radius: 50%; background: #e0a33c; }
.cb-more > summary { font-size: var(--fs-caption); color: var(--c-warn-ink); cursor: pointer; padding: 3px 0 3px 12px; list-style: none; }
.cb-more > summary::-webkit-details-marker { display: none; }
.cb-more[open] > summary { font-weight: 600; }
.cb-note { font-size: var(--fs-caption); color: var(--c-ink-3); margin-top: var(--sp-1); }
/* 08-17：圈内原来同时塞百分数和「匹配度」三个字，内圈只有 40px 宽而三个字 12px 就要
   36px，直接顶穿圆环，看着像重叠乱码（大圣人眼）。改为——数字进圈、标签出圈；
   字号固定 16px，「100%」四字符也只占约 36px，小于内圈 48px，任何数值都不会贴边。 */
.ring-wrap {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  flex-shrink: 0; align-self: flex-start; width: 64px;
}
.ring-cap { font-size: var(--fs-caption); color: var(--c-ink-3); line-height: 1.2; white-space: nowrap; }
.ring {
  width: 64px; height: 64px; border-radius: 50%; display: flex; align-items: center;
  justify-content: center; flex-shrink: 0; position: relative;
}
.ring::before { content: ""; position: absolute; inset: var(--sp-2); background: #fff; border-radius: 50%; }
.ring .pct {
  position: relative; font-size: 16px; font-weight: 800; line-height: 1.1;
  letter-spacing: -.02em; white-space: nowrap;
}
/* 2026-08-22：同 .form-hint —— 免责声明「以上内容仅用于阶段诊断与训练节奏参考，
   不构成结果承诺。」在 390px 下要折两行，居中后第二行缩进去一大块，
   像被截断的标语。改左对齐，和它上面的任务卡对齐同一条左边线。 */
.disclaimer { text-align: left; font-size: var(--fs-caption); color: var(--c-ink-3); padding: var(--sp-3) var(--sp-4) var(--sp-2); flex-shrink: 0; line-height: var(--lh-compact); }
.check-row { display: flex; flex-direction: column; align-items: stretch; gap: var(--sp-2); margin-top: var(--sp-2); }
.check-item { font-size: var(--fs-sm); color: var(--c-ink-2); display: flex; align-items: center; gap: var(--sp-2); cursor: pointer; width: 100%; justify-content: flex-start; min-height: var(--tap); }
.check-item input { accent-color: var(--c-brand); flex-shrink: 0; }
.form-card input[type="checkbox"], .form-card input[type="radio"],
.check-item input[type="checkbox"], .check-item input[type="radio"] {
  width: auto; min-width: 0; min-height: 0; flex: 0 0 auto;
  padding: 0; border: none; border-radius: 0; background: none;
}
.pnote {
  margin: 0 var(--sp-4) var(--sp-3); background: linear-gradient(135deg, #fff7ec, #fffdf8); border: 1px solid #ffe4bd;
  border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4); flex-shrink: 0;
}
/* H3（2026-08-23 F5 修复）：#a3660f 对 .pnote 渐变浅端 (#fff7ec) 只有 4.4:1。
   换成同色系更深的 --c-warn-ink，实测 4.5:1+。 */
.pnote h5 { font-size: var(--fs-title); font-weight: 800; color: var(--c-warn-ink); margin-bottom: var(--sp-2); line-height: var(--lh-tight); white-space: nowrap !important; }
.pnote p { font-size: var(--fs-sm); color: var(--c-warn-ink); line-height: var(--lh-body); text-align: left; word-break: break-word; }
.pnote .pn-sec {
  background: rgba(255,255,255,.65); border: 1px solid #f5e3c4; border-radius: var(--r-sm);
  padding: var(--sp-2) var(--sp-3); margin-top: var(--sp-2);
}
.pnote .pn-sub { font-size: var(--fs-sm); font-weight: 800; color: var(--c-warn-ink); margin-bottom: var(--sp-1); }
.pnote ul { padding-left: var(--sp-4); }
.pnote li { font-size: var(--fs-sm); color: var(--c-warn-ink); line-height: var(--lh-body); }
.pnote small { display: block; margin-top: var(--sp-2); font-size: var(--fs-caption); color: var(--c-ink-3); }
/* 户籍≠学籍的人工复核提示：比省情要点更强的红调，排在结果最前 */
.hukou-note {
  margin: 0 var(--sp-4) var(--sp-3); background: linear-gradient(135deg, #fff1f0, #fffafa);
  border: 1px solid #f6c9c4; border-left: 3px solid #c93c3c;
  border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4); flex-shrink: 0;
}
.hukou-note h5 { font-size: var(--fs-title); font-weight: 800; color: #a32c22; margin-bottom: var(--sp-2); line-height: var(--lh-tight); }
.hukou-note p { font-size: var(--fs-sm); color: #7d3a33; line-height: var(--lh-body); }
.hukou-note .hk-action {
  margin-top: var(--sp-2); background: rgba(255,255,255,.7); border: 1px solid #f0d2ce;
  border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3);
  font-size: var(--fs-sm); font-weight: 700; color: #a32c22;
}
.path-card.expandable { cursor: pointer; align-items: flex-start; }
.path-detail { margin-top: var(--sp-2); border-top: 1px dashed var(--c-line); padding-top: var(--sp-2); }
.cond { font-size: var(--fs-sm); line-height: var(--lh-compact); padding: 2px 0; overflow-wrap: break-word; }
.cond.pass { color: #1a8a62; }
.cond.fail { color: #c93c3c; }
.cond.ask { color: #a3660f; }

/* 路径详情分节：定位引言 / 优势✅ / 风险⚠️ / 时间线 / 流程要点 */
.pd-quote {
  background: #f2f6ff; border-left: 3px solid var(--c-brand); border-radius: 0 var(--r-sm) var(--r-sm) 0;
  padding: var(--sp-2) var(--sp-3); font-size: var(--fs-sm); color: #3a55a0; line-height: var(--lh-body); margin-bottom: var(--sp-2);
}
.pd-sub { font-size: var(--fs-sm); font-weight: 800; color: var(--c-ink-2); margin: var(--sp-2) 0 var(--sp-1); }
.pd-sub.good { color: #157a55; }
.pd-sub.risk { color: #a3660f; }
.pd-li { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-compact); padding: 2px 0; }
.pd-li.good { color: #23705a; }
.pd-li.risk { color: #8a5f1c; }
.pd-tl { position: relative; padding-left: var(--sp-4); margin-top: 2px; }
.pd-tl::before {
  content: ""; position: absolute; left: 3.5px; top: 5px; bottom: 5px;
  width: 2px; background: #d7e2ff; border-radius: 2px;
}
.pd-tl-item { position: relative; padding: var(--sp-1) 0 var(--sp-1) var(--sp-1); }
.pd-tl-item .pd-dot {
  position: absolute; left: -14px; top: 9px; width: 9px; height: 9px; border-radius: 50%;
  background: #fff; border: 2.5px solid var(--c-brand); box-sizing: border-box;
}
.pd-tl-item b { font-size: var(--fs-sm); color: var(--c-brand); display: block; }
.pd-tl-item p { font-size: var(--fs-sm); color: var(--c-ink-3); line-height: var(--lh-compact); margin-top: 1px; }

/* 参考案例小节（咨询案例库，数字已脱敏） */
.ref-case {
  margin: 0 var(--sp-4) var(--sp-3); background: #fff; border: 1px solid #e3e8f2; border-left: 3px solid var(--accent);
  border-radius: var(--r-md); padding: var(--sp-3); flex-shrink: 0;
}
.ref-case .rc-head { font-size: var(--fs-title); font-weight: 700; color: var(--c-ink); line-height: var(--lh-tight); }
.ref-case .rc-tags { margin-left: var(--sp-1); }
.ref-case .rc-tags i {
  font-style: normal; font-size: var(--fs-caption); color: var(--accent); background: var(--c-brand-soft);
  border-radius: 999px; padding: 1px var(--sp-2); margin-left: var(--sp-1);
}
.ref-case { cursor: pointer; }
.ref-case .rc-profile { font-size: var(--fs-sm); color: var(--c-ink-3); line-height: var(--lh-body); margin-top: var(--sp-2); }
.ref-case .rc-takeaway { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); margin-top: var(--sp-2); }
/* 默认折叠：画像 2 行 / 参考思路 3 行，点卡片展开（避免大段纯文本） */
.ref-case:not(.open) .rc-profile,
.ref-case:not(.open) .rc-takeaway {
  display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden;
}
.ref-case:not(.open) .rc-profile { -webkit-line-clamp: 2; }
.ref-case:not(.open) .rc-takeaway { -webkit-line-clamp: 3; }
.ref-case .rc-fold { display: block; font-size: var(--fs-caption); color: var(--accent); font-weight: 700; margin-top: var(--sp-1); }
.ref-case .rc-takeaway b.rc-move {
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--accent); color: #fff; font-size: var(--fs-caption); font-weight: 800;
  width: 20px; height: 20px; border-radius: 6px; margin-right: var(--sp-1); vertical-align: -4px;
}
.ref-case .rc-note { display: block; font-size: var(--fs-caption); color: var(--c-ink-3); margin-top: var(--sp-2); }

/* ---------- 屏4 心理测评 ---------- */
.as-pane { flex: 1; display: flex; flex-direction: column; overflow-y: auto; min-height: 0; padding: 0 var(--sp-4); scrollbar-width: none; }
.as-pane::-webkit-scrollbar { display: none; }
.as-list-head { font-size: var(--fs-section); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); padding: var(--sp-2) 2px var(--sp-3); flex-shrink: 0; }
.as-list-head small { display: inline-block; vertical-align: middle; max-width: 100%; min-width: 0; font-weight: 400; color: var(--c-ink-3); font-size: var(--fs-caption); margin-left: var(--sp-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.scale-list { display: flex; flex-direction: column; gap: var(--sp-3); padding-bottom: 28px; }
.scale-item {
  background: #fff; border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4); display: flex; align-items: center;
  gap: var(--sp-3); cursor: pointer; box-shadow: 0 3px 10px rgba(40,60,120,.06); transition: transform .15s ease;
  flex-shrink: 0; min-height: var(--tap);
}
.scale-item:hover { transform: translateX(3px); }
.scale-item .si-main { flex: 1; min-width: 0; }
.scale-item .si-name { font-size: var(--fs-title); font-weight: 700; color: var(--c-ink); line-height: var(--lh-tight); }
.scale-item .si-sub { font-size: var(--fs-sm); color: var(--c-ink-3); margin-top: var(--sp-1); line-height: var(--lh-compact); }
.si-badge {
  font-size: var(--fs-caption); font-weight: 700; padding: var(--sp-1) var(--sp-2); border-radius: 999px;
  background: #eef3ff; color: var(--c-brand); flex-shrink: 0; white-space: nowrap;
}
.si-badge.parent { background: var(--c-brand-soft); color: var(--accent); }

/* ---- 测评列表：分区 + 渐变封面大卡片（对标测评小程序） ---- */
.as-sec-head {
  display: flex; align-items: baseline; gap: var(--sp-2); font-size: var(--fs-section); font-weight: 800;
  color: var(--c-ink); line-height: var(--lh-tight); padding: var(--sp-3) 2px var(--sp-1) var(--sp-3);
  position: relative; flex-shrink: 0;
}
.as-sec-head::before {
  content: ""; position: absolute; left: 0; top: var(--sp-3); width: 4px; height: 24px;
  background: var(--c-brand); border-radius: 2px;
}
.as-sec-head small { font-weight: 500; color: var(--c-ink-3); font-size: var(--fs-caption); }
.scale-card { cursor: pointer; flex-shrink: 0; padding-bottom: var(--sp-1); }
.scale-card:active .sc-cover { transform: scale(.98); }
.sc-cover {
  position: relative; height: 100px; border-radius: var(--r-md); overflow: hidden;
  box-shadow: 0 8px 18px -8px rgba(30, 50, 110, .35); transition: transform .15s ease;
}
.scale-card:hover .sc-cover { transform: translateY(-2px); }
.sc-icon {
  position: absolute; left: var(--sp-5); top: 50%; transform: translateY(-50%);
  font-size: 42px; filter: drop-shadow(0 4px 10px rgba(0,0,0,.25));
}
.sc-layer {
  position: absolute; top: var(--sp-2); right: var(--sp-2); font-size: var(--fs-caption); font-weight: 700;
  color: #fff; background: rgba(0,0,0,.34); padding: 2px var(--sp-2); border-radius: 999px;
  backdrop-filter: blur(2px); letter-spacing: 1px;
}
.sc-meta {
  position: absolute; right: var(--sp-2); bottom: var(--sp-2); font-size: var(--fs-caption); font-weight: 600;
  color: #fff; background: rgba(0,0,0,.40); padding: 2px var(--sp-2); border-radius: 999px;
}
.sc-name { text-align: center; font-size: var(--fs-sm); font-weight: 700; color: var(--c-ink); margin-top: var(--sp-2); white-space: nowrap; flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; }
#as-list-view .screen-foot,
#as-intro-view .screen-foot,
#as-result-view .screen-foot {
  margin: 8px 2px 12px;
  flex-shrink: 0;
}

/* 封面渐变主题（纯 CSS，无外部图片） */
.cov-indigo { background: linear-gradient(135deg, #1F5346, #2F7D68); }
.cov-sunset { background: linear-gradient(135deg, #24493F, #3F8A72); }
.cov-amber  { background: linear-gradient(135deg, #2F7D68, #7FD3B8); }
.cov-teal   { background: linear-gradient(135deg, #1F5346, #7FD3B8); }
.cov-navy   { background: linear-gradient(135deg, #14382F, #2F5D50); }
.cov-violet { background: linear-gradient(135deg, #1F5346, #4E9C85); }
.cov-green  { background: linear-gradient(135deg, #3F8A72, #7FD3B8); }
.cov-plum   { background: linear-gradient(135deg, #24493F, #2F7D68); }
.cov-coral  { background: linear-gradient(135deg, #2F7D68, #A8CFC0); }
.cov-ocean  { background: linear-gradient(135deg, #1F5346, #9FD8E8); }
.cov-moss   { background: linear-gradient(135deg, #2F7D68, #A8CFC0); }

/* 封面图案叠层（CSS 图案：点阵/圆环/斜纹/网格） */
.pat-dots::before, .pat-rings::before, .pat-stripes::before, .pat-grid::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
}
.pat-dots::before {
  background-image: radial-gradient(rgba(255,255,255,.35) 1.5px, transparent 1.6px);
  background-size: 16px 16px; background-position: 4px 4px;
}
.pat-rings::before {
  background:
    radial-gradient(circle at 82% 28%, transparent 26px, rgba(255,255,255,.22) 27px, rgba(255,255,255,.22) 32px, transparent 33px),
    radial-gradient(circle at 62% 88%, transparent 36px, rgba(255,255,255,.16) 37px, rgba(255,255,255,.16) 44px, transparent 45px);
}
.pat-stripes::before {
  background: repeating-linear-gradient(-45deg, rgba(255,255,255,.14) 0 10px, transparent 10px 26px);
}
.pat-grid::before {
  background-image:
    linear-gradient(rgba(255,255,255,.16) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.16) 1px, transparent 1px);
  background-size: 22px 22px;
}
.kb-block {
  background: #fff; border-radius: var(--r-md); padding: var(--sp-3); margin: var(--sp-1) 0;
  box-shadow: 0 3px 10px rgba(40,60,120,.05); flex-shrink: 0;
}
.kb-block h5 { font-size: var(--fs-title); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); margin-bottom: var(--sp-2); }
.kb-block p { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); margin: var(--sp-1) 0; }
.kb-block.quote {
  background: #f0f4ff; border: 1px solid #d7e2ff; font-size: var(--fs-sm); color: #44548a;
  line-height: var(--lh-body); font-style: italic;
}
.kb-block.quote small { display: block; text-align: right; color: var(--c-ink-3); font-size: var(--fs-caption); font-style: normal; margin-top: var(--sp-1); }
.ref-item { margin-top: var(--sp-2); font-size: var(--fs-sm); line-height: var(--lh-compact); }
.ref-item b { display: inline; font-size: var(--fs-caption); color: #c05f21; margin-right: var(--sp-1); }
.as-hero { font-size: 64px; text-align: center; margin-top: var(--sp-10); filter: drop-shadow(0 8px 16px rgba(123,92,240,.3)); }
.as-h3 { text-align: center; font-size: var(--fs-display); font-weight: 800; line-height: var(--lh-tight); margin-top: var(--sp-5); }
.as-desc { text-align: center; font-size: var(--fs-sm); color: var(--c-ink-2); margin-top: var(--sp-3); line-height: var(--lh-body); padding: 0 var(--sp-3); }
.as-meta { text-align: center; font-size: var(--fs-sm); color: var(--c-ink-3); margin-top: var(--sp-4); }
#as-start:disabled { opacity: .5; cursor: default; }

.quiz-progress { padding: var(--sp-3) 2px var(--sp-2); flex-shrink: 0; }
.qp-text { font-size: var(--fs-caption); color: var(--c-ink-3); text-align: right; margin-bottom: var(--sp-1); }
.qp-track { height: var(--sp-2); background: #e8edf8; border-radius: 999px; overflow: hidden; }
.qp-fill { height: 100%; background: linear-gradient(90deg, #1F5346, #57B79A); border-radius: 999px; transition: width .3s ease; }
.quiz-dim {
  width: fit-content; font-size: var(--fs-caption); font-weight: 600; color: var(--accent); background: var(--c-brand-soft);
  padding: var(--sp-1) var(--sp-3); border-radius: 999px; margin-top: var(--sp-5);
}
.quiz-text { font-size: var(--fs-body); font-weight: 700; line-height: var(--lh-body); margin-top: var(--sp-3); min-height: 80px; }
.quiz-options { display: flex; flex-direction: column; gap: var(--sp-2); margin-top: var(--sp-2); padding-bottom: var(--sp-5); }
.q-opt {
  background: #fff; border: 1.5px solid #e3e8f2; border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4);
  font-size: var(--fs-body); line-height: var(--lh-compact); color: var(--c-ink); cursor: pointer;
  text-align: left; transition: all .15s ease; min-height: var(--tap);
}
.q-opt:hover { border-color: var(--c-brand); background: #f4f7ff; }
.q-opt.picked { border-color: var(--c-brand); background: var(--c-brand); color: #fff; font-weight: 600; }

/* 情境四选一卡片（VARK：选项即计分通道） */
.q-opt.choice { display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4); }
.q-opt.choice .qc-key {
  flex-shrink: 0; width: 24px; height: 24px; border-radius: var(--r-sm); background: #eef3ff; color: var(--c-brand);
  font-size: var(--fs-caption); font-weight: 800; display: flex; align-items: center; justify-content: center;
}
.q-opt.choice .qc-text { font-size: var(--fs-body); line-height: var(--lh-compact); }
.q-opt.choice.picked .qc-key { background: rgba(255, 255, 255, .22); color: #fff; }

/* 0-10 滑条题（快筛动力三问） */
.q-slider { background: #fff; border: 1.5px solid #e3e8f2; border-radius: var(--r-lg); padding: var(--sp-4); }
.qs-value { text-align: center; margin-bottom: var(--sp-2); }
.qs-value b { font-size: var(--fs-num-xl); font-weight: 800; color: var(--c-brand); }
.qs-value small { font-size: var(--fs-caption); color: var(--c-ink-3); margin-left: var(--sp-1); }
.q-slider input[type="range"] { width: 100%; accent-color: var(--c-brand); margin: 2px 0 var(--sp-2); }
.qs-anchors { display: flex; justify-content: space-between; gap: var(--sp-3); font-size: var(--fs-caption); color: var(--c-ink-3); line-height: var(--lh-compact); }
.qs-anchors span:last-child { text-align: right; }
.qs-confirm {
  width: 100%; margin-top: var(--sp-3); background: var(--c-brand); color: #fff; border: none; border-radius: var(--r-md);
  padding: var(--sp-3); font-size: var(--fs-title); font-weight: 700; min-height: var(--tap); cursor: pointer;
}
.qs-confirm:hover { background: var(--c-brand-deep); }

/* 危机支持卡（快筛 KS_R6 触发：不显示分数，置顶求助信息） */
.crisis-card { background: #fff5f4; border: 1.5px solid #f3c1bb; border-radius: var(--r-lg); padding: var(--sp-4); margin: var(--sp-2) 0 var(--sp-3); }
.crisis-card .cc-head { font-size: var(--fs-title); font-weight: 800; color: #b8352a; line-height: var(--lh-tight); }
.crisis-card .cc-msg { font-size: var(--fs-sm); color: #55443f; line-height: var(--lh-body); margin-top: var(--sp-2); }
.crisis-card .cc-hotline {
  background: #b8352a; color: #fff; font-size: var(--fs-title); font-weight: 800; text-align: center;
  border-radius: var(--r-md); padding: var(--sp-3); margin: var(--sp-3) 0; min-height: var(--tap);
  display: flex; align-items: center; justify-content: center;
}
.crisis-card .cc-action { font-size: var(--fs-sm); color: #63483f; line-height: var(--lh-body); margin-top: var(--sp-1); }
.crisis-card .cc-note { display: block; font-size: var(--fs-caption); color: var(--c-ink-3); margin-top: var(--sp-2); border-top: 1px dashed #ecd4cf; padding-top: var(--sp-2); }

.dim-levels { display: flex; flex-wrap: wrap; gap: var(--sp-2); padding-bottom: var(--sp-1); flex-shrink: 0; }
.dim-pill { font-size: var(--fs-caption); padding: var(--sp-1) var(--sp-3); border-radius: 999px; background: #eef1f7; color: var(--c-ink-2); }
.dim-pill b { color: var(--c-brand); }
.dim-pill.warn { background: #fff2ec; color: #c05f21; }
.dim-pill.warn b { color: #c05f21; }
.notice {
  margin: var(--sp-2) 0; background: #fff7e8; border: 1px solid #ffe4b3; border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4); font-size: var(--fs-sm); color: var(--c-warn-ink);
  line-height: var(--lh-body); flex-shrink: 0;
}
.notice b { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-sm); font-weight: 800; color: var(--c-warn-ink); margin-bottom: var(--sp-1); }
.notice.soft { background: #f0f4ff; border-color: #d7e2ff; color: #44548a; }
.notice.soft b { color: var(--c-brand); }

/* ---- GPT 润色综述：报告顶部「给家长的话」卡（浅暖底 + 衬线感，与分节区分） ---- */
.narrative-card {
  background: linear-gradient(160deg, #fffdf6, #fdf5e8);
  border: 1px solid #f0e2c8; border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4); margin: var(--sp-2) 0 var(--sp-1); flex-shrink: 0;
}
.narrative-card .nr-head { font-size: var(--fs-sm); font-weight: 800; color: var(--c-warn-ink); margin-bottom: var(--sp-2); }
.narrative-card .nr-text {
  font-family: Georgia, "Songti SC", "Noto Serif SC", "STSong", serif;
  font-size: var(--fs-body); color: #3d3a2e; line-height: var(--lh-body); text-align: left; white-space: pre-wrap;
}

/* ---- SOP 式分节报告版式（① 得分汇总 ② 优势 ③ 待关注 ④ 衔接 ⑤ 转介复测） ---- */
.sop-sec {
  background: #fff; border-radius: var(--r-md); padding: var(--sp-3); margin: var(--sp-2) 0;
  box-shadow: 0 4px 14px rgba(40,60,120,.06); flex-shrink: 0;
}
.sop-head {
  display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-title); font-weight: 800;
  color: var(--c-ink); line-height: var(--lh-tight);
  padding-bottom: var(--sp-2); border-bottom: 1px solid var(--c-line); margin-bottom: var(--sp-2);
}
.sop-no {
  width: 24px; height: 24px; border-radius: var(--r-sm); background: linear-gradient(135deg, #1F5346, #3E9C82);
  color: #fff; font-size: var(--fs-caption); font-weight: 700; display: flex; align-items: center;
  justify-content: center; flex-shrink: 0;
}
.sop-table { width: 100%; border-collapse: collapse; font-size: var(--fs-caption); }
.sop-table th {
  background: #f4f7ff; color: var(--c-ink-2); font-weight: 700; padding: var(--sp-1) var(--sp-2);
  text-align: left; border-bottom: 1px solid #e3e8f2;
}
.sop-table td { padding: var(--sp-1) var(--sp-2); border-bottom: 1px solid #f2f4f9; color: var(--c-ink-2); }
.sop-table td.num { font-weight: 700; color: var(--c-brand); font-variant-numeric: tabular-nums; }
.sop-table tr.warn td { background: #fff9f3; }
.sop-table tr.warn td:last-child { color: #c05f21; font-weight: 700; }
.sop-table tr.total td { border-top: 1.5px solid #dfe5f0; border-bottom: none; font-weight: 800; color: var(--c-ink); }
.sop-note { font-size: var(--fs-caption); color: var(--c-ink-3); line-height: var(--lh-compact); margin: var(--sp-2) 2px 0; }
.sop-item { border-left: 3px solid var(--c-ink-3); background: #f7f8fb; border-radius: 0 var(--r-sm) var(--r-sm) 0; padding: var(--sp-2) var(--sp-3); margin: var(--sp-2) 0; }
.sop-item .it-head { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-sm); font-weight: 700; color: var(--c-ink); flex-wrap: wrap; }
.sop-item .it-head b { margin-left: auto; font-size: var(--fs-caption); color: var(--c-brand); font-weight: 700; }
.sop-item p { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); margin-top: var(--sp-1); }
.sop-item.good { border-color: #1a8a62; background: #f0faf5; }
.sop-item.good .it-head b { color: #157a55; }
.sop-item.warn { border-color: #e8863a; background: #fff7ef; }
.sop-item.warn .it-head b { color: #c05f21; }
.sop-item.bridge { border-color: var(--c-brand); background: #f2f6ff; }
.sop-item.ref { border-color: #c93c3c; background: #fdf3f3; }
.sop-item.plain { border-color: var(--c-ink-3); background: #f7f8fb; }
.ref-badge {
  font-size: var(--fs-caption); font-weight: 700; color: #fff; background: #c56132;
  padding: 2px var(--sp-2); border-radius: 999px; flex-shrink: 0;
}
.sop-quote {
  background: #f0f4ff; border: 1px solid #d7e2ff; border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3);
  font-size: var(--fs-sm); color: #44548a; line-height: var(--lh-body); font-style: italic; margin-top: var(--sp-2);
}
.sop-quote small { display: block; text-align: right; color: var(--c-ink-3); font-size: var(--fs-caption); font-style: normal; margin-top: var(--sp-1); }
.sop-guide {
  border: 1.5px dashed #c9d6f2; background: #fbfcff; border-radius: var(--r-sm);
  padding: var(--sp-2) var(--sp-3); font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); margin-top: var(--sp-1);
  text-wrap: pretty;
  word-break: keep-all;
  overflow-wrap: break-word;
  line-break: strict;
}
#screen-screening #diag-body .section-title {
  word-break: keep-all;
  overflow-wrap: break-word;
  line-break: strict;
}
#screen-screening .q-opt.choice .qc-text {
  white-space: nowrap;
  flex-shrink: 0;
}
.sop-boundary { font-size: var(--fs-caption); color: var(--c-ink-3); line-height: var(--lh-compact); border-top: 1px dashed var(--c-line); margin-top: var(--sp-2); padding-top: var(--sp-2); }

/* ---------- 升学问答层：结果页"对结果有疑问？问我"（气泡复用 .msg/.bubble/.llm-bubble） ---------- */
/* 2026-08-22（大圣实测：追问 chip 左边紧贴手机框，右边却有空）：
   页面其它块（.section-title / .path-list / .form-card）左右都吃 var(--sp-4)，
   唯独 .ask-sec 底下的 chips / 对话 / 输入框一个都没有，于是整块从容器最左边起排——
   看起来就是「左边贴死、右边有缝」。右边那点缝不是留白，是最后一行 chip 没排满剩下的。
   统一在 .ask-sec 上吃同一个内边距；标题自己已经带了 sp-4，在这里归零免得缩两次。 */
.ask-sec { margin-top: var(--sp-4); padding-inline: var(--sp-4); }
.ask-sec > .section-title { padding-inline: 0; }
.ask-chips { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin: var(--sp-2) 0 var(--sp-3); }
.ask-thread { display: flex; flex-direction: column; gap: var(--sp-3); margin-bottom: var(--sp-3); }
.ask-input { margin: 0; box-shadow: 0 2px 10px rgba(40,60,120,.07); border: 1px solid var(--c-line); }
.la-note {
  margin-top: var(--sp-2); font-size: var(--fs-caption); color: var(--c-ink-3); line-height: var(--lh-compact);
  border-top: 1px dashed var(--c-line); padding-top: var(--sp-2);
}

/* AI 生成内容显式标识（《人工智能生成合成内容标识办法》2025-09-01 施行） */
/* flex 列容器里 inline-block 会被 stretch 拉成满宽灰条，align-self 收回原本尺寸 */
.ai-mark {
  display: inline-flex;
  align-self: flex-start;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-caption);
  font-weight: 700;
  color: var(--c-brand);
  background: var(--c-brand-soft);
  border: none;
  border-radius: 999px;
  padding: 0 var(--sp-2);
  line-height: 20px;
  margin-bottom: var(--sp-2);
}
.ai-mark::before { content: "✨"; font-size: 10px; }
/* AI 落地段：追加进模板卡内部，与卡片正文之间只用一条细分隔线
   —— 一次提问只呈现一块内容，不再另起气泡（方案 C，2026-08-16）。
   ai-mark 在卡内不再顶头独占一行，改为贴着分隔线的小标。 */
.sup-inline {
  margin-top: var(--sp-3);
  padding-top: var(--sp-3);
  border-top: 1px dashed var(--c-line, #e5e5e5);
}
.sup-inline .ai-mark { margin-bottom: var(--sp-2); }
.sup-inline .la-text { font-size: var(--fs-body); line-height: var(--lh-body); }
.ai-mark.inline {
  margin: 0 0 0 var(--sp-2);
  vertical-align: 1px;
  font-weight: 400;
  background: #f4f0ea;
  border-color: #e5ddd0;
}

/* ---------- 我的 · 孩子档案 ---------- */
.mine-pane {
  flex: 1; overflow-y: auto; padding: var(--sp-2) var(--sp-4) var(--sp-4); min-height: 0;
}
.mine-banner {
  font-size: var(--fs-sm); color: var(--c-ink-2); background: #eef3ff; border-radius: var(--r-sm);
  padding: var(--sp-2) var(--sp-3); margin-bottom: var(--sp-3); line-height: var(--lh-body);
}
.mine-body { display: flex; flex-direction: column; gap: var(--sp-3); margin-bottom: var(--sp-4); }
/* 方案 v3 §三「我的」四块的分节标题：档案 / 规划师 / 复测曲线 / 设置。 */
.mine-sec-title {
  margin: var(--sp-5) 0 var(--sp-2); color: var(--c-ink-3);
  font-size: var(--fs-caption); font-weight: 700; line-height: var(--lh-compact);
}
.mine-sec-title:first-of-type { margin-top: var(--sp-4); }
.mine-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: var(--sp-8) var(--sp-4); text-align: center;
  background: #fff; border-radius: var(--r-md); border: 1px dashed #d8deec;
  min-height: 180px;
}
.mine-card {
  background: #fff; border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4);
  box-shadow: 0 2px 10px rgba(40,60,120,.06); border: 1px solid var(--c-line);
}
.mine-card h4 { font-size: var(--fs-title); font-weight: 800; line-height: var(--lh-tight); margin-bottom: var(--sp-2); color: var(--c-ink); }
.mine-card p { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); }
.mine-card.soft { background: #f8fafc; }
/* mine 屏分组标签 */
.mine-section-label {
  font-size: var(--fs-caption); font-weight: 700; color: var(--c-ink-3);
  letter-spacing: 0.5px; margin: var(--sp-4) 0 var(--sp-1);
}
.mine-section-label:first-child { margin-top: 0; }
/* mine 屏数据行 */
.mine-row {
  display: flex; align-items: baseline; gap: var(--sp-2);
  font-size: var(--fs-sm); line-height: var(--lh-body);
  border-bottom: 1px solid var(--c-line); padding-bottom: var(--sp-2);
}
.mine-row:last-child { border-bottom: none; padding-bottom: 0; }
.mine-row-label { color: var(--c-ink-3); flex-shrink: 0; min-width: 48px; font-size: var(--fs-caption); }
.mine-row-value { color: var(--c-ink); flex: 1; }
/* mine 空态元素 */
.mine-empty-icon { font-size: 36px; text-align: center; margin-bottom: var(--sp-3); }
.mine-empty-title {
  font-size: var(--fs-title); font-weight: 800; color: var(--c-ink);
  text-align: center; line-height: var(--lh-tight); margin-bottom: var(--sp-2);
}
.mine-empty-hint {
  font-size: var(--fs-sm); color: var(--c-ink-3);
  text-align: center; line-height: var(--lh-body);
}
.mine-updated-at {
  font-size: var(--fs-caption); color: var(--c-ink-3);
  text-align: right; margin-top: var(--sp-2); line-height: var(--lh-compact);
}
.primary-btn.danger-outline {
  background: #fff; color: #b8352a; border: 1.5px solid #f0c4c4; margin-top: var(--sp-1);
}
#as-save-profile {
  background: #fff; color: var(--c-brand); border: 1.5px solid #c9d6f8;
  margin-bottom: var(--sp-2);
}

.error-bar {
  margin-top: var(--sp-3); padding: var(--sp-3); border-radius: var(--r-md);
  background: #fff1f0; border: 1px solid #ffccc7; color: #a8071a;
  font-size: var(--fs-sm); line-height: var(--lh-body);
}

/* ---- 批次二：判定依据 / 机会分 / 闸门 ---- */
.opp-banner {
  margin: 0 var(--sp-4) var(--sp-3); padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md);
  background: #fff7e8; border: 1px solid #ffe0a3; color: #8a5a10;
  font-size: var(--fs-sm); line-height: var(--lh-body); display: flex; flex-direction: column; gap: var(--sp-2);
}
.opp-banner b { font-size: var(--fs-sm); }
.gate-panel {
  margin: var(--sp-2) var(--sp-4) var(--sp-4); padding: var(--sp-4); border-radius: var(--r-md);
  background: #f6f8fc; border: 1px solid #dde3f0; color: var(--c-ink-2);
}
.gate-panel .gate-title { font-weight: 800; font-size: var(--fs-title); line-height: var(--lh-tight); color: var(--c-ink); margin-bottom: var(--sp-2); }
.gate-panel p { font-size: var(--fs-body); line-height: var(--lh-body); }
.gate-panel small { display: block; margin-top: var(--sp-3); color: var(--c-ink-3); font-size: var(--fs-sm); }
.conf-bar {
  display: inline-block; margin: var(--sp-1) 0 var(--sp-2); padding: var(--sp-1) var(--sp-2); border-radius: 999px;
  background: #fff1f0; color: #a8071a; font-size: var(--fs-caption); font-weight: 700;
}
.tier-badge {
  display: inline-block; margin-left: var(--sp-1); padding: 2px var(--sp-2); border-radius: 999px;
  font-size: var(--fs-caption); font-weight: 700; vertical-align: middle; flex-shrink: 0; white-space: nowrap;
}
.tier-main { background: #e8f8ef; color: #146b40; }
.tier-alt { background: #eef3ff; color: var(--c-brand); }
.tier-no { background: #f3f4f7; color: var(--c-ink-2); }
/* 08-17：原来是「白卡里再套一张灰卡」，边界重叠、层级看不出来。
   改成同一层的分区——只用上分隔线和小标题起头，不再自成一张卡片。 */
.evidence {
  margin-top: var(--sp-3); padding: var(--sp-3) 0 0;
  border-top: 1px solid var(--c-line);
}
.ev-title {
  font-size: var(--fs-caption); font-weight: 700; color: var(--c-ink-3);
  letter-spacing: .04em; margin-bottom: var(--sp-2);
}
.ev-sep { height: 1px; background: var(--c-line); margin: var(--sp-3) 0; opacity: .7; }
.ev-action { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-compact); margin: var(--sp-1) 0; }
.ev-total { font-size: var(--fs-sm); font-weight: 800; color: var(--c-brand); margin: var(--sp-1) 0 var(--sp-2); }
.ev-why { font-size: var(--fs-sm); font-weight: 700; color: #8a4c0c; margin-bottom: var(--sp-1); }
.ev-dims { display: flex; flex-direction: column; gap: var(--sp-2); margin-top: var(--sp-1); }
.ev-dim { background: #fff; border-radius: var(--r-sm); padding: var(--sp-2); border: 1px solid var(--c-line); }
.ev-dim-head { display: flex; justify-content: space-between; font-size: var(--fs-sm); color: var(--c-ink); }
.ev-basis { margin-top: var(--sp-1); font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body); white-space: pre-wrap; }
/* 2026-09-04：三次考试走势——每科一张小卡（科目名 + 折线图 + 一句结论）。 */
.ev-trend-item { background: #fff; border-radius: var(--r-sm); padding: var(--sp-3); border: 1px solid var(--c-line); margin-top: var(--sp-2); }
.ev-trend-item:first-child { margin-top: 0; }
.ev-trend-subject { font-size: var(--fs-sm); font-weight: 700; color: var(--c-ink); margin-bottom: var(--sp-1); }
.ev-trend-item .ev-basis { margin-top: var(--sp-2); }
.ev-block { margin-top: var(--sp-2); font-size: var(--fs-sm); color: #5b3f96; line-height: var(--lh-compact); }
.ev-block ul, .ev-fail-list { margin: var(--sp-1) 0 0 1.1em; padding: 0; }
.ev-block li, .ev-fail-list li { font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-compact); margin-bottom: var(--sp-1); }
/* H2（2026-08-23 F5 修复，含 U8「去补充」同一元素）：链接原是纯文字行内元素，
   实测 304x24 / 81x19，够不到 44px 触控基线。字号/图标不动，用 min-height + flex
   居中把点击热区撑到 --tap，视觉上文字大小分毫未变。 */
.ev-fill-link { font-size: var(--fs-sm); font-weight: 700; color: var(--c-brand); text-decoration: none; display: inline-flex; align-items: center; min-height: var(--tap); }
.ev-brief { margin-top: var(--sp-2); }
.info-fold { margin-top: var(--sp-2); font-size: var(--fs-sm); color: var(--c-ink-2); }
.info-fold summary { cursor: pointer; font-weight: 700; color: var(--c-ink-2); padding: var(--sp-3) 0; }
.cond.info { background: #f3f5fa; color: var(--c-ink-2); }

/* 结果分段：主推/备选/更多（默认折叠） */
.path-group-title {
  padding: var(--sp-1) var(--sp-4) var(--sp-2); font-size: var(--fs-section); font-weight: 800;
  line-height: var(--lh-tight); color: var(--c-ink);
}
.path-group-title small { font-weight: 400; color: var(--c-ink-3); font-size: var(--fs-caption); margin-left: var(--sp-2); }
.path-fold { margin: var(--sp-1) var(--sp-4) 0; }
.path-fold summary {
  cursor: pointer; padding: var(--sp-3) var(--sp-1); font-size: var(--fs-sm); font-weight: 700; color: var(--c-ink-2);
  list-style: none;
}
.path-fold summary::-webkit-details-marker { display: none; }
.path-fold summary::before { content: "▸ "; }
.path-fold[open] summary::before { content: "▾ "; }
.path-fold .path-list { padding: var(--sp-1) 0 0; }

/* P1：主推只承接通过资格门槛且有个性化理由的路径；其余不抢首屏。 */
.planner-focus {
  margin: 0 var(--sp-4) var(--sp-2); padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-sm); background: #eef3ff; color: #3553a6;
  font-size: var(--fs-sm); line-height: var(--lh-compact);
}
.planner-focus b { font-weight: 800; }
/* 🔴 2026-09-04 P2：这三块挂在 .path-list 里，.path-list 自身已经是按父容器
   26px 留白算出的 338px 主流宽度——这里再加左右各 16px margin，实测宽度缩到
   306px，跟同屏其它卡片对不齐。父容器留白已经够了，横向 margin 归零。 */
.p1-status, .p1-risk-panel, .p1-pending-panel {
  margin: 0 0 var(--sp-3); padding: var(--sp-3) var(--sp-4);
  border-radius: var(--r-md); font-size: var(--fs-sm); line-height: var(--lh-body);
}
.p1-status { background: #fff8ed; border: 1px solid #f2d59b; color: #805719; }
.p1-status b { display: block; color: #9a6510; font-size: var(--fs-body); margin-bottom: var(--sp-1); }
.p1-risk-panel { background: #fff4f2; border: 1px solid #f3ccc6; color: #823b35; }
.p1-risk-panel b { display: block; font-size: var(--fs-body); margin-bottom: var(--sp-1); }
.p1-pending-panel { background: #fff8ed; border: 1px solid #f2d59b; color: #805719; }
.p1-pending-panel b { display: block; color: #9a6510; font-size: var(--fs-body); margin-bottom: var(--sp-1); }
.p1-risk-panel ul, .p1-pending-panel ul { margin: 0; padding-left: 1.2em; }
.p1-risk-panel li + li, .p1-pending-panel li + li { margin-top: var(--sp-1); }
.p1-path-reason {
  margin-top: var(--sp-2); padding: var(--sp-2) var(--sp-3); border-radius: var(--r-sm);
  background: #eef8f3; border-left: 3px solid #22a06b; color: #24684d;
  font-size: var(--fs-sm); line-height: var(--lh-body);
}
.p1-path-reason b { display: block; margin-bottom: 2px; font-size: var(--fs-caption); color: #157a55; }
.p1-empty { margin-top: var(--sp-1); }

/* 路径卡展示契约：主推与其他可行路径共用同一四列表，不再依赖旧卡片字段。 */
.path-comparison-table {
  margin: 0 var(--sp-4) var(--sp-3); border: 1px solid #dce4f2; border-radius: var(--r-md);
  overflow: hidden; background: #fff;
}
.path-comparison-row {
  display: grid; grid-template-columns: 1.05fr 1fr 1fr 1.35fr;
  border-top: 1px solid #e7edf7;
}
.path-comparison-row:first-child { border-top: 0; }
.path-comparison-head { background: #edf3ff; color: #3553a6; font-size: var(--fs-caption); font-weight: 800; }
.path-comparison-head > div, .path-comparison-cell {
  min-width: 0; padding: var(--sp-2); overflow-wrap: break-word; word-break: break-word;
  font-size: var(--fs-caption); line-height: var(--lh-compact);
}
.path-comparison-head > div + div, .path-comparison-cell + .path-comparison-cell { border-left: 1px solid #e7edf7; }
.path-comparison-type { display: flex; flex-direction: column; gap: 2px; color: var(--c-ink); }
.path-comparison-type > b { color: var(--c-brand); font-size: var(--fs-sm); }
.path-comparison-note > div + div { margin-top: var(--sp-1); }
.path-comparison-note b { color: var(--c-ink-2); }
.path-baseline-hint {
  display: block; padding: 2px var(--sp-1); border-radius: 4px; background: #fff5d9; color: #8a5f1c;
  font-size: var(--fs-caption); font-weight: 700; line-height: var(--lh-compact);
}
.path-comparison-reason { color: #24684d; font-size: var(--fs-caption); line-height: var(--lh-compact); }
.path-comparison-fold { margin-top: var(--sp-2); }

/* P2：五件套必须逐项可见；缺字段条目不渲染，只留下明确的不可用提示。 */
.verification-guidance { margin: var(--sp-5) 0 var(--sp-3); }
.verification-title { padding-top: var(--sp-2); }
.verification-card {
  margin: 0 var(--sp-4) var(--sp-3); padding: var(--sp-3) var(--sp-4);
  border: 1px solid #cddaf5; border-radius: var(--r-md); background: #f7faff;
}
.verification-card h4 { margin: 0 0 var(--sp-2); color: var(--c-ink); font-size: var(--fs-body); line-height: var(--lh-tight); }
.verification-card dl { display: grid; grid-template-columns: minmax(6.5em, auto) 1fr; gap: var(--sp-2) var(--sp-3); margin: 0; font-size: var(--fs-sm); line-height: var(--lh-body); }
.verification-card dt { color: var(--c-ink-3); font-weight: 700; }
.verification-card dd { min-width: 0; margin: 0; color: var(--c-ink-2); overflow-wrap: anywhere; }
.verification-card a { color: var(--c-brand); font-weight: 700; text-decoration: underline; }
.verification-unavailable { margin: 0 var(--sp-4) var(--sp-3); color: var(--c-warn-ink); font-size: var(--fs-sm); line-height: var(--lh-compact); }


/* 终局：覆盖率 / advisory / 人工核对三段式 */
.ev-coverage { font-size: var(--fs-sm); color: var(--c-ink-2); margin: var(--sp-1) 0; }
.ev-advisory, .advisory-badge {
  display: inline-block; font-size: var(--fs-caption); font-weight: 700;
  color: var(--c-ink-2); background: #eef2f7; padding: 2px var(--sp-2); border-radius: var(--r-sm); margin: var(--sp-1) 0;
}
.manual-check-card {
  margin: var(--sp-2) 0; padding: var(--sp-3); background: #f7f8fb; border-left: 3px solid #6b7a99;
  font-size: var(--fs-sm); line-height: var(--lh-body);
}
.manual-check-card .mc-type { font-weight: 700; color: var(--c-ink); margin-bottom: var(--sp-1); }
.manual-check-card .mc-note { color: var(--c-ink-2); margin-bottom: var(--sp-2); }
.manual-check-card .mc-row { margin: 2px 0; color: var(--c-ink); }
.manual-check-card .mc-row b { color: var(--c-ink-3); font-weight: 600; margin-right: var(--sp-1); }
.manual-check-card .mc-ask { margin-top: var(--sp-2); color: var(--c-warn-ink); }


/* P5：家庭执行力 / 主攻分层入口（沿用现有表单风格） */
.family-intake .fi-item { margin: var(--sp-2) 0 var(--sp-3); }
.family-intake .fi-q { font-size: var(--fs-body); color: var(--c-ink); margin-bottom: var(--sp-1); line-height: var(--lh-body); }
.family-intake .fi-score { width: 100%; }
/* scale-mismatch-and-gate-0821 R2：9 题开放问诊改文本记录，不是量表 */
.family-open .fo-item { margin: var(--sp-2) 0 var(--sp-3); }
.family-open .fo-q { font-size: var(--fs-body); color: var(--c-ink); margin-bottom: var(--sp-1); line-height: var(--lh-body); word-break: keep-all; overflow-wrap: break-word; line-break: strict; }
.family-open .fo-answer { width: 100%; resize: vertical; font: inherit; }

/* 首次诊断：进度条 */
.diag-progress { padding: var(--sp-2) var(--sp-4) var(--sp-3); flex-shrink: 0; }
.diag-progress-track { height: var(--sp-2); background: #e8edf8; border-radius: 999px; overflow: hidden; }
.diag-progress-fill {
  height: 100%; width: 20%; background: linear-gradient(90deg, #1F5346, #57B79A);
  border-radius: 999px; transition: width .25s ease;
}

/* 首次诊断：九科分数网格 */
.diag-score-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2); margin: var(--sp-2) 0 var(--sp-1); }
.diag-exam-wrap { overflow-x: auto; margin: var(--sp-2) 0 var(--sp-1); }
.diag-exam-table { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
.diag-exam-table th, .diag-exam-table td { border: 1px solid var(--c-line, #e5e7eb); padding: 6px; text-align: center; }
.diag-exam-table th:first-child { text-align: left; white-space: nowrap; }
.diag-exam-table input { width: 100%; min-width: 4.5em; }
.diag-exam-meta { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2); }
.diag-score-grid label, .diag-exam-meta label {
  font-size: var(--fs-sm); color: var(--c-ink-2); display: flex; flex-direction: column; gap: var(--sp-1);
}

/* 首次诊断：Top3 三列卡 */
.diag-top3-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-2); }
.diag-top3-card {
  background: var(--c-bg-soft); border: 1px solid var(--c-line); border-radius: var(--r-md);
  padding: var(--sp-2); min-width: 0;
}
.dt-rank { font-size: var(--fs-caption); font-weight: 800; color: var(--c-brand); }
.dt-subject { font-size: var(--fs-title); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); margin-top: var(--sp-1); }
.dt-score { font-size: var(--fs-caption); color: var(--c-ink-3); margin-top: var(--sp-1); }
.dt-mods { font-size: var(--fs-caption); color: var(--c-ink-2); line-height: var(--lh-compact); margin-top: var(--sp-1); word-break: break-word; }

/* ================================================================
   真机全屏（2026-08-14）

   电脑上那个 350×730 的手机外壳是**演示用的**：给人看效果图用。
   可它对所有视口一律生效，于是用真手机打开时变成「手机里再套一个小手机」——
   390px 的屏只用 350px，正文可用宽度只剩 263px，一行才 14 个字
   （正常中文正文一行 20~22 字），字就显得又大又挤，通篇都在换行。

   断点以下＝真机，外壳全部脱掉铺满屏幕；断点以上保留外壳，效果图不受影响。
   假刘海和假状态栏在真机上必须隐藏——真手机自己有，留着就是画蛇添足，
   顶部改用安全区变量让位给真实刘海。
   ================================================================ */
@media (max-width: 520px) {
  body { background: var(--c-bg, #f4f6fb); }
  .stage { padding: 0; display: block; }
  .stage-caption { display: none; }

  /* 真机上每行折成可扫读的字段块；其他可行路径仍默认折叠，避免四列横向挤压。 */
  .path-comparison-table { margin-left: var(--sp-3); margin-right: var(--sp-3); }
  .path-comparison-head { display: none; }
  .path-comparison-row { display: block; padding: var(--sp-2) 0; }
  .path-comparison-cell {
    display: grid; grid-template-columns: 5.5em minmax(0, 1fr); gap: var(--sp-2);
    padding: var(--sp-1) var(--sp-3); border-left: 0 !important;
  }
  .path-comparison-cell::before { content: attr(data-label); color: var(--c-ink-3); font-weight: 700; }
  .path-comparison-type { display: grid; }
  .path-comparison-type > b, .path-comparison-type > span, .path-comparison-type > small { grid-column: 2; }
  .path-comparison-type::before { grid-row: 1 / span 4; }
  .path-comparison-note > div { grid-column: 2; }

  .phone {
    width: 100%; height: 100vh; height: 100dvh; max-width: none; max-height: none;
    border-radius: 0; box-shadow: none; background: transparent;
  }
  .screen {
    width: 100%; height: 100%; border-radius: 0;
    /* 让位给真机刘海与底部 Home 条 */
    padding-top: env(safe-area-inset-top, 0px);
    padding-bottom: env(safe-area-inset-bottom, 0px);
  }
  /* 真机自带这两样，模拟件必须让位 */
  .phone .notch { display: none; }

  /* B3-5（0821 版式扫描）：诊断第 3 步 Top3 三列网格在 390px 下每列仅 106px，
     塞不下 ≥12 字的科目诊断文案，改单列让每段至少一整行可读。 */
  .diag-top3-grid { grid-template-columns: 1fr; }
}

/* ---- 长内容＝文档卡，短内容＝聊天气泡（2026-08-14）----
   AI 那种带小标题、列表卡、引用块的回复塞进聊天气泡里，要同时让出头像位（40px）
   和气泡 86% 宽度限制，390px 的真机上正文只剩 266px、一行 16 个字，通篇都在换行。
   长内容本就该像方案卡那样占满整行读（正常中文正文 20~22 字/行），
   短句才需要气泡的对话感。所以按内容长度分流，JS 打 .msg--doc 标记。 */
.msg--doc { display: block; }
.msg--doc .avatar { display: none; }
.msg--doc .bubble {
  max-width: 100%; width: 100%;
  border-radius: var(--r-lg); padding: var(--sp-4);
}

/* 桌面手机壳（2026-08-21 晚由大圣当面重定：默认开壳）
   ⚠️ 默认值当天翻转过两次，别按注释日期猜——以 app.js 顶部开关为准：
   现在是「无参数＝开壳（body.shell-phone）」，`?shell=wide` 才走下面这套宽屏响应式。
   翻转理由：产品投放形态是手机，桌面全宽版式从未设计过，默认关壳时桌面看到的
   不是成品该有的样子，也无法据此判断真机效果。

   下面这段（2026-08-21 由「恒定 390px」降级为可选，F5 裁定）
   旧写法：.phone 对任何 ≥521px 视口固定 390px，四列表格列宽因此在
   760/800/900/1024/1280 五档下完全相同（约 76.4px）——换任何断点数值都治不好，
   因为决定列宽的是这个写死的壳，不是视口。
   新写法：默认（无 ?shell=phone 参数）壳不生效，.screen 走响应式，
   内容随视口伸展、给一个 max-width 防止超宽屏拉成一条通栏；
   带 ?shell=phone 时（app.js 打 body.shell-phone）才恢复原壳，
   供「桌面所见即真机所得」的效果图预览/演示用，⛔ 不删除。 */
@media (min-width: 521px) {
  .phone {
    width: 100%; max-width: 1080px; height: auto; max-height: none;
    background: transparent; border-radius: 0; box-shadow: none; padding: 0;
  }
  .screen { width: 100%; height: auto; border-radius: 0; }
  .phone .notch { display: none; }

  /* ?shell=phone 演示形态：恢复原来固定 390px 的手机壳外观 */
  body.shell-phone .phone {
    width: 390px; height: 730px;
    max-height: calc(100dvh - var(--sp-10) - var(--sp-12));
    /* 🔴 2026-09-02：这条在 ≥521px 时**盖掉**了上面那条改好的 .phone ——
       于是我在 390px 下量到的绿黑机身/绿投影，在桌面壳里从来没生效过，
       露出来的还是 v1 的蓝黑 #0d0f14 + 蓝投影。又一次「只在一个视口验」。 */
    background: #0C120F; border-radius: 48px; padding: 10px;
    box-shadow: 0 0 0 2px #2C3A33, 0 30px 60px -20px rgba(12,27,22,.45);
  }
  body.shell-phone .screen { width: 100%; height: 100%; border-radius: 40px; }
  body.shell-phone .phone .notch { display: none !important; }
}

/* 2026-08-18 S3/S4（F5 裁决后横扫）：单选题选完就锁。
   选中的保持高亮，其余置灰不可点——不移除、不塌行，家长仍看得见自己排除了什么。 */
.sg-chip.is-locked, .s-chip.is-locked, .stuck-row.is-locked, .recommend-option.is-locked {
  opacity: .42; cursor: default; pointer-events: none;
}
/* 重复点「先看X科」时滚回原答案并闪一下，让家长知道东西在哪儿，而不是又发一遍 */
.is-flash { animation: zh-flash 1.2s ease; }
@keyframes zh-flash {
  0%, 100% { box-shadow: none; }
  30%      { box-shadow: 0 0 0 3px rgba(59, 96, 227, .35); }
}

/* S8（2026-08-19 F5 裁决）：已答完的选项组折叠成一行摘要，CSS 折叠不删 DOM——
   .is-collapsed 只隐藏原选项组，摘要条常驻在原位，点一下能展开回去反复切换。
   正在等待作答的组不会走到这里（见 tifen.js collapseSettledGroups 的判据）。 */
.answer-collapse-bar {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2);
  width: 100%; margin: 0 2px var(--sp-2); padding: var(--sp-2) var(--sp-4);
  background: var(--c-bg-soft); border: 1.5px solid var(--c-line); border-radius: var(--r-md);
  font-size: var(--fs-sm); color: var(--c-ink-2); cursor: pointer; text-align: left;
  min-height: var(--tap); transition: background .15s ease;
}
.answer-collapse-bar:hover { background: #eef1f8; }
.answer-collapse-bar .answer-collapse-label { font-weight: 700; color: var(--c-ink); }
.answer-collapse-bar .answer-collapse-caret { flex-shrink: 0; color: var(--c-ink-3); transition: transform .15s ease; }
.answer-collapse-bar.is-expanded .answer-collapse-caret { transform: rotate(180deg); }
.sg-chips.is-collapsed, [data-tf-gap].is-collapsed, [data-tf-tutoring].is-collapsed,
[data-tf-cross-phenomenon].is-collapsed, .diag-card.is-collapsed {
  display: none;
}

/* ============================================================
   B0 · 内容输出排版契约 · design token（2026-08-21，F5 定稿）
   来源：.cc/runtime/open-design-lab/outputs/output-format-system-0821/
         mockups/丙-图标锚点.html（大圣选定稿）
   契约文档：docs/内容输出排版契约-v1.md

   ⛔ 本区块只新增 --of-* 前缀变量，全部与既有 --c-* / --fs-* / --sp-*
      / --r-* 变量隔离命名，不重定义任何已有变量、不新增会被现有
      HTML 匹配到的 class，上线零视觉变化。
   本批（B0）只建 token，应用到具体元素是 B1/B2/B3 的范围。
   ============================================================ */
:root {
  /* -- 色：主色赭石橙，脱离产品现有蓝紫，专供新排版契约使用 -- */
  --of-c-brand:      #b5541f;
  --of-c-brand-deep: #8f3f13;
  --of-c-brand-soft: #f7e6d5;
  --of-c-good:        #2f7a4f;  /* 优势 / 已确认满足 */
  --of-c-good-soft:   #e2f0e6;
  --of-c-bad:          #a8352c;  /* 挑战 / 已确认不满足 */
  --of-c-bad-soft:     #f6e0dd;
  --of-c-info:         #4c5d99;  /* 依据 / 判断说明 */
  --of-c-info-soft:    #e7eaf5;
  --of-c-pending:      #8f3f13;  /* 待确认（复用品牌深色，区别于「已确认不满足」的 --of-c-bad） */
  --of-c-pending-soft: #f7e6d5;

  /* -- 文字色阶（新排版契约专用，暖色底适配，不与 --c-ink 系混用） -- */
  --of-c-ink:   #332a1f;
  --of-c-ink-2: #665843;
  --of-c-ink-3: #96876e;
  --of-c-line:  #ecdfc8;
  --of-bg:      #fbf3e7;
  --of-card:    #fffdf8;

  /* -- 字号：标题 / 正文 / 辅助 三级 -- */
  --of-fs-title:   15.5px;
  --of-fs-body:    15px;
  --of-fs-caption: 11.5px;

  /* -- 间距：区块间距、卡片内边距 -- */
  --of-sp-section: 24px;  /* 区块（P1/P2/P3/P4 之间、卡片组之间）间距 */
  --of-sp-card:    16px;  /* 卡片内边距 */
  --of-sp-gap:     8px;   /* 卡片内元素间的小间距（图标行、字段行） */

  /* -- 圆角，配套新卡片使用 -- */
  --of-r-card: 16px;
  --of-r-chip: 12px;

  /* -- 图标映射：哪类信息配哪个图标（内容用 content:var(--of-icon-x) 取值）--
     结论前置类信息用 --of-c-brand 系着色，依据/说明类用 --of-c-info。 */
  --of-icon-tip:       "💡";  /* 提示 */
  --of-icon-challenge: "⚠️";  /* 挑战 */
  --of-icon-strength:  "💪";  /* 优势 */
  --of-icon-note:      "📝";  /* 备注（条件/时间线/费用） */
  --of-icon-path:      "🎓";  /* 升学路径 */
  --of-icon-parent:    "🤝";  /* 家长指引 / 行动建议 */
  --of-icon-pending:   "❓";  /* 待确认 */
  --of-icon-rejected:  "🚫";  /* 暂不建议 / 已确认不满足 */
  --of-icon-evidence:  "🔎";  /* 判断依据 */
  --of-icon-checklist: "📋";  /* 观察任务 / 复盘清单 */
  --of-icon-ok:        "✓";  /* 已确认满足 */
}

/* ============================================================
   B1 · 规划师静态区把 --of-* token 落到真实元素（2026-08-21）
   来源：丙稿 mockups/丙-图标锚点.html + docs/内容输出排版契约-v1.md
   只改呈现，不改字段结构；断点固定 768px，与契约 §4 一致。
   ============================================================ */

/* ---- P1：手机路径卡（图标锚点）。桌面仍是 .path-comparison-table 四列表，
   两者共享同一份 items，靠下面的可见性切换整块换形态，不裁字段凑列宽。 ---- */
.of-path-cards { display: none; flex-direction: column; gap: var(--of-sp-card); margin: 0 var(--sp-4) var(--sp-3); }
.of-path-card {
  background: var(--of-card); border: 1px solid var(--of-c-line); border-radius: var(--of-r-card);
  overflow: hidden;
}
.of-path-card-top {
  display: flex; align-items: center; gap: var(--of-sp-gap); padding: var(--sp-3) var(--sp-4);
  background: var(--of-c-brand-soft);
}
.of-path-card-icon { font-size: 20px; flex-shrink: 0; }
.of-path-card-icon::before { content: var(--of-icon-path); }
.of-path-card-tag { display: block; font-size: var(--of-fs-caption); font-weight: 800; color: var(--of-c-brand-deep); }
.of-path-card-top h3 { margin: 2px 0 0; font-size: var(--of-fs-title); font-weight: 800; color: var(--of-c-ink); }
.of-path-card-reason {
  font-size: var(--of-fs-caption); color: var(--of-c-ink-3); margin: 0; padding: var(--sp-2) var(--sp-4) 0;
  font-style: italic;
}
.of-path-card-body { padding: var(--sp-3) var(--sp-4) var(--sp-4); }
.of-icon-row { display: flex; gap: var(--of-sp-gap); margin-bottom: var(--sp-2); }
.of-icon-row .of-icon-badge {
  width: 26px; height: 26px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; font-size: 14px; margin-top: 1px;
}
.of-icon-row--good .of-icon-badge { background: var(--of-c-good-soft); color: var(--of-c-good); }
.of-icon-row--good .of-icon-badge::before { content: var(--of-icon-strength); }
.of-icon-row--bad .of-icon-badge { background: var(--of-c-bad-soft); color: var(--of-c-bad); }
.of-icon-row--bad .of-icon-badge::before { content: var(--of-icon-challenge); }
.of-icon-row-txt { flex: 1; font-size: var(--fs-sm); color: var(--of-c-ink-2); min-width: 0; }
.of-icon-row-txt b { display: block; color: var(--of-c-ink); font-size: var(--of-fs-caption); margin-bottom: 2px; }
.of-path-detail { margin-top: var(--sp-1); }
.of-path-detail summary {
  cursor: pointer; font-size: var(--fs-sm); font-weight: 700; color: var(--of-c-brand-deep);
  padding: var(--sp-2) 0; list-style: none;
}
.of-path-detail summary::-webkit-details-marker { display: none; }
.of-path-detail summary::before { content: var(--of-icon-note) " "; }
.of-path-detail dl { margin: 0; font-size: var(--fs-sm); color: var(--of-c-ink-2); }
.of-path-detail dt { font-weight: 700; color: var(--of-c-ink); margin-top: var(--sp-2); }
.of-path-detail dd { margin: 2px 0 0; }

/* ---- P2：暂不建议分组折叠（红底 + 🚫）／ 待确认独立视觉（虚线框 + ❓） ---- */
.of-notrec-group {
  margin: 0 var(--sp-4) var(--sp-3); background: var(--of-card); border: 1px solid var(--of-c-line);
  border-radius: var(--of-r-chip); overflow: hidden;
}
.of-notrec-group summary {
  cursor: pointer; padding: var(--sp-3) var(--sp-4); font-weight: 700; font-size: var(--fs-sm);
  color: var(--of-c-ink); list-style: none; display: flex; align-items: center; gap: var(--of-sp-gap);
}
.of-notrec-group summary::-webkit-details-marker { display: none; }
.of-notrec-group summary::before { content: var(--of-icon-rejected); }
.of-notrec-list { padding: 0 var(--sp-4) var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2); }
.of-notrec-item {
  display: flex; gap: var(--of-sp-gap); align-items: flex-start; padding: var(--sp-2) var(--sp-3);
  background: var(--of-c-bad-soft); border-radius: var(--of-r-chip);
}
.of-notrec-icon {
  flex-shrink: 0; width: 22px; height: 22px; border-radius: 50%; background: var(--of-c-bad); color: #fff;
  font-size: 12px; display: flex; align-items: center; justify-content: center; margin-top: 1px;
}
.of-notrec-icon::before { content: var(--of-icon-rejected); }
.of-notrec-body h4 { margin: 0 0 2px; font-size: var(--fs-sm); font-weight: 800; color: var(--of-c-ink); }
.of-notrec-body p { margin: 0; font-size: var(--of-fs-caption); color: var(--of-c-ink-2); }

.of-pending-panel { margin: 0 0 var(--sp-3); }
.of-pending-heading {
  padding: var(--sp-1) var(--sp-4) var(--sp-1); font-size: var(--fs-section); font-weight: 800;
  color: var(--of-c-pending); margin: 0;
}
.of-pending-hint { padding: 0 var(--sp-4); margin: 0 0 var(--sp-2); font-size: var(--fs-sm); color: var(--of-c-ink-3); }
.of-pending-list { margin: 0 var(--sp-4) var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-3); }
.of-pending-item {
  border: 1.5px dashed var(--of-c-pending); border-radius: var(--of-r-chip); padding: var(--sp-3) var(--sp-4);
  display: flex; gap: var(--of-sp-gap); background: var(--of-card);
}
.of-pending-icon {
  flex-shrink: 0; width: 26px; height: 26px; border-radius: 50%; background: var(--of-c-pending-soft);
  color: var(--of-c-pending); font-size: 14px; display: flex; align-items: center; justify-content: center;
}
.of-pending-icon::before { content: var(--of-icon-pending); }
.of-pending-body h4 { margin: 0 0 var(--sp-1); font-size: var(--fs-sm); font-weight: 800; color: var(--of-c-ink); }
.of-pending-body div { font-size: var(--of-fs-caption); color: var(--of-c-ink-2); margin-bottom: 2px; }
.of-pending-body .of-cond-ok { color: var(--of-c-good); font-weight: 700; }
.of-pending-body .of-cond-pd { color: var(--of-c-pending); font-weight: 700; }

/* ---- P4：免责声明精简收拢，默认折叠；risk_footer 为空时靠 :empty 不占地方 ---- */
.of-disc-box {
  margin: 0 var(--sp-4) var(--sp-2); padding: 0 var(--sp-3); background: var(--of-card);
  border: 1px solid var(--of-c-line); border-radius: var(--of-r-chip);
}
/* H3（2026-08-23 F5 修复）：--of-c-ink-3 (#96876e) 对 --of-card (#fffdf8) 只有
   3.5:1，跌破 4.5:1 门槛。换成项目里同色系但更深的 --c-warn-ink（4.5:1+），
   不新造颜色。 */
.of-disc-box summary {
  cursor: pointer; padding: var(--sp-2) 0; font-size: var(--of-fs-caption); font-weight: 700;
  color: var(--c-warn-ink); list-style: none;
}
.of-disc-box summary::-webkit-details-marker { display: none; }
.of-disc-box summary::before { content: "⚠️ "; }
.of-disc-box p { font-size: var(--of-fs-caption); color: var(--of-c-ink-3); margin: 0 0 var(--sp-2); }
.of-disc-box p:empty { display: none; }
/* #pl-risk-footer 原是 .form-hint（居中大留白），挪进折叠框后要跟随 --of-* 字号/留白，
   为空（risk_footer 未返回时）不占地方，不用等 JS 再判断一次。 */
.of-disc-box .of-disc-risk {
  text-align: left; font-size: var(--of-fs-caption); color: var(--of-c-ink-3);
  padding: 0 0 var(--sp-2); margin: 0;
}
.of-disc-box .of-disc-risk:empty { display: none; padding: 0; }

/* ---- 768px 断点：与丙稿 / 契约 §4 一致，桌面表格与手机卡片整块切换 ----
   @media 保留给不支持容器查询的老浏览器；@container 是真正生效的那份，
   桌面手机壳内（视口 1440px、容器 370px）只有它能命中。两份规则完全相同，重复是幂等的。 */
@media (max-width: 767.98px) {
  .path-comparison-table { display: none; }
  .of-path-cards { display: flex; }
}
@container screen (max-width: 767.98px) {
  .path-comparison-table { display: none; }
  .of-path-cards { display: flex; }
}

/* 同上：520px 那批「内容级」手机适配也补一份容器查询版。
   壳自身的规则（body 背景 / .stage / .phone / .screen / 刘海 / 状态栏）不搬——
   那些管的是外壳，容器查询管不着，也不该管。 */
@container screen (max-width: 520px) {
  .path-comparison-table { margin-left: var(--sp-3); margin-right: var(--sp-3); }
  .path-comparison-head { display: none; }
  .path-comparison-row { display: block; padding: var(--sp-2) 0; }
  .path-comparison-cell {
    display: grid; grid-template-columns: 5.5em minmax(0, 1fr); gap: var(--sp-2);
    padding: var(--sp-1) var(--sp-3); border-left: 0 !important;
  }
  .path-comparison-cell::before { content: attr(data-label); color: var(--c-ink-3); font-weight: 700; }
  .path-comparison-type { display: grid; }
  .path-comparison-type > b, .path-comparison-type > span, .path-comparison-type > small { grid-column: 2; }
  .path-comparison-type::before { grid-row: 1 / span 4; }
  .path-comparison-note > div { grid-column: 2; }
  .diag-top3-grid { grid-template-columns: 1fr; }
}

/* ---------------------------------------------------------------- P0-5 一页纸初筛结论（2026-08-24）
   家长第一屏看到的是三档结论，不是全量路径平铺明细。样式沿用页面既有变量，
   不引入新的字号/圆角口径。 */
.pl-summary {
  border: 1px solid #dcd7cc;
  background: #fbfaf6;
  border-radius: var(--radius-md, 10px);
  padding: var(--sp-4, 16px);
  margin-bottom: var(--sp-4, 16px);
}
.pl-sum-title { font-weight: 800; font-size: var(--fs-h3, 17px); margin-bottom: var(--sp-1, 4px); }
.pl-sum-sec { margin-top: var(--sp-3, 12px); }
.pl-sum-tier {
  display: inline-block; font-weight: 700; font-size: var(--fs-small, 13px);
  color: #fff; padding: 3px 12px; border-radius: 3px; margin-bottom: var(--sp-2, 8px);
}
.pl-sum-sec-main .pl-sum-tier { background: #1f4d3d; }
.pl-sum-sec-alt  .pl-sum-tier { background: #8a4b2a; }
.pl-sum-sec-no   .pl-sum-tier { background: #6f6a61; }
.pl-sum-hint { font-size: var(--fs-small, 12.5px); color: #7a746b; margin-bottom: var(--sp-2, 8px); }
.pl-sum-row {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 12px;
  padding: 9px 12px; margin-bottom: 6px; border-left: 3px solid transparent;
}
.pl-sum-main { background: #e7efe9; border-left-color: #2f6b55; }
.pl-sum-alt  { background: #f4e7dc; border-left-color: #8a4b2a; }
.pl-sum-no   { background: #efece5; border-left-color: #a8a297; }
.pl-sum-text { min-width: 0; }
.pl-sum-name { font-weight: 700; font-size: var(--fs-body, 14px); line-height: 1.5; }
.pl-sum-why  { font-size: var(--fs-small, 12.5px); color: #43403a; margin-top: 2px; line-height: 1.6; }
.pl-sum-badge {
  flex: none; font-size: var(--fs-small, 12px); font-weight: 700; color: #fff;
  padding: 3px 10px; border-radius: 11px; white-space: nowrap;
}
.pl-sum-badge-main { background: #1f4d3d; }
.pl-sum-badge-alt  { background: #8a4b2a; }
.pl-sum-badge-no   { background: #8a857c; }
.pl-sum-empty {
  padding: 10px 12px; background: #fff8ed; border: 1px dashed #f2d59b;
  color: #805719; font-size: var(--fs-small, 13px); line-height: 1.7;
}
.pl-sum-foot {
  margin-top: var(--sp-3, 12px); padding-top: var(--sp-2, 8px);
  border-top: 1px dashed #dcd7cc; font-size: var(--fs-small, 11.5px);
  color: #7a746b; line-height: 1.7;
}
@media (max-width: 640px) {
  .pl-sum-row { flex-direction: column; gap: 6px; }
  .pl-sum-badge { align-self: flex-start; }
}


/* ---- 家庭动力诊断六步向导（T10） ---- */
#screen-family-dynamics .fd-step { display: none; padding: 12px 16px 8px; }
#screen-family-dynamics .fd-step.is-active { display: block; }
#fd-progress { padding: 10px 16px 0; }
#fd-progress .fd-progress-text { font-size: 12px; color: var(--c-ink-2, #667); margin-bottom: 6px; }
#fd-progress .fd-progress-track { height: 6px; background: #e8ecf4; border-radius: 99px; overflow: hidden; }
#fd-progress .fd-progress-fill { height: 100%; width: 16.66%; background: var(--accent); border-radius: 99px; transition: width .2s; }
.fd-body { flex: 1; overflow-y: auto; min-height: 0; }
.fd-step-title { font-size: 18px; margin: 4px 0 6px; }
.fd-hint { font-size: 13px; color: var(--c-ink-2, #667); margin: 0 0 12px; }
.fd-q, .fd-choice { margin: 0 0 12px; }
.fd-q label, .fd-choice .fd-choice-name { display: block; font-size: 14px; font-weight: 600; margin-bottom: 4px; }
.fd-q textarea { width: 100%; min-height: 64px; box-sizing: border-box; border: 1px solid #d8dee9; border-radius: 10px; padding: 8px; font: inherit; }
.fd-choice-list { display: flex; flex-direction: column; gap: 8px; }
.fd-choice-item { border: 1px solid #d8dee9; border-radius: 12px; padding: 10px 12px; background: #fff; text-align: left; cursor: pointer; }
.fd-choice-item.is-on { border-color: var(--accent); background: var(--c-brand-soft); }
.fd-choice-item small { display: block; color: #667; font-size: 12px; margin-top: 4px; font-weight: 400; }
.fd-dim { margin: 0 0 14px; }
.fd-dim-name { font-size: 14px; font-weight: 600; }
.fd-dim-anchors { font-size: 11px; color: #667; margin: 4px 0 6px; line-height: 1.4; }
.fd-dim-scores { display: flex; gap: 6px; }
.fd-dim-scores button { flex: 1; border: 1px solid #d8dee9; background: #fff; border-radius: 8px; padding: 8px 0; cursor: pointer; }
.fd-dim-scores button.is-on { border-color: var(--accent); background: var(--accent); color: #fff; }
.fd-nav { display: flex; gap: 8px; padding: 10px 16px 16px; }
/* 🔴 2026-09-01 修报告页信息架构（大圣截图：「已签发方案为什么在这里」+ 两段几乎
   一样的空态文案）。实测 DOM 顺序：
     .navbar（标题 + 生成按钮 + #rp-comprehensive-hint 空态提示①）
     #rp-issued-plan（已签发方案）      ← 插在中间，把综合报告劈成两半
     #rp-body（综合报告正文，内含 .rp-empty 空态提示②）
   两个错：空态提示被塞进标题栏，所以跑到最上面；已签发方案排在综合报告正文之前。
   于是页面上「还没有可汇总的内容…」说了两遍，中间隔着已签发方案和 221px 空白。

   🔴 我第一版修错了方向：隐藏了 #rp-comprehensive-hint，回归立刻报红 ——
   `test_a10_comprehensive_button_empty_and_seeded_states` 明确断言
   「空态应显示提示文案」。那条 hint 紧挨着禁用的按钮，是**有意的就近解释**
   （告诉用户为什么按钮点不了），有测试保护，不是冗余。
   该隐藏的是正文区那条重复的 .rp-empty —— 它离按钮远、又把同一句话说了第二遍。
   教训：**看到两处文案重复，先查哪一处有测试保护，有保护的那处才是契约。**

   ⚠️ order 必须给**全部**直接子元素都定，只定两个会让默认 order:0 的
   .aurora 与 .tabbar 跑到最前面。 */
#screen-report > .aurora            { order: 0; }
#screen-report > .navbar            { order: 1; }
#screen-report > #rp-dossier-gate   { order: 2; }
#screen-report > #mt-report-suite-container { order: 3; }
#screen-report > .report-core-cards { order: 4; }
#screen-report > #rp-comprehensive-card { order: 5; }
#screen-report > #rp-body           { order: 6; }
#screen-report > #rp-issued-plan    { order: 7; }
#screen-report > .screen-foot       { order: 8; }
#screen-report > .tabbar            { order: 9; }
#screen-report #rp-body .rp-empty { display: none !important; }
#screen-report #rp-body .rp-doc {
  background: transparent !important;
  box-shadow: none !important;
  border: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
/* 2026-09-04：只藏「整份都是空态」的壳（report.js 给它挂 rp-doc-empty 专属类）。
   原来第二个选择器是 .rp-doc:has(.rp-empty)——正文小节的空态提示也叫 .rp-empty，
   首诊家长没有三次成绩时 subjectDragBlock 必带一条 → 整份综合报告被连坐藏掉。 */
#screen-report #rp-body .rp-doc:empty,
#screen-report #rp-body .rp-doc.rp-doc-empty {
  display: none !important;
}

/* 🔴 2026-09-01 修白底白字：原来只有 `.fd-nav button{background:#fff}`（0-1-1），
   它把 `.primary-btn`（0-1-0）的深绿渐变背景盖成白色，**却没盖 color:#fff** ——
   于是「下一步」是白字白底，文字在 DOM 里、点击也有反应，用户就是看不见。
   「上一步」没有 primary-btn class，color 走默认深色，所以它正常 —— 这正是
   截图里「上一步有字、下一步空白」的成因。
   修法：普通按钮显式给深色字；主操作按钮在本容器内恢复深绿底白字并清掉外边距
   （.primary-btn 自带 margin，塞进 flex 行会把两个按钮挤歪）。 */
.fd-nav button { flex: 1; height: 42px; border-radius: 12px; border: 1px solid #d8dee9; background: #fff; color: #1f2937; font-size: 15px; font-weight: 600; }
.fd-nav .primary-btn { background: linear-gradient(135deg, #1F5346, #2F7D68); color: #fff; border: none; margin: 0; box-shadow: none; min-height: 42px; }
#fd-submit[hidden], #fd-prev[hidden], #fd-next[hidden] { display: none !important; }
.fd-error { color: #b42318; font-size: 13px; padding: 0 16px 12px; }
/* 2026-09-02 脱紫：#7c5cbf 是全站独一份的紫，效果图配色里没有紫 */
details.fd-more { margin: 8px 0 0; font-size: 13px; color: var(--t2); }
details.fd-more summary { cursor: pointer; color: var(--accent); font-weight: 600; }
/* 2026-09-05 大圣批：与 .rp-l3-mark 同步改琥珀色系，类名保留（L3 断言锚类名） */
.fd-l3-mark { background: rgba(138, 81, 0, .07); border-left: 3px solid #8A5100; padding: 8px 10px; border-radius: 8px; margin: 8px 0; }
.fd-report { padding: 8px 4px 24px; }
.fd-report h2 { font-size: 18px; margin: 0 0 8px; }
.fd-c-p { margin: 0 0 10px; line-height: 1.6; }
.fd-sec { margin: 14px 0; }
.fd-sec h4 { margin: 0 0 6px; }
.fd-unsigned { opacity: .85; }


/* T22 九科诊断速查：独立屏，不进 #diag-body */
.subject-diag-pane { padding: 8px 14px 24px; }
.subject-diag {
  /* 2026-09-02：旧主题最后一块残留。原本 #fff 实心卡 + #e6ebf5 蓝灰描边，
     九张一字排开，是全站唯一没进玻璃体系的一屏。配方照抄 .fcard。 */
  background: var(--glass);
  -webkit-backdrop-filter: blur(26px) saturate(1.9);
  backdrop-filter: blur(26px) saturate(1.9);
  border: 1px solid rgba(255, 255, 255, .75);
  border-radius: var(--r-lg);
  box-shadow: 0 8px 32px rgba(12, 27, 22, .10);
  padding: 14px 16px;
  margin: 0 0 12px;
}
.subject-diag-title { margin: 0 0 6px; font-size: 16px; }
/* 2026-09-02 脱蓝：#2f6fed 是系统链接蓝，效果图配色里没有蓝色文字 */
.subject-diag-hook { margin: 0 0 8px; font-size: 13px; color: var(--t2); line-height: 1.55; }
.subject-diag-fold summary {
  /* 原来这行只有 26px 高，拇指指腹约 44px —— 家长得用指甲尖戳。
     用 padding 撑而不是改 display：summary 是 list-item，改 display 会把
     折叠小三角弄没，而那个三角是这行唯一在说「我能点」的东西。 */
  cursor: pointer;
  color: var(--accent);
  font-weight: 600;
  padding: 9px 0;
  min-height: 44px;
  box-sizing: border-box;
}
.subject-diag-section-title { margin: 10px 0 6px; font-size: 13px; font-weight: 700; }
.stuck-point {
  /* #f7f9ff 是旧蓝灰底，换成品牌绿的极淡稀释，和玻璃卡叠在一起不打架 */
  border: 1px solid rgba(31, 83, 70, .10);
  border-radius: var(--r-sm);
  padding: 8px 10px;
  margin: 0 0 8px;
  background: rgba(31, 83, 70, .045);
}
.stuck-point-name { font-weight: 700; color: var(--accent); }
.stuck-point-signals { margin: 6px 0 0 18px; padding: 0; color: var(--t3); font-size: 13px; }
.must-ask {
  padding: 6px 0;
  font-size: 13px;
  line-height: 1.5;
  border-bottom: 1px dashed rgba(31, 83, 70, .14);
}
.diag-what, .diag-where, .diag-how {
  margin: 10px 0 0;
  padding: 8px 10px;
  border-radius: var(--r-sm);
  background: rgba(31, 83, 70, .055);
  font-size: 13px;
  line-height: 1.55;
}

/* 方案 v3 §三「报告」tab 的已签发方案块。 */
.rp-sec-title {
  margin: 0 0 var(--sp-2); color: var(--c-ink-3);
  font-size: var(--fs-caption); font-weight: 700; line-height: var(--lh-compact);
}
.rp-plan-card {
  padding: var(--sp-4); margin-bottom: var(--sp-3);
  border: 1px solid var(--c-line); border-radius: var(--r-lg); background: var(--c-bg-soft);
}
.rp-plan-main { color: var(--c-ink); font-size: var(--fs-title); font-weight: 700; line-height: var(--lh-tight); }
.rp-plan-line { margin-top: var(--sp-2); color: var(--c-ink-2); font-size: var(--fs-sm); line-height: var(--lh-compact); overflow-wrap: anywhere; }
.rp-plan-line > span { display: inline-block; min-width: 5em; color: var(--c-ink-3); font-weight: 700; }

/* 方案 v3 §三「教练」tab 两面（孩子 / 家长）。 */
.coach-face { margin: var(--sp-3) var(--sp-4) 0; padding: var(--sp-3); border: 1px solid var(--c-line); border-radius: var(--r-lg); background: var(--c-bg-soft); flex: none; }
.coach-face-switch { display: flex; gap: var(--sp-2); }
.coach-face-btn { flex: 1; min-height: 44px; border: 1px solid var(--c-line); border-radius: var(--r-md); background: #fff; color: var(--c-ink-2); font-size: var(--fs-sm); font-weight: 700; cursor: pointer; white-space: nowrap; flex-shrink: 0; }
.coach-face-btn.active { border-color: var(--c-brand); background: var(--c-brand); color: #fff; }
.coach-face-lead { margin-top: var(--sp-3); color: var(--c-ink); font-size: var(--fs-title); font-weight: 700; line-height: var(--lh-tight); }
.coach-face-chips { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-2); }
.coach-face-chip { min-height: 44px; padding: 0 var(--sp-3); border: 1px solid var(--c-line); border-radius: var(--r-sm); background: #fff; color: var(--c-ink-2); font-size: var(--fs-sm); cursor: pointer; }

/* 陪跑周节奏（效果图 v3「今天·状态C」四态切换器，收 4500 元那段服务）。 */
.rhythm { margin-top: var(--sp-4); }
.rhythm h3 { margin-bottom: var(--sp-2); font-size: var(--fs-title); line-height: var(--lh-tight); }
.rhythm-tabs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-2); }
.rhythm-tab {
  min-height: 44px; padding: 0 var(--sp-2); border: 1px solid var(--c-line);
  border-radius: var(--r-sm); background: #fff; color: var(--c-ink-2);
  font-size: var(--fs-sm); font-weight: 700; cursor: pointer;
}
.rhythm-tab.active { border-color: var(--c-brand); background: var(--c-brand); color: #fff; }
.rhythm-body { margin-top: var(--sp-3); padding: var(--sp-3); border: 1px solid var(--c-line); border-radius: var(--r-md); background: #fff; }
.rhythm-title { color: var(--c-ink); font-size: var(--fs-sm); font-weight: 800; line-height: var(--lh-tight); }
.rhythm-who { display: inline-block; margin-left: var(--sp-2); padding: 0 var(--sp-2); border-radius: var(--r-sm); background: var(--c-bg-soft); color: var(--c-ink-3); font-size: var(--fs-caption); font-weight: 700; }
.rhythm-text { margin-top: var(--sp-2); color: var(--c-ink-2); font-size: var(--fs-sm); line-height: var(--lh-compact); overflow-wrap: anywhere; }
.rhythm-now { margin-top: var(--sp-2); color: var(--c-ink-3); font-size: var(--fs-caption); line-height: var(--lh-compact); }

/* ── 首页服务卡改形态（2026-08-30）────────────────────────────────────────
   大圣连着三次说首页「还是之前的样子」。实测他是对的：六张 120px 高的紫/蓝/橙
   渐变大色块占满首屏往下，而效果图 v3 状态 A 屏全文 597 行里
   `全部服务`/`fcard`/`feature-cards` 与这六张卡的标题**全部零命中**——
   那一屏只有一张白底卡 + 一个 CTA，`.card` 与 `.cta` 的定义里没有 linear-gradient。

   ⚠️ 但不能删卡：实测 screen-family-dynamics / screen-planner / screen-assessment
   全站入口各只有 1 个，就是这几张卡；screen-screening 的正向入口也只有 1 个。
   删了这四个功能就不可达（playbook 2026-08-24 复发6 同族）。
   所以这里只换形态、不动 data-goto、不动文案，可达性由
   scripts/gates/verify_home_entries.py 钉住（已造红验响）。

   覆盖式写法：不改上面的原规则，只在末尾追加同特异性的覆盖，
   要回退就整段删掉，不必回去动原定义。 */
.feature-cards { gap: var(--sp-2); padding-top: var(--sp-2); }
.fcard {
  min-height: 0;
  padding: var(--sp-3) var(--sp-4);
  border: 1px solid var(--c-line);
  border-radius: var(--r-md);
  background: #fff;
  /* 渐变在下面按颜色类逐个干掉——.fcard.purple 特异性(0,2,0)压过 .fcard(0,1,0)，
     只写 .fcard{background-image:none} 不生效，实测改完仍量到 gradient。 */
  color: var(--c-ink);
  display: grid;
  grid-template-columns: 2em minmax(0, 1fr) auto;
  grid-template-areas: "icon title arrow" "icon sub arrow";
  align-items: center;
  column-gap: var(--sp-3);
  transition: none;                /* 原来的 transform hover 在触屏上没意义 */
}
.fcard:active { background: var(--c-bg-soft); }
.fcard .emoji {
  grid-area: icon; font-size: 20px; line-height: 1;
  position: static; opacity: 1; filter: none;
}
/* 2026-08-31：这一层把卡片从彩色渐变大卡改成白底列表行（见上方注释），原来
   40px/白描边的图标是配大卡渐变底设计的，套到白卡上会「白描边压白底」看不见。
   同一列表行布局下重新定size + 描边色，不动 HTML，只覆盖这一层实际生效的样式。 */
.fcard .emoji svg {
  width: 20px; height: 20px; stroke: var(--c-brand);
}
/* 🔴 2026-09-02 对齐效果图的列表行排版（效果图 .rows .row .tx > .t / .d）：
   标题 15px/600/--t1，说明 12px/500/--t2。
   线上原是 13.5/700 + 12/400/--t3 —— 标题偏小又偏粗、说明偏淡，
   于是「标题不像标题、说明像灰底注释」，跟效果图并排一看就是两套字阶。 */
.fcard h3 {
  grid-area: title; margin: 0;
  font-size: 15px; font-weight: 600; line-height: var(--lh-tight);
  color: var(--t1);
}
.fcard h3 span { white-space: normal; }   /* 大卡时代为防折行加的 nowrap，窄行里会撑爆 */
.fcard p {
  grid-area: sub; margin: 2px 0 0;
  font-size: var(--fs-caption); font-weight: 500; line-height: var(--lh-compact);
  color: var(--t2);
}
.fcard .arrow {
  grid-area: arrow; position: static;
  font-size: var(--fs-caption); font-weight: 700; color: var(--c-brand);
  background: none; padding: 0; border: none; white-space: nowrap;
}

/* 逐个覆盖颜色类的渐变（特异性必须对齐 .fcard.purple 这一级）。
   emoji 之外不再用颜色区分主次——客户 :57 要的是「三大模块并列 + 推荐顺序」，
   顺序由推荐序号表达，不是靠六种颜色。 */
/* ⚠️ 必须带 .feature-cards 前缀（特异性 0,3,0）：report.css 里也有一条
   `.fcard.slate`（0,2,0），而 report.css 在 index.html 里排在 style.css 之后，
   同特异性时后加载的赢——实测只写 .fcard.slate 时那张卡的渐变干不掉。
   同名类散在两个 CSS 文件里，改一个不够。 */
.feature-cards .fcard.purple, .feature-cards .fcard.blue,
.feature-cards .fcard.orange, .feature-cards .fcard.slate,
.feature-cards .fcard.green, .feature-cards .fcard.pink, .feature-cards .fcard.teal {
  background: #fff;
  background-image: none;
  color: var(--c-ink);
}

/* 三大模块分组（客户 改版要求-20260824.txt:175 的信息架构树 + :57 三大模块并列）。 */
.mod-group { display: flex; flex-direction: column; gap: var(--sp-2); }
.mod-group + .mod-group { margin-top: var(--sp-3); }
.mod-head {
  display: flex; align-items: center; gap: var(--sp-2);
  color: var(--c-ink); font-size: var(--fs-sm); font-weight: 800; line-height: var(--lh-tight);
}
.mod-no {
  padding: 2px var(--sp-2); border-radius: var(--r-sm);
  background: var(--c-brand-soft); color: var(--c-brand);
  font-size: var(--fs-caption); font-weight: 700; white-space: nowrap;
}
.mod-standalone { margin-top: var(--sp-4); }
/* 🔴 2026-09-02：这张卡的第二行是**状态**（「草稿 · 待主理人签发」），不是说明文字。
   效果图把同一个信息画成 .rbadge —— 一枚玻璃底圆角徽章（11px/800/琥珀色）；
   线上按普通 <p> 渲染成一行灰字，家长扫过去根本不会注意到「还没签发」。
   只作用于 .mod-standalone 这一张卡，不影响其它 .fcard 的说明行。 */
.fcard.mod-standalone > p {
  display: inline-flex; align-items: center; gap: 5px; justify-self: start;
  width: auto; margin-top: var(--sp-2); padding: 4px 10px;
  font-size: 11px; font-weight: 800; line-height: 1.4; color: var(--warn);
  background: rgba(255,255,255,.62); border: 1px solid var(--edge);
  border-radius: 999px;
}

/* 「开始全面诊断」下的三步预告（客户 改版要求-20260824.txt:175 的三步）。 */
.onboard-steps { display: flex; flex-direction: column; gap: var(--sp-2); margin-top: var(--sp-3); list-style: none; }
.onboard-steps li { display: grid; grid-template-columns: 3.6em minmax(0, 1fr); gap: var(--sp-2); align-items: baseline; }
.onboard-steps li > span { color: var(--c-brand); font-size: var(--fs-caption); font-weight: 700; white-space: nowrap; }
.onboard-steps li > p { color: var(--c-ink-2); font-size: var(--fs-sm); line-height: var(--lh-compact); }
.onboard-steps .onboard-out > span { color: var(--c-ink-3); }
.onboard-steps .onboard-out > p { color: var(--c-ink); font-weight: 700; }

/* ── 首页进度脊线（UI 定稿方向 B 的 signature）──────────────────────────
   一条墨绿竖线把三大模块按客户 改版要求-20260824.txt:175 的顺序串起来。
   它不是装饰：客户 :57 与验收表 :186 要「三大模块并列 + 推荐顺序引导」，
   这条线就是那个引导——去掉它，「顺序」这个信息就只能靠序号徽章暗示。 */
.home-spine{position:relative;padding-left:22px}
.home-spine::before{content:"";position:absolute;left:6px;top:10px;bottom:14px;width:2px;
  background:var(--c-line);border-radius:1px}
.sp-nd{position:relative;display:flex;flex-direction:column;gap:var(--sp-2)}
.sp-nd + .sp-nd{margin-top:var(--sp-4)}
.sp-nd::before{content:"";position:absolute;left:-19px;top:5px;width:9px;height:9px;border-radius:50%;
  background:var(--c-bg-soft);border:2px solid var(--c-line)}
.sp-nd.sp-first::before{background:var(--c-brand);border-color:var(--c-brand)}
.sp-step{font-size:var(--fs-caption);color:var(--c-ink-3);line-height:var(--lh-compact)}
.sp-nd.sp-first .sp-step{color:var(--c-brand);font-weight:700}
.sp-nd .mod-head{margin-top:2px}
.sp-nd .mod-group{margin:0}

/* ═══════════════════════════════════════════════════════════
   报告屏 · 液态玻璃 v8（2026-08-31 · UI 落地步骤 2）
   设计由主窗口出，纯 CSS 改造：report.js 已输出 .rp-doc/.rp-sec/
   #rp-weekly-three 这些类名，所以 JS 一行不动，改动面最小。
   复用首页已建的 --glass/--edge/--accent 体系，不重造 token。
   ═══════════════════════════════════════════════════════════ */
#screen-report{
  position:relative;isolation:isolate;
  background:
    radial-gradient(circle at 12% 10%, rgba(127, 211, 184, 0.25) 0%, transparent 42%),
    radial-gradient(circle at 88% 25%, rgba(159, 216, 232, 0.22) 0%, transparent 45%),
    radial-gradient(circle at 15% 55%, rgba(242, 214, 168, 0.20) 0%, transparent 45%),
    radial-gradient(circle at 85% 82%, rgba(168, 207, 192, 0.22) 0%, transparent 45%),
    linear-gradient(180deg, #E6F5EE 0%, #EEF7F2 320px, #E8F4EE 1000px, #F2F8F5 100%) !important;
  background-attachment: fixed !important;
}
#screen-report > .aurora{z-index:0}
#screen-report > *:not(.aurora){position:relative;z-index:1}

/* 顶栏玻璃化 */
#screen-report .navbar{
  background:rgba(255,255,255,.62);
  -webkit-backdrop-filter:blur(24px) saturate(190%);
  backdrop-filter:blur(24px) saturate(190%);
  border-bottom:1px solid var(--edge);
}
#screen-report .navbar .title{font-weight:700;color:var(--t1);letter-spacing:-.2px}
#screen-report .navbar .icon-btn{color:var(--accent)}
#screen-report .navbar .icon-btn svg{width:19px;height:19px;stroke:var(--accent);
  fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;vertical-align:-3px}

#screen-report .rp-doc{display:flex;flex-direction:column;gap:0;padding:0 !important;background:transparent !important;box-shadow:none !important;border:none !important;}

/* 每一章 = 一张玻璃卡 */
#screen-report .rp-sec,
#screen-report #rp-issued-plan{
  position:relative;overflow:hidden;border-radius:22px;
  background:var(--glass);border:1px solid var(--edge);
  -webkit-backdrop-filter:blur(26px) saturate(190%);
  backdrop-filter:blur(26px) saturate(190%);
  box-shadow:0 8px 32px rgba(12,27,22,.10),0 2px 8px rgba(12,27,22,.05);
  padding:16px 17px;margin:0 0 12px;
}
#screen-report .rp-sec::after,
#screen-report #rp-issued-plan::after{
  content:"";position:absolute;inset:0 0 auto;height:52%;pointer-events:none;
  background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,0));
}
#screen-report .rp-sec > *,
#screen-report #rp-issued-plan > *{position:relative;z-index:1}

#screen-report .rp-sec h3{
  margin:0 0 8px;font-size:15px;line-height:21px;font-weight:700;
  color:var(--t1);letter-spacing:-.1px;
}
/* 🔴 2026-09-02 分节标签对齐效果图 .sec h4：12px/800/字距 .6/品牌绿。
   效果图里这是「眉标」——一行小号绿字压在内容上方，不是跟内容同重的黑标题；
   线上写成 15px/700 深色，于是每一节都像一个新章节开头，报告读起来是断的。
   只改 .rp-sec-title 这一个「分节标签」类，节内真正的内容标题 .rp-sec h3 保持 15px 不动。 */
#screen-report .rp-sec-title{
  margin:0 0 6px;font-size:12px;line-height:17px;font-weight:800;
  color:var(--accent);letter-spacing:.6px;
}
#screen-report .rp-sec p,
#screen-report .rp-fold-body p{
  margin:0 0 9px;font-size:14px;line-height:21px;color:var(--t2);
}
#screen-report .rp-sec p:last-child,
#screen-report .rp-fold-body p:last-child{margin-bottom:0}

/* 🔴 2026-09-04：.rp-fold/.rp-fold-btn 的 JS 切换（bindFold）一直都在，但从没配过
   「关闭时到底藏不藏」的 CSS——is-closed 只改了按钮文字，内容其实一直全显。
   现在给「展开全文」这个新交互补上真正的显隐，同时也顺带修好了原本就该有
   （但一直没生效）的整章折叠。只作用于 #screen-report，全站唯一用到 .rp-fold 的地方。 */
#screen-report .rp-fold.is-closed > .rp-fold-body{ display:none; }
/* 只认真正的折叠开关（章节头 / 正文「展开全文」），不碰 .rp-head 里长得
   同名但其实是「签发」主按钮的 #rp-issue——两者共享 .rp-fold-btn 只是为了
   让 bindFold() 统一接线，视觉上不该一样。 */
#screen-report .rp-sec-head .rp-fold-btn,
#screen-report .rp-body-more .rp-fold-btn{
  background:transparent;border:none;color:var(--accent);font-size:12px;font-weight:700;
  padding:2px 0;cursor:pointer;
}
/* 🔴 2026-09-04 大圣裁定②手段a：章节头加纯装饰 SVG 图标徽标，破「五连纯文字」。
   .rp-sec-head 原来没有 flex，图标+标题+折叠按钮要横排对齐才不长得像堆叠错版。 */
#screen-report .rp-sec-head{
  display:flex;align-items:center;gap:8px;
}
#screen-report .rp-sec-head h3{ flex:1; margin:0; }
#screen-report .rp-ch-icon{
  flex:none;width:28px;height:28px;border-radius:9px;
  background:rgba(31,83,70,.11);color:var(--accent);
  display:flex;align-items:center;justify-content:center;
}
#screen-report .rp-ch-icon svg{ width:16px;height:16px; }

/* 章节正文：句号拆句 + 「· 」短列表，取代大段 <p> 字墙。 */
#screen-report .rp-body-list{
  list-style:none;margin:0 0 4px;padding:0;
}
#screen-report .rp-body-list li{
  position:relative;padding-left:14px;margin:0 0 8px;
  font-size:14px;line-height:21px;color:var(--t2);
}
#screen-report .rp-body-list li:last-child{margin-bottom:0}
#screen-report .rp-body-list li::before{
  content:"·";position:absolute;left:2px;top:0;color:var(--accent);font-weight:800;
}
#screen-report .rp-kw{
  color:var(--accent);font-weight:800;
}
#screen-report .rp-body-more{ margin-top:2px; }
#screen-report .rp-body-more .rp-fold-btn{
  display:inline-flex;align-items:center;gap:3px;
}
#screen-report .rp-body-more .rp-fold-body{ margin-top:6px; }

/* 升学路径方案与仪表盘卡片紧凑内边距 */
#screen-report .rp-sec.rp-plan-summary-card,
#screen-report .rp-sec.rp-path-dials-card {
  padding: 0 0 6px !important;
}

/* 🔴 2026-09-04 大圣实拍：空态原来是两张各套 .mine-empty（min-height:180px）
   的独立大卡，叠起来是「两张巨大空白卡」。合并成一张紧凑卡，高度随内容走。 */
#screen-report .rp-plan-empty-card { padding: 0 0 16px !important; }
#screen-report .rp-plan-empty-body { padding: 4px 17px 0; }
#screen-report .rp-plan-empty-body p {
  margin: 0 0 12px; font-size: 13px; line-height: 19px; color: var(--t2);
}
/* 🔴 09-04 复验红：门禁按钮宽度断言用的是「#screen-report 内第一个可见的
   [data-goto=screen-planner]」，不挑文案——这颗空态 CTA 在 DOM 里排在
   weeklyThreeBlock 那颗「看看适合我家的升学路径」前面，会被同一条断言量到。
   两颗按钮都必须达标（≥正文宽度 90%），不能只顾其中一颗；这里用负外边距把
   按钮撑出父容器 17px 的内边距，宽度对齐同屏其它通栏按钮。 */
#screen-report .rp-plan-empty-cta {
  display: flex; align-items: center; justify-content: center;
  text-decoration: none; cursor: pointer;
  margin: 0 -17px !important; width: calc(100% + 34px) !important;
}

/* 「本周三件事」尾段：客户 8.29:97 点名要在报告页最后，给它加重量 */
#screen-report #rp-weekly-three{
  border-color:rgba(31,83,70,.30);
  box-shadow:0 10px 34px rgba(31,83,70,.16),0 2px 8px rgba(12,27,22,.05);
  padding: 0 0 14px !important;
}
#screen-report #rp-weekly-three h3{color:var(--accent);font-size:16px}
#screen-report #rp-weekly-three .rp-fold-body p{color:var(--t1);font-weight:500}

/* 空态：诚实留白，不填假数据 */
#screen-report .mine-empty{
  font-size:13px;line-height:19px;color:var(--t3);font-weight:500;
  padding:6px 0 2px;
}

/* X5 内核回退：玻璃失效时退成不透明白卡，避免文字压在光斑上 */
@supports not (backdrop-filter: blur(1px)){
  #screen-report .navbar,
  #screen-report .rp-sec,
  #screen-report #rp-issued-plan{
    background:rgba(255,255,255,.97) !important;
    -webkit-backdrop-filter:none !important;backdrop-filter:none !important;
  }
}

/* ═══════════════════════════════════════════════════════════
   教练屏 + 我的屏 · 液态玻璃 v8（2026-08-31 · UI 落地步骤 2）
   同报告屏：纯 CSS 改造，复用 --glass/--edge/--accent 体系。
   ═══════════════════════════════════════════════════════════ */

/* ────── 教练屏（纯聊天，上传已搬走，本屏不得再出现表单）────── */
#screen-tifen{position:relative;isolation:isolate;background:#EFF4F1;overflow-y:hidden;--coach-title-h:0px;}
#screen-tifen.active{display:flex;flex-direction:column;}
#screen-tifen > .aurora{z-index:0}
#screen-tifen > *:not(.aurora){position:relative;z-index:1}

#screen-tifen .navbar{
  background:rgba(255,255,255,.62);
  -webkit-backdrop-filter:blur(24px) saturate(190%);
  backdrop-filter:blur(24px) saturate(190%);
  border-bottom:1px solid var(--edge);
}
#screen-tifen .navbar .title{font-weight:700;color:var(--t1)}
#screen-tifen .navbar .icon-btn{color:var(--accent);font-weight:600}

/* 孩子 / 家长 分段控件 */
#screen-tifen .coach-face{
  margin:12px 16px 0;padding:12px 14px;border-radius:20px;
  position:relative;overflow:hidden;
  background:var(--glass);border:1px solid var(--edge);
  -webkit-backdrop-filter:blur(26px) saturate(190%);
  backdrop-filter:blur(26px) saturate(190%);
  box-shadow:0 8px 32px rgba(12,27,22,.10);
}
#screen-tifen .coach-face-switch{
  display:flex;gap:4px;padding:4px;border-radius:12px;margin:0 0 10px;
  background:rgba(255,255,255,.5);border:1px solid rgba(255,255,255,.66);
}
#screen-tifen .coach-face-btn{
  flex:1;min-height:44px;border:0;border-radius:9px;cursor:pointer;
  font-family:inherit;font-size:13px;font-weight:600;color:var(--t2);
  background:transparent;
}
#screen-tifen .coach-face-btn.active{
  background:#fff;color:var(--accent);font-weight:700;
  box-shadow:0 1px 3px rgba(12,27,22,.10);
}
#screen-tifen .coach-face-lead{
  margin:0 0 8px;font-size:13px;line-height:19px;color:var(--t2);font-weight:500;
}
#screen-tifen .coach-face-chips{display:flex;gap:7px;flex-wrap:wrap}
#screen-tifen .coach-face-chips > *{
  font-size:12px;font-weight:600;color:var(--accent);
  padding:11px 12px;border-radius:999px;min-height:44px;
  display:inline-flex;align-items:center;
  background:rgba(255,255,255,.6);border:1px solid var(--edge);
}

/* 🔴 2026-09-03 · 对话区保底高度（工作流验收「学习卡片」判不可达，线上实测坐实）
   实测线上 #screen-tifen 的子元素分布（父高 824px）：
     tf-insights 1068px · chat-area **16px** · 内容需要 330px → 被裁掉 314px
   `.chat-area` 是 `flex: 1 1 0%`，空间不够时会被一路压到接近 0；
   而今早把洞察区从「＋」抽屉挪回主屏（F5 B-2）之后，tf-insights 一块就撑到 1068px，
   把对话区挤没了 —— **教练屏的主体是对话，洞察是辅助，不能反过来**。
   学习卡片渲染进对话区，于是被裁到只剩 1.7px，家长滚到底也读不出整张卡。

   这是本文件今天第三次同一类「定高 flex 列里子项被压塌」：
   首页 .home-intent（被裁 378px）、.home-spine（注释在 §6）、这里。
   前两处的解法是 `flex: 0 0 auto`（内容多高就多高）；对话区不能那样——
   它本就该占剩余空间并内部滚动，所以这里用 min-height 保底，不动 flex。
   ⚠️ 判「家长读得到」必须量 getBoundingClientRect().height 与 scrollHeight 的差，
      `is_visible()` 对被压塌的容器照样返回 true（今天已栽过两次）。 */
#screen-tifen .chat-area{padding:calc(8px + var(--coach-title-h, 0px)) 16px 4px; flex:1 1 0%; min-height:240px; min-width:0; overflow-y:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; -ms-overflow-style:none;}
#screen-tifen .chat-area::-webkit-scrollbar{display:none !important; width:0 !important; height:0 !important;}
#screen-tifen .msg{margin:0 0 11px; display:flex; gap:var(--sp-2); align-items:flex-start; min-width:0; max-width:100%;}
#screen-tifen .msg .avatar{
  width: 28px; height: 28px; border-radius: 9px; flex: 0 0 auto;
  background: linear-gradient(135deg, var(--accent-2), var(--accent));
  color: #fff; display: flex; align-items: center; justify-content: center;
  box-shadow: 0 2px 8px rgba(31, 83, 70, .25);
  border: 1px solid rgba(255, 255, 255, .5);
}
#screen-tifen .msg .avatar svg{
  width: 15px; height: 15px; stroke: #fff;
  fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
}
#screen-tifen .msg .bubble{
  min-width: 0; max-width: 100%; box-sizing: border-box; overflow-wrap: anywhere;
  font-size: 13.5px !important; line-height: 1.58 !important; padding: 10px 14px !important; border-radius: 14px !important;
  border-bottom-left-radius: 4px !important; color: var(--t1);
  background: rgba(255, 255, 255, .96); border: 1px solid var(--edge);
  -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
  box-shadow: 0 3px 14px rgba(12, 27, 22, .05);
  letter-spacing: -0.1px;
}
#screen-tifen .msg .bubble p{ margin: 0 0 5px !important; font-size: 13.5px !important; line-height: 1.58 !important; }
#screen-tifen .msg .bubble p:last-child{ margin-bottom: 0 !important; }
#screen-tifen .msg .bubble b { color: var(--accent); font-weight: 700; }
#screen-tifen .msg:not(.user) .bubble{
  max-width: calc(100% - 28px - var(--sp-2));
}
#screen-tifen .msg .ai-rich,
#screen-tifen .msg .ai-card,
#screen-tifen .msg .ai-para,
#screen-tifen .msg .ai-lead{
  min-width: 0; max-width: 100%; box-sizing: border-box; overflow-wrap: anywhere;
}
#screen-tifen .msg.user .bubble{
  font-size: 13.5px !important; line-height: 1.58 !important; padding: 10px 14px !important;
  border-bottom-left-radius: 14px !important; border-bottom-right-radius: 4px !important;
  background: linear-gradient(135deg, var(--accent-2), var(--accent));
  color: #fff; font-weight: 500; border-color: transparent;
  box-shadow: 0 4px 14px rgba(31, 83, 70, .25);
}

/* AI 提分教练交互卡片与回复：统一与前置气泡 13.5px/1.58 视觉排版一致，彻底消除回复文字过大问题 */
#screen-tifen .plan-card-h5 {
  margin: 0 0 11px !important;
  padding: 12px 14px !important;
  border-radius: 14px !important;
  border: 1px solid var(--edge) !important;
  background: rgba(255, 255, 255, .96) !important;
  -webkit-backdrop-filter: blur(20px) !important;
  backdrop-filter: blur(20px) !important;
  box-shadow: 0 3px 14px rgba(12, 27, 22, .05) !important;
  gap: 8px !important;
  font-size: 13.5px !important;
  line-height: 1.58 !important;
  color: var(--t1) !important;
  letter-spacing: -0.1px !important;
}

#screen-tifen .plan-card-h5 .pk-lead,
#screen-tifen .pk-lead {
  font-size: 13.5px !important;
  line-height: 1.58 !important;
  color: var(--t1) !important;
  letter-spacing: -0.1px !important;
}

#screen-tifen .plan-card-h5 .pk-step-desc,
#screen-tifen .pk-step-desc {
  font-size: 13.5px !important;
  line-height: 1.58 !important;
  color: var(--t1) !important;
}

#screen-tifen .plan-card-h5 .pk-step-title,
#screen-tifen .pk-step-title {
  font-size: 14px !important;
  font-weight: 700 !important;
  line-height: 1.45 !important;
  color: var(--t1) !important;
}

#screen-tifen .plan-card-h5 .pk-tip,
#screen-tifen .pk-tip,
#screen-tifen .plan-card-h5 .pk-tip-text,
#screen-tifen .pk-tip-text {
  font-size: 13px !important;
  line-height: 1.55 !important;
  color: var(--t2) !important;
}

#screen-tifen .plan-card-h5 .pk-sec-title,
#screen-tifen .pk-sec-title {
  font-size: 14px !important;
  font-weight: 700 !important;
  line-height: 1.45 !important;
  color: var(--t1) !important;
  margin: 10px 0 4px !important;
}

#screen-tifen .plan-card-h5 .pk-sec p,
#screen-tifen .pk-sec p {
  font-size: 13.5px !important;
  line-height: 1.58 !important;
  color: var(--t1) !important;
  margin: 0 0 6px !important;
}

#screen-tifen .chat-area .msg--doc .bubble,
#screen-tifen .chat-area .llm-bubble {
  font-size: 13.5px !important;
  line-height: 1.58 !important;
  padding: 12px 14px !important;
  border-radius: 14px !important;
  color: var(--t1) !important;
  letter-spacing: -0.1px !important;
}

#screen-tifen .chat-area .ai-para,
#screen-tifen .chat-area .ai-lead,
#screen-tifen .chat-area .ai-card,
#screen-tifen .chat-area .ai-card-text,
#screen-tifen .chat-area .la-text,
#screen-tifen .chat-area .la-text p {
  font-size: 13.5px !important;
  line-height: 1.58 !important;
  color: var(--t1) !important;
}

#screen-tifen .chat-area .ai-lead {
  border-left: 3px solid var(--accent-2, #358B74) !important;
  padding-left: 8px !important;
}

/* 目标胶囊选项：由淡蓝升级为翡翠液态毛玻璃卡片 */
#screen-tifen .sg-wrap { margin-left: 38px; }
#screen-tifen .sg-chip {
  border: 1.2px solid rgba(31, 83, 70, .22);
  background: rgba(255, 255, 255, .82);
  color: var(--accent);
  font-size: 13px;
  font-weight: 700;
  padding: 8px 15px;
  border-radius: 999px;
  cursor: pointer;
  transition: all .15s ease;
  min-height: 38px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 3px 10px rgba(12, 27, 22, .05);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
}
#screen-tifen .sg-chip:hover {
  background: #fff;
  border-color: var(--accent);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(31, 83, 70, .14);
  color: var(--accent);
}
#screen-tifen .sg-chip.is-selected {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
  box-shadow: 0 3px 10px rgba(31, 83, 70, .3);
}

/* 输入条 */
#screen-tifen .chat-input{
  margin:4px 12px 4px;padding:5px 6px 5px 6px;border-radius:999px;
  display:flex;align-items:center;gap:8px;
  background:rgba(255,255,255,.92);border:1px solid var(--edge);
  -webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px);
  box-shadow:0 4px 18px rgba(12,27,22,.06);
}
#screen-tifen .chat-input input{
  flex:1;min-width:0;border:0;background:transparent;font-family:inherit;
  font-size:14px;color:var(--t1);min-height:36px;padding:0 6px;
}
#screen-tifen .chat-input input::placeholder{color:var(--t3)}
#screen-tifen .chat-input .send{
  width:36px;height:36px;border-radius:50%;flex:none;border:0;cursor:pointer;
  background:linear-gradient(135deg,var(--accent-2),var(--accent));color:#fff;
  font-size:16px;font-weight:700;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 3px 10px rgba(31,83,70,.28);
  transition:all .2s ease;
}
#screen-tifen .chat-input .send svg {
  width:16px;height:16px;stroke:#fff;stroke-width:2.2;fill:none;
}
/* 2026-09-02：没选目标时输入框是锁住的，必须一眼看出来是锁着的。
   原来锁住和能用长得一模一样，家长只会以为产品坏了。
   ⚠️ 不许在这里写 pointer-events:none —— 点得到才有机会告诉他为什么锁着。 */
#screen-tifen .chat-input.is-locked{background:rgba(255,255,255,.55);border-style:dashed}
#screen-tifen .chat-input.is-locked input{cursor:pointer}
#screen-tifen .chat-input.is-locked .send{
  opacity:.45;box-shadow:none;
}

/* ────── 我的屏 ────── */
#screen-mine{position:relative;isolation:isolate;background:#EFF4F1}
#screen-mine > .aurora{z-index:0}
#screen-mine > *:not(.aurora){position:relative;z-index:1}

#screen-mine .navbar{
  background:rgba(255,255,255,.62);
  -webkit-backdrop-filter:blur(24px) saturate(190%);
  backdrop-filter:blur(24px) saturate(190%);
  border-bottom:1px solid var(--edge);
}
#screen-mine .navbar .title{font-weight:700;color:var(--t1)}
#screen-mine .navbar .icon-btn{color:var(--accent)}

/* 🔴 2026-09-04 P0 大圣实拍：滚动到某些中间位置时，卡片文字（"上传三次成绩与
   试卷"等）会画穿到顶栏区域，像标题被顶栏裁切了一半。造红实测：navbar 是
   position:relative 的正常流兄弟元素、.mine-pane 是 overflow-y:auto 且
   min-height:0 的独立滚动区，几何边界（getBoundingClientRect）完全正确、
   彼此不重叠——但关掉 backdrop-filter 之后问题依旧存在，排除了"毛玻璃合成层
   泄漏"的猜测，是 Chromium 在这套 flex+overflow:auto+多层 .glass 卡片组合下，
   滚动中间帧会把子元素的绘制短暂画到裁剪框外面（合成层边界判定问题，不是
   布局问题）。加 contain:paint 强制这个滚动容器成为独立的绘制包含块，
   子元素绝不会被画到它的盒子外面——不影响 overflow-y:auto 本身的可滚动性
  （已用真实 wheel 滚动 + scrollTop 断言验证）。 */
#screen-mine .mine-pane{padding:0 16px 16px !important;background:transparent;box-sizing:border-box;contain:paint}
#screen-mine .mine-pane > .glass,
#screen-mine .mine-pane > details.glass{
  margin-left:0 !important;
  margin-right:0 !important;
  width:100% !important;
  box-sizing:border-box !important;
}
#screen-mine .mine-banner{
  margin:12px 0 4px;padding:9px 13px;border-radius:12px;
  font-size:12px;line-height:17px;font-weight:600;color:var(--accent);
  background:rgba(255,255,255,.6);border:1px solid var(--edge);
  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
}
/* 效果图「我的」的分节行标题走 .row .t = 15px/600/--t1（不是灰色小字）。
   线上 13px/--t3 使这四块（档案/规划师/复测曲线/设置）看着像注释而不是标题。 */
#screen-mine .mine-sec-title{
  margin:18px 4px 8px;font-size:15px;line-height:21px;
  font-weight:600;color:var(--t1);letter-spacing:-.05px;
}
/* 🔴 效果图用两个类区分同为 15px 的两种标题：图表卡标题 .ch .ct 是 700，
   列表行标题 .row .t 是 600。产品这边 .mine-sec-title 一个类同时兼两种角色
   （「复测曲线」是图表标题，「设置」「我的规划师」「孩子档案」是列表行标题）。
   实测四个 h3 的前后兄弟都是 div.mine-body、空态下内部也都只有 div.mine-empty，
   **纯 CSS 没有可靠判别信号**，所以在 index.html 上给图表那个加了一个标记类。 */
#screen-mine .mine-sec-title--chart{ font-weight:700; }
/* 每块 = 一张玻璃卡。#exam-upload-entry 的内部结构一字未动，只加外壳样式 */
#screen-mine .mine-body,
#exam-upload-entry{
  position:relative;overflow:hidden;border-radius:20px;contain:paint;
  background:var(--glass);border:1px solid var(--edge);
  -webkit-backdrop-filter:blur(26px) saturate(190%);
  backdrop-filter:blur(26px) saturate(190%);
  box-shadow:0 8px 32px rgba(12,27,22,.10),0 2px 8px rgba(12,27,22,.05);
  padding:15px 16px;margin:0;
}
#screen-mine .mine-body::after,
#exam-upload-entry::after{
  content:"";position:absolute;inset:0 0 auto;height:52%;pointer-events:none;
  background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,0));
}
#screen-mine .mine-body > *,
#exam-upload-entry > *{position:relative;z-index:1}
/* 效果图上传卡标题 .upl .ut = 13px/700 */
#exam-upload-entry > summary{
  font-size:13px;font-weight:700;color:var(--t1);cursor:pointer;
  min-height:44px;display:flex;align-items:center;
}
#screen-mine .form-hint{font-size:12px;line-height:17px;color:var(--t2);font-weight:500}
#screen-mine .mine-empty{font-size:13px;line-height:19px;color:var(--t3);font-weight:500}

/* 试卷逐题解析：保持在档案上传卡内，表格独立横滚，避免窄屏挤压五列内容。 */
#exam-upload-list{display:flex;flex-direction:column;gap:8px;margin-top:10px}
#exam-upload-list .form-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.exam-parse-btn{
  min-height:36px;padding:5px 10px;border:1px solid var(--accent);border-radius:8px;
  background:#fff;color:var(--accent);font:inherit;font-size:12px;font-weight:700;cursor:pointer;
}
.exam-parse-btn:disabled{opacity:.6;cursor:wait}
#exam-analysis-list{margin-top:12px;max-height:35vh;overflow-y:auto;-webkit-overflow-scrolling:touch}
.exam-analysis-summary{padding:10px 12px;border:1px solid var(--edge);border-radius:10px;background:rgba(255,255,255,.72)}
.exam-analysis-summary h4{margin:0 0 4px;font-size:13px;line-height:18px;color:var(--t1)}
.exam-analysis-stat{margin:0 0 6px;font-size:12px;line-height:18px;color:var(--t2)}
.exam-analysis-tags{display:flex;flex-wrap:wrap;gap:6px}
.exam-analysis-tag{white-space:nowrap;flex-shrink:0;font-size:11.5px;line-height:18px;padding:1px 8px;border-radius:999px;background:#edf5f1;color:var(--accent)}
.exam-analysis-toggle{margin-top:8px;min-height:36px;padding:6px 12px;border:1px solid var(--edge);border-radius:999px;background:#fff;color:var(--accent);font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer}
.exam-analysis-all{margin-top:8px}
/* 聊天区保底：试卷面板展开时，对话区至少占视口一半（P2；E6 判据） */
#screen-tifen.exam-analysis-open .chat-area{min-height:52vh}
.exam-analysis-state{margin:0;color:var(--t3);font-size:12px;line-height:18px}
.exam-analysis-state.is-loading{color:var(--accent)}
.exam-analysis-paper{margin-top:12px}
.exam-analysis-paper:first-child{margin-top:0}
.exam-analysis-paper h4{margin:0 0 7px;font-size:13px;line-height:18px;color:var(--t1)}
.exam-analysis-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--edge);border-radius:8px;background:rgba(255,255,255,.72)}
.exam-analysis-table{width:100%;min-width:560px;border-collapse:separate;border-spacing:0;font-size:12px;line-height:17px}
.exam-analysis-table th,.exam-analysis-table td{padding:8px 9px;text-align:left;vertical-align:top;border-bottom:1px solid var(--edge);overflow-wrap:anywhere}
.exam-analysis-table th{position:sticky;top:0;z-index:1;background:#edf5f1;color:var(--t2);font-weight:700;white-space:nowrap}
.exam-analysis-table tbody tr:last-child td{border-bottom:0}
.exam-analysis-table th:nth-child(1),.exam-analysis-table td:nth-child(1){min-width:48px}
.exam-analysis-table th:nth-child(2),.exam-analysis-table td:nth-child(2){min-width:116px}
.exam-analysis-table th:nth-child(3),.exam-analysis-table td:nth-child(3){min-width:86px}
.exam-analysis-table th:nth-child(4),.exam-analysis-table td:nth-child(4){min-width:58px;white-space:nowrap}
.exam-analysis-table th:nth-child(5),.exam-analysis-table td:nth-child(5){min-width:92px;white-space:nowrap}

/* X5 内核回退：玻璃失效时退成不透明白卡 */
@supports not (backdrop-filter: blur(1px)){
  #screen-tifen .navbar, #screen-tifen .coach-face,
  #screen-tifen .msg .bubble, #screen-tifen .chat-input,
  #screen-mine .navbar, #screen-mine .mine-banner,
  #screen-mine .mine-body,
  #exam-upload-entry{
    background:rgba(255,255,255,.97) !important;
    -webkit-backdrop-filter:none !important;backdrop-filter:none !important;
  }
  #screen-tifen .msg.user .bubble{
    background:linear-gradient(180deg,#2F7D68,#1F5346) !important;color:#fff !important;
  }
}

/* 我的屏分区标签：图标与文字对齐（emoji 换 SVG 后补） */
#screen-mine .mine-section-label{
  display:flex;align-items:center;gap:6px;
  font-size:12px;font-weight:700;color:var(--accent);
  letter-spacing:.2px;margin:12px 0 6px;
}
#screen-mine .mine-section-label svg{flex:none;opacity:.9}

/* ═══════════════════════════════════════════════════════════
   四屏视觉对齐效果图（2026-08-31 · 机器对比查出的两处差异）
   对比脚本实测：token 8/8 一致、玻璃参数一致，但
     ① 屏背景色：效果图 #EFF4F1（带绿浅底）vs 产品 rgb(246,248,252)（偏蓝白）
        —— 我给报告/教练/我的三屏设了，唯独漏了首页
     ② 卡片圆角：效果图 22px vs 产品 18px
   ═══════════════════════════════════════════════════════════ */
#screen-home{background:#EFF4F1}
#screen-home,#screen-report,#screen-tifen,#screen-mine{background-color:#EFF4F1}

/* 圆角统一到效果图口径 22px */
#screen-home .hm-card,
#screen-report .rp-sec,
#screen-report #rp-issued-plan,
#screen-tifen .coach-face,
#screen-mine .mine-body,
#exam-upload-entry,
.glass{border-radius:22px}

/* 2026-09-01：玻璃化收口。
   实测线上首页同屏并存两种材质 —— 4 张 .hm-card 已是 rgba(255,255,255,.58)+blur(26px)、
   圆角 22px（与 UI-v7 定稿效果图一致），而 6 张 .fcard 是 rgb(255,255,255) 圆角 14px、
   顶部 .today-card 是 rgb(234,240,237) 圆角 18px，两者 backdrop-filter 均为 none。
   这就是「跟效果图完全不一样」的根因：玻璃只做了一半就上线。这里把余下的补齐。

   🔴 特异性：.fcard.purple 与 .today-card[data-state] 都是 (0,2,0)，
      只写 .fcard{} (0,1,0) 压不住 —— 08-31 那次「改完仍量到 gradient」就是这么来的。
      故一律加 #screen-home 前缀。
   🔴 只改材质，不碰任何 color：线上 .fcard 当前已是白底深字，
      从白底换成半透明白底不改变文字可读性；动颜色才会重演白底白字。 */
#screen-home .today-card,
#screen-home .today-card[data-state="empty"],
#screen-home .today-card[data-state="confirmed"],
#screen-home .fcard,
#screen-home .fcard.blue,
#screen-home .fcard.orange,
#screen-home .fcard.purple {
  background: var(--glass);
  background-image: none;
  border: 1px solid var(--edge);
  border-radius: 22px;
  -webkit-backdrop-filter: blur(26px) saturate(190%);
  backdrop-filter: blur(26px) saturate(190%);
  box-shadow: 0 8px 32px rgba(12,27,22,.10), 0 2px 8px rgba(12,27,22,.05);
}
/* 警示态保留可辨识底色，不做半透明 —— 否则「待处理 / 出错」失去颜色语义 */
#screen-home .today-card[data-state="pending"],
#screen-home .today-card[data-state="error"] {
  background: var(--c-warn-bg); background-image: none;
  -webkit-backdrop-filter: none; backdrop-filter: none;
}
/* X5 回退：微信安卓内核对 backdrop-filter 支持不完整，失效时退成不透明白卡，
   不能让文字直接压在极光光斑上（沿用本文件既有的两处 @supports 约定）。 */
@supports not (backdrop-filter: blur(1px)) {
  #screen-home .today-card,
  #screen-home .fcard,
  #screen-home .fcard.blue,
  #screen-home .fcard.orange,
  #screen-home .fcard.purple { background: #fff; }
}

/* 2026-09-01：跨屏玻璃化收口（首页之外的三屏）。
   基准取自 UI-v7 定稿效果图实测值，不是拍脑袋定的：
     效果图 .seg    rgba(255,255,255,.55) + 毛玻璃 + 12px   ← 线上 .coach-face-switch 是 .5 且无毛玻璃
     效果图 .glass  rgba(255,255,255,.58) + 毛玻璃 + 22px   ← 线上 .mine-empty 是纯白不透明 14px
   已核对不动的：.bubble 线上实测 .72+毛玻璃+16px，与效果图 .msg.ai 完全一致，
   先前那版尺子拿「22px」硬套把它误报成缺陷，属判据自伤，此处不改它。 */
#screen-tifen .coach-face-switch {
  background: rgba(255,255,255,.55);
  -webkit-backdrop-filter: blur(18px) saturate(190%);
  backdrop-filter: blur(18px) saturate(190%);
}
.app-screen .mine-empty {
  background: var(--glass);
  background-image: none;
  border: 1px solid var(--edge);
  border-radius: 22px;
  -webkit-backdrop-filter: blur(26px) saturate(190%);
  backdrop-filter: blur(26px) saturate(190%);
}
/* X5 回退，沿用本文件既有约定 */
@supports not (backdrop-filter: blur(1px)) {
  #screen-tifen .coach-face-switch { background: rgba(255,255,255,.92); }
  .app-screen .mine-empty { background: #fff; }
}

/* 2026-09-01：有家庭动力报告时，让「还没有可汇总的内容」这句空态提示让开。

   现象：走完 6 步诊断提交后落地在报告屏，用户不滚动时第一屏是
       28px  综合报告
       76px  生成综合报告（disabled）
      122px  还没有可汇总的内容，先去做提分诊断、升学规划或心理测评中的任意一项…
      174px  家庭动力诊断报告   ← 他刚做完的东西被压到这里
   #rp-comprehensive-hint 在 .navbar 里（order=1），天然排在 #rp-body（order=2）之前。
   「综合报告」是另一个板块（要求提分/升学/心理测评三选一，家庭动力不算），
   按钮灰着符合设计；问题是这句空态说明压在了真实内容前面。

   🔴 只能条件隐藏，不许无条件隐藏 —— 08-31 无条件隐藏过一次，回归当场报红
      （test_a10_comprehensive_button_empty_and_seeded_states 断言空态必须显示这句）。
   🔴 用 :has() 跟随 DOM 状态：报告由 assessment.js renderFamilyReport() 写入
      #rp-body 内的 <div id="fd-report">，无论是提交时渲染还是刷新后恢复都能命中，
      不必在每个渲染路径上各挂一次 JS。不支持 :has() 的内核整条规则失效、退回现状，
      只是没享受到这个优化，不会更坏。
   判据见 scripts/gates/verify_report_order_0901.py（两段：空态必须在、有报告必须让位）。 */
#screen-report:has(#rp-body #fd-report) #rp-comprehensive-hint { display: none; }

/* 手机壳容器也统一到 #EFF4F1：屏内容不满屏时会露出这一层，
   原为 rgb(246,248,252) 偏蓝白，与屏内带绿浅底有色差 */
.phone > .screen,
body.shell-phone{background-color:#EFF4F1}

/* ═══════════════════════════════════════════════════════════
   安全区适配（2026-08-31 · 大圣截图指出：标题被刘海压住、内容被 tabbar 切掉）
   根因：效果图里画了 54px 模拟状态栏占位来避开刘海，
   产品是真网页没有那条状态栏，navbar 直接顶到屏幕最上沿。
   这类问题机器断言照不到 —— emoji/对比度/触控尺寸验的是元素本身，
   不验元素在不在安全区里。

   ⚠️ 设计成可测的：env() 在桌面浏览器恒为 0，裸写就没法自验。
   包一层 CSS 变量，测试时可覆盖 --sa-top/--sa-bottom 模拟刘海。
   ═══════════════════════════════════════════════════════════ */
:root{
  --sa-top:env(safe-area-inset-top, 0px);
  --sa-bottom:env(safe-area-inset-bottom, 0px);
  --tabbar-h:87px;
}

/* 顶栏：避开刘海 */
#screen-home .navbar,
#screen-report .navbar,
#screen-tifen .navbar,
#screen-mine .navbar,
#screen-family-dynamics .navbar,
#screen-screening .navbar,
#screen-assessment .navbar,
#screen-planner .navbar,
#screen-subject-diagnosis .navbar{
  padding-top:calc(10px + var(--sa-top));
  box-sizing:content-box;
}

/* 背景光斑层也要下移，否则光晕会盖到刘海区 */
.aurora{top:calc(0px - var(--sa-top))}

/* 这里原有一批「滚动容器 padding-bottom = tabbar 高度」的规则，2026-08-31 撤销。
   它按「tabbar 悬浮会遮住内容」建模，但 tabbar 是流内 sticky/flex 兄弟（app.js 加 family-tabbar），
   本来就不遮内容 —— 这个 padding 反而把 sticky 的粘附底边整个顶上去 99px，
   于是首页底部导航浮在半空。两轮终审（sol / F5）一致判撤。
   底部不被遮的保证改由行为断言承担：scripts/gates/verify_safe_area_0831.py 断言二。 */

/* 教练屏输入条是固定在底部的，也要避开 tabbar 与 home indicator */
#screen-tifen .chat-input{
  margin-bottom:calc(var(--sa-bottom) + 6px);
}

/* tabbar 自身避开 home indicator */
.tabbar{padding-bottom:calc(8px + var(--sa-bottom))}

/* ── 安全区补丁 2：首页 ────────────────────────────────────────
   门禁 verify_safe_area_0831.py 正跑时抓到的漏网：首页没有 .navbar，
   顶部是 .home-head、滚动的是 #screen-home 自己，
   上一批那串选择器一个都没匹配到，首页照样会被刘海压、被 tab 栏切。
   ─────────────────────────────────────────────────────────── */
#screen-home{padding-top:var(--sa-top)}
#screen-home .home-head{padding-top:16px}
/* 同上撤销。tabbar 钉底改用 margin-top:auto（见文件末「三屏布局修复」一节）。 */

/* ══ tab 屏顶部：传统导航条 → 沉浸式大标题（2026-08-31）═══════════
   大圣比对效果图后指出「跟效果图差别太大」，逐屏比对定位到三条：
   ① 四个 tab 屏都挂着「← 返回」箭头，但 tab 屏靠底部栏导航，返回是冗余
      （非 tab 屏的 navbar 返回箭头必须保留，所以选择器逐屏点名，不用通配）
   ② .title 是居中小字，效果图是左对齐大标题
   ③ 报告屏把「生成综合报告」按钮和整段说明塞进了 navbar，顶部又高又乱
   ══════════════════════════════════════════════════════════ */
#screen-report .navbar,
#screen-tifen  .navbar,
#screen-mine   .navbar{
  display:grid; grid-template-columns:1fr auto; align-items:center;
  gap:6px 10px; background:transparent; border:none; box-shadow:none;
  padding:calc(12px + var(--sa-top)) 18px 6px;
}
#screen-report .navbar > [data-goto="screen-home"],
#screen-tifen  .navbar > [data-goto="screen-home"],
#screen-mine   .navbar > [data-goto="screen-home"]{ display:none }

#screen-report .navbar .title,
#screen-tifen  .navbar .title,
#screen-mine   .navbar .title{
  grid-column:1; justify-self:start; text-align:left;
  /* 效果图页面主标题 .head h1 = 30px/700/-.4px */
  font-size:30px; font-weight:700; letter-spacing:-.4px;
  color:var(--t1); line-height:1.15;
}
/* 右上角功能键：缩成圆形玻璃钮，不再是文字按钮 */
#screen-report .navbar > .icon-btn:not([data-goto]),
#screen-tifen  .navbar > .icon-btn:not([data-goto]),
#screen-mine   .navbar > .icon-btn:not([data-goto]){
  grid-column:2; justify-self:end;
  width:38px; height:38px; display:flex; align-items:center; justify-content:center;
  border-radius:50%; background:rgba(255,255,255,.6); border:1px solid var(--edge);
  backdrop-filter:blur(18px) saturate(160%); color:var(--t2); font-size:13px;
}
/* 2026-09-03 缺陷 B：那颗按钮不再挤进标题栏（157px 厚带 + 硬边拼接感），
   挪进正文顶部的独立动作卡（report.js ensureComprehensiveButton()）。
   navbar 现在只剩返回箭头 + 标题 + 打印键，与其余八屏同高。 */
/* 2026-09-04 排版统一：左右边距 16px→10px，与 #rp-body 正文块（left:10）齐边 */
#screen-report > #rp-comprehensive-card{
  order:3; margin:14px 10px 12px; padding:14px 16px; border-radius:22px;
  background:var(--glass); border:1px solid var(--edge);
  -webkit-backdrop-filter:blur(26px) saturate(190%); backdrop-filter:blur(26px) saturate(190%);
  box-shadow:0 8px 32px rgba(12,27,22,.10),0 2px 8px rgba(12,27,22,.05);
}
#screen-report #rp-generate-comprehensive{
  display:block; width:100%; text-align:center;
  padding:11px 16px; border-radius:14px; border:none;
  background:linear-gradient(135deg,#2F7D68,#1F5346); color:#fff; font-weight:700; font-size:15px;
  box-shadow:0 4px 16px rgba(31,83,70,.25); cursor:pointer;
}
/* 缺陷 C：不用 disabled（读屏/事件都会失灵，见 playbook
   2026-09-02-lock-mutes-its-own-explanation）。按钮保持可点，
   靠这个类降透明度 + 虚线边，肉眼可辨「暂不可用」。 */
#screen-report #rp-generate-comprehensive.is-unavailable{
  background:rgba(12,27,22,.10); color:var(--t3);
  border:1.5px dashed rgba(12,27,22,.28); opacity:.82;
}
#screen-report #rp-comprehensive-hint{
  margin:8px 0 0; font-size:12.5px; line-height:1.5; color:var(--t3); text-align:left;
}
/* 点了但暂不可用时的即时反馈：颜色脉冲一下，证明「点了有反应」，
   而不是一句一直躺在那里、点没点都长一个样的静态说明。 */
#screen-report #rp-comprehensive-hint.is-flash{ animation:rp-hint-flash .6s ease; }
@keyframes rp-hint-flash{ 0%{ color:var(--accent); } 100%{ color:var(--t3); } }

/* ══ 三屏布局修复（2026-08-31 · bug 工作流 S2）════════════════════
   大圣三张截图：首页导航浮在半空 / 报告只看得到下半屏 / 教练顶部吃掉三分之一。
   两轮终审（gpt-5.6-sol 根因终审 + F5 修法裁决）判词见
   .cc/artifacts/receipts/2026-08-31-三屏布局-round{2,3}.md
   ══════════════════════════════════════════════════════════ */

/* ① 首页导航钉底。
      撤 padding 之后 sticky 仍占流内空间、不遮内容；但内容不满一屏时 sticky
      不起作用，导航会浮回半空 —— margin-top:auto 是 flex 列里流内钉底的标准解。
      （F5 第 1 条附加条件；sol 亦确认 tabbar 是最后一个不收缩的 flex item） */
#screen-home > .tabbar{ margin-top:auto }

/* ② 报告页：主角是报告正文，不是「已签发方案」空态框。
      原来两个 .report-pane（section=已签发方案 / div=正文）都是 flex:1 平分，
      空态时一句话的框占 330px，正文只剩 312px。
      不用 flex:0 0 auto —— F5 指出方案真签发后内容一长它会无上限撑高，
      把 bug 从空态搬进有数据态。用 0 1 auto + 上限，超了自己滚。 */
#screen-report > section.report-pane{ flex:0 1 auto; max-height:30%; overflow-y:auto }
#screen-report > div.report-pane{ flex:1 1 0; min-height:0 }

/* ③ 教练页顶部引导块。
      212px 不是写死的（sol 纠正了我的表述），是切换器+引导句+两行 chips 撑出来的。
      所以不压内边距、不动 44px 触控高度，只把 chips 从换行改成单行横滑。 */
#screen-tifen .coach-face-chips{ flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch }
#screen-tifen .coach-face-chips::-webkit-scrollbar{ display:none }
#screen-tifen .coach-face-chip{ flex:0 0 auto; white-space:nowrap }

/* ②的补丁（2026-08-31 独立复验抓出，CRITICAL）
   上面那条 #screen-report > section.report-pane{overflow-y:auto} 根本没生效：
   被 style.css:2181 的旧规则 `#screen-report .rp-sec, #screen-report #rp-issued-plan{overflow:hidden}`
   用特异性压掉了（两个 ID = 2,0,0 大于 一个ID+一个类+一个元素 = 1,1,1）。
   后果：方案真签发、内容超过 30% 上限之后被静默裁切，
   **用户的手指和滚轮都滚不动**（overflow:hidden 只有程序能设 scrollTop），
   而且没有任何渐隐/省略号/查看更多提示 —— 家长以为方案就这么多。
   这正是 F5 警告过的「bug 从空态搬到有数据态」，我第一版没兑现自己写的「超了自己滚」。
   修法用同等以上特异性覆盖（2,1,1），不用 !important —— !important 会埋更深的坑。 */
#screen-report > section#rp-issued-plan.report-pane{ overflow-y:auto; overscroll-behavior:contain }

/* ══ 报告页改成一条滚动流（2026-08-31 第二轮，大圣截图打回）════════
   上一轮我给「已签发方案」设 max-height:30% + 自己滚、正文也自己滚，
   结果一屏里出现两个独立滚动框，大圣原话：「报告只能并屏查看，体验极差」。
   方向从一开始就错了 —— 家长要的不是「把有限空间分配好」，
   而是「点开就是一份完整的报告，从头滑到尾」。
   改法：屏自己滚，两个 pane 都按内容自然高度，谁也不设上限、谁也不内部滚。
   标题栏 sticky 在顶、导航栏留在底，中间内容一条流。
   ══════════════════════════════════════════════════════════ */
#screen-report{ overflow-y:auto; overflow-x:hidden; -webkit-overflow-scrolling:touch }

/* 两个 pane 一律按内容高度，取消上一轮加的上限与内部滚动。
   选择器带 id 是为了压过 style.css:2181 那条 #screen-report #rp-issued-plan{overflow:hidden}
   （特异性 2,0,0），上一轮就是没压过它，白写了一条 overflow-y:auto。 */
#screen-report > section#rp-issued-plan.report-pane,
#screen-report > div#rp-body.report-pane{
  flex:0 0 auto; max-height:none; overflow:visible;
}

/* 标题栏跟着滚会让家长失去「我在哪一页」的参照，钉在顶部；
   sticky 必须自带背景，否则正文会从它底下透出来。 */
#screen-report > .navbar{
  position:relative; z-index:2;
  background:transparent;
}
/* 显式钉底：.family-tabbar 那条 sticky 实测没落到这个元素上（computed 是 relative，
   原因未查明，先用高特异性显式声明兜住）。内容一长时 tabbar 会跟着滚走，
   家长要滑到最底才看得到导航 —— 门禁断言①抓到的就是这个（底边 2773px vs 屏底 834px）。*/
#screen-report > .tabbar{ position:sticky; bottom:0; z-index:4; margin-top:auto }

/* ══ 大圣第三轮截图的三条（2026-08-31）════════════════════════════
   ① 卡片右边像被切掉一条 —— 实测 scrollWidth==clientWidth，没有横向溢出，
      切的是桌面浏览器的占位滚动条。手机上滚动条悬浮不占位，所以真机看不到，
      但产品是在桌面预览验收的，这条边会一直误导人。隐藏掉。
   ③ AI 回复分段了却还是一坨 —— 后端已把客户话术改成空行分隔、前端也真的
      渲染出 3 个 <p class="ai-para">，但 .ai-para 的 margin 是 0，
      段与段贴在一起，看起来跟没分段一样。补段间距。
   ══════════════════════════════════════════════════════════ */
#screen-home, #screen-report, #screen-tifen, #screen-mine,
#screen-report .rp-doc, .chat-area, .mine-pane, .body{
  scrollbar-width:none; -ms-overflow-style:none;
}
#screen-home::-webkit-scrollbar, #screen-report::-webkit-scrollbar,
#screen-tifen::-webkit-scrollbar, #screen-mine::-webkit-scrollbar,
.chat-area::-webkit-scrollbar, .mine-pane::-webkit-scrollbar,
.body::-webkit-scrollbar{ width:0; height:0; display:none }

.ai-rich .ai-para + .ai-para,
.ai-rich .ai-para + .ai-lead,
.ai-rich .ai-lead + .ai-para{ margin-top:12px }

/* 费曼陪练（第 11 项）：入口条 + 陪练气泡，不改全站聊天布局 */
#screen-tifen .tf-feynman-bar{
  display:flex; align-items:center; gap:8px;
  padding:8px 12px 0;
}
#screen-tifen .tf-feynman-start,
#screen-tifen .tf-feynman-stop{
  border:0; border-radius:14px; padding:6px 12px;
  font-size:13px; cursor:pointer;
}
/* 🔴 2026-09-01 修「按钮与说明文字贴死」（大圣截图：「投入产出比」压在
   「填每科每周时长，看边际效益」上）。根因：夜跑第 11/12/13/19 项各自往教练页
   插一个功能条，四条的写法互不相同 —— tf-feynman-bar 有 CSS、tf-learning-card-bar
   有一条、**tf-yati-bar 与 tf-time-roi-bar 零样式**，于是 button 与 span 作为行内元素
   直接并排、gap 为 0；押题卷那个按钮还带内联 style，字号也对不齐。
   用属性选择器一次覆盖四条（都以 tf- 开头、-bar 结尾），不再逐个补，
   免得下次再加第五条又漏。 */
/* 🔴 2026-09-02 第三轮：把这四条压扁，把首屏还给对话。
   实测（390×844，线上）四条合计吃掉 174px = 教练屏高度的 21%，
   加上上面的 .coach-face 117px，真正的对话被顶到半屏以下；效果图这一屏根本没有这四条。
   ⚠️ 想做成「一行可横滑的胶囊」做不到：这四条是 #screen-tifen 的**直接子元素**，
      而 #screen-tifen 是 flex 列，子元素的 display 会被 blockify，
      inline-flex 也照样各占一行 —— 并成一行必须有一个包裹元素，那是 tifen.js 的活。
      所以这里只做能做的：行高压到最紧，说明文字降一档，不删任何按钮、不删任何文字。 */
#screen-tifen [id^="tf-"][id$="-bar"] {
  display: flex; align-items: center; gap: 8px;
  padding: 2px 16px 0; flex-wrap: wrap;
}
#screen-tifen [id^="tf-"][id$="-bar"]:first-of-type { padding-top: 6px; }
/* 🔴 2026-09-02 UI 对齐效果图：这四条功能条的按钮此前一条一个长相 ——
   费曼 #2b5ce6 蓝、学习卡 #7c3aed 紫、押题卷只有内联 padding/cursor（浏览器裸默认灰）、
   投入产出比写了 class 但**从来没有对应的 CSS 规则**（同样裸默认）。
   四个按钮四种颜色，其中两个还是「一行 CSS 都没有」的系统灰 —— 这是判据 A 的两条红。
   改法：用同一条属性选择器给条内所有 button 一套品牌样式，颜色全部取 v8 token，
   下次再插第五条功能条也自动继承，不会再漏。 */
#screen-tifen [id^="tf-"][id$="-bar"] > button {
  flex-shrink: 0;
  /* 压扁不等于把点击区压没：视觉是小胶囊，但 min-height 保住 30px 的手指目标。
     26px 那一版实测总高更低（108px），但四条只隔 1px，误触风险不值这 20px。 */
  border: 0; border-radius: 999px; padding: 5px 13px; min-height: 30px;
  display: inline-flex; align-items: center;
  font-size: 12px; font-weight: 700; line-height: 18px; cursor: pointer;
  background: var(--accent); color: #fff;
  box-shadow: 0 1px 2px rgba(12,27,22,.18);
}
#screen-tifen [id^="tf-"][id$="-bar"] > button:active { background: var(--accent-2); }
#screen-tifen [id^="tf-"][id$="-bar"] > span {
  font-size: 11px; color: var(--t3); line-height: 16px;
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
#screen-tifen .tf-feynman-start{ background:var(--accent); color:#fff; }
#screen-tifen .tf-feynman-bar.is-on .tf-feynman-start{ background:var(--accent-2); }
/* 次要动作（结束）：描边而不是实心，跟主动作分层，但仍在同一套绿里 */
#screen-tifen [id^="tf-"][id$="-bar"] > button.tf-feynman-stop,
#screen-tifen .tf-feynman-stop{
  background:var(--glass); color:var(--accent);
  box-shadow: inset 0 0 0 1px rgba(31,83,70,.28);
}
#screen-tifen .tf-feynman-hint{ font-size:12px; color:var(--t3); }
#screen-tifen .msg.tf-feynman-msg .bubble{
  border:1px solid rgba(47,125,104,.35);   /* 旧 #99f6e4 青，与品牌绿差半个色相 */
  background:rgba(255,255,255,.72);
}
#screen-tifen .tf-feynman-done{
  margin:8px 12px; padding:8px 10px;
  font-size:13px; color:var(--accent);
  background:var(--glass); border-radius:var(--r-sm);
}

/* 知识点学习卡（第 13 项）：三段式记牢→会用→自测 */
#screen-tifen .tf-learning-card-bar{
  display:flex; align-items:center; gap:8px;
  padding:8px 12px 0;
}
#screen-tifen .tf-learning-card-start{
  border:0; border-radius:var(--r-md); padding:6px 12px;
  font-size:13px; cursor:pointer;
  background:var(--accent); color:#fff;   /* 旧 #7c3aed 紫，全站独一份，与品牌绿无关 */
}
#screen-tifen .tf-learning-card-hint{ font-size:12px; color:var(--t3); }
/* 卡片本体也一起脱紫：紫色系（#faf5ff/#ddd6fe/#5b21b6/#6d28d9）在这张绿色底上
   是全站唯一一处，效果图里没有任何紫。换成玻璃底 + 品牌绿标题。 */
#screen-tifen .tf-learning-card{
  margin:10px 12px; padding:10px 12px;
  border:1px solid var(--edge); border-radius:var(--r-sm);
  background:var(--glass);
}
#screen-tifen .tf-learning-card-title{
  margin:0 0 8px; font-size:15px; font-weight:700; color:var(--accent);
}
#screen-tifen .tf-learning-card-section{ margin-top:8px; }
#screen-tifen .tf-learning-card-section-title{
  font-size:13px; font-weight:600; color:var(--accent);
}
#screen-tifen .tf-learning-card-section-body{
  font-size:13px; color:var(--t2); margin-top:4px; line-height:1.5;
}

/* ═══════════════════════════════════════════════════════════
   T27/T28/T29 · 首页第一问「你最想解决哪件事？」（2026-09-02）
   客户 8.29 问题汇总 :107「意图选了但没路由」·:110「按意图显示模块」。
   沿用既有玻璃体系与 4px 间距刻度、三档圆角、墨绿品牌色，不新造 token。
   ⚠️ 它排在 .today-pane 之前，是全页第一个可交互块——客户原话「页面第一问」。
   ⚠️ 对比度按 :34-41 已实测的基底算：hi-t 用 --c-ink（对白 15+:1），
      hi-d 用 --c-ink-2（8.14:1），都在 WCAG AA 正文线以上，不用 --c-ink-3。
   ═══════════════════════════════════════════════════════════ */
.home-intent { display: none !important; margin: var(--sp-4) var(--sp-4) 0; padding: var(--sp-5); }
.home-intent .hi-q {
  font-size: var(--fs-title); font-weight: 800; color: var(--c-brand-deep);
  line-height: var(--lh-tight); margin: 0;
}
.home-intent .hi-sub {
  margin: var(--sp-2) 0 0; font-size: var(--fs-sm); color: var(--c-ink-2);
  line-height: var(--lh-compact);
}
.home-intent .hi-opts {
  margin-top: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-2);
}
.home-intent .hi-opt {
  /* 整行可点：客户抱怨过「选了没反应」，触控区不能只有文字那几个字宽 */
  display: flex; flex-direction: column; gap: 2px; width: 100%;
  min-height: var(--tap); padding: var(--sp-3) var(--sp-4);
  text-align: left; cursor: pointer; flex-shrink: 0;
  border: 1px solid var(--c-line); border-left: 3px solid var(--c-brand);
  border-radius: var(--r-md); background: rgba(255,255,255,.72);
  transition: background .18s ease, border-color .18s ease, transform .18s ease;
}
.home-intent .hi-opt:hover,
.home-intent .hi-opt:focus-visible {
  background: var(--c-brand-soft); border-color: var(--c-brand); transform: translateX(2px);
}
.home-intent .hi-opt:active { transform: translateX(2px) scale(.995); }
.home-intent .hi-t {
  font-size: var(--fs-body); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight);
  white-space: nowrap; flex-shrink: 0;
}
.home-intent .hi-d {
  font-size: var(--fs-caption); color: var(--c-ink-2); line-height: var(--lh-compact);
}

/* T30 · 报告页正文区往「我的（上传三次成绩与试卷）」的门。
   实心墨绿主按钮：它是家长看完报告后**唯一**该走的下一步，不做次要链接样式。
   白字压 --c-brand 实测 7.49:1（见 :34），达 AA。 */
.rp-upload-cta {
  display: flex; align-items: center; justify-content: center;
  /* 🔴 2026-09-04 P2：原来左右各带 16px 自身 margin，叠加在 .report-pane 已有
     的 16px 左右 padding 上，宽度比同屏其它卡片窄了 32px（306 vs 338 主流）。
     父容器已经给够左右留白，这里横向不再重复加，只留上下间距。 */
  margin: var(--sp-5) 0 var(--sp-4); padding: var(--sp-3) var(--sp-5);
  min-height: var(--tap); border-radius: var(--r-md);
  background: var(--c-brand); color: #fff; cursor: pointer;
  font-size: var(--fs-body); font-weight: 700; line-height: var(--lh-compact);
  text-align: center; text-decoration: none;
}
.rp-upload-cta:hover, .rp-upload-cta:focus-visible { background: var(--c-brand-deep); }

/* P1b · 完整深度方案入口卡（2026-09-05 W3）：只加这几个新选择器，其余全部
   复用 .rp-sec/.rp-sec-title/.rp-l3-tag/.rp-kw/primary-btn 等既有类。 */
[data-deep-entry] { margin: var(--sp-5) 0 var(--sp-4); }
.rp-deep-loading, .rp-deep-note {
  font-size: var(--fs-sm); color: var(--c-ink-3); line-height: var(--lh-body);
  padding: 0 var(--sp-1);
}
.rp-deep-conditions { list-style: none; margin: var(--sp-2) 0 0; padding: 0; }
.rp-deep-conditions li {
  font-size: var(--fs-sm); color: var(--c-ink-2); line-height: var(--lh-body);
  padding: var(--sp-2) 0; border-bottom: 1px solid var(--edge);
}
.rp-deep-conditions li:last-child { border-bottom: none; }
.rp-deep-cond-link { color: var(--accent); font-weight: 700; text-decoration: none; }
.rp-deep-status {
  display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap;
  margin: 0 0 var(--sp-3);
}
.rp-deep-wc { font-size: var(--fs-caption); color: var(--c-ink-3); }

/* ═══════════════════════════════════════════════════════════
   批 B · 教练屏「战略·节奏·计划」与「逐题归因」出面（2026-09-02）
   客户 2c / 学1。沿用既有玻璃体系与 4px 刻度、三档圆角、墨绿品牌色，不新造 token。
   对比度按 :34-41 已实测基底：标题 --c-brand-deep，正文 --c-ink，
   次要说明 --c-ink-2（对 --c-bg-soft 8.14:1），均在 WCAG AA 正文线以上。
   ═══════════════════════════════════════════════════════════ */
.tf-insights { display: flex; flex-direction: column; gap: var(--sp-3); margin: var(--sp-3) 0; }
.tf-ins-sec {
  padding: var(--sp-4); border: 1px solid var(--c-line); border-radius: var(--r-md);
  background: rgba(255, 255, 255, .72);
}
.tf-ins-t {
  margin: 0 0 var(--sp-2); font-size: var(--fs-sm); font-weight: 800;
  color: var(--c-brand-deep); line-height: var(--lh-tight);
}
.tf-ins-b { font-size: var(--fs-caption); color: var(--c-ink); line-height: var(--lh-body); }
.tf-ins-b p { margin: 0 0 var(--sp-2); }
.tf-ins-b p:last-child { margin-bottom: 0; }
.tf-ins-empty { color: var(--c-ink-2); }
.tf-ins-phases { margin: var(--sp-2) 0 0; padding-left: var(--sp-5); }
.tf-ins-phases li { margin-bottom: var(--sp-2); }
.tf-ins-phases b { color: var(--c-ink); }
.tf-ins-win {
  display: inline-block; margin-left: var(--sp-2); padding: 1px var(--sp-2);
  border-radius: var(--r-sm); background: var(--c-brand-soft); color: var(--c-brand);
  font-size: var(--fs-caption); white-space: nowrap;
}
.tf-ins-goal { display: block; color: var(--c-ink-2); }
.tf-ins-causes { margin-top: var(--sp-2); color: var(--c-ink-2); }
/* 批 B · 三级计划的「计划」层：每日分配逐块列出（F5 第 3 轮判 CRITICAL 后补） */
.tf-ins-plan-t { margin-top: var(--sp-3); }
.tf-ins-planlist { margin: var(--sp-2) 0 0; padding-left: var(--sp-5); }
.tf-ins-planlist > li { margin-bottom: var(--sp-2); }
.tf-ins-blocks { margin: var(--sp-1) 0 0; padding-left: var(--sp-4); list-style: disc; }
.tf-ins-blocks li { color: var(--c-ink-2); line-height: var(--lh-compact); }
.tf-ins-min { color: var(--c-brand); font-weight: 700; white-space: nowrap; }

/* 客户 1a · 九科诊断「怎么做」的完整处方（2026-09-02）
   沿用既有 4px 刻度 / 三档圆角 / 墨绿品牌色，不新造 token。 */
.how-detail { margin-top: var(--sp-3); padding-top: var(--sp-3); border-top: 1px solid var(--c-line); }
.hd-title { font-size: var(--fs-caption); font-weight: 800; color: var(--c-brand-deep); margin-bottom: var(--sp-2); }
.hd-item { padding: var(--sp-3); margin-bottom: var(--sp-2); border-radius: var(--r-sm);
           background: var(--c-brand-soft); }
.hd-stuck { margin: 0 0 var(--sp-1); font-size: var(--fs-caption); font-weight: 800; color: var(--c-brand); }
.hd-action { margin: 0 0 var(--sp-2); font-size: var(--fs-caption); color: var(--c-ink); line-height: var(--lh-compact); }
.hd-check { margin: 0 0 var(--sp-2); font-size: var(--fs-caption); color: var(--c-ink-2); line-height: var(--lh-compact); }
.hd-cycles { font-size: var(--fs-caption); color: var(--c-ink-2); }
.hd-cycles ul { margin: var(--sp-1) 0 0; padding-left: var(--sp-4); }
.hd-cycles li { line-height: var(--lh-compact); margin-bottom: 2px; }
.hd-cyc { display: inline-block; min-width: 3.2em; color: var(--c-brand); font-weight: 700; }

/* 学科页「本周三件事」标题（app/frontend/js/tifen.js renderWeeklyThree()）
   一直没配 CSS，落到浏览器 h3 默认 1.17em（16px 基准 = 18.72px）。
   效果图 UI-v7-液态玻璃-全屏定稿-20260831.html 里同名文字（.ct）是 15px，
   09-02 逐元素对齐门禁 verify_mockup_parity_0902.py 实拍到差异，这里补上。 */
#sd-weekly-three h3 { font-size: 15px; }

/* ==========================================================================
   桌面演示壳的假刘海遮住内容（2026-09-02 · 大圣截图「教练」两字被切掉）
   --------------------------------------------------------------------------
   .notch 是 top:10px 高 26px 的绝对定位黑块，压在内容之上，只在
   `@media (min-width:521px)` + body.shell-phone 时才 display:block —— **真机没有它**。
   页面主标题从 27px 提到 30px 之后就顶进了这条黑带，标题和右上角圆钮双双被啃。
   为什么写在文件末尾而不是就近改 .navbar：`#screen-tifen .navbar` 这类
   id 级规则（0,1,1,0）排在后面且特异性更高，就近加 padding 压不过它 ——
   第一版就是这么失效的，实测 padTop 仍是 12px。改成给滚动容器让位，放末尾生效。
   ========================================================================== */
@media (min-width: 521px) {
  body.shell-phone .app-screen { padding-top: 34px; }
}

/* ==========================================================================
   教练屏方向 A（2026-09-02 · 大圣批准「打开就是对话」）
   --------------------------------------------------------------------------
   改前实测（390×844）：聊天区顶边 559px = 屏高 68%；四条功能条 128px、
   两张全是「还没有…」的空态卡 288px 把对话顶到半屏以下。
   这里只管**位置与收纳**，功能条自身的长相沿用上面那条属性选择器，一个字没改。
   判据：scripts/gates/verify_coach_ia_0902.py（改前 A/C/D 三条红）
   ========================================================================== */

/* 「＋」触发钮：坐在输入条最左边 */
#screen-tifen .tf-actions-trigger{
  flex:none; width:36px; height:36px; border-radius:var(--r-pill, 999px);
  border:1px solid var(--edge); background:var(--glass);
  color:var(--accent); font-size:18px; line-height:1; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  transition:transform .2s ease, background .18s ease;
}
#screen-tifen .tf-actions-trigger:active{ transform:scale(.94); }
#screen-tifen .tf-actions-trigger[aria-expanded="true"]{
  transform:rotate(45deg); background:var(--accent); color:#fff; border-color:transparent;
}

/* 遮罩与面板。用 fixed 而不是 absolute：#screen-tifen 是可滚动容器，
   absolute 会跟着内容滚走；而 .screen 有 container-type:inline-size，
   会成为 fixed 的包含块，所以桌面壳里也不会跑出手机框。 */
#screen-tifen .tf-actions-scrim{
  position:fixed; inset:0; z-index:20;
  background:rgba(12,27,22,.32); opacity:0; pointer-events:none;
  transition:opacity .24s ease;
}
#screen-tifen .tf-actions-scrim.is-on{ opacity:1; pointer-events:auto; }

#screen-tifen .tf-actions{
  position:fixed; left:0; right:0; bottom:0; z-index:21;
  transform:translateY(102%); transition:transform .28s cubic-bezier(.22,.9,.3,1);
  background:rgba(255,255,255,.92); border-top:1px solid var(--edge);
  -webkit-backdrop-filter:blur(30px) saturate(190%); backdrop-filter:blur(30px) saturate(190%);
  border-top-left-radius:var(--r-lg); border-top-right-radius:var(--r-lg);
  padding:8px 4px calc(16px + var(--sa-bottom, 0px));
  max-height:76%; overflow-y:auto;
}
#screen-tifen .tf-actions.is-on{ transform:none; }
#screen-tifen .tf-actions-grab{
  width:40px; height:4px; border-radius:var(--r-pill, 999px);
  background:rgba(12,27,22,.16); margin:0 auto 12px;
}
#screen-tifen .tf-actions-t{
  margin:0 16px; font-size:var(--fs-caption); font-weight:800;
  letter-spacing:.6px; color:var(--accent);
}
#screen-tifen .tf-actions-d{
  margin:2px 16px 8px; font-size:11px; line-height:16px; color:var(--t3);
}
/* 面板里的功能条：竖排铺开，每条一行，点击区放大到 44px（首屏挤的问题已经不存在了） */
#screen-tifen .tf-actions [id^="tf-"][id$="-bar"]{ padding:6px 16px; }
#screen-tifen .tf-actions [id^="tf-"][id$="-bar"] > button{ min-height:44px; font-size:13px; }
#screen-tifen .tf-actions [id^="tf-"][id$="-bar"] > span{ font-size:12px; }

/* CR-UI-C U2: 「＋」抽屉第一项 试卷上传 */
#screen-tifen .tf-actions .tf-action-btn#tf-actions-exam-upload,
#screen-tifen #tf-actions-exam-upload {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
  width: calc(100% - 32px);
  margin: 6px 16px 10px;
  padding: 12px 16px;
  border-radius: 12px;
  border: 1px solid rgba(31, 83, 70, 0.2);
  background: #ffffff;
  color: #1c2740;
  font-family: inherit;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(12, 27, 22, 0.05);
  box-sizing: border-box;
}
#screen-tifen #tf-actions-exam-upload:active {
  transform: scale(0.98);
  background: #f8fafc;
}
#screen-tifen #tf-actions-exam-upload .tf-action-title {
  font-size: 14px;
  font-weight: 700;
  color: #1c2740;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
#screen-tifen #tf-actions-exam-upload .tf-action-desc {
  font-size: 11.5px;
  line-height: 16px;
  color: var(--t2, #64748B);
  font-weight: 500;
  text-align: left;
}

#screen-tifen:has(#exam-upload-entry[open]),
#screen-tifen.has-exam-open {
  overflow-y: auto !important;
}
#screen-tifen #exam-upload-entry {
  flex: 0 0 auto;
  margin: 10px 16px 12px;
  box-sizing: border-box;
}
#screen-tifen #exam-upload-entry summary .entity-name,
#screen-tifen #exam-upload-entry summary .ltag,
#screen-tifen #exam-upload-entry #exam-paper-submit-btn {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}

#screen-tifen #tf-insights,
#screen-tifen #tf-attack-list,
#screen-tifen .tf-ins-head-bar {
  display: none !important;
  position: absolute !important;
  top: -9999px !important;
  left: -9999px !important;
  width: 0 !important;
  height: 0 !important;
  max-height: 0 !important;
  overflow: hidden !important;
  opacity: 0 !important;
  pointer-events: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
}

/* 内部诊断卡片：统一样式 */
#screen-tifen #tf-insights .tf-ins-sec {
  margin: 0 0 8px;
  padding: 12px 14px;
  border-radius: var(--r-md);
  background: rgba(255, 255, 255, 0.78);
  border: 1px solid var(--edge);
  border-left: 3.5px solid var(--accent);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  box-shadow: 0 3px 12px rgba(12, 27, 22, 0.04);
  box-sizing: border-box;
}
#screen-tifen #tf-insights .tf-ins-sec:last-child {
  margin-bottom: 0;
}
#screen-tifen #tf-insights .tf-ins-t {
  font-size: 13px;
  font-weight: 800;
  color: var(--accent);
  margin: 0 0 6px;
  line-height: 18px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
#screen-tifen #tf-insights .tf-ins-b {
  font-size: 12px;
  line-height: 18px;
  color: var(--t2);
}
#screen-tifen #tf-insights .tf-ins-b p {
  margin: 0 0 4px;
}
#screen-tifen #tf-insights .tf-ins-b p:last-child {
  margin-bottom: 0;
}
#screen-tifen #tf-insights .tf-ins-sec ul {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 5px !important;
  padding: 0 !important;
  margin: 6px 0 2px !important;
  list-style: none !important;
}
#screen-tifen #tf-insights .tf-ins-sec li {
  font-size: 11px !important;
  font-weight: 600 !important;
  color: var(--accent) !important;
  background: rgba(31, 83, 70, 0.08) !important;
  border: 1px solid rgba(31, 83, 70, 0.16) !important;
  border-radius: 6px !important;
  padding: 2px 8px !important;
  line-height: 16px !important;
  margin: 0 !important;
}

/* 空态折叠：两张「还没有…」的大卡压成一条，有数据时这个类不会被加上 */
#screen-tifen #tf-insights.is-collapsed{
  padding-top:4px; padding-bottom:4px;
}
#screen-tifen #tf-insights.is-collapsed .tf-ins-sec{
  display: flex; align-items: center; gap: 8px;
  padding: 0; border: 0; background: none; box-shadow: none;
}
#screen-tifen #tf-insights.is-collapsed .tf-ins-sec + .tf-ins-sec{ display:none; }
#screen-tifen #tf-insights.is-collapsed .tf-ins-t{
  font-size: 11px; font-weight: 800; letter-spacing: .4px; color: var(--accent); margin: 0; white-space: nowrap;
}
#screen-tifen #tf-insights.is-collapsed .tf-ins-b,
#screen-tifen #tf-insights.is-collapsed .tf-ins-empty{
  font-size: 11px; line-height: 16px; color: var(--t3); margin: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

#screen-tifen #tf-attack-list {
  margin: 4px 16px 0;
  padding: 4px 12px;
  border-radius: var(--r-sm);
  background: rgba(255, 255, 255, .45);
  border: 1px solid rgba(255, 255, 255, .6);
  flex-shrink: 0;
}
#screen-tifen #tf-attack-list .tf-attack-list-title {
  font-size: 11px;
  font-weight: 700;
  color: var(--accent);
  margin: 0 0 2px;
}
#screen-tifen #tf-attack-list p {
  font-size: 11px;
  line-height: 15px;
  color: var(--t2);
  margin: 0;
}
#screen-tifen #tf-attack-list:has(.tf-ins-empty) {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 12px;
}
#screen-tifen #tf-attack-list:has(.tf-ins-empty) .tf-attack-list-title {
  margin: 0;
  white-space: nowrap;
}
#screen-tifen #tf-attack-list:has(.tf-ins-empty) p {
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  color: var(--t3);
}

/* ==========================================================================
   教练对话里的卡：改成玻璃，不再是通栏白底后台表单
   （2026-09-02 · 大圣截图「诊断的话不是应该有单独页面，你这样混在一块合适吗」）
   --------------------------------------------------------------------------
   实测那一屏：.intent-card 334×239、.tf-progress-card 334×846，两张都是
   rgb(255,255,255) 不透明白 + 系统原生 <select>，在这套液态玻璃体系里像
   从后台管理系统抠出来贴上去的。
   结论（已跟大圣讲清）：位置没错 —— 年级/省份是教练当下就要用的字段，
   踢去单独页面会打断对话、回来还得重新找上下文；错的是**长相**。
   判据：verify_coach_ia_0902.py 的 H（改前红：原生 select + 两张通栏白卡）。
   ========================================================================== */
#screen-tifen .chat-area .intent-card,
#screen-tifen .chat-area .tf-progress-card{
  background: var(--glass, rgba(255,255,255,.58));
  border: 1px solid var(--edge, rgba(255,255,255,.75));
  border-radius: var(--r-lg);
  -webkit-backdrop-filter: blur(22px) saturate(180%);
  backdrop-filter: blur(22px) saturate(180%);
  box-shadow: none;
}
/* 跟着气泡缩进，读起来是「对话里的一张卡」而不是通栏面板 */
#screen-tifen .chat-area .intent-card{ margin-left: var(--sp-3); }

#screen-tifen .chat-area .f-label{
  display:block; font-size:12px; font-weight:700; color:var(--t2);
  margin:12px 0 6px;
}
/* 省份输入框：进体系，不留浏览器默认边框 */
#screen-tifen .chat-area .intent-card input[type="text"],
#screen-tifen .chat-area .intent-card input:not([type]){
  width:100%; min-height:40px; padding:8px 12px;
  border:1px solid var(--edge); border-radius:var(--r-md);
  background:rgba(255,255,255,.72); color:var(--t1); font-size:14px;
  font-family:inherit;
}
#screen-tifen .chat-area .intent-card input:focus-visible{
  outline:2px solid rgba(31,83,70,.35); outline-offset:1px;
}

/* 年级选项胶囊（替掉原生 <select>）：7 个值铺开点一下，比拉系统滚轮快 */
#screen-tifen .chat-area .tf-pick{ display:flex; flex-wrap:wrap; gap:8px; }
#screen-tifen .chat-area .tf-pick-b{
  font-family:inherit; cursor:pointer; min-height:36px; padding:8px 14px;
  border:1px solid var(--edge); border-radius:999px;
  background:rgba(255,255,255,.72); color:var(--t1);
  font-size:13px; font-weight:600;
  transition:background .16s ease, color .16s ease;
}
#screen-tifen .chat-area .tf-pick-b[aria-pressed="true"]{
  background:var(--accent); color:#fff; border-color:transparent; font-weight:700;
}
#screen-tifen .chat-area .tf-pick-b:active{ transform:scale(.97); }
/* 被升级成胶囊的原生下拉：留在 DOM 里镜像取值，但不显示 */
#screen-tifen .chat-area select.tf-select-upgraded{ display:none; }

/* 全面诊断进度带（2026-09-02 · 大圣「点了诊断怎么落到聊天屏」）
   只在从首页主 CTA 进来时挂出来。路由没动 —— 动的是「告诉你在哪一步」。
   高度压在 ~52px：判据 K 盯着「加了它之后对话仍须在首屏上半」。 */
#screen-tifen .tf-diag-steps{
  flex:none; margin:0 16px 6px; padding:8px 12px;
  border:1px solid var(--edge); border-radius:var(--r-md);
  background:var(--glass);
  -webkit-backdrop-filter:blur(18px) saturate(180%); backdrop-filter:blur(18px) saturate(180%);
}
#screen-tifen .tf-diag-now{
  font-size:12px; font-weight:800; letter-spacing:.3px; color:var(--accent); line-height:17px;
}
#screen-tifen .tf-diag-rest{
  margin-top:2px; font-size:11px; line-height:16px; color:var(--t3);
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}


/* ── 2026-09-02 表单并进玻璃体系（规划 / 初筛 / 我的）────────────────────────
   效果图对齐剩下的最后三屏。原状：.form-card 是实心白，18 个 select 带着
   系统自带的灰白外壳，4 个单选是 13×13 的原生圆点（拇指指腹约 44px）。
   放文件末尾是因为本文件里有 id 级规则排在后面会盖掉先写的（09-02 栽过一次）。 */

/* 1. 表单卡：实心白 → 玻璃。配方与 .fcard 一致，不另起一套。 */
#screen-planner .form-card,
#screen-screening .form-card,
#screen-mine .form-card {
  background: var(--glass);
  -webkit-backdrop-filter: blur(26px) saturate(1.9);
  backdrop-filter: blur(26px) saturate(1.9);
  border: 1px solid rgba(255, 255, 255, .75);
  box-shadow: 0 8px 32px rgba(12, 27, 22, .10);
}

/* 2. 下拉框脱掉系统外壳。
      appearance:none 去掉 iOS/Chrome 自带的灰白外框与箭头，箭头自己画一个品牌绿的。
      注意 padding-right 要给箭头留位，否则长选项文字会压在箭头上。
      .tf-select-upgraded 是教练屏已经换成胶囊、被隐藏起来的那些，别碰。 */
#screen-planner select:not(.tf-select-upgraded),
#screen-screening select:not(.tf-select-upgraded),
#screen-mine select:not(.tf-select-upgraded) {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  min-height: 44px;
  padding: 10px 38px 10px 12px;
  border: 1px solid rgba(31, 83, 70, .16);
  border-radius: var(--r-sm);
  background-color: rgba(255, 255, 255, .72);
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5' stroke='%231F5346' stroke-width='1.8' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 13px center;
  color: var(--t1);
  font-size: 16px;   /* 低于 16px iOS 会在聚焦时自动放大整页 */
  line-height: 1.4;
}
#screen-planner select:focus,
#screen-screening select:focus,
#screen-mine select:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(31, 83, 70, .12);
}

/* 3. 文本框与多行框跟下拉长一样，否则同一张卡里两种风格 */
#screen-planner .form-card input[type="text"],
#screen-planner .form-card input[type="number"],
#screen-planner .form-card textarea,
#screen-screening .form-card input[type="text"],
#screen-screening .form-card input[type="number"],
#screen-screening .form-card textarea,
#screen-mine .form-card input[type="text"],
#screen-mine .form-card textarea {
  min-height: 44px;
  padding: 10px 12px;
  border: 1px solid rgba(31, 83, 70, .16);
  border-radius: var(--r-sm);
  background: rgba(255, 255, 255, .72);
  color: var(--t1);
  font-size: 16px;
}

/* 4. 四个 13×13 原生圆点 → 选项胶囊。
      只有 4 个选项、字都很短，正是胶囊的场景（教练屏同款）。
      原生 input 不删只藏：它仍然是真正的表单值，删了后端就收不到。
      选中态用 :has(:checked)，比给每个 label 挂 JS 类稳。 */
#screen-planner .planner-concern-option {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin: 0 8px 8px 0;
  padding: 9px 16px;
  border: 1px solid rgba(31, 83, 70, .18);
  border-radius: 999px;
  background: rgba(255, 255, 255, .66);
  color: var(--t2);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.2;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
#screen-planner .planner-concern-option > input[type="radio"] {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}
#screen-planner .planner-concern-option:has(> input[type="radio"]:checked) {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
  box-shadow: 0 2px 10px rgba(31, 83, 70, .26);
}
/* 键盘用户要看得见焦点在哪 —— 圆点藏了，焦点环得由 label 代它显示 */
#screen-planner .planner-concern-option:has(> input[type="radio"]:focus-visible) {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* 5. 复选框同样脱系统外壳，做到 22px（拇指行 44px 由 label 撑） */
#screen-planner .form-card input[type="checkbox"],
#screen-screening .form-card input[type="checkbox"] {
  -webkit-appearance: none;
  appearance: none;
  width: 22px;
  height: 22px;
  margin: 0 8px 0 0;
  border: 1.5px solid rgba(31, 83, 70, .34);
  border-radius: 6px;
  background: rgba(255, 255, 255, .8);
  vertical-align: middle;
  cursor: pointer;
}
#screen-planner .form-card input[type="checkbox"]:checked,
#screen-screening .form-card input[type="checkbox"]:checked {
  border-color: var(--accent);
  background: var(--accent)
    url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='10' viewBox='0 0 13 10'%3E%3Cpath d='M1 5 4.8 8.6 12 1.4' stroke='%23fff' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")
    center / 13px 10px no-repeat;
}


/* ── 2026-09-02 每屏底部诚实脚注（照效果图 v7 的 p.foot 落地）──────────────
   效果图六屏**每一屏**正文底部都挂着一句脚注：谁写的报告、是不是医学诊断、
   材料谁能看见。产品六屏一条都没有 —— 09-02 逐屏文本差集实测，9 条全缺。

   规格不是我编的，是从效果图 JSON 量下来的：
     字号 12px · 字重 500 · 色 rgb(58,74,67)（= --t2）· 左右各内缩 12px
   「我的」屏上传块里那句是 11px 的行内版本，单独一个类。

   这类话是产品的诚实定位，不是装饰：心理测评那句「不构成医学诊断」
   还带合规性质。所以做成一个体系类，而不是散落的 <p>。 */
.screen-foot {
  margin: 18px 12px calc(12px + env(safe-area-inset-bottom, 0px));
  padding: 0;
  color: var(--t2);
  font-size: 12px;
  font-weight: 500;
  line-height: 1.6;
  text-align: left;
}
/* ⚠️ 这里原来给脚注留了 76px 底部空白「避开 tabbar」。实测 tabbar 是**文档流内**元素
   （教练屏 y=763 h=61 正好贴屏底），根本不会盖住脚注 —— 那 76px 是白占的，
   在教练屏直接吃掉了聊天区 64px。留 12px 呼吸即可。 */
.app-screen:has(.tabbar) .screen-foot,
#screen-home .screen-foot,
#screen-report .screen-foot,
#screen-tifen .screen-foot,
#screen-mine .screen-foot {
  margin-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
}
/* 2026-09-05 大圣走查：对话开始后隐藏输入框上方的开场引导对（回复末尾情境 chips 接管） */
/* 带 #screen-tifen 前缀是为压过 2536 行的 `#screen-tifen .coach-face-chips{display:flex}` */
#screen-tifen .coach-face-chips.is-chatting, .coach-face-chips.is-chatting { display: none; }
/* 2026-09-05 教练屏免责挪聊天流顶部（大圣走查：输入框下方那行小字显得聊天框小）。
   系统提示样式：居中、淡化；12px/500/颜色三项规格不动——verify_screen_foot_0902 锚着。 */
.screen-foot--chat-top {
  margin: 4px 16px 8px;
  text-align: center;
  opacity: .75;
}
/* 行内版：贴在某个区块里，不是整屏脚注 */
.inline-note {
  margin: 6px 0 0;
  color: var(--t2);
  font-size: 11px;
  font-weight: 500;
  line-height: 1.55;
}


/* ── 2026-09-02 今天屏向效果图收拢 ────────────────────────────────────────
   实测：线上今天屏 2365px，效果图那屏 915px。这里收三处，规格全部取自效果图 JSON。 */

/* 1. 标题行 + 状态胶囊。效果图 span.pill：12px/700/rgb(31,83,70)/
      底 rgba(255,255,255,.68)/圆角999/高29，与 30px 标题同一行、右对齐。 */
#screen-home .today-title-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
#screen-home .today-title-row .today-page-title { margin: 0; }
#screen-home .today-head-pill {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  min-height: 29px;
  padding: 0 12px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .68);
  -webkit-backdrop-filter: blur(18px) saturate(1.6);
  backdrop-filter: blur(18px) saturate(1.6);
  color: var(--accent);
  font-size: 12px;
  font-weight: 700;
  line-height: 1.2;
  white-space: nowrap;
}
#screen-home .today-head-pill[hidden] { display: none; }
/* 信息已经上到标题行了，卡片里那枚灰方块留着就是同屏说两遍 */
#screen-home #today-state > .today-badge { display: none; }

/* 2. 意图五选一压缩。
      **不删**：这五个选项是首页主入口，各自 data-goto 到不同屏
      （index.html 顶部注释里有客户口径的映射表），删掉等于砍掉主路由。
      效果图这个位置只有一张「今天这一件」卡，所以这里只做压缩：
      单项 69px → 约 46px，五项合计 376px → 约 250px。 */
#screen-home .hi-opt {
  /* 高度真正的决定因素是里面两行字，不是 min-height。
     标题 + 说明都保留（说明是这个选项到底带你去哪的唯一线索），
     只收紧字号行高：单项 69px → 约 52px。 */
  padding: 8px 12px;
  min-height: 46px;
  gap: 1px;
}
#screen-home .hi-opt > :first-child { font-size: 14px; font-weight: 600; line-height: 1.3; }
#screen-home .hi-opt > :last-child  { font-size: 12px; font-weight: 400; line-height: 1.35; }
#screen-home .hi-opts { gap: 6px; }

/* 3. 纵向四行进度 → 横向进度条（效果图是横向极简三点）。
      每行的描述文字（「家庭动力诊断（5-10 分钟）」这类）在下面的模块地图里
      **原样重复了一遍**，所以这里收起来不是丢信息，是去重复。 */
#screen-home .onboard-steps {
  display: flex;
  /* ⚠️ flex-direction 必须显式写。基础规则 .onboard-steps 里有 flex-direction:column，
     我一开始只写 display:flex 没覆盖方向，结果还是竖着排 —— 特异性够了不代表
     没声明的属性会被覆盖，继承来的那条照样生效。 */
  flex-direction: row;
  align-items: flex-start;
  gap: 4px;
  margin: 12px 0 14px;
  padding: 0;
  list-style: none;
}
#screen-home .onboard-steps > li {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  padding: 0;
  border: 0;
  background: none;
}
#screen-home .onboard-steps > li::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: rgba(31, 83, 70, .22);
}
#screen-home .onboard-steps > li.onboard-out::before { background: rgba(31, 83, 70, .42); }
#screen-home .onboard-steps > li > span {
  font-size: 11px;
  font-weight: 600;
  color: var(--t3);
  line-height: 1.2;
}
#screen-home .onboard-steps > li > p { display: none; }


/* ── 2026-09-02 六入口扁平化（大圣批准）─────────────────────────────────────
   实测：效果图 M1 里同样这六个入口是一列扁平行，**59px 一行**
   （标题 15px/600 高20 + 说明 12px/500 高17），六行合计 334px。
   产品把它们拆成四组包装，整块 865px = 分组标题 136 + 卡片 415 + 组内留白 271。

   **六个入口一个不少，链接一个不改**，只去掉包装：

   收起分组标题的理由（不是随手藏文字）：
   · 「第一步 · 建议先做 / 第二步 · 待开始 / 第三步 / 走完三步后」——
     这四行的信息，09-02 刚加的横向进度条（第一步/第二步/第三步/生成）已经在说了，
     同一屏说两遍。
   · 「模块一 家庭动力与心理能量」这类分组名，说的就是它底下那两张卡自己的内容
     （家庭动力诊断 + 心理测评中心），是同义重复。
   · 效果图这一段本来就没有任何分组。 */

#screen-home .home-spine > .sp-nd > .sp-step,
#screen-home .home-spine > .sp-nd > .mod-head {
  display: none;
}
/* 组容器退化成纯排版容器：不留自己的内外边距，卡片之间统一 8px */
#screen-home .home-spine {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
#screen-home .home-spine > .sp-nd {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
}
/* 卡片按效果图的行规格收：标题 15px/600、说明 12px/500，行高 67 → 约 54 */
#screen-home .home-spine .fcard {
  padding: 8px 14px;
  min-height: 0;
  margin: 0;
}
#screen-home .home-spine .fcard h3 {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.33;
}
/* ⚠️ 要排除 .mod-standalone：那张卡的 <p> 是「草稿·待主理人签发」状态药丸，
   不是说明行，字号字重早就按效果图调好了。第一版没排除，把药丸的字也盖了，
   被 parity 门禁当场抓出来（配对元素视觉不一致 1/33）。 */
#screen-home .home-spine .fcard:not(.mod-standalone) > p {
  margin: 1px 0 0;
  font-size: 12px;
  font-weight: 500;
  line-height: 1.4;
}


/* ══ 2026-09-02 首页按效果图 v7 一比一重排 ═══════════════════════════════════
   大圣 09-02 明令：网站首页要和效果图一比一，不是「向它靠拢」。
   下面每一条的数值都直接取自效果图的 CSS（reports/ui-align-0902/mock-all.css），
   不是我估的。效果图首页正文只有五块：
     head(日期+今天+胶囊) → glass(今天这一件) → cta → glass(家庭系统画像)
     → glass(六入口一列) → p.foot
   产品原来多出：品牌行、两段简介、意图五选一、三张空态卡、六入口的四组包装。
   多出来的收起，保留的按效果图的尺寸重做。

   ⚠️ 只收不删：这些节点 app.js 还在往里写东西，DOM 里留着，
   删了会让 app.js 报错、整页白掉。 */

/* 🔴 2026-09-03 · 客户 :107/:110「页面第一问」二次修复（F5 最终验收报告 ①，线上实测坐实）
   同一个坑在本文件 §6 的 `.home-spine` 上已经踩过并修过，注释原话：
     「flex-shrink:0 必须写。#screen-home 是定高的 flex 列，一旦给子项加了
       overflow:hidden，它就变成『可压缩』的，会被挤成 80px 把 473px 的内容裁掉」
   `#today-state` 与 `.home-spine` 都补了 `flex: 0 0 auto`，**唯独 `.home-intent` 漏了**。

   后果（线上真实量出来的，不是推断）：
     容器高 42px · 内容 scrollHeight 420px · **被裁掉 378px**
     五个选项 top = 198/257/317/376/435，全部落在 42px 的容器之外 → 家长一个都看不见
   而早上那支门禁报「5/5 可见」是**假绿**：`is_visible()` 对被 overflow:hidden
   裁掉的元素照样返回 true。判「家长看得见」必须量 getBoundingClientRect().height
   与 scrollHeight 的差，不能只问 is_visible。

   ⚠️ 这一条修的是 09-03 早上 B-1（display:none）之后**残留的第二重遮挡**：
   那次把它从「整块不显示」改成了「显示但被压扁 90%」，看着像修好了，实际家长还是点不到。 */
#screen-home .home-intent { flex: 0 0 auto; }

/* ── 收起已被 CX 6环新架构完全取代的旧版首页冗余卡片 ── */
#screen-home #legacy-home-container,
#screen-home .home-head,
#screen-home .today-pane,
#screen-home .hm-dash,
#screen-home .home-section-label,
#screen-home .home-spine,
#screen-home .screen-foot,
#screen-home .appname,
#screen-home .home-sub,
#screen-home #hm-bars-card,
#screen-home #hm-paths-card,
#screen-home #hm-todo-card { display: none !important; }

/* ── 1. 头部：效果图 .head padding 8px 20px 0，标题 30/36/700，胶囊右下对齐 ── */
#screen-home .home-head { padding: 8px 20px 0; }
#screen-home .today-title-row { align-items: flex-end; }
#screen-home .today-page-title { font-size: 30px; line-height: 36px; font-weight: 700; letter-spacing: -.4px; }
#screen-home .today-date-line {          /* 效果图 .head .hi */
  font-size: 13px; line-height: 18px; color: var(--t2); font-weight: 600;
}

/* ── 2.「今天这一件」卡：效果图 .glass margin 14px 16px 0，圆角 22 ── */
#screen-home .today-pane { padding: 0; }
#screen-home #today-state {
  flex: 0 0 auto;          /* 同上：加了 overflow:hidden 就必须锁住不许被压 */
  margin: 14px 16px 0;
  padding: 0 0 4px;
  border-radius: var(--r-lg);
  background: var(--glass);
  -webkit-backdrop-filter: blur(26px) saturate(1.9);
  backdrop-filter: blur(26px) saturate(1.9);
  border: 1px solid rgba(255, 255, 255, .75);
  box-shadow: 0 8px 32px rgba(12, 27, 22, .10);
  overflow: hidden;
}
#screen-home #today-state > h2 {         /* 效果图那行 20px/800/27px */
  margin: 0; padding: 15px 17px 0;
  font-size: 20px; font-weight: 800; line-height: 27px; letter-spacing: -.2px;
}
#screen-home #today-state > p {          /* 效果图 13px/19px/500 */
  margin: 6px 0 0; padding: 0 17px;
  font-size: 13px; line-height: 19px; font-weight: 500; color: var(--t2);
}

/* ── 3. 三点进度：效果图 .steps —— 圆点 24px，首点填实，点间一条 1.5px 连线 ── */
#screen-home .onboard-steps { padding: 14px 20px 16px; margin: 0; gap: 0; }
#screen-home .onboard-steps > li { position: relative; gap: 6px; }
#screen-home .onboard-steps { counter-reset: v7step; }
#screen-home .onboard-steps > li::before {
  counter-increment: v7step;
  content: counter(v7step);          /* 效果图圆点里是序号 */
  width: 24px; height: 24px; border-radius: 50%;
  background: rgba(255, 255, 255, .62);
  border: 1px solid rgba(255, 255, 255, .75);
  color: var(--t2); font-size: 12px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
#screen-home .onboard-steps > li:first-child::before {
  background: var(--accent); border-color: var(--accent); color: #fff;
}
/* 点与点之间的连线（效果图 .steps .s:not(:last-child)::after） */
#screen-home .onboard-steps > li:not(:last-child)::after {
  content: ""; position: absolute; top: 12px;
  left: calc(50% + 17px); right: calc(-50% + 17px);
  height: 1.5px; background: rgba(12, 27, 22, .14);
}
#screen-home .onboard-steps > li > span { font-size: 12px; font-weight: 600; color: var(--t2); }

/* ── 4. 主按钮：效果图 .cta 高 52，margin 16px 16px 0，宽 calc(100% - 32px) ── */
#screen-home .today-cta {
  height: 52px; margin: 16px 16px 0; width: calc(100% - 32px);
  border-radius: 16px; font-size: 16px; font-weight: 700;
}

/* ── 5. 家庭系统画像：效果图 .ch 头 + .empty 正文 ── */
#screen-home #hm-radar-card { margin: 14px 16px 0; }
#screen-home #hm-radar-card .hm-ch { padding: 15px 17px 0; }
#screen-home .hm-empty { padding: 20px 17px 18px; text-align: center; }

/* ── 6. 六入口：效果图是**一张玻璃卡里的六行**，不是六张卡 ──────────────────
   .sp-nd 用 display:contents 让四个分组容器从布局里消失，
   六张 fcard 就变成 .home-spine 的直接兄弟，相邻分隔线才画得出来。 */
#screen-home .home-spine {
  /* ⚠️ flex-shrink:0 必须写。#screen-home 是定高的 flex 列，
     一旦给子项加了 overflow:hidden，它就变成「可压缩」的，
     会被挤成 80px 把 473px 的内容裁掉 —— 实测踩过。 */
  flex: 0 0 auto;
  margin: 14px 16px 0;
  padding: 4px 0 6px;
  gap: 0;
  border-radius: var(--r-lg);
  background: var(--glass);
  -webkit-backdrop-filter: blur(26px) saturate(1.9);
  backdrop-filter: blur(26px) saturate(1.9);
  border: 1px solid rgba(255, 255, 255, .75);
  box-shadow: 0 8px 32px rgba(12, 27, 22, .10);
  overflow: hidden;
}
#screen-home .home-spine > .sp-nd { display: contents; }

/* 一行 = 图标29 + 文字两行 + 右箭头，最小高 58（效果图 .row） */
/* 一行 = 图标29 + 文字两行 + 右侧状态胶囊 + 右箭头，最小高 62（效果图 .row） */
#screen-home .home-spine .fcard {
  display: grid;
  grid-template-columns: 29px 1fr auto 14px;
  grid-template-rows: auto auto;
  column-gap: 12px;
  align-items: center;
  min-height: 62px;
  padding: 12px 16px;
  margin: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  position: relative;
  transition: background .15s ease;
}
#screen-home .home-spine .fcard:hover {
  background: rgba(255, 255, 255, .25);
}
#screen-home .home-spine .fcard + .fcard::before {
  content: ""; position: absolute; top: 0; left: 54px; right: 0;
  height: 1px; background: rgba(12, 27, 22, .09);
}
#screen-home .home-spine .fcard .emoji {
  grid-column: 1; grid-row: 1 / 3;
  width: 29px; height: 29px; border-radius: 9px;
  background: rgba(31, 83, 70, .11);
  border: 1px solid rgba(255, 255, 255, .6);
  display: flex; align-items: center; justify-content: center;
}
#screen-home .home-spine .fcard .emoji svg {
  width: 16px; height: 16px; stroke: var(--accent); fill: none;
  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round;
}
#screen-home .home-spine .fcard h3 {
  grid-column: 2; grid-row: 1; margin: 0;
  font-size: 15px; line-height: 20px; font-weight: 600; letter-spacing: -.1px;
  color: var(--t1);
}
#screen-home .home-spine .fcard > p {
  grid-column: 2; grid-row: 2; margin: 3px 0 0;
  font-size: 12px; line-height: 17px; font-weight: 500; color: var(--t2);
  /* 最后一行「草稿 · 待主理人签发」原来是个白底 999 圆角的药丸（那是效果图
     报告屏 M3/M6 里的形态）。首页 M1 里同一句话是**普通说明文字**，
     无底无圆角无内距。只在首页这一段清掉，别的屏的药丸不动。 */
  background: none;
  border-radius: 0;
  padding: 0;
  border: 0;
}
#screen-home .home-spine .fcard .gate-lock-badge {
  grid-column: 3;
  grid-row: 1 / 3;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border-radius: 999px;
  background: rgba(138, 81, 0, .08);
  border: 1px solid rgba(138, 81, 0, .18);
  font-size: 11px;
  line-height: 15px;
  font-weight: 700;
  color: #8A5100;
  white-space: nowrap;
  margin: 0;
}
/* 「开始诊断 →」这类文字换成效果图那个细箭头 */
#screen-home .home-spine .fcard .arrow {
  grid-column: 4; grid-row: 1 / 3;
  font-size: 0; width: 14px; height: 14px;
  display: flex; align-items: center; justify-content: center;
}
#screen-home .home-spine .fcard .arrow::after {
  content: ""; width: 7px; height: 7px;
  border-right: 2px solid rgba(12, 27, 22, .3);
  border-bottom: 2px solid rgba(12, 27, 22, .3);
  border-radius: 1px;
  transform: rotate(-45deg);
}

/* ── 7. 脚注：效果图 .foot 居中、padding 16px 30px 6px ── */
#screen-home .screen-foot {
  padding: 16px 30px 6px;
  margin: 0 0 calc(76px + env(safe-area-inset-bottom, 0px));
  text-align: center;
  line-height: 17px;
}

/* 「今天这一件」卡头 —— 效果图 .ch > .ct：15px/700，容器 padding 15px 17px 0 */
#screen-home #today-state > .tc-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 15px 17px 0;
}
#screen-home #today-state > .tc-head > .tc-title {
  font-size: 15px; font-weight: 700; letter-spacing: -.1px; color: var(--t1);
}
#screen-home #today-state > h2 { padding: 8px 17px 0; }


/* ══ 2026-09-02 菜单栏统一 + 教练屏还聊天区 ═════════════════════════════════
   大圣 09-02 实测指出两条基础问题，都坐实了：

   ① 菜单栏三套长相：教练/我的 62px 透明+blur(24)；报告 156px 白底 .72；
      **测评/规划 58px 实心米白 rgb(251,250,247)、完全没有模糊** —— 旧主题残留。
      统一成玻璃那一套，所有屏一个样。
   ② 教练屏聊天区只占全屏 41%（341px），效果图是 63%（575/915）。
      空间被顶部那条 161px 的厚带吃掉（身份切换 54 + 引导语 19 + 快捷提问 44）。
      快捷提问已搬到输入框上方，引导语收起，切换条压到 40px。 */

/* ⚠️ 必须逐个 id 枚举：教练屏和我的屏各有一条 #screen-xxx .navbar 的 id 级规则，
   `.app-screen .navbar`（0-2-0）压不过 id（1-1-0），只统一了一半，
   结果从「三套长相」变成「两套长相」，更难发现。 */
#screen-home .navbar,
#screen-tifen .navbar,
#screen-mine .navbar,
#screen-report .navbar,
#screen-screening .navbar,
#screen-subject-diagnosis .navbar,
#screen-planner .navbar,
#screen-assessment .navbar,
#screen-family-dynamics .navbar {
  background: transparent !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
  border: none !important;
  border-bottom: none !important;
  box-shadow: none !important;
  padding: 12px 18px 6px !important;
}

/* 彻底移除「跟家长说 / 跟孩子说」等顶栏冗余控件，空间 100% 释放给对话流。
   禁止再用 left:-9999px 停尸：子按钮 computed opacity 仍是 1，会伪造成横向溢出和孤字。 */
#screen-tifen .coach-face {
  display: none !important;
}
#screen-tifen .coach-face-lead { display: none !important; }
#screen-tifen .coach-face-switch {
  width: 100px; height: 30px; border-radius: 12px;
  background: rgba(255, 255, 255, 0.55);
  backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
}
#screen-tifen .coach-face-btn { font-size: 13px; font-weight: 600; }
#screen-tifen .coach-face-btn.active { font-weight: 700; }
/* 快捷提问贴着输入框，不再占顶部版面 */
#screen-tifen .coach-face-chips {
  display: flex;
  flex-wrap: nowrap !important;
  overflow-x: auto !important;
  overflow-y: hidden !important;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none !important;
  -ms-overflow-style: none !important;
  padding: 0 16px 4px !important;
  margin: 0 !important;
  gap: 8px !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}
#screen-tifen .coach-face-chips::-webkit-scrollbar {
  display: none !important;
  width: 0 !important;
  height: 0 !important;
}
#screen-tifen .coach-face-chips > * {
  flex: 0 0 auto !important;
  white-space: nowrap !important;
  min-height: 36px !important;
  padding: 6px 12px !important;
}
#screen-tifen .coach-face-chips::after {
  content: '';
  flex: 0 0 16px;
  width: 16px;
  height: 1px;
}
#screen-tifen .chat-input { margin: 4px 16px 4px !important; }
#screen-tifen .screen-foot { margin-top: 4px !important; margin-bottom: 4px !important; }

/* 2026-09-02 九屏穷尽扫描发现：教练屏「战略·节奏·计划」折叠段的空态文案被切成半句。
   实测 scrollHeight 32px 压进 clientHeight 16px（-webkit-line-clamp:1），
   而这一段在空档案下**没有任何可点的展开控件**，家长永远看不到后半句：
   全文「还不知道该主攻哪一科。先做一次首次诊断或填九科现状，这里就会给出四阶段安排。」
   屏幕上只到「填九科现」。同族问题见 playbook: answer-guillotined-at-char-limit。

   ⚠️ 坑：既有规则是 `#screen-tifen #tf-insights.is-collapsed .tf-ins-empty` —— **两个 id**。
   先写的 `.tf-insights` 类选择器版本特异性输，实测改完 clamp 仍是 1、clientHeight 仍是 16，
   看着像「改了没生效」。必须同样用两个 id 才压得住（同款坑见交接件第 6 条）。
   给空态文案两行放得下整句；有数据时的正常条目仍是单行预览，不受影响。 */
/* 2026-09-03 P0-3：原第二个选择器 `#tf-insights:has(.tf-ins-empty)` 让任一空态区块（「三诊断互引 0/3」
   只做学科诊断时恒空态、「逐题归因」没传试卷也空态）把整块 #tf-insights 连同已算好的
   「战略·节奏·计划」（四阶段 + 每天 180 分钟）一起藏掉——09-03 走查 B5/C1：家长划到底看不到一个字。
   改成：只藏**四块全空**（.is-collapsed 由 tfCompactInsightsIfEmpty 全空时才加）；单块空态各自压成一行。 */
#screen-tifen #tf-insights.is-collapsed {
  display: none !important;
}
#screen-tifen #tf-insights .tf-ins-sec:has(> .tf-ins-b > .tf-ins-empty:only-child) {
  padding: 2px 0; border: 0; background: none; box-shadow: none;
}
#screen-tifen #tf-insights .tf-ins-sec:has(> .tf-ins-b > .tf-ins-empty:only-child) .tf-ins-t,
#screen-tifen #tf-insights .tf-ins-sec:has(> .tf-ins-b > .tf-ins-empty:only-child) .tf-ins-empty {
  display: inline; font-size: 11px; line-height: 16px; margin: 0;
}
#screen-tifen #tf-attack-list:has(.tf-ins-empty),
#screen-tifen #tf-attack-list.is-collapsed {
  display: none !important;
}

/* 每日打卡卡片：紧凑微胶囊化，不霸占对话流视野 */
#screen-tifen .chat-area .tf-progress-card {
  padding: 10px 14px !important;
  margin: 6px 0 6px 36px !important;
  border-radius: 14px !important;
  background: rgba(255, 255, 255, .72) !important;
  border: 1px solid var(--edge) !important;
  box-shadow: 0 2px 10px rgba(12, 27, 22, .04) !important;
}
#screen-tifen .chat-area .tf-progress-head b {
  font-size: 13px !important;
  color: var(--accent) !important;
}
#screen-tifen .chat-area .tf-progress-submit {
  min-height: 32px !important;
  padding: 4px 12px !important;
  font-size: 13px !important;
  border-radius: 999px !important;
}

/* ═══════════════════════════════════════════════════════════
   UI v8 液态玻璃全屏收口（2026-09-03 · 对齐 UI-v7 定稿效果图）
   ═══════════════════════════════════════════════════════════ */

/* 通用头部 eyebrow 与大标题微调 */
.navbar .nav-eyebrow {
  display: block; font-size: 13px; line-height: 18px; color: var(--t2); font-weight: 600; margin-bottom: 2px;
}
.navbar .nav-title-group {
  display: flex; flex-direction: column; align-items: flex-start;
}

/* ── 屏 5「我的」专属组件 ── */
.prof { display: flex; align-items: center; gap: 13px; padding: 16px 17px; cursor: pointer; }
.avt {
  width: 52px; height: 52px; border-radius: 18px; flex: none;
  background: linear-gradient(145deg, var(--accent-2), var(--accent));
  display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 20px; font-weight: 800;
  box-shadow: 0 4px 14px rgba(31, 83, 70, .28);
}
.prof .pi { flex: 1; min-width: 0; }
.prof .pi .nm { font-size: 17px; font-weight: 800; color: var(--t1); }
.prof .pi .mt { font-size: 12px; color: var(--t2); margin-top: 3px; font-weight: 500; }

#exam-upload-entry > summary.upl {
  display: block !important;
  text-align: left !important;
  padding: 14px 16px !important;
  cursor: pointer;
  margin: 0;
  border-radius: 16px 16px 0 0;
  border: none !important;
  border-bottom: 1px solid #EBF3EE !important;
  background: linear-gradient(135deg, #f8fcf9, #f0f7f3) !important;
}
#exam-upload-entry > summary.upl .card-top-row {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  width: 100% !important;
}
#exam-upload-entry > summary.upl .card-desc {
  text-align: left !important;
}
#exam-upload-entry > summary.upl::marker,
#exam-upload-entry > summary.upl::-webkit-details-marker {
  display: none !important;
}

.upl {
  margin: 0; padding: 15px; border-radius: var(--r-md);
  border: 1.5px dashed rgba(31, 83, 70, .35);
  background: rgba(255, 255, 255, .45);
  text-align: center; cursor: pointer;
  transition: all .2s ease;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
}
.upl:hover {
  background: rgba(255, 255, 255, .65);
  border-color: var(--accent);
}
.upl .ut { font-size: 13px; font-weight: 700; margin-top: 7px; color: var(--accent); }
.upl .us { font-size: 11px; line-height: 16px; color: var(--t2); margin-top: 4px; font-weight: 500; }

.ch { display: flex; justify-content: space-between; align-items: baseline; padding: 15px 17px 6px; }
.ch .ct { font-size: 15px; font-weight: 700; color: var(--t1); }
.ch .cs { font-size: 12px; color: var(--t2); font-weight: 500; }

/* 2026-09-04 「我的」屏对齐 UI-v11：复测曲线卡（真实三次总分折线，见 tifen.js
   renderRetestTrend；数据不足时保持 .mine-empty 诚实空态，不画假线）。 */
#mine-retest-card .mine-empty { padding: 4px 17px 16px; }
#mine-retest { padding: 6px 17px 14px; }
/* 🔴 2026-09-04 P2：复测曲线空态套用报告屏 .rp-plan-empty-* 那套紧凑模式——
   高度随内容走，不再是 min-height:180px 撑满一屏的大白框。 */
.mine-trend-empty { padding: 4px 17px 16px; }
.mine-trend-empty p {
  margin: 0 0 12px; font-size: 13px; line-height: 19px; color: var(--t2);
}
.mine-trend-empty-cta {
  display: flex; align-items: center; justify-content: center;
  text-decoration: none; cursor: pointer;
}
#mine-retest .mine-trend-svg { width: 100%; height: 54px; display: block; }
#mine-retest .mine-trend-labels {
  display: flex; justify-content: space-between; padding-top: 4px;
  font-size: 11px; color: var(--t2); font-weight: 500;
}

#exam-upload-entry input[type="text"],
#exam-upload-entry input[type="number"],
#exam-upload-entry input[type="date"],
#exam-upload-entry select {
  border-radius: var(--r-sm);
  border: 1px solid rgba(31, 83, 70, .2);
  background: rgba(255, 255, 255, .8);
  padding: 8px 12px;
  font-size: 13px;
}
/* 🔴 2026-09-04 P2：原生 <input type=date> 空值时浏览器画的是英文 mm/dd/yyyy
   裸占位（不是 HTML placeholder，CSS 改不了那串文字，这是浏览器按系统区域画的），
   跟旁边「第 1 次考试名称」这类中文 placeholder 摆在一起违和、像没套上设计系统。
   做法：不硬啃改不动的浏览器内部占位符，改成给 date 输入套一层可见的中文小标签
  （.date-field-cap），同时把输入本体的描边/背景/圆角/日历图标统一到设计系统色。 */
#exam-upload-entry .date-field {
  display: flex; flex-direction: column; gap: 3px;
  position: relative;
}
#exam-upload-entry .date-field-cap {
  font-size: 10px; font-weight: 700; color: var(--t2, rgba(12,27,22,.55));
  padding-left: 2px; letter-spacing: .2px;
}
#exam-upload-entry input[type="date"] {
  width: 100%; box-sizing: border-box; color: var(--t1, #0C1B16);
  font-family: inherit; -webkit-appearance: none; appearance: none;
}
#exam-upload-entry input[type="date"]::-webkit-calendar-picker-indicator {
  filter: invert(20%) sepia(40%) saturate(1200%) hue-rotate(122deg) brightness(.9);
  opacity: .8; cursor: pointer;
}
#exam-upload-entry input[type="date"]::-webkit-datetime-edit {
  color: var(--t1, #0C1B16);
}
/* 彻底消灭浏览器默认的英文 mm/dd/yyyy 裸字符：
   当未选择日期且未获得焦点时，隐藏原生影子占位符，由外层伪元素呈现规范的中文提示 */
#exam-upload-entry .date-field:not(.has-value):not(:focus-within) input[type="date"] {
  color: transparent !important;
}
#exam-upload-entry .date-field:not(.has-value):not(:focus-within) input[type="date"]::-webkit-datetime-edit {
  color: transparent;
}
#exam-upload-entry .date-field:not(.has-value):not(:focus-within)::after {
  content: "选择考试日期（年 / 月 / 日）";
  position: absolute;
  left: 10px;
  bottom: 8px;
  font-size: 12px;
  color: #94a3b8;
  pointer-events: none;
}
#exam-upload-entry .exam-score-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
  margin-bottom: 8px;
  padding: 8px;
  border-radius: var(--r-sm);
  background: rgba(255, 255, 255, .4);
  border: 1px solid rgba(255, 255, 255, .6);
}
/* 🔴 2026-09-04 P2：三次成绩卡对齐 v11——「第 N 次」标签头跨两列，
   四个字段（考试名称/考试日期/科目/该科成绩）统一用 .exam-field 小标签+输入
   的两行结构，不再是裸占位符堆叠混搭。 */
#exam-upload-entry .exam-score-row-head {
  grid-column: 1 / -1;
  font-size: 11px; font-weight: 800; color: var(--accent);
  letter-spacing: .3px; padding: 0 2px 2px;
}
#exam-upload-entry .exam-field {
  display: flex; flex-direction: column; gap: 3px;
}
#exam-upload-entry .exam-field-cap {
  font-size: 10px; font-weight: 700; color: var(--t2, rgba(12,27,22,.55));
  padding-left: 2px; letter-spacing: .2px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
#exam-upload-entry .exam-field input,
#exam-upload-entry .exam-field select {
  width: 100%; box-sizing: border-box;
}

/* 「还差年级和省份才能补」并入统一表单卡样式，不再是裸文字后面直接挂控件。 */
#exam-upload-entry .exam-basics-card {
  display: flex; flex-direction: column; gap: 8px;
  margin: 0 0 12px; padding: 10px 12px;
  border-radius: var(--r-sm);
  background: rgba(255, 255, 255, .5);
  border: 1px solid rgba(255, 255, 255, .7);
}
#exam-upload-entry .exam-basics-card .form-hint { margin: 0 0 2px; }

/* 🔴 2026-09-04 P1：「上传后会自动解析…」「上传试卷后，会在这里展示逐题解析
   结果」原来结构上在卡内、视觉上没有可感知的容器把它们跟表单圈在一起，
   看起来像悬浮在卡外的散字。补一层可见分隔+浅底，视觉上"收进卡片"。 */
#exam-upload-entry .exam-note-box {
  margin-top: 10px; padding-top: 10px;
  border-top: 1px solid rgba(31, 83, 70, .12);
}

/* 试卷文件上传区美化与全中文交互（彻底消除浏览器原生英文 Choose Files / No file chosen） */
.exam-file-picker-wrap {
  position: relative;
  margin: 6px 0;
}
.exam-file-dropzone {
  display: block;
  padding: 12px 14px;
  background: rgba(255, 255, 255, 0.7);
  border: 1.5px dashed #22c55e;
  border-radius: var(--r-sm, 10px);
  text-align: center;
  transition: all 0.2s ease;
  user-select: none;
}
.exam-file-dropzone:hover {
  background: rgba(240, 253, 244, 0.95);
  border-color: #16a34a;
  transform: translateY(-1px);
}
.exam-file-dropzone:active {
  transform: translateY(0);
}

.trend { padding: 14px 17px 16px; }
.trend svg { width: 100%; height: 74px; }
.blg { display: flex; gap: 14px; padding: 6px 17px 14px; font-size: 11px; color: var(--t2); font-weight: 500; justify-content: space-between; }

.rows { padding: 4px 0 6px; }
.row { display: flex; align-items: center; gap: 12px; padding: 0 16px; min-height: 56px; cursor: pointer; position: relative; }
.row + .row::before { content: ""; position: absolute; top: 0; left: 54px; right: 0; height: 1px; background: rgba(12, 27, 22, .09); }
.ic {
  width: 29px; height: 29px; border-radius: 9px; flex: none;
  background: rgba(31, 83, 70, .11); border: 1px solid rgba(255, 255, 255, .6);
  display: flex; align-items: center; justify-content: center;
}
.ic svg { width: 16px; height: 16px; stroke: var(--accent); fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.tx { flex: 1; min-width: 0; padding: 10px 0; }
.tx .t { font-size: 15px; line-height: 20px; font-weight: 600; letter-spacing: -.1px; color: var(--t1); }
.tx .d { font-size: 12px; line-height: 17px; color: var(--t2); margin-top: 2px; font-weight: 500; }
.chev { width: 7px; height: 12px; flex: none; stroke: rgba(12, 27, 22, .3); stroke-width: 2; fill: none; stroke-linecap: round; stroke-linejoin: round; }

/* ── 屏 3「报告」专属组件 ── */
.rhead { padding: 15px 17px 0; }
.rhead .rt { font-size: 19px !important; font-weight: 800 !important; line-height: 25px !important; color: var(--t1) !important; }
.rbadge {
  font-size: 11px; line-height: 15px; font-weight: 700; color: #8A5100;
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 8px; border-radius: 999px; margin-top: 6px;
  background: rgba(138, 81, 0, .08); border: 1px solid rgba(138, 81, 0, .18);
}
.rbadge i { width: 6px; height: 6px; border-radius: 50%; background: #8A5100; display: inline-block; }
.sec { padding: 12px 17px 0; }
.sec h4 { margin: 0 0 6px; font-size: 12px; font-weight: 800; letter-spacing: .6px; color: var(--accent); text-transform: uppercase; }
.sec p {
  margin: 0 0 12px; font-size: 12.5px; line-height: 19px; color: var(--t2);
  padding: 10px 12px; border-radius: 12px;
  background: rgba(255, 255, 255, .45); border: 1px solid rgba(255, 255, 255, .6);
}

.route { display: flex; gap: 8px; padding: 4px 17px 14px; }
.route .r {
  flex: 1; padding: 11px 8px; border-radius: var(--r-md);
  background: rgba(255, 255, 255, .65); border: 1px solid rgba(255, 255, 255, .8);
  text-align: center;
  box-shadow: 0 2px 8px rgba(12, 27, 22, .03);
}
.route .r .k { font-size: 11px; font-weight: 800; color: var(--t2); margin-bottom: 2px; }
.route .r .v { font-size: 14px; font-weight: 800; margin-top: 3px; color: var(--t1); }
.route .r.main {
  background: linear-gradient(180deg, rgba(31, 83, 70, .12), rgba(31, 83, 70, .04));
  border: 1.5px solid var(--accent);
  box-shadow: 0 4px 12px rgba(31, 83, 70, .10);
}
.route .r.main .k { color: var(--accent); }

.paths { display: flex; gap: 9px; padding: 14px 15px 16px; }
.pth {
  flex: 1; text-align: center; border-radius: var(--r-md); padding: 12px 6px 11px;
  background: rgba(255, 255, 255, .60); border: 1px solid rgba(255, 255, 255, .75);
  box-shadow: 0 3px 10px rgba(12, 27, 22, .03);
}
.pth .dial { width: 100%; aspect-ratio: 1; max-width: 62px; margin: 0 auto 6px; position: relative; }
.pth .dial .n {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 17px; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--t1);
}
.pth .lb { font-size: 13px; font-weight: 700; color: var(--t1); margin-top: 2px; }
.pth .sub { font-size: 11px; color: var(--t2); margin-top: 1px; font-weight: 600; }

.todo { padding: 5px 17px 14px; }
.ti { display: flex; gap: 10px; padding: 9px 0; align-items: flex-start; cursor: pointer; }
.ti + .ti { border-top: 1px solid rgba(12, 27, 22, .09); }
.ck {
  width: 21px; height: 21px; border-radius: 7px; flex: none; margin-top: 1px;
  border: 1.8px solid rgba(12, 27, 22, .18); background: rgba(255, 255, 255, .5);
  display: flex; align-items: center; justify-content: center;
}
.ck.done { background: var(--accent); border-color: var(--accent); }
.ck svg { width: 11px; height: 11px; stroke: #fff; stroke-width: 2.6; fill: none; stroke-linecap: round; stroke-linejoin: round; }
.ti .tt { flex: 1; min-width: 0; }
.ti .tt .a { font-size: 14px; line-height: 19px; font-weight: 600; color: var(--t1); }
.ti .tt .a.done { color: var(--t3); text-decoration: line-through; font-weight: 500; }
.ti .tt .m { font-size: 11px; line-height: 16px; color: var(--t2); margin-top: 2px; font-weight: 500; }
.ti .dur {
  font-size: 11px; font-weight: 800; color: var(--accent); flex: none; margin-top: 1px;
  background: rgba(255, 255, 255, .62); border: 1px solid var(--edge); border-radius: 6px; padding: 2px 7px;
}

/* 抽屉样式 */
.drawer-backdrop {
  position: absolute; inset: 0; background: rgba(12, 27, 22, .45); z-index: 100;
  display: none; opacity: 0; transition: opacity .25s ease;
}
.drawer-backdrop.show { display: block; opacity: 1; }
.drawer {
  position: absolute; left: 0; right: 0; bottom: 0; max-height: 85%;
  background: rgba(255, 255, 255, .96); -webkit-backdrop-filter: blur(30px); backdrop-filter: blur(30px);
  border-radius: 32px 32px 0 0; border: 1px solid rgba(255, 255, 255, .8);
  padding: 16px 20px 36px; z-index: 101; transform: translateY(100%);
  transition: transform .3s cubic-bezier(.2, .9, .3, 1);
  box-shadow: 0 -10px 40px rgba(12, 27, 22, .25); overflow-y: auto;
}
.drawer.show { transform: translateY(0); }
.drawer-handle { width: 44px; height: 5px; background: rgba(12, 27, 22, .2); border-radius: 3px; margin: 0 auto 16px; }
.drawer-h { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
.drawer-title { font-size: 17px; font-weight: 800; color: var(--t1); }
.drawer-close { font-size: 14px; font-weight: 700; color: var(--accent); cursor: pointer; background: none; border: none; }

/* 「开始全面诊断」未选意图时，滚到 #home-intent 提示的临时高亮（2026-09-03） */
.is-flash { box-shadow: 0 0 0 3px rgba(66, 133, 244, 0.4) !important; transition: box-shadow 0.3s; }


/* 2026-09-04 排版统一（大圣实拍「上宽下窄」）：报告文末「看看适合我家的升学路径」
   出口去掉小节的卡片壳、按钮通栏，与下方「上传三次成绩与试卷」CTA 同宽同节奏。 */
#screen-report .rp-planner-exit{padding:0 !important;background:transparent !important;border:none !important;box-shadow:none !important;}
#screen-report .rp-planner-exit .primary-btn{display:block;width:100%;margin:0;}

/* ── 2026-09-04 全站排版统一 · 规划结果区系统化重构（彻底解决大圣实拍问题）──
   标准阅读轴线：左右各保留 16px 呼吸留白（与首页、规划表单统一对齐），
   所有卡片、长按钮、问答容器、免责声明严格 100% 充满 338px/358px 标准卡片线，
   彻底消灭贴边与锯齿错位。 */
#screen-planner #planner-result-view {
  padding: 12px 16px 40px !important;
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  overflow-x: hidden !important;
}
#screen-planner #planner-result-view > * {
  margin-left: 0 !important;
  margin-right: 0 !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
#screen-planner #planner-result-view > [hidden],
#screen-planner #planner-result-view [hidden] {
  display: none !important;
}
#screen-planner #planner-result-view > *:empty {
  display: none !important;
}

/* 顶部画像 Chips 消除多余内缩，与卡片垂直对齐 */
#screen-planner #planner-result-view #pl-chips {
  padding: 4px 0 12px !important;
  margin: 0 !important;
  width: 100% !important;
}
#screen-planner #planner-result-view #pl-chips .chip {
  background: #ffffff;
  border-radius: var(--r-md);
  border: 1px solid var(--edge);
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05);
  padding: 10px 8px;
  min-width: 0;
}
/* 🔴 2026-09-04 大圣实拍：命中「等效位次」这个 4 字标签时（省份/选科/预估分只有
   2-3 字），四格等分后单格只有 ~60px，CJK 默认逐字断行把它拦腰断成「等效位/次」。
   标签不许断词——统一不换行，长一点的就自动缩小字号塞进一行，比断成两截体面。 */
#screen-planner #planner-result-view #pl-chips .chip .c-label {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: clip;
  font-size: 11px;
}

/* 位次三档信息卡：优雅左对齐与排版收敛，消除居中巨大粗字 */
#screen-planner #pl-rank-bands .chip {
  text-align: left !important;
  padding: 14px 16px !important;
  background: #ffffff !important;
  border-radius: var(--r-md) !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  border: 1px solid var(--edge) !important;
  margin-bottom: 10px !important;
  box-sizing: border-box !important;
}
#screen-planner #pl-rank-bands .chip .c-label {
  font-size: 13.5px !important;
  font-weight: 700 !important;
  color: var(--t1) !important;
  margin-bottom: 6px !important;
  display: flex;
  align-items: center;
  gap: 6px;
}
#screen-planner #pl-rank-bands .chip .c-value {
  font-size: 13.5px !important;
  font-weight: 500 !important;
  line-height: 1.65 !important;
  color: var(--t2) !important;
  text-align: left !important;
}

/* 🔴 2026-09-04 大圣实拍：这条原来是横排 flex，「湖南家长现在能拿到…」这句长文案
   的 .chip（flex:1）要跟旁边「去问」胶囊按钮抢横向空间，被挤成约 1/3 屏宽的
   窄柱——句子被迫逐字竖排。改成纵向堆叠：提示句占满整行，去问按钮排在下面。 */
#screen-planner #pl-path-switch {
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  justify-content: flex-start !important;
  gap: 10px !important;
  width: 100% !important;
  margin: 0 0 12px !important;
}
#screen-planner #pl-path-switch > .chip {
  flex: none !important;
  width: 100% !important;
  text-align: left !important;
  box-sizing: border-box !important;
}
#screen-planner #pl-path-switch > .pl-ask-more {
  align-self: flex-start !important;
}
#screen-planner .pl-ask-more {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 38px !important;
  padding: 8px 20px !important;
  background: #ffffff !important;
  color: var(--accent) !important;
  border: 1px solid rgba(31, 83, 70, 0.25) !important;
  border-radius: 999px !important;
  font-size: 13.5px !important;
  font-weight: 600 !important;
  box-shadow: 0 3px 12px rgba(12, 27, 22, 0.08) !important;
  cursor: pointer !important;
  outline: none !important;
  transition: all 0.15s ease !important;
  box-sizing: border-box !important;
  -webkit-appearance: none !important;
  appearance: none !important;
}
#screen-planner .pl-ask-more:hover {
  background: rgba(31, 83, 70, 0.04) !important;
  border-color: var(--accent) !important;
}
#screen-planner .pl-ask-more:active {
  transform: scale(0.97) !important;
}

/* 关切重点与省情卡统一为柔和基底 */
#screen-planner .planner-focus,
#screen-planner #pl-concern-focus {
  background: rgba(31, 83, 70, 0.06) !important;
  border: 1px solid rgba(31, 83, 70, 0.15) !important;
  border-left: 3px solid var(--accent) !important;
  color: var(--t1) !important;
  border-radius: var(--r-md) !important;
  padding: 12px 14px !important;
  margin: 0 0 12px !important;
}
#screen-planner #pl-province-note {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 0 12px !important;
  width: 100% !important;
}
#screen-planner #pl-province-note .pnote,
#screen-planner .pnote {
  background: #ffffff !important;
  border: 1px solid var(--edge) !important;
  border-left: 3px solid #d97706 !important;
  border-radius: var(--r-md) !important;
  padding: 14px 16px !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  margin: 0 !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
#screen-planner .pnote h5 {
  color: var(--t1) !important;
  font-size: 15px !important;
  font-weight: 700 !important;
  margin-bottom: 8px !important;
}
#screen-planner .pnote .pn-sec {
  background: #f9fbf9 !important;
  border: 1px solid rgba(31, 83, 70, 0.08) !important;
  border-radius: 10px !important;
  padding: 10px 12px !important;
  margin-top: 8px !important;
}
#screen-planner .pnote .pn-sub {
  color: var(--accent) !important;
  font-weight: 700 !important;
  font-size: 13px !important;
  margin-bottom: 4px !important;
}
#screen-planner .pnote p,
#screen-planner .pnote li {
  color: var(--t2) !important;
  font-size: 13px !important;
  line-height: 1.6 !important;
}

/* 推荐路径小节标题与卡片列表 */
#screen-planner #planner-result-view #pl-list-title {
  padding: 4px 0 12px !important;
  margin: 0 !important;
  color: var(--t1) !important;
}
#screen-planner #planner-result-view .path-list {
  padding: 0 !important;
  margin: 0 0 12px !important;
  gap: 12px !important;
}
#screen-planner #planner-result-view .path-card {
  width: 100% !important;
  box-sizing: border-box !important;
  margin: 0 !important;
  border-radius: var(--r-md) !important;
  border: 1px solid var(--edge) !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  background: #ffffff !important;
}

/* 学科覆盖与验证指引卡片 */
#screen-planner #pl-subject-coverage {
  background: #ffffff !important;
  border-radius: var(--r-md) !important;
  padding: 16px !important;
  border: 1px solid var(--edge) !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  margin: 0 0 12px !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
#screen-planner #pl-subject-coverage h3 { margin: 0 0 8px !important; font-size: 15px !important; color: var(--t1) !important; }
#screen-planner #pl-subject-coverage p { margin: 0 !important; color: var(--t2) !important; font-size: 13.5px !important; line-height: 1.6 !important; }

#screen-planner #pl-verification-guidance {
  margin: 0 0 12px !important;
  padding: 0 !important;
}
#screen-planner .verification-card {
  margin: 0 !important;
  border-radius: var(--r-md) !important;
  border: 1px solid var(--edge) !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
}

/* 参考案例卡片：统一边距与微阴影，彻底消灭 0px 贴边 */
#screen-planner #pl-cases {
  margin: 0 0 12px !important;
  padding: 0 !important;
  width: 100% !important;
}
#screen-planner #planner-result-view .ref-case {
  margin: 0 0 12px !important;
  background: #ffffff !important;
  border: 1px solid var(--edge) !important;
  border-left: 3px solid var(--accent) !important;
  border-radius: var(--r-md) !important;
  padding: 14px 16px !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  width: 100% !important;
  box-sizing: border-box !important;
}

/* 问答区块：升级为完整白底微阴影独立卡片，彻底消灭锯齿错位 */
#screen-planner #planner-result-view #pl-ask {
  background: #ffffff !important;
  border-radius: var(--r-md) !important;
  padding: 16px !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  border: 1px solid var(--edge) !important;
  margin: 0 0 12px !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
#screen-planner #planner-result-view #pl-ask .section-title {
  padding: 0 0 10px !important;
  margin: 0 !important;
  font-size: 15px !important;
  font-weight: 700 !important;
  color: var(--t1) !important;
}
#screen-planner #planner-result-view #pl-ask .ask-chips {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 8px !important;
  margin: 0 0 12px !important;
  padding: 0 !important;
}
#screen-planner #planner-result-view #pl-ask .sg-chip {
  display: inline-flex !important;
  align-items: center !important;
  padding: 6px 14px !important;
  font-size: 12.5px !important;
  border-radius: 999px !important;
  background: #fff !important;
  border: 1px solid rgba(31, 83, 70, 0.2) !important;
  color: var(--accent) !important;
  font-weight: 500 !important;
  cursor: pointer !important;
}
#screen-planner #planner-result-view #pl-ask-form {
  margin: 0 !important;
  width: 100% !important;
  box-sizing: border-box !important;
}

/* 免责声明与重新填写主按钮：与卡片严格等宽 */
#screen-planner #planner-result-view .of-disc-box,
#screen-planner #planner-result-view .disclaimer {
  margin: 0 0 12px !important;
  padding: 10px 14px !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
#screen-planner #planner-result-view #pl-again {
  margin: 12px 0 24px !important;
  width: 100% !important;
  box-sizing: border-box !important;
  min-height: 48px !important;
  border-radius: 14px !important;
}

/* ═══════════════════════════════════════════════════════════
   2026-09-04 全站视觉规范闭环：对齐 338px 统一基准线与设计令牌
   解决「其他可行路径/暂不建议/综合报告」内外边距不统一与暖灰旧色板问题
   ═══════════════════════════════════════════════════════════ */

/* 1. 规划师结果页折叠组：消除多余 16px 边距收缩，统一卡线 338px */
#screen-planner #planner-result-view .path-fold,
#screen-planner #planner-result-view .path-comparison-fold {
  margin: 0 0 12px !important;
  padding: 0 !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
#screen-planner #planner-result-view .path-fold summary {
  padding: 8px 0 10px !important;
  margin: 0 !important;
  font-size: 14px !important;
  font-weight: 700 !important;
  color: var(--t1) !important;
  outline: none !important;
}
#screen-planner #planner-result-view .path-fold .of-path-cards {
  margin: 0 !important;
  padding: 0 !important;
  gap: 12px !important;
  width: 100% !important;
  box-sizing: border-box !important;
}

/* 2. 路径卡（.of-path-card）：统一为清爽白底翡翠微光斑，与主路径卡一致 */
#screen-planner #planner-result-view .of-path-card {
  width: 100% !important;
  box-sizing: border-box !important;
  margin: 0 !important;
  border-radius: var(--r-md) !important;
  border: 1px solid var(--edge) !important;
  background: #ffffff !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  overflow: hidden !important;
}
#screen-planner #planner-result-view .of-path-card-top {
  background: rgba(31, 83, 70, 0.06) !important;
  border-bottom: 1px solid rgba(31, 83, 70, 0.08) !important;
  padding: 12px 14px !important;
}
#screen-planner #planner-result-view .of-path-card-tag {
  color: var(--accent) !important;
  font-size: 11.5px !important;
  font-weight: 700 !important;
}
#screen-planner #planner-result-view .of-path-card-top h3 {
  color: var(--t1) !important;
  font-size: 15px !important;
  font-weight: 700 !important;
}
#screen-planner #planner-result-view .of-path-card-body {
  padding: 12px 14px 14px !important;
}

/* 3. 暂不建议与待核验面板：统一 338px 宽度与白底卡片 */
#screen-planner #planner-result-view .of-notrec-group {
  margin: 0 0 12px !important;
  padding: 0 !important;
  width: 100% !important;
  box-sizing: border-box !important;
  background: #ffffff !important;
  border: 1px solid var(--edge) !important;
  border-radius: var(--r-md) !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
}
#screen-planner #planner-result-view .of-notrec-group summary {
  padding: 12px 14px !important;
  color: var(--t1) !important;
  font-size: 14px !important;
  font-weight: 700 !important;
}
#screen-planner #planner-result-view .of-notrec-list {
  padding: 0 14px 14px !important;
  gap: 8px !important;
}
#screen-planner #planner-result-view .of-notrec-item {
  border-radius: var(--r-sm) !important;
  padding: 10px 12px !important;
}
#screen-planner #planner-result-view .of-pending-panel {
  margin: 0 0 12px !important;
  width: 100% !important;
  box-sizing: border-box !important;
}
#screen-planner #planner-result-view .of-pending-list {
  margin: 0 !important;
  padding: 0 !important;
  width: 100% !important;
  gap: 8px !important;
}
#screen-planner #planner-result-view .of-pending-item {
  border-radius: var(--r-md) !important;
  background: #ffffff !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
  padding: 12px 14px !important;
}

/* 4. 一页纸初筛结论卡（.pl-summary）：统一百分百对齐与阴影 */
#screen-planner #planner-result-view .pl-summary {
  width: 100% !important;
  box-sizing: border-box !important;
  margin: 0 0 12px !important;
  background: #ffffff !important;
  border: 1px solid var(--edge) !important;
  border-radius: var(--r-md) !important;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05) !important;
}

/* 5. 综合报告屏（#screen-report）：统一卡片边距 16px，宽度基准线 338px 对齐 */
#screen-report #rp-body {
  padding: 0 16px 16px !important;
  box-sizing: border-box !important;
}
#screen-report > #rp-comprehensive-card {
  margin: 14px 16px 12px !important;
}
#screen-report .rp-sec,
#screen-report #rp-issued-plan {
  margin: 0 0 14px !important;
  width: 100% !important;
  box-sizing: border-box !important;
  background: #ffffff !important;
  border: 1.5px solid #D2E7DC !important;
  border-radius: 20px !important;
  box-shadow: 0 10px 28px rgba(22, 60, 48, 0.07), 0 2px 8px rgba(22, 60, 48, 0.03) !important;
  padding: 16px 18px !important;
}

/* 升学路径匹配度小卡：破白叠白，内嵌微翠圆角微槽 */
#screen-report .pth {
  background: #F6FAF8 !important;
  border: 1.2px solid #DCECE3 !important;
  border-radius: 14px !important;
  box-shadow: 0 2px 8px rgba(18, 40, 32, 0.04) !important;
}
#screen-report .pth:first-child {
  background: linear-gradient(180deg, #F2FAF5 0%, #EBF6F0 100%) !important;
  border-color: #BBDDCA !important;
}

/* 移除屏幕内多余硬核文档大黑线与重复大标题，但保留主理人签发按钮。 */
#screen-report .rp-head {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-end !important;
  gap: 12px !important;
}

#screen-report .rp-head > h2,
#screen-report .rp-head > .rp-meta {
  display: none !important;
}

/* 章节标题：统一为极具辨识度的翡翠重音小标与清晰层级 */
#screen-report .rp-sec h3 {
  display: block !important;
  align-items: center !important;
  font-size: 16px !important;
  font-weight: 800 !important;
  color: var(--t1) !important;
  margin: 0 0 12px !important;
  border-left: 3.5px solid var(--accent) !important;
  padding-left: 8px !important;
  line-height: 1.3 !important;
}

/* 结论段落高亮盒：结论前置，重点明确 */
#screen-report .rp-sec .rp-conclusion {
  background: rgba(31, 83, 70, 0.05) !important;
  border: 1px solid rgba(31, 83, 70, 0.12) !important;
  border-radius: var(--r-sm) !important;
  padding: 10px 14px !important;
  margin: 0 0 12px !important;
  font-size: 14px !important;
  font-weight: 700 !important;
  color: var(--accent) !important;
  line-height: 1.6 !important;
}

/* 正文段落：优雅字距行高与舒适灰阶 */
#screen-report .rp-sec p:not(.rp-conclusion) {
  font-size: 13.5px !important;
  line-height: 1.75 !important;
  color: var(--t2) !important;
  margin: 0 0 10px !important;
}

/* 表格视觉优化：优雅微圆角白底边框 */
#screen-report .rp-kv,
#screen-report .rp-tab {
  border: 1.2px solid #DCECE3 !important;
  border-radius: 12px !important;
  background: #ffffff !important;
  overflow: hidden !important;
  margin-top: 10px !important;
}
#screen-report .rp-kv th,
#screen-report .rp-tab th {
  background: #EAF4EE !important;
  color: #167448 !important;
  font-weight: 700 !important;
  font-size: 12px !important;
  border-bottom: 1.2px solid #DCECE3 !important;
  border-top: none !important;
  border-left: none !important;
  border-right: none !important;
  padding: 9px 10px !important;
}
#screen-report .rp-kv td,
#screen-report .rp-tab td {
  border: none !important;
  border-bottom: 1px solid #EEF5F1 !important;
  font-size: 12.5px !important;
  color: var(--t1) !important;
  padding: 9px 10px !important;
}
#screen-report .rp-kv tr:last-child td,
#screen-report .rp-tab tr:last-child td {
  border-bottom: none !important;
}

/* 学科拖累关系图直观因果拓扑与机制表 */
#screen-report .rp-drag-insight-box {
  background: linear-gradient(135deg, #FFF8F2 0%, #FEF2E8 100%);
  border: 1.2px solid #F5D3B8;
  border-radius: 12px;
  padding: 11px 13px;
  margin-bottom: 14px;
  display: flex;
  gap: 10px;
  align-items: flex-start;
}
#screen-report .rp-drag-insight-box .drag-insight-icon {
  font-size: 16px; line-height: 1.2; flex-shrink: 0; margin-top: 1px;
}
#screen-report .rp-drag-insight-box .drag-insight-text {
  font-size: 12px; line-height: 1.55; color: #823E15;
}
#screen-report .rp-drag-insight-box .drag-insight-text b {
  color: #B43403; font-weight: 800;
}
#screen-report .rp-drag-topology {
  background: #F6FAF8;
  border: 1.2px solid #DCECE3;
  border-radius: 16px;
  padding: 16px 12px;
  margin-bottom: 14px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
}
#screen-report .rp-drag-topology .root-node {
  background: linear-gradient(135deg, #FFF1F0 0%, #FFE4E6 100%);
  border: 1.5px solid #FCA5A5;
  border-radius: 14px;
  padding: 10px 16px;
  text-align: center;
  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.12);
  width: 100%;
  max-width: 260px;
}
#screen-report .rp-drag-topology .root-tag {
  display: inline-block;
  background: #EF4444;
  color: #fff;
  font-size: 10px;
  font-weight: 800;
  padding: 2px 8px;
  border-radius: 99px;
  letter-spacing: 0.5px;
  margin-bottom: 4px;
  white-space: nowrap;
}
#screen-report .rp-drag-topology .root-name {
  font-size: 15.5px;
  font-weight: 900;
  color: #991B1B;
  letter-spacing: -0.2px;
}
#screen-report .rp-drag-topology .root-meta {
  font-size: 11px;
  color: #B91C1C;
  margin-top: 2px;
  font-weight: 600;
}
#screen-report .rp-drag-topology .flow-connector {
  display: flex;
  justify-content: space-around;
  width: 100%;
  position: relative;
  padding: 2px 10px;
}
#screen-report .rp-drag-topology .flow-branch {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
}
#screen-report .rp-drag-topology .flow-arrow-down {
  width: 2px;
  height: 22px;
  background: linear-gradient(180deg, #F87171 0%, #059669 100%);
  position: relative;
}
#screen-report .rp-drag-topology .flow-arrow-down::after {
  content: "";
  position: absolute;
  bottom: -4px;
  left: -3px;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 5px solid #059669;
}
#screen-report .rp-drag-topology .flow-pill {
  background: #FFFFFF;
  border: 1px solid #D1D5DB;
  border-radius: 99px;
  padding: 2px 8px;
  font-size: 10px;
  font-weight: 800;
  color: #374151;
  box-shadow: 0 2px 5px rgba(0,0,0,0.04);
  white-space: nowrap;
}
#screen-report .rp-drag-topology .flow-pill.strong {
  color: #DC2626;
  border-color: #FECACA;
  background: #FEF2F2;
}
#screen-report .rp-drag-topology .target-row {
  display: flex;
  gap: 10px;
  width: 100%;
}
#screen-report .rp-drag-topology .target-node {
  flex: 1;
  background: #FFFFFF;
  border: 1.2px solid #D1E4DA;
  border-radius: 12px;
  padding: 10px 8px;
  text-align: center;
  box-shadow: 0 2px 8px rgba(18, 40, 32, 0.04);
}
#screen-report .rp-drag-topology .target-badge {
  display: inline-block;
  background: #EAF4EE;
  color: #167448;
  font-size: 10px;
  font-weight: 700;
  padding: 1px 6px;
  border-radius: 4px;
  margin-bottom: 4px;
  white-space: nowrap;
}
#screen-report .rp-drag-topology .target-name {
  font-size: 14px;
  font-weight: 800;
  color: #142821;
}
#screen-report .rp-drag-topology .target-symptom {
  font-size: 10.5px;
  color: #4D6357;
  margin-top: 3px;
  line-height: 1.3;
}
#screen-report .rp-drag-topology .target-scores {
  font-size: 10px;
  color: #879C90;
  margin-top: 4px;
  background: #F8FAF9;
  border-radius: 4px;
  padding: 2px;
}
#screen-report .rp-drag-table .rp-drag-ptit {
  font-size: 12px;
  color: #142821;
}
#screen-report .rp-drag-table .rp-drag-arrow {
  color: #C53030;
  font-weight: 800;
  font-size: 11px;
}
#screen-report .rp-drag-table .rp-drag-scores-hint {
  font-size: 10px;
  color: #879C90;
  margin-top: 2px;
}
#screen-report .rp-drag-table .rp-strength-badge {
  display: inline-block;
  font-size: 10.5px;
  font-weight: 800;
  color: #2B6CB0;
  background: #EBF3FE;
  padding: 2px 7px;
  border-radius: 99px;
  white-space: nowrap;
}
#screen-report .rp-drag-table .rp-strength-badge.strong {
  color: #C53030;
  background: #FDE8E8;
}
#screen-report .rp-drag-table .rp-drag-r-sub {
  font-size: 10px;
  color: #879C90;
  margin-top: 2px;
}
#screen-report .rp-drag-table .rp-drag-mech {
  font-size: 11.5px;
  font-weight: 700;
  color: #142821;
  line-height: 1.4;
}
#screen-report .rp-drag-table .rp-drag-act {
  font-size: 10.5px;
  color: #167448;
  font-weight: 700;
  margin-top: 3px;
  line-height: 1.35;
}

/* ═══════════════════════════════════════════════════════════
   6. 问卷与向导卡片规范化（家庭动力诊断/心理测评）：
   输入框、步骤卡、主控按钮 100% 对齐 --r-md 与液态玻璃规范
   ═══════════════════════════════════════════════════════════ */
#screen-family-dynamics .fd-step {
  padding: 14px 16px 8px !important;
  box-sizing: border-box !important;
}
/* 🔴 2026-09-04 P0：家庭动力第 4 题（及末位任意题）在真机上贴着底部固定
   「下一步」导航栏滚动到底，缺呼吸间距 —— 给滚动容器补足底部留白，
   保证任意一题滚到底时都留出与 .fd-nav 的安全间距，不必靠用户精确停手。 */
#screen-family-dynamics .fd-body {
  padding-bottom: 28px !important;
}
#screen-family-dynamics .fd-q textarea,
#screen-family-dynamics .fd-q input {
  border: 1px solid rgba(31, 83, 70, 0.18) !important;
  border-radius: 14px !important;
  background: rgba(255, 255, 255, 0.85) !important;
  padding: 10px 14px !important;
  color: var(--t1) !important;
  box-shadow: inset 0 1px 3px rgba(12, 27, 22, 0.04) !important;
}
#screen-family-dynamics .fd-q textarea:focus,
#screen-family-dynamics .fd-q input:focus {
  outline: none !important;
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 3px rgba(31, 83, 70, 0.12) !important;
}
#screen-family-dynamics .fd-nav {
  padding: 10px 16px 20px !important;
}
#screen-family-dynamics .fd-nav .primary-btn {
  min-height: 48px !important;
  border-radius: 14px !important;
  font-size: 15px !important;
  font-weight: 700 !important;
}

#screen-assessment .as-pane {
  padding: 12px 16px 16px !important;
  box-sizing: border-box !important;
}

/* ═══════════════════════════════════════════════════════════
   charts.js 组件样式（2026-09-04）：雷达 / 九科柱状 / 三点折线 / 环形匹配度。
   ═══════════════════════════════════════════════════════════ */
.zc-empty { font-size: 13px; line-height: 19px; color: var(--t3, rgba(12,27,22,.4)); padding: 6px 0 2px; }

.zc-radar { display: flex; align-items: center; gap: 10px; padding: 6px 0; }
.zc-radar-fig { width: 128px; height: 128px; flex: none; }
.zc-legend { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.zc-lg { display: grid; grid-template-columns: 62px 1fr 18px; align-items: center; gap: 6px; }
.zc-lg-nm { font-size: 11px; color: var(--t2, rgba(12,27,22,.6)); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zc-lg-bar { height: 6px; border-radius: 3px; background: rgba(12,27,22,.10); overflow: hidden; display: block; }
.zc-lg-bar i { display: block; height: 100%; border-radius: 3px; background: var(--accent, #1F5346); }
.zc-lg-bar i.low { background: #8A5100; }
.zc-lg-vl { font-size: 12px; font-weight: 800; color: var(--t1, #0C1B16); text-align: right; }
.zc-lg-vl.low { color: #8A5100; }
.zc-radar-conc { font-size: 12px; line-height: 18px; color: var(--t2, rgba(12,27,22,.6)); margin-top: 6px; }

.zc-bars-svg { width: 100%; height: 76px; display: block; }
.zc-bars-labels { display: flex; justify-content: space-between; padding-top: 4px; }
.zc-bars-labels span { font-size: 10px; color: var(--t2, rgba(12,27,22,.6)); font-weight: 600; flex: 1; text-align: center; }
.zc-bars-legend { display: flex; gap: 12px; padding-top: 8px; font-size: 11px; color: var(--t2, rgba(12,27,22,.6)); font-weight: 500; }
.zc-bars-legend span { display: inline-flex; align-items: center; gap: 4px; }
.zc-bars-legend i { width: 8px; height: 8px; border-radius: 2px; display: inline-block; }

.zc-trend-svg { width: 100%; height: 54px; display: block; }
.zc-trend-labels { display: flex; justify-content: space-between; padding-top: 4px; font-size: 11px; color: var(--t2, rgba(12,27,22,.6)); font-weight: 500; }

.zc-rings { display: flex; justify-content: space-around; padding: 8px 0; }
.zc-ring-item { text-align: center; }
.zc-ring-dial { width: 100%; aspect-ratio: 1; max-width: 62px; margin: 0 auto 6px; position: relative; }
.zc-ring-dial svg { width: 100%; height: 100%; }
.zc-ring-n { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 16px; font-weight: 800; color: var(--t1, #0C1B16); }
/* 空态占位环："待解锁"两字比数字宽，字号收小 + 灰化，跟真数据环一眼区分开。 */
.rp-empty-ring-txt { font-size: 10px; font-weight: 700; color: rgba(12,27,22,.38); }
.rp-empty-rings { padding: 10px 17px 4px; }
.rp-empty-ring .zc-ring-lb { color: rgba(12,27,22,.5); }
.zc-ring-lb { font-size: 12px; font-weight: 700; color: var(--t1, #0C1B16); }
.zc-ring-tag { font-size: 10px; color: var(--t2, rgba(12,27,22,.6)); font-weight: 600; margin-top: 1px; }

/* ⑤ 冲稳保区间图：同一位次轴 + 三色带 + 家长当前位次指针（真实 rank_bands 数据）。 */
/* 2026-09-05 修裁切：.glass 卡片 overflow:hidden，pointer 是 zc-rb-axis 内的
   position:absolute 元素——absolute 定位的包含块是 zc-rb-axis 的 padding box，
   negative top 会直接跑到卡片盒子外面被裁掉，axis 自身的 padding-top 对它不生效
   （padding-top 只推挪 normal-flow 的行，不移动 absolute 子元素的坐标原点）。
   真正生效的留白必须来自 .zc-rangeband 的 padding-top（那是 axis 盒子本身的起点），
   于是把指针的 dot/label 坐标全部改成非负值，靠外层 padding-top 兜住。 */
.zc-rangeband { padding: 30px 8px 6px; }
.zc-rb-axis { position: relative; display: flex; flex-direction: column; gap: 10px; padding-top: 14px; }
.zc-rb-row { display: grid; grid-template-columns: 40px 1fr; gap: 8px; align-items: center; }
.zc-rb-label { font-size: 12px; font-weight: 800; }
.zc-rb-track { position: relative; height: 10px; border-radius: 5px; background: rgba(12,27,22,.06); overflow: hidden; }
.zc-rb-seg { position: absolute; top: 0; bottom: 0; border-radius: 5px; }
.zc-rb-text { grid-column: 1 / -1; font-size: 11px; color: var(--t2, rgba(12,27,22,.6)); font-weight: 500; margin-top: -2px; }
.zc-rb-pointer { position: absolute; top: 0; bottom: 0; width: 0; z-index: 2; pointer-events: none; }
.zc-rb-pointer::before { content: ""; position: absolute; top: 14px; bottom: 0; left: 0; width: 1.5px; border-left: 1.5px dashed rgba(12,27,22,.45); }
.zc-rb-pointer i {
  position: absolute; top: 11px; left: -4px; width: 8px; height: 8px; border-radius: 50%;
  background: var(--t1, #0C1B16); border: 2px solid #fff; box-shadow: 0 1px 3px rgba(12,27,22,.3);
  display: block;
}
.zc-rb-pointer span {
  position: absolute; top: 0; left: 50%; transform: translateX(-50%);
  font-size: 10px; font-weight: 800; color: var(--t1, #0C1B16); white-space: nowrap;
}

/* ═══════════════════════════════════════════════════════════
   W0 公共组件样式（2026-09-04）：评分条 / 三档分级色签 / 行动表格 /
   路径对比表 / 档案卡 / 落款——供 W1/W2 各出面处报告消费，只新增
   选择器，字号沿用既有 --fs-sm(13.5px)/--lh-compact(1.6)/--fs-caption
   体系，不另立字号（09-04 刚修完诊断单上下字号不一致的回归）。
   ═══════════════════════════════════════════════════════════ */
.zc-scorebar { padding: 6px 0; }
.zc-sb-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 4px; }
.zc-sb-label { font-size: var(--fs-sm); line-height: var(--lh-compact); color: var(--t1, #0C1B16); font-weight: 600; overflow-wrap: anywhere; }
.zc-sb-track { height: 8px; border-radius: 4px; background: rgba(12,27,22,.08); overflow: hidden; }
.zc-sb-fill { height: 100%; border-radius: 4px; }
.zc-sb-value { font-size: var(--fs-caption); color: var(--t2, rgba(12,27,22,.6)); font-weight: 700; margin-top: 3px; text-align: right; }
.zc-scorebar.is-empty .zc-sb-value { color: var(--t3, rgba(12,27,22,.4)); font-weight: 600; }

/* 三档分级色签：文本只会是 稳固 / 需巩固 / 需重点干预 三个值之一。 */
[data-grade-tag] {
  display: inline-flex; align-items: center; padding: 2px 9px; border-radius: 999px;
  font-size: var(--fs-caption); font-weight: 700; line-height: 1.5; white-space: nowrap;
}
[data-grade-tag][data-tier="solid"] { background: rgba(31,83,70,.12); color: #1F5346; }
[data-grade-tag][data-tier="mid"]   { background: rgba(138,81,0,.12); color: #8A5100; }
[data-grade-tag][data-tier="weak"]  { background: rgba(163,44,34,.12); color: #a32c22; }

/* 行动表格 + 路径对比表（同族）：390 视口不横向溢出——table-layout:fixed 均分列宽 +
   长文本自动折行，不靠横向滚动条。表头深色、行分隔线（斑马纹）。 */
table[data-action-table],
table[data-path-compare] {
  width: 100%; max-width: 100%; border-collapse: collapse; table-layout: fixed;
  font-size: var(--fs-sm); line-height: var(--lh-compact); color: var(--t1, #0C1B16);
}
table[data-action-table] th,
table[data-path-compare] th {
  background: var(--accent, #1F5346); color: #fff; font-weight: 700;
  text-align: left; padding: 8px; font-size: var(--fs-caption);
  overflow-wrap: anywhere;
}
table[data-action-table] td,
table[data-path-compare] td {
  padding: 8px; border-bottom: 1px solid var(--c-line, #E6E3DC);
  vertical-align: top; word-break: break-word; overflow-wrap: anywhere;
}
table[data-action-table] tbody tr:nth-child(even),
table[data-path-compare] tbody tr:nth-child(even) {
  background: rgba(12,27,22,.03);
}
table[data-action-table] tbody tr:last-child td,
table[data-path-compare] tbody tr:last-child td { border-bottom: none; }

/* 缺陷1（0904 终版人眼预审）：table-layout:fixed 下四列此前均分（各 25%），
   「动作」列文本最长，390 视口只剩约 90px，中文无词边界导致 overflow-wrap:anywhere
   逐字换行成竖条。按内容量重新分配列宽——动作列拿大头，天数段/工具收窄。
   仅对 data-action-table 生效，data-path-compare 列数/内容不同不动。 */
table[data-action-table] th[data-col="range"],
table[data-action-table] td[data-col="range"] { width: 14%; }
table[data-action-table] th[data-col="action"],
table[data-action-table] td[data-col="action"] { width: 42%; }
table[data-action-table] th[data-col="tool"],
table[data-action-table] td[data-col="tool"] { width: 19%; }
table[data-action-table] th[data-col="check"],
table[data-action-table] td[data-col="check"] { width: 25%; }

/* 档案卡：开篇卡，字段名+值两栏瓦片式，与摘要卡 rp-stat-tile 同族玻璃质感。 */
[data-report-profile-card] {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px 16px;
  padding: 16px; border-radius: var(--r-md, 16px); box-sizing: border-box;
  background: rgba(255,255,255,.65); border: 1px solid rgba(255,255,255,.8);
}
[data-report-profile-card] .zc-pc-field { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
[data-report-profile-card] .zc-pc-k { font-size: var(--fs-caption); color: var(--t2, rgba(12,27,22,.6)); font-weight: 600; }
[data-report-profile-card] .zc-pc-v {
  font-size: var(--fs-sm); line-height: var(--lh-compact); color: var(--t1, #0C1B16); font-weight: 700;
  overflow-wrap: anywhere;
}

/* 落款：机构名 + 签发日期 + 合规行三段，右对齐小字。 */
[data-report-footer] { padding: 16px 4px 4px; text-align: right; border-top: 1px solid var(--c-line, #E6E3DC); }
[data-report-org] { display: block; font-size: var(--fs-sm); line-height: var(--lh-compact); font-weight: 700; color: var(--t1, #0C1B16); }
[data-report-issued-at] { display: block; font-size: var(--fs-caption); color: var(--t2, rgba(12,27,22,.6)); margin-top: 2px; }
[data-report-compliance] { display: block; font-size: var(--fs-caption); line-height: var(--lh-compact); color: var(--t3, rgba(12,27,22,.4)); margin-top: 4px; }

/* ═══════════════════════════════════════════════════════════
   报告六段模板契约（2026-09-04）：摘要卡 / 数据仪表区 / 落款区。
   ═══════════════════════════════════════════════════════════ */
#screen-report .rp-summary-line {
  font-size: 15px; line-height: 22px; font-weight: 700; color: var(--t1);
  padding: 15px 17px 4px; margin: 0;
}
#screen-report .rp-summary-tiles { display: flex; gap: 8px; padding: 8px 17px 16px; }
#screen-report .rp-stat-tile {
  flex: 1; text-align: center; padding: 10px 4px; border-radius: var(--r-md);
  background: rgba(255,255,255,.65); border: 1px solid rgba(255,255,255,.8);
  display: block; text-decoration: none; box-sizing: border-box;
}
#screen-report .rp-stat-v { font-size: 18px; font-weight: 800; color: var(--accent); }
#screen-report .rp-stat-l { font-size: 10px; color: var(--t2); font-weight: 600; margin-top: 2px; }
/* 🔴 2026-09-04 大圣实拍：空数据账号摘要卡只剩孤立一格，感知不到本该有三仪表。
   固定三格常驻，取不到数据的格子灰底锁图标+可点文案，真跳转到对应解锁动作屏。 */
#screen-report .rp-stat-tile.is-locked {
  background: rgba(12,27,22,.045); border: 1px dashed rgba(12,27,22,.16); cursor: pointer;
}
#screen-report .rp-stat-tile.is-locked .rp-stat-lock { font-size: 15px; opacity: .55; filter: grayscale(1); }
#screen-report .rp-stat-tile.is-locked .rp-stat-l { color: var(--t3); }
#screen-report .rp-stat-tile.is-locked:active { background: rgba(12,27,22,.08); }
#screen-report .rp-radar-wrap { padding: 0 17px 16px; }
#screen-report .rp-footer-card { padding: 16px 17px !important; }
#screen-report .rp-compliance { font-size: 11px; line-height: 17px; color: var(--t3); margin: 0 0 10px; }
#screen-report .rp-correction-link {
  display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 700;
  color: var(--accent); text-decoration: none; cursor: pointer;
}

/* ═══════════════════════════════════════════════════════════
   2026-09-04 夜 · 大圣走查六处视觉反馈修复
   ①区间图指针坐标列 ②路径判断句间距 ④家庭报告心理测评框架化
   全部只新增选择器；组件语言沿用 W0（色签/评分条/卡片/行动表）
   ═══════════════════════════════════════════════════════════ */

/* ① 指针列：与 .zc-rb-row 的轨道列(40px 标签+8px gap 之后)逐像素同框 */
.zc-rb-pointer-col { position: absolute; top: 0; bottom: 0; left: 48px; right: 0; pointer-events: none; }
.zc-rb-pointer.is-left span { left: 0; transform: none; }
.zc-rb-pointer.is-right span { left: auto; right: 0; transform: none; }

/* ② 路径卡首行数字判断句：与卡内其他块同一水平缩进节奏，不再裸 <p> 贴边 */
.pl-path-judgement {
  margin: 2px 0 12px; padding: 8px 12px;
  font-size: var(--fs-sm); line-height: var(--lh-compact); color: var(--t1, #0C1B16);
  background: rgba(31,83,70,.06); border-left: 3px solid #1F5346; border-radius: 8px;
}

/* ④ 家庭动力报告 · 测评报告框架 */
#fd-report h3 { font-size: 15px; font-weight: 800; margin: 0 0 10px; color: var(--t1, #0C1B16); }
#fd-report > section, #fd-report .fd-dim-scorebars {
  background: #fff; border-radius: 14px; padding: 14px 16px; margin: 0 0 12px;
  box-shadow: 0 1px 4px rgba(12,27,22,.06);
}
/* 结论摘要 = 心理测评报告的「结论框」：沿用路径初筛结论卡的虚线框语言 */
#fd-conclusion { border: 1.5px dashed rgba(138,81,0,.45); background: #FBF7EF; box-shadow: none; }
#fd-conclusion .fd-c-p { margin: 0 0 8px; }
#fd-conclusion .fd-c-p:last-child { margin-bottom: 0; }

/* 会议议程步骤：时间胶囊 + 动作/目标/话术三行，替代四行裸 <p> */
.fd-meeting-step { display: grid; grid-template-columns: 74px 1fr; gap: 8px 10px; margin: 8px 0; align-items: start; }
.fd-meeting-step .fd-ms-time {
  display: inline-flex; justify-content: center; padding: 2px 6px; border-radius: 999px;
  background: rgba(31,83,70,.1); color: #1F5346; font-size: var(--fs-caption); font-weight: 700; white-space: nowrap;
}
.fd-meeting-step .fd-ms-main p { margin: 0 0 3px; }
.fd-meeting-step .fd-ms-action { font-weight: 700; font-size: var(--fs-sm); }
.fd-meeting-step .fd-ms-goal { color: var(--t2, rgba(12,27,22,.6)); font-size: var(--fs-caption); }
.fd-meeting-step .fd-ms-script { font-size: var(--fs-sm); color: var(--t1, #0C1B16); }
.fd-sec .fd-meeting-duration { margin: 6px 0 0; font-size: var(--fs-caption); color: var(--t2, rgba(12,27,22,.6)); }

/* 角色关系图：三格并排 */
#fd-role-graph-report .fd-role-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
#fd-role-graph-report .fd-role-grid .fd-sec { margin: 0; background: rgba(31,83,70,.05); border-radius: 10px; padding: 10px 8px; text-align: center; }
#fd-role-graph-report .fd-role-grid h4 { font-size: var(--fs-caption); color: var(--t2, rgba(12,27,22,.6)); font-weight: 600; }
#fd-role-graph-report .fd-role-grid p { margin: 2px 0 0; font-weight: 800; font-size: var(--fs-sm); }

/* 联合行动计划：2×2 字段格 */
#fd-joint-plan .fd-joint-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
#fd-joint-plan [data-joint-field] { margin: 0; background: rgba(31,83,70,.05); border-radius: 10px; padding: 10px; }
#fd-joint-plan [data-joint-field] h4 { font-size: var(--fs-caption); color: var(--t2, rgba(12,27,22,.6)); font-weight: 600; margin: 0 0 4px; }
#fd-joint-plan [data-joint-field] p { margin: 0; font-size: var(--fs-sm); }

/* 判读卡：左侧色条卡片；待复核沿用黄标 */
.fd-verdict { border-left: 3px solid rgba(31,83,70,.5); background: rgba(31,83,70,.04); border-radius: 8px; padding: 8px 10px; margin: 8px 0; }
.fd-verdict p { margin: 0; font-size: var(--fs-sm); }

/* 干预处方：触发条件小签 + 正文 */
.batch-d-prescription { margin: 0 0 10px; }
.batch-d-prescription h4 { margin: 0 0 6px; }
.fd-rx-trigger {
  display: inline-flex; padding: 2px 9px; border-radius: 999px; margin: 0 0 4px;
  background: rgba(138,81,0,.12); color: #8A5100; font-size: var(--fs-caption); font-weight: 700;
}
.fd-rx-body { margin: 0 0 8px; font-size: var(--fs-sm); }

/* 复测与转介：双信息卡 */
.fd-info-cards { display: grid; grid-template-columns: 1fr; gap: 8px; }
.fd-info-card { background: rgba(31,83,70,.05); border-radius: 10px; padding: 10px 12px; }
.fd-info-card .fd-ic-title { font-weight: 800; font-size: var(--fs-sm); margin: 0 0 4px; }
.fd-info-card p { margin: 0; font-size: var(--fs-sm); color: var(--t1, #0C1B16); }
.fd-info-card.is-warn { background: rgba(163,44,34,.07); }
.fd-info-card.is-warn .fd-ic-title { color: #a32c22; }

/* 本周三件事：动作/时长/验收 标签-值行 */
.fd-weekly-row { display: grid; grid-template-columns: 58px 1fr; gap: 4px 8px; margin: 4px 0; }
.fd-weekly-row .fd-wk-k { font-size: var(--fs-caption); color: var(--t2, rgba(12,27,22,.6)); font-weight: 600; }
.fd-weekly-row .fd-wk-v { font-size: var(--fs-sm); margin: 0; }

/* 冲突维度：评分条行 + 冲突集中签 */
#fd-conflict-dims .fd-conflict-item { margin: 0 0 8px; }
#fd-conflict-dims .fd-conflict-tag {
  display: inline-flex; padding: 2px 9px; border-radius: 999px; margin: 2px 0 0;
  background: rgba(163,44,34,.12); color: #a32c22; font-size: var(--fs-caption); font-weight: 700;
}

/* 空态提示统一成设计过的浅注卡，不再是裸文字 */
#fd-report .batch-d-empty {
  margin: 4px 0; padding: 8px 10px; border-radius: 8px;
  background: rgba(12,27,22,.04); color: var(--t2, rgba(12,27,22,.6));
  font-size: var(--fs-caption); font-style: normal;
}

/* ═══════════════════════════════════════════════════════════
   2026-09-04 深夜 · 对标 archive/报告生成器 骨架移植（大圣「同意」批）
   编号章体系 / 档案头卡容器 / 路径评分徽章 / 暂不建议红条
   全部只新增选择器，绿色视觉锚点不变
   ═══════════════════════════════════════════════════════════ */

/* 编号章：圆形序号 + 头部右侧英文小签 */
.rp-ch-num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%; flex: 0 0 22px;
  background: #1F5346; color: #fff; font-size: 12px; font-weight: 800;
  margin-right: 8px;
}
.rp-sec-head .rp-ch-en, .rp-ch-en {
  margin-left: auto; font-size: 10px; font-weight: 800; letter-spacing: .12em;
  color: rgba(12,27,22,.35); text-transform: uppercase; white-space: nowrap;
}
.rp-sec-head { display: flex; align-items: center; gap: 6px; }

/* 规划屏档案头卡容器 */
.pl-profile-card { padding: 12px 14px; margin: 0 0 10px; }
/* P2-06/D17 同根修复（2026-09-05 大圣实拍「像拼凑的」+ cx P2-06 + uniform 门禁左26/右188）：
   #pl-chips 挂着 .chips 的 display:flex，资料卡作 flex 子项被收缩到内容宽（实测176px），
   右侧空出一截。令其独占整行充满父容器，内部两列字段栅格不动。 */
#pl-chips > .pl-profile-card { flex: 1 1 100%; width: 100%; box-sizing: border-box; }

/* 路径初筛结论：评分徽章放大成「分数+说明」的对标件式徽章 */
.pl-sum-badge {
  display: inline-flex; flex-direction: column; align-items: center; justify-content: center;
  min-width: 58px; padding: 6px 10px; border-radius: 12px;
  font-size: 16px; font-weight: 800; line-height: 1.2;
  background: rgba(31,83,70,.1); color: #1F5346;
}
.pl-sum-badge-alt { background: rgba(138,81,0,.1); color: #8A5100; }
.pl-sum-badge-no {
  background: rgba(163,44,34,.08); color: #a32c22;
  font-size: var(--fs-caption); font-weight: 700; min-width: 0;
}

/* 暂不建议 = 对标件避坑红条：左红条 + 浅红底 */
.pl-sum-sec-no .pl-sum-row {
  border-left: 3px solid rgba(163,44,34,.55); background: rgba(163,44,34,.05);
  border-radius: 8px; padding: 8px 10px;
}

/* L3 待复核压过普通判读卡的绿（.fd-verdict 规则在后面声明会赢，这里用组合选择器夺回） */
.fd-verdict.fd-l3-mark { background: rgba(138, 81, 0, .07); border-left-color: #8A5100; }

/* ═══════════════════════════════════════════════════════════
   2026-09-09 沐桐知学 · 全流程六环闭环统一标准样式与移动端真机满屏自适应
   ═══════════════════════════════════════════════════════════ */

/* 移动端智能自适应：真实手机（≤520px）彻底移除外层黑色假壳与刘海，呈现100%原生体验 */
@media (max-width: 520px) {
  body {
    padding: 0 !important; margin: 0 !important;
    background: linear-gradient(155deg, #EAF4EF 0%, #F4F7F3 52%, #E7F1EC 100%) !important;
  }
  .stage { padding: 0 !important; margin: 0 !important; width: 100% !important; min-height: 100vh !important; }
  .phone {
    width: 100% !important; height: 100dvh !important; max-height: none !important;
    background: transparent !important; border-radius: 0 !important; box-shadow: none !important;
    padding: 0 !important;
  }
  .screen {
    width: 100% !important; height: 100% !important; border-radius: 0 !important;
  }
  .phone .notch { display: none !important; }
}

/* 头部品牌行与在线微标 */
.brand-header-box { padding: calc(14px + var(--sa-top, 0px)) 16px 4px; margin-bottom: 10px; box-sizing: border-box; }
.bh-title-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.bh-title { font-size: 26px; font-weight: 900; color: #0C1B16; letter-spacing: -0.5px; min-width: 0; }
.bh-actions { display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0; }
.bh-pill { background: #D6F1E3; color: #167448; font-size: 11.5px; font-weight: 800; padding: 4px 10px; border-radius: 99px; display: inline-flex; align-items: center; gap: 3px; }
.bh-subtitle { font-size: 12px; color: #435A50; font-weight: 500; }

/* 核心极速诊断大卡片（对齐微信图） */
.diag-card { background: #FFFFFF; border-radius: 20px; border: 1.5px solid #D2E7DC; padding: 18px 16px; box-shadow: 0 10px 28px rgba(22,60,48,0.06); margin: 0 16px 14px; box-sizing: border-box; }
.dc-header { font-size: 16px; font-weight: 900; color: #122820; margin-bottom: 14px; display: flex; align-items: center; gap: 6px; }
.dc-sec-head { font-size: 12.5px; font-weight: 800; color: #1F5346; margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }
.dc-badge { width: 18px; height: 18px; background: #1F5346; color: #fff; border-radius: 50%; font-size: 11px; display: inline-flex; align-items: center; justify-content: center; font-weight: 800; }

/* A 学习成绩横向 3 胶囊 */
.score-pills-row { background: #EAF4EE; border-radius: 12px; padding: 10px; display: flex; gap: 8px; margin-bottom: 14px; box-sizing: border-box; min-width: 0; overflow: hidden; }
.score-pill { background: #FFFFFF; border-radius: 8px; border: 1px solid #D1E4DA; padding: 6px 4px; font-size: 12px; font-weight: 700; color: #16362B; display: flex; align-items: center; justify-content: center; gap: 2px; flex: 1 1 0; min-width: 0; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; }
.score-pill.wide { flex: 1.25; }
.score-pill-input {
  width: 3.6em;
  min-width: 0;
  flex: 1 1 auto;
  border: 0;
  background: transparent;
  font: inherit;
  font-weight: 700;
  color: inherit;
  text-align: center;
  padding: 0;
  outline: none;
  -moz-appearance: textfield;
}
.score-pill-input::placeholder { color: #7a9088; font-weight: 600; }
.score-pill-select {
  min-width: 0;
  flex: 1 1 auto;
  max-width: 100%;
  border: 0;
  background: transparent;
  font: inherit;
  font-weight: 700;
  color: inherit;
  text-align: center;
  padding: 0;
  outline: none;
  cursor: pointer;
  white-space: nowrap;
}
label.score-pill { cursor: text; }
label.score-pill:has(select) { cursor: pointer; }

/* B 当前学习状态点选标签 */
.dc-sec-sub { font-size: 11.5px; color: #4D6359; margin-bottom: 8px; }
.diag-tags-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 14px; }
.d-tag { padding: 8px 6px; border-radius: 99px; font-size: 11px; font-weight: 700; text-align: center; cursor: pointer; transition: all 0.15s; border: 1px solid #D5E5DB; background: #EEF6F1; color: #354B41; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; box-sizing: border-box; }
.d-tag.selected { background: #236C57; color: #FFFFFF; border-color: #1B5746; box-shadow: 0 4px 12px rgba(28,82,66,0.22); }

/* C 一句话识别输入框 */
.voice-box-c { background: #F6FAF7; border-radius: 12px; padding: 10px 12px; border: 1.5px solid #CFE3D8; display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; font-size: 11.5px; color: #6D8479; }
.voice-box-c input, .voice-box-c textarea { border: none; background: transparent; outline: none; width: 100%; font-size: 12px; color: #0C1B16; font-family: inherit; line-height: 1.5; resize: vertical; }

/* 主行动大按钮 */
.btn-submit-main { background: linear-gradient(135deg, #185242 0%, #20735E 100%); color: #fff; border: none; border-radius: 99px; padding: 14px; font-size: 14.5px; font-weight: 800; width: 100%; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px; box-shadow: 0 8px 20px rgba(24,82,66,0.28); }
#btn-submit-fast-screening { white-space: nowrap; flex-shrink: 0; padding-inline: 10px; font-size: 14px; }
.btn-submit-main:active { transform: scale(0.98); }

/* 3 大核心结果承诺卡 */
.outcome-box { background: #E3F1EA; border-radius: 18px; border: 1.5px solid #CEE5DA; padding: 14px 16px; margin: 0 16px 16px; box-sizing: border-box; }
.ob-title { font-size: 13.5px; font-weight: 900; color: #14352C; margin-bottom: 8px; }
.ob-list { list-style: none; display: flex; flex-direction: column; gap: 6px; padding: 0; margin: 0; }
.ob-item { font-size: 11.5px; color: #1C382F; display: flex; gap: 6px; line-height: 1.45; }
.ob-item > span:first-child { font-weight: 800; white-space: nowrap; flex-shrink: 0; color: #14352C; }

/* 环节 2：测算过渡雷达 */
.loading-container { display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; padding: 40px 16px; min-height: 480px; }
.ai-radar { width: 84px; height: 84px; border-radius: 50%; border: 3px solid #E8F5EF; border-top-color: #1F5346; animation: spinRadar 1.1s linear infinite; margin-bottom: 20px; position: relative; }
@keyframes spinRadar { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
.ai-radar-icon { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 30px; }
.radar-step { font-size: 11.5px; color: #435A50; background: #fff; border: 1px solid #D5E5DB; border-radius: 8px; padding: 8px 12px; margin-top: 6px; width: 92%; max-width: 320px; text-align: left; line-height: 1.45; word-break: break-word; box-sizing: border-box; }
.radar-step.active { border-color: #1F5346; background: #E8F5EF; color: #1F5346; font-weight: 700; }

/* 环节 3：方案报告 */
.card-sec {
  background: linear-gradient(145deg, #FFFFFF 0%, #F5FAF7 100%);
  border-radius: 18px;
  padding: 12px 14px;
  margin-bottom: 12px;
  border: 1px solid #D5E6DE;
  box-shadow: 0 8px 22px rgba(18, 56, 46, 0.07), 0 2px 6px rgba(18,56,46,.03);
}
.fast-overview-card {
  margin-bottom: 10px;
}
.fast-overview-card .foc-top-row {
  margin-bottom: 4px;
}
.fast-overview-card .foc-title {
  font-size: 13.5px;
  font-weight: 900;
  color: #122820;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.fast-overview-card .foc-badge {
  font-size: 11px;
  font-weight: 800;
  color: #167448;
  background: #E2F5EC;
  padding: 2px 8px;
  border-radius: 6px;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.fast-overview-card .foc-profile-line {
  font-size: 11.5px;
  color: #55655D;
  line-height: 1.45;
  text-align: left;
}

.banner-score-gap { background: linear-gradient(135deg, #1A5445 0%, #26735F 100%); color: #fff; border-radius: 16px; padding: 12px 14px; margin-bottom: 12px; display: flex; justify-content: space-between; align-items: center; gap: 10px; box-shadow: 0 8px 20px rgba(24,82,66,0.20); }
.bsg-left { flex: 1; min-width: 0; text-align: left; }
.bsg-sub { font-size: 11.5px; opacity: 0.9; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: left; }
.bsg-num { font-size: 18px; font-weight: 900; color: #6CE3BC; margin-top: 2px; white-space: nowrap; letter-spacing: -0.3px; text-align: left; }
.bsg-right { flex-shrink: 0; white-space: nowrap; text-align: right; }
.bsg-badge { background: rgba(255,255,255,0.2); padding: 4px 8px; border-radius: 6px; font-size: 11px; font-weight: 700; white-space: nowrap; display: inline-block; }

.ladder-item { display: flex; align-items: flex-start; gap: 9px; padding: 9px 11px; background: #F6FAF8; border-radius: 10px; font-size: 12px; margin-bottom: 7px; }
.ladder-item .ltag { font-size: 10px; font-weight: 800; padding: 2px 6px; border-radius: 4px; flex-shrink: 0; margin-top: 2px; white-space: nowrap !important; }
.ladder-item .l-body { flex: 1; min-width: 0; }
.ladder-item .l-top-row { display: flex; align-items: center; justify-content: space-between; gap: 6px; flex-wrap: nowrap; }
.ladder-item .l-school { font-size: 13px; font-weight: 800; color: #122820; white-space: nowrap !important; flex-shrink: 0 !important; }
.ladder-item .l-tag-soft { font-size: 10.5px; color: #1F5346; background: #E3F1EA; padding: 1px 6px; border-radius: 4px; white-space: nowrap !important; flex-shrink: 0 !important; }
.ladder-item .l-desc { font-size: 11.5px; color: #55655D; margin-top: 3px; line-height: 1.45; white-space: normal !important; word-break: break-word !important; overflow-wrap: anywhere !important; text-align: left; }

.ltag.rush { background: #FDE8E8; color: #C53030; }
.ltag.safe { background: #E2F5EC; color: #167448; }
.ltag.base { background: #EDF2F7; color: #4A5568; }
.task-subcard { background: #F9FCFA; border-left: 3.5px solid #1F5346; border-radius: 8px; padding: 8px 10px; margin-bottom: 6px; border-top: 1px solid #EBF2EE; border-right: 1px solid #EBF2EE; border-bottom: 1px solid #EBF2EE; }
.upsell-gold-card { background: linear-gradient(135deg, #FFF9F0 0%, #FBF2E3 100%); border: 1.5px solid #EED3A8; border-radius: 14px; padding: 12px; text-align: left; margin-top: 8px; }
.btn-gold-action { background: linear-gradient(135deg, #CF9544 0%, #B27520 100%); color: #fff; border: none; border-radius: 10px; padding: 10px 14px; font-size: 12px; font-weight: 800; width: 100%; cursor: pointer; margin-top: 6px; display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box; text-decoration: none; }
#screen-report .report-upsell-gold { margin: 8px 0 0; display: none !important; }
#screen-report .upsell-gold-top {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  flex-wrap: nowrap;
  gap: 6px;
  min-width: 0;
}
#screen-report .upsell-gold-crown {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 800;
  color: #1F5346;
  background: #E8F5EF;
  border-radius: 99px;
  padding: 2px 7px;
}
#screen-report .upsell-gold-title {
  font-size: 13px;
  font-weight: 900;
  color: #825315;
  min-width: 0;
  white-space: nowrap;
  flex-shrink: 0;
  display: block;
  text-align: center;
  margin-top: 6px;
}
#screen-report .upsell-gold-desc {
  font-size: 11px;
  color: #A2722F;
  line-height: 1.45;
  margin: 6px 0 2px;
  text-align: left;
}
#screen-report .btn-gold-action.rp-upload-cta {
  display: inline-flex !important;
  margin-top: 8px;
  color: #fff;
  background: linear-gradient(135deg, #CF9544 0%, #B27520 100%);
}
#screen-report .btn-gold-action.rp-upload-cta:hover,
#screen-report .btn-gold-action.rp-upload-cta:focus-visible {
  background: linear-gradient(135deg, #B27520 0%, #8F5C16 100%);
  color: #fff;
}

/* ═══════════════════════════════════════════════════════════
   2026-09-09 旗舰级 · 九科差值提分战略与 AI 突破任务卡
   全特效体系：呼吸微光、差值跳跃 HUD 看板、脉冲状态微标、流光按钮
   ═══════════════════════════════════════════════════════════ */
.tifen-strategy-card {
  position: relative;
  background: linear-gradient(145deg, #FFFFFF 0%, #F5FAF7 100%);
  border-radius: 18px;
  padding: 16px;
  border: 1.5px solid #CDE5DA;
  box-shadow: 0 10px 28px -4px rgba(22, 60, 48, 0.09), 0 2px 6px rgba(0,0,0,0.02);
  margin-bottom: 14px;
  overflow: hidden;
}

.tifen-strategy-card::before {
  content: '';
  position: absolute;
  top: -40px;
  right: -40px;
  width: 140px;
  height: 140px;
  background: radial-gradient(circle, rgba(108, 227, 188, 0.28) 0%, rgba(108, 227, 188, 0) 70%);
  pointer-events: none;
}

.tsc-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
  position: relative;
  z-index: 1;
}

.tsc-title {
  font-size: 14px;
  font-weight: 900;
  color: #0E2921;
  display: flex;
  align-items: center;
  gap: 6px;
  letter-spacing: -0.2px;
}

.tsc-focus-pill {
  background: linear-gradient(135deg, #FFF1F0 0%, #FFE4E1 100%);
  border: 1px solid #FFCCC7;
  color: #CF1322;
  font-size: 11px;
  font-weight: 800;
  padding: 3px 10px;
  border-radius: 99px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  box-shadow: 0 2px 6px rgba(207, 19, 34, 0.08);
}

.tsc-focus-pill .dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #F5222D;
  box-shadow: 0 0 6px #F5222D;
  animation: pulseDot 1.6s infinite ease-in-out;
}

@keyframes pulseDot {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.35); opacity: 0.55; }
}

.tsc-score-hud {
  background: #FFFFFF;
  border-radius: 12px;
  padding: 10px 14px;
  border: 1px solid #DDF0E6;
  margin-bottom: 10px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  box-shadow: inset 0 1px 3px rgba(0,0,0,0.02);
}

.tsc-hud-item {
  display: flex;
  flex-direction: column;
}

.tsc-hud-label {
  font-size: 10.5px;
  color: #6C8278;
  font-weight: 600;
}

.tsc-hud-val {
  font-size: 17px;
  font-weight: 900;
  color: #123328;
  line-height: 1.2;
}

.tsc-hud-val.target {
  color: #0E7049;
}

.tsc-hud-arrow {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  padding: 0 8px;
}

.tsc-hud-gain {
  background: linear-gradient(135deg, #E6F8F0 0%, #D5F3E4 100%);
  color: #0B7A4B;
  font-size: 11px;
  font-weight: 900;
  padding: 2px 8px;
  border-radius: 99px;
  border: 1px solid #B7E7CE;
  white-space: nowrap !important;
}

.tsc-hud-bar {
  width: 100%;
  height: 4px;
  background: #E8F2EC;
  border-radius: 99px;
  margin-top: 5px;
  position: relative;
  overflow: hidden;
}

.tsc-hud-bar-fill {
  width: 78%;
  height: 100%;
  background: linear-gradient(90deg, #1C5F4B 0%, #52D8A8 100%);
  border-radius: 99px;
}

.tsc-desc {
  font-size: 12px;
  color: #3C5248;
  line-height: 1.5;
  margin-bottom: 12px;
}

.tsc-desc b {
  color: #0F2D23;
}

.tsc-task-card {
  background: linear-gradient(135deg, #F6FBF8 0%, #EEF7F2 100%);
  border: 1.5px solid #CBE6D9;
  border-radius: 14px;
  padding: 12px 14px;
  position: relative;
}

.tsc-task-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}

.tsc-task-no {
  font-size: 12px;
  font-weight: 800;
  color: #174C3E;
  display: flex;
  align-items: center;
  gap: 5px;
  white-space: nowrap !important;
}

.tsc-time-badge {
  background: #FFFFFF;
  color: #167448;
  border: 1px solid #CFE6DA;
  padding: 2px 8px;
  border-radius: 99px;
  font-size: 10.5px;
  font-weight: 800;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  box-shadow: 0 1px 3px rgba(0,0,0,0.03);
}

.tsc-task-title {
  font-size: 13.5px;
  font-weight: 800;
  color: #0E2921;
  margin-bottom: 3px;
}

.tsc-task-sub {
  font-size: 11px;
  color: #5C7368;
  margin-bottom: 10px;
}

.btn-launch-glow {
  background: linear-gradient(135deg, #1A5445 0%, #113C31 100%);
  color: #FFFFFF;
  border: none;
  border-radius: 99px;
  padding: 12px 16px;
  font-size: 13px;
  font-weight: 800;
  width: 100%;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  box-shadow: 0 6px 18px rgba(22, 70, 57, 0.28), inset 0 1px 0 rgba(255,255,255,0.22);
  transition: all 0.2s ease;
  position: relative;
  overflow: hidden;
  white-space: nowrap !important;
}

.btn-launch-glow::after {
  content: '';
  position: absolute;
  top: -50%;
  left: -50%;
  width: 200%;
  height: 200%;
  background: linear-gradient(60deg, transparent, rgba(255,255,255,0.18), transparent);
  transform: rotate(30deg);
  animation: btnShimmer 3.5s infinite;
}

@keyframes btnShimmer {
  0% { transform: translateX(-100%) rotate(30deg); }
  30%, 100% { transform: translateX(100%) rotate(30deg); }
}

.btn-launch-glow:active {
  transform: scale(0.98);
}


/* 环节 5：25项大表与试卷 */
.dossier-box { display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px; }
.db-item { background: #fff; border-radius: 12px; border: 1px solid #DCE9E2; overflow: hidden; }
.db-head { padding: 10px 12px; font-size: 12.5px; font-weight: 800; color: #142821; display: flex; justify-content: space-between; background: #FAFBFB; cursor: pointer; }
.db-body { padding: 10px 12px; font-size: 11.5px; color: #5C6E66; border-top: 1px solid #F0F4F2; display: flex; flex-direction: column; gap: 5px; }

/* ═══════════════════════════════════════════════════════════
   2026-09-09 全局排版与视觉一致性全局规范 (Global Typography & Layout Defenses)
   大圣明令：全站永久生效，禁止出现单字孤行、专有名词断行与伪刘海遮挡
   ═══════════════════════════════════════════════════════════ */

/* 1. 绝对隐藏伪刘海，保障全设备/桌面壳标题栏完整可见 */
.notch,
.phone .notch,
body.shell-phone .phone .notch {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
  height: 0 !important;
}

/* 2. 全局微标/标签/胶囊：一律禁止被 Flex 容器压缩或拆字折行 */
.badge, .tag, .ltag, .bsg-badge, .tier-badge, .bh-pill, .sg-chip, .s-chip {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  box-sizing: border-box;
}

/* 3. 中文专有名词与核心数据防断行工具类 */
.u-nowrap,
.entity-name,
.entity-school,
.stat-value,
.metric-num,
.chip,
.badge,
.tag,
.ltag,
.bsg-badge {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}

.u-no-shrink {
  flex-shrink: 0 !important;
}

.u-ellipsis {
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}

.u-break-word {
  word-break: break-word !important;
  overflow-wrap: break-word !important;
}

/* 4. 卡片头部信息行规范：主体与标签单行分布，禁止混排挤压 */
.card-top-row,
.l-top-row,
.entity-top-row {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 6px !important;
  flex-wrap: nowrap !important;
  min-width: 0 !important;
}

/* 5. 导航栏标题统一防折行规范 */
.navbar .title {
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  max-width: 240px;
}

/* ==========================================================================
   2026-09-09 提分智能体、学员档案与方案报告高保真重构 (对齐效果图与大圣明令)
   ========================================================================== */

/* 1. 方案报告：隐藏冗余空态占位灰卡与旧版生成引导，终结待解锁重复提示 */
#screen-report .rp-plan-empty-card,
#screen-report .rp-path-compare-empty,
#screen-report .rp-empty-rings,
#screen-report #rp-comprehensive-card {
  display: none !important;
}

/* 2. 提分智能体：隐藏旧版打卡记录流水账，由本周突破与押题做题卡接管。
   CR-ACCEPTFIX-A A-013：有今天具体任务（已选科目 + 确认卡点）的打卡卡片 .is-actionable 才对家长显示，否则每日打卡整个功能家长走不到。 */
#screen-tifen .tf-progress-card:not(.is-actionable) {
  display: none !important;
}

/* 3. 我的档案：隐藏旧版三次成绩，由25项全量学情大表接管 */
#screen-mine #legacy-mine-container {
  display: none !important;
}

/* 提分突破目标看板 (HUD) */
.tifen-hud-banner {
  margin: 6px 14px 10px;
  background: linear-gradient(135deg, rgba(232, 245, 239, 0.95), rgba(244, 249, 246, 0.95));
  border: 1px solid rgba(22, 116, 72, 0.25);
  border-radius: 14px;
  padding: 10px 14px;
  box-shadow: 0 4px 16px rgba(12, 27, 22, 0.05);
  flex-shrink: 0;
  box-sizing: border-box;
}
.thb-header {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex-wrap: nowrap !important;
  margin-bottom: 6px;
}
.thb-tag {
  font-size: 11.5px;
  font-weight: 700;
  color: #1F5346;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.thb-badge {
  font-size: 11px;
  font-weight: 700;
  color: #167448;
  background: #D5ECE1;
  padding: 2px 8px;
  border-radius: 999px;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.thb-title {
  font-size: 14px;
  font-weight: 700;
  color: #0C1B16;
  margin-bottom: 6px;
  line-height: 1.35;
}
.thb-meta {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: nowrap;
  overflow-x: auto;
  scrollbar-width: none;
}
.thb-meta::-webkit-scrollbar {
  display: none;
}
.thb-pill {
  font-size: 11px;
  color: #3A4A43;
  background: rgba(255, 255, 255, 0.7);
  padding: 2px 7px;
  border-radius: 6px;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}

#practice-quiz-card:not(.is-open),
#practice-quiz-card[hidden] {
  display: none !important;
}
#screen-tifen .tifen-hud-banner:not(.is-open) {
  display: none !important;
}
.chat-voice-btn,
#chat-voice-btn {
  display: none !important;
  width: 0 !important;
  height: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: none !important;
  overflow: hidden !important;
}
.kb-cite-card {
  margin-top: 10px;
  padding: 10px 12px;
  border-radius: 12px;
  border: 1px solid #D5E6DE;
  background: #F2F8F4;
}
.kb-cite-head { gap: 8px; flex-wrap: nowrap; }
.kb-cite-head-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.kb-cite-summary { margin-top: 5px; font-size: 12px; line-height: 1.4; color: #5F746B; text-align: left; }
.kb-cite-body { margin-top: 8px; }
.kb-cite-empty {
  font-size: 12px;
  color: #5F746B;
  line-height: 1.5;
}
.kb-cite-item {
  margin-top: 8px;
  padding-top: 7px;
  border-top: 1px solid #D5E6DE;
  text-align: left;
}
.kb-cite-item:first-child { margin-top: 0; }
.kb-cite-item > .card-top-row {
  align-items: flex-start !important;
  flex-wrap: nowrap !important;
  gap: 8px !important;
}
.kb-cite-title {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  flex-shrink: 1 !important;
  white-space: normal !important;
  overflow-wrap: anywhere !important;
  word-break: break-word !important;
  font-size: 13px !important;
  font-weight: 700 !important;
  color: #122820 !important;
  line-height: 1.4 !important;
  text-align: left !important;
}
.kb-cite-item > .card-top-row > .badge {
  flex: 0 0 auto !important;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  margin-top: 2px !important;
}
.kb-cite-item .card-desc {
  margin-top: 4px;
  font-size: 12px;
  line-height: 1.45;
  color: var(--c-ink-2, #5F746B);
  text-align: left;
  white-space: normal;
  word-break: break-word;
  overflow-wrap: anywhere;
}
.kb-cite-degraded {
  display: none !important;
}

/* 押题精练做题卡 */
.practice-quiz-card {
  margin: 0 14px 10px;
  background: rgba(255, 255, 255, 0.94);
  border: 1px solid rgba(255, 255, 255, 0.85);
  border-radius: 14px;
  padding: 12px 14px;
  box-shadow: 0 6px 20px rgba(12, 27, 22, 0.06);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  flex-shrink: 0;
  box-sizing: border-box;
}
.pqc-header {
  display: flex !important;
  flex-direction: column;
  align-items: flex-start !important;
  justify-content: flex-start !important;
  flex-wrap: nowrap !important;
  gap: 4px;
  margin-bottom: 8px;
}
.pqc-badge {
  font-size: 11.5px;
  font-weight: 700;
  color: #fff;
  background: #1F5346;
  padding: 2px 8px;
  border-radius: 6px;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.pqc-sub {
  font-size: 11px;
  color: #5F746B;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.pqc-stem {
  font-size: 12.5px;
  color: #1A2E26;
  line-height: 1.65;
  margin-bottom: 10px;
  overflow-wrap: anywhere;
}
.pqc-stem sub,
.quiz-opt-btn sub,
.quiz-feedback-box sub,
#feynman-hint-box sub {
  font-size: 0.72em;
  vertical-align: sub;
  line-height: 0;
}
.pqc-options {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-bottom: 8px;
}
.quiz-opt-btn {
  background: #F4F8F6;
  border: 1px solid #D5E4DC;
  border-radius: 8px;
  padding: 8px 6px;
  font-size: 12px;
  font-weight: 600;
  color: #1F5346;
  text-align: center;
  cursor: pointer;
  transition: all 0.15s ease;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  box-sizing: border-box;
}
.quiz-opt-btn:hover,
.quiz-opt-btn:active {
  background: #D5ECE1;
  border-color: #167448;
}
.quiz-feedback-box {
  background: #E8F5EF;
  border-left: 3px solid #167448;
  border-radius: 6px;
  padding: 8px 10px;
  margin-bottom: 8px;
  font-size: 11.5px;
  color: #144637;
  line-height: 1.5;
}
.pqc-actions {
  display: flex;
  gap: 8px;
  margin-top: 4px;
}
.quiz-hint-btn {
  flex: 1;
  background: #FFF9F0;
  border: 1px solid #EED8B5;
  border-radius: 8px;
  padding: 6px 8px;
  font-size: 11.5px;
  font-weight: 600;
  color: #B27520;
  text-align: center;
  cursor: pointer;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  box-sizing: border-box;
}
.hint-popup-box {
  margin-top: 8px;
  background: #FFFDF9;
  border: 1px dashed #E2C799;
  border-radius: 8px;
  padding: 10px;
  font-size: 11.5px;
  color: #5C4318;
  line-height: 1.55;
}

/* 25项学员档案大表样式 */
.dossier-card-wrap {
  margin-bottom: 16px;
}
.dossier-box {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.db-item {
  background: #ffffff;
  border: 1px solid #DCE9E2;
  border-radius: 14px;
  box-shadow: 0 4px 16px rgba(18, 40, 32, 0.05);
  overflow: hidden;
  box-sizing: border-box;
}
.db-head {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex-wrap: nowrap !important;
  background: #F8FAF9;
  padding: 10px 14px;
  font-size: 12.5px;
  font-weight: 700;
  color: #1F5346;
  border-bottom: 1px solid #EEF4F1;
}
.db-head span {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.db-body {
  padding: 8px 12px;
  font-size: 11.5px;
  color: #3A4A43;
  line-height: 1.55;
}
.db-tag-nowrap,
.db-nowrap,
.tag-nowrap,
.badge-nowrap {
  display: inline-block;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.db-body .db-tag-nowrap {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}

/* 环⑤建档真表单：双行字段 + 状态微标防断词 */
.dossier-page {
  padding: 14px 16px 24px;
}
.dossier-intro {
  background: none;
  border-radius: 0;
  padding: 0 2px 6px;
  margin-bottom: 8px;
  font-size: 10.5px;
  color: var(--text-muted, #7A8E85);
  line-height: 1.45;
}
.db-head .db-title {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap !important;
  flex: 1 1 auto;
  flex-shrink: 1 !important;
}
.db-head .db-status {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  font-weight: 700;
}
.db-status.is-empty { color: #8A9A93; }
.db-status.is-filled { color: #167448; }
.db-head-paper { background: #EBF5F0; color: #167448; }
.df-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.df-cap {
  font-size: 11px;
  font-weight: 700;
  color: #5C6E66;
  white-space: nowrap;
  flex-shrink: 0;
}
.df-field input:not([type="checkbox"]):not([type="radio"]),
.df-field select,
.df-field textarea {
  width: 100%;
  box-sizing: border-box;
  min-height: 36px;
  height: 36px;
  border: 1px solid #DCE9E2;
  border-radius: 8px;
  padding: 8px 10px;
  font-size: 13px;
  color: #142821;
  background: #fff;
}
.df-field input::placeholder {
  color: #8A9A93;
}
.df-row2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}
.df-choice {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.df-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid #DCE9E2;
  border-radius: 99px;
  padding: 6px 14px;
  font-size: 13px;
  color: #184C3F;
  background: #fff;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  cursor: pointer;
  user-select: none;
  box-sizing: border-box;
}
.df-chip input,
.df-field input[type="checkbox"],
.df-field input[type="radio"] {
  width: 15px !important;
  height: 15px !important;
  min-height: 15px !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  background: transparent !important;
  flex-shrink: 0 !important;
  accent-color: #167448;
  cursor: pointer;
}
.df-chip:has(input:checked) {
  border-color: #167448;
  background: #E8F5EF;
  color: #167448;
  font-weight: 700;
}
.dossier-next-step-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 42px;
  margin-top: 14px;
  background: #E8F5EF;
  color: #167448;
  border: 1px solid #B8E0CF;
  border-radius: 10px;
  font-size: 13.5px;
  font-weight: 700;
  cursor: pointer;
  transition: all .2s ease;
  user-select: none;
  box-sizing: border-box;
}
.dossier-next-step-btn:active {
  background: #D4EDE1;
  transform: scale(0.99);
}
#dossier-gate-msg {
  background: #FDF2F2;
  border: 1px solid #F8D7DA;
  color: #C53030;
  border-radius: 10px;
  padding: 10px 14px;
  font-size: 13px;
  line-height: 1.5;
  margin: 12px 0 8px;
}
.df-hint {
  margin: 0 0 8px;
  font-size: 11.5px;
  color: #5C6E66;
  line-height: 1.5;
}
.df-file-title {
  font-size: 13px;
  font-weight: 700;
  color: #1F5346;
  display: flex;
  align-items: center;
  justify-content: center;
}
.dossier-echo-row {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.dossier-echo-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: nowrap;
  gap: 6px;
  min-width: 0;
}
.dossier-echo-label {
  font-size: 11px;
  color: #8A9A93;
  white-space: nowrap;
  flex-shrink: 0;
}
.dossier-echo-value {
  font-size: 12px;
  color: #142821;
  word-break: break-word;
}
.dossier-echo-value.is-empty {
  color: #8A9A93;
}
#screen-dossier .db-head { cursor: pointer; }
#screen-dossier .db-item.is-collapsed .db-body { display: none; }
#screen-dossier .db-status::after {
  content: " ▼";
  font-size: 10px;
  font-weight: 700;
}
#screen-dossier .db-item.is-open .db-status::after { content: " ▲"; }

/* T-UI-2：九科成绩单三列 Grid（仅 #screen-dossier；获奖行由 T-UI-3 覆盖） */
#screen-dossier .exam-score-row-head {
  display: grid;
  grid-template-columns: 52px 1fr 1fr;
  gap: 8px;
  align-items: center;
  padding: 0 4px 6px;
  font-size: 12px;
  font-weight: 700;
  color: #5C6E66;
  text-align: center;
}
#screen-dossier .exam-score-row {
  display: grid;
  grid-template-columns: 52px 1fr 1fr;
  gap: 8px;
  align-items: center;
  margin-bottom: 8px;
  box-sizing: border-box;
}
#screen-dossier .exam-score-row .exam-field-cap {
  font-size: 13px;
  font-weight: 600;
  color: #142821;
  text-align: center;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
#screen-dossier .exam-score-row .exam-field {
  width: 100%;
  height: 36px;
  min-height: 36px;
  box-sizing: border-box;
  border: 1px solid #DCE9E2;
  border-radius: 8px;
  padding: 0 8px;
  font-size: 13px;
  color: #142821;
  background: #fff;
  text-align: center;
}
#screen-dossier .exam-score-row .exam-field:focus {
  border-color: #167448;
  background: #FAFCFA;
  outline: none;
}
#screen-dossier .exam-score-row .exam-field.exam-field-full {
  background: #F8FAF9;
  color: #5C6E66;
}
#screen-dossier .exam-score-row .exam-field.exam-field-full:focus {
  background: #fff;
  color: #142821;
  border-color: #167448;
}

/* 全局消除数字输入框原生上下微调小箭头 */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none !important;
  margin: 0 !important;
}
input[type="number"] {
  -moz-appearance: textfield !important;
}

/* T-UI-3：原件差异提示框内边距 + Section 4 获奖经历卡 */
#screen-dossier .glass {
  padding: 12px;
  margin: 12px 0;
  border-radius: 14px;
}
#screen-dossier .glass .df-hint {
  font-size: 12px;
  font-weight: 600;
  color: #1F5346;
  margin-bottom: 8px;
}
#screen-dossier [data-award-row] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 10px;
  background: #F8FAFA;
  border: 1px solid #E3ECE8;
  border-radius: 10px;
  margin-bottom: 10px;
}
#screen-dossier [data-award-row] .exam-field {
  width: 100%;
  height: 36px;
  min-height: 36px;
  box-sizing: border-box;
  border: 1px solid #DCE9E2;
  border-radius: 8px;
  padding: 0 10px;
  font-size: 13px;
  background: #fff;
}
.mine-dossier-entry-card {
  background: #fff;
  border: 1px solid #DCE9E2;
  border-radius: 12px;
  padding: 12px;
  margin-bottom: 16px;
}
.mine-dossier-entry-card .badge {
  background: #EEF4F1;
  color: #5C6E66;
  border-radius: 99px;
  padding: 2px 8px;
  font-size: 11px;
  font-weight: 500;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.mine-dossier-entry-card .badge.is-filled {
  background: #E8F5EF;
  color: #167448;
  font-weight: 600;
}
.mine-profile-detail-card {
  background: #fff;
  border: 1px solid #DCE9E2;
  border-radius: 14px;
  padding: 14px 16px;
  margin-bottom: 12px;
  box-shadow: 0 2px 8px rgba(12,27,22,0.03);
}
.mine-profile-detail-card .u-nowrap {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
.mine-nine-matrix {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
}
@media (max-width: 360px) {
  .mine-nine-matrix {
    grid-template-columns: repeat(3, 1fr);
    gap: 4px;
  }
}

#dossier-paper-list .form-hint,
#dossier-paper-list .dossier-paper-item {
  font-size: 11.5px;
  color: #3A4A43;
  word-break: break-word;
}

/* Stage 5 学情建档顶栏与细节规范（对齐客户 0909 效果图） */
#screen-dossier .navbar.dossier-navbar {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex-wrap: nowrap !important;
  padding: 10px 14px;
  background: #ffffff;
  border-bottom: 1px solid #EDF4F0;
  gap: 8px;
}
#screen-dossier .navbar.dossier-navbar .icon-btn {
  font-size: 18px;
  color: #167448;
  cursor: pointer;
  padding: 2px 6px;
  border-radius: 6px;
  flex-shrink: 0 !important;
  white-space: nowrap !important;
}
#screen-dossier .dossier-nav-title-wrap {
  flex: 1 1 auto;
  text-align: center;
  min-width: 0;
  overflow: hidden;
}
#screen-dossier .dossier-nav-title {
  font-size: 13.5px;
  font-weight: 700;
  color: #142821;
  letter-spacing: -0.2px;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}
#screen-dossier .dossier-badge-std {
  font-size: 10px;
  background: #D6F1E3;
  color: #167448;
  padding: 2px 7px;
  border-radius: 4px;
  font-weight: 700;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}

/* Stage 5 试卷上传虚线打卡框（2px dashed #B8D5C8 + 浅绿底 + 📷） */
#screen-dossier #dossier-file-dropzone {
  display: block;
  border: 2px dashed #B8D5C8 !important;
  border-radius: 8px !important;
  padding: 14px 12px !important;
  text-align: center !important;
  background: #F6FAF8 !important;
  cursor: pointer;
  transition: all 0.2s ease;
  user-select: none;
}
#screen-dossier #dossier-file-dropzone:hover {
  background: #EBF5F0 !important;
  border-color: #167448 !important;
  transform: translateY(-1px);
}
#screen-dossier .df-file-icon {
  font-size: 22px;
  line-height: 1;
  margin-bottom: 4px;
}
#screen-dossier .df-file-title {
  font-size: 11.5px;
  font-weight: 700;
  color: var(--primary, #167448);
}
#screen-dossier #dossier-file-status-text {
  font-size: 10px;
  color: var(--text-muted, #7A8E85);
  margin-top: 3px;
  line-height: 1.4;
}

.plan-gate-line {
  margin: 8px 0 10px;
  font-size: 12px;
  font-weight: 700;
  color: #3A4A43;
  line-height: 1.45;
  text-align: left;
}
.plan-gate-row1 { display: flex; align-items: center; gap: 6px; flex-wrap: nowrap; }
.plan-gate-row1 .gate-chip { white-space: nowrap; flex-shrink: 0; background: rgba(31, 83, 70, 0.08); padding: 2px 8px; border-radius: 4px; font-size: 11.5px; color: #1F5346; }
.plan-gate-row2 { margin-top: 4px; font-size: 12px; color: #5B6B64; white-space: nowrap; text-align: left; }
.plan-gate-line[data-gate-state="ready"] .plan-gate-row2 { color: #167448; font-weight: 700; }
.plan-gate-line[data-gate-state="empty"] .plan-gate-row2 { color: #5B6B64; }
.plan-gate-line[data-gate-state="ready"] { color: #167448; }
.plan-gate-line[data-gate-state="empty"] { color: #5B6B64; }
.mine-archive-link {
  white-space: nowrap;
  flex-shrink: 0;
  font-size: 12px;
  font-weight: 800;
  color: #167448;
  background: none;
  border: 0;
  padding: 4px 0;
  cursor: pointer;
}
.nav-right-cluster {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}
#screen-report .navbar > .nav-right-cluster {
  grid-column: 2;
  justify-self: end;
}
.family-tabbar .tab {
  white-space: nowrap;
  flex-shrink: 0;
}
/* 教练快捷语句是并列操作项，窄屏允许整句自然换行，避免横向滚动条把卡片撑破。 */
#screen-tifen .coach-face-chips {
  flex-wrap: wrap !important;
  overflow-x: visible !important;
}
#screen-tifen .coach-face-chip {
  min-width: 0;
  max-width: 100%;
  white-space: normal !important;
  overflow-wrap: anywhere;
}
@media (max-width: 390px) {
  .family-tabbar .tab { font-size: 11px; padding: 0 1px; }
  #screen-screening .sop-guide { padding-inline: 10px; font-size: 12.5px; }
}
@media (max-width: 360px) {
  .df-row2 { grid-template-columns: 1fr; }
  #screen-report .upsell-gold-title { font-size: 12px; }
  .bh-title { font-size: 22px; }
  #btn-submit-fast-screening { padding-inline: 8px; font-size: 13px; }
  #screen-dossier .navbar.dossier-navbar { padding: 8px 10px; gap: 4px; }
  #screen-dossier .dossier-nav-title { font-size: 12px; }
  #screen-dossier .dossier-badge-std { font-size: 9.5px; padding: 2px 5px; }
  #screen-dossier .btn-submit-main { font-size: 12px; padding: 12px 10px; }
}

/* T2 · 入口状态机（2026-09-17）
   S7 之前底栏一处不露。底栏原本占着 64px 安全区，藏了以后内容会贴到屏幕最下沿，
   所以同时把这份 padding 退掉——否则 360 屏上最后一行按钮会被 home indicator 压住。 */
body.ob-no-tabbar .app-screen { padding-bottom: 24px; }
body.ob-no-tabbar .tabbar { display: none !important; }

/* 保存失败必须让家长看见：静默失败比报错更糟——他以为填上了，回头一看全没了。 */
.ob-save-error {
  margin: 8px 12px; padding: 10px 12px;
  background: #fff3f2; border: 1px solid #ffccc7; border-radius: 8px;
  color: #a8071a; font-size: 13px; line-height: 1.5;
  word-break: break-word;           /* 360 屏不许被长错误码顶出横滚 */
}

#accept-jump{
  position:fixed;
  left:0;
  top:0;
  z-index:2147483646;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  width:12px;
  max-width:12px;
  overflow:hidden;
  pointer-events:auto;
}
#accept-jump button{
  display:block;
  box-sizing:border-box;
  width:12px;
  height:12px;
  max-width:12px;
  max-height:12px;
  min-width:0;
  min-height:0;
  margin:0;
  padding:0;
  border:0;
  overflow:hidden;
  background:transparent;
  color:transparent;
  font-size:0;
  line-height:0;
  opacity:0.02;
  white-space:nowrap;
  flex-shrink:0;
  pointer-events:auto;
  position:relative;
  z-index:1;
}

/* 高保真三阶研报分段导航矩阵（2x2网格自适应，全视口平铺无溢出无截断） */
.suite-nav-bar {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 8px !important;
  margin-bottom: 14px !important;
  max-width: 100%;
}
#suite-cards-host,
.suite-stage-section,
#mt-report-suite-container {
  max-width: 100%;
  min-width: 0;
}
.suite-tab-btn {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 10px 8px !important;
  border-radius: 10px !important;
  border: 1.5px solid #E2E8F0 !important;
  background: #fff !important;
  color: #475569 !important;
  font-size: 11.5px !important;
  font-weight: 600 !important;
  cursor: pointer !important;
  text-align: center !important;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  line-height: 1.35 !important;
  min-width: 0 !important;
  transition: all 0.2s ease !important;
  user-select: none !important;
  box-shadow: none !important;
}
.suite-tab-btn:hover {
  border-color: #CBD5E1 !important;
  background: #F8FAFC !important;
}
.suite-tab-btn.active {
  border-color: #1C2740 !important;
  background: #1C2740 !important;
  color: #fff !important;
  font-weight: 700 !important;
  box-shadow: 0 2px 6px rgba(28, 39, 64, 0.15) !important;
}



/* =========================================================
   沐桐知学 · 官方设计令牌与高保真研报组件 (PDF 1:1 移植)
   ========================================================= */

/* =========================================================
   沐桐知学 · 官方设计令牌（全量融入 CC 架构）
   ========================================================= */
:root {
  --ink: #1C2740;
  --ink-2: #243354;
  --ink-3: #4A5A86;
  --ink-soft: #E8ECF4;
  --gold: #8C6214;
  --gold-2: #B8862B;
  --gold-soft: #D9C08A;
  --gold-bg: #F6EEDC;
  --green: #2E7D57;
  --green-bg: #E5F2EA;
  --amber: #A5650F;
  --amber-bg: #FBEFD9;
  --red: #A63D2F;
  --red-bg: #F7E4E0;
  --blue: #1D4ED8;
  --blue-bg: #EFF6FF;
  --text: #2B2F38;
  --muted: #5B6170;
  --line: #E4E1D8;
  --line-2: #D8D4C8;
  --paper: #FBFAF6;
  --card: #FFFFFF;
  --grey-bg: #F1EFEA;
  --serif: 'Noto Serif SC', 'Songti SC', 'STSong', serif;
  --sans: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
  --r-lg: 12px;
  --r-md: 8px;
  --r-sm: 6px;
}

* { box-sizing: border-box; }
html, body {
  margin: 0; padding: 0;
  background: var(--paper);
  color: var(--text);
  font-family: var(--sans);
  font-size: 13.5px;
  line-height: 1.55;
  overflow-x: hidden;
  width: 100%;
  -webkit-font-smoothing: antialiased;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}

.u-nowrap { white-space: nowrap !important; flex-shrink: 0 !important; }
.notch { display: none !important; }

.wrap {
  max-width: 880px;
  margin: 0 auto;
  padding: 16px 14px 40px;
}

/* 顶部 Header */
.cover-hero {
  background: linear-gradient(135deg, #1C2740 0%, #243354 100%);
  color: #fff;
  padding: 22px 24px;
  border-radius: var(--r-lg);
  margin-bottom: 24px;
  box-shadow: 0 4px 16px rgba(28,39,64,.12);
}
.hero-top-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 12px;
  flex-wrap: nowrap;
}
.hero-kicker {
  font-size: 11.5px;
  letter-spacing: 2px;
  color: var(--gold-soft);
  font-weight: 700;
  text-transform: uppercase;
}
.hero-chip {
  font-size: 11px;
  background: rgba(255,255,255,.14);
  color: #D5DAE5;
  padding: 3px 10px;
  border-radius: 999px;
  font-weight: 600;
}
.hero-main-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
}
.hero-title {
  font-family: var(--serif);
  font-size: 25px;
  font-weight: 700;
  color: #FFFFFF;
  margin: 0 0 10px;
  letter-spacing: .5px;
  line-height: 1.25;
}
.hero-meta-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.pill {
  display: inline-flex;
  align-items: center;
  font-size: 11.5px;
  padding: 3px 9px;
  border-radius: 999px;
  font-weight: 600;
}
.pill.gold { background: var(--gold-bg); color: var(--gold); }
.pill.ink-light { background: rgba(255,255,255,.16); color: #fff; }
.hero-curve-box {
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.15);
  border-radius: var(--r-md);
  padding: 12px 18px;
  text-align: right;
  flex-shrink: 0;
}
.curve-lbl {
  font-size: 11px;
  color: #A9B5CC;
  margin-bottom: 3px;
  display: block;
}
.curve-scores {
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 700;
  color: #FFFFFF;
  margin-bottom: 4px;
}
.curve-badge {
  font-size: 11px;
  background: var(--green);
  color: #fff;
  padding: 2px 7px;
  border-radius: 4px;
  font-weight: 600;
}

/* 章节头部 */
.chapter {
  margin-bottom: 30px;
}
.mt-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 2px solid var(--ink);
  padding-bottom: 8px;
  margin-bottom: 16px;
  flex-wrap: nowrap;
}
.mt-head .l {
  display: flex;
  align-items: baseline;
  gap: 10px;
}
.mt-no {
  font-family: var(--serif);
  font-size: 26px;
  font-weight: 700;
  color: var(--gold);
  line-height: 1;
}
.mt-title {
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.mt-head .r {
  display: flex;
  gap: 6px;
}

/* 芯片微标体系 */
.chip {
  display: inline-flex;
  align-items: center;
  font-size: 11px;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: 4px;
}
.chip.gold { background: var(--gold-bg); color: var(--gold); }
.chip.ink { background: var(--ink); color: #fff; }
.chip.green { background: var(--green-bg); color: var(--green); }
.chip.amber { background: var(--amber-bg); color: var(--amber); }
.chip.blue { background: var(--blue-bg); color: var(--blue); }
.chip.red { background: var(--red-bg); color: var(--red); }
.chip.soft { background: var(--grey-bg); color: var(--muted); }

/* KPI 卡片网格 */
.kpis-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
  margin-bottom: 16px;
}
.kpi-card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 12px 14px;
}
.kpi-label {
  font-size: 11.5px;
  color: var(--muted);
  margin-bottom: 4px;
}
.kpi-val {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 700;
  color: var(--ink);
  line-height: 1.2;
}
.trend-up { font-size: 13px; color: var(--green); font-weight: 700; margin-left: 6px; }
.trend-gold { font-size: 13px; color: var(--gold); font-weight: 700; margin-left: 6px; }
.kpi-desc {
  font-size: 11px;
  color: var(--muted);
  margin-top: 4px;
}

/* 四段公式深色大卡 */
.four-box {
  border-radius: var(--r-lg);
  overflow: hidden;
  background: var(--ink);
  margin-bottom: 16px;
}
.four-row {
  display: grid;
  grid-template-columns: 80px 1fr;
  gap: 12px;
  padding: 10px 14px;
  border-bottom: 1px solid rgba(255,255,255,.08);
  align-items: baseline;
}
.four-row:last-child { border-bottom: none; }
.four-next { background: #26335A; }
.four-k {
  font-size: 11.5px;
  letter-spacing: 1.5px;
  color: var(--gold-soft);
  font-weight: 700;
}
.four-v {
  font-family: var(--serif);
  font-size: 13.5px;
  line-height: 1.5;
  color: #fff;
  font-weight: 500;
}

/* 梯队卡片三列 */
.tier-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  margin-bottom: 16px;
}
.tier-card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 12px 14px;
}
.tier-chong { border-top: 4px solid var(--amber); }
.tier-wen { border-top: 4px solid var(--ink); }
.tier-bao { border-top: 4px solid var(--green); }
.tier-badge {
  font-size: 11px;
  font-weight: 700;
  margin-bottom: 6px;
}
.tier-chong .tier-badge { color: var(--amber); }
.tier-wen .tier-badge { color: var(--ink); }
.tier-bao .tier-badge { color: var(--green); }
.tier-title { font-size: 13px; font-weight: 700; color: var(--ink); margin-bottom: 4px; }
.tier-desc { font-size: 11.5px; color: var(--muted); line-height: 1.4; }

/* 训练切分条 */
.session-box {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 12px 14px;
  margin-bottom: 16px;
}
.session-title { font-size: 13px; font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.session-bar {
  display: flex;
  height: 38px;
  border-radius: var(--r-sm);
  overflow: hidden;
  margin-bottom: 8px;
  font-size: 11px;
  font-weight: 700;
  text-align: center;
  line-height: 1.25;
}
.seg { display: flex; align-items: center; justify-content: center; padding: 0 4px; }
.seg-10 { flex: 10; background: #D5DAE5; color: var(--ink); }
.seg-25 { flex: 25; background: var(--ink); color: #fff; }
.seg-5 { flex: 5; background: var(--gold-bg); color: var(--gold); }
.session-foot {
  display: flex;
  justify-content: space-between;
  font-size: 11.5px;
  color: var(--muted);
}

/* 家校协同卡片网格 */
.synergy-grid-wrap {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 16px;
}
@media (max-width: 480px) {
  .synergy-grid-wrap {
    grid-template-columns: 1fr;
  }
}
.synergy-card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 10px 12px;
}
.synergy-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}
.synergy-role {
  font-size: 11.5px;
  font-weight: 700;
  color: var(--ink);
}
.synergy-tag {
  font-size: 10px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 4px;
}
.synergy-desc {
  font-size: 11px;
  color: var(--text);
  line-height: 1.45;
}
.role-r { background: var(--green-bg); color: var(--green); }
.role-a { background: var(--amber-bg); color: var(--amber); }
.role-i { background: var(--grey-bg); color: var(--muted); }

/* 家庭六维网格 */
.family-six-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 16px;
}
.six-card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 8px 10px;
}
.six-k { font-size: 11.5px; font-weight: 700; color: var(--gold); margin-bottom: 3px; }
.six-v { font-size: 11.5px; color: var(--text); line-height: 1.4; }

/* 通用正文语义卡片容器 */
.cards-container {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 12px 14px;
}
.card-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 1px solid #F1EFEA;
  padding-bottom: 6px;
  margin-bottom: 8px;
  flex-wrap: nowrap;
}
.card-meta {
  font-size: 11px;
  color: var(--muted);
}

/* 边框高光体系 */
.fact-card { border-left: 4px solid var(--gold); }
.judgment-card { border-left: 4px solid var(--ink); }
.action-card { border-left: 4px solid var(--green); }
.timeline-card { border-left: 4px solid var(--blue); }
.role-card { border-left: 4px solid var(--muted); }
.risk-card { border-left: 4px solid var(--red); background: #FFFAF9; }
.stage-spec-card { border-left: 4px solid var(--blue); }

/* 01 学情事实专用组件 */
.fact-bullets {
  list-style: none;
  padding: 0;
  margin: 0 0 8px;
}
.fact-bullets li {
  position: relative;
  padding-left: 16px;
  margin-bottom: 5px;
  font-size: 13px;
  line-height: 1.5;
  color: #333;
}
.fact-bullets li::before {
  content: '▪';
  position: absolute;
  left: 2px;
  color: var(--gold);
  font-size: 13px;
}
.locked { display: none !important; }
.verified-box {
  display: flex;
  gap: 10px;
  background: rgba(22, 116, 72, 0.05);
  border: 1px solid rgba(22, 116, 72, 0.22);
  border-radius: var(--r-sm, 8px);
  padding: 10px 12px;
  margin-top: 8px;
  align-items: flex-start;
}
.verified-icon { font-size: 16px; line-height: 1.2; flex-shrink: 0; }
.verified-title { font-size: 12.5px; font-weight: 700; color: #167448; margin-bottom: 2px; }
.verified-desc { font-size: 11.5px; color: var(--muted, #475569); margin-bottom: 6px; line-height: 1.45; }
.verified-chips { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 6px; }
.verified-reasons { font-size: 11.5px; color: #334155; line-height: 1.45; }
.verified-item { margin-bottom: 3px; }


/* 02 规划师研判专用组件 */
.judg-box { display: flex; flex-direction: column; gap: 6px; }
.j-row {
  padding: 7px 0;
  border-bottom: 1px solid #EDEAE2;
}
.j-row:last-child { border-bottom: none; padding-bottom: 0; }
.j-top {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 3px;
}
.j-title { font-size: 13px; font-weight: 700; color: var(--ink); }
.j-tags { display: flex; gap: 5px; align-items: center; }
.j-body { font-size: 12.5px; color: #475569; line-height: 1.45; }

/* 03 行动清单专用组件 */
.action-list { display: flex; flex-direction: column; gap: 6px; }
.action-item {
  display: flex;
  gap: 9px;
  align-items: flex-start;
  background: #FAF9F6;
  border: 1px solid #EFECE6;
  border-radius: var(--r-sm);
  padding: 8px 10px;
}
.action-num {
  font-family: var(--serif);
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  background: var(--green);
  padding: 1px 6px;
  border-radius: 4px;
}
.action-main { flex: 1; }
.action-t { font-size: 13px; color: var(--ink); margin-bottom: 2px; }
.action-desc { font-size: 12px; color: #4B5563; line-height: 1.4; }

/* 04 时间线专用组件 */
.tl { position: relative; padding-left: 18px; }
.tl::before {
  content: '';
  position: absolute;
  left: 6px;
  top: 6px;
  bottom: 6px;
  width: 2px;
  background: var(--line-2);
}
.st { position: relative; padding-bottom: 9px; }
.st:last-child { padding-bottom: 0; }
.st .dot {
  position: absolute;
  left: -18px;
  top: 4px;
  width: 12px;
  height: 12px;
  border-radius: 6px;
  background: #fff;
  border: 2px solid var(--ink-3);
}
.st.now .dot {
  background: var(--gold-2);
  border-color: var(--gold-2);
  box-shadow: 0 0 0 2px var(--gold-bg);
}
.st-head { display: flex; gap: 6px; align-items: center; margin-bottom: 2px; }
.st-name { font-size: 12.5px; font-weight: 700; color: var(--ink); }
.st-desc { font-size: 12px; color: #4B5563; line-height: 1.4; }

/* 05 四方责任主体专用组件 */
.role-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
.role-item {
  background: #FAF9F6;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  padding: 8px 10px;
}
.role-tag { font-size: 11.5px; font-weight: 700; margin-bottom: 3px; }
.role-stu .role-tag { color: var(--ink); }
.role-parent .role-tag { color: var(--amber); }
.role-teacher .role-tag { color: var(--green); }
.role-planner .role-tag { color: var(--blue); }
.role-content { font-size: 12px; color: #374151; line-height: 1.4; }

/* 06 风险与替代专用组件 */
.risk-split-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 10px;
}
@media (min-width: 640px) {
  body:not(.shell-phone) .risk-split-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
.risk-pane {
  border-radius: var(--r-sm);
  padding: 8px 10px;
}
.risk-left { background: #FEF2F2; border: 1px solid #FEE2E2; }
.risk-right { background: #EFF6FF; border: 1px solid #DBEAFE; }
.risk-pane-title { font-size: 12px; font-weight: 700; margin-bottom: 4px; line-height: 1.4; }
.risk-left .risk-pane-title { color: var(--red); }
.risk-right .risk-pane-title { color: var(--blue); }
.risk-pane-body { font-size: 12px; color: #374151; line-height: 1.4; }

/* 阶段实施规约卡（Ch 6 & Ch 7） */
.stage-spec-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px;
  border-bottom: 1px solid #F1EFEA;
  padding-bottom: 5px;
  margin-bottom: 7px;
}
.stage-spec-head .chip {
  white-space: normal !important;
  line-height: 1.4;
}
.stage-spec-body { display: flex; flex-direction: column; gap: 5px; }
.stage-spec-row {
  display: grid;
  grid-template-columns: 75px 1fr;
  gap: 8px;
  font-size: 12px;
  line-height: 1.4;
}
.stage-spec-k {
  font-size: 11px;
  font-weight: 700;
  color: var(--ink-3);
  background: var(--grey-bg);
  padding: 2px 5px;
  border-radius: 4px;
  text-align: center;
  height: fit-content;
}
.stage-spec-v { color: var(--text); }

/* 页脚 */
.ftr {
  margin-top: 30px;
  padding-top: 12px;
  border-top: 1px solid var(--line);
  font-size: 11px;
  color: var(--muted);
}
.ftr-top {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 4px;
}

/* 移动端 360px 极窄视口自适应 (AGENTS.md 1.4) */
@media screen and (max-width: 640px) {
  .wrap { padding: 10px 8px; width: 100%; max-width: 100%; box-sizing: border-box; }
  .cover-hero { padding: 12px; margin-bottom: 16px; }
  .hero-top-row { flex-wrap: wrap; gap: 6px; }
  .hero-main-row { flex-direction: column; align-items: flex-start; gap: 10px; }
  .hero-titles { width: 100%; }
  .hero-meta-grid { flex-wrap: wrap; gap: 4px; }
  .hero-curve-box { width: 100%; text-align: left; display: flex; justify-content: space-between; align-items: center; box-sizing: border-box; }
  .curve-lbl { margin-bottom: 0; }
  .curve-scores { margin-bottom: 0; font-size: 16px; }
  .kpis-grid { grid-template-columns: 1fr 1fr; gap: 8px; }
  .four-box { overflow-x: hidden; }
  .four-row { grid-template-columns: 70px 1fr; padding: 6px 8px; gap: 8px; }
  .tier-grid { grid-template-columns: 1fr; gap: 8px; }
  .family-six-grid { grid-template-columns: 1fr; gap: 8px; }
  .role-grid { grid-template-columns: 1fr !important; gap: 8px !important; }
  .risk-split-grid { grid-template-columns: 1fr !important; gap: 10px !important; }
  .synergy-grid-wrap { grid-template-columns: 1fr; gap: 8px; }
  .stage-spec-row { grid-template-columns: 65px 1fr; gap: 6px; }
  .card { padding: 10px 10px; }
  .card-head { flex-wrap: wrap; gap: 4px; }
  .mt-head { flex-wrap: wrap; gap: 6px; }
  .mt-head .r { flex-wrap: wrap; }
  .j-top { flex-wrap: wrap; gap: 4px; }
  .ftr-top { flex-wrap: wrap; gap: 6px; }
}

body.shell-phone .role-grid,
.phone .role-grid {
  grid-template-columns: 1fr !important;
  gap: 8px !important;
}
body.shell-phone .risk-split-grid,
.phone .risk-split-grid {
  grid-template-columns: 1fr !important;
  gap: 10px !important;
}

/* 打印样式 */
@page {
  size: A4 portrait;
  margin: 8mm 9mm 10mm 9mm;
  @bottom-right {
    content: "第 " counter(page) " 页 / 共 " counter(pages) " 页";
    font-size: 8pt;
    color: #888;
  }
}



/* 移动端 360px 极窄视口彻底防溢出强化 */
#mt-report-suite-container {
  --ink: #1C2740;
  --ink-2: #243354;
  --ink-3: #4A5A86;
  --gold: #8C6214;
  --gold-2: #B8862B;
  --gold-soft: #D9C08A;
  --gold-bg: #F6EEDC;
  --green: #2E7D57;
  --green-bg: #E5F2EA;
  --amber: #A5650F;
  --amber-bg: #FBEFD9;
  --red: #A63D2F;
  --red-bg: #F7E4E0;
  --blue: #1D4ED8;
  --blue-bg: #EFF6FF;
  --paper: #FBFAF6;
  --card: #FFFFFF;
  --line: #E4E1D8;
  --line-2: #D8D4C8;
  --grey-bg: #F1EFEA;
}

#mt-report-suite-container .chip,
#mt-report-suite-container .badge,
#mt-report-suite-container .tag,
#mt-report-suite-container .ltag,
#mt-report-suite-container .bsg-badge,
#mt-report-suite-container .pill,
#mt-report-suite-container .tier-badge,
#mt-report-suite-container .action-num,
#mt-report-suite-container .mt-no {
  white-space: nowrap !important;
  flex-shrink: 0 !important;
}


#mt-report-suite-container .stage-spec-head,
#mt-report-suite-container .mt-head,
#mt-report-suite-container .card-head,
#mt-report-suite-container .j-top {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 6px !important;
  justify-content: space-between !important;
  align-items: center !important;
  box-sizing: border-box !important;
}

#mt-report-suite-container .wrap {
  max-width: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
  box-sizing: border-box !important;
}

#mt-report-suite-container .chapter {
  max-width: 100% !important;
  box-sizing: border-box !important;
}

#mt-report-suite-container .card {
  box-sizing: border-box !important;
  max-width: 100% !important;
}

#mt-report-suite-container .four-box,
#mt-report-suite-container .session-box,
#mt-report-suite-container .kpis-grid,
#mt-report-suite-container .tier-grid {
  box-sizing: border-box !important;
  max-width: 100% !important;
}



/* =========================================================
   移动端高保真标头视觉一致性与防污染终极补丁
   ========================================================= */
#mt-report-suite-container .mt-head,
.mt-head {
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
  border-bottom: 2px solid #1C2740 !important;
  padding-bottom: 8px !important;
  margin: 16px 0 14px 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  flex-wrap: wrap !important;
  gap: 8px !important;
}

#mt-report-suite-container .mt-head-left,
#mt-report-suite-container .l,
.mt-head-left,
.stage .mt-head-left,
.stage .l.mt-head-left {
  display: flex !important;
  flex-direction: row !important;
  align-items: baseline !important;
  gap: 8px !important;
  background: transparent !important;
  color: inherit !important;
  padding: 0 !important;
  margin: 0 !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  height: auto !important;
  width: auto !important;
  max-width: 100% !important;
}

#mt-report-suite-container .mt-no,
.mt-no {
  font-family: var(--serif, 'Noto Serif SC', 'Songti SC', serif) !important;
  font-size: 24px !important;
  font-weight: 800 !important;
  color: #8C6214 !important;
  line-height: 1 !important;
  white-space: nowrap !important;
  flex-shrink: 0 !important;
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
  height: auto !important;
  width: auto !important;
}

#mt-report-suite-container .mt-title:not(.u-nowrap),
.mt-title:not(.u-nowrap) {
  font-family: var(--serif, 'Noto Serif SC', 'Songti SC', serif) !important;
  font-size: 16px !important;
  font-weight: 800 !important;
  color: #1C2740 !important;
  margin: 0 !important;
  line-height: 1.25 !important;
  white-space: normal !important;
  word-break: break-word !important;
  background: transparent !important;
  display: inline-block !important;
}

#mt-report-suite-container .mt-head-right,
#mt-report-suite-container .r,
.mt-head-right {
  display: flex !important;
  align-items: center !important;
  gap: 6px !important;
  flex-wrap: nowrap !important;
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
}

@media print {
  .navbar, .tabbar, .no-print,
  button, input, textarea, select,
  .chip, .chips, .sg-chip, .ask-chips, .coach-face-chips, .suite-tab-btn {
    display: none !important;
  }
}

/* 首页「出完整方案还差几项」。名称和微标单行，入口贴在行尾。 */
#home-plan-progress {
  margin: 0 16px 14px;
  padding: 14px 12px;
  background: #fff;
  border: 1.5px solid #D2E7DC;
  border-radius: 20px;
  box-sizing: border-box;
  max-width: calc(100% - 32px);
}
#home-plan-progress[hidden] { display: none !important; }
#home-intro-fold {
  display: none;
  width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: #1C2740;
  font-size: 15px;
  font-weight: 800;
  line-height: 1.3;
  text-align: left;
  white-space: nowrap;
  flex-shrink: 0;
}
#home-onboarding-entry.is-folded #home-intro-fold { display: block; }
#home-onboarding-entry.is-folded:not(.is-expanded) .home-intro-body { display: none; }
.dossier-recent-exams-title {
  white-space: nowrap;
  flex-shrink: 0;
  font-size: 13px;
  font-weight: 700;
  color: #1C2740;
}
.dossier-recent-exams { max-width: 100%; }
.dossier-exam-row { margin-top: 10px; max-width: 100%; }
.dossier-exam-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: nowrap;
  gap: 8px;
}
.dossier-exam-round {
  white-space: nowrap;
  flex-shrink: 0;
  font-size: 13px;
  font-weight: 700;
  color: #1C2740;
}
.dossier-exam-saved {
  white-space: nowrap;
  flex-shrink: 0;
  color: #167448;
  font-size: 12px;
  font-weight: 700;
}
.dossier-exam-name {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 8px;
  min-width: 0;
  max-width: 100%;
  white-space: nowrap;
}
.dossier-exam-date,
.dossier-exam-scoreline {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: 4px;
  margin-top: 8px;
  max-width: 100%;
  min-width: 0;
}
.dossier-exam-date > span,
.dossier-exam-slash {
  flex: 0 0 auto;
  white-space: nowrap;
}
.dossier-exam-date select {
  flex: 1 1 0;
  width: 0;
  min-width: 0;
  box-sizing: border-box;
}
.dossier-exam-scoreline > label {
  display: flex;
  align-items: center;
  flex: 1 1 0;
  min-width: 0;
  gap: 4px;
  white-space: nowrap;
}
.dossier-exam-name input {
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;
}
.dossier-exam-scoreline input {
  flex: 1 1 auto;
  width: auto;
  min-width: 0;
  box-sizing: border-box;
}
#dossier-score-later {
  margin: 8px 16px 16px;
  font-size: 12px;
  color: #64748B;
}
.home-progress-title {
  font-size: 15px;
  font-weight: 800;
  color: #1C2740;
  line-height: 1.3;
  margin: 0 0 8px;
}
.home-progress-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: nowrap;
  gap: 8px;
  margin-top: 8px;
}
.home-progress-head {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  flex-wrap: nowrap;
  gap: 6px;
  min-width: 0;
}
.home-progress-name,
.home-progress-badge,
.home-progress-go,
.home-progress-view,
.home-progress-title {
  white-space: nowrap;
  flex-shrink: 0;
}
.home-progress-name { font-size: 13px; font-weight: 700; color: #1C2740; }
.home-progress-badge {
  font-size: 12px;
  font-weight: 700;
  color: #166534;
  background: #E8F5E9;
  border: 1px solid #BBF7D0;
  border-radius: 999px;
  padding: 1px 6px;
}
.home-progress-go,
.home-progress-view {
  border: none;
  background: #1C2740;
  color: #fff;
  border-radius: 8px;
  font-size: 12px;
  font-weight: 700;
  padding: 6px 8px;
  cursor: pointer;
}
.home-progress-view { margin-top: 12px; }

/* CR-UI-C S4 近三次大考卡片 */
#dossier-recent-exams .dossier-exam-row {
  margin-top: 10px;
  padding: 12px;
  border-radius: 14px;
  background: #FAFBFA;
  border: 1px dashed #DCE9E2;
  max-width: 100%;
  box-sizing: border-box;
}
#dossier-recent-exams .dossier-exam-row[data-exam-state="saved"] {
  background: #F4F9F6;
  border: none;
}
#dossier-recent-exams .dossier-exam-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: nowrap;
  gap: 8px;
}
#dossier-recent-exams .dossier-exam-heading {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: 8px;
  min-width: 0;
}
#dossier-recent-exams .dossier-exam-index {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: #B9C9C1;
  color: #fff;
  font-size: 12px;
  font-weight: 600;
  line-height: 22px;
  text-align: center;
  flex: 0 0 22px;
  white-space: nowrap;
}
#dossier-recent-exams .dossier-exam-row[data-exam-state="saved"] .dossier-exam-index {
  background: #1E5C45;
}
#dossier-recent-exams .dossier-exam-round {
  font-size: 14px;
  font-weight: 600;
  color: #14302A;
  white-space: nowrap;
  flex-shrink: 0;
}
#dossier-recent-exams .dossier-exam-saved,
#dossier-recent-exams .dossier-exam-pending {
  white-space: nowrap;
  flex-shrink: 0;
  font-size: 11px;
  line-height: 1.4;
  border-radius: 10px;
  padding: 2px 8px;
}
#dossier-recent-exams .dossier-exam-saved[hidden],
#dossier-recent-exams .dossier-exam-pending[hidden] {
  display: none !important;
}
#dossier-recent-exams .dossier-exam-saved {
  background: #E3F3EA;
  color: #1E6B47;
}
#dossier-recent-exams .dossier-exam-pending {
  background: #FFF4E0;
  color: #8A5A00;
}
#dossier-recent-exams .dossier-exam-field {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
  margin-top: 10px;
  min-width: 0;
  white-space: normal;
}
#dossier-recent-exams .dossier-exam-label {
  font-size: 12px;
  font-weight: 400;
  color: #5C7268;
  white-space: nowrap;
  flex-shrink: 0;
}
#dossier-recent-exams .dossier-exam-date {
  display: flex;
  flex-wrap: nowrap;
  align-items: stretch;
  gap: 6px;
  margin-top: 0;
  min-width: 0;
  max-width: 100%;
}
#dossier-recent-exams .dossier-exam-scoreline {
  display: flex;
  flex-wrap: nowrap;
  align-items: flex-start;
  gap: 8px;
  margin-top: 0;
  min-width: 0;
  max-width: 100%;
}
#dossier-recent-exams .dossier-exam-scoreline > .dossier-exam-field {
  flex: 1 1 0;
  width: 0;
  min-width: 0;
}
#dossier-recent-exams input,
#dossier-recent-exams select {
  height: 40px;
  border-radius: 10px;
  background-color: #fff;
  border: 1px solid #DCE9E2;
  font-size: 14px;
  color: #14302A;
  padding: 0 12px;
  box-sizing: border-box;
  max-width: 100%;
}
#dossier-recent-exams input:focus,
#dossier-recent-exams select:focus {
  outline: none;
  border-color: #1E5C45;
  box-shadow: 0 0 0 3px rgba(30, 92, 69, .12);
}
#dossier-recent-exams .dossier-exam-date select {
  appearance: none;
  -webkit-appearance: none;
  flex: 1 1 0;
  width: 0;
  min-width: 0;
  padding-left: 8px;
  padding-right: 22px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 L6 6.5 L11 1.5' fill='none' stroke='%235C7268' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 6px center;
  background-size: 10px 7px;
}
#dossier-recent-exams .dossier-exam-date select:has(option[value=""]:checked) {
  color: #9AA9A2;
}
#dossier-recent-exams .dossier-exam-date select option {
  color: #14302A;
}
#dossier-recent-exams .dossier-exam-field input {
  display: block;
  width: 100%;
  min-width: 0;
}

/* CR-UX1 批2a F2：「怎么去」屏时间轴有序列表——全局 reset 把 ol 的内边距清零，序号落在内容区左侧之外（贴屏幕左缘）。
   给左内边距，让「1. 」完整落在卡片内边距之内；条目仍 nowrap（防断词）。 */
.go-how-segs { padding-left: 1.8em; margin: 4px 0; }
.go-how-segs > .timeline-seg { padding-left: 2px; }

/* CR-UX1 批2a F3：规划屏上传清单里的「（打开）」文件链接——去掉浏览器默认蓝色下划线，品牌色，可点区域不小于 32px */
a.material-open-link {
  display: inline-flex; align-items: center; min-height: 32px; max-width: 100%;
  color: var(--accent, #1F5346); font-weight: 700; text-decoration: none; overflow-wrap: anywhere;
}
a.material-open-link:active { opacity: .7; }
a.material-open-link:focus-visible { outline: 2px solid var(--accent-2, #2F7D68); outline-offset: 2px; border-radius: 4px; }

/* =========================================================
   报告对齐示例 2a（ra- 前缀）：首屏深色总卡、三阶目录、四格卡点、试卷逐题、路径卡、分阶段卡、60 天三段、行动卡。
   全部 360 宽不横滚；微标 nowrap + flex-shrink:0；无绝对定位悬浮。
   ========================================================= */
.rp-deep-doc .suite-hero-banner.ra-hero {
  background: linear-gradient(160deg, #1e2942 0%, #2a3757 100%);
  color: #e9ecf4;
  border-radius: 18px;
  padding: 14px 16px 10px;
  margin: 0 0 10px;
}
.ra-hero .ra-hero-eyebrow { font-size: 11px; letter-spacing: 1px; color: #d9b876; font-weight: 600; margin: 0; }
.ra-hero .ra-hero-row1 { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; margin-top: 6px; }
.ra-hero .ra-hero-name { font-size: 24px; font-weight: 700; letter-spacing: 1px; color: #fff; margin: 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ra-seal { display: inline-flex; align-items: center; white-space: nowrap; flex-shrink: 0; font-size: 11px; font-weight: 600; color: #1e2942; background: #e7c983; border-radius: 999px; padding: 3px 9px; }
.rp-deep-doc .ra-hero .ra-hero-meta { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 0; }
.ra-chip { display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex-shrink: 0; font-size: 12px; color: #e9ecf4; background: rgba(255,255,255,.09); border: 1px solid rgba(255,255,255,.14); border-radius: 6px; padding: 2px 8px; }
.ra-hero-trend { display: flex; align-items: flex-end; justify-content: space-between; flex-wrap: nowrap; gap: 10px; margin-top: 10px; padding-top: 8px; border-top: 1px solid rgba(255,255,255,.12); }
.ra-ht-l { min-width: 0; }
.ra-ht-k { font-size: 11px; color: #a3acc2; }
.ra-ht-v { font-size: 20px; color: #fff; margin-top: 2px; font-family: Georgia, "Times New Roman", "Songti SC", serif; display: flex; align-items: baseline; flex-wrap: wrap; gap: 0 6px; }
.ra-ht-d { font-size: 13px; color: #8fd3a8; font-family: -apple-system, "PingFang SC", sans-serif; }
.ra-hero-svg { display: block; flex-shrink: 0; }
.ra-ht-note { font-size: 11px; color: #a3acc2; margin-top: 6px; }
.ra-hero-foot { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; margin-top: 6px; font-size: 11px; color: #a3acc2; }
.rp-deep-doc .ra-hero #rp-deep-regen {
  display: block; width: auto; margin: 4px 0 0; padding: 4px 0; min-height: 28px; font-size: 11.5px; font-weight: 600; text-align: left;
  background: transparent; color: #cfd5e5; border: 0; border-radius: 0; box-shadow: none; text-decoration: underline;
  white-space: normal;
}

/* 三阶目录：沿用 .suite-nav-bar 容器与 data-nav-tab 属性，覆盖旧 2x2 网格 */
.suite-nav-bar.ra-toc { display: grid !important; grid-template-columns: minmax(0, 1fr) !important; gap: 6px !important; margin: 0 0 8px !important; }
.ra-toc-item {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; cursor: pointer;
  background: #fff; border: 1px solid #e8e3d7; border-radius: 12px; padding: 6px 12px; color: #1b2233;
  white-space: nowrap; flex-shrink: 0; font: inherit;
}
.ra-toc-item.active { border-color: #1e2942; background: #1e2942; color: #fff; }
.ra-toc-n { font-family: Georgia, "Times New Roman", serif; font-size: 20px; color: #a5782b; width: 30px; flex-shrink: 0; }
.ra-toc-item.active .ra-toc-n { color: #e7c983; }
.ra-toc-main { flex: 1; min-width: 0; display: block; }
.ra-toc-h { display: block; font-size: 14px; font-weight: 700; line-height: 1.35; }
.ra-toc-d { display: block; font-size: 11.5px; line-height: 1.35; color: #4a5263; margin-top: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ra-toc-item.active .ra-toc-d { color: #cfd5e5; }
.ra-toc-all { justify-self: end; background: transparent; border: 0; color: #2f5a8f; font-size: 12px; font-weight: 600; padding: 2px 4px; cursor: pointer; white-space: nowrap; flex-shrink: 0; }
.ra-toc-all.active { color: #1e2942; text-decoration: underline; }

/* 微标 */
.ra-tag { display: inline-flex; align-items: center; white-space: nowrap; flex-shrink: 0; font-size: 11px; line-height: 1; border-radius: 999px; padding: 4px 8px; font-weight: 600; }
.ra-tag-navy { background: #1e2942; color: #fff; }
.ra-tag-gold { background: #f6eedc; color: #a5782b; border: 1px solid #e6d6b2; }
.ra-tag-green { background: #e5efe8; color: #2d6a4d; }
.ra-tag-red { background: #f8e8e2; color: #a9503a; }
.ra-tag-line { background: #fff; color: #4a5263; border: 1px solid #e8e3d7; font-weight: 500; }

/* 四格卡点 */
.ra-four { margin-top: 12px; background: #1e2942; border-radius: 14px; overflow: hidden; }
.ra-four-row { padding: 10px 12px; border-top: 1px solid rgba(255,255,255,.08); }
.ra-four-row:first-child { border-top: 0; }
.ra-four-row.ra-next { background: #2a3757; }
.ra-four-h { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 6px; }
.ra-four-k { font-size: 12px; font-weight: 700; color: #e7c983; white-space: nowrap; flex-shrink: 0; }
.ra-four-v { font-size: 13.5px; color: #e9ecf4; margin-top: 4px; line-height: 1.55; }
.ra-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.ra-chip-n { display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex-shrink: 0; font-size: 12px; color: #fff; background: rgba(255,255,255,.1); border-radius: 6px; padding: 2px 8px; }
.ra-chip-n i { font-style: normal; color: #a3acc2; margin-right: 4px; }

/* 试卷逐题 */
.ra-xgbox { background: #fff; border: 1px solid #e8e3d7; border-radius: 14px; padding: 10px 12px; margin-bottom: 4px; }
.ra-xg { width: 100%; table-layout: fixed; border-collapse: separate; border-spacing: 0 4px; font-size: 12px; }
.ra-xg th { font-weight: 500; color: #8b909a; font-size: 10.5px; text-align: center; white-space: nowrap; padding: 0 2px; width: 44px; }
.ra-xg th:first-child { text-align: left; width: auto; }
.ra-xg td { text-align: center; padding: 5px 2px; background: #faf9f6; width: 44px; }
.ra-xg td:first-child { text-align: left; padding-left: 8px; border-radius: 6px 0 0 6px; width: auto; }
.ra-xg td:last-child { border-radius: 0 6px 6px 0; }
.ra-xg-t { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: 12px; color: #1b2233; line-height: 1.35; }
.ra-sc { font-family: Georgia, "Times New Roman", serif; font-size: 13px; white-space: nowrap; }
.ra-sc-full { color: #2d6a4d; }
.ra-sc-lose { color: #a9503a; font-weight: 700; }
.ra-sc-none { color: #8b909a; }
.ra-xg-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 2px 8px; margin-top: 6px; font-size: 11px; color: #8b909a; }
.ra-xg-f { white-space: nowrap; flex-shrink: 0; }

/* 主备路径卡 */
.ra-paths { display: grid; gap: 8px; margin-top: 6px; }
.ra-path { border-radius: 14px; padding: 12px; border: 1px solid #e8e3d7; background: #fff; }
.ra-path-main { border: 1.5px solid #1e2942; background: linear-gradient(180deg, #fff, #f7f8fb); }
.ra-path-h { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; }
.ra-path-name { font-size: 16px; font-weight: 700; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ra-pk { display: flex; gap: 8px; align-items: flex-start; margin-top: 8px; font-size: 12.5px; color: #4a5263; }
.ra-pk .ra-tag { margin-top: 1px; }
.ra-pk-t { min-width: 0; line-height: 1.5; }

/* 分阶段卡 */
.ra-stages { display: grid; gap: 8px; margin-top: 6px; }
.ra-stg { border: 1px solid #e8e3d7; border-radius: 12px; background: #faf9f6; padding: 10px; }
.ra-stg-h { display: flex; align-items: center; gap: 8px; flex-wrap: nowrap; }
.ra-stg-i { font-family: Georgia, "Times New Roman", serif; font-size: 13px; color: #fff; background: #1e2942; border-radius: 50%; width: 22px; height: 22px; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; }
.ra-stg-t { font-size: 14px; font-weight: 700; white-space: nowrap; flex-shrink: 0; }
.ra-stg-r { display: flex; gap: 8px; align-items: flex-start; margin-top: 5px; font-size: 12.5px; color: #4a5263; line-height: 1.5; }
.ra-stg-k { font-size: 11px; color: #8b909a; flex-shrink: 0; padding-top: 1px; }
.ra-stg-v { min-width: 0; }

/* 60 天三段（不用绝对定位：刻度标签按段宽比例排在同一行里） */
.ra-sixty { background: #fff; border: 1px solid #e8e3d7; border-radius: 14px; padding: 10px 12px; margin-bottom: 4px; }
.ra-bar { display: flex; height: 34px; border-radius: 8px; overflow: hidden; }
.ra-seg { display: flex; align-items: center; justify-content: center; min-width: 0; font-size: 11.5px; color: #fff; white-space: nowrap; overflow: hidden; }
.ra-seg1 { background: #2d6a4d; }
.ra-seg2 { background: #4f8a6c; }
.ra-seg3 { background: #2a3757; }
.ra-axis { display: flex; margin-top: 4px; }
.ra-tick { min-width: 0; font-size: 10.5px; color: #a5782b; font-weight: 600; text-align: center; white-space: nowrap; min-height: 14px; }
.ra-tick-left { text-align: left; }
.ra-tick-right { text-align: right; }

/* 行动卡 */
.ra-acts { display: grid; gap: 8px; margin-top: 6px; }
.ra-act { display: flex; gap: 10px; align-items: flex-start; background: #faf9f6; border: 1px solid #e8e3d7; border-radius: 10px; padding: 9px 10px; }
.ra-act-n { font-family: Georgia, "Times New Roman", serif; font-size: 13px; color: #fff; background: #2d6a4d; border-radius: 6px; width: 26px; height: 22px; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; white-space: nowrap; }
.ra-act-t { min-width: 0; font-size: 13.5px; line-height: 1.5; color: #1b2233; }

/* FIX1：折成一行的备选路径、阶段「做法」分行 */
.ra-pk-fold { margin-top: 8px; padding-top: 8px; border-top: 1px dashed #e8e3d7; color: #4a5263; }
.ra-do { display: grid; gap: 4px; }
.ra-do-i { display: flex; align-items: flex-start; gap: 6px; min-width: 0; }
.ra-who { display: inline-flex; align-items: center; white-space: nowrap; flex-shrink: 0; font-size: 11px; line-height: 1; font-weight: 600; color: #1e2942; background: #e6edf6; border-radius: 999px; padding: 3px 7px; margin-top: 1px; }
.ra-do-t { min-width: 0; line-height: 1.5; }

/* FIX1：各科卡点表放进四格（沿用 p5-kvt 结构，深色底）；路径卡沿用 p5-road / p5-p 类名但按卡片样式画 */
.p5-face .ra-four .ra-kvt { width: 100%; margin-top: 6px; border-collapse: collapse; font-size: 13px; table-layout: auto; }
.p5-face .ra-four .ra-kvt th, .p5-face .ra-four .ra-kvt td { border-bottom: 1px solid rgba(255,255,255,.1); padding: 6px 4px; text-align: left; vertical-align: top; line-height: 1.5; }
.p5-face .ra-four .ra-kvt th { width: 1%; white-space: nowrap; padding-left: 0; padding-right: 10px; font-weight: 600; }
.p5-face .ra-four .ra-kvt td { color: #e9ecf4; font-weight: 600; min-width: 0; }
.p5-face .ra-four .ra-kvt tr:last-child th, .p5-face .ra-four .ra-kvt tr:last-child td { border-bottom: none; }
.ra-kvt-k { display: inline-block; font-size: 11px; font-weight: 700; color: #a3acc2; background: rgba(255,255,255,.1); padding: 1px 6px; border-radius: 3px; white-space: nowrap; flex-shrink: 0; }
.p5-face .ra-paths.p5-road { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; margin-top: 6px; padding: 0; border-top: 0; background: transparent; }
.p5-face .ra-paths.p5-road .p5-p { flex: initial; min-width: 0; padding: 12px; border-radius: 14px; border: 1px solid #e8e3d7; background: #fff; }
.p5-face .ra-paths.p5-road .p5-p.ra-path-main { border: 1.5px solid #1e2942; background: linear-gradient(180deg, #fff, #f7f8fb); }

/* =========================================================
   试卷诊断卡（孩子版，edc- 前缀）：AI 教练页，同一个机器人气泡里的总评 / 丢分地图 / 先补哪题 / 每题怎么提升。
   标签、分值、按钮一律 nowrap + flex-shrink:0；无绝对定位悬浮；360 宽不横滚。
   ========================================================= */
#screen-tifen .chat-area .msg.edc-msg .bubble { padding: 0 !important; overflow: hidden; background: #fff; }
.edc-card { color: #14302A; font-size: 13px; line-height: 1.5; min-width: 0; }
.edc-lead { padding: 10px 14px 0; font-size: 12px; color: #5C7268; }
.edc-sec { padding: 12px 14px; border-top: 1px solid #E4ECE7; min-width: 0; }
.edc-sec.edc-sum { border-top: 0; padding-top: 6px; }
.edc-sum-h, .edc-h, .edc-q1, .edc-q2, .edc-score, .edc-p, .edc-fix-h, .edc-step-h { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; }
.edc-sum-t, .edc-ht { font-size: 14px; font-weight: 700; white-space: nowrap; flex-shrink: 0; }
.edc-sum-m, .edc-hs { font-size: 11px; color: #7A8A83; white-space: nowrap; flex-shrink: 0; }
.edc-score { margin-top: 8px; align-items: flex-end; }
.edc-big { font-size: 36px; font-weight: 800; color: #1F5346; line-height: 1; }
.edc-of { font-size: 15px; color: #5C7268; margin-left: 2px; }
.edc-cap { font-size: 11px; color: #7A8A83; margin-top: 2px; white-space: nowrap; }
.edc-lost { text-align: right; }
.edc-lost-n { font-size: 24px; font-weight: 800; color: #9A6700; line-height: 1; white-space: nowrap; }
.edc-band { display: flex; height: 10px; border-radius: 999px; overflow: hidden; margin-top: 10px; }
.edc-seg { display: block; min-width: 4px; }
.edc-legend { display: flex; flex-wrap: wrap; gap: 4px 12px; margin-top: 6px; font-size: 11.5px; color: #3F5A50; }
.edc-lg { white-space: nowrap; flex-shrink: 0; }
.edc-dot { display: inline-block; width: 8px; height: 8px; border-radius: 2px; margin-right: 4px; }
.edc-r-hard { background: #9A6700; }
.edc-r-half { background: #D9A441; }
.edc-r-slip { background: #E7CFA3; }
.edc-r-time { background: #8DA9C4; }
.edc-r-other { background: #B8BDC4; }
.edc-concl { margin: 10px 0 0; font-size: 13.5px; line-height: 1.6; color: #14302A; }
.edc-h { margin-bottom: 8px; }
.edc-q { padding: 8px 0; border-top: 1px dashed #E4ECE7; }
.edc-q:first-of-type { border-top: 0; }
.edc-qno { font-size: 11.5px; color: #7A8A83; white-space: nowrap; flex-shrink: 0; }
.edc-qt { flex: 1; min-width: 0; font-weight: 700; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.35; }
.edc-bar { width: 52px; height: 6px; border-radius: 999px; background: #E9EEEA; overflow: hidden; flex-shrink: 0; }
.edc-bar i { display: block; height: 100%; background: #2F7D68; }
.edc-qs { font-size: 12px; font-weight: 600; white-space: nowrap; flex-shrink: 0; min-width: 28px; text-align: right; }
.edc-q2 { margin-top: 5px; }
.edc-chip { font: inherit; font-size: 11.5px; line-height: 1; border: 0; border-radius: 999px; padding: 5px 9px; color: #14302A; white-space: nowrap; flex-shrink: 0; cursor: pointer; max-width: 70%; overflow: hidden; text-overflow: ellipsis; }
.edc-chip.edc-r-hard { background: #F3E3C2; }
.edc-chip.edc-r-half { background: #F7E9C7; }
.edc-chip.edc-r-slip { background: #F8EFD9; }
.edc-chip.edc-r-time { background: #DDE8F1; }
.edc-chip.edc-r-other { background: #ECEEF0; }
.edc-gain { font-size: 11.5px; font-weight: 700; color: #9A6700; white-space: nowrap; flex-shrink: 0; }
.edc-ok { font-size: 11.5px; font-weight: 600; color: #2D6A4D; background: #E5EFE8; border-radius: 999px; padding: 4px 9px; white-space: nowrap; flex-shrink: 0; }
.edc-full { font-size: 11.5px; color: #7A8A83; white-space: nowrap; flex-shrink: 0; }
.edc-why { margin-top: 5px; font-size: 12px; color: #4D6359; background: #F4F7F5; border-radius: 8px; padding: 6px 9px; }
.edc-p { padding: 5px 0; justify-content: flex-start; }
.edc-pn { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 50%; background: #1F5346; color: #fff; font-size: 12px; font-weight: 700; flex-shrink: 0; }
.edc-pno { font-size: 11.5px; color: #7A8A83; white-space: nowrap; flex-shrink: 0; }
.edc-pt { flex: 1; min-width: 0; font-weight: 700; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.35; }
.edc-note { margin: 6px 0 0; font-size: 11.5px; color: #7A8A83; line-height: 1.55; }
.edc-fix { border: 1px solid #E4ECE7; border-radius: 12px; margin-top: 8px; overflow: hidden; background: #FBFCFB; }
.edc-fix-h { width: 100%; font: inherit; text-align: left; background: transparent; border: 0; padding: 9px 10px; cursor: pointer; justify-content: flex-start; color: inherit; }
.edc-fix-t { flex: 1; min-width: 0; font-weight: 700; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.35; }
.edc-fix-no { font-size: 11.5px; color: #7A8A83; white-space: nowrap; flex-shrink: 0; }
.edc-fix-b { padding: 0 10px 10px; }
.edc-step { margin-top: 8px; }
.edc-step-h { justify-content: flex-start; }
.edc-step-n { font-size: 12px; font-weight: 700; color: #2F7D68; flex-shrink: 0; }
.edc-step-title { font-size: 12.5px; font-weight: 700; white-space: nowrap; flex-shrink: 0; }
.edc-step-tag { margin-left: auto; font-size: 10.5px; color: #5B4FC2; background: #ECE9FA; border-radius: 4px; padding: 1px 6px; white-space: nowrap; flex-shrink: 0; }
.edc-step-tag:empty { display: none; }
.edc-step-t { margin-top: 2px; padding-left: 16px; font-size: 12.5px; color: #3F5A50; line-height: 1.55; }
.edc-step-line { display: block; }
.edc-go { display: block; width: 100%; margin-top: 10px; font: inherit; font-size: 13.5px; font-weight: 700; color: #fff; background: linear-gradient(135deg, #2F7D68, #1F5346); border: 0; border-radius: 10px; padding: 10px 12px; cursor: pointer; white-space: nowrap; }
.edc-foot { padding: 10px 14px 12px; border-top: 1px solid #E4ECE7; display: grid; gap: 4px; }
.edc-foot-t { font-size: 11.5px; color: #7A8A83; line-height: 1.5; }
.edc-link { justify-self: end; font: inherit; font-size: 12px; color: #2F7D68; background: transparent; border: 0; padding: 4px 0; white-space: nowrap; cursor: pointer; }
.edc-sub { margin-top: 4px; font-size: 12px; color: #6B7F77; }
.edc-qr { display: flex; flex-wrap: wrap; gap: 8px; margin: 6px 0 10px 36px; }
.edc-qr-btn { white-space: nowrap; flex-shrink: 0; }

/* ============================================================
   批 2a · F1 去哪里首屏 / 冲稳保 / 条件标签组 / 备选折叠 / 暂不建议归组
   令牌取自第 2 批效果图 D2（#P1）。标签与分值一律 nowrap + 不收缩。
   ============================================================ */
#planner-result-view [hidden] { display: none !important; }
#planner-result-view .pl-p1-head { padding: 0; margin: 0 0 10px; background: transparent; border: 0; box-shadow: none; }
#planner-result-view .pl-concl {
  background: #f6eedc; border-left: 3px solid #a5782b; border-radius: 4px 10px 10px 4px;
  padding: 9px 12px; margin: 0;
}
#planner-result-view .pl-concl-k { display: block; font-size: 11px; color: #a5782b; font-weight: 600; margin-bottom: 1px; }
#planner-result-view .pl-concl-t { margin: 0; font-size: 15px; font-weight: 600; line-height: 1.55; color: #1b2233; }
#planner-result-view .pl-kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin-top: 10px; }
#planner-result-view .pl-kpi {
  background: #fff; border: 1px solid #e6e3da; border-radius: 12px; padding: 9px 6px; text-align: center; min-width: 0;
}
#planner-result-view .pl-kpi-v { white-space: nowrap; line-height: 1.15; font-size: 11px; color: #8b909a; }
#planner-result-view .pl-kpi-v b { font-family: Georgia, "Times New Roman", "Songti SC", serif; font-size: 24px; font-weight: 400; color: #1b2233; }
#planner-result-view .pl-kpi-main .pl-kpi-v b { color: #2d6a4d; }
#planner-result-view .pl-kpi-alt .pl-kpi-v b { color: #a5782b; }
#planner-result-view .pl-kpi-l { font-size: 11px; color: #8b909a; margin-top: 2px; flex-shrink: 0; }

#planner-result-view .pl-tiers { background: #fff; border: 1px solid #e6e3da; border-radius: 14px; padding: 12px; margin: 0 0 10px; }
#planner-result-view .pl-tiers .card-top-row { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; margin-bottom: 8px; }
#planner-result-view .pl-tiers-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
#planner-result-view .pl-tier { border: 1px solid #e6e3da; border-radius: 10px; background: #faf9f6; padding: 8px 7px; min-width: 0; }
#planner-result-view .pl-tier-h { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: nowrap; gap: 4px; }
#planner-result-view .pl-tier-mark { font-size: 22px; line-height: 1; font-weight: 700; color: #1e2943; }
#planner-result-view .pl-tier-rush .pl-tier-mark { color: #a9503a; }
#planner-result-view .pl-tier-fit .pl-tier-mark { color: #a5782b; }
#planner-result-view .pl-tier-safe .pl-tier-mark { color: #2d6a4d; }
#planner-result-view .pl-tier-sub { font-size: 10.5px; color: #8b909a; flex-shrink: 0; }
#planner-result-view .pl-tier-v { font-size: 12px; font-weight: 600; margin-top: 7px; line-height: 1.4; }
#planner-result-view .pl-tier-s { font-size: 10.5px; color: #8b909a; margin-top: 2px; }
#planner-result-view .pl-tier-eq { font-size: 11.5px; color: #8b909a; margin: 8px 0 0; line-height: 1.55; }
#planner-result-view .pl-score-badge { font-size: 13px; font-weight: 700; color: #1e2943; white-space: nowrap; flex-shrink: 0; }

/* 条件标签组 */
.pl-cond { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; }
.pl-cond-row { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 4px 8px; align-items: start; }
.pl-cond-k { font-size: 11.5px; font-weight: 700; padding-top: 3px; white-space: nowrap; flex-shrink: 0; }
.pl-cond-ok .pl-cond-k { color: #2d6a4d; }
.pl-cond-pd .pl-cond-k, .pl-cond-plain .pl-cond-k { color: #a5782b; }
.pl-cond-no .pl-cond-k { color: #a9503a; }
.pl-cond-tags { display: flex; flex-wrap: wrap; gap: 5px; min-width: 0; }
.pl-cond-tag {
  display: inline-block; max-width: 100%; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; flex-shrink: 0; font-size: 11.5px; line-height: 1.3; border-radius: 999px; padding: 4px 9px;
  background: #e5efe8; color: #2d6a4d; font-weight: 600;
}
.pl-cond-pd .pl-cond-tag, .pl-cond-plain .pl-cond-tag { background: #f6eedc; color: #a5782b; border: 1px dashed #e6d6b2; }
.pl-cond-no .pl-cond-tag { background: #f8e8e2; color: #a9503a; }
.pl-cond-full { margin-top: 2px; font-size: 12px; color: #4a5263; }
.pl-cond-full summary { cursor: pointer; color: #2f5a8f; font-size: 12px; }
.pl-cond-full p { margin: 4px 0 0; line-height: 1.55; }
.of-path-detail dd .pl-cond { margin: 2px 0 0; }
.path-comparison-note .pl-cond { margin-top: 4px; }
.of-notrec-body .pl-cond { margin-top: 4px; }

/* 备选折叠与暂不建议归组 */
.pl-sum-more { margin-top: 8px; border: 1px solid #e6e3da; border-radius: 10px; background: #fff; }
.pl-sum-more > summary { cursor: pointer; padding: 9px 12px; font-size: 13px; font-weight: 600; color: #2f5a8f; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pl-sum-more > .pl-sum-row { margin: 0 8px 8px; }
.pl-no-groups { border: 1px solid #e6e3da; border-radius: 12px; background: #fff; padding: 2px 12px; }
.pl-no-group { display: flex; align-items: center; flex-wrap: nowrap; gap: 8px; padding: 8px 0; border-top: 1px dashed #e6e3da; min-width: 0; }
.pl-no-group:first-child { border-top: 0; }
.pl-no-tag { font-size: 11.5px; font-weight: 600; background: #f8e8e2; color: #a9503a; border-radius: 999px; padding: 4px 9px; white-space: nowrap; flex-shrink: 0; }
.pl-no-names { flex: 1 1 auto; min-width: 0; font-size: 12px; color: #4a5263; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pl-no-n { font-family: Georgia, "Times New Roman", serif; font-size: 14px; color: #4a5263; white-space: nowrap; flex-shrink: 0; }
#planner-result-view .pl-sum-foot > summary { cursor: pointer; list-style: none; color: #7a746b; font-size: 11.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#planner-result-view .pl-sum-foot > summary::-webkit-details-marker { display: none; }
#planner-result-view .pl-sum-foot > p { margin: 6px 0 0; font-size: 11.5px; line-height: 1.7; }
#planner-result-view .pnote-fold > summary { cursor: pointer; list-style: none; }
#planner-result-view .pnote-fold > summary::-webkit-details-marker { display: none; }
#planner-result-view .pnote-fold > summary h5 { margin: 0; display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
#planner-result-view .pnote-fold[open] > summary { margin-bottom: 8px; }
#planner-result-view .of-path-detail > .of-path-card-reason { margin: 6px 0 4px; }
#planner-result-view .pl-sum-row { flex-direction: row; align-items: flex-start; justify-content: space-between; gap: 8px; }
#planner-result-view .pl-sum-row .pl-sum-text { flex: 1 1 auto; min-width: 0; }
#planner-result-view .pl-sum-row .pl-sum-badge { align-self: flex-start; white-space: nowrap; flex-shrink: 0; }

/* ============================================================
   批 2a · F2 怎么去：只列有卡点的科目，说明默认 2 行
   ============================================================ */
#screen-subject-diagnosis [hidden] { display: none !important; }
#screen-subject-diagnosis .go-how-empty { margin: 8px 0; }
#screen-subject-diagnosis .diag-stuck-tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 8px; }
#screen-subject-diagnosis .diag-stuck-tag {
  display: inline-block; max-width: 100%; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; flex-shrink: 0; font-size: 11.5px; line-height: 1.3; padding: 4px 9px; border-radius: 999px;
  background: #f6eedc; color: #a5782b; border: 1px solid #e6d6b2; font-weight: 600;
}
#screen-subject-diagnosis .diag-fold { margin: 6px 0; }
#screen-subject-diagnosis .diag-fold > summary {
  list-style: none; cursor: pointer; display: flex; align-items: flex-start; flex-wrap: nowrap; gap: 8px;
}
#screen-subject-diagnosis .diag-fold > summary::-webkit-details-marker { display: none; }
#screen-subject-diagnosis .diag-fold-pre {
  flex: 1 1 auto; min-width: 0; font-size: 13px; line-height: 1.6; color: #43403a;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
#screen-subject-diagnosis .diag-fold-more { font-size: 12px; color: #2f5a8f; padding-top: 2px; white-space: nowrap; flex-shrink: 0; }
#screen-subject-diagnosis .diag-fold[open] > summary { display: none; }
#screen-subject-diagnosis .how-detail-fold { margin-top: 6px; }
#screen-subject-diagnosis .how-detail-fold > summary { cursor: pointer; font-size: 12.5px; color: #2f5a8f; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ============================================================
   批 2a · F3 测评结果页：一张条形图、结论一句话、长段折叠；谁来答不挤
   ============================================================ */
.sop-bars { display: flex; flex-direction: column; gap: 8px; }
.sop-bar-row { display: grid; grid-template-columns: minmax(0, 108px) minmax(40px, 1fr) auto; gap: 8px; align-items: center; }
.sop-bar-name { display: flex; flex-direction: column; min-width: 0; }
.sop-bar-name b { font-size: 13px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.sop-bar-name small { font-size: 10.5px; color: #8b909a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sop-bar-track { height: 10px; border-radius: 999px; background: #ebe8df; overflow: hidden; display: block; }
.sop-bar-track i { display: block; height: 100%; background: #4f8a6c; border-radius: 999px; }
.sop-bar-row.warn .sop-bar-track i { background: #c98b3b; }
.sop-bar-row.total .sop-bar-track i { background: #1e2943; }
.sop-bar-row.total .sop-bar-name b { color: #1e2943; }
.sop-bar-val { font-family: Georgia, "Times New Roman", serif; font-size: 15px; font-weight: 400; min-width: 28px; text-align: right; white-space: nowrap; flex-shrink: 0; }

/* ============================================================
   R2 版式：测评结果页与方案报告 v2 同一个壳（颜色 / 字号 / 卡片全部复用 report.css 的 .rv2 变量与类）。
   容器 #as-result-view.rv2.as-rv2-shell；这里只补测评页自己的细节，一律以 .as-rv2- 开头。
   ============================================================ */
.as-rv2-shell { background: var(--bg); padding-bottom: 24px; }
.as-rv2-shell > * { flex-shrink: 0; }
.as-rv2-shell .hero { margin-top: 12px; }
.as-rv2-shell .hero h1 { word-break: keep-all; overflow-wrap: anywhere; }
.as-rv2-shell .hero .meta { margin: 0 0 6px; }
.as-rv2-shell .hero .diag { margin-top: 10px; }
.as-rv2-shell .kpis { margin: 0 0 10px; }
.as-rv2-shell .kpi { min-width: 0; }
.as-rv2-shell .kpi-val { overflow: hidden; text-overflow: ellipsis; }
.as-rv2-shell .as-rv2-kpi-name .kpi-val { font-size: 16px; line-height: 1.6; }
.as-rv2-shell .as-rv2-kpi-wide { grid-column: 1 / -1; }
.as-rv2-shell .narrative-card { background: #fff; border: 0; border-left: 4px solid var(--gold-d); border-radius: 14px; padding: 14px; margin: 0 0 10px; box-shadow: 0 1px 0 rgba(0,0,0,.02); }
.as-rv2-shell .narrative-card .nr-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; margin-bottom: 8px; font-size: 14px; color: var(--navy); }
.as-rv2-shell .narrative-card .nr-title { white-space: nowrap; flex-shrink: 0; }
.as-rv2-shell .narrative-card .nr-text { font-family: inherit; font-size: 14px; line-height: 1.65; color: var(--ink); white-space: normal; }
.as-rv2-shell .dim-levels { margin: 0 0 10px; }
.as-rv2-shell .notice { border: 0; border-left: 4px solid var(--amber); border-radius: 14px; background: var(--amber-bg); color: var(--ink); padding: 14px; margin: 0 0 10px; font-size: 14px; }
.as-rv2-shell .notice b { color: var(--amber); font-size: 14px; }
.as-rv2-shell .notice.soft { background: var(--blue-bg); border-left-color: var(--blue); }
.as-rv2-shell .notice.soft b { color: var(--blue); }
.as-rv2-shell .sop-sec { box-shadow: 0 1px 0 rgba(0,0,0,.02); }
.as-rv2-shell .sop-head { border-bottom: 0; padding-bottom: 0; margin-bottom: 10px; font-size: 16px; font-weight: 800; color: var(--navy); line-height: 1.35; }
.as-rv2-shell .sop-no { width: auto; height: auto; background: none; border-radius: 0; color: var(--gold-d); font-size: 24px; font-weight: 800; line-height: 1; white-space: nowrap; flex-shrink: 0; }
.as-rv2-shell .sop-item { border-left: 0; background: var(--grey); border-radius: 10px; padding: 8px 10px; margin: 0 0 6px; }
.as-rv2-shell .sop-item.good { background: var(--green-bg); }
.as-rv2-shell .sop-item.warn { background: var(--amber-bg); }
.as-rv2-shell .sop-item.bridge { background: var(--blue-bg); }
.as-rv2-shell .sop-item.ref { background: var(--red-bg); }
.as-rv2-shell .sop-item .it-head { font-size: 14px; color: var(--navy); }
.as-rv2-shell .sop-item .it-head b { color: var(--green); font-size: 15px; font-weight: 800; white-space: nowrap; flex-shrink: 0; }
.as-rv2-shell .sop-item.warn .it-head b { color: var(--amber); }
.as-rv2-shell .sop-item p { font-size: 13.5px; color: var(--sub2); line-height: 1.6; margin: 3px 0 0; }
.as-rv2-shell .sop-act { display: flex; gap: 8px; align-items: flex-start; margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--line); font-size: 13.5px; line-height: 1.6; color: var(--ink); }
.as-rv2-shell .sop-act-k { font-size: 12.5px; font-weight: 700; color: var(--gold-d); white-space: nowrap; flex-shrink: 0; padding-top: 1px; }
.as-rv2-shell .sop-act-v { min-width: 0; }
.as-rv2-shell .ref-badge { white-space: nowrap; flex-shrink: 0; background: var(--red); }
.as-rv2-shell .sop-note, .as-rv2-shell .sop-boundary { font-size: 12.5px; color: var(--sub); line-height: 1.6; }
.as-rv2-shell .sop-bar-name b, .as-rv2-shell .sop-bar-val { color: var(--navy); }
.as-rv2-shell .sop-bar-name small { font-size: 12px; color: var(--sub); }
.as-rv2-shell .sop-bar-track { background: #E2DED4; }
.as-rv2-shell .sop-bar-track i { background: var(--green); }
.as-rv2-shell .sop-bar-row.warn .sop-bar-track i { background: var(--amber); }
.as-rv2-shell .sop-bar-row.total .sop-bar-track i { background: var(--navy); }
.as-rv2-shell .sop-quote, .as-rv2-shell .sop-guide { font-size: 13.5px; line-height: 1.6; }
.as-rv2-shell .kb-block { background: #fff; border-left: 4px solid var(--gold-d); border-radius: 14px; padding: 14px; margin: 0 0 10px; }
.as-rv2-shell .kb-block h5 { font-size: 16px; color: var(--navy); }
.as-rv2-shell .as-rv2-attr { font-size: 12.5px; line-height: 1.6; color: var(--sub); overflow-wrap: anywhere; margin: 0; }
.as-rv2-shell .primary-btn { margin-top: 6px; background: var(--navy); color: #fff; }

#as-who-gate [data-who] {
  display: block; margin: 0 0 10px; padding: 12px 14px; border: 1.5px solid #d2e7dc; border-radius: 14px;
  background: #fff; box-shadow: none; text-align: left; cursor: pointer; box-sizing: border-box; overflow: visible;
}
#as-who-gate [data-who]:last-child { margin-bottom: 0; }
#as-who-gate [data-who] .card-top-row { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; }
#as-who-gate [data-who] .entity-name { font-size: 15px; font-weight: 700; white-space: nowrap; flex-shrink: 0; }
#as-who-gate [data-who] .df-hint { margin-top: 4px; line-height: 1.55; white-space: normal; }

/* ============================================================
   批 2a · F4 家庭动力报告：深色结论卡、六维一次、四格类型、会议模板折叠、家长端不显示待补
   ============================================================ */
#fd-report > .fd-concl {
  background: #1e2943; color: #e9ecf4; border: 0; border-radius: 16px; padding: 4px 14px; box-shadow: none;
}
#fd-report .fd-concl .fd-c-p { margin: 0; padding: 10px 0; border-top: 1px solid rgba(255,255,255,.1); line-height: 1.6; font-size: 14px; }
#fd-report .fd-concl .fd-c-p:first-child { border-top: 0; }
#fd-report .fd-concl .fd-c-k { display: block; font-size: 12px; font-weight: 600; color: #e8c377; margin-bottom: 2px; }
#fd-report .fd-concl .fd-c-v { display: block; }
#fd-report .fd-concl .fd-c-note { color: #a3acc2; font-size: 12px; margin: 0; padding: 8px 0; }
#fd-report .fd-dim-scorebars .fd-dim-scorebar-item { margin: 0 0 8px; }
#fd-report .fd-type-tags { display: grid; grid-template-columns: 1fr; gap: 8px; }
#fd-report .fd-type-tag-card { border: 1px solid #e6e3da; background: #faf9f6; border-radius: 12px; padding: 9px 10px; min-width: 0; margin: 0; }
#fd-report .fd-type-tag-name { font-size: 13px; font-weight: 700; line-height: 1.4; }
#fd-report .fd-type-tag-wording { margin: 4px 0 0; font-size: 12px; line-height: 1.5; color: #4a5263; }
#fd-report .fd-three { margin: 0; padding: 0; list-style: none; counter-reset: fd3; display: flex; flex-direction: column; gap: 8px; }
#fd-report .fd-three li { counter-increment: fd3; display: flex; align-items: flex-start; gap: 10px; background: #faf9f6; border: 1px solid #e6e3da; border-radius: 12px; padding: 9px 10px; font-size: 14px; font-weight: 600; line-height: 1.5; }
#fd-report .fd-three li::before { content: "0" counter(fd3); flex: 0 0 auto; white-space: nowrap; font-family: Georgia, serif; font-size: 12px; color: #fff; background: #2d6a4d; border-radius: 6px; padding: 3px 7px; }
#fd-report .fd-fold { background: #fff; border-radius: 14px; margin: 0 0 12px; box-shadow: 0 1px 4px rgba(12,27,22,.06); padding: 0; }
#fd-report .fd-fold > summary { cursor: pointer; display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; padding: 12px 14px; font-size: 14px; font-weight: 700; color: #2f5a8f; list-style: none; }
#fd-report .fd-fold > summary::-webkit-details-marker { display: none; }
#fd-report .fd-fold > summary small { font-size: 11px; font-weight: 400; color: #8b909a; white-space: nowrap; flex-shrink: 0; }
#fd-report .fd-fold > .fd-sec, #fd-report .fd-fold > article, #fd-report .fd-fold > p { margin-left: 14px; margin-right: 14px; }
#fd-report .fd-fold[open] { padding-bottom: 10px; }
#fd-report [data-batch-d-slot="meeting-templates"] { background: transparent; box-shadow: none; padding: 0; }
#fd-report [data-batch-d-slot="meeting-templates"]:empty { display: none; margin: 0; }
#fd-report .fd-role-grid h4 { white-space: nowrap; }
#fd-report .fd-three-t { flex: 1 1 auto; min-width: 0; }
#fd-report .fd-dim-scorebars .zc-scorebar { display: grid; grid-template-columns: 112px minmax(40px, 1fr) 24px; gap: 8px; align-items: center; margin: 0; }
#fd-report .fd-dim-scorebars .zc-sb-head { display: block; min-width: 0; }
#fd-report .fd-dim-scorebars .zc-sb-label { white-space: nowrap; font-size: 13px; }
#fd-report .fd-dim-scorebars [data-grade-tag] { display: none; }
#fd-report .fd-dim-scorebars .zc-sb-track { margin: 0; }
#fd-report .fd-dim-scorebars .zc-sb-fill { background: #4f8a6c !important; }
#fd-report .fd-dim-scorebars .zc-sb-value { text-align: right; font-family: Georgia, serif; font-size: 15px; white-space: nowrap; flex-shrink: 0; margin: 0; }
#fd-report .fd-dim-scorebars .fd-dim-scorebar-item { margin: 0; } #fd-report .fd-dim-scorebars .zc-scorebar { padding: 2px 0; }

/* ============================================================
   批 2a · F5/F9 方案报告入口：旧版换成「生成中」卡；等规划师确认页补三步条与按钮
   ============================================================ */
#rp-body .legacy-wait { background: #fff; border-radius: 16px; padding: 14px 16px; margin: 10px 0; box-shadow: 0 1px 4px rgba(12,27,22,.06); text-align: left; }
#rp-body .legacy-wait-top { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; margin-bottom: 6px; }
#rp-body .legacy-wait-k { font-size: 13px; color: #a5782b; letter-spacing: .02em; white-space: nowrap; }
#rp-body .legacy-wait-badge { font-size: 12px; font-weight: 700; color: #a5782b; background: #f6eedc; border: 1px solid #e6d6b2; border-radius: 999px; padding: 4px 10px; white-space: nowrap; flex-shrink: 0; }
#rp-body .legacy-wait .plan-wait-title { font-size: 17px; font-weight: 800; line-height: 1.45; margin: 4px 0; }
#rp-body .legacy-wait .plan-wait-miss { color: #4a5263; font-size: 14px; margin: 0 0 12px; }
#rp-body .legacy-wait .btn-submit-main { width: auto; padding: 12px 22px; }
#rp-body .plan-wait-steps { display: flex; align-items: center; flex-wrap: nowrap; gap: 8px; list-style: none; margin: 4px 0 14px; padding: 0; }
#rp-body .plan-wait-steps li { font-size: 12px; color: #8b909a; background: #f0efeb; border: 1px dashed #d6d3cb; border-radius: 999px; padding: 5px 10px; white-space: nowrap; flex-shrink: 0; }
#rp-body .plan-wait-steps li.is-done { color: #2d6a4d; background: #e5efe8; border: 1px solid transparent; }
#rp-body [data-signoff-wait] { margin-top: 12px; }

/* ============================================================
   批 2a · F6 第 4 章：时间线长句折叠
   ============================================================ */
.p5-fold > summary { list-style: none; cursor: pointer; display: flex; align-items: flex-start; flex-wrap: nowrap; gap: 8px; }
.p5-fold > summary::-webkit-details-marker { display: none; }
.p5-fold-pre { flex: 1 1 auto; min-width: 0; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.p5-fold-more { font-size: 12px; color: #2f5a8f; white-space: nowrap; flex-shrink: 0; padding-top: 1px; }
.p5-fold[open] > summary { display: none; }

/* ============================================================
   批 2a · F7 教练：上传面板收起后标题条单行（≤ 48px）
   ============================================================ */
#exam-upload-entry:not([open]) > summary { padding: 10px 12px !important; border-bottom: 0 !important; }
#exam-upload-entry:not([open]) > summary .card-desc { display: none !important; }
#exam-upload-entry:not([open]) > summary .card-top-row { gap: 8px; }
#exam-upload-entry:not([open]) > summary .entity-name { font-size: 14px !important; min-width: 0; overflow: hidden; white-space: nowrap; }
#exam-upload-entry:not([open]) > summary .entity-name > span:last-child { overflow: hidden; text-overflow: ellipsis; }

/* ============================================================
   批 2a · F8 教练问答：编号步骤带说明、追问成块
   ============================================================ */
.plan-card-h5 .pk-step-more { margin: 4px 0 0; font-size: 13px; line-height: 1.7; color: #43403a; }
.plan-card-h5 .pk-step-more:first-of-type { margin-top: 6px; }
.plan-card-h5 .pk-ask { margin-top: 6px; padding: 8px 10px; border-left: 3px solid #a5782b; background: #faf6ec; border-radius: 0 10px 10px 0; }
.plan-card-h5 .pk-ask-q { font-weight: 700; line-height: 1.6; }
.plan-card-h5 .pk-ask-more { margin-top: 4px; font-size: 13px; line-height: 1.7; color: #43403a; }

/* ============================================================
   批 2a · F10 试卷上传：考试日期中文「年 / 月 / 日」下拉（不用原生 date 控件）
   ============================================================ */
#exam-upload-entry .exam-date-zh::after { content: none !important; }
#exam-upload-entry .exam-date-selects { display: grid; grid-template-columns: 1.25fr 1fr 1fr; gap: 6px; }
#exam-upload-entry .exam-date-selects select {
  width: 100%; min-width: 0; height: 38px; box-sizing: border-box; border: 1px solid #DCE9E2; border-radius: 8px;
  padding: 0 6px; font-size: 13px; background: #fff; color: #142821; white-space: nowrap; text-overflow: ellipsis;
}

/* ============================================================
   批 2a · F11 上传面板：只显示本次一份，其余折叠；每条双行
   ============================================================ */
#exam-upload-list .exam-mat-row { display: flex; align-items: center; flex-wrap: nowrap; gap: 8px; padding: 8px 0; border-top: 1px dashed #e6e3da; min-width: 0; }
#exam-upload-list > .exam-mat-row:first-child, #exam-upload-list .exam-history-body > .exam-mat-row:first-child { border-top: 0; }
#exam-upload-list .exam-mat-main { flex: 1 1 auto; min-width: 0; }
#exam-upload-list .exam-mat-l1 { font-size: 13px; font-weight: 600; color: #1b2233; line-height: 1.5; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#exam-upload-list .exam-mat-l2 { font-size: 12px; color: #64748B; line-height: 1.5; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#exam-upload-list .exam-mat-l2 a.material-open-link { display: inline; min-height: 0; padding: 0; white-space: nowrap; }
#exam-upload-list .exam-mat-row .exam-parse-btn { flex: 0 0 auto; white-space: nowrap; flex-shrink: 0; margin: 0; }
#exam-upload-list .exam-history-fold { margin-top: 8px; border: 1px solid #e6e3da; border-radius: 10px; background: #fff; }
#exam-upload-list .exam-history-fold > summary { cursor: pointer; padding: 9px 12px; font-size: 13px; font-weight: 600; color: #2f5a8f; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#exam-upload-list .exam-history-body { padding: 0 12px 8px; }
#exam-upload-entry .exam-history-body #exam-analysis-list { margin-top: 8px; }

/* 批 2a · R 教练：长句默认 2 行；诊断卡数字不重复 */
.plan-card-h5 .pk-fold > summary { list-style: none; cursor: pointer; display: flex; align-items: flex-start; flex-wrap: nowrap; gap: 8px; }
.plan-card-h5 .pk-fold > summary::-webkit-details-marker { display: none; }
.plan-card-h5 .pk-fold-pre { flex: 1 1 auto; min-width: 0; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.plan-card-h5 .pk-fold-more { font-size: 12px; color: #2f5a8f; white-space: nowrap; flex-shrink: 0; padding-top: 1px; }
.plan-card-h5 .pk-fold[open] > summary { display: none; }

/* ============================================================
   批 2a · P1 去哪里：路径卡三行（名称 + 分数同一行）、顶部一行小标签、省情要点与「去问」下沉
   ============================================================ */
#planner-result-view .pl-sum-row { display: block; }
#planner-result-view .pl-sum-row .pl-sum-text { display: block; }
#planner-result-view .pl-sum-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 8px; min-width: 0; }
#planner-result-view .pl-sum-head .pl-sum-name { flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#planner-result-view .pl-sum-head .pl-sum-badge { flex: 0 0 auto; align-self: center; white-space: nowrap; }
#planner-result-view .pl-sum-row .pl-cond { margin-top: 6px; }
#planner-result-view .pl-chips-line { display: flex; flex-wrap: nowrap; gap: 6px; margin: 0 0 8px; overflow: hidden; }
#planner-result-view .pl-chips-line .pl-chip { flex: 0 0 auto; white-space: nowrap; font-size: 11.5px; line-height: 1.3; color: #4a5263; background: rgba(255,255,255,.7); border: 1px solid #e6e3da; border-radius: 999px; padding: 4px 9px; }
#planner-result-view .pl-ask-foot { margin: 14px 0 6px; }

/* ============================================================
   批 2a · P2 怎么去：已签发深度方案首屏（结论 / 数字卡 / 各科卡点 / 本周三件事）
   ============================================================ */
#screen-subject-diagnosis .go-how-deep { margin: 0 0 12px; }
#screen-subject-diagnosis .go-how-conclusion { background: #f5edd9; border-left: 4px solid #a5782b; border-radius: 12px; padding: 12px 14px; margin-bottom: 10px; }
#screen-subject-diagnosis .go-how-conclusion-k { font-size: 12px; color: #a5782b; font-weight: 600; margin-bottom: 4px; }
#screen-subject-diagnosis .go-how-conclusion-v { font-size: 16px; font-weight: 700; line-height: 1.55; color: #1f2937; }
#screen-subject-diagnosis .go-how-nums { display: flex; gap: 8px; margin-bottom: 12px; }
#screen-subject-diagnosis .go-how-num { flex: 1 1 0; min-width: 0; background: #fff; border: 1px solid #e6e3da; border-radius: 14px; padding: 10px 6px; text-align: center; }
#screen-subject-diagnosis .go-how-num-v { font-size: 12px; color: #6b7280; white-space: nowrap; }
#screen-subject-diagnosis .go-how-num-v b { font-family: Georgia, "Times New Roman", serif; font-size: 24px; color: #1f4d3d; font-weight: 600; }
#screen-subject-diagnosis .go-how-num-l { font-size: 12px; color: #6b7280; margin-top: 2px; }
#screen-subject-diagnosis .go-how-h { font-size: 14px; font-weight: 700; color: #1f2937; margin: 4px 0 8px; }
#screen-subject-diagnosis .go-how-subjects { margin-bottom: 12px; }
#screen-subject-diagnosis .go-how-subj { display: flex; align-items: center; flex-wrap: nowrap; gap: 10px; background: #fff; border: 1px solid #e6e3da; border-radius: 12px; padding: 10px 12px; margin-bottom: 6px; min-width: 0; }
#screen-subject-diagnosis .go-how-subj-n { font-weight: 700; font-size: 14px; color: #1f2937; }
#screen-subject-diagnosis .go-how-subj .diag-stuck-tag { min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
#screen-subject-diagnosis .go-how-week-list { margin: 0; padding: 0; list-style: none; counter-reset: wk; }
#screen-subject-diagnosis .go-how-week-list li { counter-increment: wk; display: flex; align-items: flex-start; gap: 8px; background: #fff; border: 1px solid #e6e3da; border-radius: 12px; padding: 10px 12px; margin-bottom: 6px; font-size: 13px; line-height: 1.6; }
#screen-subject-diagnosis .go-how-week-list li::before { content: counter(wk); flex: 0 0 auto; width: 20px; height: 20px; border-radius: 50%; background: #1f4d3d; color: #fff; font-size: 12px; line-height: 20px; text-align: center; margin-top: 1px; }
#screen-subject-diagnosis .go-how-who { flex: 0 0 auto; background: #e5efe8; color: #2d6a4d; border-radius: 999px; padding: 1px 8px; font-size: 12px; font-weight: 600; }
#screen-subject-diagnosis .go-how-what { flex: 1 1 auto; min-width: 0; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

/* 批 2a · P3 测评得分行：副标题只写「第 N 位 / 并列第 N 位」，单行不截断 */
.sop-bar-name small { white-space: nowrap; overflow: visible; text-overflow: clip; }

/* 批 2a · P4 聊天气泡里的「解析试卷」：与上传面板同款按钮，不带浏览器默认灰框 */
.bubble .exam-parse-btn-bubble { display: inline-block; margin: 8px 0 0; white-space: nowrap; }
.exam-history-fold .exam-analysis-all { margin-top: 8px; }

/* 批 2a · P5 历史折叠展开后限高内滚：口径与 #exam-analysis-list（35vh）一致，聊天区不被挤出视口 */
#exam-upload-entry .exam-history-fold[open] > .exam-history-body { max-height: 35vh; overflow-y: auto; -webkit-overflow-scrolling: touch; }

/* 终轮 #3：家长压力综合行（总信号分 + 灯从哪来），不画条形图 */
.as-rv2-shell .sop-total-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 10px; padding-top: 8px; border-top: 1px solid #E2DED4; }
.as-rv2-shell .sop-total-line b { font-size: 13px; color: var(--navy); }
.as-rv2-shell .sop-total-line .sop-total-val { font-family: Georgia, "Times New Roman", serif; font-size: 15px; color: var(--navy); }
.as-rv2-shell .sop-total-line small { flex-basis: 100%; font-size: 12px; color: var(--sub); }


/* R5 b2：家庭动力诊断报告显示在「家庭」页：有报告时收起六步问卷，「重新做一次」展开 */
#screen-family-dynamics.fd-showing-report #fd-progress,
#screen-family-dynamics.fd-showing-report .fd-body,
#screen-family-dynamics.fd-showing-report .fd-nav,
#screen-family-dynamics.fd-showing-report #fd-error { display: none; }
#fd-report-host { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 0 12px 12px; }
#fd-report-host[hidden], #fd-old-note[hidden] { display: none; }
.fd-redo-bar { display: flex; justify-content: flex-end; padding: 10px 16px 0; }
.fd-redo-bar button { white-space: nowrap; flex-shrink: 0; min-height: 36px; padding: 6px 14px; border-radius: 12px; border: 1px solid #d8dee9; background: #fff; color: #1f2937; font-size: 13px; }
.fd-old-note { margin: 10px 16px 0; padding: 10px 12px; border-radius: 10px; background: #fff7e6; color: #8a5a00; }
