/* css/components.css — 组件层（自 style.css 逐值迁移，R1 模块化重构）
 * 承接：按钮 / 表单 / 泳道格 / 任务卡与子任务区 / 徽章 / 弹层 / 任务详情 / 产出文档区 */

/* ---------------- 按钮（契约 §5.4 四变体） ---------------- */

.btn {
  height: 32px; padding: 0 var(--spacing-sm);
  background: var(--color-card);
  border: 1px solid var(--color-border); border-radius: var(--radius-md);
  color: var(--color-text); font-size: var(--font-size-base);
  cursor: pointer; white-space: nowrap;
  transition: background var(--duration-fast) var(--ease-out);
}

.btn:hover { background: var(--color-accent-soft); }

.btn:disabled { opacity: 0.45; cursor: not-allowed; }

.btn-primary {
  background: var(--color-accent); border-color: var(--color-accent); color: #FFFFFF;
}

.btn-primary:hover:not(:disabled) { background: var(--color-accent-dark); border-color: var(--color-accent-dark); }

.btn-danger {
  background: transparent; border: 1px solid var(--color-border);
  color: var(--color-danger);
}

.btn-danger:hover:not(:disabled) { background: var(--color-danger-bg); }

.btn-sm {
  height: 24px; padding: 0 var(--spacing-xs);
  font-size: var(--font-size-xs); border-radius: var(--radius-sm);
}

.btn-close {
  border: none; background: none; font-size: 20px; line-height: 1;
  color: var(--color-text-weak); cursor: pointer; padding: 2px 6px;
  border-radius: var(--radius-sm);
}

.btn-close:hover { color: var(--color-text); background: var(--color-accent-soft); }

/* ---------------- 表单（契约 §5.6） ---------------- */

.field { display: flex; flex-direction: column; gap: var(--spacing-xxs); margin-bottom: var(--spacing-xs); min-width: 0; }

.field-wide { grid-column: 1 / -1; }

.field-label { font-size: var(--font-size-sm); color: var(--color-text-weak); }

.field input, .field select, .field textarea,
.topbar input[type="search"], .topbar select {
  background: var(--color-card);
  border: 1px solid var(--color-border); border-radius: var(--radius-md);
  padding: 6px var(--spacing-xs); font-size: var(--font-size-base);
  width: 100%;
  transition: border-color var(--duration-fast) var(--ease-out);
}

.field textarea { resize: vertical; }

.field input:focus, .field select:focus, .field textarea:focus,
.topbar input:focus, .topbar select:focus {
  border-color: var(--color-accent);
}

/* ---------------- 统一看板（v5：三状态列全类型混排，单一 CSS Grid） ---------------- */

.board-columns {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0 var(--spacing-xs);
  align-items: start;
}

/* 列头：圆点 + 状态名 + 计数；sticky 吸顶（沿用泳道板交互） */
.col-head {
  position: sticky; top: calc(-1 * var(--spacing-sm)); z-index: 5;
  display: flex; align-items: center; gap: var(--spacing-xs);
  height: 36px; padding: 0 var(--spacing-xs);
  background: var(--color-bg);
  border-radius: var(--radius-sm);
}

.col-head .dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }

.board-col[data-status="todo"] .col-head .dot { background: var(--color-dot-todo); }
.board-col[data-status="doing"] .col-head .dot { background: var(--color-dot-doing); }
.board-col[data-status="done"] .col-head .dot { background: var(--color-dot-done); }

.col-head .col-title {
  font-size: var(--font-size-base); font-weight: var(--font-weight-semibold);
}

/* 计数胶囊：底 lane 色、等宽 11px（契约 §4.1） */
.lane-count {
  font-family: var(--font-mono); font-size: var(--font-size-xs);
  background: var(--color-lane); color: var(--color-text);
  border-radius: var(--radius-pill); padding: 1px var(--spacing-xs);
}

/* 列体：纵向卡列表（列内 created_at 倒序，JS 保证） */
.col-body {
  min-height: 56px;
  max-height: calc(100vh - 220px);
  overflow-y: auto;
  background: var(--color-lane);
  border-radius: var(--radius-lg);
  padding: var(--spacing-xxs) var(--spacing-xxs) var(--spacing-xs);
  margin-top: var(--spacing-xxs);
}

/* 空列弱文案「—」（契约 §4.1） */
.cell-empty {
  color: var(--color-text-weak); font-size: var(--font-size-sm);
  text-align: center; padding: var(--spacing-sm) 0;
}

/* v5 卡片紧凑态（「全部折叠」适配：仅标题行，徽章/反馈/meta/操作隐藏；
 * v9（#63）：内嵌子任务区随紧凑态一并隐藏（展开态记录保留，恢复完整卡即回显） */
.cards-collapsed .card-badges,
.cards-collapsed .card-feedback,
.cards-collapsed .card-feedback-toggle,
.cards-collapsed .card-meta,
.cards-collapsed .card-actions,
.cards-collapsed .card-subtasks { display: none; }

/* ---------------- 任务卡（契约 §5.1） ---------------- */

.card {
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-left: var(--card-type-bar) solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-1);
  padding: var(--spacing-xs) var(--spacing-sm);
  margin-top: var(--spacing-xxs);
  max-width: 100%;   /* mobile-fix 1：卡片不超容器（配合内部文本约束） */
  transition: border-color var(--duration-fast) var(--ease-out),
              box-shadow var(--duration-fast) var(--ease-out);
}

/* 左 3px 类型色条 = 七类型莫兰迪色（契约 §1.3 记忆点） */
.card[data-type="feature"]     { border-left-color: var(--type-feature); }
.card[data-type="bugfix"]      { border-left-color: var(--type-bugfix); }
.card[data-type="refactor"]    { border-left-color: var(--type-refactor); }
.card[data-type="performance"] { border-left-color: var(--type-performance); }
.card[data-type="security"]    { border-left-color: var(--type-security); }
.card[data-type="chore"]       { border-left-color: var(--type-chore); }
.card[data-type="other"]       { border-left-color: var(--type-other); }

.card:hover { border-color: var(--color-accent); box-shadow: var(--shadow-2); }

.card-title {
  font-size: var(--font-size-md); font-weight: var(--font-weight-semibold);
  word-break: break-word; overflow-wrap: anywhere; cursor: pointer;
  line-height: var(--line-height-tight);
}

/* #195：卡标题前置编号 #N（mono 弱化小字——不抢标题视觉层级；编号自身不折行，
 * 长标题经上方 word-break 正常折行不受影响；编号不参与「复制执行」等操作语义） */
.card-title-id {
  font-family: var(--font-mono); font-size: var(--font-size-xs);
  color: var(--color-text-weak);
  margin-right: var(--spacing-xxs); white-space: nowrap;
}

.card-badges { display: flex; flex-wrap: wrap; gap: var(--spacing-xxs); margin-top: var(--spacing-xxs); }

.card-meta {
  margin-top: var(--spacing-xxs); font-size: var(--font-size-sm);
  color: var(--color-text-weak); word-break: break-all;
  line-height: var(--line-height-tight);
}

.card-meta .mono { font-family: var(--font-mono); }

