/* ============================================================================
 * Page Polish — 四大核心页面的"科技 + 灵动"升级
 * ----------------------------------------------------------------------------
 * 设计原则：
 *   - 零改 DOM / id / onclick：全部用选择器命中 index.html 已存在的结构
 *   - 仅叠加视觉 + 交互细节，不破坏 skin.css 建立的基础样式
 *   - 所有装饰动效都尊重 prefers-reduced-motion（见 motion.css 末尾）
 *
 * 覆盖范围：
 *   §1  Header / lang-switch 升级为玻璃态 + 渐变 logo dot
 *   §2  Hub 页：标题渐变、hub-card 光标追踪 + 磁吸、任务类型 pill
 *   §3  Progress 页：阶段卡呼吸灯、进度条流光、数据管线动画
 *   §4  Results 页：统计卡光晕、执行摘要卡、优先处理清单
 *   §5  Conversation 页：气泡浮现、选项 chip、发送按钮
 *   §6  通用按钮升级：主按钮渐变 + 光泽
 * ==========================================================================*/


/* ==========================================================================
 * §1  Header / 顶栏
 * ==========================================================================*/

/* 圆点 logo + 动画已删除（2026-07-02） */

/* 主副标题加柔和间距变化 */

/* 语言切换从旧实心按钮改成科技感描边 pill（保留 skin.css 行为，微调） */

/* Header 毛玻璃 hover 与滚动过渡 */

/* ---------- 背景层（2026-07-05 基调执行：删网格纹理 + 青蓝光斑，回归素净灰底）
   基调红线：纯白/中性灰为底，青蓝只做交互点缀（<2%）——大面积环境光斑和
   "科技感"网格线均属炫光装饰（截图 08-54-24 可见），整层拍平为纯色。 ---------- */
.ui-bg-grid {
  background: var(--c-surface-2);
}
.ui-bg-grid::before {
  background-image: none;
  mask-image: none;
  -webkit-mask-image: none;
}


/* ==========================================================================
 * §2  Hub 页：#home_hub
 * --------------------------------------------------------------------------
 * 结构（见 index.html:35-105）：
 *   #home_hub > 选择器 / .hub-modules-grid > .hub-card × 3
 * 升级：
 *   - .hub-card 加磁吸 + 光标追踪高光（JS 注入 --mx/--my）
 *   - 顶部任务类型 / 用户身份下拉加描边 + 焦点光晕
 * ==========================================================================*/    /* 把内容拱在光晕上方 */

/* 选择器上方的"任务类型 / 用户身份"容器：加玻璃态边框 */

/* ---------- Hub 选项区：分段 pill（任务类型 / 用户身份） ---------- */
/* 两个 pill 共享一套样式；左右点击切换，滑块 indicator 跟随 */

/* Bug-3: 拆分布局——两个选项各自独立一个背景块，不再共用浅色容器 */
.hub-choice--card {
  padding: var(--sp-4);
  background: linear-gradient(135deg,
    rgba(238, 240, 255, .55),
    rgba(224, 247, 252, .35));
  border: 1px solid rgba(47, 155, 191, .14);
  border-radius: var(--r-lg);
  backdrop-filter: saturate(140%) blur(6px);
  -webkit-backdrop-filter: saturate(140%) blur(6px);
}

.hub-choice { display: flex; flex-direction: column; gap: var(--sp-2); min-width: 0; }

.hub-choice__label {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  font-weight: var(--fw-semibold);
  letter-spacing: .6px;
  text-transform: uppercase;
}

.hub-choice__hint {
  grid-column: 1 / -1;
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  letter-spacing: .2px;
  padding-left: 2px;
  margin-top: -2px;
}

/* 分段 pill 本体：整体是一个带内阴影的圆角容器，内部是若干按钮 */
.seg-pill {
  position: relative;
  display: grid;
  /* 默认 3 等分；data-variant="duo" 时覆盖成 2 等分 */
  grid-template-columns: repeat(var(--seg-count, 3), 1fr);
  gap: 0;
  padding: 4px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-pill);
  box-shadow:
    inset 0 1px 2px rgba(31, 34, 38, .04),
    0 1px 2px rgba(31, 34, 38, .02);
  min-width: 0;
  --seg-count: 3;
  transition: box-shadow var(--t-base) var(--ease), border-color var(--t-base) var(--ease);
}
.seg-pill[data-variant="duo"] { --seg-count: 2; }
.seg-pill:hover {
  border-color: rgba(47, 155, 191, .25);
  box-shadow:
    inset 0 1px 2px rgba(31, 34, 38, .04),
    0 0 0 3px rgba(47, 155, 191, .06);
}

/* 滑块：从 0% 起步，JS 按选中项索引更新 --seg-index */
.seg-pill__indicator {
  position: absolute;
  top: 4px; bottom: 4px;
  left: 4px;
  width: calc((100% - 8px) / var(--seg-count));
  border-radius: var(--r-pill);
  background: var(--grad-accent);
  box-shadow:
    0 8px 22px -6px rgba(47, 155, 191, .45),
    0 2px 6px -2px rgba(86, 173, 205, .25);
  transform: translateX(calc(var(--seg-index, 0) * 100%));
  transition:
    transform var(--t-slow) var(--ease-spring),
    background var(--t-base) var(--ease);
  z-index: 0;
  pointer-events: none;
}

/* 选项按钮 */
.seg-pill__opt {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 9px 12px;
  border: none;
  background: transparent;
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  letter-spacing: .2px;
  cursor: pointer;
  border-radius: var(--r-pill);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
  transition:
    color var(--t-base) var(--ease),
    transform var(--t-fast) var(--ease-spring);
}
.seg-pill__opt:hover:not(.is-active) {
  color: var(--c-text);
}
.seg-pill__opt:active { transform: scale(.97); }

.seg-pill__opt.is-active {
  color: var(--c-accent-contrast);
}
/* active 选项：文字着色 + 图标放大点 */
.seg-pill__opt.is-active .seg-pill__icon {
  transform: scale(1.1);
  filter: drop-shadow(0 2px 6px rgba(0, 0, 0, .18));
}

.seg-pill__icon {
  font-size: 15px;
  line-height: 1;
  transition: transform var(--t-base) var(--ease-spring), filter var(--t-base) var(--ease);
}

.seg-pill__text {
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

/* 键盘焦点环：只在键盘导航时显示 */
.seg-pill__opt:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}

/* 用户身份：engineer = accent，analyst = violet */
.seg-pill[data-target="hubUserTypeSelect"][data-active="analyst"] .seg-pill__indicator {
  background: linear-gradient(135deg, var(--c-violet-light), var(--c-violet) 45%, #3eaecf);
}
#step4_progress .progress-icon {
  animation: fx-icon-float 3s var(--ease) infinite alternate;
  filter: drop-shadow(0 8px 20px rgba(47, 155, 191, .25));
}
@keyframes fx-icon-float {
  0%   { transform: translateY(0)     rotate(-2deg); }
  100% { transform: translateY(-4px)  rotate(2deg);  }
}

#progressPageTitle {
  color: var(--c-text, #1f2226);
  display: inline-block;
}
@keyframes fx-ring-expand {
  0%   { transform: scale(1);    opacity: .5; }
  70%  { transform: scale(1.4);  opacity: 0;  }
  100% { transform: scale(1.4);  opacity: 0;  }
}
@keyframes fx-dataflow-slide {
  0%   { transform: translateX(-50%); }
  100% { transform: translateX(350%); }
}
@keyframes fx-bar-shimmer {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(100%);  }
}
/* 完成横幅弹入 */
@keyframes completion-pop {
  0%   { transform: scale(.94); opacity: 0; }
  60%  { transform: scale(1.01); }
  100% { transform: scale(1); opacity: 1; }
}
#analysisCompleteBanner {
  animation: completion-pop 500ms var(--ease-out) both;
}

/* 进度控制按钮区：按压反馈 */
.progress-controls .btn { transition: transform var(--t-fast) var(--ease-spring),
                                      background var(--t-fast) var(--ease); }
.progress-controls .btn:active:not(:disabled) { transform: scale(.96); }

/* 脉冲波纹指示卡（含 pulse-* keyframes）已删（2026-07-05 进度页重构）：
   宿主 #stageXDetail 随两阶段卡整链移除。 */


/* ==========================================================================
 * §9  结果表格：行内展开 + 分页控件
 * ==========================================================================*/

/* ---- 展开按钮（▸ / ▾） ---- */
.row-expand-cell {
  text-align: center;
  padding: 0 !important;
}
.row-expand-btn {
  width: 24px; height: 24px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-xs);
  background: var(--c-surface);
  color: var(--c-text-muted);
  font-size: 11px;
  line-height: 1;
  cursor: pointer;
  transition: transform var(--t-fast) var(--ease-spring),
              background var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease);
}
.row-expand-btn:hover {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border-color: var(--c-accent);
}
.row-expand-btn.is-open {
  background: var(--c-accent);
  color: #fff;
  border-color: var(--c-accent);
  transform: rotate(0deg);
}

/* ---- 展开行 ---- */
.row-expanded {
  background: linear-gradient(180deg,
    rgba(47, 155, 191, .04),
    transparent) !important;
  animation: row-expand-in var(--t-slower) var(--ease-out) both;
}
.row-expanded > td {
  padding: 0 !important;
  border-top: 0 !important;
  background: transparent !important;
}
@keyframes row-expand-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0);    }
}
.row-expanded__inner {
  padding: var(--sp-4) var(--sp-5) var(--sp-5);
  border-left: 3px solid var(--c-accent);
  background:
    linear-gradient(90deg,
      rgba(47, 155, 191, .04) 0%,
      rgba(86, 173, 205, .03) 60%,
      transparent 100%);
}
.row-expanded__title {
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  color: var(--c-accent);
  letter-spacing: .5px;
  text-transform: uppercase;
  margin-bottom: var(--sp-3);
}
.row-expanded__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: var(--sp-3) var(--sp-5);
}
.expanded-field {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 6px 0;
  border-bottom: 1px dashed var(--c-divider);
}
.expanded-field__key {
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  letter-spacing: .2px;
}
.expanded-field__val {
  font-size: var(--fs-sm);
  color: var(--c-text);
  line-height: var(--lh-base);
  word-break: break-word;
}

/* ---- L-1: 判定依据区块（展开行最上方） ---- */
.evd-block {
  margin-bottom: var(--sp-4);
  padding: var(--sp-3) var(--sp-4);
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  box-shadow: 0 1px 2px rgba(31, 34, 38, .03);
}

.evd-head {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
  margin-bottom: var(--sp-2);
  padding-bottom: var(--sp-2);
  border-bottom: 1px dashed var(--c-divider);
}
.evd-head__label {
  font-size: var(--fs-xs);
  letter-spacing: .5px;
  text-transform: uppercase;
  color: var(--c-accent);
  font-weight: var(--fw-semibold);
}

.evd-head__risk {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 10px 3px 8px;
  border-radius: var(--r-pill);
  background: color-mix(in srgb, var(--risk-color) 12%, white);
  border: 1px solid color-mix(in srgb, var(--risk-color) 30%, transparent);
  color: var(--risk-color);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
}
.evd-head__risk-dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--risk-color);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--risk-color) 20%, transparent);
}

.evd-head__sources {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-left: auto;
}

.evd-src {
  font-size: 11px;
  letter-spacing: .2px;
  padding: 2px 8px;
  border-radius: var(--r-pill);
  border: 1px solid var(--c-border);
  background: var(--c-surface-2);
  color: var(--c-text-muted);
  white-space: nowrap;
}
.evd-src--llm {
  border-color: rgba(47, 155, 191, .3);
  background: var(--c-accent-soft);
  color: var(--c-accent);
}
.evd-src--rules {
  border-color: rgba(38, 130, 163, .3);
  background: rgba(224, 247, 252, .8);
  color: #0e7490;
}

.evd-row {
  display: grid;
  grid-template-columns: 96px 1fr;
  gap: var(--sp-3);
  padding: 4px 0;
}
.evd-row + .evd-row {
  border-top: 1px dashed var(--c-divider);
  margin-top: 2px;
  padding-top: 6px;
}
.evd-row__key {
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  letter-spacing: .2px;
  padding-top: 2px;
}
.evd-row__val {
  font-size: var(--fs-sm);
  color: var(--c-text);
  line-height: var(--lh-base);
  word-break: break-word;
}
.evd-row__val--reasoning {
  white-space: pre-wrap;
  background: linear-gradient(90deg,
    rgba(47, 155, 191, .04) 0%,
    transparent 100%);
  padding: 6px 10px;
  border-left: 2px solid var(--c-accent);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  color: var(--c-text);
}
.evd-row--action .evd-row__val { padding-top: 0; }

@media (max-width: 640px) {
  .evd-head { flex-direction: column; align-items: flex-start; }
  .evd-head__sources { margin-left: 0; }
  .evd-row { grid-template-columns: 1fr; gap: 4px; }
  .evd-row__key { padding-top: 0; }
}

/* ---- T-6: 上传诊断条（dropzone 下方友好错误） ---- */
.upload-diag {
  margin-top: var(--sp-3);
  padding: 12px 14px 10px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  border-left: 3px solid var(--c-text-faint);
  box-shadow: 0 2px 8px -4px rgba(31, 34, 38, .12);
  animation: motion-fade-in var(--t-slower) var(--ease-out) both;
}
.upload-diag[hidden] { display: none; }
.upload-diag[data-level="error"] {
  border-left-color: var(--c-danger);
  background: color-mix(in srgb, var(--c-danger-soft) 70%, white);
}
.upload-diag[data-level="warn"] {
  border-left-color: var(--c-warning);
  background: color-mix(in srgb, var(--c-warning-soft) 60%, white);
}
.upload-diag[data-level="info"] {
  border-left-color: var(--c-accent);
  background: color-mix(in srgb, var(--c-accent-soft) 50%, white);
}

.upload-diag__head {
  display: flex;
  align-items: center;
  gap: 8px;
}
.upload-diag__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px; height: 22px;
  border-radius: 50%;
  background: var(--c-surface);
  font-weight: var(--fw-bold);
  font-size: 13px;
  flex-shrink: 0;
}
.upload-diag[data-level="error"] .upload-diag__icon {
  background: var(--c-danger); color: #fff;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--c-danger) 22%, transparent);
}
.upload-diag[data-level="warn"] .upload-diag__icon {
  background: var(--c-warning); color: #fff;
}
.upload-diag[data-level="info"] .upload-diag__icon {
  background: var(--c-accent); color: #fff;
}

.upload-diag__title {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  flex: 1;
  min-width: 0;
}

.upload-diag__close {
  width: 22px; height: 22px;
  border: none;
  background: transparent;
  color: var(--c-text-faint);
  font-size: 18px; line-height: 1;
  cursor: pointer;
  border-radius: 50%;
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.upload-diag__close:hover {
  background: rgba(31, 34, 38, .06);
  color: var(--c-text);
}

.upload-diag__list {
  margin: 8px 0 6px 32px;
  padding: 0;
  list-style: disc outside;
  font-size: var(--fs-sm);
  color: var(--c-text);
  line-height: var(--lh-base);
}
.upload-diag__list li {
  margin: 2px 0;
  padding-left: 2px;
  word-break: break-word;
}

.upload-diag__cta {
  margin-top: 6px;
  padding-left: 32px;
  font-size: var(--fs-xs);
}

/* ---- T-1: stage2 表格视图切换（精简 / 完整） ---- */
.view-toggle {
  display: inline-flex;
  padding: 3px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-pill);
  box-shadow: inset 0 1px 2px rgba(31, 34, 38, .04);
  position: relative;
}
.view-toggle__btn {
  position: relative;
  z-index: 1;
  padding: 4px 12px;
  border: none;
  background: transparent;
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  letter-spacing: .3px;
  border-radius: var(--r-pill);
  cursor: pointer;
  transition:
    background var(--t-fast) var(--ease),
    color      var(--t-fast) var(--ease),
    transform  var(--t-fast) var(--ease-spring);
  white-space: nowrap;
}
.view-toggle__btn:hover:not(.is-active) { color: var(--c-text); }
.view-toggle__btn:active { transform: scale(.96); }
.view-toggle__btn.is-active {
  background: var(--grad-accent);
  color: #fff;
  box-shadow: 0 4px 10px -3px rgba(47, 155, 191, .4);
}
.view-toggle__btn:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}

/* ---- T-4: 问题目的副标题（AI 想确认 …） ---- */
.message-bubble .message-purpose {
  margin-top: 10px;
  padding: 8px 10px;
  background: color-mix(in srgb, var(--c-accent-soft) 80%, transparent);
  border-left: 2px solid var(--c-accent);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: 1.55;
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.message-purpose__label {
  color: var(--c-accent);
  font-weight: var(--fw-semibold);
  letter-spacing: .3px;
  text-transform: uppercase;
  font-size: 10px;
  flex-shrink: 0;
  padding-top: 1px;
}
.message-purpose__text {
  flex: 1;
  min-width: 0;
  color: var(--c-text);
}

/* ---- #1 (2026-05-16): step1 输入引导卡 ----
   #2a (2026-05-16): 改为单行——灯泡和文字在同一行（align-items: center），
   而不是图标占左、文字独立换行。 */
.step1-input-hint {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  margin: 0 0 12px;
  background: linear-gradient(135deg,
    rgba(47, 155, 191, .06),
    rgba(86, 173, 205, .04));
  border: 1px solid rgba(47, 155, 191, .18);
  border-radius: var(--r-md);
  font-size: var(--fs-sm);
  line-height: 1.5;
  color: var(--c-text);
}
.step1-input-hint__icon {
  font-size: 18px;
  line-height: 1;
  flex-shrink: 0;
}
.step1-input-hint__body {
  flex: 1;
  min-width: 0;
}

/* ---- #3 (2026-05-16): "跳过"按钮从输入框上方移入输入区按钮组，与"发送"对仗。
     旧 .answer-meta / .answer-skip 样式保留以防其它页面引用，但 step2 不再用 ---- */
.answer-input__actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex-shrink: 0;
}
/* 让 textarea 在桌面宽度下不被按钮挤窄 */
.answer-input__actions .btn {
  min-width: 130px;
  padding: 10px 14px;
  font-size: var(--fs-sm);
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  border-radius: var(--r-md);
}
.btn-skip {
  background: white;
  color: var(--c-text-muted);
  border: 1px solid var(--c-border-strong);
  cursor: pointer;
  transition:
    color var(--t-fast) var(--ease),
    border-color var(--t-fast) var(--ease),
    background var(--t-fast) var(--ease),
    transform var(--t-fast) var(--ease-spring);
}
.btn-skip:hover {
  color: var(--c-accent);
  border-color: var(--c-accent);
  background: var(--c-accent-soft);
}
.btn-skip:active { transform: scale(.97); }
.btn-skip:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}
/* 在窄屏（< 640px）下，按钮组改成横排紧凑（textarea 单行后两按钮并排） */
@media (max-width: 640px) {
  .answer-input { flex-direction: column; }
  .answer-input__actions { flex-direction: row; }
  .answer-input__actions .btn { flex: 1; min-width: 0; }
}

/* ---- A5 步骤 4（2026-07-06）：跳过整个对话的低调文字链（输入区下方右对齐） ---- */
.dialog-skip-all {
  text-align: right;
  margin-top: 8px;
}
.dialog-skip-all a {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  text-decoration: none;
  transition: color var(--t-fast) var(--ease);
}
.dialog-skip-all a:hover {
  color: var(--c-accent);
  text-decoration: underline;
}

/* ---- T-4: 输入区上方的"跳过"按钮（旧版，step2 已不用，保留兜底） ---- */
.answer-meta {
  display: flex;
  justify-content: flex-end;
  padding: 4px 0 0;
  margin-top: 4px;
}
.answer-skip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 12px;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  background: transparent;
  border: 1px dashed var(--c-border-strong);
  border-radius: var(--r-pill);
  cursor: pointer;
  transition:
    color var(--t-fast) var(--ease),
    border-color var(--t-fast) var(--ease),
    background var(--t-fast) var(--ease),
    transform var(--t-fast) var(--ease-spring);
}
.answer-skip:hover {
  color: var(--c-accent);
  border-color: var(--c-accent);
  border-style: solid;
  background: var(--c-accent-soft);
}
.answer-skip:active { transform: scale(.97); }
.answer-skip:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}

/* ---- T-4: AI 提取的核心技术特征 chips ---- */
.extracted-features {
  background: linear-gradient(135deg,
    rgba(238, 240, 255, .55),
    rgba(224, 247, 252, .35));
  border: 1px solid rgba(47, 155, 191, .18);
  border-radius: var(--r-md);
  padding: 14px 16px;
}
.extracted-features[hidden] { display: none; }

.extracted-features__head {
  display: flex;
  align-items: baseline;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}
.extracted-features__title {
  margin: 0;
  font-size: var(--fs-md);
  color: var(--c-text);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.extracted-features__title::before {
  content: '✨';
  font-size: 14px;
  filter: drop-shadow(0 2px 6px rgba(47, 155, 191, .3));
}
.extracted-features__hint {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  letter-spacing: .1px;
}

.extracted-features__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.feat-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 4px 3px 10px;
  background: var(--c-surface);
  border: 1px solid color-mix(in srgb, var(--c-accent) 22%, var(--c-border));
  border-radius: var(--r-pill);
  font-size: var(--fs-sm);
  color: var(--c-text);
  transition: background var(--t-fast) var(--ease),
              box-shadow var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease-spring);
  animation: motion-fade-in var(--t-slower) var(--ease-out) both;
}
.feat-chip:hover {
  background: var(--c-accent-soft);
  box-shadow: var(--glow-accent-sm);
}
.feat-chip__text {
  line-height: 1.3;
  white-space: nowrap;
  max-width: 320px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.feat-chip__remove {
  width: 20px; height: 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  background: transparent;
  color: var(--c-text-faint);
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  border-radius: 50%;
  transition: background var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease-spring);
}
.feat-chip__remove:hover {
  background: var(--c-danger);
  color: #fff;
  transform: rotate(90deg);
}
.feat-chip__remove:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 2px;
}

/* ============================================================================
 * §11  T-7 + L-1 强化：Claim Chart 右侧抽屉
 * ----------------------------------------------------------------------------
 * 与原全屏 modal 的对比：
 *   - 抽屉从屏幕右侧滑入，主表仍可见，律师复审不用频繁开关
 *   - 头部加 ‹ › 上一条/下一条 + 位置指示
 *   - 支持 ← / → 翻页，ESC 关闭，输入态不拦截
 *   - L-1 强化：权项原文整段显示；每 feature 的 reasoning 独占一行、不截断
 * ==========================================================================*/

.claim-drawer {
  position: fixed;
  top: 0; right: 0; bottom: 0;
  width: min(920px, 96vw);
  background: var(--c-surface);
  border-left: 1px solid var(--c-border);
  box-shadow: -12px 0 40px -10px rgba(31, 34, 38, .22);
  z-index: 9999;
  display: flex;
  flex-direction: column;
  transform: translateX(100%);
  transition: transform var(--t-slow) var(--ease-out);
  outline: none;
}
.claim-drawer.is-open { transform: translateX(0); }

.claim-drawer__head {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 14px 18px 12px;
  border-bottom: 1px solid var(--c-divider);
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--c-accent-soft) 55%, white),
    color-mix(in srgb, rgba(224, 247, 252, 1) 60%, white));
}
.claim-drawer__meta { flex: 1; min-width: 0; }

.claim-drawer__title-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
}
.claim-drawer__title-row h3 {
  margin: 0;
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.claim-drawer__sub {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: 1.5;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
.claim-drawer__stats {
  margin-top: 6px;
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  font-size: 11px;
  color: var(--c-text-muted);
  letter-spacing: .2px;
}
.claim-drawer__stats strong {
  color: var(--c-accent);
  font-variant-numeric: tabular-nums;
}
.claim-drawer__pos {
  padding: 1px 8px;
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border-radius: var(--r-pill);
  font-weight: var(--fw-semibold);
}

.claim-drawer__nav {
  display: inline-flex;
  gap: 6px;
  flex-shrink: 0;
  align-self: flex-start;
}
.claim-drawer__nav-btn,
.claim-drawer__close {
  width: 32px; height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--c-border);
  background: var(--c-surface);
  color: var(--c-text-muted);
  border-radius: var(--r-sm);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease),
              color      var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease),
              transform  var(--t-fast) var(--ease-spring);
}
.claim-drawer__nav-btn:hover:not(:disabled),
.claim-drawer__close:hover {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border-color: var(--c-accent);
}
.claim-drawer__nav-btn:active:not(:disabled),
.claim-drawer__close:active { transform: scale(.94); }
.claim-drawer__nav-btn:disabled {
  opacity: .35;
  cursor: not-allowed;
}
.claim-drawer__close {
  width: 32px;
  font-size: 22px;
  margin-left: 4px;
}

.claim-drawer__body {
  flex: 1;
  overflow-y: auto;
  padding: 14px 18px 8px;
}

