/* 智慧升学 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） */
  --c-brand:      #2b5ce6;  /* 5.56:1 */
  --c-brand-soft: #eaf0ff;
  --c-brand-deep: #2450c8;
  --c-ink:        #1c2333;  /* 15.70:1 */
  --c-ink-2:      #55617a;  /* 6.22:1 */
  --c-ink-3:      #646c7e;  /* 5.27:1；在浅底 #f8fafd 上仍有 5.04:1 */
  --c-line:       #e6ebf5;
  --c-bg-soft:    #f8fafd;
  --c-warn-bg:    #fff9e8;
  --c-warn-ink:   #8a6d2b;  /* 对 --c-warn-bg 4.64:1 */

  /* 圆角（3 档） */
  --r-sm: 10px;  --r-md: 14px;  --r-lg: 18px;

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

* { 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;
  background: linear-gradient(135deg, #eef2f9 0%, #e4ebf7 50%, #eef0f8 100%);
  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 { margin-top: var(--sp-4); font-size: var(--fs-sm); color: var(--c-ink-3); background: var(--c-bg-soft); padding: var(--sp-2) var(--sp-4); border-radius: var(--r-sm); }
.phone {
  width: 350px;
  height: 730px;
  /* 当视口矮于 phone+stage边距（88px）时，外框收缩到恰好填满视口，
     避免手机底部落在窗口外且外层无法滚动的缺陷（2026-08-13 fix） */
  max-height: calc(100dvh - var(--sp-10) - var(--sp-12));
  background: #0d0f14; border-radius: 48px; padding: 10px;
  box-shadow: 0 30px 60px -18px rgba(30,50,110,.35), 0 8px 24px rgba(30,50,110,.12);
}
.screen {
  width: 100%; height: 100%; border-radius: 40px; overflow: hidden;
  background: #f6f8fc; 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 {
  position: absolute; top: 10px; left: 50%; transform: translateX(-50%);
  width: 110px; height: 26px; background: #0d0f14; border-radius: 999px; z-index: 50;
}
.statusbar {
  height: 48px; display: flex; justify-content: space-between; align-items: flex-end;
  padding: 0 var(--sp-6) var(--sp-1); font-size: var(--fs-caption); font-weight: 600; flex-shrink: 0;
  /* B3（2026-08-23 F5 修复）：壳层必须不透明，否则聊天内容在极端滚动情况下
     会从状态栏底下透出来，与「📶 🔋」压住「提分」标题肉眼可见地叠在一起。 */
  background: var(--c-bg-soft); position: relative; z-index: 3;
}

/* ---------- 屏切换 ---------- */
.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: var(--c-bg-soft); 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 .hello { font-size: var(--fs-sm); color: var(--c-ink-3); }
.home-head .appname { font-size: var(--fs-brand); font-weight: 800; color: var(--c-brand); margin-top: var(--sp-1); letter-spacing: 1px; }
.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));
}
.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, #2b5ce6, #4f7dff); box-shadow: 0 10px 22px -8px #2b5ce688; }
.fcard.orange { background: linear-gradient(135deg, #ff8a3d, #ffa94d); box-shadow: 0 10px 22px -8px #ff8a3d88; }
.fcard.purple { background: linear-gradient(135deg, #7b5cf0, #9b7bff); box-shadow: 0 10px 22px -8px #7b5cf088; }
.tabbar {
  display: flex; justify-content: space-around; padding: var(--sp-2) 0 var(--sp-6);
  background: #fff; border-top: 1px solid var(--c-line); flex-shrink: 0;
}
.tab {
  text-align: center; font-size: var(--fs-caption); color: var(--c-ink-3); cursor: pointer;
  min-height: var(--tap); min-width: var(--tap);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
}
.tab .t-icon { font-size: var(--fs-section); display: block; margin-bottom: 2px; }
.tab.active { color: var(--c-brand); font-weight: 600; }

/* ---------- 屏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-end; flex-shrink: 0; }
.msg .avatar {
  width: 32px; height: 32px; border-radius: 50%; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center; font-size: var(--fs-title);
  background: linear-gradient(135deg, #2b5ce6, #6f96ff); color: #fff;
}
.bubble {
  max-width: 86%; padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md);
  font-size: var(--fs-body); line-height: var(--lh-body);
  background: #fff; color: var(--c-ink); border-top-left-radius: 4px;
  box-shadow: 0 2px 8px rgba(40,60,120,.06); white-space: pre-wrap; word-break: break-word;
}
.msg.user { justify-content: flex-end; }
.msg.user .bubble {
  background: linear-gradient(135deg, #2b5ce6, #4a76f5); color: #fff;
  border-radius: var(--r-md); border-top-right-radius: 4px;
}
.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, #2b5ce6, #6f96ff); animation: grow 1.2s ease; }
@keyframes grow { from { width: 0; } }
.diag-btn {
  width: 100%; margin-top: var(--sp-2); background: linear-gradient(135deg, #ff8a3d, #ffa14f);
  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 14px -4px #ff8a3d99;
}
.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; }

/* 判定卡沿用诊断卡与卡点行，只给系统推荐和家长改判补一层状态。 */
.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);
}
/* 关键数字（"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);
  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-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; }
.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; }
.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;
}
/* 输入框 16px 不只是排版：iOS Safari 对 <16px 的输入框会在聚焦时强制放大整页 */
.chat-input input { flex: 1; min-height: var(--tap); 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); }
/* H3（2026-08-23 F5 修复，「生成升学规划 →」等 .primary-btn 共用）：渐变右端
   #4a76f5 对白字实测最低 3.28:1。右端加深到 #3a63d6，逐像素实测右端最低
   5.0+:1，左端 #2b5ce6 本身已达标不动。 */
.primary-btn {
  margin: var(--sp-3) var(--sp-4) var(--sp-5); background: linear-gradient(135deg, #2b5ce6, #3a63d6); 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 8px 18px -6px #2b5ce699; flex-shrink: 0;
}
.primary-btn.full { margin: var(--sp-4) 0 var(--sp-1); }
.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 { font-weight: 400; color: var(--c-ink-3); font-size: var(--fs-caption); margin-left: var(--sp-2); }
.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;
}
/* 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: #ff8a3d; }
.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); }
.pnote p { font-size: var(--fs-sm); color: var(--c-warn-ink); line-height: var(--lh-body); }
.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 #7b5cf0;
  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: #6a48e0; background: #f0ebff;
  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: #6a48e0; 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: #7b5cf0; 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 { font-weight: 400; color: var(--c-ink-3); font-size: var(--fs-caption); margin-left: var(--sp-2); }
.scale-list { display: flex; flex-direction: column; gap: var(--sp-3); padding-bottom: var(--sp-5); }
.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: #f0ebff; color: #6a48e0; }

/* ---- 测评列表：分区 + 渐变封面大卡片（对标测评小程序） ---- */
.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); }