/* v5 R1：卡片反馈/结果摘要（doing=进展 / done=结果；前缀 ::before 弱标识区分两态，
 *  正文保持纯数据值）。#186：完整多行显示——\n 经 pre-line 真实换行、超宽 anywhere
 *  折行；超长（JS 阈值 FEEDBACK_CLAMP_CHARS）默认折叠 6 行 + 展开/收起按钮。 */
.card-feedback {
  margin-top: var(--spacing-xxs); font-size: var(--font-size-xs);
  line-height: var(--line-height-tight); color: var(--color-text-weak);
  white-space: pre-line; overflow-wrap: anywhere;
}

.card-feedback-doing::before { content: "进展 · "; color: var(--color-dot-doing); }

.card-feedback-done::before { content: "结果 · "; color: var(--color-success); }

/* #186：超长折叠态（6 行钳制；展开态无此类自然完整显示） */
.card-feedback.is-clamped {
  display: -webkit-box;
  -webkit-line-clamp: 6;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* #186：agent 行（flex 三段：色点/时间/文本）折叠态——容器保持 flex（覆盖上方
 *  -webkit-box），行数钳制落在文本段 .card-feedback-text 上 */
.card-feedback-agent.is-clamped { display: flex; }

.card-feedback-agent.is-clamped .card-feedback-text {
  display: -webkit-box;
  -webkit-line-clamp: 6;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* #186：摘要展开/收起按钮（lane 底小按钮，card-subtasks-toggle 同语言） */
.card-feedback-toggle {
  display: inline-flex; align-items: center; gap: var(--spacing-xxs);
  margin-top: 2px;
  background: var(--color-lane); color: var(--color-text-weak);
  border: none; border-radius: var(--radius-sm);
  padding: 1px var(--spacing-xs);
  font-size: var(--font-size-xs); cursor: pointer;
}

.card-feedback-toggle:hover {
  background: var(--color-accent-soft); color: var(--color-accent-dark);
}

.card-actions {
  display: flex; flex-wrap: wrap; gap: var(--spacing-xxs);
  margin-top: var(--spacing-xs);
}

/* ---------------- v9（#63）：父卡内嵌子任务折叠区（令牌全复用） ---------------- */

/* 区容器：卡尾追加（card-actions 之后）；open = 展开态（JS 切换 class） */
.card-subtasks { margin-top: var(--spacing-xxs); max-width: 100%; }

/* 展开入口行：chevron + 「子任务 N」计数（lane 底小按钮，subtask-head/subtask-count 同语言） */
.card-subtasks-toggle {
  display: inline-flex; align-items: center; gap: var(--spacing-xxs);
  background: var(--color-lane); color: var(--color-text-weak);
  border: none; border-radius: var(--radius-sm);
  padding: 1px var(--spacing-xs);
  font-size: var(--font-size-xs); cursor: pointer;
  transition: background var(--duration-fast) var(--ease-out),
              color var(--duration-fast) var(--ease-out);
}

.card-subtasks-toggle:hover {
  background: var(--color-accent-soft); color: var(--color-accent-dark);
}

/* chevron：收起态左旋 90°（归档树 summary 同款语言） */
.card-subtasks-chevron {
  display: inline-block;
  transition: transform var(--duration-fast) var(--ease-out);
}

.card-subtasks:not(.open) .card-subtasks-chevron { transform: rotate(-90deg); }

/* 收起态隐藏行列表（默认折叠） */
.card-subtasks:not(.open) .card-subtask-list { display: none; }

/* 子任务行列表：整体缩进（层级感）+ 左缘细线锚定父卡（lane 弱色） */
.card-subtask-list {
  display: flex; flex-direction: column; gap: 2px;
  margin-top: var(--spacing-xxs);
  margin-left: var(--spacing-sm);
  padding-left: var(--spacing-xs);
  border-left: 2px solid var(--color-lane);
  min-width: 0;   /* mobile：flex 子项不被内容撑破 */
}

/* 子任务行：状态点 + 标题（弹性省略）+ 状态文字 + 流转按钮（subtask-row 同构，lane 底） */
.card-subtask-row {
  display: flex; align-items: center; gap: var(--spacing-xs);
  padding: 2px var(--spacing-xs);
  background: var(--color-lane); border-radius: var(--radius-sm);
  min-width: 0;
}

.card-subtask-row:hover { background: var(--color-accent-soft); }

/* 状态色点 = 详情子事项 subtask-dot 同源令牌（archived 弱化为边框色） */
.card-subtask-row[data-status="todo"] .subtask-dot { background: var(--color-dot-todo); }
.card-subtask-row[data-status="doing"] .subtask-dot { background: var(--color-dot-doing); }
.card-subtask-row[data-status="done"] .subtask-dot { background: var(--color-dot-done); }
.card-subtask-row[data-status="archived"] .subtask-dot { background: var(--color-border); }

/* 子行标题：可点击开子卡详情（card-title 同语义；弹性省略不撑破行） */
.card-subtask-title {
  flex: 1; min-width: 0;
  font-size: var(--font-size-xs);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  cursor: pointer; text-align: left;
}

.card-subtask-row:hover .card-subtask-title { color: var(--color-accent-dark); }

/* #195：子行层级编号 #伞id-序号（mono 弱化，flex-shrink:0 不参与标题截断） */
.card-subtask-id {
  flex-shrink: 0;
  font-family: var(--font-mono); font-size: var(--font-size-xs);
  color: var(--color-text-weak);
}

/* ---------------- 徽章（契约 §3.2 / §5.1） ---------------- */

.badge {
  display: inline-block; font-size: var(--font-size-xs); line-height: 18px;
  padding: 1px var(--spacing-xs); border-radius: var(--radius-sm);
  border: 1px solid transparent; white-space: nowrap;
  max-width: 100%; overflow: hidden; text-overflow: ellipsis;   /* mobile-fix 1：长项目名/长串徽章不撑宽卡片 */
}

/* 七类型徽章：莫兰迪底 + 统一深文字（契约 §3.2） */
.badge-type { color: var(--badge-text); }
.badge-type.feature     { background: var(--type-feature); }
.badge-type.bugfix      { background: var(--type-bugfix); }
.badge-type.refactor    { background: var(--type-refactor); }
.badge-type.performance { background: var(--type-performance); }
.badge-type.security    { background: var(--type-security); }
.badge-type.chore       { background: var(--type-chore); }
.badge-type.other       { background: var(--type-other); }

/* 重要度徽章：复用已验算组合（契约 §5.1） */
.badge-priority.high   { background: var(--color-danger-bg); color: var(--color-danger); }
.badge-priority.medium { background: var(--type-performance); color: var(--badge-text); }
.badge-priority.low    { background: var(--type-feature); color: var(--badge-text); }

/* 影响徽章：描边样式（契约 §5.1） */
.badge-impact { background: transparent; border-color: var(--color-border); color: var(--color-text-weak); }
.badge-impact.global { border-color: var(--color-accent-dark); color: var(--color-accent-dark); }

/* v4 所属项目徽章（「全部」聚合视图卡片专用；低饱和泳道底 + 深字，info-doc-kind 同款组合） */
.badge-project { background: var(--color-lane); color: var(--badge-text); }

/* v5：父卡子事项徽章（badge-project/info-doc-kind 的 lane 底组合 + accent 深字，
 * 区分「层级聚合」语义与项目徽章；色值全部复用既有令牌） */
.badge-subtask { background: var(--color-accent-soft); color: var(--color-accent-dark); }

/* U5：伞卡「主体」徽章（黑板便签徽章行首位，伞卡 #171 设计 §2.1）——badge-subtask
 * 同款 accent 组合（子事项语义同族，不新增配色） */
.badge-umbrella { background: var(--color-accent-soft); color: var(--color-accent-dark); }

/* B2：#ID 徽章（卡片 card-badges 首位 + 详情编号行；mono 数字 + 低饱和底，badge-project 同款组合）
 * v6 A2：复制按钮化（span → button，展示形态沿 .badge/.badge-id 既有令牌不变）——
 * cursor/hover 提示可点；copied = 复制成功短暂「已复制」反馈态（组合复用 badge-subtask） */
.badge-id { background: var(--color-lane); color: var(--badge-text); font-family: var(--font-mono); }

button.badge-id { cursor: pointer; }

button.badge-id:hover,
button.badge-id.copied { background: var(--color-accent-soft); color: var(--color-accent-dark); }

/* B2：详情编号行「复制执行」按钮与徽章间距 */
.detail-rows .btn-exec-detail { margin-left: var(--spacing-xs); }

/* ---------------- 弹层（契约 §5.5） ---------------- */

.modal-backdrop {
  position: fixed; inset: 0; z-index: var(--z-modal);
  background: rgba(59, 58, 54, 0.5);
  display: flex; align-items: center; justify-content: center;
  padding: var(--spacing-lg);
}

.modal {
  background: var(--color-card);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-4);
  width: 520px; max-width: 100%;
  max-height: calc(100vh - 48px);
  display: flex; flex-direction: column;
}

.modal-sm { width: 440px; }
.modal-md { width: 520px; }
.modal-lg { width: 680px; }

/* U9（全貌 v2 §5）：详情弹层 760px 新档——阅读型内容介于 lg 与 doc 之间，
 * 融合分区全宽子卡行需要横向余量（窄窗由 calc(100vw-32px) 自动兼容） */
.modal-detail { width: 760px; max-width: calc(100vw - 32px); }

.modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--spacing-sm) var(--spacing-md);
  border-bottom: 1px solid var(--color-border); flex-shrink: 0;
}