/* ---- 单条权项卡 ---- */
.claim-block {
  position: relative;
  margin-bottom: 16px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  overflow: hidden;
}
.claim-block__head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  background: var(--c-surface-2);
  border-bottom: 1px solid var(--c-divider);
}
.claim-block__num {
  font-size: var(--fs-sm);
  color: var(--c-text);
}
.claim-block__kind {
  font-size: 11px;
  padding: 1px 8px;
  border-radius: var(--r-pill);
  letter-spacing: .2px;
}
.claim-block__kind.kind--indep {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
}
.claim-block__kind.kind--dep {
  background: var(--c-surface);
  color: var(--c-text-muted);
  border: 1px dashed var(--c-border-strong);
}
.claim-block__verdict {
  margin-left: auto;
  padding: 2px 10px;
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  border-radius: var(--r-pill);
  border: 1px solid transparent;
}
.claim-block__verdict.verdict--high {
  color: var(--c-danger);
  background: var(--c-danger-soft);
  border-color: color-mix(in srgb, var(--c-danger) 28%, transparent);
}
.claim-block__verdict.verdict--med {
  color: #b45309;
  background: var(--c-warning-soft);
  border-color: color-mix(in srgb, var(--c-warning) 35%, transparent);
}
.claim-block__verdict.verdict--low {
  color: #047857;
  background: var(--c-success-soft);
  border-color: color-mix(in srgb, var(--c-success) 30%, transparent);
}

/* ---- L-1 强化: 权项原文整段展示（不截断） ---- */
.claim-block__text {
  padding: 10px 14px 12px;
  border-bottom: 1px solid var(--c-divider);
  background: linear-gradient(180deg,
    rgba(47, 155, 191, .02),
    transparent);
}
.claim-block__text-label {
  font-size: 10px;
  letter-spacing: .5px;
  text-transform: uppercase;
  color: var(--c-text-faint);
  font-weight: var(--fw-semibold);
  margin-bottom: 4px;
}
.claim-block__text-body {
  margin: 0;
  padding: 8px 12px;
  background: var(--c-surface-2);
  border-left: 3px solid var(--c-accent);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  font-size: var(--fs-sm);
  line-height: 1.7;
  color: var(--c-text);
  white-space: pre-wrap;
  word-break: break-word;
  /* 长权项（>400 字）加滚动条，避免一条权项撑到 2000px 高 */
  max-height: 260px;
  overflow-y: auto;
}

/* ---- L-1 强化: Feature 级分析表 ---- */
.claim-block__features {
  overflow-x: auto;
}
.feat-table {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
  font-size: var(--fs-xs);
}
.feat-table thead tr {
  background: var(--c-surface-2);
  color: var(--c-text-muted);
}
.feat-table thead th {
  padding: 8px 10px;
  text-align: left;
  font-weight: var(--fw-semibold);
  letter-spacing: .2px;
  border-bottom: 1px solid var(--c-divider);
}
/* 固定列宽：我方特征 20% / 匹配 90px / 置信 70px / 命中原文 30% / reasoning 余下 */
.feat-table th:nth-child(1) { width: 20%; }
.feat-table th:nth-child(2) { width: 110px; }
.feat-table th:nth-child(3) { width: 84px; }
.feat-table th:nth-child(4) { width: 28%; }
/* 5 列自动撑 reasoning */

.feat-row + .feat-row .feat-cell { border-top: 1px solid var(--c-divider); }
.feat-cell {
  padding: 10px;
  vertical-align: top;
  word-break: break-word;
  line-height: 1.55;
  color: var(--c-text);
}
.feat-cell--our { font-weight: var(--fw-medium); }

/* 命中原文：引用格式 */
.feat-cite {
  margin: 0;
  padding: 6px 10px;
  background: var(--c-surface-2);
  border-left: 2px solid var(--c-accent);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  color: var(--c-text-muted);
  font-size: 12px;
  line-height: 1.55;
  font-style: italic;
  white-space: pre-wrap;
}

/* reasoning：全文展示，不再 title 截断 */
.feat-reason {
  color: var(--c-text);
  font-size: 12px;
  line-height: 1.6;
  white-space: pre-wrap;
}

/* 窄屏：抽屉全屏铺满 */
@media (max-width: 640px) {
  .claim-drawer {
    width: 100vw;
    box-shadow: none;
    border-left: none;
  }
  .feat-table { table-layout: auto; }
  .feat-table th:nth-child(n) { width: auto; }
}

@media (prefers-reduced-motion: reduce) {
  .claim-drawer { transition: none; }
}
/* 大屏：抽屉更宽，展示比对表不拥挤 */
@media (min-width: 1600px) {
  .claim-drawer { width: min(1200px, 70vw); }
}
@media (min-width: 2400px) {
  .claim-drawer { width: min(1500px, 60vw); }
}

/* ============================================================================
 * §12  Command Palette (Ctrl+K / Cmd+K)
 * ==========================================================================*/

.cmdp {
  position: fixed;
  inset: 0;
  z-index: 10001;
  display: flex;
  justify-content: center;
  align-items: flex-start;
  padding-top: 12vh;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--t-base) var(--ease);
}
.cmdp.is-open {
  opacity: 1;
  pointer-events: auto;
}

.cmdp__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(20, 22, 26, .38);
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
}

.cmdp__panel {
  position: relative;
  width: min(640px, 92vw);
  max-height: 72vh;
  display: flex;
  flex-direction: column;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  box-shadow:
    0 24px 60px -12px rgba(31, 34, 38, .32),
    0 0 0 1px rgba(47, 155, 191, .12);
  overflow: hidden;
  transform: translateY(-8px) scale(.98);
  opacity: 0;
  transition:
    transform var(--t-base) var(--ease-spring),
    opacity   var(--t-base) var(--ease);
}
.cmdp.is-open .cmdp__panel {
  transform: translateY(0) scale(1);
  opacity: 1;
}

/* 顶部搜索栏 */
.cmdp__search {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--c-divider);
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--c-accent-soft) 60%, white),
    color-mix(in srgb, rgba(224, 247, 252, 1) 50%, white));
}
.cmdp__icon {
  width: 24px; height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-sm);
  background: var(--c-accent);
  color: #fff;
  font-size: 14px;
  font-weight: var(--fw-bold);
  flex-shrink: 0;
}
.cmdp__input {
  flex: 1;
  border: none;
  background: transparent;
  font-family: var(--font-sans);
  font-size: var(--fs-md);
  color: var(--c-text);
  outline: none;
  padding: 4px 2px;
  min-width: 0;
}
.cmdp__input::placeholder {
  color: var(--c-text-faint);
}
.cmdp__kbd {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--c-text-muted);
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-bottom-width: 2px;
  padding: 2px 6px;
  border-radius: var(--r-xs);
  flex-shrink: 0;
}

/* 命令列表 */
.cmdp__list {
  flex: 1;
  overflow-y: auto;
  padding: 6px 0;
  scroll-behavior: smooth;
}
.cmdp__empty {
  padding: 30px 20px;
  text-align: center;
  color: var(--c-text-faint);
  font-size: var(--fs-sm);
}
.cmdp__group {
  padding: 8px 16px 4px;
  font-size: 10px;
  letter-spacing: .5px;
  text-transform: uppercase;
  color: var(--c-text-faint);
  font-weight: var(--fw-semibold);
  position: sticky;
  top: 0;
  background: linear-gradient(180deg,
    var(--c-surface) 70%,
    color-mix(in srgb, var(--c-surface) 80%, transparent));
  z-index: 1;
}

.cmdp__item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 16px;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease);
}
.cmdp__item:hover,
.cmdp__item.is-active {
  background: var(--c-accent-soft);
}
.cmdp__item.is-active {
  box-shadow: inset 3px 0 0 var(--c-accent);
}
.cmdp__item-icon {
  width: 28px; height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--c-surface-2);
  border-radius: var(--r-sm);
  font-size: 14px;
  flex-shrink: 0;
}
.cmdp__item-icon svg { width: 16px; height: 16px; display: block; }
.cmdp__item.is-active .cmdp__item-icon {
  background: var(--c-accent);
  color: #fff;
}
.cmdp__item-main {
  flex: 1;
  min-width: 0;
}
.cmdp__item-label {
  font-size: var(--fs-sm);
  color: var(--c-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.cmdp__item-label mark {
  background: transparent;
  color: var(--c-accent);
  font-weight: var(--fw-semibold);
}
.cmdp__item.is-active .cmdp__item-label mark { color: var(--c-accent-hover); }
.cmdp__item-hint {
  font-size: 11px;
  color: var(--c-text-muted);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 底部快捷键提示 */
.cmdp__foot {
  display: flex;
  gap: 14px;
  padding: 8px 14px;
  border-top: 1px solid var(--c-divider);
  background: var(--c-surface-2);
  font-size: 11px;
  color: var(--c-text-muted);
}
.cmdp__foot kbd {
  font-family: var(--font-mono);
  padding: 1px 5px;
  margin-right: 4px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-bottom-width: 2px;
  border-radius: var(--r-xs);
  font-size: 10px;
}

/* 全局 toast（Command Palette 触发的反馈提示） */
.cmdp-toast {
  position: fixed;
  bottom: 26px;
  left: 50%;
  transform: translate(-50%, 10px);
  padding: 10px 16px;
  background: var(--c-text);
  color: #fff;
  border-radius: var(--r-pill);
  font-size: var(--fs-xs);
  box-shadow: 0 12px 32px -8px rgba(31, 34, 38, .35);
  z-index: 10002;
  opacity: 0;
  transition:
    opacity var(--t-base) var(--ease),
    transform var(--t-base) var(--ease-spring);
  pointer-events: none;
}
.cmdp-toast.is-in {
  opacity: 1;
  transform: translate(-50%, 0);
}

/* 当 Command Palette 跳到某一行时，短暂高亮 */
tr.is-highlight > td {
  background: color-mix(in srgb, var(--c-accent-soft) 80%, white) !important;
  transition: background var(--t-slower) var(--ease);
}

@media (max-width: 640px) {
  .cmdp { padding-top: 6vh; }
  .cmdp__panel { width: 96vw; max-height: 80vh; }
  .cmdp__foot { flex-wrap: wrap; row-gap: 6px; }
}

@media (prefers-reduced-motion: reduce) {
  .cmdp,
  .cmdp__panel,
  .cmdp-toast { transition: none; }
}
.match-badge,
.conf-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 1px 8px;
  font-size: 12px;
  font-weight: var(--fw-semibold);
  letter-spacing: .2px;
  border-radius: var(--r-pill);
  border: 1px solid transparent;
  cursor: help;
  white-space: nowrap;
  transition: background var(--t-fast) var(--ease), transform var(--t-fast) var(--ease-spring);
}
.match-badge::before {
  content: '';
  width: 6px; height: 6px;
  border-radius: 50%;
  background: currentColor;
  opacity: .85;
  flex-shrink: 0;
}
.match-badge--literal {
  color: var(--c-danger);
  background: var(--c-danger-soft);
  border-color: color-mix(in srgb, var(--c-danger) 25%, transparent);
}
.match-badge--equivalent {
  color: #b45309;
  background: var(--c-warning-soft);
  border-color: color-mix(in srgb, var(--c-warning) 35%, transparent);
}
.match-badge--none {
  color: #047857;
  background: var(--c-success-soft);
  border-color: color-mix(in srgb, var(--c-success) 30%, transparent);
}
.match-badge:hover,
.conf-badge:hover { transform: translateY(-1px); }

.conf-badge--high { color: var(--c-danger);  background: color-mix(in srgb, var(--c-danger)  10%, white); }
.conf-badge--med  { color: #b45309;          background: color-mix(in srgb, var(--c-warning) 12%, white); }
.conf-badge--low  { color: var(--c-text-faint); background: var(--c-surface-2); }

/* ---- T-2: Claim Chart 头部的 (i) 按钮 ---- */
.chart-info-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px; height: 22px;
  border-radius: 50%;
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border: 1px solid color-mix(in srgb, var(--c-accent) 28%, transparent);
  font-size: 13px;
  font-weight: var(--fw-bold);
  font-style: italic;
  font-family: Georgia, 'Times New Roman', serif;
  line-height: 1;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease), transform var(--t-fast) var(--ease-spring);
}
.chart-info-btn:hover {
  background: var(--c-accent);
  color: #fff;
  transform: scale(1.08);
}
.chart-info-btn:active { transform: scale(.95); }

/* ---- T-2: Claim Chart 说明面板 ---- */
.chart-explainer {
  margin: 0 20px 12px;
  padding: 14px 16px;
  background: linear-gradient(135deg,
    rgba(238, 240, 255, .7),
    rgba(224, 247, 252, .45));
  border: 1px solid rgba(47, 155, 191, .18);
  border-radius: var(--r-md);
  animation: motion-fade-in var(--t-slower) var(--ease-out) both;
}
.chart-explainer[hidden] { display: none; }
.chart-explainer__title {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-accent);
  letter-spacing: .3px;
  margin-bottom: 10px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.chart-explainer__title::before {
  content: 'i';
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px; height: 16px;
  border-radius: 50%;
  background: var(--c-accent);
  color: #fff;
  font-size: 11px;
  font-style: italic;
  font-family: Georgia, 'Times New Roman', serif;
}
.chart-explainer__list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 10px;
  margin: 0 0 10px;
}
.chart-explainer__item {
  padding: 8px 12px;
  background: var(--c-surface);
  border-left: 3px solid var(--c-border-strong);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
}
.chart-explainer__item dt {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  margin-bottom: 4px;
}
.chart-explainer__item dd {
  margin: 0;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: 1.55;
}
.chart-explainer__item--literal    { border-left-color: var(--c-danger); }
.chart-explainer__item--literal dt { color: var(--c-danger); }
.chart-explainer__item--equivalent    { border-left-color: var(--c-warning); }
.chart-explainer__item--equivalent dt { color: #b45309; }
.chart-explainer__item--none       { border-left-color: var(--c-success); }
.chart-explainer__item--none dt    { color: #047857; }

.chart-explainer__rule {
  padding: 8px 12px;
  font-size: var(--fs-xs);
  color: var(--c-text);
  background: var(--c-surface);
  border-radius: var(--r-sm);
  line-height: 1.6;
  margin-bottom: 8px;
}
.chart-explainer__rule em { font-style: normal; color: var(--c-accent); }
.chart-explainer__note {
  font-size: 11px;
  color: var(--c-text-faint);
  font-style: italic;
}

/* ---- 分页控件 ---- */
.table-pager {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--sp-2);
  flex-wrap: wrap;
  padding: var(--sp-3) 0 0;
  font-size: var(--fs-sm);
}
.table-pager__info {
  margin-right: auto;
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
}
.table-pager__num,
.table-pager__nav {
  min-width: 32px;
  height: 30px;
  padding: 0 8px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  background: var(--c-surface);
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  font-variant-numeric: tabular-nums;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease-spring);
}
.table-pager__num:hover:not(.is-active),
.table-pager__nav:hover:not(:disabled) {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border-color: var(--c-accent);
}
.table-pager__num:active:not(.is-active),
.table-pager__nav:active:not(:disabled) { transform: scale(.95); }
.table-pager__num.is-active {
  background: var(--grad-accent);
  color: #fff;
  border-color: transparent;
  box-shadow: var(--glow-accent-sm);
  cursor: default;
}
.table-pager__nav:disabled {
  opacity: .4;
  cursor: not-allowed;
}
.table-pager__ellipsis {
  padding: 0 4px;
  color: var(--c-text-faint);
}

@media (max-width: 640px) {
  .table-pager__info { width: 100%; margin: 0 0 6px 0; }
  .table-pager { justify-content: center; }
}


/* ==========================================================================
 * §10  减少动效支持（覆盖新增部分）
 * ==========================================================================*/
@media (prefers-reduced-motion: reduce) {
  .row-expanded,
  .row-expanded__inner { animation: none !important; }
}


/* ==========================================================================
 * §4  Results 页：#step4
 * --------------------------------------------------------------------------
 * 结构（见 index.html:599-698）：
 *   .result-header > #resultTitle / #resultDesc
 *   .stats-grid > .stat-card × 3
 *   .result-actions > 下载 + FTO 报告
 *   #executiveSummary / #priorityActions / #reviewQueueSection
 *   <details> 包含 stage1 / stage2 表格
 * 升级：
 *   - 标题渐变 + 图标光晕
 *   - 统计卡加脉冲光晕（highlight + danger）
 *   - 主 CTA 下载按钮加渐变 + 发光
 *   - 执行摘要 / 优先清单用 motion-fade-in 顺序出场
 * ==========================================================================*/
#resultTitle {
  color: var(--c-text, #1f2226);
  display: inline-block;
}

/* 统计卡栅格 */
@media (max-width: 768px) {
  .progress-summary { grid-template-columns: 1fr !important; }
}

/* 统计卡升级：highlight / danger 加发光 + 数字渐变 */

.stat-number { font-variant-numeric: tabular-nums; }

/* 结果操作区：下载按钮做主 CTA 风格 */
.result-actions {
  display: flex;
  justify-content: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
  margin: var(--sp-5) 0 !important;
}
.result-actions .btn-primary.btn-large {
  padding: 12px 24px !important;
  font-size: var(--fs-md) !important;
  background: var(--grad-accent) !important;
  border: none;
  position: relative;
  overflow: hidden;
  transition: transform var(--t-fast) var(--ease-spring),
              box-shadow var(--t-base) var(--ease),
              filter var(--t-base) var(--ease);
  box-shadow: var(--glow-accent-sm);
}
.result-actions .btn-primary.btn-large:hover {
  box-shadow: var(--glow-accent);
  transform: translateY(-1px);
  filter: brightness(1.04);
}
.result-actions .btn-primary.btn-large:active { transform: translateY(1px) scale(.98); }

/* 2026-06-15: 结果页 CTA 去掉 shimmer 扫光（::before 掠过白光）+ 渐变滑动动画——
   消费级炫光语汇，与"冷静专业"基准冲突。改为实色品牌渐变 + 克制投影 + 微抬升 + 极轻提亮，
   保留 CTA 应有的视觉分量但不喧哗。唯一的灵动统一收敛到首页那抹跟手微光。 */

/* 执行摘要 + 优先处理清单：叠加入场 */
#executiveSummary,
#priorityActions,
#focusTierSection {
  animation: motion-fade-in var(--t-slower) var(--ease-out) both;
}
#executiveSummary { animation-delay: 80ms; }
#priorityActions  { animation-delay: 160ms; }
#focusTierSection { animation-delay: 240ms; }

/* 执行摘要卡：加轻量光晕 */
#executiveSummary > div {
  position: relative;
  overflow: hidden;
  background: var(--c-surface) !important;
  box-shadow: var(--shadow-1);
}
#executiveSummary > div::before {
  content: '';
  position: absolute;
  top: 0; right: 0;
  width: 240px; height: 100%;
  background: radial-gradient(circle at 100% 0%,
    var(--c-accent-soft), transparent 60%);
  opacity: .5;
  pointer-events: none;
}


/* ==========================================================================
 * §5  Conversation 页：#step2
 * --------------------------------------------------------------------------
 * 结构（见 index.html:391-418）：
 *   .progress-section
 *   .chat-status > h3 / p
 *   .dialog-container > .message-bubble × N
 *   .quick-options > .options-row
 *   .answer-input > textarea + 发送按钮
 * 升级：
 *   - chat-status 加"思考中"呼吸环
 *   - message-bubble 入场上浮 + 淡入
 *   - 发送按钮按压 + 主 CTA 风格
 *   - textarea 获得焦点发光
 * ==========================================================================*/

/* 对话气泡：入场上浮淡入。JS 实际生成 .dialog-message > .message-bubble，
 * 其他 .chat-bubble / .qa-bubble / .question-card 等历史 class 已不再渲染。 */
.dialog-container .message-bubble,
.dialog-container > .dialog-message {
  animation: motion-fade-in var(--t-slower) var(--ease-out) both;
}

/* 快速选项 chip：磁吸 + 边框渐变 */
.quick-options .options-row > * {
  transition: transform var(--t-fast) var(--ease-spring),
              border-color var(--t-fast) var(--ease),
              box-shadow var(--t-fast) var(--ease);
}
.quick-options .options-row > *:hover {
  transform: translateY(-1px);
  border-color: var(--c-accent) !important;
  box-shadow: var(--glow-accent-sm);
}

/* 输入框：焦点发光 */
#step2 #userAnswer:focus,
#step1 #techDesc:focus,
.answer-input textarea:focus {
  border-color: var(--c-accent) !important;
  box-shadow: var(--glow-accent-sm) !important;
}

/* 发送按钮：主 CTA 风格 */
#step2 #sendBtn {
  background: var(--grad-accent) !important;
  border: none;
  box-shadow: var(--glow-accent-sm);
  transition: transform var(--t-fast) var(--ease-spring),
              box-shadow var(--t-base) var(--ease);
}
#step2 #sendBtn:hover:not(:disabled) {
  box-shadow: var(--glow-accent);
  transform: translateY(-1px);
}
#step2 #sendBtn:active:not(:disabled) { transform: translateY(1px) scale(.97); }

/* 思考中按钮文案时：加左侧小光点 */
#step2 #sendBtn[disabled]::before {
  content: '';
  display: inline-block;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: currentColor;
  margin-right: 6px;
  animation: fx-brand-beat 1.2s var(--ease) infinite;
}


/* ==========================================================================
 * §6  通用增强：主按钮、对话类 modal、表格
 * ==========================================================================*/

/* 主按钮：鼠标悬停时有柔光 */
.btn-primary:not(.btn-large):not(:disabled) {
  position: relative;
  transition:
    background   var(--t-fast) var(--ease),
    box-shadow   var(--t-base) var(--ease),
    transform    var(--t-fast) var(--ease-spring);
}
.btn-primary:not(.btn-large):not(:disabled):hover {
  box-shadow: var(--glow-accent-sm);
}
.btn-primary:not(.btn-large):not(:disabled):active {
  transform: translateY(1px) scale(.98);
}

/* FTO / Design-around / Claim Chart 等 modal 头部玻璃态 */
#ftoReportModal,
#daResultModal,
#claimChartModal,
#taskRecoveryModal,
#manualRecoverModal,
#networkErrorModal {
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
#ftoReportModal > div,
#daResultModal > div {
  animation: motion-fade-in var(--t-slower) var(--ease-out) both;
}
@keyframes motion-fade-in {
  from { opacity: 0; transform: translateY(10px) scale(.995); filter: blur(3px); }
  to   { opacity: 1; transform: translateY(0) scale(1);       filter: blur(0);   }
}

/* ---- #2026-05-16-D: 分析完成后的结果视图（进度页原地变形）
 * 2026-06-21: 去装饰——从绿青渐变横幅降为朴素标题行（白底 + 底部细分隔线），
 *   契合"简约高级感"基调，不再用大色块抢焦点。 */
.rv-header {
  display: flex;
  align-items: center;
  gap: var(--sp-4);
  margin-bottom: 22px;
  padding: 4px 2px 16px;
  border-bottom: 1px solid var(--c-divider);
}
.rv-header__icon {
  flex: 0 0 44px;
  width: 44px;
  height: 44px;
  border-radius: var(--r-md);
  background: var(--c-surface-2);
  color: var(--c-text-muted);
  font-size: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  filter: none;
}
.rv-header__icon svg { width: 22px; height: 22px; display: block; }
.rv-header__text h3 {
  margin: 0 0 4px 0;
  font-size: var(--fs-xl);
  color: var(--c-text);
  letter-spacing: .2px;
}
.rv-header__text p {
  margin: 0;
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
}

/* rv-upgrade-pill styles removed (2026-06-27, quick mode deleted) */


.rv-section {
  margin-bottom: 20px;
}
.rv-section h4 {
  margin: 0 0 10px;
  font-size: 15px;
  color: #1f2226;
}
.rv-section--fold {
  border: 1px solid #e3e5e8;
  border-radius: 10px;
  padding: 0;
}
.rv-section--fold summary {
  padding: 12px 16px;
  cursor: pointer;
  font-weight: 600;
  font-size: 14px;
  color: #5f646b;
  user-select: none;
}
.rv-section--fold[open] summary {
  border-bottom: 1px solid #e3e5e8;
}
.rv-section--fold .rv-table-wrap {
  padding: 0;
}

.rv-table-wrap {
  max-height: 500px;
  overflow-y: auto;
  border: 1px solid #e3e5e8;
  border-radius: 8px;
}
.rv-section--fold .rv-table-wrap {
  border: none;
  border-radius: 0;
}
.rv-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  table-layout: auto;
}
.rv-table thead {
  position: sticky;
  top: 0;
  z-index: 2;
  background: #f6f7f8;
}
.rv-table th {
  padding: 10px 12px;
  text-align: left;
  font-weight: 600;
  color: #3a3f45;
  border-bottom: 2px solid #e3e5e8;
  white-space: nowrap;
}
.rv-table td {
  padding: 10px 12px;
  color: #3a3f45;
  border-bottom: 1px solid #ebedef;
  vertical-align: top;
  line-height: 1.5;
}
.rv-table tbody tr:hover td {
  background: #f6f7f8;
}
.rv-table .rv-col-pn {
  white-space: nowrap;
  font-family: 'Times New Roman', 'Cambria', serif;
  min-width: 130px;
}
.rv-table .rv-col-title {
  min-width: 160px;
  max-width: 260px;
}
.rv-table .rv-col-reason {
  min-width: 200px;
  max-width: 400px;
  white-space: pre-wrap;
  word-break: break-word;
}