/* 封面渐变主题（纯 CSS，无外部图片） */
.cov-indigo { background: linear-gradient(135deg, #5b6bf5, #8a5cf0); }
.cov-sunset { background: linear-gradient(135deg, #ff7e5f, #feb47b); }
.cov-amber  { background: linear-gradient(135deg, #f7971e, #ffd200); }
.cov-teal   { background: linear-gradient(135deg, #11998e, #38ef7d); }
.cov-navy   { background: linear-gradient(135deg, #243b55, #4a6fa5); }
.cov-violet { background: linear-gradient(135deg, #7f53ac, #647dee); }
.cov-green  { background: linear-gradient(135deg, #56ab2f, #a8e063); }
.cov-plum   { background: linear-gradient(135deg, #9d50bb, #6e48aa); }
.cov-coral  { background: linear-gradient(135deg, #ff6a88, #ff99ac); }
.cov-ocean  { background: linear-gradient(135deg, #2193b0, #6dd5ed); }
.cov-moss   { background: linear-gradient(135deg, #63a46c, #a6ce90); }

/* 封面图案叠层（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, #2b5ce6, #6f96ff); border-radius: 999px; transition: width .3s ease; }
.quiz-dim {
  width: fit-content; font-size: var(--fs-caption); font-weight: 600; color: #6a48e0; background: #f0ebff;
  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); }

.radar-box { padding: var(--sp-1) 0 0; text-align: center; flex-shrink: 0; }
.radar-box h4 { font-size: var(--fs-title); font-weight: 800; color: var(--c-ink); line-height: var(--lh-tight); margin-bottom: 2px; }
.score-cards { display: flex; gap: var(--sp-3); padding: var(--sp-2) 0; flex-shrink: 0; }
.score-card { flex: 1; border-radius: var(--r-md); padding: var(--sp-3); text-align: center; }
.score-card.blue-bg { background: var(--c-brand-soft); }
.score-card.green-bg { background: #e6f6ef; }
.score-card .s-label { font-size: var(--fs-sm); color: var(--c-ink-2); }
.score-card .s-value { font-size: var(--fs-num-lg); font-weight: 800; margin-top: 2px; line-height: var(--lh-tight); }
.score-card.blue-bg .s-value { color: var(--c-brand); }
.score-card.green-bg .s-value { color: #1a8a62; }
.score-card .s-sub { font-size: var(--fs-caption); color: var(--c-ink-3); margin-top: 2px; }
.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: justify; 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, #2b5ce6, #4f7dff);
  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);
}
.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); }
.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; }
.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; }
.p1-status, .p1-risk-panel, .p1-pending-panel {
  margin: 0 var(--sp-4) 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); }
.family-open .fo-answer { width: 100%; resize: vertical; font: inherit; }
.attack-panel { padding: var(--sp-3) var(--sp-3) 0; max-height: 46%; overflow: auto; border-bottom: 1px solid var(--c-line); background: #fafbff; }
.attack-scores { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2); margin: var(--sp-2) 0 var(--sp-3); }
.attack-scores label { font-size: var(--fs-sm); display: flex; flex-direction: column; gap: var(--sp-1); }
.attack-result { margin-top: var(--sp-3); font-size: var(--fs-sm); line-height: var(--lh-body); }
.attack-result .ar-item { background: #fff; border: 1px solid var(--c-line); border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3); margin: var(--sp-2) 0; }

/* 首次诊断：进度条 */
.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, #2b5ce6, #6f96ff);
  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, .phone .statusbar { 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, .phone .statusbar { display: none; }

  /* ?shell=phone 演示形态：恢复原来固定 390px 的手机壳外观 */
  body.shell-phone .phone {
    width: 390px; height: 730px;
    max-height: calc(100dvh - var(--sp-10) - var(--sp-12));
    background: #0d0f14; border-radius: 48px; padding: 10px;
    box-shadow: 0 30px 60px -18px rgba(30,50,110,.35), 0 8px 24px rgba(30,50,110,.12);
  }
  body.shell-phone .screen { width: 100%; height: 100%; border-radius: 40px; }
  body.shell-phone .phone .notch, body.shell-phone .phone .statusbar { display: block; }
}

/* 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: #7c5cbf; 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: #7c5cbf; background: #f4efff; }
.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: #7c5cbf; background: #7c5cbf; color: #fff; }
.fd-nav { display: flex; gap: 8px; padding: 10px 16px 16px; }
.fd-nav button { flex: 1; height: 42px; border-radius: 12px; border: 1px solid #d8dee9; background: #fff; }
#fd-submit[hidden], #fd-prev[hidden], #fd-next[hidden] { display: none !important; }
.fd-error { color: #b42318; font-size: 13px; padding: 0 16px 12px; }
details.fd-more { margin: 8px 0 0; font-size: 13px; color: #445; }
details.fd-more summary { cursor: pointer; color: #7c5cbf; }
.fd-l3-mark { background: #fff3b0; border-left: 4px solid #e6c200; 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 {
  background: #fff;
  border: 1px solid #e6ebf5;
  border-radius: 14px;
  padding: 12px 14px;
  margin: 0 0 12px;
}
.subject-diag-title { margin: 0 0 6px; font-size: 16px; }
.subject-diag-hook { margin: 0 0 8px; font-size: 13px; color: #5b6475; line-height: 1.55; }
.subject-diag-fold summary { cursor: pointer; color: #2f6fed; font-weight: 600; }
.subject-diag-section-title { margin: 10px 0 6px; font-size: 13px; font-weight: 700; }
.stuck-point {
  border: 1px solid #e6ebf5;
  border-radius: 10px;
  padding: 8px 10px;
  margin: 0 0 8px;
  background: #f7f9ff;
}
.stuck-point-name { font-weight: 700; color: #2f6fed; }
.stuck-point-signals { margin: 6px 0 0 18px; padding: 0; color: #5b6475; font-size: 13px; }
.must-ask {
  padding: 6px 0;
  font-size: 13px;
  line-height: 1.5;
  border-bottom: 1px dashed #e6ebf5;
}
.diag-what, .diag-where, .diag-how {
  margin: 10px 0 0;
  padding: 8px 10px;
  border-radius: 10px;
  background: #f4f6fb;
  font-size: 13px;
  line-height: 1.55;
}