/* U9 L1 弹层头：16px / 600（三级标题体系第一级） */
.modal-head h3 { font-size: 16px; font-weight: var(--font-weight-semibold); }

.modal-body { padding: var(--spacing-md); overflow-y: auto; }

.modal-foot { display: flex; justify-content: flex-end; gap: var(--spacing-xs); margin-top: var(--spacing-sm); }

.form-grid { display: grid; grid-template-columns: 1fr 1fr; column-gap: var(--spacing-sm); }

.form-hint {
  font-size: var(--font-size-sm); color: var(--color-text-weak);
  background: var(--color-lane); border-radius: var(--radius-sm);
  padding: var(--spacing-xs) var(--spacing-sm);
  margin-bottom: var(--spacing-sm); word-break: break-all;
}

.form-error {
  grid-column: 1 / -1;
  color: var(--color-danger); font-size: var(--font-size-sm);
  background: var(--color-danger-bg);
  border-radius: var(--radius-sm); padding: 6px 10px;
  word-break: break-all;
}

/* ---------------- 任务详情（契约 §5.5：detail-rows + doc） ---------------- */

/* U9（全貌 v2 §6）：头部身份带（hero）——高频扫读字段上移；徽章带/标题/摘要/副 meta
 *  四段左缘严格对齐（flex column 同 padding 基线，消灭「三行缩进各异」取证 #8） */
.detail-hero {
  display: flex; flex-direction: column; gap: var(--spacing-xxs);
  padding-bottom: var(--spacing-sm);
  border-bottom: 1px solid var(--color-border);
}

/* 身份徽章带：#N + 状态 + 类型 + 重要度 + 复制执行，flex baseline 对齐（徽章行内
 *  文字基线一致——取证 #8 错位根因修复） */
.detail-hero-badges {
  display: flex; align-items: baseline; flex-wrap: wrap;
  gap: var(--spacing-xxs);
}

/* 状态徽章（U9 形状分工：徽章=状态带文字；内嵌状态小圆点=语义标记、浅底=容器）——
 *  P2-1 修复：底色改取与各状态 dot 色同色相的既有浅色令牌（todo 灰蓝→雾蓝 refactor /
 *  doing 赭黄→奶油黄 performance / done 绿→豆沙绿 feature），--badge-text 深字对比
 *  ≥4.5:1（WCAG AA；原 dot-* 中深色做底仅 3.0-3.4:1 且与浅底深字徽章族不一致）；
 *  圆点色=各状态归属 dot 令牌（与列头状态圆点同源——色点表语义、浅底做容器） */
.badge-status {
  display: inline-flex; align-items: center; gap: var(--spacing-xxs);
  color: var(--badge-text);
}

.badge-status::before {
  content: ''; display: inline-block;
  width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
}

.badge-status[data-status="todo"]     { background: var(--type-refactor); }
.badge-status[data-status="doing"]    { background: var(--type-performance); }
.badge-status[data-status="done"]     { background: var(--type-feature); }
.badge-status[data-status="archived"] { background: transparent; border-color: var(--color-border); color: var(--color-text-weak); }

.badge-status[data-status="todo"]::before     { background: var(--color-dot-todo); }
.badge-status[data-status="doing"]::before    { background: var(--color-dot-doing); }
.badge-status[data-status="done"]::before     { background: var(--color-dot-done); }
.badge-status[data-status="archived"]::before { background: var(--color-border); }

/* 标题行：17px / 600——全卡视觉最重元素；1 行截断 + title 全文 */
.detail-hero-title {
  font-size: 17px; font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-tight);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* 摘要行：弱色 1 行截断 + title 全文（空摘要 JS 不渲染） */
.detail-hero-summary {
  font-size: var(--font-size-sm); color: var(--color-text-weak);
  line-height: var(--line-height-tight);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* 副 meta 行：自然语义元信息（登记/更新/来源）——弱色一行 */
.detail-hero-meta {
  display: flex; align-items: baseline; flex-wrap: wrap;
  gap: var(--spacing-xxs);
  font-size: var(--font-size-xs); color: var(--color-text-weak);
}

.detail-hero-meta-sep { color: var(--color-border); }

/* 批次 D（design §5.2 A 区）：基本信息两列网格——低频档案字段收纳区（U9「回查层」
 *  定位：字号降 sm 视觉弱化；每行两组「标签 96px + 值」；
 *  宽行（结果摘要）#195 改上下堆叠：dt 标签独占一行、dd 正文经 1 / -1 全宽展开
 *  （原 span 2 使标签占左半、正文被压进右半列——用户取证的靠右排版 BUG）；
 *  其余 dt/dd 双列行布局不动 */
.detail-rows {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr) 96px minmax(0, 1fr);
  gap: var(--spacing-xxs) var(--spacing-sm);
  font-size: var(--font-size-sm);
}

.detail-rows .detail-wide { grid-column: 1 / -1; }

.detail-rows dt { color: var(--color-text-weak); }

.detail-rows dd { word-break: break-all; }

/* #187：基本信息「结果摘要」宽行 md 预览（dd 内嵌 detail-preview doc-md）——贴齐 dt
 * 标签行首（消独立分区形态的 margin-top 错位）；宽度约束由网格列 minmax(0,1fr) 承载
 * （#195 detail-wide 全宽堆叠 / 移动端窄列同源），纵向滚动复用 detail-preview 既有 max-height */