.rv-actions {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 24px;
  padding-top: 16px;
  border-top: 1px solid #e3e5e8;
}

/* ---- #5 (2026-05-16-G): 操作面板卡片尺寸与首页 hub-card 统一 ---- */
.rv-action-panel {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
  align-items: stretch;
}
.rv-action-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 12px;
  padding: 24px 22px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  background: var(--c-surface);
  cursor: pointer;
  min-height: 176px;
  position: relative;
  overflow: hidden;
  box-shadow: var(--shadow-1);
  transition: border-color var(--t-base), box-shadow var(--t-base), transform var(--t-fast);
}
/* 2026-06-21: 去掉彩色顶边条 + 彩色 hover 投影——纯白卡，hover 仅描边加深 + 极轻抬升。
   青蓝只在图标里点一下，不再每卡一道彩条（简约 + 单一焦点纪律）。 */
.rv-action-card:hover {
  border-color: var(--c-border-strong);
  box-shadow: var(--shadow-2);
  transform: translateY(-1px);
}
/* 2026-07-01 (问题3): 取消/失败任务结果页——整个操作面板置灰禁用，阻断点击。
   JS(_blockIfIncomplete)是行为兜底，这里是视觉与 pointer-events 双保险。 */
#analysisResultView.rv--incomplete .rv-action-panel {
  opacity: .45;
  filter: grayscale(.4);
  pointer-events: none;
  user-select: none;
}
#analysisResultView.rv--incomplete .rv-action-card { cursor: not-allowed; }
.rv-action-card--download { --rv-accent: var(--c-accent); }
.rv-action-card--da       { --rv-accent: var(--c-accent); }
.rv-action-card--fto      { --rv-accent: var(--c-accent); }
.rv-action-card__icon {
  width: 52px; height: 52px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-md);
  /* 2026-06-11: L3 操作层归于稳重——去 inset 高光 + 彩色投影，纯色软背景即可。 */
  background: color-mix(in srgb, var(--rv-accent, var(--c-accent)) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--rv-accent, var(--c-accent)) 20%, transparent);
  color: var(--rv-accent, var(--c-accent));
  font-size: 24px;
  line-height: 1;
}
.rv-action-card__icon svg { width: 24px; height: 24px; display: block; }
.rv-action-card__body {
  flex: 1;
  width: 100%;
}
.rv-action-card__body h4 {
  margin: 0 0 6px;
  font-size: var(--fs-md);
  color: var(--c-text);
  font-weight: var(--fw-semibold);
}
.rv-action-card__body p {
  margin: 0;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
}
.rv-action-card__status {
  display: block;
  margin-top: var(--sp-2);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  min-height: 16px;
}
@media (max-width: 720px) {
  .rv-action-panel { grid-template-columns: 1fr; }
}

/* ---- #3 (2026-06-14): 结果页两栏布局 —— 左清单 / 右操作模块 ---- */
/* #3 (2026-06-14 二轮): 改"自然等高"——上一版 align-items:stretch 会把右栏
   (engineer 仅 2 张卡)强行拉满左栏高度,卡片被撑得又长又空(用户:"拉太长不合理")。
   配合 #2 修复后左侧默认只显 3 条(展开才长),两栏自然高度本就接近。改用 align-items:start
   让两栏各取内容高度,不互相强撑;右栏从 320→344px 略加宽(用户:"右侧太窄")。 */
.rv-two-col {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 344px;
  gap: 20px;
  align-items: start;         /* 自然等高,不强行拉伸 */
}
.rv-two-col__left { min-width: 0; }
/* 右栏：操作模块纵向堆叠(适配窄列宽),卡片取内容高度,不拉伸 */
.rv-two-col__right.rv-action-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.rv-two-col__right .rv-action-card {
  min-height: 0;              /* 纵排不再强撑 176px,内容决定高度 */
  flex-direction: row;        /* 图标 + 文案横排,省纵向空间 */
  align-items: center;
  padding: 18px 20px;         /* 略增内边距,让单卡更有体量,避免"太空" */
}
.rv-two-col__right .rv-action-card__icon {
  width: 44px; height: 44px;
  font-size: 20px;
}
/* 左侧高风险清单：限高约等于右栏(超出走内部滚动),与右栏视觉对齐不互相拉扯。
   默认折叠态(3 条 + 展开按钮)通常不触发滚动;展开后超过该高度才滚。
   2026-07-29: 左栏结构从"#priorityActions 即左栏"改为"包裹层内堆叠
   #priorityActions + #focusTierSection(疑似高风险第二档)",直接子选择器 >
   改为后代选择器,两个清单块同时命中。 */
.rv-two-col__left .ui-risk-list {
  display: flex;
  flex-direction: column;
}
/* 窄屏塌成单列：清单在上,操作模块在下 */
@media (max-width: 860px) {
  .rv-two-col { grid-template-columns: 1fr; }
  .rv-two-col__right.rv-action-panel { gap: 12px; }
}
/* 大屏：右侧栏适当放宽 */
@media (min-width: 1600px) {
  .rv-two-col { grid-template-columns: minmax(0, 1fr) 400px; gap: 28px; }
}
@media (min-width: 2400px) {
  .rv-two-col { grid-template-columns: minmax(0, 1fr) 460px; gap: 32px; }
}

/* ---- 风险概览三卡（rvOverviewGrid）：tokens 化 + 视觉与 panel 对仗 ---- */
.rv-overview-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--sp-4);
  margin: var(--sp-2) 0 var(--sp-6);
}
.rv-overview-card {
  position: relative;
  padding: 18px 20px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  background: var(--c-surface);
  overflow: hidden;
  transition: border-color var(--t-base), box-shadow var(--t-base), transform var(--t-fast);
}
/* 2026-06-21: 去掉径向光斑——纯白卡，唯一颜色焦点交给"高风险"数字本身（红）。 */
.rv-overview-card:hover {
  border-color: var(--c-border-strong);
  box-shadow: var(--shadow-1);
}
.rv-overview-card__num {
  position: relative;
  font-size: var(--fs-3xl);
  font-weight: var(--fw-bold);
  /* 2026-06-11: 数字默认中性深色，只有"高风险"卡用风险色——颜色焦点单一化。 */
  color: var(--c-text);
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
  letter-spacing: -.02em;
}
.rv-overview-card--risk .rv-overview-card__num { color: var(--c-danger); }
.rv-overview-card__label {
  position: relative;
  margin-top: 6px;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  letter-spacing: .2px;
}
.rv-overview-card--total { --rv-ov-accent: var(--c-cyan);    --rv-ov-soft: color-mix(in srgb, var(--c-cyan) 12%, transparent); }
.rv-overview-card--risk  { --rv-ov-accent: var(--c-danger);  --rv-ov-soft: color-mix(in srgb, var(--c-danger) 12%, transparent); }
.rv-overview-card--time  { --rv-ov-accent: var(--c-accent);  --rv-ov-soft: color-mix(in srgb, var(--c-accent) 12%, transparent); }
@media (max-width: 640px) {
  .rv-overview-grid { grid-template-columns: 1fr; }
}

/* #1 (2026-05-16): 历史任务表专属容器，**不**继承 .table-container 的 sticky-header /
   tbody{display:block} / tr{display:table; table-layout:fixed} 那一套——那套是为
   stage1/stage2 数据表的滚动设计的，套用到历史表上会把所有列压到第一列宽度，
   导致"仅分析类型这一栏有内容显示"。这里只用普通 block 容器 + 自然 table 布局。 */
.hist-table-wrap {
  overflow-x: auto;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
}
/* #7 (2026-06-14): 单任务历史视图(工作台"打开"进入)顶部的聚焦条 + "显示全部"出口 */
.hist-focus-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 14px;
  margin-bottom: 10px;
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
}
.hist-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm);
  table-layout: auto;
}
.hist-table thead tr,
.hist-table tbody tr {
  display: table-row;
}
/* #5 (2026-06-14): 成果展开行用 [hidden] 控制开合，但上面那条 tbody tr{display:table-row}
   会覆盖 HTML5 [hidden] 的默认 display:none（CLAUDE.md §四红线），导致 row.hidden=true
   设上了却收不回去。这里显式补一条让 [hidden] 复位生效（JS toggle 逻辑本身正确）。 */
.hist-table tbody tr.hist-prod-row[hidden] {
  display: none;
}
.hist-table tbody {
  display: table-row-group;
}
.hist-table thead {
  background: var(--c-surface-2);
}
.hist-table th {
  padding: 10px 12px;
  text-align: left;
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  color: var(--c-text-muted);
  white-space: nowrap;
  vertical-align: middle;
}
.hist-th--center { text-align: center !important; }
/* hist-th--right / hist-td--right 已删（2026-07-05）：数据列统一左对齐（用户拍板
   "总专利数右对齐与其它列不协调"），仅控件列（选择/成果/操作）保留居中。 */
.hist-table td {
  padding: 10px 12px;
  border-top: 1px solid var(--c-divider);
  white-space: nowrap;
  vertical-align: middle;
}
/* 2026-06-12: td 语义对齐 class（替代逐 cell inline style）*/
.hist-td--center { text-align: center; }
.hist-td--title  { max-width: 280px; }
@media (min-width: 1600px) {
  .hist-td--title { max-width: 400px; }
}
@media (min-width: 2400px) {
  .hist-td--title { max-width: 520px; }
}
.hist-td--time   { color: var(--c-text-muted); font-size: var(--fs-xs); }
.hist-row-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* 2026-07-04 (#③拍板④): 行内改名——标题 + 铅笔按钮同行，按钮 hover 行才显（列表安静） */
.hist-row-title-wrap {
  display: flex;
  align-items: center;
  gap: var(--sp-1);
  min-width: 0;
}
.hist-row-title-wrap .hist-row-title { flex: 0 1 auto; min-width: 0; }
.hist-rename-btn {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  padding: 2px;
  background: none;
  border: none;
  border-radius: var(--r-sm, 6px);
  color: var(--c-text-faint);
  cursor: pointer;
  opacity: 0;
  transition: opacity .12s ease, color .12s ease;
}
.hist-rename-btn svg { width: 14px; height: 14px; display: block; }
tr:hover .hist-rename-btn,
.hist-rename-btn:focus-visible { opacity: 1; }
.hist-rename-btn:hover { color: var(--c-accent); }
.hist-rename-edit {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  min-width: 0;
}
.hist-rename-edit__input {
  flex: 1 1 auto;
  min-width: 120px;
  max-width: 220px;
  padding: 3px 8px;
  font-size: var(--fs-sm);
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-sm, 6px);
  color: var(--c-text);
  background: var(--c-surface);
}
.hist-rename-edit__input:focus {
  outline: none;
  border-color: var(--c-accent);
}
.hist-row-tags {
  display: flex;
  gap: var(--sp-1);
  flex-wrap: wrap;
  margin-top: 3px;
}
/* 2026-07-05: 按钮改短文案后并排不换行（原 wrap 在窄列里"查看结果/✕"上下堆叠很丑） */
.hist-row-actions {
  display: flex;
  gap: var(--sp-2);
  justify-content: center;
  flex-wrap: nowrap;
  white-space: nowrap;
}
.hist-dl-group {
  display: flex;
  gap: var(--sp-2);
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
}
.hist-dl-link { font-size: var(--fs-xs); }
.hist-summary {
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  margin-bottom: var(--sp-2);
}
/* 历史页 批量操作工具条 */
.hist-bulk-bar {
  display: flex;
  gap: var(--sp-3);
  align-items: center;
  padding: var(--sp-2) var(--sp-3);
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  margin-bottom: var(--sp-3);
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
}
/* #4 (2026-06-14 二轮): 单任务聚焦视图设 hidden=true,但 display:flex 盖过
   [hidden] 的 display:none(CLAUDE.md §四红线),"已选中 0 项"批量条仍显示。补回。 */
.hist-bulk-bar[hidden] {
  display: none;
}
.hist-bulk-bar__spacer { flex: 1; }
/* 历史页 加载/空/错误 占位态 */
.hist-state {
  text-align: center;
  color: var(--c-text-muted);
  padding: var(--sp-8) var(--sp-4);
}
.hist-state--empty { padding: var(--sp-10) var(--sp-4); }
.hist-state--welcome {
  padding: var(--sp-10) var(--sp-6);
  max-width: 480px;
  margin: 0 auto;
}
.hist-state--welcome .hist-state__title {
  font-size: var(--fs-lg);
  font-weight: 600;
  color: var(--c-text);
  margin-bottom: var(--sp-2);
}
.hist-state--welcome .hist-state__sub {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
  margin-bottom: var(--sp-5);
}
.hist-state--welcome .hist-state__actions {
  display: flex;
  gap: var(--sp-3);
  justify-content: center;
  flex-wrap: wrap;
}
.hist-state--warn  { color: var(--c-warning); }
.hist-state__icon  { font-size: 32px; margin-bottom: var(--sp-2); line-height: 1; }
.hist-state__icon svg { width: 32px; height: 32px; display: inline-block; }
.hist-state__sub   { font-size: var(--fs-xs); margin-top: var(--sp-1); }
.hist-load-error,
.rv-load-error {
  padding: var(--sp-8);
  text-align: center;
  color: var(--c-danger);
}
.hist-table tbody tr:hover td {
  background: var(--c-surface-2);
}

/* 表格行悬停加轻微左缩进指示（很微小，不会打扰阅读） */
.table-container tbody tr,
#stage1Table tbody tr,
#stage2Table tbody tr {
  transition: background var(--t-fast) var(--ease), transform var(--t-fast) var(--ease);
}
.table-container tbody tr:hover,
#stage1Table tbody tr:hover,
#stage2Table tbody tr:hover {
  background: linear-gradient(90deg,
    var(--c-accent-soft) 0%,
    transparent 60%) !important;
}

/* Hub 页顶部的任务类型 / 用户身份下拉：focus 态统一 */

/* "下一步 / 开始分析"类主按钮的小箭头：悬停时前进 */
.btn-primary span:last-child {
  transition: transform var(--t-base) var(--ease);
  display: inline-block;
}
.btn-primary:not(:disabled):hover span:last-child {
  transform: translateX(3px);
}

/* 状态 chip 圆点前缀（用在历史任务列表等地方的"已完成 / 进行中"） */
.ui-chip::before {
  content: '';
  display: inline-block;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: currentColor;
  margin-right: 2px;
  opacity: .7;
}


/* ==========================================================================
 * §7  首屏入场：首次可见时所有主要卡片柔和浮入
 * ==========================================================================*/

/* 首屏 + 切页统一走 .is-entering（见 §page-transition）。
   原 `:not(.hidden)` 规则会在 .is-entering 卸下后重启 motion-fade-in，
   造成"轻 cardEnter 紧接重 motion-fade-in（带 blur）"双触发。 */

/* 2026-06-15: 删除 .hub-layout / .hub-left / .hub-user-type-cards / .hub-user-card
   / .home-history-bar 整套死代码——早期"hub 内嵌左侧身份栏 + 底部历史横条"布局已废，
   身份切换独立成全屏 #home_role_select 页、历史入口走顶部"查看全部"，这些 class 全站零引用。 */

/* Hub 模块卡片：入场动画接力（其余尺寸/视觉规则见 §S） */


/* Bug-1 (2026-05-15): 首页底部"历史分析任务"横条 hover 与 focus 反馈 */
/* 2026-06-15: .home-history-bar 卡已废，hover/focus 规则随死代码一并删除 */

/* 统计卡接力 */

/* 进度 summary 接力 */


/* ==========================================================================
 * §8  减少动效支持
 * ==========================================================================*/

@media (prefers-reduced-motion: reduce) {
  .btn-primary,
  #step2 #sendBtn,
  .result-actions .btn-primary.btn-large {
    transition: none !important;
  }
  #step4_progress .progress-icon,
  #step2 #sendBtn[disabled]::before {
    animation: none !important;
  }
  .container > .card:not(.hidden),
  #executiveSummary,
  #priorityActions,
  #focusTierSection,
  .dialog-container > * {
    animation: none !important;
  }
}

/* §nav — 统一页面导航条 = 面包屑（左） + 上一步（右） */
.page-nav-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 14px;
  min-height: 28px;
  gap: 12px;
}
.page-nav-bar .crumb-nav {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  line-height: 1;
  min-width: 0;
  flex: 1 1 auto;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.page-nav-bar .crumb-link {
  color: var(--c-text-muted);
  cursor: pointer;
  padding: 2px 6px;
  border-radius: var(--r-xs, 4px);
  transition: color var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
  text-decoration: none;
  background: transparent;
  border: 0;
  font: inherit;
}
.page-nav-bar .crumb-link:hover {
  color: var(--c-accent);
  background: color-mix(in srgb, var(--c-accent) 8%, transparent);
}
.page-nav-bar .crumb-sep {
  color: color-mix(in srgb, var(--c-text-muted) 55%, transparent);
  font-size: 12px;
  user-select: none;
  padding: 0 1px;
}
.page-nav-bar .crumb-current {
  color: var(--c-text);
  font-weight: var(--fw-medium);
  padding: 2px 6px;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}
.page-nav-bar .nav-prev {
  padding: 4px 10px;
  border-radius: var(--r-sm, 6px);
  background: transparent;
  color: var(--c-text-muted);
  border: 1px solid color-mix(in srgb, var(--c-border) 70%, transparent);
  cursor: pointer;
  white-space: nowrap;
  flex-shrink: 0;
  font: inherit;
  font-size: var(--fs-sm);
  transition: background var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease);
}
.page-nav-bar .nav-prev:hover {
  color: var(--c-text);
  background: color-mix(in srgb, var(--c-text) 4%, transparent);
  border-color: var(--c-border-strong);
}
.page-nav-bar .nav-prev:active { transform: translateY(1px); }

/* §page-transition — 顶级 card 切页入场（纯淡入，无位移）
   由 JS `_navigateTo()` 给目标 card 临时加 `.is-entering` 触发。
   首屏由现有的 motion-fade-in 负责（L3246），不与此叠加。 */