.detail-rows dd .detail-preview { margin-top: 0; }

.detail-doc { margin-top: var(--spacing-sm); border-top: 1px solid var(--color-border); padding-top: var(--spacing-sm); }

.detail-doc h4 {
  font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold);
  color: var(--color-text-weak); margin-bottom: var(--spacing-xxs);
}

.detail-doc-path { display: flex; align-items: center; gap: var(--spacing-xs); margin-top: var(--spacing-xxs); }

.detail-doc-path code {
  flex: 1; min-width: 0; font-family: var(--font-mono); font-size: var(--font-size-sm);
  background: var(--color-lane); border-radius: var(--radius-sm);
  padding: 5px var(--spacing-xs); word-break: break-all;
}

.detail-preview {
  margin-top: var(--spacing-xs);
  background: var(--color-lane); border: 1px solid var(--color-border);
  border-radius: var(--radius-sm); padding: var(--spacing-sm);
  font-size: var(--font-size-sm); line-height: 1.6;
  max-height: 320px; overflow-y: auto;
  white-space: pre-wrap; word-break: break-word;
}

/* md 渲染态预览（.detail-preview + .doc-md 组合，renderMarkdownBlock 产出块级标签）：
   覆写纯文本态 pre-wrap；字号/间距沿用 doc-md 体系（定义在后同特异性取胜），
   滚动约束复用 detail-preview 的 max-height；代码块 white-space: pre 由 .doc-md pre 覆盖 */
.detail-preview.doc-md { white-space: normal; }

.detail-none { color: var(--color-text-weak); font-size: var(--font-size-sm); margin-top: var(--spacing-xxs); }

/* ---------------- v5 两级任务：详情子事项列表 + 反馈时间线（令牌全复用） ---------------- */

/* 子事项区容器（detail-doc 同款上边框分组形态） */
.detail-subtasks {
  margin-top: var(--spacing-sm);
  border-top: 1px solid var(--color-border);
  padding-top: var(--spacing-sm);
}

/* 区头：标题 + 计数 + 强制完成入口（两端对齐） */
.subtask-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--spacing-xs); margin-bottom: var(--spacing-xxs);
  flex-wrap: wrap;
}

/* U9 L3 小节（12px/600 弱色——纯文本，无分隔线、无交互） */
.subtask-head h4 {
  font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold);
  color: var(--color-text-weak);
}

.subtask-count {
  margin-left: var(--spacing-xxs); font-family: var(--font-mono);
  font-size: var(--font-size-xs); color: var(--color-text-weak);
}

/* 强转内联确认条（两段式确认；danger 弱字色沿令牌） */
.force-confirm {
  display: inline-flex; align-items: center; gap: var(--spacing-xxs);
  font-size: var(--font-size-xs); color: var(--color-danger);
}

/* 子事项列表（doc-list 同款 lane 底圆角容器） */
.subtask-list {
  display: flex; flex-direction: column; gap: 2px;
  background: var(--color-lane);
  border-radius: var(--radius-md);
  padding: var(--spacing-xxs);
  max-height: 280px; overflow-y: auto;
}

/* 子事项行：色点 + 标题（弹性省略）+ 状态文字 + 流转按钮 */
.subtask-row {
  display: flex; align-items: center; gap: var(--spacing-xs);
  padding: var(--spacing-xxs) var(--spacing-xs);
  background: var(--color-card); border-radius: var(--radius-sm);
}

.subtask-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }

/* 状态色点 = 列头圆点同源令牌（archived 弱化为边框色） */
.subtask-row[data-status="todo"] .subtask-dot { background: var(--color-dot-todo); }
.subtask-row[data-status="doing"] .subtask-dot { background: var(--color-dot-doing); }
.subtask-row[data-status="done"] .subtask-dot { background: var(--color-dot-done); }
.subtask-row[data-status="archived"] .subtask-dot { background: var(--color-border); }

.subtask-title {
  flex: 1; min-width: 0;
  font-size: var(--font-size-sm);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* U1：标题 button 化最小 reset（背景/边框/内边距/字体/颜色/左对齐/手型——
  消除默认按钮样式，字号与省略号仍由上方 .subtask-title 承载） */
button.subtask-title {
  background: none; border: none; padding: 0;
  font-family: inherit; color: inherit;
  text-align: left; cursor: pointer;
}

/* #195：子行层级编号 #伞id-序号（mono 弱化，flex-shrink:0 不参与标题截断） */
.subtask-id {
  flex-shrink: 0;
  font-family: var(--font-mono); font-size: var(--font-size-xs);
  color: var(--color-text-weak);
}

.subtask-status { flex-shrink: 0; font-size: var(--font-size-xs); color: var(--color-text-weak); }

/* 反馈时间线区（detail-subtasks 同款分组形态） */
.detail-feedback {
  margin-top: var(--spacing-sm);
  border-top: 1px solid var(--color-border);
  padding-top: var(--spacing-sm);
}

.detail-feedback h4 {
  font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold);
  color: var(--color-text-weak); margin-bottom: var(--spacing-xxs);
}

.feedback-timeline {
  display: flex; flex-direction: column; gap: 2px;
  background: var(--color-lane);
  border-radius: var(--radius-md);
  padding: var(--spacing-xxs);
  max-height: 240px; overflow-y: auto;
}

/* 时间线行：「[时间戳] 内容」拆分展示——时间 mono 弱色，内容自动换行 */
.feedback-line {
  display: flex; align-items: baseline; gap: var(--spacing-xs);
  padding: var(--spacing-xxs) var(--spacing-xs);
  background: var(--color-card); border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); line-height: var(--line-height-tight);
}

.feedback-time { flex-shrink: 0; color: var(--color-text-weak); }

.feedback-text { min-width: 0; word-break: break-word; }

/* ---------------- 详情提交记录区（detail-subtasks 同款上边框分组；commits 契约对象形态） ---------------- */

.detail-commits {
  margin-top: var(--spacing-sm);
  border-top: 1px solid var(--color-border);
  padding-top: var(--spacing-sm);
}

.detail-commits h4 {
  font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold);
  color: var(--color-text-weak); margin-bottom: var(--spacing-xxs);
}

/* 提交列表容器（feedback-timeline 同款 lane 底圆角容器） */
.commit-list {
  display: flex; flex-direction: column; gap: 2px;
  background: var(--color-lane);
  border-radius: var(--radius-md);
  padding: var(--spacing-xxs);
}

/* 提交行：hash 徽章固定宽不收缩 + message 弹性换行（行内自适应）；
 *  U9（全貌 v2 §8）：行 hover 边框化——与子卡行同语言（边框转 accent） */
.commit-row {
  display: flex; align-items: flex-start; gap: var(--spacing-xs);
  padding: var(--spacing-xxs) var(--spacing-xs);
  background: var(--color-card); border-radius: var(--radius-sm);
  border: 1px solid var(--color-border);
  font-size: var(--font-size-sm); line-height: var(--line-height-tight);
  transition: border-color var(--duration-fast) var(--ease-out);
}

.commit-row:hover { border-color: var(--color-accent); }

/* hash 徽章：badge-id 令牌复用（button 可复制）；固定内容宽对齐各行（mono 短 hash） */
.commit-hash { flex: 0 0 auto; min-width: 9ch; text-align: center; }

/* 旧字符串形态无 hash → '—' 占位（非按钮，透明底弱字色） */
.commit-hash-empty { background: transparent; color: var(--color-text-weak); }

.commit-msg { flex: 1; min-width: 0; word-break: break-word; }

/* ---------------- D5 产出文档区（v3 §6.4：文件列表 + pre 查看 / textarea 编辑） ---------------- */

.detail-taskdocs { margin-top: var(--spacing-sm); }

.doc-panel {
  display: grid; grid-template-columns: 200px minmax(0, 1fr);
  gap: var(--spacing-xs); margin-top: var(--spacing-xs);
  align-items: start;
}

.doc-list {
  display: flex; flex-direction: column; gap: 2px;
  background: var(--color-lane);
  border-radius: var(--radius-md);
  padding: var(--spacing-xxs);
  max-height: 320px; overflow-y: auto;
}

.doc-file {
  display: block; width: 100%;
  background: none; border: none; border-radius: var(--radius-sm);
  padding: 4px var(--spacing-xs);
  font-family: var(--font-mono); font-size: var(--font-size-xs);
  color: var(--color-text); text-align: left;
  cursor: pointer; word-break: break-all; line-height: var(--line-height-tight);
  transition: background var(--duration-fast) var(--ease-out);
}

.doc-file:hover { background: var(--color-accent-soft); }

/* U9（全貌 v2 §8）：选中态 = 实底 + 字重 600——与 chips 选中同语言（一套语言贯通全卡） */
.doc-file.active {
  background: var(--color-accent); color: #FFFFFF;
  font-weight: var(--font-weight-semibold);
}

.doc-new { color: var(--color-text-weak); }

.doc-new:hover { color: var(--color-text); }

/* #185：relay 详情「项目文档」区文件行更新时间（名称下弱化色次行；选中态反白） */
.doc-file .doc-file-time { display: block; color: var(--color-text-weak); }
.doc-file.active .doc-file-time { color: rgba(255, 255, 255, 0.75); }

.doc-view {
  min-width: 0;
  display: flex; flex-direction: column; gap: var(--spacing-xs);
}

.doc-view .detail-preview { margin-top: 0; max-height: 320px; }

.doc-actions { display: flex; justify-content: flex-end; gap: var(--spacing-xxs); }

/* F1：新建文档内联表单（Electron 无 window.prompt，弹层内展开） */
.doc-create { display: flex; align-items: center; gap: var(--spacing-xxs); margin: var(--spacing-xxs) 0; }
.doc-create input[type="text"] {
  flex: 1; min-width: 0;
  background: var(--color-card);
  border: 1px solid var(--color-border); border-radius: var(--radius-md);
  padding: var(--spacing-xxs) var(--spacing-xs); font-size: var(--font-size-sm);
}
.doc-create input[type="text"]:focus { border-color: var(--color-accent); outline: none; }

.doc-view textarea {
  width: 100%; min-height: 220px; resize: vertical;
  background: var(--color-card);
  border: 1px solid var(--color-border); border-radius: var(--radius-md);
  padding: var(--spacing-xs); font-size: var(--font-size-sm);
  font-family: var(--font-mono); line-height: 1.6;
  color: var(--color-text);
}

.doc-view textarea:focus { border-color: var(--color-accent); }

/* ---------------- 全局文档查看面板（只读 markdown 视图；样式全取既有令牌） ---------------- */

/* 阅读型面板比 modal-lg 略宽（860px）；窄窗分支由 .modal 的 calc(100vw-32px) 自动兼容 */
.modal-doc { width: 860px; max-width: calc(100vw - 32px); }

/* 面板内滚动（正文区自身滚动，不撑破弹层高度） */
.doc-viewer-body { max-height: 62vh; overflow: auto; }

/* 提示态：loading / 错误 / 降级（弱字色 + 居中） */
.doc-viewer-loading,
.doc-viewer-error,
.doc-viewer-degraded {
  color: var(--color-text-weak);
  text-align: center;
  padding: var(--spacing-lg);
  word-break: break-all;
}

.doc-viewer-degraded .mono { font-family: var(--font-mono); font-size: var(--font-size-sm); }

/* markdown 正文容器（renderMarkdownBlock 产出标签集：h1-h6/ul/ol/li/pre/code/blockquote/p/hr/strong/em） */
.doc-md {
  font-size: var(--font-size-base);
  line-height: var(--line-height-normal);
  color: var(--color-text);
  word-break: break-word;
}

.doc-md h1, .doc-md h2, .doc-md h3,
.doc-md h4, .doc-md h5, .doc-md h6 {
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-tight);
  margin-top: var(--spacing-md);
  word-break: break-word;
}

/* 层级递减字号（h1 取 --font-size-lg；h6 落 --font-size-sm 区间，避开过大的 stat 令牌） */
.doc-md h1 { font-size: var(--font-size-lg); }
.doc-md h2 { font-size: var(--font-size-md); }
.doc-md h3 { font-size: var(--font-size-md); }
.doc-md h4 { font-size: var(--font-size-base); }
.doc-md h5 { font-size: var(--font-size-sm); }
.doc-md h6 { font-size: var(--font-size-sm); }

.doc-md p { margin-top: var(--spacing-sm); }

.doc-md ul, .doc-md ol {
  padding-left: var(--spacing-lg);
  margin-top: var(--spacing-sm);
}

.doc-md li { margin-top: var(--spacing-xxs); }

/* 代码块：lane 底 + 等宽 + 横向滚动（围栏内容仅转义不解析） */
.doc-md pre {
  background: var(--color-lane);
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  font-size: var(--font-size-sm);
  line-height: var(--line-height-normal);
  padding: var(--spacing-sm);
  margin-top: var(--spacing-sm);
  overflow-x: auto;
  white-space: pre;
}

/* 行内 code：lane 底 + 等宽（pre 内嵌 code 还原为继承，不叠加底色） */
.doc-md code {
  font-family: var(--font-mono);
  font-size: var(--font-size-sm);
  background: var(--color-lane);
  border-radius: var(--radius-sm);
  padding: 1px var(--spacing-xxs);
}

.doc-md pre code {
  background: transparent;
  padding: 0;
  border-radius: 0;
  font-size: inherit;
}

.doc-md blockquote {
  border-left: 3px solid var(--color-accent);
  color: var(--color-text-weak);
  padding-left: var(--spacing-sm);
  margin-top: var(--spacing-sm);
}

.doc-md hr { border: none; border-top: 1px solid var(--color-border); margin: var(--spacing-sm) 0; }

/* ---------------- 批次 D（#118）：详情页五分区 + agent 交互时间线（design §5.2/§5.3） ---------------- */

/* 分区壳：折叠开关行 + 体容器（collapsed 态隐藏体并收起 chevron；会话记忆见 state.detailCollapsed） */
.detail-section { margin-top: var(--spacing-sm); }

/* U9（全貌 v2 §4）L2 分区头体系：13px/600 + 尾随计数徽章（xs 弱底 mono）+ 底部 1px
 *  分隔线 + hover 转 accent；桌面高 36px、触屏 44px（下方 767px 段强化） */