@keyframes cardEnter {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.container > .card.is-entering {
  animation: cardEnter 180ms ease-out both;
}
@media (prefers-reduced-motion: reduce) {
  .container > .card.is-entering { animation: none; }
}

/* ---------- Thinking bubble (对话等待态) ---------- */
.thinking-bubble .message-bubble {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--c-text-muted, #5f646b);
  font-size: var(--fs-sm, 13px);
}
.thinking-dots {
  display: inline-flex;
  gap: 3px;
  align-items: center;
}
.thinking-dots span {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--c-accent, #2f9bbf);
  opacity: .4;
  animation: thinking-bounce 1.2s ease-in-out infinite;
}
.thinking-dots span:nth-child(2) { animation-delay: .15s; }
.thinking-dots span:nth-child(3) { animation-delay: .3s; }
@keyframes thinking-bounce {
  0%, 60%, 100% { transform: translateY(0); opacity: .4; }
  30% { transform: translateY(-4px); opacity: 1; }
}

/* ============================================================================
 * §DA  Design-Around — 独立页面（左右分栏）
 * ========================================================================== */
.da-page-header {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--c-border, #e2e8f0);
}
.da-back-btn {
  flex-shrink: 0;
}
.da-page-body {
  display: flex;
  gap: 0;
  min-height: 520px;
  max-height: calc(100vh - 200px);
  border: 1px solid var(--c-border, #e2e8f0);
  border-radius: 10px;
  overflow: hidden;
}
.da-sidebar {
  width: 260px;
  min-width: 220px;
  border-right: 1px solid var(--c-border, #e2e8f0);
  display: flex;
  flex-direction: column;
  background: var(--c-surface-2, #f8fafc);
}
.da-sidebar__title {
  padding: 0;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-text-faint, #94a3b8);
}
.da-sidebar__head {
  padding: 12px 14px 10px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  border-bottom: 1px solid var(--c-border, #e2e8f0);
  background: var(--c-surface-2, #f8fafc);
}
.da-sidebar__status {
  font-size: 12px;
  color: #5f646b;
  font-variant-numeric: tabular-nums;
  line-height: 1.4;
  min-height: 16px;
}
.da-sidebar__status:empty { display: none; }
.da-sidebar__progressbar {
  height: 3px;
  width: 100%;
  background: rgba(47, 155, 191, .10);
  border-radius: 999px;
  overflow: hidden;
  margin-top: 4px;
}
.da-sidebar__progressbar-fill {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, #2f9bbf, #3a9bb8);
  border-radius: 999px;
  transition: width .4s ease;
}
.da-sidebar__list {
  flex: 1;
  overflow-y: auto;
  padding: 0 6px 6px;
}
.da-sidebar-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 10px 10px;
  border-radius: 8px;
  cursor: pointer;
  margin-bottom: 2px;
  font-size: 12px;
  transition: border-color .15s;
  border: 1px solid transparent;
  position: relative;
  overflow: hidden;
  z-index: 0;
}
.da-sidebar-item::before {
  content: '';
  position: absolute;
  inset: 0;
  background: #dbeafe;
  width: var(--da-pct, 0%);
  transition: width .6s ease;
  z-index: -1;
  border-radius: 7px;
}
.da-sidebar-item:hover {
  border-color: var(--c-border, #e2e8f0);
}
.da-sidebar-item.is-active {
  border-color: var(--c-accent, #2f9bbf);
  font-weight: 500;
}
.da-sidebar-item.da-completed::before {
  background: #dcfce7;
  width: 100%;
}
.da-sidebar-item.da-failed::before {
  background: #fee2e2;
  width: 100%;
}
/* progress bar removed — fill is now on .da-sidebar-item::before via --da-pct */
.da-sidebar-item__text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.da-sidebar-item__title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 11px;
  color: var(--c-text-muted, #64748b);
  line-height: 1.3;
}
.da-detail {
  flex: 1;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.da-detail__body {
  flex: 1;
  overflow-y: auto;
  padding: 20px 24px;
}
.da-detail__empty {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 200px;
  color: var(--c-text-faint, #94a3b8);
  font-size: 14px;
}
.da-detail__empty--failed { color: var(--c-danger); }
/* 2026-06-12: da 详情头部（标题行/权重行）token 化，缓存提示条 margin */
.da-cached-note { margin-bottom: var(--sp-3); }
.da-detail__titlerow {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--sp-3);
}
.da-detail__title {
  margin: 0 0 var(--sp-1) 0;
  flex: 1;
  min-width: 0;
}
.da-detail__regen {
  flex-shrink: 0;
  white-space: nowrap;
}
.da-detail__weights {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
  margin-bottom: var(--sp-3);
}
/* 2026-06-12: 规避页追问对话气泡 + 侧栏状态 + 页面状态 + 下载 toast + FTO 清单 */
.da-bubble { margin-bottom: var(--sp-2); }
.da-bubble--user { text-align: right; }
.da-bubble__msg {
  display: inline-block;
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-md);
  font-size: var(--fs-sm);
  line-height: var(--lh-base);
  max-width: 88%;
  text-align: left;
}
.da-bubble__msg--user    { background: var(--c-accent-soft); color: var(--c-accent-hover); max-width: 80%; }
.da-bubble__msg--thinking { display: inline-flex; align-items: center; gap: var(--sp-2); background: var(--c-surface-2); color: var(--c-text-muted); }
.da-bubble__msg--answer  { background: var(--c-success-soft); color: color-mix(in srgb, var(--c-success) 70%, var(--c-text)); line-height: var(--lh-loose); }
.da-bubble__msg--error   { background: var(--c-danger-soft); color: var(--c-danger); }
.da-sidebar-item__status {
  font-size: 10px;
  color: var(--c-text-muted);
  margin-top: 2px;
}
.da-status--done    { color: var(--c-success); }
.da-status--fail    { color: var(--c-danger); }
.da-status--running { color: var(--c-accent); }
/* 2026-06-17: 侧栏未生成(idle)专利——状态文字显"点击生成",hover 提示可点 */
.da-sidebar-item.da-idle { opacity: .82; }
.da-sidebar-item.da-idle:hover { opacity: 1; }
.da-sidebar-item.da-idle .da-sidebar-item__status { color: var(--c-accent, #2f9bbf); font-weight: 600; }
.da-sidebar__empty {
  padding: 16px 14px;
  font-size: 12px;
  color: var(--c-text-faint, #94a3b8);
}
.dl-report-toast {
  position: fixed; right: 20px; bottom: 20px;
  z-index: var(--z-toast);
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
  box-shadow: var(--shadow-2);
  min-width: 280px; max-width: 420px;
  font-size: var(--fs-sm);
  color: var(--c-text);
  display: flex; align-items: center; gap: var(--sp-2);
}
.dl-report-toast--ok  { border-color: var(--c-success); }
.dl-report-toast--err { border-color: var(--c-danger); }
/* FTO 报告清单（analyst 可勾选 / engineer 只读）*/
.fto-pl-toolbar {
  display: flex; align-items: center; gap: var(--sp-2);
  margin-bottom: var(--sp-2); flex-wrap: wrap;
}
.fto-pl-toolbar__hint { margin-left: auto; color: var(--c-text-muted); font-size: var(--fs-xs); }
.fto-pl-list {
  max-height: 280px; overflow-y: auto;
  border: 1px solid var(--c-border); border-radius: var(--r-sm);
}
.fto-pl-list--readonly { max-height: 240px; margin-bottom: var(--sp-3); }
.fto-pl-row {
  display: flex; align-items: center; gap: var(--sp-2);
  padding: 6px var(--sp-2);
  border-bottom: 1px solid var(--c-divider);
}
.fto-pl-row--readonly { padding: 5px var(--sp-2); }
.fto-pl-row__pn { min-width: 140px; }
.fto-pl-row__title { flex: 1; }
.fto-pl-row__risk { font-size: var(--fs-xs); color: var(--c-danger); }
.fto-pl-count { margin-bottom: 6px; color: var(--c-text); font-weight: var(--fw-semibold); }
/* 2026-07-05 出清报告：只读相近专利清单下方的范围说明 */
.fto-pl-clearance-note {
  margin-top: 8px;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
}
/* 2026-06-20: 清单按"是否已有规避方案"分两段 + 单行状态徽章 */
.fto-pl-group-title {
  padding: 6px var(--sp-2);
  font-size: var(--fs-xs); font-weight: var(--fw-semibold);
  color: var(--c-text-muted);
  background: var(--c-surface-2);
  border-bottom: 1px solid var(--c-divider);
}
.fto-pl-group-title:not(:first-child) { border-top: 1px solid var(--c-divider); }
.fto-pl-badge {
  font-size: var(--fs-xs); line-height: 1.4;
  padding: 1px 7px; border-radius: var(--r-pill);
  white-space: nowrap; flex-shrink: 0;
}
.fto-pl-badge--ready {
  color: var(--c-success);
  background: var(--c-success-soft);
  border: 1px solid color-mix(in srgb, var(--c-success) 30%, transparent);
}
.fto-pl-badge--pending {
  color: var(--c-text-muted);
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
}
.da-detail__refine {
  border-top: 1px solid var(--c-border, #e2e8f0);
  padding: 12px 20px;
}
.da-detail__refine-history {
  max-height: 180px;
  overflow-y: auto;
  margin-bottom: 8px;
}
.da-detail__refine-input {
  display: flex;
  gap: 8px;
  align-items: center;
}
.da-detail__refine-input input {
  flex: 1;
  padding: 8px 12px;
  border: 1px solid #d1d5db;
  border-radius: 6px;
  font-size: 13px;
}
.da-detail__disclaimer {
  padding: 10px 20px;
  background: #fef2f2;
  border-top: 1px solid #fecaca;
  font-size: 11px;
  color: #7f1d1d;
  line-height: 1.5;
}
/* 候选方案表格 */
.da-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.da-table th {
  padding: 8px 6px;
  text-align: left;
  background: #f6f9fc;
  border: 1px solid #e2e8f0;
  font-weight: 600;
  font-size: 12px;
}
.da-table th.da-sortable {
  cursor: pointer;
  user-select: none;
}
.da-table th.da-sortable:hover {
  background: #eef2ff;
}
.da-table th.da-sort-active {
  color: var(--c-accent, #2f9bbf);
}
.da-table td {
  padding: 8px 6px;
  border: 1px solid #e2e8f0;
  vertical-align: top;
}
.da-table tr.da-row--recommended { background: #ecfdf5; }
.da-table tr.da-row--backup { background: #fef9c3; }
.da-table .da-score-cell {
  text-align: center;
  cursor: help;
}
/* ===== Progress Page: Water-fill + Terminal ===== */
.progress-split-layout {
  display: flex;
  gap: 28px;
  align-items: stretch;
  min-height: 380px;
  margin-bottom: 20px;
}
.progress-terminal-col {
  flex: 1;
  min-width: 0;
}
/* .bottle-pct 旧规则已删除 (2026-05-24-P)
 * 该规则用 background-clip:text + -webkit-text-fill-color:transparent 让文字透明,
 * 与 #step4_progress .bottle-pct (line ~5212) 叠加后,新规则的 color:#312e81 失效,
 * 文字仍为透明,padding 区只剩 inset 1px 白阴影 → 视觉上是"白色数字 + 小长方形框"。
 * 真相源在下方 #step4_progress .bottle-pct,此处不再保留同名选择器。 */
.bottle-label {
  margin-top: 14px;
  font-size: 13px;
  color: #5f646b;
  text-align: center;
  font-weight: 500;
  letter-spacing: .2px;
}

/* Terminal */
.terminal-panel {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 340px;
  border-radius: 10px;
  overflow: hidden;
  /* 2026-06-15 #2b: 外框收到与深色正文同族,不再用浅灰 #2d2d2d */
  border: 1px solid #20203a;
  box-shadow: 0 4px 20px rgba(0,0,0,.12);
}
.terminal-titlebar {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 8px 12px;
  /* 2026-06-15 #2b: 顶栏从 #2d2d2d 浅灰压到与正文(#1a1a2e)同族的深色,
     靠一条 1px 微亮分隔线与正文区分,而非靠灰度色差——更整体、更有质感。 */
  background: #20203a;
  border-bottom: 1px solid rgba(255, 255, 255, .07);
}
.terminal-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
}
/* 终端标题栏装饰信号灯（macOS 经典红黄绿，非状态语义）*/
.terminal-dot--red   { background: #ff5f56; }
.terminal-dot--amber { background: #ffbd2e; }
.terminal-dot--green { background: #27ca40; }
/* 规避配置弹窗：专利选择 checkbox 清单 */
.da-cfg-selectall {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  padding: var(--sp-2);
  border-bottom: 2px solid var(--c-border);
  cursor: pointer;
  background: var(--c-surface-2);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  font-weight: var(--fw-medium);
}
.da-cfg-row {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-2);
  padding: var(--sp-2);
  border-bottom: 1px solid var(--c-divider);
  cursor: pointer;
}
.da-cfg-row:hover { background: var(--c-surface-2); }
.da-cfg-row__cb { margin-top: 3px; flex-shrink: 0; }
.da-cfg-row__body { min-width: 0; flex: 1; }
.da-cfg-row__pnline {
  display: flex;
  align-items: center;
  gap: var(--sp-1);
  flex-wrap: wrap;
}
.da-cfg-row__title {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
  margin-top: 2px;
  word-break: break-word;
}
.da-cfg-empty {
  padding: var(--sp-4);
  color: var(--c-text-faint);
}
.terminal-titlebar-text {
  margin-left: 8px;
  font-size: 12px;
  color: #999;
  font-family: 'Consolas', 'JetBrains Mono', monospace;
}
.terminal-body {
  flex: 1;
  background: #1a1a2e;
  padding: 12px 14px;
  overflow-y: auto;
  font-family: 'Consolas', 'JetBrains Mono', 'Fira Code', monospace;
  font-size: 12.5px;
  line-height: 1.8;
  color: #a0aec0;
}
.terminal-line {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 2px 0;
  word-break: break-all;
}
.terminal-line .terminal-ts,
.terminal-line .terminal-action {
  flex-shrink: 0;
  white-space: nowrap;
}
.terminal-line .terminal-title {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  word-break: break-all;
  line-height: 1.55;
}
.terminal-ts { color: #4fd1c5; }
.terminal-action { color: #90cdf4; }
.terminal-title { color: #e2e8f0; }
.terminal-line--done { color: #68d391; }



/* ===== 身份选择页 (#home_role_select) ===== */
#home_role_select {
  padding: 48px 40px;
  max-width: min(980px, 100%);
  margin: 0 auto;
}
.role-select-title {
  text-align: center;
  margin-bottom: 32px;
}
.role-select-title h2 {
  font-size: 22px;
  font-weight: 600;
  color: #1f2226;
  margin: 0 0 6px;
  letter-spacing: -.005em;
}
.role-select-subtitle {
  font-size: 13px;
  color: #5f646b;
  margin: 0;
}
/* 登录页 magic-link 输入框（与 role-select 风格一致，居中窄列） */
.login-box {
  max-width: 380px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.login-box__input {
  width: 100%;
  padding: 12px 14px;
  font-size: 14px;
  border: 1px solid #cbd5e1;
  border-radius: 8px;
  outline: none;
  transition: border-color .15s;
  box-sizing: border-box;
}
.login-box__input:focus {
  border-color: #2f9bbf;
}
.login-box__status {
  font-size: 13px;
  line-height: 1.6;
  min-height: 20px;
  text-align: center;
}
.login-box__status.is-ok { color: #059669; }
.login-box__status.is-err { color: #dc2626; }
/* 登录页"尚无账号"回链官网（2026-09-21 O2） */
.login-box__signup-hint {
  margin: 4px 0 0;
  font-size: var(--fs-xs);
  text-align: center;
  color: var(--c-text-muted);
}
.login-box__signup-hint a {
  color: var(--c-accent);
  text-decoration: underline;
}
/* 登录页备案号（2026-09-21 O4，与侧栏 .sidebar-beian 同源不同容器） */
.login-page__beian {
  margin: 24px 0 0;
  text-align: center;
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
}
.login-page__beian a {
  color: var(--c-text-faint);
  text-decoration: none;
}
.login-page__beian a:hover { text-decoration: underline; }
.role-flow-step {
  padding: 6px 10px;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(31, 34, 38, 0.08);
  font-size: 12px;
  color: #334155;
  white-space: nowrap;
  font-weight: 500;
}
.role-flow-arrow {
  color: #94a3b8;
  font-size: 14px;
  flex-shrink: 0;
}

/* 玻璃质感：技术人员 — 青蓝（动作 / 落地） */

/* 玻璃质感：专利分析师 — 深紫靛 (分析 / 学术) */

/* ===== Hub 顶部栏 + 身份徽章 + 误选提示 ===== */
.hub-brand {
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  font-weight: var(--fw-medium);
}

/* 2026-06-15: 身份切换降级——role badge 变为可点击的下拉触发器，
   常驻"← 切换身份"按钮已删。冷静基底，hover 仅极轻反馈。 */
.hub-role-switch {
  position: relative;
}
@keyframes hub-role-menu-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.hub-brand {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text-muted);
  letter-spacing: .2px;
}

/* 2026-06-15: 删除失效的第一份 .hub-modules-grid（auto-fit + max-width 1040 居中）——
   被后文 §S 的第二份（2 列 Linear 紧凑布局，#home_hub 前缀）同选择器、更晚书写完全覆盖，
   本份从不生效。布局真相源见下方 body[data-role] 分支。 */

/* 2026-06-15: .hub-misroute-hint（engineer 底部"去分析师模式"营销提示）已随身份切换
   降级一并删除——产品定位下真实用户极少切身份，不再常驻引导。 */

/* ===== 基于 body[data-role] 的可见性门控已删除（2026-07-02 单一 analyst 身份）=====
   engineer 身份已从前端移除，data-role-required 属性也已从 HTML 清除。 */

/* ===== data-tier 可见性规则已删除（2026-06-27, quick 档废弃） ===== */

/* Analysis complete banner — flex layout (visibility via .hidden class only) */
.complete-banner {
  margin: 18px 0 0;
  padding: 14px 18px;
  background: linear-gradient(135deg, rgba(16,185,129,.12), rgba(86,173,205,.10));
  border: 1px solid rgba(16,185,129,.35);
  border-radius: 12px;
  align-items: center;
  gap: 12px;
  display: flex;
}
.complete-banner.hidden { display: none; }
/* 2026-06-12: 完成横幅内部元素 token 化（原 inline 绿色系）*/
.complete-banner__check { font-size: 22px; color: var(--c-success); }
.complete-banner__body { flex: 1; min-width: 0; }
.complete-banner__title {
  font-weight: var(--fw-semibold);
  color: color-mix(in srgb, var(--c-success) 70%, var(--c-text));
}
.complete-banner__desc {
  font-size: var(--fs-sm);
  color: var(--c-success);
  margin-top: 2px;
}
/* 进度页取消按钮（轻量 danger 链接式）+ controls 右对齐（原 inline 意图）*/
#step4_progress .progress-controls {
  justify-content: flex-end;
  margin-top: var(--sp-3);
  padding: 0;
  border-top: 0;
}
.btn-text-danger {
  background: transparent;
  color: var(--c-danger);
  border: 1px solid color-mix(in srgb, var(--c-danger) 30%, transparent);
  padding: 6px 14px;
  border-radius: var(--r-md);
  font-size: var(--fs-sm);
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  cursor: pointer;
}
.btn-text-danger:hover { background: var(--c-danger-soft); }
.cancel-btn__x { font-size: var(--fs-xs); }

/* Generic modal overlay — visibility via .hidden class only */
.modal-overlay {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background: rgba(31, 34, 38, .55);
  backdrop-filter: saturate(140%) blur(6px);
  -webkit-backdrop-filter: saturate(140%) blur(6px);
  align-items: center;
  justify-content: center;
  padding: 20px;
  display: flex;
}
.modal-overlay.hidden { display: none; }

/* ===== step3 "查看我刚才填写的内容" 折叠区 (2026-05-23) =====
 * 用户反馈：技术方案 + 对话汇总 两块堆叠在 step3 太冗余。
 * 改为 <details>，默认折叠；summary 风格保持轻量、不抢主流程视觉。 */
.step3-recap {
  margin: 14px 0 8px;
  border: 1px dashed rgba(148, 163, 184, .35);
  border-radius: 10px;
  background: rgba(248, 250, 252, .6);
  padding: 0 14px;
  transition: background .2s ease, border-color .2s ease;
}
.step3-recap[open] {
  background: #fff;
  border-style: solid;
  border-color: rgba(148, 163, 184, .25);
  padding-bottom: 8px;
}
.step3-recap > summary {
  cursor: pointer;
  list-style: none;
  padding: 10px 0;
  font-size: 13px;
  color: #5f646b;
  display: flex;
  align-items: center;
  gap: 8px;
  user-select: none;
}
.step3-recap > summary::-webkit-details-marker { display: none; }
.step3-recap > summary::before {
  content: '›';
  display: inline-block;
  font-size: 18px;
  line-height: 1;
  color: #94a3b8;
  transition: transform .2s ease;
}
.step3-recap[open] > summary::before { transform: rotate(90deg); }
.step3-recap > summary:hover { color: #334155; }
.step3-recap .review-section {
  margin-top: 6px;
}
.step3-recap .review-section + .review-section {
  margin-top: 10px;
}

/* =====================================================================
 * 2026-05-23-Q: 全局视觉刷新 — QB / step2 / step3 / progress / DA 页
 * 2026-05-23-R: 全量 tokens 化（去掉 §Q 引入的硬编码 hex/rgba）
 * ===================================================================== */

/* ----- Hero 头部（所有功能页统一） ----- */
/* ----- 统一页面头部（2026-07-02：替代 qb-hero 大区块） ----- */
.page-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: var(--sp-6);
  padding-bottom: var(--sp-4);
  border-bottom: 1px solid var(--c-border);
  gap: var(--sp-4);
}
.page-header__title {
  font-size: var(--fs-lg);
  font-weight: 600;
  margin: 0;
  color: var(--c-text);
}
.page-header__actions {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
}

/* ----- 旧 qb-hero（已从 HTML 移除，保留最小兼容以防残余引用） ----- */
.qb-hero {
  display: none;
}
.qb-hero__icon,
.qb-hero__text h2,
.qb-hero__text p { display: none; }

/* ----- QB 页两栏 ----- */
.qb-form-grid {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
  align-items: stretch; /* 两栏等高 */
  gap: 18px;
  margin-bottom: var(--sp-5);
}
@media (max-width: 880px) {
  .qb-form-grid { grid-template-columns: 1fr; }
}
.qb-panel {
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  padding: 18px 20px;
  box-shadow: var(--shadow-1);
  transition: border-color var(--t-base), box-shadow var(--t-base), transform var(--t-base);
}
.qb-panel:hover {
  border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
  box-shadow: var(--shadow-2);
}
.qb-panel--side {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}
.qb-panel--side .qb-panel__head {
  margin-bottom: 0;
}
.qb-panel--side .qb-dialect-options {
  margin-bottom: 0;
}
.qb-panel--side .qb-filters {
  margin: 0;
}
.qb-panel--side .qb-submit-btn {
  margin-top: auto; /* 推到面板底部，与左侧面板底边对齐 */
}
.qb-panel__head {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  margin-bottom: 14px;
}
.qb-panel__num {
  flex: 0 0 28px;
  width: 28px;
  height: 28px;
  border-radius: var(--r-sm);
  background: var(--grad-accent);
  color: var(--c-accent-contrast);
  font-weight: var(--fw-bold);
  font-size: var(--fs-base);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 10px -3px color-mix(in srgb, var(--c-accent) 35%, transparent);
}
.qb-panel__head h3 {
  margin: 2px 0 2px 0;
  font-size: var(--fs-md);
  color: var(--c-text);
}
.qb-panel__hint {
  margin: 0;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-tight);
}
.qb-field { display: block; margin-bottom: var(--sp-3); }
.qb-field--full { width: 100%; }
.qb-field__label {
  display: block;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  margin-bottom: 6px;
  font-weight: var(--fw-medium);
}
.qb-field-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-3);
}
@media (max-width: 640px) {
  .qb-field-row { grid-template-columns: 1fr; }
}
.qb-textarea {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  font-size: var(--fs-sm);
  line-height: var(--lh-base);
  background: var(--c-surface-2);
  resize: vertical;
  transition: border-color var(--t-base), background var(--t-base), box-shadow var(--t-base);
  font-family: inherit;
  color: var(--c-text);
}
.qb-textarea:focus {
  outline: none;
  background: var(--c-surface);
  border-color: var(--c-accent);
  box-shadow: var(--shadow-focus);
}

/* QB dialect radio cards */
.qb-dialect-options {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  margin-bottom: 0;
}
.qb-dialect-card {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-2);
  padding: 12px 14px;
  border: 1.5px solid var(--c-border);
  border-radius: var(--r-md);
  cursor: pointer;
  transition: border-color var(--t-fast), background var(--t-fast), transform var(--t-fast);
  background: var(--c-surface-2);
}
.qb-dialect-card:hover {
  border-color: color-mix(in srgb, var(--c-accent) 45%, transparent);
  background: var(--c-surface);
}
.qb-dialect-card input[type="radio"] {
  margin-top: 2px;
  accent-color: var(--c-accent);
  width: 16px;
  height: 16px;
  flex-shrink: 0;
}
.qb-dialect-card:has(input[type="radio"]:checked) {
  border-color: var(--c-accent);
  background:
    linear-gradient(135deg,
      color-mix(in srgb, var(--c-accent) 7%, transparent),
      color-mix(in srgb, var(--c-cyan) 6%, transparent));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--c-accent) 10%, transparent);
}
.qb-dialect-card__name {
  font-weight: var(--fw-semibold);
  font-size: var(--fs-base);
  color: var(--c-text);
  margin-bottom: 2px;
}
.qb-dialect-card__desc {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-tight);
}
.qb-submit-btn {
  width: 100%;
  padding: 12px 18px !important;
  font-size: var(--fs-base) !important;
  font-weight: var(--fw-semibold) !important;
  border-radius: var(--r-md) !important;
}

/* ----- QB 结构化过滤（法律状态 / 公开截止日） ----- */
.qb-filters {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin: 0;
  padding: 12px 14px;
  background: color-mix(in srgb, var(--c-accent) 4%, transparent);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
}
.qb-filters__group {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 14px;
}
.qb-filters__label {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
}
.qb-filter-chk {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  cursor: pointer;
}
.qb-filter-chk input { cursor: pointer; }
.qb-filter-date {
  padding: 6px 10px;
  font-size: var(--fs-sm);
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  background: var(--c-surface);
  color: var(--c-text);
}
.qb-filters__hint {
  flex-basis: 100%;
  margin: 0;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
}

/* ----- step2 hero 微调（已移除，保留空注释防行号漂移） ----- */

/* ----- step3 块化布局 ----- */
.step3-block {
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  padding: 18px 22px;
  margin-bottom: var(--sp-4);
  box-shadow: var(--shadow-1);
  transition: border-color var(--t-base), box-shadow var(--t-base);
}
.step3-block:hover {
  border-color: color-mix(in srgb, var(--c-accent) 28%, transparent);
}
.step3-block__head {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  margin-bottom: 14px;
}
.step3-block__num {
  flex: 0 0 28px;
  width: 28px;
  height: 28px;
  border-radius: var(--r-sm);
  background: var(--grad-accent);
  color: var(--c-accent-contrast);
  font-weight: var(--fw-bold);
  font-size: var(--fs-base);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 10px -3px color-mix(in srgb, var(--c-accent) 35%, transparent);
}
.step3-block__head h4 {
  margin: 2px 0 2px 0;
  font-size: var(--fs-md);
  color: var(--c-text);
}
.step3-block__hint {
  margin: 0;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-tight);
}
.step3-actions {
  display: flex;
  justify-content: flex-end;
  margin-top: var(--sp-2);
}
.btn-large {
  padding: 12px 28px !important;
  font-size: var(--fs-md) !important;
  font-weight: var(--fw-semibold) !important;
  border-radius: var(--r-md) !important;
}

/* ----- analyst 结构化特征精修编辑器（2026-06-08，仅 analyst 可见） ----- */
.analyst-feature-editor__body {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.afeat-group {
  padding: 12px 14px;
  background: color-mix(in srgb, var(--c-accent) 4%, transparent);
  border: 1px solid color-mix(in srgb, var(--c-accent) 14%, transparent);
  border-radius: var(--r-md);
}
.afeat-group__head {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}
.afeat-group__title {
  margin: 0;
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
}
.afeat-group__hint {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-tight);
}
.afeat-group__rows {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.afeat-row {
  display: flex;
  align-items: center;
  gap: 8px;
}
.afeat-row__fields {
  flex: 1 1 auto;
  display: grid;
  grid-template-columns: minmax(120px, 1fr) minmax(140px, 2fr);
  gap: 8px;
}
.afeat-row__name,
.afeat-row__desc {
  width: 100%;
  padding: 6px 10px;
  font-size: var(--fs-sm);
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  background: var(--c-surface);
  color: var(--c-text);
}
.afeat-row__name:focus,
.afeat-row__desc:focus {
  outline: none;
  border-color: var(--c-accent);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--c-accent) 18%, transparent);
}
.afeat-row__remove {
  flex: 0 0 auto;
  width: 26px;
  height: 26px;
  border: none;
  border-radius: var(--r-sm);
  background: color-mix(in srgb, var(--c-danger, #dc2626) 10%, transparent);
  color: var(--c-danger, #dc2626);
  font-size: var(--fs-md);
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}
.afeat-row__remove:hover {
  background: color-mix(in srgb, var(--c-danger, #dc2626) 18%, transparent);
}
.afeat-group__add {
  margin-top: 8px;
  padding: 5px 12px;
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  border: 1px dashed color-mix(in srgb, var(--c-accent) 40%, transparent);
  border-radius: var(--r-pill);
  background: transparent;
  color: var(--c-accent);
  cursor: pointer;
}
.afeat-group__add:hover {
  background: color-mix(in srgb, var(--c-accent) 8%, transparent);
}
@media (max-width: 640px) {
  .afeat-row__fields { grid-template-columns: 1fr; }
}

/* 只读特征行（quick 档结果页：展示但不可编辑） */

/* ----- §3.22.10 结果页"我方核心特征"精修面板 ----- */
.rv-feature-panel {
  margin: 0 0 18px 0;
  border: 1px solid color-mix(in srgb, var(--c-accent) 22%, transparent);
  border-radius: var(--r-md);
  background: color-mix(in srgb, var(--c-accent) 4%, transparent);
  overflow: hidden;
}
.rv-feature-panel__summary {
  display: flex;
  align-items: baseline;
  gap: 12px;
  flex-wrap: wrap;
  padding: 12px 16px;
  cursor: pointer;
  list-style: none;
  user-select: none;
}
.rv-feature-panel__summary::-webkit-details-marker { display: none; }
.rv-feature-panel__summary::before {
  content: '▸';
  display: inline-block;
  transition: transform var(--t-fast, 0.15s) ease;
  color: var(--c-accent);
}
.rv-feature-panel[open] .rv-feature-panel__summary::before { transform: rotate(90deg); }
.rv-feature-panel__title {
  font-weight: 600;
  font-size: 0.96rem;
}
.rv-feature-panel__hint {
  font-size: 0.82rem;
  color: var(--c-text-muted, #888);
}
.rv-feature-panel__body {
  padding: 4px 16px 0;
}
.rv-feature-panel__foot {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 16px 16px;
}
.rv-feature-panel__apply {
  padding: 8px 18px;
  border: none;
  border-radius: var(--r-sm, 6px);
  background: var(--c-accent);
  color: #fff;
  font-weight: 600;
  cursor: pointer;
  transition: opacity var(--t-fast, 0.15s) ease;
}
.rv-feature-panel__apply:hover:not(:disabled) { opacity: 0.9; }
.rv-feature-panel__apply:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
.rv-feature-panel__status {
  font-size: 0.84rem;
  color: var(--c-text-muted, #888);
}
.rv-feature-panel__status.is-dirty {
  color: var(--c-warn, #d97706);
}
@keyframes rvFeatFlash {
  0%, 100% { box-shadow: 0 0 0 0 transparent; }
  30% { box-shadow: 0 0 0 3px color-mix(in srgb, var(--c-accent) 40%, transparent); }
}
.rv-feature-panel--flash {
  animation: rvFeatFlash 1.4s ease;
}

/* claim chart 抽屉里的"去修订核心特征"跳转提示 */
.claim-drawer__refine-hint {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin: 0 0 14px 0;
  padding: 10px 14px;
  border-radius: var(--r-sm, 6px);
  background: color-mix(in srgb, var(--c-accent) 6%, transparent);
  font-size: 0.86rem;
  color: var(--c-text-muted, #888);
}
.claim-drawer__refine-link {
  border: none;
  background: none;
  padding: 0;
  color: var(--c-accent);
  font-weight: 600;
  font-size: 0.86rem;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.claim-drawer__refine-link:hover { opacity: 0.85; }

/* ----- 上传字段提示卡（重做） ----- */
.field-hint-card {
  margin: 0 0 14px 0;
  padding: 12px 14px;
  background:
    linear-gradient(135deg,
      color-mix(in srgb, var(--c-accent) 5%, transparent),
      color-mix(in srgb, var(--c-cyan) 5%, transparent));
  border: 1px solid color-mix(in srgb, var(--c-accent) 16%, transparent);
  border-radius: var(--r-md);
  font-size: var(--fs-sm);
  line-height: var(--lh-loose);
}
.field-hint-card__title {
  font-weight: var(--fw-semibold);
  margin-bottom: 6px;
  color: var(--c-text);
  font-size: var(--fs-sm);
}
.field-hint-card__body {
  display: grid;
  grid-template-columns: max-content 1fr;
  align-items: center;
  gap: 8px 10px;
  color: var(--c-text-muted);
  /* 占位高度：覆盖最长版（必填行 + 选填行 + 一行 notes），消除 layout shift。
     实际内容高度由 grid 自身适配，不会被这个 min-height 截断。 */
  min-height: 78px;
}
/* 加载态：四个 skeleton 占据 2x2 grid，体感与最终内容一致 */
.field-hint-card__body--loading .field-hint-skeleton {
  height: 16px;
  border-radius: var(--r-pill);
  background: linear-gradient(90deg,
    color-mix(in srgb, var(--c-text-faint) 12%, transparent),
    color-mix(in srgb, var(--c-text-faint) 22%, transparent),
    color-mix(in srgb, var(--c-text-faint) 12%, transparent));
  background-size: 200% 100%;
  animation: fx-skeleton-shimmer 1.4s linear infinite;
}
.field-hint-card__body--loading .field-hint-skeleton--lg {
  height: 14px;
}
@keyframes fx-skeleton-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
.field-hint-pill {
  display: inline-block;
  padding: 2px 8px;
  border-radius: var(--r-pill);
  font-size: 11.5px;
  font-weight: var(--fw-semibold);
  letter-spacing: .2px;
}
.field-hint-pill--req {
  background: var(--c-danger-soft);
  color: var(--c-danger);
}
.field-hint-pill--opt {
  background: var(--c-cyan-soft);
  color: var(--c-cyan);
}
.field-hint-pill--id {
  background: #fef3c7;
  color: #92400e;
}
.field-hint-text {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
}
.field-hint-notes {
  grid-column: 1 / -1;
  margin-top: 6px;
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
}
.field-hint-card__link {
  display: inline-block;
  margin-top: 8px;
  color: var(--c-accent);
  text-decoration: none;
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
}
.field-hint-card__link:hover {
  text-decoration: underline;
}

/* ----- 终端日志容器：固定高度 380px，与左侧矩形等高对齐 ----- */
.terminal-panel {
  height: 380px;
  max-height: 380px;
  min-height: 380px;
}
.terminal-body {
  max-height: 100%;
}
.progress-split-layout {
  align-items: stretch;
}

/* ----- 规避设计候选方案：滚动 + 全部显示 ----- */
.da-cands-shell {
  margin-top: 4px;
}
.da-cands-scroll {
  max-height: 460px;
  overflow-y: auto;
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  background: var(--c-surface);
}
.da-cands-scroll .da-table {
  margin: 0;
  border-radius: 0;
}

/* DA 页整页视觉微调 */
.da-page-header {
  margin-bottom: 18px;
  padding: 14px 18px;
  background:
    linear-gradient(135deg,
      color-mix(in srgb, var(--c-accent) 7%, transparent) 0%,
      color-mix(in srgb, var(--c-cyan) 5%, transparent) 100%);
  border: 1px solid color-mix(in srgb, var(--c-accent) 16%, transparent);
  border-radius: var(--r-md);
}
.da-page-header h3 {
  font-size: var(--fs-lg);
  color: var(--c-text);
  letter-spacing: .2px;
}
.da-page-body {
  border-radius: var(--r-lg);
  border: 1px solid var(--c-border);
  box-shadow: var(--shadow-2);
}
.da-detail__body { padding: 22px 26px; }
.da-detail__body h4 {
  font-size: var(--fs-md);
  color: var(--c-text);
}
.da-table {
  border-radius: 0;
}
.da-table th {
  background: var(--c-surface-2);
  color: var(--c-text-muted);
  font-weight: var(--fw-semibold);
  border-bottom: 1px solid var(--c-border);
  border-top: none;
  border-left: none;
  border-right: none;
  position: sticky;
  top: 0;
  z-index: 1;
}
.da-table td {
  border: none;
  border-bottom: 1px solid var(--c-divider);
  padding: 10px 8px;
  vertical-align: top;
}
.da-table tr.da-row--recommended {
  background:
    linear-gradient(90deg,
      color-mix(in srgb, var(--c-success) 10%, transparent),
      transparent);
}
.da-table tr.da-row--backup {
  background:
    linear-gradient(90deg,
      color-mix(in srgb, var(--c-warning) 8%, transparent),
      transparent);
}

/* ----- history_page hero 右侧操作 + 复核模式 hint ----- */
/* --- 历史页工具条（精简：去掉冗余大标题，只留筛选+刷新） --- */
/* .history-toolbar 已由统一 .page-header 替代（2026-07-02） */
.history-filter-select {
  padding: 6px 10px;
  border-radius: var(--r-sm);
  border: 1px solid var(--c-border);
  background: var(--c-surface);
  color: var(--c-text);
  font-size: var(--fs-sm);
  font-family: inherit;
  cursor: pointer;
  transition: border-color var(--t-fast), box-shadow var(--t-fast);
}
.history-filter-select:hover {
  border-color: color-mix(in srgb, var(--c-accent) 35%, transparent);
}
.history-filter-select:focus {
  outline: none;
  border-color: var(--c-accent);
  box-shadow: var(--shadow-focus);
}
.review-mode-hint {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  padding: 10px 14px;
  margin-bottom: 14px;
  background:
    linear-gradient(135deg,
      color-mix(in srgb, var(--c-cyan) 8%, transparent),
      color-mix(in srgb, var(--c-accent) 5%, transparent));
  border: 1px solid color-mix(in srgb, var(--c-cyan) 22%, transparent);
  border-radius: var(--r-md);
  font-size: var(--fs-sm);
  color: var(--c-text);
}
.review-mode-hint__icon {
  font-size: 16px;
  flex-shrink: 0;
}
.review-mode-hint.hidden { display: none; }

/* =====================================================================
 * 2026-05-23-S: 大刀阔斧迭代 — 对话气泡 / 进度页 / Hub 卡片
 *  - 之前所有"对话气泡美化"贴在 .chat-bubble / .qa-bubble 上，但 JS
 *    实际生成的是 .dialog-message + .message-bubble，class 不匹配 → 丑。
 *  - Analysis Log 黑底改浅色卡（用户反馈：终端梗对专利场景不通）。
 *  - 水位 bottle 改同心圆环（CSS conic-gradient）。
 *  - hub-card 变大到接近首页 role-card 体量，两列布局。
 * ===================================================================== */

/* ===== Step2 多轮对话：贴 .dialog-message + .message-bubble ===== */
#step2 .dialog-container {
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  padding: 18px;
  min-height: 360px;
  max-height: 56vh;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 14px;
  scroll-behavior: smooth;
  margin-bottom: 14px;
}
#step2 .dialog-container::-webkit-scrollbar { width: 8px; }
#step2 .dialog-container::-webkit-scrollbar-thumb {
  background: color-mix(in srgb, var(--c-text-faint) 50%, transparent);
  border-radius: var(--r-pill);
}

/* 单条对话：分行，AI 左对齐，用户右对齐 */
#step2 .dialog-message {
  display: flex;
  flex-direction: column;
  margin: 0;
  animation: motion-fade-in var(--t-slow) var(--ease-out) both;
}
#step2 .dialog-message.ai { align-items: flex-start; }
#step2 .dialog-message.user { align-items: flex-end; }

/* 气泡本体：AI 浅色 + 强调色左条；用户用 accent 渐变 */
#step2 .dialog-message .message-bubble {
  max-width: min(76%, 720px);
  padding: 12px 16px;
  border-radius: 14px;
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  word-wrap: break-word;
  position: relative;
  box-shadow: var(--shadow-1);
}
#step2 .dialog-message.ai .message-bubble {
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  color: var(--c-text);
  border-bottom-left-radius: 4px;
}
/* AI 气泡左侧渐变细条（从 indigo 到 cyan） */
#step2 .dialog-message.ai .message-bubble::before {
  content: '';
  position: absolute;
  left: 0; top: 12px; bottom: 12px;
  width: 3px;
  border-radius: 999px;
  background: linear-gradient(180deg, var(--c-accent), var(--c-cyan));
}
#step2 .dialog-message.ai .message-bubble {
  padding-left: 18px;
}
#step2 .dialog-message.user .message-bubble {
  background: var(--grad-accent);
  color: var(--c-accent-contrast);
  border-bottom-right-radius: 4px;
  border: none;
  box-shadow:
    0 4px 14px -4px color-mix(in srgb, var(--c-accent) 45%, transparent);
}

/* "思考中"气泡：呼吸点 */
#step2 .dialog-message.thinking-bubble .message-bubble {
  background: var(--c-surface);
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
#step2 .thinking-dots { display: inline-flex; gap: 4px; }
#step2 .thinking-dots > span {
  width: 6px; height: 6px;
  background: var(--c-accent);
  border-radius: 50%;
  animation: fx-thinking 1.2s ease-in-out infinite both;
  opacity: .55;
}
#step2 .thinking-dots > span:nth-child(2) { animation-delay: .15s; }
#step2 .thinking-dots > span:nth-child(3) { animation-delay: .3s; }
@keyframes fx-thinking {
  0%, 80%, 100% { transform: scale(.6); opacity: .35; }
  40% { transform: scale(1); opacity: 1; }
}

/* 快速选项（AI 给的几个候选答案）：胶囊 chip */
#step2 .quick-options {
  margin: 8px 0 14px;
}
#step2 .quick-options .options-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
#step2 .quick-options .options-row > * {
  padding: 7px 14px !important;
  border-radius: var(--r-pill) !important;
  border: 1px solid var(--c-border) !important;
  background: var(--c-surface) !important;
  color: var(--c-text) !important;
  font-size: var(--fs-sm) !important;
  cursor: pointer;
  transition: all var(--t-fast) var(--ease);
}
#step2 .quick-options .options-row > *:hover {
  border-color: var(--c-accent) !important;
  background: color-mix(in srgb, var(--c-accent) 6%, var(--c-surface)) !important;
  color: var(--c-accent) !important;
  transform: translateY(-1px);
}

/* 输入区：textarea + 跳过 + 发送 */
#step2 .answer-input {
  display: flex;
  gap: 12px;
  align-items: stretch;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  padding: 10px 12px;
  transition: border-color var(--t-fast), box-shadow var(--t-fast);
}
#step2 .answer-input:focus-within {
  border-color: var(--c-accent);
  box-shadow: var(--shadow-focus);
}
#step2 .answer-input textarea {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  resize: none;
  min-height: 56px;
  max-height: 160px;
  font-family: inherit;
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  color: var(--c-text);
  padding: 6px;
}
#step2 .answer-input__actions {
  display: flex;
  flex-direction: column;
  gap: 6px;
  flex-shrink: 0;
  justify-content: flex-end;
}
#step2 .answer-input__actions .btn {
  white-space: nowrap;
}
#step2 .btn-skip {
  background: transparent !important;
  border: 1px dashed color-mix(in srgb, var(--c-text-faint) 60%, transparent) !important;
  color: var(--c-text-muted) !important;
  font-size: var(--fs-xs) !important;
}
#step2 .btn-skip:hover {
  border-color: var(--c-warning) !important;
  color: var(--c-warning) !important;
  background: var(--c-warning-soft) !important;
}

/* 进度条（步骤进度，例 1/4）：顶部渐变填充 */
#step2 .progress-section {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 14px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  margin-bottom: 14px;
}
/* #1 (2026-06-14): analyst 单题时整段隐藏(progSection.hidden=true)。上面 display:flex
   会覆盖 HTML5 [hidden] 默认值(同 #5 红线)，显式补一条让隐藏生效。 */