.detail-section-toggle {
  display: flex; align-items: center; gap: var(--spacing-xxs);
  width: 100%; min-height: 36px; padding: var(--spacing-xxs) 0;
  background: none; border: none; cursor: pointer; text-align: left;
  font-size: var(--font-size-base); font-weight: var(--font-weight-semibold);
  color: var(--color-text);
  border-bottom: 1px solid var(--color-border);
}

.detail-section-toggle:hover { color: var(--color-accent-dark); }

/* L2 计数徽章：子卡 N / 提交 N / 时间线 N 条——扫读锚点（lane 弱底 mono，令牌零新增） */
.detail-section-count {
  margin-left: var(--spacing-xxs);
  font-family: var(--font-mono); font-size: var(--font-size-xs); font-weight: 400;
  color: var(--color-text-weak);
  background: var(--color-lane);
  border-radius: var(--radius-pill);
  padding: 1px var(--spacing-xs);
}

.detail-section-chevron {
  display: inline-block; color: var(--color-text-weak);
  transition: transform 0.15s ease;
}

.detail-section.collapsed .detail-section-chevron { transform: rotate(-90deg); }

.detail-section.collapsed .detail-section-body { display: none; }

/* 工种徽章行（与卡片徽章同源 view 派生；active 工种呼吸点） */
.feed-badges { display: flex; flex-wrap: wrap; gap: 4px; margin: var(--spacing-xxs) 0; }

.feed-badge {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px var(--spacing-xs); border-radius: 999px;
  background: var(--color-lane); font-size: var(--font-size-xs);
}

.feed-badge-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }

.feed-badge.active .feed-badge-dot,
.feed-node-working { animation: feedPulse 1.6s ease-in-out infinite; }

@keyframes feedPulse {
  0%, 100% { opacity: 0.35; }
  50% { opacity: 1; }
}

/* feed 滚动列表（feedback-timeline 同款 lane 底圆角容器；E 线 bottom sheet 可复用） */
.feed-scroll {
  display: flex; flex-direction: column; gap: 2px;
  background: var(--color-lane);
  border-radius: var(--radius-md);
  padding: var(--spacing-xxs);
  max-height: 320px; overflow-y: auto;
}

/* U9（融合 v2 §5.8）：时间线底部渐隐提示——看得见的截断（取证 #10）。纯 CSS 无滚动
 *  监听（零构建约束）；渐隐带为列表末尾占位子项（不覆盖内容——最新条目完整可见），
 *  内容色 → 段底色线性渐变；普通卡时间线与融合分区共用本类（一套语言零分叉） */
.feed-scroll::after {
  content: ''; display: block; flex-shrink: 0;
  height: 24px; margin-top: var(--spacing-xxs);
  background: linear-gradient(to bottom, var(--color-card), var(--color-lane));
  border-radius: var(--radius-sm);
  pointer-events: none;
}

/* 条目：主 agent 左对齐浅底 / 子 agent 缩进（「子向主汇报」对话分组，design §5.2） */
.feed-entry {
  display: flex; gap: var(--spacing-xs);
  padding: var(--spacing-xxs) var(--spacing-xs);
  background: var(--color-card); border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); line-height: var(--line-height-tight);
}

.feed-entry-main { background: var(--color-accent-soft); }

.feed-entry-sub { margin-left: var(--spacing-lg); }

.feed-agent-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; margin-top: 5px; }

.feed-entry-col { flex: 1; min-width: 0; }

.feed-meta { display: flex; align-items: baseline; gap: var(--spacing-xs); flex-wrap: wrap; }

.feed-agent-name { font-weight: var(--font-weight-semibold); }

.feed-time { color: var(--color-text-weak); }

/* 正文 ≤3 行软换行（design §5.3：悬浮 title 展开全文） */
.feed-text {
  margin-top: 2px; word-break: break-word;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* 节点标记：登场空心点 / 执行中呼吸点 / 已交付实心点 / 退场空心圈（design §5.2） */
.feed-node { font-size: var(--font-size-xs); color: var(--color-text-weak); }

.feed-node-handover { color: var(--color-success); }

.feed-node-exit { color: var(--color-text-weak); }

/* 终局「全部退场」尾节点（E-12：居中弱化，非条目卡形态） */
.feed-exit {
  justify-content: center; background: transparent;
  color: var(--color-text-weak); font-size: var(--font-size-xs);
}

.feed-exit-label { color: var(--color-text-weak); }

/* 分页控件：加载更早 / 早期折叠提示（F-24） */
.feed-more { align-self: center; margin: var(--spacing-xxs) 0; }

.feed-early-note {
  display: flex; align-items: center; justify-content: center; gap: var(--spacing-xs);
  padding: var(--spacing-xxs); margin-bottom: var(--spacing-xxs);
  background: var(--color-lane); border-radius: var(--radius-sm);
  font-size: var(--font-size-xs); color: var(--color-text-weak);
}

/* F-27 门禁里程碑条（P2 关键词解析，FEED_MILESTONES_ON 默认关闭） */
.feed-milestones {
  display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: var(--spacing-xxs);
}

.feed-milestone {
  padding: 2px var(--spacing-xs); border-radius: var(--radius-sm);
  background: var(--color-card); border: 1px solid var(--color-border);
  font-size: var(--font-size-xs); max-width: 100%;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* B-1 任务已删除横幅（banner-error 令牌复用；详情体顶部一次性提示） */
.detail-deleted-banner { margin-bottom: var(--spacing-sm); }

/* ---------------- #153（B3）：时间线条目可点击 + 汇报详情弹层 ---------------- */

/* 条目按钮化（键盘可达：Tab 聚焦 / Enter·Space 触发；外观与原 div 形态一致） */
button.feed-entry {
  width: 100%;
  border: none;
  cursor: pointer;
  font: inherit;
  color: inherit;
  text-align: left;
}

button.feed-entry:hover { box-shadow: inset 0 0 0 1px var(--color-accent); }

button.feed-entry:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 1px;
}

/* 汇报弹层：meta 行（agent 名/时间/节点）与工具行（该 agent 全部汇报切换） */
.report-meta {
  display: flex; align-items: baseline; gap: var(--spacing-xs); flex-wrap: wrap;
}

.report-toolbar {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--spacing-xs); margin: var(--spacing-xs) 0;
}

.report-toolbar-note { font-size: var(--font-size-xs); color: var(--color-text-weak); }

/* 汇报全文 md 渲染态（.report-full + .doc-md 组合，renderMarkdownBlock 产出块级标签，
   同 detail-preview.doc-md 模式）：容器仅承载底色/边框/纵向滚动 max-height 约束，
   字号/行距/标签排版沿用 doc-md 体系——比例字体继承正文，代码块等宽由 .doc-md pre 提供；
   移动端 46dvh 约束在下方断点覆写 */
.report-full {
  margin: 0; padding: var(--spacing-sm);
  background: var(--color-lane); border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  word-break: break-word;
  max-height: min(48vh, 420px); overflow-y: auto;
}

/* 该 agent 全部汇报列表（时间 + 剥标记首行预览；当前查看项高亮） */
.report-list { display: flex; flex-direction: column; gap: 4px; }

.report-item {
  display: flex; gap: var(--spacing-xs); align-items: baseline;
  width: 100%; padding: var(--spacing-xxs) var(--spacing-xs);
  background: var(--color-card); border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  font: inherit; color: inherit; text-align: left; cursor: pointer;
}