#step2 .progress-section[hidden] {
  display: none;
}
#step2 .progress-section .progress-label {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  flex-shrink: 0;
}
#step2 .progress-section .progress-bar {
  flex: 1;
  height: 6px;
  background: var(--c-divider);
  border-radius: 999px;
  overflow: hidden;
}
#step2 .progress-section .progress-fill {
  height: 100%;
  background: var(--grad-accent);
  border-radius: 999px;
  transition: width var(--t-slow) var(--ease-out);
  box-shadow: 0 0 8px color-mix(in srgb, var(--c-accent) 35%, transparent);
}
#step2 .progress-section .progress-numbers {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  font-variant-numeric: tabular-nums;
  flex-shrink: 0;
}

/* ===== 进度页：Analysis Log 改浅色 + 居中宽度约束 ===== */
#step4_progress .progress-page-header {
  max-width: min(980px, 100%);
  margin: 0 auto 18px;
  text-align: center;
  padding: 6px 0;
}
/* 2026-07-05 基调执行（第三批遗留项拍板：去渐变）：大标题改纯色，
   与全站其它页 h2 一致——渐变文字是唯一残留的"彩字"，截图 08-52-42 确认后删。 */
#step4_progress .progress-page-header > h2 {
  margin: 0 0 6px 0;
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  color: var(--c-text);
  letter-spacing: -.01em;
}
#step4_progress .progress-page-header > p {
  color: var(--c-text-muted);
  font-size: var(--fs-base);
  margin: 0;
}
#step4_progress .progress-main-content {
  max-width: min(980px, 100%);
  margin: 0 auto;
}
#step4_progress .progress-split-layout {
  gap: 24px;
  align-items: stretch;
  min-height: 380px;
}
#step4_progress .progress-terminal-col {
  flex: 1;
  min-width: 0;
}

/* 浅灰科技风 log 卡：暗底改浅灰底（VS Code 浅主题感）；左侧瓶子用琥珀色形成色温对比
 * 2026-05-24-K：之前是 #0f172a 深底，反差太烈且与瓶子蓝同色系；改为石板灰 + 琥珀瓶 */
#step4_progress .terminal-panel {
  height: 380px;
  border: 1px solid #d0d7de;
  border-radius: var(--r-lg);
  background: #f1f5f9;
  box-shadow: 0 4px 16px -8px rgba(31, 34, 38, .12);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
#step4_progress .terminal-titlebar {
  background:
    linear-gradient(135deg, #e2e8f0 0%, #cbd5e1 100%);
  border-bottom: 1px solid #cbd5e1;
  padding: 10px 14px;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}
#step4_progress .terminal-titlebar .terminal-dot {
  display: none;
}
#step4_progress .terminal-titlebar::before {
  content: '';
  width: 8px; height: 8px; border-radius: 50%;
  background: #16a34a;
  box-shadow: 0 0 0 3px rgba(22, 163, 74, .22);
  animation: fx-brand-beat 1.6s var(--ease) infinite;
}
#step4_progress .terminal-titlebar-text {
  font-family: var(--font-sans);
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  letter-spacing: .01em;
  margin: 0;
  padding-bottom: 2px;
  background-image: linear-gradient(90deg, #2f9bbf 0%, var(--c-violet) 50%, #3a9bb8 100%);
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 100% 2px;
}
#step4_progress .terminal-body {
  flex: 1;
  background: transparent;
  color: #334155;
  padding: 12px 16px;
  overflow-y: auto;
  font-family: var(--font-mono);
  font-size: var(--fs-sm);
  line-height: 1.7;
}
#step4_progress .terminal-body::-webkit-scrollbar { width: 8px; }
#step4_progress .terminal-body::-webkit-scrollbar-thumb {
  background: rgba(100, 116, 139, .35);
  border-radius: var(--r-pill);
}
#step4_progress .terminal-line {
  display: flex;
  flex-wrap: nowrap;
  align-items: baseline;
  gap: 6px;
  padding: 6px 8px;
  border-radius: var(--r-sm);
  margin-bottom: 4px;
  border-left: 2px solid #6fc0d8;
  background: rgba(241, 245, 249, .6);
  min-width: 0;
}
#step4_progress .terminal-line .terminal-ts {
  color: #155e75;
  font-weight: var(--fw-semibold);
  flex-shrink: 0;
}
#step4_progress .terminal-line .terminal-action {
  color: #0c4a6e;
  font-weight: var(--fw-semibold);
  flex-shrink: 0;
}
#step4_progress .terminal-line .terminal-title {
  display: block;
  flex: 1 1 auto;
  min-width: 0;
  color: #334155;
  font-family: var(--font-sans);
  font-size: var(--fs-sm);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  -webkit-line-clamp: unset;
  -webkit-box-orient: unset;
  word-break: normal;
  line-height: var(--lh-base);
  margin: 0;
}
#step4_progress .terminal-line--done {
  border-left-color: #16a34a;
  background: rgba(22, 163, 74, .10);
  color: #15803d;
}
/* 入场"正在启动分析…"行：闪烁光标感，与已完成/banner 区分（2026-06-13） */
#step4_progress .terminal-line--starting {
  border-left-color: #3eaecf;
  background: rgba(62, 174, 207, .08);
  animation: terminal-starting-pulse 1.3s ease-in-out infinite;
}
@keyframes terminal-starting-pulse {
  0%, 100% { opacity: .55; }
  50%      { opacity: 1; }
}
#step4_progress .terminal-line--banner {
  border-left-color: #ea580c;
  background: rgba(234, 88, 12, .08);
}
#step4_progress .terminal-line--banner .terminal-action,
#step4_progress .terminal-line--banner .terminal-title {
  color: #c2410c;
  font-weight: var(--fw-semibold);
}
#step4_progress .terminal-line--mini {
  border-left-color: rgba(148, 163, 184, .55);
  background: transparent;
  padding: 4px 8px;
  margin-bottom: 2px;
  opacity: .82;
}
#step4_progress .terminal-line--mini .terminal-action {
  color: #16a34a;
}
#step4_progress .terminal-line--mini .terminal-title {
  color: #5f646b;
}
@property --pct {
  syntax: '<number>';
  inherits: false;
  initial-value: 0;
}
@keyframes bottle-starting-glow {
  0%, 100% {
    box-shadow:
      inset 0 0 0 1px rgba(255, 255, 255, .6),
      0 6px 20px -8px color-mix(in srgb, var(--c-accent) 22%, transparent);
  }
  50% {
    box-shadow:
      inset 0 0 0 1px rgba(255, 255, 255, .9),
      0 0 0 4px color-mix(in srgb, var(--c-accent) 14%, transparent),
      0 6px 22px -8px color-mix(in srgb, var(--c-accent) 42%, transparent);
  }
}

/* ===== 2026-06-15 #3: 完成后自动过渡 =====
 * B/筛查流程完成时,进度两栏整体淡化 + 居中遮罩"正在进入结果页",~1.2s 后跳结果页。
 * 动效遵循全站基调:仅淡入 + 轻脉冲(功能性反馈),无炫光/位移。 */
#step4_progress .progress-split-layout.is-completing {
  opacity: .32;
  filter: saturate(.7);
  transition: opacity .5s var(--ease-out), filter .5s var(--ease-out);
  pointer-events: none;
}
.progress-main-content { position: relative; }
.progress-complete-veil {
  position: absolute;
  left: 0; right: 0;
  /* 盖住进度两栏区域(顶端对齐 split-layout),不遮面包屑/页头 */
  top: 0;
  /* split-layout 高度 ~380px(bottle/terminal),遮罩居中其上 */
  height: 380px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  z-index: 5;
  opacity: 0;
  transition: opacity .45s var(--ease-out);
  pointer-events: none;
}
.progress-complete-veil.is-visible { opacity: 1; }
.progress-complete-veil.hidden { display: none; }
.progress-complete-veil__check {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  font-weight: var(--fw-bold);
  color: #fff;
  background: linear-gradient(135deg, var(--c-accent) 0%, var(--c-accent-hover) 100%);
  box-shadow: 0 4px 16px -4px color-mix(in srgb, var(--c-accent) 50%, transparent);
  animation: progress-veil-pulse 1.4s ease-in-out infinite;
}
.progress-complete-veil__check svg { width: 28px; height: 28px; stroke: #fff; }
@keyframes progress-veil-pulse {
  0%, 100% { box-shadow: 0 4px 16px -4px color-mix(in srgb, var(--c-accent) 50%, transparent); }
  50%      { box-shadow: 0 4px 22px -2px color-mix(in srgb, var(--c-accent) 64%, transparent); }
}
.progress-complete-veil__text {
  font-size: var(--fs-md);
  font-weight: var(--fw-medium);
  color: var(--c-text);
  letter-spacing: .2px;
}
@media (prefers-reduced-motion: reduce) {
  .progress-complete-veil__check { animation: none; }
}

/* ===== 2026-08-09 F-C: 结果页加载态遮罩 =====
 * 消除"进结果页瞬间先看到上一个任务残留内容"的串台窗口——_clearResultViewDynamic
 * 已清空动态插槽，这层遮罩再盖住整块直到新数据渲染完成。同 progress-complete-veil
 * 基调：仅淡入，无炫光/位移。 */
#resultStep2 { position: relative; }
.rv-loading-veil {
  position: absolute;
  inset: 0;
  background: var(--c-surface);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 5;
  opacity: 0;
  transition: opacity .3s var(--ease-out);
  pointer-events: none;
}
.rv-loading-veil.is-visible { opacity: 1; pointer-events: auto; }
.rv-loading-veil.hidden { display: none; }
.rv-loading-veil__text {
  font-size: var(--fs-md);
  font-weight: var(--fw-medium);
  color: var(--c-text-muted);
  letter-spacing: .2px;
  animation: rv-veil-pulse 1.4s ease-in-out infinite;
}
@keyframes rv-veil-pulse {
  0%, 100% { opacity: .55; }
  50%      { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .rv-loading-veil__text { animation: none; }
}

/* engineer 看 2 张（qb + screening）；analyst 看 4 张（+ report + review）
 * 都固定 2 列网格，analyst 用 2x2，与首页 role-select-grid 视觉对仗
 * （#2026-07-04-B(11)：此注释原丢失开头的斜杠星号，CSS 错误恢复会吞掉后面的规则块） */
/* Linear 风格：紧凑、平铺、低饱和。从 200px+ 收到 ~130px */
/* 2026-07-02 单一 analyst 身份：3 张卡平铺一行（信息密度优先），
   原 body[data-role="engineer"/"analyst"] 分叉已收敛为单一规则。 */
/* 顶部色条：保留品牌识别色，但更细，仅在 hover 时显著 */
/* hover：低调抬升，不带彩色阴影 */

/* 大屏适配：hub 模块卡片放大 */

/* =====================================================================
 * 2026-05-23-T: 残余 inline style 治理
 *  - QB 三档结果块 / IPC 编辑区
 *  - step_c 黄色警告条
 *  - QB loading 提示
 *  - step1 footer-hint 微调（改文案权重）
 * ===================================================================== */

/* QB 加载提示 */
.qb-loading {
  margin-top: 18px;
  padding: 14px 18px;
  background:
    linear-gradient(135deg,
      color-mix(in srgb, var(--c-accent) 8%, transparent),
      color-mix(in srgb, var(--c-cyan) 6%, transparent));
  border: 1px solid color-mix(in srgb, var(--c-accent) 22%, transparent);
  border-radius: var(--r-md);
  display: flex;
  align-items: center;
  gap: var(--sp-3);
}
.qb-loading.hidden { display: none; }
.qb-loading__text {
  color: var(--c-accent);
  font-weight: var(--fw-medium);
  font-size: var(--fs-sm);
}
.qb-spinner {
  display: inline-block;
  width: 18px; height: 18px;
  border: 2px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
  border-top-color: var(--c-accent);
  border-radius: 50%;
  animation: qb-spin .9s linear infinite;
  flex-shrink: 0;
}
@keyframes qb-spin { to { transform: rotate(360deg); } }

/* QB 结果区 */
.qb-result {
  margin-top: var(--sp-5);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}
.qb-result__title {
  margin: 0 0 4px 0;
  font-size: var(--fs-md);
  color: var(--c-text);
  font-weight: var(--fw-semibold);
}
.qb-result__next {
  margin-top: var(--sp-4);
  display: flex;
  justify-content: flex-end;
}

/* QB 三档结果块（broad / balanced / strict）*/
.qb-one {
  padding: 14px 16px;
  border: 1px solid var(--c-border);
  border-left: 4px solid var(--c-accent);
  background: var(--c-surface);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-1);
  transition: border-color var(--t-base), box-shadow var(--t-base), transform var(--t-fast);
}
.qb-one:hover {
  box-shadow: var(--shadow-2);
  transform: translateY(-1px);
}
.qb-one--broad    { border-left-color: var(--c-cyan); }
.qb-one--balanced { border-left-color: var(--c-success); }
.qb-one--focused  { border-left-color: var(--c-accent); }   /* 第四档（2026-08-14） */
.qb-one--strict   { border-left-color: var(--c-warning); }

.qb-one__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--sp-2);
  margin-bottom: var(--sp-2);
}
.qb-one__title {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  font-size: var(--fs-sm);
  color: var(--c-text);
  flex-wrap: wrap;
}
.qb-one__num {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-accent);
}
.qb-one__sep {
  color: var(--c-text-faint);
  margin: 0 2px;
}
.qb-one__hint {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
}
.qb-one__pre {
  margin: 6px 0 0 0;
  padding: 10px 12px;
  background: var(--c-surface-2);
  border-radius: var(--r-sm);
  white-space: pre-wrap;
  word-break: break-all;
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  line-height: var(--lh-base);
  color: var(--c-text);
  border: 1px solid var(--c-divider);
}

/* IPC 编辑区 */
.qb-ipc-section {
  margin-top: var(--sp-4);
  padding: 16px 18px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-1);
}
.qb-ipc-section.hidden { display: none; }
.qb-ipc-section__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--sp-3);
}
.qb-ipc-section__head strong {
  font-size: var(--fs-sm);
  color: var(--c-text);
}
.qb-ipc-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-3);
}
@media (max-width: 640px) {
  .qb-ipc-grid { grid-template-columns: 1fr; }
}
.qb-ipc-label {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
  margin-bottom: 4px;
}
.qb-ipc-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  min-height: 28px;
}
.qb-ipc-chips--picked {
  padding: 6px 8px;
  background: color-mix(in srgb, var(--c-accent) 5%, transparent);
  border: 1px dashed color-mix(in srgb, var(--c-accent) 25%, transparent);
  border-radius: var(--r-sm);
}
.qb-ipc-add {
  margin-top: 6px;
  display: flex;
  gap: 6px;
}
.qb-ipc-add__input {
  padding: 6px 8px;
  width: 140px;
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  background: var(--c-surface);
  color: var(--c-text);
  transition: border-color var(--t-fast), box-shadow var(--t-fast);
}
.qb-ipc-add__input:focus {
  outline: none;
  border-color: var(--c-accent);
  box-shadow: var(--shadow-focus);
}

/* step_c 黄色警告条 */
.step-c-warn {
  margin-bottom: 14px;
  padding: 12px 16px;
  background:
    linear-gradient(135deg,
      color-mix(in srgb, var(--c-warning) 8%, transparent),
      color-mix(in srgb, var(--c-warning) 4%, transparent));
  border: 1px solid color-mix(in srgb, var(--c-warning) 35%, transparent);
  border-radius: var(--r-md);
  display: flex;
  align-items: center;
  gap: 10px;
}
.step-c-warn__icon {
  font-size: 20px;
  font-weight: var(--fw-bold);
  color: var(--c-warning);
  flex-shrink: 0;
  line-height: 1;
}
.step-c-warn__text {
  color: var(--c-text);
  font-size: var(--fs-sm);
  line-height: var(--lh-base);
}

/* ============================================================
 * §2026-05-24-C  step3 上传页精简 + 进度页等高对齐 + DA 三栏化
 * ============================================================ */

/* ----- step3 整体压缩：删除 .complete-section 后再压缩 step3-block 内边距，
 *       让 上传入口在首屏可见 ----- */
#step3 .step3-block {
  padding: 14px 18px;
}
#step3 .step3-block__head {
  margin-bottom: 10px;
}

/* 上传区两栏：左 字段提示卡 / 右 上传框 */
.upload-section__grid {
  display: grid;
  grid-template-columns: minmax(220px, 1fr) minmax(260px, 1.4fr);
  gap: 14px;
  align-items: stretch;
}
.upload-section__grid > .field-hint-card {
  margin: 0;
}

/* 紧凑版上传框：grid 模式下不再吃掉首屏 */
.upload-box.upload-box--compact {
  padding: 18px 16px;
  min-height: 132px;
  margin: 0;
  /* 覆盖 skin.css 里 .upload-box 的 column 布局 + center 对齐（带 !important） */
  flex-direction: row !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 14px;
  text-align: left;
}
.upload-box.upload-box--compact .upload-box__icon {
  font-size: 28px;
  flex-shrink: 0;
  line-height: 1;
  margin-bottom: 0;
}
.upload-box.upload-box--compact .upload-box__icon svg { width: 28px; height: 28px; display: block; }
.upload-box.upload-box--compact .upload-box__main {
  flex: 1;
  min-width: 0;
}
.upload-box.upload-box--compact p {
  font-size: var(--fs-sm);
  margin: 0;
}
.upload-box.upload-box--compact .formats {
  font-size: var(--fs-xs);
  margin-top: 4px;
}

/* 已选文件态：把 formats 隐藏，把文件信息行显出来 */
.upload-box.upload-box--has-file {
  border-color: color-mix(in srgb, var(--c-success) 36%, var(--c-border));
  background: color-mix(in srgb, var(--c-success-soft) 40%, transparent);
}
.upload-box.upload-box--has-file .formats {
  display: none;
}
.upload-box__file {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  margin-top: 8px;
  font-size: var(--fs-sm);
  color: var(--c-text);
}
.upload-box__file[hidden] { display: none; }
/* 2026-06-16: 多文件 chips —— 每个文件一行（单文件时也走同一行式样） */
.upload-box__file-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 4px 6px;
  border-radius: var(--radius-sm, 6px);
  background: rgba(31, 34, 38, .04);
}
.upload-box__file-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--c-success);
  color: #fff;
  font-size: 11px;
  flex-shrink: 0;
}
.upload-box__file-name {
  font-weight: var(--fw-semibold);
  word-break: break-all;
  flex: 1 1 auto;
}
.upload-box__file-size {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
  font-variant-numeric: tabular-nums;
}
.upload-box__file-remove {
  margin-left: 4px;
  width: 22px;
  height: 22px;
  border: none;
  background: transparent;
  color: var(--c-text-faint);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  border-radius: 50%;
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
  flex-shrink: 0;
}
.upload-box__file-remove:hover {
  background: rgba(31, 34, 38, .08);
  color: var(--c-danger);
}

/* 2026-08-02 PLAN_POOL_UPLOAD_FIXES Q3：拖拽悬停反馈统一走 class。
   !important 是为压过 skin.css .upload-box / .tech-drop-zone 基础规则的同权重声明 */
.upload-box.upload-box--dragover,
.tech-drop-zone.tech-drop-zone--dragover {
  border-color: var(--c-accent) !important;
  background: var(--c-accent-soft) !important;
}

/* 窄屏退化为单列 */
@media (max-width: 720px) {
  .upload-section__grid {
    grid-template-columns: 1fr;
  }
}
/* 矩形高度由 5079 段定义为 28px；此处不再覆盖 */

/* ----- 规避设计 Top-3 两栏布局（2026-05-24-K：左文 + 右表）-----
 * 替代旧的 3-card grid（3 卡并排太高、文字下沉需要大量滚动）。
 * 左侧：整体建议 / 首选理由 / 备选理由
 * 右侧：3 行 × (序号 / 方案 / 法律 / 技术 / 成本 / 综合) 表格，列头点击可排序 */
.da-twocol {
  display: grid;
  grid-template-columns: minmax(0, 280px) minmax(0, 1fr);
  gap: 18px;
  margin-bottom: 14px;
  align-items: start;
}
.da-twocol__left {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 14px 16px;
  background: color-mix(in srgb, var(--c-cyan) 4%, var(--c-surface));
  border-left: 3px solid var(--c-cyan);
  border-radius: var(--r-md);
  font-size: var(--fs-sm);
  line-height: var(--lh-loose);
  position: sticky;
  top: 12px;
}
.da-leftnote__block { display: flex; flex-direction: column; gap: 4px; }
.da-leftnote__title {
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  letter-spacing: .04em;
}
.da-leftnote__body {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  line-height: var(--lh-loose);
}
.da-leftnote--empty {
  color: var(--c-text-faint);
  font-size: var(--fs-xs);
  font-style: italic;
}

.da-twocol__right { min-width: 0; }
.da-tbl-wrap {
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  overflow: hidden;
  background: var(--c-surface);
}
.da-tbl {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm);
}
.da-tbl__th {
  text-align: left;
  padding: 10px 12px;
  background: color-mix(in srgb, var(--c-text) 4%, var(--c-surface));
  border-bottom: 1px solid var(--c-border);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  font-size: var(--fs-md);
  letter-spacing: .01em;
  white-space: nowrap;
}
.da-tbl__th--sortable {
  cursor: pointer;
  user-select: none;
  text-align: center;
}
.da-tbl__th--sortable:hover {
  background: color-mix(in srgb, var(--c-accent) 8%, var(--c-surface));
  color: var(--c-accent);
}
.da-tbl__tr {
  border-bottom: 1px solid var(--c-border);
  transition: background var(--t-fast) var(--ease);
}
.da-tbl__tr:last-child { border-bottom: none; }
.da-tbl__tr:hover { background: color-mix(in srgb, var(--c-text) 2%, var(--c-surface)); }
.da-tbl__tr--rec {
  background: color-mix(in srgb, var(--c-accent) 5%, var(--c-surface));
}
.da-tbl__tr--bak {
  background: color-mix(in srgb, var(--c-cyan) 4%, var(--c-surface));
}
.da-tbl__td {
  padding: 12px;
  vertical-align: top;
  font-size: var(--fs-sm);
  color: var(--c-text);
}
.da-tbl__td--rank {
  text-align: center;
  font-weight: var(--fw-semibold);
  color: var(--c-text-muted);
  font-variant-numeric: tabular-nums;
}
.da-tbl__td--plan { min-width: 0; }
.da-tbl__plan-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
  flex-wrap: wrap;
}
.da-tbl__plan-title {
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  font-size: var(--fs-md);
  line-height: 1.4;
}
.da-tbl__badge {
  padding: 2px 8px;
  border-radius: var(--r-pill);
  font-size: 11px;
  font-weight: var(--fw-semibold);
  flex-shrink: 0;
}
.da-tbl__badge--rec {
  background: color-mix(in srgb, var(--c-accent) 14%, transparent);
  color: var(--c-accent);
}
.da-tbl__badge--bak {
  background: color-mix(in srgb, var(--c-cyan) 16%, transparent);
  color: var(--c-cyan);
}
.da-tbl__plan-summary {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  line-height: 1.55;
  margin-bottom: 6px;
}
.da-tbl__plan-detail {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: 1.55;
  padding: 6px 8px;
  background: color-mix(in srgb, var(--c-text) 3%, var(--c-surface));
  border-radius: var(--r-sm);
}
.da-tbl__detail-row { margin: 2px 0; }
.da-tbl__detail-row strong {
  color: var(--c-text);
  font-weight: var(--fw-semibold);
}
.da-tbl__td--score {
  text-align: center;
  width: 64px;
  font-variant-numeric: tabular-nums;
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
}
.da-tbl__td--overall {
  text-align: center;
  width: 72px;
  font-variant-numeric: tabular-nums;
  font-weight: var(--fw-bold);
  color: var(--c-accent);
  font-size: var(--fs-md);
}
.da-tbl__th-arrow {
  color: var(--c-text-muted);
  font-weight: var(--fw-medium);
  margin-left: 2px;
  letter-spacing: 0;
}
.da-tbl__legend {
  margin-top: 10px;
  padding: 10px 14px;
  border: 1px dashed var(--c-border);
  border-radius: var(--r-sm);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: 1.6;
  background: color-mix(in srgb, var(--c-text) 2%, var(--c-surface));
}
.da-tbl__legend strong {
  color: var(--c-text);
  font-weight: var(--fw-semibold);
}

/* 中等宽度下两栏堆叠 */
@media (max-width: 900px) {
  .da-twocol { grid-template-columns: 1fr; }
  .da-twocol__left { position: static; }
}

/* 旧 da-cand-card / da-cands-top3 / da-overall-advice / da-reason-line 保留为兜底，
 * 但默认布局已切到 .da-twocol，旧 class 自然不渲染。 */
.da-cand-card {
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  padding: 16px 18px;
  background: var(--c-surface);
  display: flex;
  flex-direction: column;
  gap: 8px;
  position: relative;
  transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);
}
.da-cand-card:hover {
  border-color: color-mix(in srgb, var(--c-accent) 32%, transparent);
  box-shadow: var(--shadow-1);
}
.da-cand-card--rec {
  border-color: color-mix(in srgb, var(--c-accent) 50%, transparent);
  background: color-mix(in srgb, var(--c-accent) 4%, var(--c-surface));
}
.da-cand-card--bak {
  border-color: color-mix(in srgb, var(--c-cyan) 38%, transparent);
  background: color-mix(in srgb, var(--c-cyan) 3%, var(--c-surface));
}
.da-cand-card__rank {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  color: var(--c-text-muted);
}
.da-cand-card__rank-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--grad-accent);
  color: var(--c-accent-contrast);
  font-size: 12px;
}
.da-cand-card__badge {
  margin-left: auto;
  padding: 2px 8px;
  border-radius: var(--r-pill);
  font-size: 11px;
  font-weight: var(--fw-semibold);
}
.da-cand-card__badge--rec {
  background: color-mix(in srgb, var(--c-accent) 14%, transparent);
  color: var(--c-accent);
}
.da-cand-card__badge--bak {
  background: color-mix(in srgb, var(--c-cyan) 14%, transparent);
  color: var(--c-cyan);
}
.da-cand-card__title {
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  line-height: 1.4;
}
.da-cand-card__summary {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  line-height: 1.6;
}
.da-cand-card__scores {
  display: flex;
  gap: 6px;
  margin-top: auto;
  padding-top: 8px;
  border-top: 1px solid var(--c-border);
  font-size: var(--fs-xs);
}
.da-cand-card__score {
  flex: 1;
  text-align: center;
  color: var(--c-text-muted);
}
.da-cand-card__score-val {
  display: block;
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  font-size: var(--fs-sm);
  font-variant-numeric: tabular-nums;
}
.da-cand-card__overall {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
}
.da-cand-card__overall-val {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-accent);
  font-variant-numeric: tabular-nums;
}

/* 整体建议 / 推荐理由：与放大后的 top3 卡片视觉权重对齐 */
.da-overall-advice {
  margin-top: 18px;
  padding: 14px 16px;
  background: color-mix(in srgb, var(--c-cyan) 6%, var(--c-surface));
  border-left: 4px solid var(--c-cyan);
  border-radius: var(--r-md);
}
.da-overall-advice__title {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  margin-bottom: 6px;
}
.da-overall-advice__body {
  font-size: var(--fs-sm);
  line-height: var(--lh-loose);
  color: var(--c-text);
}
.da-reason-line {
  margin-top: 10px;
  font-size: var(--fs-sm);
  line-height: var(--lh-base);
  color: var(--c-text-muted);
}
.da-reason-line strong {
  color: var(--c-text);
  font-weight: var(--fw-semibold);
}

/* 其余方案（第 4 名起）竖向滚动区 */
.da-cands-rest {
  margin-top: 4px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  background: var(--c-surface);
  overflow: hidden;
}
.da-cands-rest__head {
  padding: 8px 14px;
  border-bottom: 1px solid var(--c-border);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  background: color-mix(in srgb, var(--c-accent) 3%, transparent);
}
.da-cands-rest__list {
  max-height: 320px;
  overflow-y: auto;
}
.da-cands-rest__item {
  display: grid;
  grid-template-columns: 32px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 10px 14px;
  border-bottom: 1px solid color-mix(in srgb, var(--c-border) 60%, transparent);
}
.da-cands-rest__item:last-child {
  border-bottom: none;
}
.da-cands-rest__rank {
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.da-cands-rest__title {
  font-size: var(--fs-sm);
  color: var(--c-text);
  font-weight: var(--fw-medium);
}
.da-cands-rest__summary {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: 1.45;
  margin-top: 2px;
}
.da-cands-rest__overall {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-accent);
  font-variant-numeric: tabular-nums;
}

/* ----- #3+#4 DA 左 sidebar 变窄 → 200px ----- */
.da-page-body {
  /* 原 display:flex 不变，只调左栏宽度（见 .da-sidebar） */
}
.da-sidebar {
  width: 200px;
  min-width: 200px;
}

/* ----- #4 / #5 追问 modal
 * 2026-05-24-K：从右抽屉改居中弹窗（避免输入被旁边卡片遮挡）。
 * 2026-05-24-M：用户反馈居中弹窗 380px 仍太小，改为右半屏底抽屉
 * （55vw × 100vh，从右边滑入）——既能一边看完整方案表格、一边追问，
 * 又有足够垂直高度承载多轮对话。 */
.da-detail__refine.is-modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: auto;
  width: min(55vw, 760px);
  min-width: 480px;
  max-height: 100vh;
  transform: translateX(100%);
  background: transparent;
  box-shadow: -16px 0 48px -16px rgba(31, 34, 38, .28);
  border-left: 1px solid var(--c-border);
  border-radius: 0;
  display: flex;
  flex-direction: column;
  z-index: 70;
  opacity: 1;
  pointer-events: none;
  transition: transform var(--t-base) var(--ease);
}
/* 2026-05-24-R: 抽屉与 header 重叠那段改磨砂，其余保持纯白可读
 * --da-glass-h 由 JS 在打开抽屉时测 .header 实际高度写入；
 * ::before = 顶部磨砂段（高度=header 高度，blur 16px + 半透明白）
 * ::after  = 其余白色实底（覆盖磨砂以下到底部）
 * 子元素全部 z-index:2 浮在两层背景之上 */
.da-detail__refine.is-modal::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: var(--da-glass-h, 0px);
  background: rgba(255, 255, 255, .55);
  backdrop-filter: blur(16px) saturate(160%);
  -webkit-backdrop-filter: blur(16px) saturate(160%);
  border-bottom: 1px solid rgba(226, 232, 240, .55);
  pointer-events: none;
  z-index: 0;
}
.da-detail__refine.is-modal::after {
  content: '';
  position: absolute;
  top: var(--da-glass-h, 0px);
  left: 0;
  right: 0;
  bottom: 0;
  background: var(--c-surface);
  pointer-events: none;
  z-index: 0;
}
.da-detail__refine.is-modal > * {
  position: relative;
  z-index: 2;
}
/* 抽屉头部本身不要白底（让磨砂透过去），其他样式不变 */
.da-detail__refine.is-modal .da-refine-drawer__head {
  background: transparent;
}
.da-detail__refine.is-modal.is-open {
  pointer-events: auto;
  transform: translateX(0);
}
.da-refine-drawer__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 20px;
  border-bottom: 1px solid var(--c-border);
  flex-shrink: 0;
}
.da-refine-drawer__title {
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
}
.da-refine-drawer__close {
  background: transparent;
  border: none;
  color: var(--c-text-muted);
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  padding: 4px 8px;
  border-radius: var(--r-sm);
}
.da-refine-drawer__close:hover {
  background: color-mix(in srgb, var(--c-text) 6%, transparent);
}
/* 顶部"当前方案上下文"卡：列出本专利的全部方案概要（编号 + 标题 + 综合分），
 * 让用户在追问时同时看到候选清单——可在问题里指名"方案 X" */
.da-refine-modal__context {
  padding: 14px 24px;
  background: color-mix(in srgb, var(--c-cyan) 5%, var(--c-surface));
  border-bottom: 1px solid var(--c-border);
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
  flex-shrink: 0;
  max-height: 40vh;
  overflow-y: auto;
}
.da-refine-modal__context:empty { display: none; }
.da-refine-modal__ctx-title {
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  font-size: var(--fs-sm);
  margin-bottom: 4px;
}
.da-refine-modal__ctx-meta {
  font-size: var(--fs-sm);
  color: var(--c-text);
  font-weight: var(--fw-semibold);
  letter-spacing: .01em;
  margin-bottom: 10px;
}
.da-refine-modal__ctx-hint {
  margin-top: 10px;
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  font-style: italic;
}
.da-refine-modal__plan-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.da-refine-modal__plan-item {
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  padding: 8px 10px;
}
.da-refine-modal__plan-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 2px;
}
.da-refine-modal__plan-no {
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  font-weight: var(--fw-semibold);
  letter-spacing: .04em;
}
.da-refine-modal__plan-score {
  margin-left: auto;
  font-size: var(--fs-xs);
  color: var(--c-accent);
  font-weight: var(--fw-semibold);
  font-variant-numeric: tabular-nums;
}
.da-refine-modal__plan-title {
  font-size: var(--fs-sm);
  color: var(--c-text);
  line-height: 1.45;
  word-break: break-word;
}
.da-refine-modal__chip {
  font-size: 11px;
  padding: 1px 6px;
  border-radius: var(--r-pill);
  font-weight: var(--fw-semibold);
}
.da-refine-modal__chip--rec {
  background: color-mix(in srgb, var(--c-accent) 14%, transparent);
  color: var(--c-accent);
}
.da-refine-modal__chip--bak {
  background: color-mix(in srgb, var(--c-cyan) 16%, transparent);
  color: var(--c-cyan);
}
.da-detail__refine.is-modal .da-detail__refine-history {
  flex: 1 1 auto;
  overflow-y: auto;
  padding: 14px 20px;
  margin: 0;
  min-height: 120px;
}
.da-detail__refine.is-modal .da-detail__refine-input {
  border-top: 1px solid var(--c-border);
  padding: 12px 20px;
  background: var(--c-surface);
  display: flex;
  align-items: flex-end;
  gap: 10px;
  flex-shrink: 0;
}
.da-detail__refine.is-modal .da-detail__refine-input textarea {
  flex: 1;
  resize: vertical;
  min-height: 40px;
  max-height: 120px;
  padding: 10px 12px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  font-family: inherit;
  font-size: var(--fs-sm);
  line-height: 1.5;
  color: var(--c-text);
  background: var(--c-surface);
  outline: none;
  transition: border-color var(--t-fast) var(--ease);
}
.da-detail__refine.is-modal .da-detail__refine-input textarea:focus {
  border-color: var(--c-accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--c-accent) 18%, transparent);
}
.da-detail__refine.is-modal .da-detail__refine-input .btn {
  flex-shrink: 0;
}
/* 触发按钮（detail 内的"追问方案"）样式 */
.da-detail__refine-trigger {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: var(--r-sm);
  background: color-mix(in srgb, var(--c-accent) 8%, transparent);
  border: 1px solid color-mix(in srgb, var(--c-accent) 28%, transparent);
  color: var(--c-accent);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  cursor: pointer;
  transition: background var(--t-fast) var(--ease);
}
.da-detail__refine-trigger:hover {
  background: color-mix(in srgb, var(--c-accent) 14%, transparent);
}

/* ----- #6 浮动 FAB（2026-05-24-M）-----
 * 取代原 header 内的小按钮，固定在 designAroundView 右下角；
 * 圆形大按钮 + 上方提示气泡，强引导但不抢占主区。disabled 时收成灰色 + 隐藏气泡。 */
#designAroundView .da-fab {
  position: fixed;
  right: 28px;
  bottom: 28px;
  z-index: 25;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 22px 14px 18px;
  border: none;
  border-radius: var(--r-pill);
  background: linear-gradient(135deg, #2f9bbf 0%, var(--c-violet) 50%, #3a9bb8 100%);
  color: #fff;
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  cursor: pointer;
  box-shadow:
    0 12px 28px -10px rgba(47, 155, 191, .55),
    0 6px 14px -6px rgba(63, 143, 171, .35);
  transition: transform var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);
  animation: fx-fab-pulse 2.4s var(--ease) infinite;
}
#designAroundView .da-fab:hover:not([disabled]) {
  transform: translateY(-2px);
  box-shadow:
    0 18px 36px -12px rgba(47, 155, 191, .65),
    0 8px 18px -8px rgba(63, 143, 171, .45);
}
#designAroundView .da-fab[disabled] {
  background: color-mix(in srgb, var(--c-text) 22%, var(--c-surface));
  color: var(--c-text-muted);
  box-shadow: none;
  cursor: not-allowed;
  animation: none;
}
.da-fab__icon {
  font-size: 22px;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.da-fab__icon svg { width: 22px; height: 22px; display: block; }
.da-fab__label {
  letter-spacing: .02em;
}
.da-fab__hint {
  position: absolute;
  bottom: calc(100% + 12px);
  right: 0;
  background: var(--c-surface);
  color: var(--c-text);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  padding: 8px 14px;
  border-radius: var(--r-md);
  border: 1px solid var(--c-border);
  box-shadow: 0 8px 20px -8px rgba(31, 34, 38, .25);
  white-space: nowrap;
  opacity: 0;
  transform: translateY(4px);
  transition: opacity var(--t-base) var(--ease), transform var(--t-base) var(--ease);
  pointer-events: none;
}
.da-fab__hint::after {
  content: '';
  position: absolute;
  top: 100%;
  right: 28px;
  border: 6px solid transparent;
  border-top-color: var(--c-surface);
  filter: drop-shadow(0 1px 0 var(--c-border));
}
#designAroundView .da-fab:not([disabled]) .da-fab__hint {
  opacity: 1;
  transform: translateY(0);
}
#designAroundView .da-fab[disabled] .da-fab__hint { display: none; }
@keyframes fx-fab-pulse {
  0%, 100% { box-shadow: 0 12px 28px -10px rgba(47, 155, 191, .55), 0 6px 14px -6px rgba(63, 143, 171, .35), 0 0 0 0 rgba(47, 155, 191, .35); }
  50%      { box-shadow: 0 12px 28px -10px rgba(47, 155, 191, .55), 0 6px 14px -6px rgba(63, 143, 171, .35), 0 0 0 12px rgba(47, 155, 191, 0); }
}
@media (prefers-reduced-motion: reduce) {
  #designAroundView .da-fab { animation: none; }
}
/* modal 打开时屏幕暗化遮罩 */
.da-refine-drawer-mask {
  position: fixed;
  inset: 0;
  background: rgba(31, 34, 38, .42);
  opacity: 0;
  pointer-events: none;
  z-index: 69;
  transition: opacity var(--t-base) var(--ease);
}
.da-refine-drawer-mask.is-open {
  opacity: 1;
  pointer-events: auto;
}