.report-item:hover { background: var(--color-lane); }

.report-item.active {
  border-color: var(--color-accent);
  background: var(--color-accent-soft);
}

.report-item-time { color: var(--color-text-weak); flex-shrink: 0; }

.report-item-text {
  min-width: 0; word-break: break-word;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* T-E2（#118 批次 E）：详情弹层 bottom sheet 把手（forms.js ensureDetailSheet 装配；
 *  desktop 隐藏零影响，<768px 呈现规则在 views.css 移动端段） */
.sheet-handle { display: none; }

/* <768px：基本信息单列标签行（两列网格窄屏不可读）+ T-E2 feed 单列全宽（design §8.2）：
 *  条目全宽（缩进分组让位小屏密度）、节点标记左置（meta 行首，工色点下方）、
 *  「加载更早」触达目标 ≥44px；#153：汇报列表项与全文区小屏适配（触达 ≥44px） */
@media (max-width: 767.98px) {
  .detail-rows { grid-template-columns: 96px minmax(0, 1fr); }
  .detail-rows .detail-wide { grid-column: auto; }
  .feed-entry-sub { margin-left: 0; }
  .feed-node { order: -1; }
  .feed-more { min-height: 44px; min-width: 44px; }
  .report-item { min-height: 44px; align-items: center; }
  .report-full { max-height: 46dvh; }
}

/* ---------------- U6（详情页融合重构方案B，设计 §3.2/§4.3）→ U9 v2 修订：上下主次分层融合分区 ---------------- */

/* F4：时间线筛选 chips（全部 / ◈ 主体轨迹 / ● 执行汇报）——仅含轨迹行的条目集渲染；
 *  U9（v2 §5.1）：active 态增强——实底 + 边框 + 字重 600 + 前置实心小圆点（6px accent），
 *  选中/未选中从「细描边差异」变为「实底+字重」双通道差异 */
.feed-chips { display: flex; flex-wrap: wrap; gap: var(--spacing-xxs); margin: var(--spacing-xxs) 0; }

.feed-chip {
  display: inline-flex; align-items: center; gap: 6px;
  border: 1px solid var(--color-border); border-radius: 999px;
  background: var(--color-card); color: var(--color-text-weak);
  font-size: var(--font-size-xs); padding: 2px 10px; cursor: pointer;
}

.feed-chip::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: transparent; flex-shrink: 0;
}

.feed-chip:hover { color: var(--color-accent-dark); border-color: var(--color-accent); }

.feed-chip.active {
  background: var(--color-accent-soft); color: var(--color-accent-dark);
  border-color: var(--color-accent); font-weight: var(--font-weight-semibold);
}

.feed-chip.active::before { background: var(--color-accent); }

/* F4：主体轨迹节点 ◈（trackMark 驱动——需求调整/范围变更/主体调整） */
.feed-node-track { color: var(--color-accent-dark); font-weight: var(--font-weight-semibold); }

/* F6：弹层顶部面包屑（栈深 >1 渲染——`‹ 主体 #N` 回退入口） */
.detail-breadcrumb {
  display: flex; align-items: center;
  margin: 0 0 var(--spacing-xs); padding: var(--spacing-xxs) var(--spacing-xs);
  background: var(--color-lane); border-radius: var(--radius-sm);
}

.crumb-back {
  background: none; border: none; padding: 0;
  font-family: inherit; font-size: var(--font-size-sm);
  color: var(--color-accent-dark); cursor: pointer;
}

.crumb-back:hover { text-decoration: underline; }

/* U9（融合 v2 §3）：推翻双列改上下主次分层——上=子卡列表段（主角，全宽）、下=主体
 *  时间线段（配角，弱底色次段）；手机端与桌面同构（flex column 单一形态，<768px
 *  叠放 CSS 分支随形态统一删除——DOM 序即叠放序） */
.fused-stack {
  display: flex; flex-direction: column; gap: var(--spacing-sm);
}

/* 嵌套段壳复用 detail-section（折叠开关/记忆机制天然工作）——清掉外层分区
 * 的上边框分组形态（分层容器内不需要重复分隔） */
.detail-fused .fused-col-sec { margin-top: 0; border-top: none; padding-top: 0; }

/* 主体时间线段：弱底色次段（lane 弱底 + 无卡框——「重内容重框、轻内容轻框」）；
 *  feed-scroll 透明化并入段底（普通卡 feed 容器 lane 底规则不受影响——零分叉仅指
 *  chips/条目/渐隐等条目层语言，段底差异属分层语义） */
.fused-col-timeline .detail-section-body {
  background: var(--color-lane);
  border-radius: var(--radius-md);
  padding: var(--spacing-xs);
}

.fused-col-timeline .feed-scroll { background: transparent; padding: 0; border-radius: 0; }

/* 桌面（≥768px）：段级折叠开关隐藏 + 段恒展开（手机形态才有独立段开关语义） */
@media (min-width: 768px) {
  .detail-fused .fused-col-sec .detail-section-toggle { display: none; }
  .detail-fused .fused-col-sec.collapsed .detail-section-body { display: block; }
}

/* U9（融合 v2 §3.3）+ #192：子卡段头带——「子卡 {n}」计数 + 三段状态聚合短语
 * （完成/进行中/待办各多少，fused-sub-phase 着色与行级短语同语言）+ 聚合微型进度条
 *  k/total（与子卡行进度同口径——全分区只有一种进度语言） */
.fused-subs-band {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: var(--spacing-xs);
  font-size: var(--font-size-xs); color: var(--color-text-weak);
  margin-bottom: var(--spacing-xs);
}

.fused-subs-band-count { font-weight: var(--font-weight-semibold); }

.fused-subs-band-sep { color: var(--color-text-weak); }

.fused-subs-band-phases { white-space: nowrap; }

.fused-subs-band-bar { width: 96px; }

/* U9：微型进度条（4px 高，accent 填充——进度统一语言：条 + n/m，百分比删除） */
.fused-sub-bar {
  display: inline-block; width: 64px; height: 4px; flex-shrink: 0;
  background: var(--color-accent-soft);
  border-radius: var(--radius-pill); overflow: hidden;
}

.fused-sub-bar-fill {
  display: block; height: 100%;
  background: var(--color-accent);
  border-radius: var(--radius-pill);
}

/* F5→U9：子卡行（v2 核心单元——四行结构自上而下；1px 实线边框 + hover 边框 accent
 *  + 投影仅 hover 出现——静态靠边框、交互靠投影，边界感不依赖投影强度） */
.fused-sub-list { display: flex; flex-direction: column; gap: var(--spacing-xs); }

.fused-sub {
  display: flex; flex-direction: column; gap: var(--spacing-xxs);
  padding: var(--spacing-xs); border-radius: var(--radius-md);
  background: var(--color-card);
  border: 1px solid var(--color-border);
  transition: border-color var(--duration-fast) var(--ease-out),
              box-shadow var(--duration-fast) var(--ease-out);
}

.fused-sub:hover {
  border-color: var(--color-accent);
  box-shadow: var(--shadow-2);
  background: var(--color-card);
}