/* ========== 规避验证 (Post-Avoidance Verification) ========== */
.da-verify-section {
  margin-top: 1.5rem;
  padding: 1rem 1.25rem;
  border-top: 1px solid var(--c-border, #e5e7eb);
  background: var(--c-bg-subtle, #f9fafb);
  border-radius: 0 0 8px 8px;
}
.da-verify-section__title {
  margin: 0 0 .35rem;
  font-size: .9rem;
  font-weight: 600;
  color: var(--c-text, #374151);
}
.da-verify-section__desc {
  margin: 0 0 .75rem;
  font-size: .8rem;
  color: var(--c-text-muted, #6b7280);
}
.da-verify-section__btns {
  display: flex;
  gap: .5rem;
  flex-wrap: wrap;
}

/* Verify Modal */
.da-verify-modal {
  position: fixed;
  inset: 0;
  z-index: 80;
  display: flex;
  align-items: center;
  justify-content: center;
}
.da-verify-modal.hidden { display: none; }
.da-verify-modal__overlay {
  position: absolute;
  inset: 0;
  background: rgba(31, 34, 38, .45);
}
.da-verify-modal__dialog {
  position: relative;
  width: min(92vw, 680px);
  max-height: 85vh;
  overflow-y: auto;
  background: #fff;
  border-radius: 10px;
  box-shadow: 0 8px 32px rgba(0,0,0,.18);
  display: flex;
  flex-direction: column;
}
.da-verify-modal__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: .9rem 1.25rem;
  border-bottom: 1px solid var(--c-border, #e5e7eb);
}
.da-verify-modal__header h4 { margin: 0; font-size: 1rem; }
.da-verify-modal__close {
  background: none;
  border: none;
  font-size: 1.3rem;
  cursor: pointer;
  color: var(--c-text-muted, #6b7280);
  line-height: 1;
}
.da-verify-modal__body {
  padding: 1.25rem;
  flex: 1;
  overflow-y: auto;
}
.da-verify-modal__loading {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: 2rem 0;
  justify-content: center;
  color: var(--c-text-muted, #6b7280);
}
.da-verify-modal__content { display: flex; flex-direction: column; gap: 1rem; }
.da-verify-modal__original summary {
  cursor: pointer;
  font-size: .82rem;
  color: var(--c-text-muted, #6b7280);
}
.da-verify-modal__pre {
  font-size: .78rem;
  white-space: pre-wrap;
  word-break: break-word;
  background: var(--c-bg-subtle, #f3f4f6);
  padding: .75rem;
  border-radius: 6px;
  max-height: 180px;
  overflow-y: auto;
  margin-top: .4rem;
}
.da-verify-modal__points summary {
  cursor: pointer;
  font-size: .82rem;
  color: var(--c-text-muted, #6b7280);
}
.da-verify-modal__points-list {
  font-size: .8rem;
  margin: .4rem 0 0 1.2rem;
  padding: 0;
}
.da-verify-modal__points-list li { margin-bottom: .25rem; }
.da-verify-modal__label {
  font-size: .85rem;
  font-weight: 500;
  color: var(--c-text, #374151);
}
.da-verify-modal__textarea {
  width: 100%;
  min-height: 160px;
  padding: .65rem .75rem;
  border: 1px solid var(--c-border, #d1d5db);
  border-radius: 6px;
  font-size: .85rem;
  line-height: 1.5;
  resize: vertical;
  font-family: inherit;
}
.da-verify-modal__textarea:focus {
  outline: none;
  border-color: var(--c-accent, #2f9bbf);
  box-shadow: 0 0 0 2px rgba(47, 155, 191, .12);
}
.da-verify-modal__actions {
  display: flex;
  gap: .5rem;
  justify-content: flex-end;
  padding-top: .5rem;
}


/* =====================================================================
 * 2026-05-25: analyst 工作台 — hub 顶部"我的任务"区
 *   - 进行中 / 最近完成的任务行内联展示
 *   - 任务行支持 inline 重命名（✏️ 按钮）
 *   - 仅 analyst 可见；engineer 走 [data-role-required="analyst"] 自动隐藏
 * ===================================================================== */

/* ============================================================================
 * analyst 工作台 — Linear 风格统一（2026-05-26）
 *
 * 设计原则：
 *  - 工作台("我的任务")和下方"发起新工作"必须用同一种视觉语言：
 *    平铺白面、统一边框、统一圆角、统一 section header
 *  - 信息密度高：任务行 44px(原 ~60px)，模块卡 padding 20px(原 32px)
 *  - 去装饰：无渐变背景、无彩色 box-shadow、emoji 不带光晕盒
 *  - 状态统一用 token 软色，禁硬编码 hex
 * ========================================================================== */
/* 2026-06-15: uppercase + 宽字距是拉丁文排版语汇，中文（无大小写）被 letter-spacing
   拉宽反而松散别扭。仅对英文界面应用 eyebrow 样式。 */

/* 状态：去掉胶囊背景，改成"圆点+小字"，更安静更密 */
@keyframes hub-task-pulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: .35; }
}

/* tag：统一软色背景，token 化（禁 hex） */

/* "打开"按钮：从 primary 实色按钮降级为 ghost 链接，让任务行更安静 */

/* "发起新工作"小标题：和 worktasks header 用同一规格，建立一致性 */
.hub-newwork {
  margin: 0 0 var(--sp-3);
  padding: 0 var(--sp-1);
}
.hub-newwork__title {
  margin: 0;
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  color: var(--c-text-muted);
}
/* 2026-06-15: eyebrow 大写+宽字距仅限英文，中文不吃（见 .hub-worktasks__title 同注） */
:lang(en) .hub-newwork__title {
  letter-spacing: var(--ls-wider);
  text-transform: uppercase;
}



/* ===================== 管理员页（2026-05-31 / 2026-06-23 视觉对齐全站）===================== */
/* 2026-07-02: admin_page 在 body 直接子级（.app-shell 外），plain 态隐藏 .app-shell 后
   admin_page 独占视口，需自带布局约束 */
#admin_page {
  max-width: 960px;
  margin: var(--sp-6) auto;
  padding: var(--sp-6);
}
.admin-top-bar {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  margin-bottom: var(--sp-5);
}
.admin-badge {
  font-size: var(--fs-xs);
  font-weight: 600;
  color: var(--c-accent);
  background: var(--c-accent-soft);
  padding: 3px 10px;
  border-radius: var(--r-pill);
}
.admin-tabs {
  display: flex;
  gap: 2px;
  padding: 3px;
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-pill);
  margin-bottom: var(--sp-5);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.admin-tab {
  padding: 7px 14px;
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  background: none;
  border: none;
  border-radius: var(--r-pill);
  cursor: pointer;
  white-space: nowrap;
  transition: color var(--t-base) var(--ease),
              background var(--t-base) var(--ease);
}
.admin-tab:hover { color: var(--c-text); background: var(--c-surface); }
.admin-tab.is-active {
  color: var(--c-accent-contrast);
  background: var(--c-accent);
  font-weight: var(--fw-medium);
}
.admin-content { min-height: 200px; }
.admin-loading,
.admin-empty {
  text-align: center;
  color: var(--c-text-faint);
  padding: var(--sp-8) var(--sp-3);
  font-size: var(--fs-base);
}
.admin-empty--err { color: var(--c-danger); }
.admin-section { margin-bottom: var(--sp-8); }
.admin-section__title {
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  margin: 0 0 var(--sp-3);
}
.admin-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm);
}
.admin-table th {
  text-align: left;
  color: var(--c-text-muted);
  font-weight: var(--fw-medium);
  padding: 10px 12px;
  border-bottom: 1px solid var(--c-border);
}
.admin-table td {
  padding: 10px 12px;
  border-bottom: 1px solid var(--c-divider);
  color: var(--c-text);
  vertical-align: middle;
}
.admin-table tbody tr {
  transition: background var(--t-fast) var(--ease);
}
.admin-table tbody tr:hover {
  background: var(--c-surface-2);
}
.admin-mono {
  font-family: var(--font-mono, ui-monospace, monospace);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
}
.admin-tag {
  font-size: 11px;
  padding: 2px 8px;
  border-radius: var(--r-pill);
  background: var(--c-divider);
  color: var(--c-text-muted);
}
.admin-tag--used { background: var(--c-success-soft); color: var(--c-success); }
.admin-invite-add {
  display: flex;
  gap: var(--sp-2);
  margin-bottom: var(--sp-4);
}
.admin-input {
  padding: 8px 12px;
  font-size: var(--fs-sm);
  border: 1px solid var(--c-border-strong);
  border-radius: 7px;
  outline: none;
  transition: border-color var(--t-base) var(--ease),
              box-shadow var(--t-base) var(--ease);
}
.admin-input:focus {
  border-color: var(--c-accent);
  box-shadow: var(--shadow-focus);
}
.admin-input--num { width: 120px; }
.admin-input--full { width: 100%; box-sizing: border-box; }
.admin-warn {
  background: var(--c-danger-soft);
  border-left: 3px solid var(--c-danger);
  color: var(--c-danger);
  padding: 10px 14px;
  border-radius: 7px;
  font-size: var(--fs-sm);
  line-height: 1.6;
  margin-bottom: var(--sp-5);
}
.admin-note {
  background: var(--c-accent-soft);
  border-left: 3px solid var(--c-accent);
  color: var(--c-accent);
  padding: 8px 12px;
  border-radius: var(--r-sm);
  font-size: var(--fs-xs);
  line-height: 1.6;
  margin-bottom: var(--sp-4);
}
/* 2026-08-10（PLAN_BILLING.md B6）：费用中心余额卡。 */
.billing-balance-card {
  background: var(--c-surface-alt, #f7f8f9);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  padding: var(--sp-4);
  margin-bottom: var(--sp-6);
}
.billing-balance-card__row { display: flex; gap: var(--sp-8); }
.billing-balance-card__item { display: flex; flex-direction: column; gap: 4px; }
.billing-balance-card__label { font-size: var(--fs-xs); color: var(--c-text-muted); }
.billing-balance-card__value { font-size: 22px; font-weight: 600; color: var(--c-accent); }
.billing-balance-card__hint { font-size: var(--fs-xs); margin-top: var(--sp-3); margin-bottom: 0; line-height: 1.6; }
.billing-recharge-hint { font-size: var(--fs-xs); color: var(--c-text-muted); margin-top: var(--sp-4); }

/* 判定回流概览数字卡 */
.admin-stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--sp-3);
  margin-bottom: var(--sp-6);
}
@media (max-width: 640px) {
  .admin-stats { grid-template-columns: repeat(2, 1fr); }
}
.admin-stat {
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  padding: var(--sp-4);
  text-align: center;
  transition: transform var(--t-base) var(--ease),
              box-shadow var(--t-base) var(--ease);
}
.admin-stat:hover {
  transform: translateY(-1px);
  box-shadow: var(--shadow-2);
}
.admin-stat__num { font-size: 22px; font-weight: var(--fw-bold); color: var(--c-text); }
.admin-stat__label { font-size: var(--fs-xs); color: var(--c-text-muted); margin-top: var(--sp-1); }
/* 边界校准台（2026-06-06）：工具栏 / 分组说明 / 标注弹窗 */
.admin-note--sub {
  background: var(--c-surface-2);
  border-left-color: var(--c-text-faint);
  color: var(--c-text-muted);
  margin-bottom: 10px;
}
.admin-toolbar {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  margin-bottom: var(--sp-5);
  flex-wrap: wrap;
}
.admin-toolbar__spacer { flex: 1 1 auto; }
.admin-calib__count { font-size: var(--fs-sm); color: var(--c-text-faint); font-weight: 400; }
.admin-calib__note { font-size: 11px; color: var(--c-text-muted); margin-top: 3px; max-width: 280px; }
.admin-calib__pending { font-size: var(--fs-xs); color: color-mix(in srgb, var(--c-warning) 65%, #000); }
.admin-calib__ctx {
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  padding: 10px 12px;
  margin-bottom: var(--sp-3);
}
.admin-calib__ctxsub { font-size: var(--fs-xs); color: var(--c-text-muted); margin-top: var(--sp-1); }
.admin-calib__radios {
  display: flex;
  gap: var(--sp-4);
  flex-wrap: wrap;
  margin-bottom: var(--sp-3);
}
.admin-calib__radio {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--fs-sm);
  cursor: pointer;
}
.admin-setting {
  padding: var(--sp-4) 0;
  border-bottom: 1px solid var(--c-divider);
}
.admin-setting__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
}
.admin-setting__key {
  font-family: var(--font-mono, ui-monospace, monospace);
  font-size: 12px;
  color: var(--c-accent);
  background: var(--c-accent-soft);
  padding: 2px 6px;
  border-radius: 5px;
}
.admin-setting__desc {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  margin: var(--sp-1) 0 var(--sp-2);
  line-height: 1.5;
}
.admin-control-inline {
  display: flex;
  align-items: center;
  gap: 10px;
}
.admin-range {
  font-size: 11px;
  color: var(--c-text-faint);
  font-family: var(--font-mono, ui-monospace, monospace);
}
.admin-default { font-size: var(--fs-xs); color: var(--c-text-faint); }
.admin-overridden { font-size: var(--fs-xs); color: color-mix(in srgb, var(--c-warning) 78%, #000); }
.admin-overridden a { color: var(--c-accent); cursor: pointer; text-decoration: underline; }
.admin-health { font-size: var(--fs-sm); font-weight: var(--fw-medium); }
.admin-health--ok { color: var(--c-success); }
.admin-health--no { color: var(--c-text-faint); }
.admin-switch {
  position: relative;
  display: inline-block;
  width: 40px;
  height: 22px;
  cursor: pointer;
}
.admin-switch input { opacity: 0; width: 0; height: 0; }
.admin-switch__slider {
  position: absolute;
  inset: 0;
  background: var(--c-border-strong);
  border-radius: var(--r-pill);
  transition: background var(--t-base) var(--ease);
}
.admin-switch__slider::before {
  content: '';
  position: absolute;
  height: 16px;
  width: 16px;
  left: 3px;
  top: 3px;
  background: var(--c-surface);
  border-radius: 50%;
  transition: transform var(--t-base) var(--ease);
}
.admin-switch input:checked + .admin-switch__slider { background: var(--c-accent); }
.admin-switch input:checked + .admin-switch__slider::before { transform: translateX(18px); }

/* ===== admin 配置档案 + 参数重要性（2026-05-31）===== */
/* impact badge：高=红 / 中=橙 / 低=灰，只表达影响面 */
.admin-impact {
  font-size: 11px;
  font-weight: var(--fw-semibold);
  padding: 1px 7px;
  border-radius: var(--r-pill);
  margin-left: var(--sp-2);
  vertical-align: middle;
  letter-spacing: .2px;
}
.admin-impact--high { background: var(--c-danger-soft); color: var(--c-danger); }
.admin-impact--medium { background: var(--c-risk-suspect-soft); color: color-mix(in srgb, var(--c-risk-suspect) 70%, #000); }
.admin-impact--low { background: var(--c-divider); color: var(--c-text-muted); }

/* 参数行：可读 label 作主标识，原始 key 降为次要 mono 小字 */
.admin-setting__label {
  font-size: var(--fs-base);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  display: inline-flex;
  align-items: center;
}
.admin-setting__key {
  display: inline-block;
  margin: 5px 0 0;
  font-family: var(--font-mono, ui-monospace, monospace);
  font-size: 11px;
  color: var(--c-text-faint);
  background: var(--c-surface-2);
  padding: 1px 6px;
  border-radius: 5px;
}

/* section 标题行：标题 + 右侧操作按钮 */
.admin-section__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  margin-bottom: var(--sp-3);
  flex-wrap: wrap;
}
.admin-section__bar .admin-section__title { margin: 0; }

/* 内置预设三卡片 */
.admin-profile-cards {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--sp-4);
}
@media (max-width: 720px) {
  .admin-profile-cards { grid-template-columns: 1fr; }
}
.admin-profile-card {
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  padding: var(--sp-4);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  background: var(--c-surface);
  transition: transform var(--t-base) var(--ease-spring),
              box-shadow var(--t-base) var(--ease),
              border-color var(--t-base) var(--ease);
}
.admin-profile-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-2);
  border-color: color-mix(in srgb, var(--c-accent) 25%, transparent);
}
.admin-profile-card__name { font-size: var(--fs-md); font-weight: var(--fw-semibold); color: var(--c-text); }
.admin-profile-card__desc { font-size: var(--fs-xs); color: var(--c-text-muted); line-height: 1.5; flex: 1; }
.admin-profile-card__actions { display: flex; gap: var(--sp-2); margin-top: var(--sp-1); }
/* 内置卡「对比」按钮选中态（用户/备份行用 checkbox，原生体现选中；内置卡用 button） */
.admin-profile-card__actions .btn.is-active {
  background: var(--c-accent);
  border-color: var(--c-accent);
  color: var(--c-surface);
}

/* 档案表格行操作区 */
.admin-profile-table td { vertical-align: middle; }
.admin-profile-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.admin-cmp-box { cursor: pointer; }

/* 自动备份折叠区 */
.admin-profile-auto {
  margin-top: var(--sp-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  padding: 0 var(--sp-4);
  background: var(--c-surface-2);
}
.admin-profile-auto > summary {
  cursor: pointer;
  padding: var(--sp-3) 0;
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  font-weight: var(--fw-medium);
  user-select: none;
}
.admin-profile-auto[open] > summary { border-bottom: 1px solid var(--c-border); margin-bottom: var(--sp-2); }

/* 差异表（套用预览 + 并排对比共用） */
.admin-diff th { color: var(--c-text-muted); }
.admin-diff__to { color: var(--c-accent); font-weight: var(--fw-semibold); }
.admin-compare { margin-top: var(--sp-5); }

/* 通用确认弹窗（复用 .modal-overlay 居中遮罩） */
.admin-modal {
  background: var(--c-surface);
  border-radius: var(--r-lg);
  max-width: 560px;
  width: 100%;
  max-height: 85vh;
  overflow-y: auto;
  box-shadow: 0 20px 60px rgba(31, 34, 38, .20);
}
.admin-modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--sp-5) var(--sp-6);
  border-bottom: 1px solid var(--c-divider);
}
.admin-modal__head h3 { margin: 0; font-size: var(--fs-lg); color: var(--c-text); }
.admin-modal__body { padding: var(--sp-5) var(--sp-6); }
.admin-modal__lead { font-size: var(--fs-base); color: var(--c-text-muted); line-height: 1.6; margin: 0 0 var(--sp-4); }
.admin-modal__foot {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  padding: var(--sp-4) var(--sp-6);
  border-top: 1px solid var(--c-divider);
}

/* ===== tab 用途说明条（每个 admin tab 顶部一句话）===== */
.admin-tab-intro {
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-left: 3px solid var(--c-accent);
  color: var(--c-text-muted);
  padding: 10px 14px;
  border-radius: var(--r-md);
  font-size: var(--fs-xs);
  line-height: 1.65;
  margin-bottom: var(--sp-5);
}

/* ===== 模型配置 tab：provider key 状态徽章 ===== */
.admin-keybadges {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin-bottom: 6px;
}
.admin-keybadge {
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  padding: 4px 10px;
  border-radius: var(--r-pill);
  border: 1px solid transparent;
}
.admin-keybadge.admin-health--ok { color: var(--c-success); background: var(--c-success-soft); border-color: color-mix(in srgb, var(--c-success) 35%, transparent); }
.admin-keybadge.admin-health--no { color: color-mix(in srgb, var(--c-warning) 65%, #000); background: var(--c-warning-soft); border-color: color-mix(in srgb, var(--c-warning) 35%, transparent); }
.admin-keybadges__hint { font-size: 11px; color: var(--c-text-faint); margin-top: 2px; }

/* ===== 模型配置 tab：角色组卡片 ===== */
.admin-model-card {
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  padding: var(--sp-4) var(--sp-5);
  margin-bottom: var(--sp-4);
  box-shadow: var(--shadow-1);
  transition: transform var(--t-base) var(--ease-spring),
              box-shadow var(--t-base) var(--ease),
              border-color var(--t-base) var(--ease);
}
.admin-model-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-2);
  border-color: color-mix(in srgb, var(--c-accent) 25%, transparent);
}
.admin-model-card__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.admin-model-card__name { font-size: var(--fs-md); font-weight: var(--fw-semibold); color: var(--c-text); }
.admin-model-card__scope { font-size: var(--fs-xs); color: var(--c-text-muted); line-height: 1.55; margin: 6px 0 4px; }
.admin-model-card__advice { font-size: var(--fs-xs); color: var(--c-accent); line-height: 1.55; margin-bottom: var(--sp-3); }
.admin-model-card__selects {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-4);
}
@media (max-width: 640px) {
  .admin-model-card__selects { grid-template-columns: 1fr; }
}
.admin-model-field {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.admin-model-field__label { font-size: var(--fs-xs); font-weight: var(--fw-medium); color: var(--c-text-muted); }
.admin-model-field select.admin-input { width: 100%; }
.admin-model-default { font-size: 11px; color: var(--c-text-faint); }
.admin-model-reset { font-size: 11px; color: var(--c-accent); cursor: pointer; text-decoration: underline; }
.admin-model-card__warn {
  margin-top: var(--sp-3);
  background: var(--c-warning-soft);
  border: 1px solid color-mix(in srgb, var(--c-warning) 35%, transparent);
  color: color-mix(in srgb, var(--c-warning) 65%, #000);
  padding: 8px 12px;
  border-radius: var(--r-md);
  font-size: var(--fs-xs);
  line-height: 1.55;
}
/* design_around 卡片的温度区 */
.admin-model-card__temps {
  margin-top: var(--sp-4);
  padding-top: var(--sp-3);
  border-top: 1px dashed var(--c-border);
}
.admin-model-card__temps-title { font-size: var(--fs-xs); font-weight: var(--fw-medium); color: var(--c-text-muted); margin-bottom: var(--sp-2); }
.admin-temp-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 5px 0;
}
.admin-temp-row__label { font-size: var(--fs-xs); color: var(--c-text-muted); min-width: 120px; }
.admin-temp-slider { flex: 1; accent-color: var(--c-accent); }
.admin-temp-row__val {
  font-family: var(--font-mono, ui-monospace, monospace);
  font-size: var(--fs-xs);
  color: var(--c-text);
  min-width: 36px;
  text-align: right;
}
/* 模型卡片的深度思考开关 */
.admin-model-card__thinking {
  margin-top: var(--sp-3);
  padding-top: var(--sp-3);
  border-top: 1px dashed var(--c-border);
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.admin-thinking-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
}
.admin-thinking-toggle input { accent-color: var(--c-accent); cursor: pointer; }
.admin-thinking-toggle__label { font-size: var(--fs-xs); font-weight: var(--fw-medium); color: var(--c-text); }
.admin-thinking-toggle__hint { font-size: 11px; color: var(--c-text-muted); }
.admin-model-card__thinking.is-noop .admin-thinking-toggle__hint { color: var(--c-warning); }
.admin-model-card__thinking.is-noop .admin-thinking-toggle__label { color: var(--c-text-faint); }


/* ===== Admin: reduced motion + mobile responsive + settings group (2026-06-23) ===== */
.admin-settings-group {
  margin-bottom: var(--sp-4);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  background: var(--c-surface);
}
.admin-settings-group > summary {
  cursor: pointer;
  padding: var(--sp-3) var(--sp-4);
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
  user-select: none;
  list-style: none;
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}
.admin-settings-group > summary::-webkit-details-marker { display: none; }
.admin-settings-group > summary::before {
  content: '›';
  display: inline-block;
  font-size: 16px;
  color: var(--c-text-muted);
  transition: transform var(--t-base) var(--ease);
}
.admin-settings-group[open] > summary::before { transform: rotate(90deg); }
.admin-settings-group[open] > summary { border-bottom: 1px solid var(--c-divider); }
.admin-settings-group__body { padding: var(--sp-2) var(--sp-4) var(--sp-4); }

@media (prefers-reduced-motion: reduce) {
  .admin-model-card,
  .admin-profile-card,
  .admin-stat,
  .admin-tab { transition: none; }
  .admin-model-card:hover,
  .admin-profile-card:hover,
  .admin-stat:hover { transform: none; }
}
@media (max-width: 640px) {
  .admin-table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .admin-tabs { gap: 1px; padding: 2px; }
  .admin-tab { padding: 6px 10px; font-size: var(--fs-xs); }
  .admin-modal { max-width: calc(100vw - 32px); max-height: 80vh; }
}


/* ============ FTO 报告生成进度卡（#ftoReportStatus 内部） ============ */
/* 脱敏阶段文案 + 不确定态/确定态进度条 + 关闭提示。永不显示 raw status。 */
.fto-prog__label {
  font-size: 14px;
  font-weight: 600;
  color: var(--c-text);
  margin-bottom: 10px;
}
.fto-prog__bar {
  position: relative;
  height: 6px;
  border-radius: 999px;
  background: var(--c-border);
  overflow: hidden;
}
.fto-prog__fill {
  position: absolute;
  inset: 0 auto 0 0;
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--c-accent), var(--c-cyan));
  transition: width .4s ease;
}
/* 不确定态：左右滑动的滑块（无真实百分比时用） */
.fto-prog__fill--indet {
  width: 40%;
  inset: 0 auto 0 0;
  animation: fto-prog-indet 1.4s ease-in-out infinite;
}
@keyframes fto-prog-indet {
  0%   { left: -40%; }
  100% { left: 100%; }
}
.fto-prog__hint {
  margin-top: 10px;
  font-size: 12px;
  color: var(--c-text-muted);
  line-height: 1.5;
}
/* 比对阶段副提示行（已用时 / 首件安抚），比主 hint 更贴近进度条 */
.fto-prog__sub {
  margin-top: 6px;
  font-size: 12px;
  color: #3eaecf;
  line-height: 1.4;
}
.fto-prog__links {
  margin-top: 4px;
  font-size: 14px;
}
.fto-prog__links a {
  color: var(--c-accent);
  text-decoration: none;
  font-weight: 600;
}
.fto-prog__links a:hover { text-decoration: underline; }

/* FTO 报告对话框：生成期表单区淡出收起，置顶进度卡占据视图（无需下拉即见进度）。
   用 max-height + opacity 过渡而非 display:none，保留淡入淡出动画。 */
#ftoFormBody {
  max-height: 4000px;
  opacity: 1;
  overflow: hidden;
  transition: max-height .45s ease, opacity .3s ease, margin .3s ease;
}
#ftoFormBody.fto-form--collapsed {
  max-height: 0;
  opacity: 0;
  margin: 0;
  pointer-events: none;
}

/* ============================================================================
 * 2026-06-12: FTO 报告 / 规避配置 弹窗与表单 token 化
 *   收编 index.html 里手写 overlay + fieldset/input 的大量 inline。
 * ==========================================================================*/
/* 通用模态卡（配 .modal-overlay 居中遮罩使用）*/
.modal-card {
  background: var(--c-surface);
  max-height: 90vh;
  overflow: auto;
  border-radius: var(--r-lg);
  padding: var(--sp-6);
  box-shadow: var(--shadow-3, 0 10px 40px rgba(31, 34, 38, .3));
}
.modal-card--640 { width: min(640px, 92vw); }
.modal-card--720 { width: min(720px, 92vw); }
.modal-card__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--sp-4);
}
.modal-card__head h3 { margin: 0; }

/* FTO 报告入口模式弹窗 */

/* FTO 报告表单作用域：一次性接管 fieldset/legend/input/textarea/select */
.fto-form__intro {
  margin: 0 0 14px 0;
  color: var(--c-text-muted);
  font-size: 12.5px;
  line-height: var(--lh-loose);
  padding: 10px 12px;
  background: var(--c-surface-2);
  border-left: 3px solid var(--c-accent);
  border-radius: var(--r-sm);
}
.fto-form__status { margin-bottom: 14px; padding: 14px; background: var(--c-surface-2); border-radius: var(--r-md); }
/* 报告固定费透明提示（PLAN_BILLING_V2.md B1-4） */
.fto-form__fee-notice {
  margin: 0 0 14px 0;
  color: var(--c-text-muted);
  font-size: 12.5px;
  line-height: var(--lh-loose);
  padding: 8px 12px;
  background: var(--c-surface-2);
  border-radius: var(--r-sm);
}
.fto-form fieldset {
  border: 1px solid var(--c-border);
  padding: 12px;
  border-radius: var(--r-md);
  margin-bottom: 12px;
}
.fto-form legend { padding: 0 6px; }
.fto-form input[type="text"],
.fto-form input[type="date"],
.fto-form textarea,
.fto-form select {
  width: 100%;
  padding: 6px;
}
.fto-form__grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.fto-form__grid2--mb { margin-bottom: 10px; }
.fto-form__span2 { grid-column: span 2; }
.fto-form__block { display: block; margin-top: var(--sp-2); }
.fto-form__checkrow { display: flex; gap: 12px; margin-top: 4px; flex-wrap: wrap; }
.fto-form__details {
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  margin-bottom: 12px;
  padding: 0 12px;
}
.fto-form__summary {
  padding: 10px 0;
  cursor: pointer;
  color: var(--c-text-secondary, #334155);
  font-weight: var(--fw-semibold);
  user-select: none;
}
.fto-form__details-body { padding: 0 0 12px 0; }
.fto-form__actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  margin-top: var(--sp-4);
}

/* 规避配置弹窗：专利清单 + 权重网格 */
.da-cfg-patentlist { max-height: 240px; overflow-y: auto; font-size: var(--fs-sm); }
.da-cfg-weight-hint { margin: 0 0 12px 0; color: var(--c-text-muted); font-size: var(--fs-xs); }
.da-cfg-weight-grid {
  display: grid;
  grid-template-columns: auto 1fr 60px;
  gap: 12px 14px;
  align-items: center;
}
.da-cfg-weight-val { text-align: right; font-weight: var(--fw-semibold); color: var(--c-text); }
.da-cfg-weight-preview {
  margin-top: 10px;
  padding: 8px 10px;
  background: var(--c-surface-2);
  border-radius: var(--r-sm);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
}

/* ---- QB 检索式生成器：策略提示 / 下一步 / 历史 / IPC 标签 ---- */
.qb-strategy-hint {
  margin-top: 6px;
  padding: 8px 10px;
  background: var(--c-surface-2);
  border-left: 3px solid var(--c-text-faint);
  border-radius: var(--r-xs);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-loose);
}
.qb-strategy-hint__field { color: var(--c-text-muted); }
.qb-nextsteps {
  margin-top: var(--sp-4);
  padding: 14px 16px;
  background: var(--c-success-soft);
  border: 1px solid color-mix(in srgb, var(--c-success) 30%, transparent);
  border-radius: var(--r-md);
}
.qb-nextsteps__title {
  margin: 0 0 var(--sp-2);
  font-size: var(--fs-md);
  color: color-mix(in srgb, var(--c-success) 70%, var(--c-text));
}
.qb-nextsteps__list {
  margin: 0;
  padding-left: 20px;
  font-size: var(--fs-sm);
  color: color-mix(in srgb, var(--c-success) 60%, var(--c-text));
  line-height: 1.8;
}
.qb-history { margin-top: 12px; }
.qb-history__summary {
  cursor: pointer;
  color: var(--c-accent);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
}
.qb-history__list {
  margin-top: var(--sp-2);
  max-height: 200px;
  overflow-y: auto;
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  padding: var(--sp-2);
}
.qb-history__item {
  padding: 6px var(--sp-2);
  border-bottom: 1px solid var(--c-divider);
  font-size: var(--fs-xs);
  cursor: pointer;
}
.qb-history__ts { color: var(--c-text-muted); }
.qb-history__desc { margin-left: var(--sp-2); color: var(--c-text); }
.qb-history__dialect { margin-left: var(--sp-2); color: var(--c-text-faint); }
.qb-ipc-empty { color: var(--c-text-faint); font-size: var(--fs-xs); }
.qb-ipc-tag {
  padding: 3px var(--sp-2);
  font-size: var(--fs-xs);
  font-family: var(--font-mono, monospace);
  background: var(--c-surface-3, var(--c-surface-2));
  border: 1px solid var(--c-border);
  border-radius: var(--r-xs);
  cursor: pointer;
  display: inline-block;
}
.qb-ipc-tag--picked {
  background: color-mix(in srgb, var(--c-cyan, #2682a3) 14%, transparent);
  border-color: color-mix(in srgb, var(--c-cyan, #2682a3) 50%, transparent);
}
.qb-ipc-tag--active {
  background: var(--c-success-soft);
  border-color: color-mix(in srgb, var(--c-success) 45%, transparent);
  cursor: default;
}
.qb-ipc-tag__remove {
  margin-left: 4px;
  background: none;
  border: none;
  color: var(--c-danger);
  cursor: pointer;
  font-weight: bold;
}

/* ============================================================
   §sidebar — 左侧目录导航 Hub（2026-07-02 首页重塑）
   Hub–Wizard 双态：侧栏只在 hub 态可见；进入多步向导(wizard)/独立页(plain)
   CSS 隐藏侧栏、操作区占满。视觉守 UI 基调：纯白底 + 多级中性灰，青蓝仅用于
   active 项左侧 2px 竖线 / hover（<2% 面积）。
   ============================================================ */
.app-shell {
  display: flex;
  align-items: stretch;
  min-height: 100vh;
}
.app-sidebar {
  flex: 0 0 240px;
  width: 240px;
  display: flex;
  flex-direction: column;
  background: var(--c-surface);
  border-right: 1px solid var(--c-border);
  position: sticky;
  top: 0;
  height: 100vh;
  overflow-y: auto;
  z-index: var(--z-header);
}
.app-main {
  flex: 1 1 auto;
  min-width: 0;          /* 防止内部宽内容把 flex 项撑爆 */
  display: flex;
  flex-direction: column;
}
/* 2026-07-02: plain 态（login/admin）隐藏整个 app-shell（含侧栏+header+container），
   admin_page 作为 body 直接子元素独占视口，避免 .header 占空间产生大片空白。 */
body[data-view="plain"] .app-shell {
  display: none;
}
/* login 页面布局约束 */
#login_page:not(.hidden) {
  max-width: 480px;
  margin: var(--sp-16) auto;
}

/* --- 侧栏顶部（2026-07-05 重排）：品牌行 = 品牌左 + 头像按钮右，
       点头像弹下拉菜单（邮箱/语言/管理/登出），旧"一行堆五样"账户条已删 --- */
.app-sidebar__top {
  position: relative;             /* 下拉菜单的定位锚 */
  padding: 14px 16px;
  border-bottom: 1px solid var(--c-border);
}
.app-sidebar__brand {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 19px;
  font-weight: 700;
  letter-spacing: -0.03em;
  line-height: 1;
  user-select: none;
}
.brand-ai { color: var(--c-accent); }
.brand-fto { color: var(--c-text); }

.sidebar-avatar-btn {
  flex: 0 0 28px;
  width: 28px;
  height: 28px;
  padding: 0;
  border: 1px solid transparent;
  border-radius: 50%;
  background: var(--c-accent-soft, #e8f4f8);
  color: var(--c-accent);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  cursor: pointer;
  transition: border-color .12s ease, box-shadow .12s ease;
}
.sidebar-avatar-btn:hover,
.sidebar-avatar-btn[aria-expanded="true"] {
  border-color: var(--c-accent);
}

/* 2026-08-10（PLAN_BILLING.md B6）：侧栏余额入口，品牌行下方的小行，
   点击进入费用中心。默认隐藏，与 UI 基调一致（纯白底 + 中性灰 + 青蓝点缀）。 */
.sidebar-balance-btn {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  margin-top: 10px;
  padding: 6px 10px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  background: var(--c-surface-alt, #f7f8f9);
  cursor: pointer;
  font-size: 12px;
  transition: border-color .12s ease;
}
.sidebar-balance-btn:hover { border-color: var(--c-accent); }
.sidebar-balance-btn__label { color: var(--c-text-muted); }
.sidebar-balance-btn__value { color: var(--c-accent); font-weight: 600; font-family: var(--font-mono); }
.sidebar-balance-btn--negative .sidebar-balance-btn__value { color: var(--c-danger); }

.sidebar-account-menu {
  position: absolute;
  top: calc(100% - 6px);
  left: 12px;
  right: 12px;
  z-index: var(--z-header, 100);
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-2);
  padding: var(--sp-1);
}
.sidebar-account-menu__email {
  padding: 8px 10px 6px;
  font-size: 12px;
  color: var(--c-text-muted);
  word-break: break-all;
  border-bottom: 1px solid var(--c-divider, var(--c-border));
  margin-bottom: 4px;
}
.sidebar-account-menu__email:empty { display: none; }
.sidebar-account-menu__item {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 7px 10px;
  border: none;
  background: none;
  border-radius: var(--r-sm);
  font-size: 13px;
  color: var(--c-text);
  cursor: pointer;
  text-align: left;
  transition: background .12s ease;
}
.sidebar-account-menu__item:hover { background: var(--c-surface-2); }
.sidebar-account-menu__item--danger:hover { color: var(--c-danger); }
.sidebar-account-menu__icon {
  flex: 0 0 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: var(--c-text-muted);
}
.sidebar-account-menu__icon svg { width: 15px; height: 15px; }

/* --- 侧栏导航项（一行文字入口） --- */
.app-sidebar__nav {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  padding: var(--sp-3) var(--sp-2);
  gap: 2px;
}
/* 首页/落地项：视觉权重更高（略大字号 + 加粗） */
.sidebar-nav-item--home {
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--c-text);
  padding: var(--sp-3) var(--sp-3) var(--sp-4);
}
.sidebar-nav-item--home .sidebar-nav-item__icon {
  width: 22px;
  height: 22px;
  flex: 0 0 22px;
}
/* 分割线：首页与功能项之间的视觉分层 */
.sidebar-nav-divider {
  height: 1px;
  background: var(--c-border);
  margin: var(--sp-2) var(--sp-3) var(--sp-3);
}
.sidebar-nav-item {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  width: 100%;
  padding: var(--sp-3) var(--sp-3);
  border: none;
  border-left: 3px solid transparent;   /* active 用青蓝竖线，默认透明占位 */
  background: none;
  color: var(--c-text-muted);
  font-size: var(--fs-base);
  text-align: left;
  cursor: pointer;
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  transition: background .12s ease, color .12s ease;
}
.sidebar-nav-item:hover {
  background: var(--c-surface-2);
  color: var(--c-text);
}
.sidebar-nav-item.is-active {
  background: color-mix(in srgb, var(--c-accent) 12%, var(--c-surface));
  border-left-color: var(--c-accent);
  color: var(--c-text);
  font-weight: 600;
}
.sidebar-nav-item__icon {
  flex: 0 0 20px;
  width: 20px;
  height: 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.sidebar-nav-item__icon svg { width: 100%; height: 100%; display: block; }
.sidebar-nav-item__label {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* --- 侧栏底部：语言切换 --- */
.app-sidebar__foot {
  padding: var(--sp-3) var(--sp-4);
  border-top: 1px solid var(--c-border);
}
.sidebar-lang {
  display: flex;
  gap: var(--sp-2);
}
/* app-shell 底部备案号（2026-09-21 O4） */
.sidebar-beian {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  text-decoration: none;
}
.sidebar-beian:hover { text-decoration: underline; }

/* --- app-main 顶条已删（2026-07-02：DOM 已移除，CSS 保留兜底防旧缓存闪现） --- */

/* --- 内容区统一布局：所有页面卡片统一起始位置/宽度/内边距 --- */
.app-main .container {
  max-width: 100%;         /* 在 app-main 内不再二次限宽，让卡片统一铺满 */
  padding: var(--sp-8) var(--sp-8) var(--sp-10);
  margin: 0;
}
.app-main .container > .card:not(.hidden) {
  max-width: 960px;        /* 内容区最大宽度一致 */
  margin-left: 0;          /* 左对齐而非居中，与侧栏视觉对齐 */
  margin-right: auto;
  padding: 32px 24px 24px !important; /* 顶部 32px 统一呼吸空间，左右底 24px — !important 防被覆盖 */
  border-radius: var(--r-lg);
  border: 1px solid var(--c-border);  /* 防强光下层级消融 */
  box-shadow: var(--shadow-1);  /* 统一较轻阴影，减少厚重感 */
  background: var(--c-surface-read);  /* 微暖底色，缓解纯白眩光 */
  min-height: calc(100vh - 104px); /* 跟随视口高度，保持各页面卡片高度一致（减去容器 padding 上下） */
}
/* 宽内容页（结果页/进度页/规避设计）允许更宽 */
.app-main .container > #analysisResultView:not(.hidden),
.app-main .container > #step4_progress:not(.hidden),
.app-main .container > #designAroundView:not(.hidden) {
  max-width: 1200px;
}
/* 所有页面顶部统一间距：header 到内容的距离 */
.app-main .container > .card:not(.hidden):first-of-type {
  margin-top: 0;
}

/* --- 窄屏：侧栏塌成顶部横条（移动端非重点，先保证不破版） --- */
@media (max-width: 860px) {
  .app-shell { flex-direction: column; }
  .app-sidebar {
    flex-basis: auto;
    width: 100%;
    height: auto;
    position: static;
    border-right: none;
    border-bottom: 1px solid var(--c-border);
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
  }
  .app-sidebar__top { border-bottom: none; min-height: 0; padding: var(--sp-2) var(--sp-3); }
  .app-sidebar__nav { flex-direction: row; flex-wrap: wrap; flex: 1 1 100%; padding: var(--sp-2); }
  .sidebar-nav-item { width: auto; border-left: none; border-bottom: 3px solid transparent; border-radius: var(--r-sm); }
  .sidebar-nav-item.is-active { border-left-color: transparent; border-bottom-color: var(--c-accent); }
  .app-sidebar__brand { padding: var(--sp-2) var(--sp-3); font-size: 17px; }
  .app-sidebar__foot { border-top: none; padding: var(--sp-2) var(--sp-3); }
}

/* --- 统一历史页模块 Tab（2026-07-02） --- */
.hist-tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid var(--c-border);
  margin: 0 0 var(--sp-4);
}
.hist-tab {
  padding: var(--sp-2) var(--sp-4);
  border: none;
  border-bottom: 2px solid transparent;
  background: none;
  color: var(--c-text-muted);
  font-size: var(--fs-base);
  cursor: pointer;
  transition: color .12s ease, border-color .12s ease;
}
.hist-tab:hover { color: var(--c-text); }
.hist-tab.is-active {
  color: var(--c-accent);
  border-bottom-color: var(--c-accent);
  font-weight: 600;
}

/* 检索式历史行内预览已删（2026-07-05）：与"详情"按钮重复，用户拍板移除；
   qb-hist-preview* 规则随 JS 渲染一并清理。 --- */

/* --- 检索式历史只读详情页（2026-07-03） --- */
.qb-detail-tech {
  margin-bottom: var(--sp-5);
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
}
.qb-detail-tech > summary {
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-text-muted);
  cursor: pointer;
  user-select: none;
}
.qb-detail-tech > summary:hover {
  color: var(--c-accent);
}
.qb-detail-tech__body {
  margin-top: var(--sp-3);
  font-size: var(--fs-sm);
  line-height: 1.6;
  color: var(--c-text);
  white-space: pre-wrap;
  word-break: break-word;
}
.qb-detail-queries {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}

/* --- FTO 报告独立页面（2026-07-02：从弹窗改为页面） --- */
/* FTO 报告页：旧 header 类名已替换为统一 .page-header，保留 tabs 样式 */
.fto-report-page__tabs {
  display: flex;
  gap: 0;
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  overflow: hidden;
}
.fto-report-tab {
  padding: 6px 16px;
  border: none;
  background: var(--c-surface);
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  cursor: pointer;
  transition: background .12s ease, color .12s ease;
}
.fto-report-tab:not(:last-child) {
  border-right: 1px solid var(--c-border);
}
.fto-report-tab:hover {
  background: var(--c-surface-2);
  color: var(--c-text);
}
/* 2026-07-05 基调执行（第四批"fto tab 实底"项，截图 08-52-04 确认）：
   选中态从大块实底青色改为浅青底+青字——与侧栏 active、hist-tab 同一"点缀级"用色。 */
.fto-report-tab.is-active {
  background: var(--c-accent-soft, #e8f4f8);
  color: var(--c-accent);
  font-weight: 600;
}
.fto-report-page__hint {
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  margin: 0 0 var(--sp-6);
  line-height: var(--lh-base);
}
.fto-report-tab-panel.hidden { display: none; }
.fto-report-history-list {
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}
.fto-report-history-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  padding: var(--sp-4) var(--sp-5);
  border: 1px solid var(--c-border);
  border-radius: var(--r-sm);
  background: var(--c-surface);
  transition: border-color .12s ease;
}
.fto-report-history-row:hover {
  border-color: var(--c-accent);
}
.fto-report-history-row__main {
  flex: 1 1 auto;
  min-width: 0;
}
.fto-report-history-row__title {
  font-size: var(--fs-base);
  font-weight: 500;
  color: var(--c-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fto-report-history-row__meta {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  margin-top: 2px;
}

/* ==========================================================================
 * 进度页左栏（2026-07-05 重构）：圆环进度 + 三阶段清单 + 已用时
 * 替换三代水瓶动画；用户拍板"圆环+阶段清单"。基调：白底卡、青蓝只做进度弧。
 * ==========================================================================*/
#step4_progress .progress-bottle-col {
  flex: 0 0 240px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  gap: 14px;
  height: 380px;
  position: sticky;
  top: 12px;
  box-sizing: border-box;
  padding: 26px 16px 14px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
}
.progress-ring {
  --ring-pct: 0;
  flex: 0 0 auto;
  width: 124px;
  height: 124px;
  border-radius: 50%;
  background: conic-gradient(var(--c-accent) calc(var(--ring-pct) * 1%), var(--c-border) 0);
  display: flex;
  align-items: center;
  justify-content: center;
}
.progress-ring__pct {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  background: var(--c-surface);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  font-weight: var(--fw-bold);
  font-variant-numeric: tabular-nums;
  color: var(--c-text);
}
/* 入场"启动中"微光（首帧真实进度到达后由 JS 摘除） */
.progress-ring.is-starting { animation: ring-starting 1.6s ease-in-out infinite; }
@keyframes ring-starting {
  0%, 100% { opacity: 1; }
  50%      { opacity: .55; }
}
@media (prefers-reduced-motion: reduce) {
  .progress-ring.is-starting { animation: none; }
}
.progress-ring__caption {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  text-align: center;
}
.progress-stagelist {
  list-style: none;
  margin: 4px 0 0;
  padding: 0;
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.progress-stagelist__item {
  display: flex;
  align-items: center;
  gap: 9px;
  font-size: var(--fs-sm);
  color: var(--c-text-faint);
  min-width: 0;
}
.progress-stagelist__mark {
  flex: 0 0 16px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  border: 2px solid var(--c-border-strong);
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.progress-stagelist__label {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.progress-stagelist__item[data-state="active"] .progress-stagelist__mark {
  border-color: var(--c-accent);
  background: radial-gradient(circle, var(--c-accent) 0 3px, transparent 3.5px);
}
.progress-stagelist__item[data-state="active"] .progress-stagelist__label {
  color: var(--c-text);
  font-weight: var(--fw-semibold);
}
.progress-stagelist__item[data-state="done"] .progress-stagelist__mark {
  border-color: var(--c-success);
  background: var(--c-success);
}
.progress-stagelist__item[data-state="done"] .progress-stagelist__mark::after {
  content: '✓';
  color: #fff;
  font-size: 10px;
  line-height: 1;
}
.progress-stagelist__item[data-state="done"] .progress-stagelist__label {
  color: var(--c-text-muted);
}
.progress-elapsed {
  margin-top: auto;
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  font-variant-numeric: tabular-nums;
}

/* ---------- T4b "系统对您技术方案的理解"只读面板（PLAN_WAVE_A.md §3b，2026-08-02）----------
   与 .review-section 同一视觉量级（浅底卡片），但独立类名——本面板逐条带"换一个
   说法"交互按钮，不是纯文本回显。 */
.feature-confirm-panel {
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  padding: var(--sp-4);
  margin-bottom: var(--sp-4);
}
.feature-confirm-panel__title {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  font-weight: var(--fw-medium);
  margin: 0 0 var(--sp-2);
  letter-spacing: .3px;
}
.feature-confirm-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}
.feature-confirm-item {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--sp-3);
  padding: var(--sp-2) 0;
  border-top: 1px solid var(--c-border);
}
.feature-confirm-item:first-child { border-top: none; padding-top: 0; }
.feature-confirm-item__text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.feature-confirm-item__name {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text);
}
.feature-confirm-item__desc {
  font-size: var(--fs-xs);
  color: var(--c-text-faint);
  line-height: 1.5;
}
.feature-confirm-item__reword {
  flex: 0 0 auto;
  border: 1px solid var(--c-border);
  background: var(--c-surface);
  color: var(--c-text-muted);
  border-radius: var(--r-sm);
  width: 26px;
  height: 26px;
  line-height: 1;
  font-size: 14px;
  cursor: pointer;
  transition: border-color var(--t-fast), color var(--t-fast);
}
.feature-confirm-item__reword:hover {
  border-color: var(--c-accent);
  color: var(--c-accent);
}
.feature-confirm-item__reword:disabled,
.feature-confirm-item__reword.is-loading {
  opacity: .5;
  cursor: default;
}