/* ① 标题行（整行 button → 子卡详情；▣ 字形 + 标题弹性省略 + 类型/优先级双徽章
 *  （#192 对齐看板列卡口径，badge-type/badge-priority 复用）+ 状态徽章；
 *  O2 裁决：整行点击即详情——「详情→」删除，chevron 展开为唯一次要操作；
 *  徽章一律 flex-shrink:0——长标题截断让位于徽章组，行密度不劣化） */
.fused-sub-head {
  display: flex; align-items: center; gap: var(--spacing-xs);
  width: 100%; min-height: 32px;
  background: none; border: none; padding: 0;
  font-family: inherit; color: inherit; text-align: left; cursor: pointer;
}

.fused-sub-glyph { flex-shrink: 0; color: var(--color-accent-dark); }

.fused-sub-title {
  flex: 1; min-width: 0;
  font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.fused-sub-head:hover .fused-sub-title { color: var(--color-accent-dark); }

.fused-sub-head .badge { flex-shrink: 0; }

.fused-sub-badge { font-size: var(--font-size-xs); }

/* #195：融合子卡行层级编号 #伞id-序号（mono 弱化；flex-shrink:0——与徽章组同规则，
 * 长标题截断让位于编号/徽章，行密度不劣化） */
.fused-sub-id {
  flex-shrink: 0;
  font-family: var(--font-mono); font-size: var(--font-size-xs);
  color: var(--color-text-weak);
}

/* ② meta 行自然语义流（U9 v2 §4.1——替代「建:/执:」机器缩写标签）：创建者首字徽标 →
 *  工种胶囊组 → O3 时间戳，自左向右；窄空间截断优先截时间戳而非语义主体（stamp 收缩） */
.fused-sub-meta {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: var(--spacing-xxs) var(--spacing-xs);
  font-size: var(--font-size-xs); color: var(--color-text-weak);
  line-height: 20px;
}

.fused-creator {
  display: inline-flex; align-items: center; gap: var(--spacing-xxs);
  min-width: 0;
}

/* 创建者首字徽标：圆形字符徽标（中性弱底 lane——字符=建卡方 / 色点=执行方 形状分工） */
.fused-creator-badge {
  display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px; flex-shrink: 0;
  background: var(--color-lane); color: var(--color-text-weak);
  border-radius: 50%;
  font-size: var(--font-size-xs); line-height: 1;
}

.fused-creator-name {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.fused-sub-agents { display: inline-flex; align-items: center; flex-wrap: wrap; gap: var(--spacing-xxs); }

/* U9：工种胶囊（色点 + shortLabel 短名——与主体时间线徽章行同一套词汇，
 *  短名即文字图例不再依赖悬停；<420px 降级纯色点见下方断点） */
.fused-agent-chip {
  display: inline-flex; align-items: center; gap: var(--spacing-xxs);
  padding: 1px var(--spacing-xs);
  background: var(--color-lane);
  border-radius: var(--radius-pill);
  font-size: var(--font-size-xs); line-height: 16px;
}

.fused-agent-chip-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }

/* 执行者全空降级弱文本（todo 态「未开始」/ 其余「—」——JS 层给值） */
.fused-agents-none { color: var(--color-text-weak); }

/* O3 时间戳：混合口径（今日相对 / 非今 MM-DD HH:mm）；窄行优先收缩 */
.fused-sub-stamp { margin-left: auto; flex-shrink: 1; color: var(--color-text-weak); }

/* ③ 进度行（U9 v2 §5.2 统一语言 + #192 三段计数）：微型进度条（4px，aria-label
 *  承载完成度 n/m）+ 三段状态短语「{done} 完成 · {doing} 进行中 · {todo} 待办」
 *  （只显非零段，fused-sub-phase 着色复用状态点令牌——data-status 词汇，与无孙卡
 *  状态短语同一套着色语言）+ 最新结论一行截断（::before 弱前缀「最新 · 」——title
 *  纯正文不重复）；无孙卡 prog 为空 → 纯文字状态短语（fused-sub-state 复用状态点
 *  令牌着色，不用圆点字符——圆点专属工种） */
.fused-sub-progress {
  display: flex; align-items: center; gap: var(--spacing-xs);
  min-height: 20px;
  font-size: var(--font-size-xs); color: var(--color-text-weak);
}

.fused-sub-count { flex-shrink: 0; font-family: var(--font-mono); }

.fused-sub-counts { flex-shrink: 0; white-space: nowrap; }

.fused-sub-state[data-status="todo"] { color: var(--color-dot-todo); }
.fused-sub-state[data-status="doing"] { color: var(--color-dot-doing); }
.fused-sub-state[data-status="done"] { color: var(--color-dot-done); }

.fused-sub-phase[data-status="todo"] { color: var(--color-dot-todo); }
.fused-sub-phase[data-status="doing"] { color: var(--color-dot-doing); }
.fused-sub-phase[data-status="done"] { color: var(--color-dot-done); }

.fused-sub-latest {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.fused-sub-latest:not(:empty)::before {
  content: '最新 · ';
  color: var(--color-text-weak);
}

/* ④ 内嵌时间线（默认折叠；chevron 展开——触控目标 ≥44px 由 767px 段强化） */
.fused-sub-toggle {
  display: inline-flex; align-items: center; gap: var(--spacing-xxs);
  background: none; border: none; padding: 0;
  font-family: inherit; font-size: var(--font-size-xs);
  color: var(--color-text-weak); cursor: pointer;
}

.fused-sub-toggle:hover { color: var(--color-accent-dark); }

.fused-sub-chevron { display: inline-block; transition: transform 0.15s ease; }

.fused-sub:not(.open) .fused-sub-chevron { transform: rotate(-90deg); }

.fused-sub-feed { display: none; flex-direction: column; gap: 2px; }

.fused-sub.open .fused-sub-feed { display: flex; }

/* 内嵌行（非交互展示行——色点行同主体轴样式；结论单行截断） */
.fused-sub-feed-line {
  display: flex; align-items: center; gap: var(--spacing-xs);
  padding: var(--spacing-xxs) var(--spacing-xs);
  background: var(--color-card); border-radius: var(--radius-sm);
  font-size: var(--font-size-xs); line-height: var(--line-height-tight);
}

.fused-sub-feed-text {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* U9（融合 v2 §6）：<768px 手机形态——与桌面同构同序（上下分层本就是手机形态，
 *  U6 双列叠放 order 纠正分支已随形态统一删除）；仅差异：触控目标 ≥44px（子卡
 *  标题行/chevron/L2 分区头/面包屑/关闭 ✕）、hero 标题允许 2 行（bottom sheet 内
 *  信息密度适配——宽度收窄标题折行语义不丢） */
@media (max-width: 767.98px) {
  .fused-sub { min-width: 0; }
  .fused-sub-head { min-height: 44px; }
  .fused-sub-toggle { min-height: 44px; }
  .detail-section-toggle { min-height: 44px; }
  .detail-breadcrumb { min-height: 44px; }
  .btn-close { min-width: 44px; min-height: 44px; }
  .doc-file { min-height: 44px; }
  .detail-hero-title {
    white-space: normal;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
}

/* U9（融合 v2 §4.2）：<420px 工种胶囊降级纯色点（title 保留——语义不丢、密度可控；
 *  创建者徽标+短名保留；胶囊文本 font-size:0 折叠，色点尺寸不变） */
@media (max-width: 419.98px) {
  .fused-agent-chip { font-size: 0; padding: 3px; gap: 0; }
}
