/* ============================================================
   制造业多智能体协同平台 · 智能门户（致远 CoMi / 飞书 Aily 风格）
   light theme · 智能蓝 var(--primary) · 卡片化布局 · 中文排版
   ============================================================ */

:root {
  /* 品牌色：深色驾驶舱主题 —— 与侧边栏深藏青同源，主色提亮保对比 */
  --primary: #3B8AE8;
  --primary-bright: #2B7AE0;
  --primary-rgb: 59, 130, 246;
  --primary-deep: #9DC3F3;
  --primary-hover: #62A1EB;
  --primary-dark: #17509E;
  --primary-light: rgba(var(--primary-rgb), .16);
  --primary-light-2: rgba(var(--primary-rgb), .11);
  --ring-color: rgba(var(--primary-rgb), .30);

  /* 中性色：深藏青面板体系（与侧边栏 #0D1B30→#10233F 无缝衔接） */
  --bg: #0A1322;
  --card: #16273F;
  --border: #263E62;
  --border-strong: #35507A;
  --text: #EEF4FE;
  --text-2: #BCCBDF;
  --text-3: #93A8C6;

  /* 状态色（深色底提亮） */
  --ok: #3FCB79;
  --ok-bg: rgba(63, 203, 121, .13);
  --warn: #E8B93E;
  --warn-bg: rgba(232, 185, 62, .13);
  --danger: #F4696B;
  --danger-bg: rgba(244, 105, 107, .13);
  --info-bg: rgba(var(--primary-rgb), .13);
  --purple: #A78BFA;
  --purple-bg: rgba(167, 139, 250, .14);

  /* 派生底色（组件内 var() fallback 引用，统一定义避免回退浅色） */
  --bg-soft: #0F1D33;
  --bg-sub: #0D1930;
  --bg-2: #0F1D33;
  --primary-bg: rgba(var(--primary-rgb), .12);
  --accent: var(--primary);
  --amber-bg: rgba(232, 185, 62, .15);

  /* 异常三级（结果卡左侧色条 / 状态圆点 / 主操作按钮） */
  --level-normal: var(--ok);
  --level-normal-bg: var(--ok-bg);
  --level-warn: var(--warn);
  --level-warn-bg: var(--warn-bg);
  --level-alert: var(--danger);
  --level-alert-bg: var(--danger-bg);

  /* 形状 */
  --radius: 12px;
  --radius-sm: 8px;
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, .28), 0 2px 8px rgba(0, 0, 0, .22);
  --shadow-md: 0 2px 6px rgba(0, 0, 0, .30), 0 12px 30px rgba(0, 0, 0, .40);
  --shadow-pop: 0 18px 50px rgba(0, 0, 0, .55);

  /* 布局 */
  --sidebar-w: 220px;
  --topbar-h: 58px;

  /* 字号档位系数（本文件的全部 font-size 均按 calc(Npx * var(--font-scale)) 令牌化）。
     此处兜底 = 1（等于改造前原值）；档位切换由 aging.css 的 html[data-font] 覆写：
     标准 1 / 清晰 1.2 / 特大 1.35。令牌必须在本文件也声明——calc() 里引用了未定义
     变量时整条声明会失效，字号会静默回落到继承值。 */
  --font-scale: 1;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html, body { height: 100%; }

body {
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
    "Microsoft YaHei", "Segoe UI", Roboto, sans-serif;
  font-size: calc(14px * var(--font-scale));
  color: var(--text);
  background:
    radial-gradient(900px 480px at 78% -12%, rgba(46, 127, 224, .13), transparent 60%),
    radial-gradient(720px 420px at -8% 108%, rgba(34, 197, 140, .05), transparent 60%),
    var(--bg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

::selection { background: rgba(59, 130, 246, .38); }

button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; }
input, textarea { font-family: inherit; color: inherit; }
a { color: var(--primary); text-decoration: none; }
a:hover { text-decoration: underline; }

/* 滚动条 */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: #22375C; border-radius: 99px; border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: #2F4B77; border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-track { background: transparent; }

/* ============================================================
   布局骨架
   ============================================================ */

.app { display: flex; height: 100vh; overflow: hidden; }

.main { flex: 1; display: flex; flex-direction: column; min-width: 0; }

.content {
  flex: 1;
  overflow-y: auto;
  padding: 22px 28px 40px;
  scroll-behavior: smooth;
  background-image:
    linear-gradient(rgba(96, 165, 250, .05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(96, 165, 250, .05) 1px, transparent 1px);
  background-size: 26px 26px;
}

/* 自适应铺满：内容区不再固定 1240px，随主区域宽度自动撑满 */
.content-inner { width: 100%; margin: 0 auto; }

/* ============================================================
   侧边栏
   ============================================================ */

/* 侧边栏：深邃藏青渐变（深色导航 + 浅色内容区，层次感对比） */
.sidebar {
  width: var(--sidebar-w);
  flex-shrink: 0;
  background:
    radial-gradient(320px 220px at -20% -6%, rgba(46, 127, 224, .28), transparent 60%),
    linear-gradient(180deg, #0D1B30 0%, #10233F 55%, #0C1A2E 100%);
  border-right: none;
  box-shadow: 1px 0 0 rgba(255, 255, 255, .04), 4px 0 18px rgba(10, 22, 40, .18);
  display: flex;
  flex-direction: column;
  z-index: 20;
}

.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 15px 16px 14px;
  border-bottom: 1px solid rgba(255, 255, 255, .07);
}

.brand-logo {
  width: 36px; height: 36px;
  border-radius: 10px;
  background: linear-gradient(135deg, var(--primary-bright) 0%, var(--primary) 55%, var(--primary-dark) 100%);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  box-shadow: 0 4px 14px rgba(var(--primary-rgb), .45), inset 0 1px 0 rgba(255, 255, 255, .28);
}

.brand-name { font-size: calc(15px * var(--font-scale)); font-weight: 700; letter-spacing: .2px; color: #F2F6FC; }
.brand-sub { font-size: calc(10.5px * var(--font-scale)); color: rgba(190, 208, 232, .55); letter-spacing: .4px; margin-top: 1px; }

.nav { flex: 1; padding: 10px 10px 0; overflow-y: auto; }

.nav-group-label {
  font-size: calc(10.5px * var(--font-scale));
  font-weight: 600;
  color: rgba(190, 208, 232, .42);
  padding: 12px 10px 6px;
  letter-spacing: 1.2px;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 8.5px 11px;
  border-radius: var(--radius-sm);
  color: rgba(207, 220, 238, .78);
  font-size: calc(13.5px * var(--font-scale));
  margin-bottom: 3px;
  transition: background .14s ease, color .14s ease, transform .14s ease;
  text-align: left;
  position: relative;
}

.nav-item svg { flex-shrink: 0; color: rgba(190, 208, 232, .5); transition: color .14s ease; }

.nav-item:hover { background: rgba(255, 255, 255, .06); color: #fff; transform: translateX(2px); }

.nav-item.active {
  background: rgba(59, 130, 246, .28);
  background: linear-gradient(90deg,
    rgba(var(--primary-rgb), .32) 0%,
    rgba(var(--primary-rgb), .12) 100%);
  color: #fff;
  font-weight: 600;
  box-shadow: inset 0 0 0 1px rgba(var(--primary-rgb), .25);
}

.nav-item.active::before {
  content: "";
  position: absolute;
  left: 0; top: 8px; bottom: 8px;
  width: 3px;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--primary-deep), var(--primary-bright));
  box-shadow: 0 0 8px rgba(var(--primary-rgb), .8);
}

.nav-item.active svg { color: var(--primary-deep); }

.nav-item .nav-badge {
  margin-left: auto;
  min-width: 18px; height: 18px;
  border-radius: 9px;
  background: var(--danger);
  color: #fff;
  font-size: calc(10.5px * var(--font-scale));
  font-weight: 600;
  display: flex; align-items: center; justify-content: center;
  padding: 0 5px;
  box-shadow: 0 0 8px rgba(207, 34, 46, .5);
}

.sidebar-foot { padding: 10px; border-top: 1px solid rgba(255, 255, 255, .07); }

.env-card {
  background: rgba(255, 255, 255, .05);
  border: 1px solid rgba(255, 255, 255, .08);
  border-radius: 10px;
  padding: 9px 11px;
}

.env-row { display: flex; justify-content: space-between; font-size: calc(11.5px * var(--font-scale)); line-height: 1.9; }
.env-label { color: rgba(190, 208, 232, .5); }
.env-value { color: rgba(224, 234, 247, .85); font-weight: 500; }
.env-value.online { color: #4ADE80; }
.env-value.offline { color: #FBBF24; }
.env-value.warn { color: #FBBF24; }
.env-value.err { color: #F87171; }

/* ============================================================
   顶栏
   ============================================================ */

.topbar {
  position: relative;
  height: var(--topbar-h);
  flex-shrink: 0;
  background: rgba(14, 26, 46, .78);
  backdrop-filter: blur(12px) saturate(1.5);
  -webkit-backdrop-filter: blur(12px) saturate(1.5);
  border-bottom: 1px solid rgba(255, 255, 255, .07);
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 0 22px;
  z-index: 10;
}

/* 顶栏底部品牌光线（全局框架层一眼可辨） */
.topbar::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: -1px;
  height: 2px;
  background: linear-gradient(90deg, var(--primary) 0%, var(--primary-bright) 38%, rgba(46, 134, 224, 0) 85%);
  opacity: .85;
  pointer-events: none;
}

.topbar-title { font-size: calc(15.5px * var(--font-scale)); font-weight: 700; white-space: nowrap; letter-spacing: .2px; }
.topbar-sub { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-top: 1px; white-space: nowrap; }

.topbar-search {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 7px;
  width: 280px;
  height: 34px;
  padding: 0 13px;
  background: rgba(255, 255, 255, .05);
  border: 1px solid var(--border);
  border-radius: 999px;
  color: var(--text-3);
  transition: border .16s ease, background .16s ease, box-shadow .16s ease;
}

.topbar-search:focus-within {
  border-color: var(--primary);
  background: rgba(255, 255, 255, .04);
  box-shadow: 0 0 0 3px var(--ring-color);
}
.topbar-search input { border: none; outline: none; background: none; width: 100%; font-size: calc(12.5px * var(--font-scale)); color: var(--text); }
.topbar-search input::placeholder { color: var(--text-3); }

.topbar-right { display: flex; align-items: center; gap: 12px; }

.backend-status {
  display: flex; align-items: center; gap: 6px;
  font-size: calc(12px * var(--font-scale)); color: var(--text-2);
  padding: 5px 11px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .04);
  border: 1px solid var(--border);
  white-space: nowrap;
}

.dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
.dot-ok { background: #3FB950; box-shadow: 0 0 0 3px rgba(45, 164, 78, .16); }
/* dot-warn：后端可达但部分依赖降级（如 Milvus 未起）——链路能跑，能力不全 */
.dot-warn { background: #D4A017; box-shadow: 0 0 0 3px rgba(212, 160, 23, .16); }
/* dot-err：后端不可达（进程未起 / 网络不通）——与"降级"必须区分开 */
.dot-err { background: #C63B2F; box-shadow: 0 0 0 3px rgba(198, 59, 47, .16); }
/* 兼容旧类名（历史代码/外部引用），语义同 dot-warn */
.dot-off { background: #D4A017; box-shadow: 0 0 0 3px rgba(212, 160, 23, .16); }
.dot-checking { background: #8B98AB; animation: pulse 1.2s ease infinite; }

@keyframes pulse { 50% { opacity: .35; } }

.icon-btn {
  width: 32px; height: 32px;
  border-radius: 9px;
  display: flex; align-items: center; justify-content: center;
  color: var(--text-2);
  transition: background .14s ease, color .14s ease, transform .14s ease;
}

.icon-btn:hover { background: rgba(255, 255, 255, .06); color: var(--text); }
.icon-btn:active { transform: scale(.94); }

.user-chip { display: flex; align-items: center; gap: 9px; padding-left: 4px; }

.avatar {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--primary-bright), var(--primary));
  color: #fff;
  font-size: calc(12.5px * var(--font-scale));
  font-weight: 600;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  box-shadow: 0 0 0 2px #0E1B31, 0 0 0 4px rgba(59, 130, 246, .30);
}

.user-name { font-size: calc(12.5px * var(--font-scale)); font-weight: 600; line-height: 1.3; }
.user-role { font-size: calc(11px * var(--font-scale)); color: var(--text-3); line-height: 1.3; }

/* ============================================================
   通用组件
   ============================================================ */

.page-head { margin-bottom: 18px; }
.page-title {
  font-size: calc(20px * var(--font-scale));
  font-weight: 800;
  letter-spacing: .2px;
  color: #F5F9FF;
  text-shadow: 0 0 16px rgba(var(--primary-rgb), .28);
  display: flex;
  align-items: center;
  gap: 10px;
}

/* 页面标题渐变侧标（每屏页头一眼可辨） */
.page-title::before {
  content: "";
  width: 5px; height: 21px;
  border-radius: 3px;
  background: linear-gradient(180deg, var(--primary-bright), var(--primary-deep, #14508F));
  box-shadow: 0 2px 7px rgba(27, 102, 204, .38);
  flex-shrink: 0;
}
.page-desc { font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); margin-top: 5px; line-height: 1.6; }

.card {
  position: relative;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm), inset 0 1px 0 rgba(255, 255, 255, .05);
  transition: box-shadow .2s ease;
}

/* 高对比改版：每张卡片顶部 3px 品牌渐变线（全局一眼可辨） */
.card::before {
  content: "";
  position: absolute;
  left: 0; right: 0; top: 0;
  height: 3px;
  border-radius: var(--radius) var(--radius) 0 0;
  background: linear-gradient(90deg, var(--primary) 0%, var(--primary-bright) 45%, rgba(46, 134, 224, 0) 92%);
  opacity: .9;
  pointer-events: none;
  z-index: 3;
}

/* 立体化：卡片悬浮时阴影加深（不位移，避免静态卡片跳动） */
.card:hover {
  box-shadow: 0 1px 2px rgba(0, 0, 0, .25), 0 6px 20px rgba(0, 0, 0, .35),
    inset 0 1px 0 rgba(255, 255, 255, .05);
}

.card-pad { padding: 16px 18px; }

.card-head {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 14px 20px;
  border-bottom: 1px solid var(--border);
  background: linear-gradient(180deg, rgba(255, 255, 255, .04), rgba(255, 255, 255, .02));
  border-radius: calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0;
}

.card-title { font-size: calc(14px * var(--font-scale)); font-weight: 700; color: #F3F8FE; display: flex; align-items: center; gap: 8px; letter-spacing: .2px; text-shadow: 0 0 12px rgba(var(--primary-rgb), .18); }
.card-title svg { color: var(--primary); }
.card-extra { margin-left: auto; font-size: calc(12px * var(--font-scale)); color: var(--text-3); display: flex; align-items: center; gap: 8px; }

.section-title {
  font-size: calc(13px * var(--font-scale));
  font-weight: 700;
  color: var(--text);
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 22px 0 12px;
}

.section-title::before {
  content: "";
  width: 3.5px; height: 14px;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--primary-bright), var(--primary));
}

.section-title .section-extra { margin-left: auto; font-size: calc(12px * var(--font-scale)); font-weight: 400; color: var(--text-3); }

/* 品质看板三大主体：①核心指标+TOP5（共用顶部筛选卡）②标准三率（无筛选）③不良累计柏拉图（自带筛选卡）
   主体之间以细虚线分隔，视觉上各自成块 */
.mfg-group + .mfg-group {
  margin-top: 10px; padding-top: 12px;
  border-top: 1px dashed var(--border, #21385A);
}
.mfg-group > .section-title:first-child { margin-top: 12px; }
/* 品质看板「三张 TOP5 卡一排」：窄屏回落单列（仅作用于本主体，不影响其它 grid-3 用法） */
@media (max-width: 900px) {
  .mfg-group[data-mfg-group="metrics"] .grid-3 { grid-template-columns: minmax(0, 1fr); }
}

.grid { display: grid; gap: 14px; }
.grid-2 { grid-template-columns: repeat(2, 1fr); }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-4 { grid-template-columns: repeat(4, 1fr); }

/* 徽标 */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 21px;
  padding: 0 9px;
  border-radius: 999px;
  font-size: calc(11.5px * var(--font-scale));
  font-weight: 500;
  letter-spacing: .2px;
  white-space: nowrap;
  vertical-align: middle;
}

.badge-blue { background: var(--info-bg); color: var(--primary); }
.badge-green { background: var(--ok-bg); color: var(--ok); }
.badge-amber { background: var(--warn-bg); color: var(--warn); }
.badge-red { background: var(--danger-bg); color: var(--danger); }
.badge-purple { background: var(--purple-bg); color: var(--purple); }
.badge-gray { background: rgba(255, 255, 255, .07); color: var(--text-2); }
.badge-outline { background: rgba(255, 255, 255, .04); border: 1px solid var(--border-strong); color: var(--text-2); }

.badge-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }

/* 按钮 */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 32px;
  padding: 0 15px;
  border-radius: 8px;
  font-size: calc(13px * var(--font-scale));
  font-weight: 500;
  letter-spacing: .2px;
  transition: all .15s ease;
  border: 1px solid transparent;
  white-space: nowrap;
}

.btn:active:not(:disabled) { transform: translateY(1px); }

.btn-primary {
  background: linear-gradient(180deg, var(--primary-bright) 0%, var(--primary) 100%);
  color: #fff;
  box-shadow: 0 1px 2px rgba(16, 24, 40, .12), 0 4px 12px rgba(27, 102, 204, .24);
}
.btn-primary:hover {
  background: linear-gradient(180deg, var(--primary-bright) 0%, var(--primary-dark) 100%);
  box-shadow: 0 2px 4px rgba(16, 24, 40, .12), 0 6px 16px rgba(27, 102, 204, .32);
  transform: translateY(-1px);
}
.btn-primary:active:not(:disabled) { transform: translateY(0); }

.btn-outline { background: rgba(255, 255, 255, .04); border-color: var(--border-strong); color: var(--text-2); }
.btn-outline:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-light-2); }

.btn-danger { background: rgba(255, 255, 255, .04); border-color: rgba(244, 105, 107, .40); color: var(--danger); }
.btn-danger:hover { background: var(--danger-bg); }

.btn-success { background: var(--ok); color: #fff; }
.btn-success:hover { filter: brightness(1.08); }

.btn-sm { height: 27px; padding: 0 11px; font-size: calc(12px * var(--font-scale)); border-radius: 7px; }

.btn:disabled { opacity: .55; cursor: not-allowed; box-shadow: none; }

.btn-block { width: 100%; }

/* 链接按钮 */
.link-btn { color: var(--primary); font-size: calc(12.5px * var(--font-scale)); display: inline-flex; align-items: center; gap: 3px; }
.link-btn:hover { text-decoration: underline; }

/* 输入 */
.input, .textarea {
  width: 100%;
  border: 1px solid var(--border-strong);
  border-radius: 8px;
  padding: 7px 11px;
  font-size: calc(13px * var(--font-scale));
  outline: none;
  transition: border .15s ease, box-shadow .15s ease;
  background: rgba(255, 255, 255, .04);
}

.input:hover, .textarea:hover { border-color: #BFCBDD; }
.input:focus, .textarea:focus { border-color: var(--primary); box-shadow: 0 0 0 3px var(--ring-color); }

/* 标签 chips */
.chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 28px;
  padding: 0 13px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .04);
  border: 1px solid var(--border-strong);
  color: var(--text-2);
  font-size: calc(12.5px * var(--font-scale));
  transition: all .15s ease;
}

.chip:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-light-2); }

.chip.active {
  background: linear-gradient(180deg, var(--primary-bright), var(--primary));
  border-color: transparent;
  color: #fff;
  box-shadow: 0 3px 8px rgba(27, 102, 204, .26);
}

.chip-row { display: flex; flex-wrap: wrap; gap: 8px; }

/* 筛选条里的分组竖线（容量筛选 | 楼栋筛选），避免两组胶囊视觉糊成一条 */
.of-chip-sep { width: 1px; height: 16px; align-self: center; margin: 0 2px; background: var(--border); }

/* 筛选下拉（制造看板「产品分类」· 图1 形态）：与 .chip 同族的胶囊外观，
   仅把原生 select 的箭头替换成同一套描边色，保证与旁边的工段胶囊视觉齐平。 */
.chip-select {
  display: inline-flex; align-items: center;
  height: 28px; padding: 0 30px 0 13px;
  border-radius: 999px;
  background-color: rgba(255, 255, 255, .04);
  border: 1px solid var(--border-strong);
  color: var(--text-2);
  font-family: inherit; font-size: calc(12.5px * var(--font-scale));
  appearance: none; -webkit-appearance: none; cursor: pointer;
  background-image:
    linear-gradient(45deg, transparent 50%, currentColor 50%),
    linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: calc(100% - 16px) 12px, calc(100% - 11px) 12px;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}
.chip-select:hover { border-color: var(--primary); color: var(--primary); background-color: var(--primary-light-2); }
.chip-select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--ring-color); }
.chip-select option { background: var(--card); color: var(--text); }

/* 进度条 */
.progress { height: 6px; background: rgba(255, 255, 255, .09); border-radius: 999px; overflow: hidden; }
.progress-bar { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--primary-bright), var(--primary)); transition: width .5s ease; }
.progress-bar.ok { background: #3FB950; }
.progress-bar.warn { background: #D4A017; }
.progress-bar.danger { background: var(--danger); }

/* 键值对 */
.kv { display: flex; font-size: calc(12.5px * var(--font-scale)); line-height: 2.0; }
.kv-key { color: var(--text-3); width: 88px; flex-shrink: 0; }
.kv-val { color: var(--text); flex: 1; min-width: 0; word-break: break-all; }

/* 空状态 */
.empty {
  padding: 42px 20px;
  text-align: center;
  color: var(--text-3);
  font-size: calc(13px * var(--font-scale));
}

.empty svg { color: #3E5A85; margin-bottom: 10px; }

/* 加载旋转 */
.spinner {
  width: 14px; height: 14px;
  border: 2px solid var(--primary-light);
  border-top-color: var(--primary);
  border-radius: 50%;
  animation: spin .7s linear infinite;
  flex-shrink: 0;
}

.spinner.lg { width: 22px; height: 22px; border-width: 2.5px; }

@keyframes spin { to { transform: rotate(360deg); } }

/* 演示数据标记 */
.demo-flag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: calc(11px * var(--font-scale));
  color: var(--warn);
  background: var(--warn-bg);
  border: 1px dashed rgba(232, 185, 62, .40);
  padding: 2px 9px;
  border-radius: 999px;
  font-weight: 500;
}

.real-flag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: calc(11px * var(--font-scale));
  color: var(--ok);
  background: var(--ok-bg);
  border: 1px dashed rgba(63, 203, 121, .40);
  padding: 2px 9px;
  border-radius: 999px;
  font-weight: 500;
}

/* 降级横幅 */
.degrade-banner {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  background: var(--warn-bg);
  border: 1px solid rgba(232, 185, 62, .35);
  border-radius: var(--radius-sm);
  padding: 10px 13px;
  font-size: calc(12.5px * var(--font-scale));
  color: #E9C878;
  line-height: 1.65;
}

.degrade-banner svg { color: #D4A017; flex-shrink: 0; margin-top: 2px; }

.offline-banner {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  background: rgba(232, 185, 62, .12);
  border: 1px solid rgba(232, 185, 62, .35);
  border-radius: var(--radius-sm);
  padding: 10px 13px;
  font-size: calc(12.5px * var(--font-scale));
  color: #E9C878;
  line-height: 1.65;
}

.offline-banner svg { color: var(--warn); flex-shrink: 0; margin-top: 2px; }

/* ============================================================
   工作台
   ============================================================ */

.hero {
  background:
    radial-gradient(560px 260px at 88% -30%, rgba(var(--primary-rgb), .35), transparent 62%),
    linear-gradient(115deg, rgba(255, 255, 255, .10) 0%, transparent 32%),
    linear-gradient(115deg, var(--primary-dark) 0%, var(--primary) 48%, var(--primary-bright) 100%);
  border-radius: 14px;
  padding: 22px 26px;
  color: #fff;
  position: relative;
  overflow: hidden;
  box-shadow: 0 10px 30px rgba(15, 76, 158, .26), inset 0 1px 0 rgba(255, 255, 255, .14);
}

.hero::after {
  content: "";
  position: absolute;
  right: -46px; top: -66px;
  width: 230px; height: 230px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .07);
}

.hero::before {
  content: "";
  position: absolute;
  right: 90px; bottom: -90px;
  width: 170px; height: 170px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .05);
}

.hero-greeting { font-size: calc(19px * var(--font-scale)); font-weight: 700; display: flex; align-items: center; gap: 10px; }
.hero-sub { font-size: calc(12.5px * var(--font-scale)); opacity: .82; margin-top: 7px; line-height: 1.7; max-width: 560px; position: relative; z-index: 1; }

.role-switch { display: flex; gap: 7px; margin-top: 15px; position: relative; z-index: 1; flex-wrap: wrap; }

.role-btn {
  padding: 5px 13px;
  border-radius: 15px;
  font-size: calc(12.5px * var(--font-scale));
  color: rgba(255, 255, 255, .88);
  border: 1px solid rgba(255, 255, 255, .38);
  transition: all .13s ease;
  background: rgba(255, 255, 255, .06);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

.role-btn:hover { background: rgba(255, 255, 255, .18); transform: translateY(-1px); }

.role-btn.active {
  background: #FFFFFF;
  color: var(--primary);
  border-color: #fff;
  font-weight: 600;
  box-shadow: 0 3px 10px rgba(6, 30, 66, .28);
}

.stat-card {
  padding: 15px 17px;
  display: flex;
  gap: 13px;
  align-items: flex-start;
  position: relative;
  overflow: hidden;
  transition: transform .18s ease, box-shadow .18s ease;
}

/* 立体化：顶部品牌渐变线常显（与 .card::before 同层，KPI 卡自身定义覆盖） */
.stat-card::before {
  content: "";
  position: absolute;
  left: 0; right: 0; top: 0;
  height: 3px;
  border-radius: var(--radius) var(--radius) 0 0;
  background: linear-gradient(90deg, var(--primary) 0%, var(--primary-bright) 45%, rgba(46, 134, 224, 0) 92%);
  opacity: .9;
  pointer-events: none;
  transition: opacity .18s ease;
}

.stat-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 2px 4px rgba(16, 24, 40, .05), 0 14px 32px rgba(16, 24, 40, .11);
}

.stat-card:hover::before { opacity: 1; }

/* 图标瓷片：微渐变 + 内高光 + 同色投影，统一质感 */
.stat-icon {
  width: 40px; height: 40px;
  border-radius: 11px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .65), 0 3px 8px rgba(16, 24, 40, .08);
}

.stat-icon.blue { background: linear-gradient(145deg, #DCEBFC, #EFF6FE); color: var(--primary); box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 3px 8px rgba(27, 102, 204, .18); }
.stat-icon.amber { background: linear-gradient(145deg, #FBEFC9, #FEF8E3); color: #D4A017; box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 3px 8px rgba(212, 160, 23, .18); }
.stat-icon.red { background: linear-gradient(145deg, #FBDCDA, #FEEEED); color: var(--danger); box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 3px 8px rgba(207, 34, 46, .16); }
.stat-icon.green { background: linear-gradient(145deg, #D3EEDB, #EAF7EE); color: #2FBF6B; box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 3px 8px rgba(26, 127, 55, .16); }
.stat-icon.purple { background: linear-gradient(145deg, #E9E0FB, #F5F1FD); color: var(--purple); box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 3px 8px rgba(130, 80, 223, .16); }

.stat-num {
  font-size: calc(24px * var(--font-scale));
  font-weight: 800;
  line-height: 1.15;
  font-variant-numeric: tabular-nums;
  background: linear-gradient(120deg, #D6E7FC, #9CC3F6 45%, #C9DFFB);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 0 10px rgba(var(--primary-rgb), .30));
}
.stat-label { font-size: calc(12.5px * var(--font-scale)); font-weight: 550; color: var(--text-2); margin-top: 3px; }
.stat-trend { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-top: 5px; display: flex; align-items: center; gap: 4px; }
.stat-trend.up { color: var(--danger); }
.stat-trend.down { color: var(--ok); }

.todo-item {
  display: flex;
  gap: 12px;
  padding: 13px 18px;
  border-bottom: 1px solid var(--border);
  align-items: flex-start;
  transition: background .13s ease;
}

.todo-item:last-child { border-bottom: none; }
.todo-item:hover { background: rgba(255, 255, 255, .04); }

.todo-ico {
  width: 34px; height: 34px;
  border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .65), 0 2px 6px rgba(16, 24, 40, .07);
}

.todo-ico.restart { background: linear-gradient(145deg, #FBDCDA, #FEEEED); color: var(--danger); }
.todo-ico.eta { background: linear-gradient(145deg, #DCEBFC, #EFF6FE); color: var(--primary); }
.todo-ico.impact { background: linear-gradient(145deg, #FBEFC9, #FEF8E3); color: var(--warn); }

.todo-main { flex: 1; min-width: 0; }
.todo-title { font-size: calc(13.5px * var(--font-scale)); font-weight: 600; line-height: 1.5; }
.todo-meta { font-size: calc(12px * var(--font-scale)); color: var(--text-3); margin-top: 4px; display: flex; flex-wrap: wrap; gap: 12px; }
.todo-meta b { color: var(--text-2); font-weight: 500; }
.todo-actions { display: flex; gap: 7px; flex-shrink: 0; align-items: center; }

/* 待办卡列表内联审批摘要（事因 / 依据 / 治理进度） */
.todo-brief-wrap { margin-top: 7px; display: flex; flex-direction: column; gap: 5px; }
.todo-brief { display: flex; gap: 6px; align-items: flex-start; font-size: calc(12px * var(--font-scale)); line-height: 1.55; color: var(--text-2); }
.todo-brief > svg { flex-shrink: 0; margin-top: 2px; color: var(--text-3); }
.todo-brief b { color: var(--text); font-weight: 600; }
.todo-brief.reason { color: var(--warn); font-weight: 500; }
.todo-brief.reason > svg { color: var(--warn); }
.todo-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.todo-chip { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); background: var(--bg); border: 1px solid var(--border); border-radius: 999px; padding: 1px 8px; }
.todo-chip b { color: var(--text-2); font-weight: 500; }
.todo-gate { display: flex; gap: 5px; align-items: center; margin-top: 7px; font-size: calc(11.8px * var(--font-scale)); color: var(--warn); }
.todo-gate > svg { flex-shrink: 0; }

/* P0-4 强制填意见：轻量意见输入弹窗 */
.comment-modal {
  position: fixed; inset: 0; z-index: 9000;
  background: rgba(15, 22, 35, .42);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.comment-modal-card {
  width: min(460px, 100%);
  background: var(--card);
  border-radius: var(--radius);
  padding: 16px 18px;
  box-shadow: 0 18px 48px rgba(15, 22, 35, .28);
}
.comment-modal-title { display: flex; align-items: center; gap: 6px; font-size: calc(14px * var(--font-scale)); font-weight: 600; color: var(--text); }
.comment-modal-title svg { color: var(--warn); flex-shrink: 0; }
.comment-modal-hint { margin-top: 6px; font-size: calc(12px * var(--font-scale)); color: var(--text-3); line-height: 1.6; }
.comment-modal-input { width: 100%; margin-top: 10px; resize: vertical; font-size: calc(13px * var(--font-scale)); line-height: 1.6; }
.comment-modal-input.is-invalid { border-color: var(--danger); }
.comment-modal-bar { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; }

.quick-entry {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 9px;
  padding: 19px 10px;
  border-radius: var(--radius);
  background: var(--card);
  border: 1px solid var(--border);
  transition: all .14s ease;
  cursor: pointer;
  font-size: calc(13px * var(--font-scale));
  font-weight: 500;
  color: var(--text-2);
}

.quick-entry:hover {
  border-color: rgba(var(--primary-rgb), .55);
  color: var(--primary);
  transform: translateY(-3px);
  box-shadow: 0 2px 4px rgba(16, 24, 40, .05), 0 14px 30px rgba(27, 102, 204, .13);
}

.quick-entry .qe-ico {
  width: 42px; height: 42px;
  border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .65), 0 3px 8px rgba(16, 24, 40, .09);
  transition: transform .18s ease;
}

.quick-entry:hover .qe-ico { transform: scale(1.06); }

/* ============================================================
   订单履约看板
   ============================================================ */

.pipeline { display: flex; align-items: stretch; gap: 0; }

.pipe-stage {
  flex: 1;
  padding: 14px 12px 12px;
  text-align: center;
  position: relative;
  transition: background .15s ease;
}

.pipe-stage:hover { background: rgba(255, 255, 255, .04); }

.pipe-stage + .pipe-stage { border-left: 1px dashed var(--border); }

.pipe-stage-name { font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); font-weight: 500; }
.pipe-stage-num { font-size: calc(21px * var(--font-scale)); font-weight: 700; margin: 5px 0 8px; font-variant-numeric: tabular-nums; letter-spacing: -.3px; }
.pipe-stage-bar { height: 6px; background: rgba(255, 255, 255, .09); border-radius: 999px; overflow: hidden; }
.pipe-stage-pct { font-size: calc(11px * var(--font-scale)); color: var(--text-3); margin-top: 6px; }

.pipe-arrow { align-self: center; color: #3E5A85; flex-shrink: 0; }

.risk-order { padding: 14px 17px; border-bottom: 1px solid var(--border); transition: background .13s ease; }
.risk-order:last-child { border-bottom: none; }
.risk-order:hover { background: rgba(255, 255, 255, .04); }

.ro-head { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.ro-no { font-size: calc(13.5px * var(--font-scale)); font-weight: 700; font-variant-numeric: tabular-nums; }
.ro-body { display: flex; gap: 18px; margin-top: 9px; font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); flex-wrap: wrap; }
.ro-body b { color: var(--text); font-weight: 600; }
.ro-foot { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.ro-foot .progress { flex: 1; }

.dept-domain { padding: 14px 16px; }

.dept-domain-head { display: flex; align-items: center; gap: 9px; margin-bottom: 11px; }
.dept-domain-name { font-size: calc(13.5px * var(--font-scale)); font-weight: 700; }
.dept-domain-count { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-left: auto; }

.dept-table { width: 100%; border-collapse: collapse; font-size: calc(12.5px * var(--font-scale)); }
.dept-table th {
  text-align: left;
  font-weight: 600;
  color: var(--text-3);
  font-size: calc(11.5px * var(--font-scale));
  letter-spacing: .3px;
  padding: 6px 8px;
  border-bottom: 1px solid var(--border);
}
.dept-table td { padding: 7px 8px; border-bottom: 1px solid rgba(255, 255, 255, .07); color: var(--text-2); }
.dept-table tbody tr { transition: background .13s ease; }
.dept-table tbody tr:hover td { background: rgba(255, 255, 255, .045); }
.dept-table tr:last-child td { border-bottom: none; }
.dept-table td.num { font-variant-numeric: tabular-nums; text-align: right; width: 64px; }
.dept-table td.num.over { color: var(--danger); font-weight: 600; }

/* ============================================================
   智能问数（对话 + 事件流）
   ============================================================ */

/* 聊天外框：微信式灰底卡片（#0A1322），输入条 1px 顶边框由框体裁切 */
.chat-wrap {
  display: flex;
  flex-direction: column;
  height: calc(100vh - var(--topbar-h) - 44px);
  width: 100%;
  margin: 0 auto;
  background: #0A1322;
  border: 1px solid var(--border);
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 8px 24px rgba(16, 24, 40, .07);
}

.chat-scroll {
  flex: 1;
  overflow-y: auto;
  padding: 16px 20px 20px;
  display: flex;
  flex-direction: column;
  gap: 18px;
}

/* ---------- 消息行：微信式左右分栏（自己=右侧，智能体=左侧） ---------- */

.msg {
  display: flex;
  gap: 10px;
  max-width: 100%;
  align-items: flex-start;
}

.msg-avatar {
  width: 32px; height: 32px;
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  font-size: calc(12px * var(--font-scale));
  font-weight: 700;
  color: #fff;
  margin-top: 2px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .32), 0 2px 5px rgba(31, 39, 51, .18);
}

/* 头像配色与企业制度问答屏对齐：智能体=品牌紫渐变，用户=蓝渐变 */
.msg-avatar.user { background: linear-gradient(135deg, #5b8def, #3b6fd4); }
.msg-avatar.agent { background: linear-gradient(135deg, #667eea, #8b5cf6); }

/* 气泡容器：随内容收缩 + 上限，避免撑满整行 */
.msg-bubble {
  flex: 0 1 auto;
  min-width: 0;
  max-width: min(76%, 640px);
}

.msg-text {
  position: relative;
  background: var(--card);
  border: 1px solid #24395B;
  border-radius: 4px 12px 12px 12px;
  padding: 10px 14px;
  font-size: calc(13.5px * var(--font-scale));
  line-height: 1.75;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
  display: inline-block;
  max-width: 100%;
  word-break: break-word;
  white-space: pre-wrap;
}

/* 智能体侧文本气泡：左上小尾巴（贴头像） */
.msg:not(.user) .msg-text::after {
  content: "";
  position: absolute;
  top: 11px;
  left: -6px;
  width: 0; height: 0;
  border-top: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-right: 7px solid var(--card);
}

/* 用户气泡：微信绿 + 右上小尾巴（与企业制度问答屏用户气泡同色） */
.msg.user { flex-direction: row-reverse; }
.msg.user .msg-text {
  background: #95ec69;
  border-color: #86d95c;
  color: #1a1a1a;
  border-radius: 12px 4px 12px 12px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.msg.user .msg-text::after {
  content: "";
  position: absolute;
  top: 11px;
  right: -6px;
  width: 0; height: 0;
  border-top: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 7px solid #95ec69;
}

/* 智能体侧：卡片类内容（流程面板 / 结果卡）保持较宽，左侧贴边 */
.msg-panel { min-width: 0; flex: 1; }

/* 窄屏：气泡上限放宽，避免频繁折行 */
@media (max-width: 960px) {
  .msg-bubble { max-width: 86%; }
  .msg-panel { max-width: 92%; }
  .chat-wrap { max-width: 100%; }
}

/* 事件流面板 */
.flow-panel {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}

.flow-head {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 10px 15px;
  background: linear-gradient(180deg, rgba(255, 255, 255, .045), rgba(255, 255, 255, .02));
  border-bottom: 1px solid var(--border);
  font-size: calc(12.5px * var(--font-scale));
  font-weight: 600;
  color: var(--text-2);
}

.flow-head .flow-state { margin-left: auto; font-size: calc(11.5px * var(--font-scale)); font-weight: 500; color: var(--text-3); display: flex; align-items: center; gap: 6px; }

.flow-body { padding: 12px 15px 14px; }

.flow-node { position: relative; padding-left: 26px; padding-bottom: 13px; }
.flow-node:last-child { padding-bottom: 0; }

.flow-node::before {
  content: "";
  position: absolute;
  left: 8px; top: 19px; bottom: -2px;
  width: 1.5px;
  background: var(--border);
}

.flow-node:last-child::before { display: none; }

.flow-node-dot {
  position: absolute;
  left: 0; top: 3px;
  width: 17px; height: 17px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .04);
  border: 2px solid var(--border-strong);
  display: flex; align-items: center; justify-content: center;
  color: #fff;
  z-index: 1;
}

.flow-node.ok > .flow-node-dot { border-color: #3FB950; background: #3FB950; }
.flow-node.degraded > .flow-node-dot { border-color: #D4A017; background: #D4A017; }
.flow-node.running > .flow-node-dot { border-color: var(--primary); }
.flow-node.running > .flow-node-dot::after {
  content: "";
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--primary);
  animation: pulse 1s ease infinite;
}

.flow-node-line {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: calc(13px * var(--font-scale));
  font-weight: 600;
  line-height: 1.5;
  flex-wrap: wrap;
}

.flow-node-label { color: var(--text); }
.flow-node.ok .flow-node-label { color: var(--text); }
.flow-node.degraded .flow-node-label { color: var(--warn); }

.flow-node-elapsed {
  font-size: calc(11px * var(--font-scale));
  color: var(--text-3);
  font-weight: 400;
  font-variant-numeric: tabular-nums;
}

.flow-node-summary { font-size: calc(12px * var(--font-scale)); color: var(--text-2); line-height: 1.65; margin-top: 4px; }

.flow-tool {
  display: flex;
  gap: 7px;
  font-size: calc(12px * var(--font-scale));
  color: var(--text-2);
  margin-top: 5px;
  line-height: 1.6;
  align-items: baseline;
}

.flow-tool-tag {
  flex-shrink: 0;
  font-size: calc(10.5px * var(--font-scale));
  background: rgba(255, 255, 255, .07);
  color: var(--text-3);
  border-radius: 4px;
  padding: 1px 6px;
  font-weight: 500;
  white-space: nowrap;
}

.flow-tool-tag.llm { background: var(--purple-bg); color: var(--purple); }
.flow-tool-tag.sql { background: var(--info-bg); color: var(--primary); }
.flow-tool-tag.rag { background: var(--ok-bg); color: var(--ok); }

.flow-parallel-group {
  border: 1px dashed var(--border-strong);
  border-radius: 9px;
  padding: 10px 12px 4px;
  margin: 2px 0 13px 26px;
  position: relative;
  background: rgba(255, 255, 255, .03);
}

.flow-parallel-group::before {
  content: "三域并行取证";
  position: absolute;
  top: -8px; left: 10px;
  font-size: calc(10.5px * var(--font-scale));
  background: rgba(255, 255, 255, .04);
  padding: 0 6px;
  color: var(--text-3);
  border: 1px solid var(--border);
  border-radius: 4px;
}

.flow-parallel-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }

.flow-parallel-cols .flow-node { padding-left: 24px; padding-bottom: 9px; }

/* 结果卡片 */
.result-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 10px;
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}

.result-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--border);
  background: linear-gradient(180deg, rgba(255, 255, 255, .045), rgba(255, 255, 255, .02));
  flex-wrap: wrap;
}

.result-title { font-size: calc(13.5px * var(--font-scale)); font-weight: 700; display: flex; align-items: center; gap: 8px; }
.result-head .badges { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap; }

.result-body { padding: 14px 16px; }

.brief-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 18px; }

.brief-item { display: flex; gap: 10px; padding: 7px 0; border-bottom: 1px dashed rgba(255, 255, 255, .07); font-size: calc(12.8px * var(--font-scale)); }
.brief-item:last-child { border-bottom: none; }
.brief-item .k { color: var(--text-3); width: 62px; flex-shrink: 0; }
.brief-item .v { color: var(--text); line-height: 1.6; word-break: break-all; }

/* 帮助中心「智能体可用工具」：工具名是长标识符（如 list_available_queries），
   不能沿用上面 .k 的固定 62px 列宽，否则名称溢出会与描述文字重叠。
   改为按内容自适应并加省略保护，窄屏自动换行。 */
.tool-row { align-items: baseline; }
.tool-row .k {
  width: auto; max-width: 46%; flex: 0 0 auto;
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
  font-size: calc(12.1px * var(--font-scale)); font-weight: 600; color: var(--primary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.tool-row .v { flex: 1 1 auto; min-width: 0; }
@media (max-width: 720px) {
  .tool-row { flex-wrap: wrap; }
  .tool-row .k { max-width: none; }
  .tool-row .v { flex-basis: 100%; }
}

.rating-pill {
  display: inline-flex;
  align-items: center; justify-content: center;
  min-width: 34px; height: 24px;
  border-radius: 6px;
  font-size: calc(14px * var(--font-scale)); font-weight: 800;
  padding: 0 7px;
}

.rating-A { background: var(--danger-bg); color: var(--danger); }
.rating-B { background: var(--warn-bg); color: var(--warn); }
.rating-C { background: var(--info-bg); color: var(--primary); }
.rating-D { background: var(--ok-bg); color: var(--ok); }

/* ---------- 异常三级配色（A5）+ 新信息层级（A1/A2/A3/A4） ---------- */

.result-card.level-normal { border-left: 3px solid var(--level-normal); }
.result-card.level-warn { border-left: 3px solid var(--level-warn); }
.result-card.level-alert { border-left: 3px solid var(--level-alert); }

.status-dot {
  width: 8px; height: 8px; border-radius: 50%;
  flex-shrink: 0; display: inline-block;
  background: var(--level-normal);
}
.status-dot.normal { background: var(--level-normal); }
.status-dot.warn { background: var(--level-warn); }
.status-dot.alert { background: var(--level-alert); box-shadow: 0 0 0 3px var(--level-alert-bg); }

/* 一句话结论（大字，动词开头） */
.head-line {
  font-size: calc(14.5px * var(--font-scale)); font-weight: 650; line-height: 1.7;
  color: var(--text);
  padding: 2px 0 10px;
  border-bottom: 1px dashed rgba(255, 255, 255, .07);
  margin-bottom: 10px;
}

/* 预计恢复时间 */
.eta-line {
  margin-top: 10px; font-size: calc(12.5px * var(--font-scale)); color: var(--text-2);
  display: flex; align-items: center; gap: 6px;
}
.eta-line b { color: var(--text); }

/* 建议动作条（A4） */
.action-bar {
  margin-top: 14px; padding: 11px 13px;
  background: var(--primary-light-2);
  border: 1px solid var(--border);
  border-radius: 9px;
}
.action-bar-title {
  font-size: calc(12.3px * var(--font-scale)); font-weight: 650; color: var(--text-2);
  display: flex; align-items: center; gap: 6px;
}
.action-btns { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 9px; }
.action-bar .act-chips { margin-bottom: 0; }

/* 建议动作条点击确认按钮后的定位高亮 */
@keyframes hitlFlash {
  0%, 100% { box-shadow: 0 0 0 0 rgba(24, 95, 165, 0); }
  25%, 75% { box-shadow: 0 0 0 4px rgba(24, 95, 165, .28); }
}
.hitl-card.hitl-flash { animation: hitlFlash 1.8s ease; border-color: var(--primary); }

/* 人工兜底卡的追问建议块 */
.fallback-suggest {
  margin-bottom: 12px; padding: 11px 13px;
  background: var(--primary-light-2);
  border: 1px solid var(--border);
  border-radius: 9px;
}
.fallback-suggest .act-chips { margin-bottom: 0; }

/* 其他角色关注字段（A6：折叠不丢数据） */
.other-fold {
  margin-top: 8px; border: 1px dashed var(--border-strong); border-radius: 9px;
}
.other-fold > summary {
  list-style: none; cursor: pointer; padding: 9px 13px;
  font-size: calc(12.3px * var(--font-scale)); color: var(--text-2); font-weight: 600;
  display: flex; align-items: center; gap: 8px;
}
.other-fold > summary::-webkit-details-marker { display: none; }
.other-fold > summary:hover { color: var(--primary); }
.other-fold > summary .fold-role {
  margin-left: auto; font-weight: 400; font-size: calc(11.3px * var(--font-scale)); color: var(--text-3);
}
.other-fold > .brief-grid { padding: 0 13px 10px; }

/* 报告正文折叠 */
.report-fold {
  margin-top: 12px; border: 1px solid var(--border); border-radius: 9px; overflow: hidden;
}
.report-fold > summary {
  list-style: none; cursor: pointer; padding: 10px 14px;
  font-size: calc(12.5px * var(--font-scale)); font-weight: 600; color: var(--text-2);
  background: rgba(255, 255, 255, .045); display: flex; align-items: center; gap: 8px;
}
.report-fold > summary::-webkit-details-marker { display: none; }
.report-fold > summary:hover { color: var(--primary); }
.report-fold > .report-block-body { padding: 12px 14px; }

/* 分析过程与数据来源（A3：默认折叠） */
.reason-fold { margin-top: 12px; border: 1px solid var(--border); border-radius: 9px; overflow: hidden; }
.reason-fold > summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: 8px;
  padding: 10px 14px; font-size: calc(12.5px * var(--font-scale)); font-weight: 600; color: var(--text-2);
  background: rgba(255, 255, 255, .045); user-select: none;
}
.reason-fold > summary::-webkit-details-marker { display: none; }
.reason-fold > summary:hover { color: var(--primary); }
.reason-fold > summary .prov-count { margin-left: auto; font-size: calc(11.5px * var(--font-scale)); font-weight: 400; color: var(--text-3); }
.reason-fold > summary svg { transition: transform .15s ease; }
.reason-fold[open] > summary svg { transform: rotate(90deg); }
.reason-body { padding: 11px 14px 13px; border-top: 1px solid var(--border); }

.reason-steps { display: flex; flex-direction: column; gap: 6px; }
.reason-step {
  display: flex; gap: 9px; font-size: calc(12.4px * var(--font-scale)); color: var(--text-2); line-height: 1.65;
}
.reason-step .step-idx { color: var(--primary); font-weight: 700; flex-shrink: 0; }
.reason-step b { color: var(--text); }
.reason-origin {
  margin-top: 10px; padding-top: 9px; border-top: 1px dashed rgba(255, 255, 255, .07);
  font-size: calc(12px * var(--font-scale)); color: var(--text-3);
}

/* 内层技术折叠：SQL 原文只在这里出现 */
.sql-fold { margin-top: 10px; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; background: rgba(255, 255, 255, .03); }
.sql-fold > summary {
  list-style: none; cursor: pointer; padding: 8px 12px;
  font-size: calc(11.8px * var(--font-scale)); color: var(--text-3); display: flex; align-items: center; gap: 8px;
}
.sql-fold > summary::-webkit-details-marker { display: none; }
.sql-fold > summary:hover { color: var(--primary); }
.sql-fold > summary .prov-count { margin-left: auto; font-size: calc(11.3px * var(--font-scale)); }
.sql-fold > .prov-body { border-top: 1px solid var(--border); background: rgba(255, 255, 255, .04); }

/* provenance 折叠面板 */
.prov { margin-top: 12px; border: 1px solid var(--border); border-radius: 9px; overflow: hidden; }

.prov > summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  font-size: calc(12.5px * var(--font-scale));
  font-weight: 600;
  color: var(--text-2);
  background: rgba(255, 255, 255, .045);
  user-select: none;
}

.prov > summary::-webkit-details-marker { display: none; }
.prov > summary:hover { color: var(--primary); }
.prov > summary .prov-count { margin-left: auto; font-size: calc(11.5px * var(--font-scale)); font-weight: 400; color: var(--text-3); }
.prov > summary svg { transition: transform .15s ease; }
.prov[open] > summary svg { transform: rotate(90deg); }

.prov-body { padding: 10px 14px 13px; border-top: 1px solid var(--border); }

.prov-item { padding: 9px 0; border-bottom: 1px dashed rgba(255, 255, 255, .07); }
.prov-item:last-child { border-bottom: none; }

.prov-item-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: calc(12.5px * var(--font-scale)); }
.prov-item-name { font-weight: 600; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: calc(12px * var(--font-scale)); }

.sql-block {
  margin-top: 7px;
  background: #0D1B33;
  border: 1px solid var(--border);
  border-radius: 7px;
  padding: 9px 12px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: calc(11.8px * var(--font-scale));
  line-height: 1.7;
  color: #9FC0E8;
  overflow-x: auto;
  white-space: pre-wrap;
  word-break: break-all;
}

.prov-item-meta { display: flex; gap: 14px; margin-top: 6px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); flex-wrap: wrap; }
.prov-item-meta b { font-weight: 500; }

.mask-flag { color: var(--warn); font-weight: 600; }

/* HITL 待确认卡片（对话流内） */
.hitl-card {
  border: 1px solid rgba(232, 185, 62, .35);
  background: linear-gradient(180deg, rgba(232, 185, 62, .10), rgba(232, 185, 62, .05));
  border-radius: 10px;
  padding: 14px 16px;
  box-shadow: var(--shadow-sm);
}

.hitl-card-head { display: flex; align-items: center; gap: 8px; font-size: calc(13px * var(--font-scale)); font-weight: 700; color: #E9C878; }
.hitl-card-prompt { font-size: calc(13px * var(--font-scale)); margin-top: 9px; line-height: 1.7; color: var(--text); }
.hitl-card-meta { font-size: calc(12px * var(--font-scale)); color: var(--text-2); margin-top: 7px; display: flex; flex-wrap: wrap; gap: 14px; }
.hitl-card-actions { display: flex; gap: 9px; margin-top: 12px; flex-wrap: wrap; }
.hitl-card-done {
  margin-top: 11px;
  font-size: calc(12.5px * var(--font-scale));
  color: var(--ok);
  display: flex;
  align-items: center;
  gap: 6px;
  font-weight: 500;
}

/* 输入区：与聊天区同色（#0A1322），1px 顶边框分隔，贴卡片底缘无圆角 */
.chat-inputbar {
  flex-shrink: 0;
  background: #0A1322;
  border: none;
  border-top: 1px solid rgba(255, 255, 255, .07);
  border-radius: 0;
  padding: 12px 20px 16px;
  box-shadow: none;
  margin-top: 0;
}

.chat-chips { display: flex; flex-wrap: wrap; gap: 7px; margin-bottom: 10px; }

.chat-input-row { display: flex; gap: 10px; align-items: flex-end; }

/* 输入 pill：全圆角 + 40px 高（与发送钮齐平），白底 #2E476C 细边 */
.chat-input {
  flex: 1;
  border: 1px solid #2E476C;
  border-radius: 999px;
  padding: 9px 16px;
  font-size: calc(13.5px * var(--font-scale));
  outline: none;
  resize: none;
  min-height: 40px;
  max-height: 120px;
  line-height: 1.45;
  transition: border .13s ease, box-shadow .13s ease;
  font-family: inherit;
  background: rgba(255, 255, 255, .04);
  color: var(--text);
}

.chat-input:focus { border-color: #8b5cf6; box-shadow: 0 0 0 3px rgba(139, 92, 246, .18); }

/* 发送钮：54×40 squircle + 品牌紫渐变；负右距让钮右缘贴卡片右缘 12px */
.chat-send {
  width: 54px; height: 40px;
  border-radius: 12px;
  background: linear-gradient(135deg, #6f76ed, #8265f3);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  box-shadow: 0 4px 12px rgba(102, 126, 234, .35);
  transition: filter .13s ease;
  margin-right: -8px;
}

.chat-send:hover { filter: brightness(1.06); }
.chat-send:disabled { background: #C7CBD3; cursor: not-allowed; box-shadow: none; }

.chat-hint { font-size: calc(11px * var(--font-scale)); color: var(--text-3); margin-top: 8px; text-align: center; }

/* 问数屏头部 */
.chat-screen-head { width: 100%; margin: 0 auto 12px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.chat-screen-head .page-title { font-size: calc(17px * var(--font-scale)); }
.chat-screen-head .head-extra { margin-left: auto; display: flex; gap: 8px; align-items: center; }

/* ============================================================
   预警中心
   ============================================================ */

.alert-item {
  display: flex;
  gap: 13px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--border);
  align-items: flex-start;
}

.alert-item:last-child { border-bottom: none; }
.alert-item:hover { background: rgba(255, 255, 255, .04); }

.alert-level {
  width: 34px; height: 34px;
  border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(11px * var(--font-scale)); font-weight: 800;
  flex-shrink: 0;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .65), 0 2px 6px rgba(16, 24, 40, .08);
}

.alert-level.P1 { background: linear-gradient(145deg, #FBDCDA, #FEEEED); color: var(--danger); box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 2px 6px rgba(207, 34, 46, .18); }
.alert-level.P2 { background: linear-gradient(145deg, #FBEFC9, #FEF8E3); color: var(--warn); box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 2px 6px rgba(212, 160, 23, .18); }

.alert-main { flex: 1; min-width: 0; }
.alert-title { font-size: calc(13.5px * var(--font-scale)); font-weight: 600; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.alert-detail { font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); line-height: 1.7; margin-top: 5px; }
.alert-tags { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; align-items: center; }
.alert-tags .tag-label { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
.alert-foot { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-top: 8px; display: flex; gap: 14px; flex-wrap: wrap; }

.alert-status { flex-shrink: 0; display: flex; flex-direction: column; align-items: flex-end; gap: 8px; }

/* ============================================================
   报告中心
   ============================================================ */

.report-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-items: start; }

.report-doc {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}

.report-doc-head {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--border);
}

.report-doc-head.internal { background: linear-gradient(180deg, rgba(59, 130, 246, .10), rgba(59, 130, 246, .05)); }
.report-doc-head.customer { background: linear-gradient(180deg, rgba(232, 185, 62, .10), rgba(232, 185, 62, .05)); }

.report-doc-title { font-size: calc(13.5px * var(--font-scale)); font-weight: 700; }
.report-doc-body { padding: 15px 17px; font-size: calc(13px * var(--font-scale)); line-height: 1.9; }

.customer-text { font-size: calc(13.5px * var(--font-scale)); line-height: 2.05; color: var(--text); text-align: justify; }

.mask-hl {
  background: linear-gradient(transparent 62%, #FFE9A8 62%);
  border-bottom: 1px dashed #D4A017;
  padding-bottom: 1px;
  cursor: help;
  font-weight: 500;
}

.mask-legend { margin-top: 12px; padding: 11px 14px; background: rgba(255, 255, 255, .045); border: 1px solid var(--border); border-radius: 8px; }
.mask-legend-title { font-size: calc(12px * var(--font-scale)); font-weight: 600; color: var(--text-2); margin-bottom: 7px; }
.mask-map-row { display: flex; flex-wrap: wrap; gap: 7px; }

.mask-map-item { font-size: calc(11.5px * var(--font-scale)); background: rgba(255, 255, 255, .04); border: 1px solid var(--border); border-radius: 6px; padding: 3px 9px; color: var(--text-2); }
.mask-map-item s { color: var(--danger); margin-right: 5px; }
.mask-map-item b { color: var(--warn); font-weight: 600; }

.version-item { display: flex; gap: 12px; padding: 12px 18px; border-bottom: 1px solid var(--border); align-items: flex-start; transition: background .13s ease; }
.version-item:last-child { border-bottom: none; }
.version-item:hover { background: rgba(255, 255, 255, .04); }

.version-dot {
  width: 9px; height: 9px; border-radius: 50%;
  margin-top: 6px;
  flex-shrink: 0;
  background: var(--primary);
  box-shadow: 0 0 0 3px var(--primary-light);
}

.version-main { flex: 1; }
.version-title { font-size: calc(13px * var(--font-scale)); font-weight: 600; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.version-meta { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-top: 4px; display: flex; gap: 14px; flex-wrap: wrap; }
.version-note { font-size: calc(12px * var(--font-scale)); color: var(--text-2); margin-top: 5px; line-height: 1.6; }

/* ============================================================
   HITL 审批中心
   ============================================================ */

.hitl-layout { display: grid; grid-template-columns: 380px 1fr; gap: 14px; align-items: start; }

/* ---------- 两栏独立滚动（仅审批中心 · 由 .hitl-screen 专属作用域约束，
   不影响其他 5 屏的 .content 整页滚动） ----------
   思路：.hitl-screen 撑满 .content 内容区（高度确定），
   .hitl-layout 用 flex:1 + min-height:0 拿到确定可用高度，
   左右两栏各自 overflow-y:auto + min-height:0 独立滚动。 */
.hitl-screen {
  /* 100vh - 顶栏 58px - .content 上下内边距(22+40)，恰好填满可视区、不产生整页滚动 */
  height: calc(100vh - var(--topbar-h) - 62px);
  display: flex;
  flex-direction: column;
}

.hitl-screen .hitl-layout {
  flex: 1;
  min-height: 0;
  align-items: stretch; /* 两栏等高、各自占满可用高度 */
}

/* 左栏：card 作为 flex 列容器（标题区固定 + 列表区滚动） */
.hitl-screen .hitl-layout > .card {
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
}

/* 列表标题不随列表滚动消失（防御性 sticky：滚动容器若回退到 card 也生效） */
.hitl-screen .hitl-layout > .card > .card-head {
  flex-shrink: 0;
  position: sticky;
  top: 0;
  background: linear-gradient(180deg, rgba(255, 255, 255, .04), rgba(255, 255, 255, .02));
  z-index: 2;
}

/* 左栏滚动容器：#hitl-list 自身（grid 子项滚动必须配 min-height:0） */
.hitl-screen #hitl-list {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
}

/* 右栏滚动容器：#hitl-detail 自身（内部 .card card-pad 不设溢出，单层滚动条） */
.hitl-screen #hitl-detail {
  min-height: 0;
  overflow-y: auto;
}

.hitl-list-item {
  padding: 13px 16px;
  border-bottom: 1px solid var(--border);
  cursor: pointer;
  border-left: 3px solid transparent;
  transition: background .12s ease;
}

.hitl-list-item:last-child { border-bottom: none; }
.hitl-list-item:hover { background: rgba(255, 255, 255, .045); }
.hitl-list-item.selected {
  background: var(--primary-light-2);
  border-left-color: var(--primary);
  box-shadow: inset 0 0 0 1px rgba(var(--primary-rgb), .25);
}
.hitl-list-item.processed { opacity: .72; }

/* 我的待办：置顶醒目（左侧警示色边 + 浅色底，顶部“我的待办”旗标） */
.hitl-list-item.mine { border-left-color: var(--danger); background: rgba(244, 105, 107, .10); }
.hitl-list-item.mine:hover { background: rgba(244, 105, 107, .16); }
.hitl-list-item.mine.selected { background: var(--primary-light-2); border-left-color: var(--primary); }
.hli-mine-flag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: calc(10.5px * var(--font-scale));
  font-weight: 700;
  color: #fff;
  background: linear-gradient(135deg, #E5484D, #CF222E);
  border-radius: 999px;
  padding: 2px 9px;
  margin-bottom: 6px;
  letter-spacing: .3px;
  box-shadow: 0 2px 5px rgba(207, 34, 46, .28);
}

/* 待办搜索框 */
.hitl-search {
  position: relative;
  padding: 10px 14px;
  border-bottom: 1px solid var(--border);
}
.hitl-search input {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 7px 30px 7px 32px;
  font-size: calc(12.3px * var(--font-scale));
  background: rgba(255, 255, 255, .05);
  color: var(--text);
  outline: none;
  transition: border-color .12s ease, box-shadow .12s ease;
}
.hitl-search input:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 3px var(--primary-light-2);
  background: rgba(255, 255, 255, .04);
}
.hitl-search::before {
  content: "";
  position: absolute;
  left: 25px;
  top: 50%;
  transform: translateY(calc(-50% - 5px));
  width: 13px;
  height: 13px;
  pointer-events: none;
  opacity: .45;
  background: no-repeat center/contain url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%239FB1C9" stroke-width="2.2" stroke-linecap="round"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.35-4.35"/></svg>');
}
.hitl-search-clear {
  position: absolute;
  right: 21px;
  top: 50%;
  transform: translateY(-50%);
  border: none;
  background: transparent;
  color: var(--text-3);
  font-size: calc(12px * var(--font-scale));
  cursor: pointer;
  padding: 3px 5px;
  line-height: 1;
  border-radius: 4px;
}
.hitl-search-clear:hover { color: var(--text); background: rgba(0,0,0,.05); }

.hli-title { font-size: calc(13px * var(--font-scale)); font-weight: 600; line-height: 1.55; display: flex; gap: 7px; align-items: center; flex-wrap: wrap; }
.hli-meta { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-top: 5px; display: flex; gap: 10px; flex-wrap: wrap; font-variant-numeric: tabular-nums; }
.hli-sla { margin-top: 8px; }

.sla-row { display: flex; align-items: center; gap: 9px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.sla-row .progress { flex: 1; }
.sla-time { font-variant-numeric: tabular-nums; white-space: nowrap; font-weight: 600; }
.sla-time.over { color: var(--danger); }
.sla-time.warn { color: var(--warn); }
.sla-time.ok { color: var(--ok); }

.hitl-detail-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.hitl-detail-title { font-size: calc(15px * var(--font-scale)); font-weight: 700; line-height: 1.5; }

.hitl-ctx-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 18px; margin-top: 4px; }

.hitl-actions-bar {
  display: flex;
  gap: 10px;
  margin-top: 15px;
  padding-top: 15px;
  border-top: 1px dashed var(--border);
  align-items: center;
  flex-wrap: wrap;
}

.hitl-comment { flex: 1; min-width: 220px; }

.processed-banner {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--ok-bg);
  border: 1px solid rgba(63, 203, 121, .35);
  border-radius: 8px;
  padding: 11px 14px;
  font-size: calc(12.8px * var(--font-scale));
  color: var(--ok);
  margin-top: 14px;
  line-height: 1.6;
}

.processed-banner.rejected { background: var(--danger-bg); border-color: rgba(244, 105, 107, .40); color: var(--danger); }

.history-list { margin-top: 10px; }
.history-item { display: flex; gap: 9px; font-size: calc(12px * var(--font-scale)); color: var(--text-2); padding: 5px 0; align-items: baseline; }
.history-item .h-action { font-weight: 600; color: var(--text); white-space: nowrap; }
.history-item .h-ts { color: var(--text-3); font-size: calc(11px * var(--font-scale)); white-space: nowrap; font-variant-numeric: tabular-nums; }

/* ============================================================
   Toast
   ============================================================ */

.toast-root {
  position: fixed;
  top: 18px; left: 50%;
  transform: translateX(-50%);
  z-index: 1000;
  display: flex;
  flex-direction: column;
  gap: 9px;
  pointer-events: none;
}

.toast {
  display: flex;
  align-items: center;
  gap: 9px;
  background: rgba(22, 39, 63, .94);
  backdrop-filter: blur(8px);
  border: 1px solid var(--border-strong);
  border-radius: 12px;
  padding: 11px 18px;
  font-size: calc(13px * var(--font-scale));
  box-shadow: var(--shadow-pop);
  animation: toast-in .25s cubic-bezier(.2, .9, .3, 1.2);
  max-width: 460px;
}

.toast.ok { border-color: rgba(63, 203, 121, .35); }
.toast.ok svg { color: var(--ok); }
.toast.err { border-color: rgba(244, 105, 107, .40); }
.toast.err svg { color: var(--danger); }
.toast.info svg { color: var(--primary); }

.toast.leaving { animation: toast-out .25s ease forwards; }

@keyframes toast-in { from { opacity: 0; transform: translateY(-12px) scale(.96); } }
@keyframes toast-out { to { opacity: 0; transform: translateY(-10px) scale(.97); } }

/* ============================================================
   响应式兜底
   ============================================================ */

@media (max-width: 1180px) {
  .grid-4 { grid-template-columns: repeat(2, 1fr); }
  .hitl-layout { grid-template-columns: 1fr; }
  .report-cols { grid-template-columns: 1fr; }
  .brief-grid { grid-template-columns: 1fr; }
  .hitl-ctx-grid { grid-template-columns: 1fr; }
  /* 窄屏单栏堆叠：恢复为正常整页滚动（两栏各占一半高度在窄屏很难用） */
  .hitl-screen { height: auto; display: block; }
  .hitl-screen .hitl-layout { flex: none; }
  .hitl-screen .hitl-layout > .card,
  .hitl-screen .hitl-layout > .card > .card-head { overflow: visible; position: static; }
  .hitl-screen #hitl-list,
  .hitl-screen #hitl-detail { overflow: visible; }
}

@media (max-width: 960px) {
  .sidebar { width: 64px; }
  .brand-text, .nav-item span, .sidebar-foot, .nav-group-label { display: none; }
  .nav-item { justify-content: center; padding: 9px 0; }
  .topbar-sub, .user-meta { display: none; }
  .topbar-search { width: 170px; }
}

/* ============================================================
   登录页（账号固定 admin + 密码/验证码 → 选择岗位身份）
   ============================================================ */

.login-root {
  position: fixed;
  inset: 0;
  z-index: 200;
  background:
    radial-gradient(820px 520px at 12% -8%, rgba(46, 127, 224, .16), transparent 60%),
    radial-gradient(760px 480px at 96% 108%, rgba(34, 197, 140, .07), transparent 60%),
    radial-gradient(600px 400px at 88% -6%, rgba(130, 80, 223, .10), transparent 60%),
    linear-gradient(180deg, #0D1930 0%, #0B1526 100%);
  display: flex;
  align-items: stretch;
  justify-content: stretch;
  padding: 0;
  overflow: auto;
}
.login-root[hidden] { display: none; }

/* 自适应铺满：不再固定 1400px 卡片，随视口铺满整屏（宽屏用满、窄屏单栏） */
.login-shell {
  display: grid;
  grid-template-columns: minmax(360px, 440px) minmax(0, 1fr);
  width: 100%;
  max-width: none;
  min-height: 100vh;
  background: var(--card);
  border: none;
  border-radius: 0;
  overflow: hidden;
  box-shadow: none;
}

.login-brand {
  background:
    radial-gradient(460px 320px at -12% -4%, rgba(var(--primary-rgb), .30), transparent 62%),
    radial-gradient(420px 320px at 112% 104%, rgba(130, 80, 223, .12), transparent 55%),
    linear-gradient(165deg, #0D1B30 0%, #10233F 55%, #0B1830 100%);
  border-right: 1px solid rgba(255, 255, 255, .06);
  color: #fff;
  padding: 44px 40px 34px;
  display: flex;
  flex-direction: column;
  gap: 26px;
}
.login-brand-top { display: flex; align-items: center; gap: 12px; }
.login-logo {
  width: 42px; height: 42px; border-radius: 12px;
  /* 与侧栏 .brand-logo 同款：品牌蓝渐变 + 白色图标（不随主题翻转变淡） */
  background: linear-gradient(135deg, var(--primary-bright) 0%, var(--primary) 55%, var(--primary-dark) 100%);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 14px rgba(var(--primary-rgb), .45), inset 0 1px 0 rgba(255, 255, 255, .28);
}
.login-brand-name { font-size: calc(17.5px * var(--font-scale)); font-weight: 700; letter-spacing: .4px; }
.login-brand-sub { font-size: calc(12px * var(--font-scale)); opacity: .85; letter-spacing: .4px; margin-top: 3px; }
.login-brand-body h1 { font-size: calc(26px * var(--font-scale)); line-height: 1.5; font-weight: 700; letter-spacing: .3px; text-shadow: 0 0 20px rgba(var(--primary-rgb), .35); }
.login-brand-body p { font-size: calc(13.5px * var(--font-scale)); opacity: .85; margin-top: 12px; line-height: 1.7; }
.login-points { list-style: none; margin-top: 24px; display: flex; flex-direction: column; gap: 12px; }
.login-points li {
  display: flex; gap: 12px; font-size: calc(13px * var(--font-scale)); line-height: 1.7;
  background: rgba(255, 255, 255, .04);
  border: 1px solid rgba(255, 255, 255, .08);
  border-radius: 10px;
  padding: 11px 13px;
  transition: border-color .16s ease, background .16s ease;
}
.login-points li:hover { border-color: rgba(96, 165, 250, .40); background: rgba(255, 255, 255, .06); }
.login-points li > span {
  flex: none; width: 24px; height: 24px; border-radius: 7px;
  background: linear-gradient(145deg, var(--primary-bright), var(--primary)); border: none;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(11px * var(--font-scale)); font-weight: 600; color: #fff;
  box-shadow: 0 2px 8px rgba(var(--primary-rgb), .45), inset 0 1px 0 rgba(255, 255, 255, .3);
}
.login-points b { display: block; font-weight: 650; margin-bottom: 2px; color: #F2F7FE; }
.login-brand-foot {
  margin-top: auto; padding-top: 18px; border-top: 1px solid rgba(255, 255, 255, .10);
  font-size: calc(12.5px * var(--font-scale)); opacity: .8;
}

.login-panel { padding: 34px 36px 26px; display: flex; flex-direction: column; min-width: 0; }
.login-panel-head h2 { font-size: calc(22px * var(--font-scale)); font-weight: 650; letter-spacing: .2px; }
.login-panel-head p { font-size: calc(13.5px * var(--font-scale)); color: var(--text-2); margin-top: 7px; line-height: 1.7; max-width: 640px; }

/* ---------- 登录守卫凭证区（账号/密码/验证码；公网防刷） ---------- */

.login-cred {
  margin-top: 16px;
  padding: 14px 14px 13px;
  border: 1px solid var(--border);
  border-radius: 12px;
  background: var(--bg-sub);
  display: flex; flex-direction: column; gap: 9px;
}
.login-cred[hidden] { display: none; }
.login-cred .cred-row { display: flex; align-items: center; gap: 10px; min-width: 0; }
.login-cred .cred-label {
  flex: none; width: 44px;
  font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); text-align: right;
}
.login-cred .cred-input {
  flex: 1; min-width: 0; height: 36px;
  padding: 0 11px;
  border: 1px solid var(--border-strong);
  border-radius: 9px;
  background: var(--card);
  color: var(--text);
  font: inherit; font-size: calc(13.5px * var(--font-scale));
  outline: none;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.login-cred .cred-input::placeholder { color: var(--text-3); }
.login-cred .cred-input:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 3px rgba(var(--primary-rgb), .18);
}
.login-cred .cred-captcha-img {
  flex: none; height: 36px; min-width: 112px;
  border: 1px solid var(--border-strong);
  border-radius: 9px;
  cursor: pointer;
  display: block;
  background: #F4F7FC;
  transition: border-color .15s ease, opacity .15s ease;
}
.login-cred .cred-captcha-img:hover { border-color: var(--primary); opacity: .92; }
/* 守卫关闭 / 后端离线时不展示验证码行（密码仍必须手动输入） */
.login-cred .cred-row[hidden] { display: none; }

/* ---------- 登录第一阶段：全屏沉浸式（无悬浮卡片 / 窗口边框） ---------- */

.login-panel.auth-stage {
  justify-content: center;
  padding: 44px 56px;
  position: relative;
}
/* 表单背后的柔和光晕：内容与整屏背景连成一体，而不是浮在一块卡片上 */
.login-panel.auth-stage::before {
  content: "";
  position: absolute; inset: 0;
  background:
    radial-gradient(520px 380px at 22% 42%, rgba(var(--primary-rgb), .16), transparent 70%),
    radial-gradient(420px 320px at 82% 78%, rgba(130, 80, 223, .08), transparent 70%);
  pointer-events: none;
}
.login-panel.auth-stage > * { position: relative; z-index: 1; }

.login-auth {
  width: 100%; max-width: 400px; margin: 0 auto;
  display: flex; flex-direction: column; gap: 28px;
}
.login-auth-eyebrow {
  font-size: calc(11.5px * var(--font-scale)); font-weight: 600;
  letter-spacing: 2.4px; color: var(--primary);
  margin-bottom: 12px;
}
.login-auth .login-panel-head h2 {
  font-size: calc(30px * var(--font-scale)); font-weight: 680; letter-spacing: .4px;
}
.login-auth .login-panel-head p { margin-top: 10px; max-width: none; }
/* 去掉凭证区的边框 / 底色 / 阴影：字段直接落在整屏背景上 */
.login-auth .login-cred {
  margin: 0; padding: 0; gap: 15px;
  border: none; border-radius: 0; background: none; box-shadow: none;
}
.login-auth .login-cred .cred-row { gap: 12px; }
.login-auth .login-cred .cred-label { width: 46px; }
.login-auth .cred-input,
.login-auth .cred-static,
.login-auth .cred-captcha-img { height: 42px; border-radius: 10px; }
.login-auth .cred-input {
  padding: 0 14px;
  background: rgba(255, 255, 255, .045);
}
html[data-theme="light"] .login-auth .cred-input { background: #FFFFFF; }
/* 账号只读展示（固定 admin，不可编辑：暂不支持注册 / 改账号） */
.login-cred .cred-static {
  flex: 1; min-width: 0;
  display: flex; align-items: center;
  padding: 0 14px;
  border: 1px dashed var(--border-strong);
  border-radius: 10px;
  background: rgba(255, 255, 255, .03);
  color: var(--text);
  font-size: calc(13.5px * var(--font-scale));
  letter-spacing: .5px; font-weight: 600;
}
html[data-theme="light"] .login-cred .cred-static { background: #F6F9FD; }
.login-auth .cred-captcha-img { min-width: 124px; }
.login-auth-foot { display: flex; flex-direction: column; gap: 13px; }
.login-enter-block {
  width: 100%; justify-content: center;
  padding: 13px 22px;
  font-size: calc(14.5px * var(--font-scale));
  border-radius: 10px;
}
.login-auth-hint {
  text-align: center;
  font-size: calc(12px * var(--font-scale)); color: var(--text-3); line-height: 1.6;
}

.role-grid {
  margin: 18px 0 16px;
  max-height: calc(100vh - 300px);
  min-height: 380px;
  overflow: auto;
  padding: 3px;
}
/* 组标题 sticky：滚动时当前域标题始终可见（分组方案的核心价值）。
   top 偏移 3px = .role-grid 的 padding，避免标题被容器上沿切掉。 */
.role-group-title {
  position: sticky; top: 3px; z-index: 2;
  margin: 14px 0 9px;
  background: var(--card);          /* 与 .login-shell 同色，滚动时不透出下层卡片 */
  padding: 4px 0 5px;
}
.role-grid > .role-group-title:first-child { margin-top: 0; }
.role-group-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(276px, 1fr));
  gap: 12px;
}
.role-card {
  display: flex; align-items: flex-start; gap: 11px;
  text-align: left; cursor: pointer;
  background: var(--card);
  border: 1.5px solid var(--border);
  border-radius: 12px;
  padding: 13px 13px 12px;
  transition: border-color .16s ease, background .16s ease, box-shadow .16s ease;
  font: inherit; color: inherit;
}
.role-card:hover { border-color: rgba(96, 165, 250, .55); background: rgba(255, 255, 255, .04); }
.role-card.selected {
  border-color: var(--primary);
  background: var(--primary-light-2);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, .22);
}
.role-avatar {
  flex: none; width: 38px; height: 38px; border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(15px * var(--font-scale)); font-weight: 600; color: #fff;
  background: var(--primary);
}
.role-avatar.tone-blue { background: #185FA5; }
.role-avatar.tone-green { background: #3FCB79; }
.role-avatar.tone-amber { background: #E3B341; }
.role-avatar.tone-teal { background: #0F6E56; }
.role-avatar.tone-purple { background: #8250DF; }
.role-avatar.tone-coral { background: #B3542E; }
.role-avatar.tone-gray { background: #5F6B7A; }
.role-avatar.tone-indigo { background: #3D4EA8; }
.role-avatar.tone-olive { background: #5D7012; }
/* 4+ 字符缩写（SALES / PROC）在 38px 方块内需缩字号，避免换行或溢出 */
.role-avatar.wide { font-size: calc(10.5px * var(--font-scale)); letter-spacing: -.2px; font-weight: 700; }
.avatar.wide { font-size: calc(9px * var(--font-scale)); letter-spacing: -.3px; font-weight: 700; }
.role-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1; }
.role-name { font-size: calc(14.5px * var(--font-scale)); font-weight: 650; color: var(--text); }
.role-user { font-size: calc(12px * var(--font-scale)); color: var(--text-2); }
.role-scope { font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); margin-top: 2px; }
.role-scenarios { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 5px; }
.role-scenarios em {
  font-style: normal; font-size: calc(12px * var(--font-scale)); color: var(--primary);
  background: var(--primary-light); border-radius: 5px; padding: 2px 7px;
}
.role-tick {
  flex: none; width: 20px; height: 20px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--primary); color: #fff; opacity: 0; transform: scale(.85);
  transition: opacity .16s ease, transform .16s ease; margin-top: 2px;
}
.role-card.selected .role-tick { opacity: 1; transform: scale(1); }

.login-panel-foot {
  margin-top: auto; padding-top: 16px; border-top: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
}
.login-selected { font-size: calc(13px * var(--font-scale)); color: var(--text-2); }
.login-enter {
  display: inline-flex; align-items: center; gap: 7px;
  background: linear-gradient(180deg, var(--primary-bright), var(--primary)); color: #fff; border: none;
  border-radius: 10px; padding: 10px 22px;
  font-size: calc(13.5px * var(--font-scale)); font-weight: 600; cursor: pointer;
  box-shadow: 0 2px 4px rgba(16, 24, 40, .14), 0 6px 16px rgba(27, 102, 204, .28);
  transition: all .16s ease;
}
.login-enter:hover:not(:disabled) {
  background: linear-gradient(180deg, var(--primary-bright), var(--primary-dark));
  box-shadow: 0 4px 8px rgba(16, 24, 40, .14), 0 10px 22px rgba(27, 102, 204, .34);
  transform: translateY(-1px);
}
.login-enter:active:not(:disabled) { transform: translateY(1px); }
.login-enter:disabled { background: var(--border-strong); cursor: not-allowed; color: #fff; opacity: .8; }

/* ---------- 顶栏用户菜单 ---------- */

.user-menu {
  position: absolute; top: 46px; right: 0; width: 244px;
  background: var(--card); border: 1px solid var(--border);
  border-radius: 12px; box-shadow: var(--shadow-pop);
  overflow: hidden; z-index: 120;
}
.user-menu-head { padding: 13px 15px 11px; border-bottom: 1px solid var(--border); }
.user-menu-name { font-size: calc(13.5px * var(--font-scale)); font-weight: 650; }
.user-menu-role { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-top: 2px; }
.user-menu-scope { font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); margin-top: 6px; }
.user-menu-item {
  display: block; width: 100%; text-align: left;
  background: none; border: none; font: inherit;
  font-size: calc(12.8px * var(--font-scale)); color: var(--text); padding: 10px 15px; cursor: pointer;
}
.user-menu-item:hover { background: var(--primary-light-2); }
.user-menu-item.danger { color: var(--danger); border-top: 1px solid var(--border); }
.user-menu-item.danger:hover { background: var(--danger-bg); }
/* 权限目录加载失败的用户可见提示（不能静默：用户要知道门控提示暂时不准） */
.user-menu-perms-err {
  padding: 9px 15px; font-size: calc(11.5px * var(--font-scale)); line-height: 1.65;
  color: var(--warn); background: var(--warn-bg);
  border-bottom: 1px solid var(--border);
}

@media (max-width: 980px) {
  .login-shell { grid-template-columns: 1fr; }
  .login-brand { display: none; }
  .login-panel { padding: 28px 22px 22px; }
  .login-panel.auth-stage { padding: 28px 22px 30px; }
  .login-auth { max-width: 420px; margin: 0 auto; }
  .role-grid { max-height: 62vh; }
}

/* ---------- 处置动作（按岗位权限） ---------- */

.act-chips { display: flex; flex-wrap: wrap; gap: 7px; margin: 6px 0 8px; }
.act-chip {
  display: inline-flex; align-items: center; gap: 5px;
  border: 1px solid var(--border-strong); background: rgba(255, 255, 255, .04); color: var(--text);
  border-radius: 8px; padding: 5px 10px; font-size: calc(12.5px * var(--font-scale)); cursor: pointer;
  transition: border-color .15s ease, background .15s ease, color .15s ease;
}
.act-chip:hover:not(.disabled) { border-color: var(--primary); color: var(--primary); background: var(--primary-light-2); }
.act-chip.selected {
  border-color: var(--primary); background: var(--primary-light); color: var(--primary-deep);
  font-weight: 600; box-shadow: 0 0 0 2px rgba(24, 95, 165, .10);
}
.act-chip.disabled { opacity: .45; cursor: not-allowed; background: rgba(255, 255, 255, .04); }
.act-chip em {
  font-style: normal; font-size: calc(10.5px * var(--font-scale)); background: rgba(255, 255, 255, .04); border: 1px solid var(--border);
  border-radius: 4px; padding: 0 4px; color: var(--text-3);
}
.act-detail {
  font-size: calc(12px * var(--font-scale)); color: var(--text-2); background: rgba(255, 255, 255, .045);
  border: 1px dashed var(--border); border-radius: 8px;
  padding: 8px 10px; line-height: 1.7; margin-bottom: 8px;
}
.act-detail b { color: var(--text); }
.act-req { color: var(--warn); }
.act-comment { margin: 4px 0 8px; }

/* ---------- 多人会签面板（进度 · 会签人 · 会签按钮） ---------- */

.signoff-panel {
  margin: 6px 0 10px; padding: 9px 11px;
  background: rgba(255, 255, 255, .045); border: 1px solid var(--border); border-radius: 8px;
}
.signoff-head { font-size: calc(12px * var(--font-scale)); color: var(--text-2); margin-bottom: 6px; }
.signoff-head b { color: var(--primary-deep); font-size: calc(13px * var(--font-scale)); }
.signoff-row {
  display: flex; align-items: center; gap: 8px;
  font-size: calc(12px * var(--font-scale)); line-height: 1.9;
}
.signoff-role {
  min-width: 62px; font-weight: 600; color: var(--text);
}
.signoff-state { color: var(--text-3); display: inline-flex; align-items: center; gap: 3px; }
.signoff-row.signed .signoff-state { color: var(--success, #1f9254); }
.signoff-note { margin-top: 6px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
.signoff-note.warn { color: var(--warn); }
.signoff-note.ok { color: var(--success, #1f9254); }
.signoff-actions { margin-top: 8px; }
.gate-hint {
  margin-top: 8px; font-size: calc(11.5px * var(--font-scale)); color: var(--warn);
  display: flex; align-items: center; gap: 4px;
}
.btn:disabled, .btn[disabled] { opacity: .5; cursor: not-allowed; }

/* ============================================================
   V3 UX：今日简报 / KPI 下钻 / 问数历史 / 审批常用语 / 打印
   ============================================================ */

/* 今日简报（事找人） */
.briefing {
  background: linear-gradient(135deg, rgba(59, 130, 246, .14) 0%, rgba(59, 130, 246, .06) 100%);
  border: 1px solid rgba(96, 165, 250, .30);
  border-radius: 12px;
  padding: 12px 16px;
  margin-bottom: 6px;
}
.briefing-head {
  display: flex; align-items: center; gap: 7px;
  font-size: calc(13px * var(--font-scale)); font-weight: 650; color: var(--primary-deep);
}
.briefing-head .section-extra { margin-left: auto; font-weight: 400; }
.briefing-items { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 9px; }
.briefing-item {
  display: inline-flex; align-items: center; gap: 6px;
  background: rgba(255, 255, 255, .04); border: 1px solid var(--border);
  border-radius: 8px; padding: 6px 11px;
  font-size: calc(12.3px * var(--font-scale)); color: var(--text); cursor: pointer; font: inherit;
  transition: border-color .15s ease, transform .1s ease;
}
.briefing-item:hover { border-color: var(--primary); transform: translateY(-1px); }
.briefing-item.hot { border-color: var(--primary); background: var(--primary-light-2); }
.briefing-item.danger { border-color: var(--danger); background: var(--danger-bg); color: var(--danger); }
.briefing-item b { font-weight: 650; }
.empty-inline { font-size: calc(12.3px * var(--font-scale)); color: var(--text-3); display: inline-flex; align-items: center; gap: 6px; }

/* KPI 卡下钻 */
.stat-clickable { cursor: pointer; text-align: left; font: inherit; color: inherit;
  transition: border-color .15s ease, box-shadow .15s ease, transform .1s ease; }
.stat-clickable:hover { border-color: var(--primary); box-shadow: 0 4px 14px rgba(24,95,165,.10); transform: translateY(-2px); }
/* KPI 卡内「问数」按钮（主体点击=下钻，此按钮=跳协同问数，互不干扰） */
.stat-ask-btn {
  margin-top: 7px; align-self: flex-start;
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 9px; border-radius: 999px;
  border: 1px solid var(--primary); background: transparent;
  color: var(--primary); font: inherit; font-size: calc(11px * var(--font-scale)); font-weight: 550;
  cursor: pointer; white-space: nowrap;
  transition: background .13s ease, color .13s ease;
}
.stat-ask-btn:hover { background: var(--primary); color: #fff; }

/* R8：KPI 卡「口径」入口与问数按钮并排；口径按钮不抢主体下钻 */
.stat-actions { display: flex; gap: 6px; margin-top: 7px; flex-wrap: wrap; }
.stat-actions .stat-ask-btn { margin-top: 0; }
.stat-def-btn {
  align-self: flex-start;
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 9px; border-radius: 999px;
  border: 1px solid var(--border); background: transparent;
  color: var(--text-2); font: inherit;
  font-size: calc(11px * var(--font-scale)); font-weight: 550;
  cursor: pointer; white-space: nowrap;
  transition: background .13s ease, color .13s ease, border-color .13s ease;
}
.stat-def-btn:hover { background: var(--bg-sub); color: var(--primary); border-color: var(--primary); }
.prov-dict { margin-left: auto; }

/* R8：帮助中心口径词典 */
.help-dict-bar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 10px; }
.help-dict-search {
  flex: 1 1 280px; min-width: 220px; height: 32px; padding: 0 12px;
  border: 1px solid var(--border); border-radius: 8px;
  background: var(--bg-sub); color: var(--text);
  font: inherit; font-size: calc(12.5px * var(--font-scale));
}
.help-dict-search:focus { outline: none; border-color: var(--primary); }
.help-dict-filters { display: flex; gap: 6px; flex-wrap: wrap; }
.help-dict-chip {
  padding: 5px 11px; border-radius: 999px;
  border: 1px solid var(--border); background: transparent;
  color: var(--text-2); font: inherit;
  font-size: calc(11.5px * var(--font-scale)); cursor: pointer;
}
.help-dict-chip.is-active { background: var(--primary-light-2); color: var(--primary); border-color: var(--primary); }
.help-dict-row {
  padding: 10px 0; border-bottom: 1px solid var(--border);
}
.help-dict-row:last-child { border-bottom: none; }
.help-dict-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.help-dict-head b { color: var(--text); font-size: calc(13px * var(--font-scale)); }
.help-dict-head code { color: var(--text-3); font-size: calc(11px * var(--font-scale)); }
.help-dict-def { margin-top: 5px; color: var(--text-2); font-size: calc(12.3px * var(--font-scale)); line-height: 1.7; }
.help-dict-meta { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 4px; color: var(--text-3); font-size: calc(11.5px * var(--font-scale)); }
.help-dict-refs { margin-top: 3px; color: var(--text-3); font-size: calc(11.5px * var(--font-scale)); line-height: 1.6; }
.help-dict-open { margin-top: 5px; background: transparent; border: none; padding: 0; cursor: pointer; }

/* 问数历史 */
.chat-history {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  padding: 4px 2px 0;
}
.chat-history-label { font-size: calc(11px * var(--font-scale)); color: var(--text-3); display: inline-flex; gap: 4px; align-items: center; }
.chip-hist { background: rgba(255, 255, 255, .045); border-color: var(--border); }
.chip-hist:hover { border-color: var(--primary); color: var(--primary); }

/* 审批常用语 */
.quick-comments { display: flex; flex-wrap: wrap; gap: 6px; margin: 5px 0 7px; }
.chip-cmt { background: rgba(255, 255, 255, .045); border-color: var(--border); font-size: calc(11.3px * var(--font-scale)); }
.chip-cmt:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-light-2); }

/* 打印样式（报告中心导出 PDF：@media print，PRD 裁定 3 前端部分） */
@media print {
  .sidebar, .topbar, .toast-root, .chat-inputbar, .chat-chips,
  .chat-history, .quick-comments, .hitl-card-actions, .btn, .link-btn,
  .quick-entry, .briefing, .search-hit { display: none !important; }
  .app { display: block; }
  .content { margin: 0 !important; padding: 0 !important; }
  .card, .hitl-card, .report-block, .content-inner {
    box-shadow: none !important; border: 1px solid #ccc !important;
    break-inside: avoid; max-width: 100% !important;
  }
  /* 聊天卡片是灰底设计：打印/导出 PDF 时回落白底，避免整屏灰块 */
  .chat-wrap, .of-chat, .of-quick { background: #fff !important; border: none !important; }
  body { background: #fff !important; }
}


/* ---------- 登录页 V3.1：品牌区数据统计条 + 补满留白 ---------- */

.login-stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
  margin-top: auto;
  padding-top: 4px;
}
/* 统计条上方的渐变分隔线：让中部留白显得克制、有收束 */
.login-stats::before {
  content: "";
  grid-column: 1 / -1;
  height: 1px;
  margin-bottom: 12px;
  background: linear-gradient(90deg, rgba(96, 165, 250, .40), rgba(96, 165, 250, .08) 70%, transparent);
}
.login-stat {
  background: rgba(255, 255, 255, .055);
  border: 1px solid rgba(255, 255, 255, .11);
  border-radius: 11px;
  padding: 11px 8px 10px;
  text-align: center;
  transition: border-color .16s ease, background .16s ease;
}
.login-stat:hover { border-color: rgba(96, 165, 250, .38); background: rgba(255, 255, 255, .08); }
.login-stat b { display: block; font-size: calc(18px * var(--font-scale)); font-weight: 700; letter-spacing: .3px; text-shadow: 0 0 12px rgba(var(--primary-rgb), .38); }
.login-stat span { display: block; font-size: calc(11.5px * var(--font-scale)); opacity: .85; margin-top: 3px; }

/* 登录页分组标题比通用 section-title 大一号（卡片密，标题要能当锚点扫读） */
.login-panel .role-group-title { font-size: calc(14px * var(--font-scale)); }

.login-panel { padding: 36px 40px 28px; }
.login-panel-head h2 { font-size: calc(22px * var(--font-scale)); }
.role-card { padding: 14px 14px 13px; }
.role-name { font-size: calc(14.5px * var(--font-scale)); }
.role-grid::-webkit-scrollbar { width: 6px; }
.role-grid::-webkit-scrollbar-thumb { background: #22375C; border-radius: 3px; }

/* ---------- 报告正文区块（修复"报告生成了但看不到"） ---------- */
.report-block {
  margin-top: 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow: hidden;
}
.report-block-title {
  display: flex; align-items: center; gap: 6px;
  background: linear-gradient(180deg, rgba(59, 130, 246, .10), rgba(59, 130, 246, .04)); color: var(--primary-deep);
  font-size: calc(12.3px * var(--font-scale)); font-weight: 650;
  padding: 7px 12px;
  border-bottom: 1px solid var(--border);
}
.report-block-body {
  padding: 11px 13px;
  font-size: calc(12.6px * var(--font-scale)); line-height: 1.85; color: var(--text);
  white-space: pre-wrap; word-break: break-word;
  max-height: 340px; overflow: auto;
}

/* ---------- 报告正文区块（修复"报告生成了但看不到"） ---------- */
.report-block {
  margin-top: 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow: hidden;
}
.report-block-title {
  display: flex; align-items: center; gap: 6px;
  background: linear-gradient(180deg, rgba(59, 130, 246, .10), rgba(59, 130, 246, .04)); color: var(--primary-deep);
  font-size: calc(12.3px * var(--font-scale)); font-weight: 650;
  padding: 7px 12px;
  border-bottom: 1px solid var(--border);
}
.report-block-body {
  padding: 11px 13px;
  font-size: calc(12.6px * var(--font-scale)); line-height: 1.85; color: var(--text);
  white-space: pre-wrap; word-break: break-word;
  max-height: 340px; overflow: auto;
}

/* ---------- 数据直答卡（qa 策略） ---------- */
.qa-table {
  width: 100%; border-collapse: collapse; font-size: calc(11.8px * var(--font-scale));
}
.qa-table th {
  background: linear-gradient(180deg, rgba(59, 130, 246, .08), rgba(59, 130, 246, .12)); color: var(--primary-deep); font-weight: 600;
  padding: 6px 9px; border: 1px solid var(--border); text-align: left;
  white-space: nowrap;
}
.qa-table td {
  padding: 5px 8px; border: 1px solid var(--border); color: var(--text);
  max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.flow-empty { padding: 12px 14px; font-size: calc(12.3px * var(--font-scale)); color: var(--text-3); line-height: 1.7; }
.flow-empty { padding: 12px 14px; font-size: calc(12.3px * var(--font-scale)); color: var(--text-3); line-height: 1.7; }
.chitchat-card { border-color: rgba(96, 165, 250, .30); }

/* ---------- 帮助中心（卡片放大；容器宽度统一由 .content-inner 自动铺满） ---------- */
/* 自响应列数：宽屏 3-4 列，笔记本 2 列，窄屏 1 列（无需逐断点写死） */
.agent-grid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); }
.agent-card { padding: 20px 22px 18px; min-height: 188px; display: flex; flex-direction: column; transition: transform .18s ease, box-shadow .18s ease; }
.agent-card:hover { transform: translateY(-2px); }
.agent-card-head { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.agent-badge {
  flex: none; width: 52px; height: 52px; border-radius: 13px;
  background: linear-gradient(145deg, var(--primary-bright), var(--primary)); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(16px * var(--font-scale)); font-weight: 700; letter-spacing: -.3px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .35), 0 4px 12px rgba(27, 102, 204, .26);
}
.agent-name { font-size: calc(16px * var(--font-scale)); font-weight: 650; }
.agent-key { font-size: calc(11px * var(--font-scale)); color: var(--text-3); margin-top: 2px; }
.agent-sec { font-size: calc(13px * var(--font-scale)); line-height: 1.75; color: var(--text-2); margin-top: 8px; }
.agent-sec b {
  display: inline-block; min-width: 38px; color: var(--primary);
  font-weight: 650; margin-right: 6px;
}
.agent-sec.hitl { color: #E9C878; background: rgba(232, 185, 62, .12); border-radius: 7px; padding: 6px 9px; }
.agent-sec.hitl b { color: #E9C878; }
/* 首屏只留意图摘要；边界 / HITL 全文 / key 折叠，避免放大后信息过载 */
.agent-more { margin-top: auto; padding-top: 12px; }
.agent-more > summary {
  cursor: pointer; list-style: none; font-size: calc(12px * var(--font-scale)); color: var(--primary);
  display: inline-flex; align-items: center; gap: 5px; user-select: none;
}
.agent-more > summary::-webkit-details-marker { display: none; }
.agent-more > summary::before { content: "▸"; font-size: calc(10px * var(--font-scale)); transition: transform .16s ease; }
.agent-more[open] > summary::before { transform: rotate(90deg); }
.agent-more-body { padding-top: 10px; border-top: 1px dashed var(--border); margin-top: 10px; }

@media (max-width: 720px) {
  .agent-grid { grid-template-columns: 1fr; }
  .agent-badge { width: 44px; height: 44px; font-size: calc(14px * var(--font-scale)); }
  .agent-card { min-height: 0; }
}

/* ---------- 预警细则 + 审批决策指引 ---------- */
.alert-clickable { cursor: pointer; transition: background .14s ease; }
.alert-clickable:hover { background: rgba(255, 255, 255, .04); }
.alert-detail-panel {
  margin: 10px 0 4px;
  background: rgba(255, 255, 255, .045);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 11px 13px;
}
.adp-sec { margin-bottom: 9px; font-size: calc(12.2px * var(--font-scale)); line-height: 1.75; }
.adp-sec b {
  display: block; color: var(--primary-deep); font-size: calc(11.8px * var(--font-scale));
  font-weight: 650; margin-bottom: 3px;
}
.adp-steps { margin: 0; padding-left: 18px; }
.adp-steps li { margin-bottom: 3px; }
.adp-timeline { display: flex; flex-direction: column; gap: 5px; }
.adp-tl-row { display: flex; gap: 10px; align-items: baseline; }
.adp-tl-time { flex: none; color: var(--primary); font-weight: 600; font-variant-numeric: tabular-nums; }
.adp-tl-who { flex: none; margin-left: auto; color: var(--text-3); font-size: calc(11.3px * var(--font-scale)); }
.adp-actions { display: flex; gap: 8px; margin-top: 4px; }

.decision-guide {
  margin: 14px 0 4px;
  background: rgba(232, 185, 62, .12);
  border: 1px solid rgba(232, 185, 62, .35);
  border-radius: 10px;
  padding: 10px 13px;
}
.dg-title { font-size: calc(12.2px * var(--font-scale)); font-weight: 650; color: #E9C878; margin-bottom: 5px; }
.decision-guide ul { margin: 0; padding-left: 18px; font-size: calc(12.2px * var(--font-scale)); line-height: 1.8; color: var(--text-2); }

/* ---------- 预警细则 + 审批决策指引 ---------- */
.alert-clickable { cursor: pointer; transition: background .14s ease; }
.alert-clickable:hover { background: rgba(255, 255, 255, .04); }
.alert-detail-panel {
  margin: 10px 0 4px;
  background: rgba(255, 255, 255, .045);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 11px 13px;
}
.adp-sec { margin-bottom: 9px; font-size: calc(12.2px * var(--font-scale)); line-height: 1.75; }
.adp-sec b {
  display: block; color: var(--primary-deep); font-size: calc(11.8px * var(--font-scale));
  font-weight: 650; margin-bottom: 3px;
}
.adp-steps { margin: 0; padding-left: 18px; }
.adp-steps li { margin-bottom: 3px; }
.adp-timeline { display: flex; flex-direction: column; gap: 5px; }
.adp-tl-row { display: flex; gap: 10px; align-items: baseline; }
.adp-tl-time { flex: none; color: var(--primary); font-weight: 600; font-variant-numeric: tabular-nums; }
.adp-tl-who { flex: none; margin-left: auto; color: var(--text-3); font-size: calc(11.3px * var(--font-scale)); }
.adp-actions { display: flex; gap: 8px; margin-top: 4px; }

.decision-guide {
  margin: 14px 0 4px;
  background: rgba(232, 185, 62, .12);
  border: 1px solid rgba(232, 185, 62, .35);
  border-radius: 10px;
  padding: 10px 13px;
}
.dg-title { font-size: calc(12.2px * var(--font-scale)); font-weight: 650; color: #E9C878; margin-bottom: 5px; }
.decision-guide ul { margin: 0; padding-left: 18px; font-size: calc(12.2px * var(--font-scale)); line-height: 1.8; color: var(--text-2); }

/* ---------- 审批确认中心 · 审批摘要卡（事因/进展/耗时/卡点/依据） ---------- */
.approve-summary {
  margin-top: 13px;
  background: linear-gradient(180deg, rgba(255, 255, 255, .045), rgba(255, 255, 255, .02));
  border: 1px solid var(--border);
  border-left: 3px solid var(--primary);
  border-radius: 10px;
  padding: 11px 14px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .75);
}
.as-reason {
  display: flex; gap: 7px; align-items: flex-start;
  font-size: calc(12.8px * var(--font-scale)); line-height: 1.7; color: var(--text-1);
}
.as-reason b { flex: none; margin-right: 5px; color: var(--primary-deep); font-weight: 700; }
.as-reason svg { flex: none; margin-top: 2px; color: var(--primary); }
.as-sec { margin-top: 10px; }
.as-sec-title {
  display: flex; align-items: center; gap: 5px;
  font-size: calc(11.8px * var(--font-scale)); font-weight: 650; color: var(--primary-deep); margin-bottom: 6px;
}
.as-flow { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.as-node {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: calc(11.5px * var(--font-scale)); padding: 2px 8px; border-radius: 20px;
  border: 1px solid var(--border); background: rgba(255, 255, 255, .04); color: var(--text-2);
}
.as-node.done { color: #3FCB79; border-color: rgba(63, 203, 121, .35); background: rgba(63, 203, 121, .12); }
.as-node.warn { color: #E3B341; border-color: rgba(232, 185, 62, .35); background: rgba(232, 185, 62, .12); }
.as-node.current {
  color: var(--primary-deep); border-color: rgba(96, 165, 250, .40); background: rgba(59, 130, 246, .12);
  font-weight: 650; border-style: dashed;
}
.as-arrow { color: var(--text-3); font-size: calc(11px * var(--font-scale)); }
.as-blocker { display: flex; align-items: center; gap: 5px; margin-top: 7px; font-size: calc(12px * var(--font-scale)); color: var(--text-2); }
.as-blocker.overdue { color: #CF222E; font-weight: 600; }
.as-cost-row { display: flex; align-items: center; gap: 10px; margin-bottom: 5px; font-size: calc(11.8px * var(--font-scale)); }
/* 固定列宽随字号档位缩放：150px 是「按 11.8px 正文」量出来的经验值，
   字号档位放大后必须同步放宽，否则审批卡的科目标签会被省略号吃掉更多字
   （实测：清晰档裁 2 行、特大档裁 5 行）。行内 .as-cost-bar 是 flex:1 + min-width:0，
   放宽标签只会压缩条形，不会把整行撑出容器。 */
.as-cost-name {
  flex: none; width: calc(150px * var(--font-scale)); color: var(--text-2);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.as-cost-bar { flex: 1; min-width: 0; height: 8px; background: rgba(255, 255, 255, .09); border-radius: 4px; overflow: hidden; }
.as-cost-bar i { display: block; height: 100%; border-radius: 4px; }
.as-cost-bar i.green { background: #3FB950; }
.as-cost-bar i.amber { background: #D4A017; }
.as-cost-val {
  flex: none; width: 64px; text-align: right; color: var(--text-3);
  font-variant-numeric: tabular-nums;
}
.as-cost-legend {
  margin-left: auto; display: inline-flex; align-items: center; gap: 4px;
  font-size: calc(11px * var(--font-scale)); font-weight: 500; color: var(--text-3);
}
.as-cost-legend i {
  display: inline-block; width: 8px; height: 8px; border-radius: 2px;
}
.as-cost-legend i.amber { margin-left: 8px; }
.as-cost-legend i.green { background: #3FB950; }
.as-cost-legend i.amber { background: #D4A017; }
.as-brief-row { display: flex; gap: 8px; font-size: calc(12px * var(--font-scale)); line-height: 1.75; margin-bottom: 3px; }
.as-brief-label { flex: none; width: 52px; color: var(--text-3); font-size: calc(11.5px * var(--font-scale)); padding-top: 1px; }
.as-brief-text { color: var(--text-2); }

/* ---------- 报告中心 · 问数归档 ---------- */
.qa-archive-item { padding: 9px 6px; border-bottom: 1px solid var(--border); border-radius: 8px; }
.qa-archive-item:last-child { border-bottom: none; }
.qa-archive-item:hover { background: rgba(255, 255, 255, .04); }
.qar-head { display: flex; align-items: center; gap: 9px; }

/* ---------- 报告中心 · 问数归档 ---------- */
.qa-archive-item { padding: 9px 6px; border-bottom: 1px solid var(--border); border-radius: 8px; }
.qa-archive-item:last-child { border-bottom: none; }
.qa-archive-item:hover { background: rgba(255, 255, 255, .04); }
.qar-head { display: flex; align-items: center; gap: 9px; }

/* ---------- 8D 结构化渲染 ---------- */
.d8-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; margin-top: 8px; }
.d8-item {
  display: flex; gap: 8px; align-items: baseline;
  background: rgba(255, 255, 255, .045); border: 1px solid var(--border);
  border-radius: 7px; padding: 6px 9px;
  font-size: calc(12px * var(--font-scale)); line-height: 1.65;
}
.d8-k { flex: none; font-weight: 650; color: var(--primary-deep); font-size: calc(11.5px * var(--font-scale)); }
.d8-v { color: var(--text-2); min-width: 0; }
.d8-item.hot { background: rgba(232, 185, 62, .12); border-color: rgba(232, 185, 62, .35); }
.d8-item.hot .d8-k { color: #E9C878; }
.d8-item.close { background: rgba(63, 203, 121, .12); border-color: rgba(63, 203, 121, .35); }
.d8-item.close .d8-k { color: #7EE2A8; }

/* ---------- 制造综合看板（V3.4 · 制造 + 品质 双子 Tab） ---------- */
.mfg-tabs .chip { user-select: none; }
.mfg-gen { color: var(--text-3); font-size: calc(11.5px * var(--font-scale)); }
/* 「当日」单点口径：迷你趋势退化为一条水平基准线 */
.spark-single { opacity: .75; }

/* 看板统计口径分段控件（当日 / 当月 / 最近7天）：复用 .chip / .chip-row，仅补标签与说明 */
.mfg-windows { align-items: center; }
.mfg-windows .chip { user-select: none; }
.chip-row-label { flex: none; font-size: calc(12px * var(--font-scale)); color: var(--text-3); }
.chip-row-note { flex: none; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }

/* KPI 卡：数值单位 + 迷你趋势线 */
.stat-body { flex: 1; min-width: 0; }
.stat-unit { font-size: calc(14px * var(--font-scale)); font-weight: 600; color: var(--text-3); margin-left: 1px; }
.spark-wrap { margin-top: 6px; }
.spark { display: block; width: 132px; height: 26px; }
/* KPI 卡：板级筛选范围标注（如「工段 / 类别筛选不适用」），弱色一行不抢主数值 */
.stat-scope {
  display: flex; align-items: center; gap: 4px; margin-top: 5px;
  font-size: calc(11px * var(--font-scale)); line-height: 1.4; color: var(--text-3);
}

/* TOP5 排行 */
.rank-list { display: flex; flex-direction: column; padding: 4px 2px 2px; }
.rank-row {
  display: flex; align-items: center; gap: 10px; width: 100%; text-align: left;
  background: none; border: none; font: inherit; color: inherit;
  padding: 8px 9px; border-radius: 8px; cursor: pointer;
  transition: background .13s ease;
}
.rank-row:hover { background: rgba(255, 255, 255, .04); }
/* 已按岗位脱敏的行：数据可见但不可下钻（下钻键已被服务端移除） */
.rank-row.locked { cursor: default; }
.rank-row.locked:hover { background: none; }
.rank-row.locked .rank-name::after {
  content: "已脱敏"; flex: none; margin-left: 6px; padding: 1px 5px;
  font-size: calc(10.5px * var(--font-scale)); font-weight: 600; letter-spacing: .2px;
  color: #E3B341; background: rgba(212, 160, 23, .12);
  border-radius: 4px; white-space: nowrap;
}
.rank-row + .rank-row { border-top: 1px solid var(--border); border-radius: 0; }
.rank-no {
  flex: none; width: 20px; height: 20px; border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(11.5px * var(--font-scale)); font-weight: 700; color: var(--text-2);
  background: rgba(255, 255, 255, .08);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .12);
}
.rank-row.worst .rank-no {
  background: linear-gradient(145deg, #FBDCDA, #FEEEED); color: var(--danger);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .7), 0 1px 3px rgba(207, 34, 46, .18);
}
.rank-name {
  flex: 1; min-width: 0; display: flex; align-items: center; gap: 5px;
  font-size: calc(12.8px * var(--font-scale)); font-weight: 550; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.rank-row.worst .rank-name { color: var(--danger); }
.rank-val { flex: none; font-size: calc(13px * var(--font-scale)); font-weight: 700; font-variant-numeric: tabular-nums; color: var(--text-2); }
.rank-val.ok { color: var(--ok); }
.rank-val.warn { color: #D4A017; }
.rank-val.danger { color: var(--danger); }

/* 行内「问数」小按钮（TOP5 行 / 下钻表行） */
.row-ask {
  flex: none; display: inline-flex; align-items: center; gap: 3px;
  padding: 2px 8px; border-radius: 999px;
  border: 1px solid var(--border); background: rgba(255, 255, 255, .04);
  color: var(--primary); font: inherit; font-size: calc(11px * var(--font-scale)); font-weight: 550;
  cursor: pointer; white-space: nowrap;
  transition: border-color .13s ease, background .13s ease;
}
.row-ask:hover { border-color: var(--primary); background: var(--primary-bg, #F2F7FD); }

/* ---------------- 二级 / 三级下钻 ---------------- */
.mfg-crumb {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-bottom: 12px; padding: 8px 12px; border-radius: 10px;
  background: linear-gradient(180deg, rgba(255, 255, 255, .045), rgba(255, 255, 255, .02)); border: 1px solid var(--border);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .75);
}
.mfg-crumb:empty { display: none; }
.crumb-back {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 10px; border-radius: 999px;
  border: 1px solid var(--border); background: rgba(255, 255, 255, .04);
  color: var(--primary); font: inherit; font-size: calc(11.5px * var(--font-scale)); font-weight: 550;
  cursor: pointer; white-space: nowrap;
}
.crumb-back:hover { border-color: var(--primary); }
.crumb-path { display: inline-flex; align-items: center; gap: 6px; font-size: calc(12.5px * var(--font-scale)); color: var(--text-3); }
.crumb-node { color: var(--text-3); }
.crumb-node.crumb-cur { color: var(--text); font-weight: 600; }
.crumb-sep { color: var(--text-3); opacity: .6; }

.drill-scroll { overflow-x: auto; }
.drill-table th, .drill-table td { white-space: nowrap; }
.drill-table tbody tr.drill-row { cursor: pointer; transition: background .13s ease; }
.drill-table tbody tr.drill-row:hover { background: rgba(255, 255, 255, .04); }
.drill-table tbody tr.drill-row:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
.drill-table td.drill-no { width: 44px; }
.drill-table td.drill-name { text-align: left; font-weight: 550; color: var(--text); }
.drill-table td.drill-dim, .drill-table td.drill-frac { color: var(--text-3); font-size: calc(12px * var(--font-scale)); }
.drill-table td.drill-val { font-weight: 700; color: var(--text-2); }
.drill-table td.drill-val.ok { color: var(--ok); }
.drill-table td.drill-val.warn { color: #D4A017; }
.drill-table td.drill-val.danger { color: var(--danger); }
.drill-table td.drill-val.empty { color: var(--text-3); }
.drill-table td.drill-spark { width: 104px; }
.drill-table td.drill-op { width: 76px; }
.drill-table .drill-spark .spark { width: 96px; height: 20px; }
.drill-def {
  display: flex; gap: 6px; align-items: flex-start;
  margin-top: 10px; padding-top: 9px; border-top: 1px dashed var(--border);
  font-size: calc(12px * var(--font-scale)); line-height: 1.7; color: var(--text-3);
}
.drill-def svg { flex: none; margin-top: 3px; }

/* L3 hero */
.drill-hero-card { padding: 16px 18px; }
.drill-hero { display: flex; gap: 18px; align-items: flex-start; flex-wrap: wrap; }
.drill-hero-main { flex: 1; min-width: 220px; }
.drill-hero-label { font-size: calc(13px * var(--font-scale)); font-weight: 600; color: var(--text-2); margin-bottom: 4px; }
.drill-hero-value { display: flex; align-items: baseline; gap: 6px; }
.drill-hero-value .big {
  font-size: calc(40px * var(--font-scale)); font-weight: 800; line-height: 1.1;
  font-variant-numeric: tabular-nums; color: var(--text);
}
.drill-hero-value .big.ok { color: var(--ok); }
.drill-hero-value .big.warn { color: #D4A017; }
.drill-hero-value .big.danger { color: var(--danger); }
.drill-hero-sub { margin-top: 6px; font-size: calc(12.5px * var(--font-scale)); color: var(--text-3); }
.drill-hero-side {
  flex: none; max-width: 340px; display: flex; flex-direction: column;
  gap: 8px; align-items: flex-start;
}
.drill-hero-side .drill-def { margin-top: 0; padding-top: 0; border-top: none; }
.drill-hero-ops { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); }
.drill-hero-ops .row-ask { padding: 5px 12px; font-size: calc(12px * var(--font-scale)); }

/* 三级看板细化：工序损失瀑布 / 工段分组 / 工位明细 / 帕累托 */
.wf-wrap { padding: 12px 16px 6px; }
.wf-title { font-size: calc(12px * var(--font-scale)); color: var(--text-3); margin-bottom: 7px; }
.wf-bar {
  display: flex; height: 12px; border-radius: 7px; overflow: hidden;
  background: var(--bg-sub, #F1F4F9);
}
.wf-seg { display: block; height: 100%; transition: filter .13s ease; }
.wf-seg:hover { filter: brightness(.92); }
.wf-seg.ok { background: #63C08B; }
.wf-seg.warn { background: #E3B44A; }
.wf-seg.danger, .wf-seg.hot { background: #E06A63; }
.wf-legend {
  display: flex; flex-wrap: wrap; gap: 6px 16px;
  margin-top: 8px; font-size: calc(12px * var(--font-scale)); color: var(--text-3);
}
.wf-item { display: inline-flex; align-items: center; gap: 5px; }
.wf-item b { color: var(--text-2); font-variant-numeric: tabular-nums; }
.wf-item.hot b { color: var(--danger); }
.wf-dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
.wf-dot.ok { background: #63C08B; }
.wf-dot.warn { background: #E3B44A; }
.wf-dot.danger { background: #E06A63; }

.drill-table tbody tr.stage-row td {
  text-align: left; background: var(--bg-sub, rgba(255, 255, 255, .04));
  font-size: calc(12px * var(--font-scale)); color: var(--text-2); padding: 7px 12px;
}
.drill-table tbody tr.stage-row svg { margin-right: 4px; vertical-align: -1px; }
.drill-table tbody tr.stage-row .stage-sum { margin-left: 10px; color: var(--text-3); }
.drill-table tbody tr.stage-row .badge { margin-left: 8px; }
.drill-table td.drill-share { width: 132px; color: var(--text-2); }
.drill-share .share-bar {
  display: inline-block; vertical-align: middle; height: 5px; border-radius: 3px;
  background: #E06A63; margin-right: 6px; min-width: 2px; max-width: 86px;
}
.drill-table td.empty-cell { text-align: center; color: var(--text-3); padding: 14px 0; }

.pareto-list { display: flex; flex-direction: column; gap: 7px; padding: 14px 16px; }
.pareto-row { display: flex; align-items: center; gap: 10px; font-size: calc(12.5px * var(--font-scale)); }
.pareto-no {
  flex: none; width: 18px; height: 18px; border-radius: 5px;
  background: linear-gradient(145deg, #DCEBFC, #EFF6FE); color: var(--primary);
  font-size: calc(11px * var(--font-scale)); font-weight: 700; line-height: 18px; text-align: center;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);
}
.pareto-name { flex: none; min-width: 90px; color: var(--text-2); }
.pareto-bar { flex: 1; height: 8px; border-radius: 5px; background: var(--bg-sub, #F1F4F9); overflow: hidden; }
.pareto-bar i { display: block; height: 100%; border-radius: 5px; background: #E06A63; }
.pareto-val { flex: none; width: 46px; text-align: right; font-weight: 700; color: var(--text-2); font-variant-numeric: tabular-nums; }
.pareto-share { flex: none; width: 48px; text-align: right; color: var(--text-3); font-variant-numeric: tabular-nums; }
.pareto-cum { flex: none; width: 56px; text-align: right; color: var(--text-2); font-weight: 600; font-variant-numeric: tabular-nums; }
/* 表头：复用行内同一组类，保证列对齐（数值列留白） */
.pareto-head {
  display: flex; align-items: center; gap: 10px; font-size: calc(11.5px * var(--font-scale));
  padding: 0 16px 7px; color: var(--text-3);
}
.pareto-head .pareto-no { background: none; color: var(--text-3); }
.pareto-head .pareto-bar { height: auto; background: none; overflow: visible; }
.pareto-head .pareto-cum { color: var(--text-3); }
/* 关键少数（累计首达 80% 的类型）：序号升温 + 柱加深，其余为浅色尾巴 */
.pareto-row.vital .pareto-no { background: var(--amber-bg, #FBF3E5); color: #E8B93E; }
.pareto-row .pareto-bar i { background: var(--text-3, #9AA5B5); opacity: .45; }
.pareto-row.vital .pareto-bar i { background: #E06A63; opacity: 1; }
/* 可下钻（L1 累计柏拉图）：整行可点，悬停提示 */
.pareto-row.drillable { cursor: pointer; border-radius: 7px; margin: 0 -6px; padding: 2px 6px; }
.pareto-row.drillable:hover { background: var(--bg-sub, #F1F4F9); }
.pareto-row.drillable:hover .pareto-name { color: var(--primary); }
/* 交互式柏拉图（品质看板）：产品分类 / 类别 / 工段 控制条（本地筛选重算，零网络往返） */
.pareto-toolbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 9px 18px;
  padding: 10px 16px 2px;
}
.pareto-toolbar .chip-row { align-items: center; gap: 6px; }
.pareto-toolbar .chip { height: 26px; padding: 0 11px; font-size: calc(12px * var(--font-scale)); }
.pareto-select { display: inline-flex; align-items: center; gap: 6px; font-size: calc(12px * var(--font-scale)); color: var(--text-3); }
.pareto-select select {
  height: 26px; padding: 0 8px; border-radius: 8px; font-family: inherit; font-size: calc(12px * var(--font-scale));
  color: var(--text-2); background: var(--bg-sub, rgba(255, 255, 255, .04));
  border: 1px solid var(--border-strong); outline: none; cursor: pointer;
}
.pareto-select select:hover { border-color: var(--primary); }
.pareto-select select option { background: var(--card, #16273F); color: var(--text); }
/* 左右两块并排：左 · 月别（当月累计）｜右 · 日别（当日）；窄屏回落单列 */
.pareto-dual {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 12px; padding: 8px 14px 14px;
}
.pareto-pane { min-width: 0; border-radius: 10px; border: 1px solid var(--border, #21385A);
  background: var(--bg-sub, rgba(255, 255, 255, .03)); }
.pareto-pane-head {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 9px 12px 4px;
}
.pareto-pane-title { font-size: calc(12.5px * var(--font-scale)); font-weight: 600; color: var(--text); }
.pareto-pane-meta { font-size: calc(11px * var(--font-scale)); color: var(--text-3); font-variant-numeric: tabular-nums; }
.pareto-pane-extra { margin-left: auto; font-size: calc(11px * var(--font-scale)); color: var(--text-3); }
.pareto-pane .pareto-chart { padding: 4px 6px 0; }
.pareto-pane .pareto-head { padding: 0 12px 6px; }
.pareto-pane .pareto-list { padding: 10px 12px 12px; gap: 6px; }
.pareto-pane .pareto-name { min-width: 64px; }
@media (max-width: 1180px) {
  .pareto-dual { grid-template-columns: minmax(0, 1fr); }
}
/* 底部筛选（缺陷类别）：柏拉图自己的收尾筛选条，只作用于下方两块面板 */
.pareto-bottom-filter {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px;
  margin: 2px 14px 0; padding: 10px 0 13px; border-top: 1px dashed var(--border, #21385A);
}
.pareto-bottom-filter .chip { height: 26px; padding: 0 11px; font-size: calc(12px * var(--font-scale)); }
/* 行内「问数」：定宽，与表头占位对齐 */
.pareto-ask { flex: none; width: 52px; justify-content: center; }
.pareto-head .pareto-ask { display: inline-block; }
/* 累计柏拉图：柱（损失量）+ 累计折线 + 80% 关键少数参考线 */
.pareto-chart { padding: 6px 8px 2px; }
.pareto-chart svg { display: block; width: 100%; height: auto; }
.paxis { stroke: var(--border, #E4E9F0); stroke-width: 1; }
.ptick { fill: var(--text-3, #9AA5B5); font-size: calc(10.5px * var(--font-scale)); }
.pthr { stroke: #E06A63; stroke-width: 1; stroke-dasharray: 5 4; }
/* 「关键少数」标签：压在柱体之上（绘制顺序在柱后）+ 浅琥珀药丸底 —— 明暗主题都读得清 */
.pthr-pill { fill: var(--amber-bg, #FBF3E5); stroke: #E8B93E; stroke-width: 1; opacity: .97; }
.pthr-label { fill: #7A5B00; font-size: calc(10.5px * var(--font-scale)); font-weight: 600; }
.pbar { fill: var(--text-3, #9AA5B5); opacity: .45; }
.pbar.vital { fill: #E06A63; opacity: .9; }
.pline { fill: none; stroke: var(--primary, #185FA5); stroke-width: 2; stroke-linejoin: round; }
.pdot { fill: #16273F; stroke: var(--primary, #185FA5); stroke-width: 1.6; }
/* 柱下方占比：与列表「占比」列同源，读图不必来回对照；弱于轴刻度、强于网格线 */
.pshare {
  fill: var(--text-2, #BCCBDF); font-size: calc(10px * var(--font-scale)); font-weight: 600;
  font-variant-numeric: tabular-nums;
}

/* SPC 过程能力看板：柏拉图条目可下钻（无固定 max-width / 圆角 / 阴影 / 边框；随容器铺满） */
.pareto-row.clickable { cursor: pointer; transition: background .13s ease; }
.pareto-row.clickable:hover { background: rgba(255, 255, 255, .04); }
.pareto-row.clickable:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
.pareto-cum { flex: none; width: 72px; text-align: right; color: var(--text-3); font-size: calc(11.5px * var(--font-scale)); font-variant-numeric: tabular-nums; }

/* 标准三率 */
.std-card { margin-bottom: 14px; }
.std-formula {
  display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
  padding: 14px 4px 12px; font-variant-numeric: tabular-nums;
}
.std-term { display: inline-flex; flex-direction: column; align-items: center; gap: 2px; }
.std-term b { font-size: calc(22px * var(--font-scale)); font-weight: 700; color: var(--text); }
.std-term i { font-style: normal; font-size: calc(11px * var(--font-scale)); color: var(--text-3); }
.std-formula em { font-style: normal; font-size: calc(17px * var(--font-scale)); color: var(--text-3); }
.std-conform { font-size: calc(30px * var(--font-scale)); font-weight: 800; letter-spacing: -.5px; }
.std-conform.ok { color: var(--ok); }
.std-conform.warn { color: #D4A017; }
.std-conform.danger { color: var(--danger); }
.std-table { width: 100%; border-collapse: collapse; font-size: calc(12.5px * var(--font-scale)); }
.std-table th {
  text-align: right; font-weight: 550; color: var(--text-3); font-size: calc(11.5px * var(--font-scale));
  padding: 6px 10px; border-bottom: 1px solid var(--border);
}
.std-table th:first-child, .std-table td:first-child { text-align: left; }
.std-table td {
  padding: 8px 10px; border-bottom: 1px solid var(--border);
  text-align: right; font-variant-numeric: tabular-nums; color: var(--text-2);
}
.std-table tbody tr { transition: background .13s ease; }
.std-table tbody tr:hover td { background: rgba(255, 255, 255, .045); }
.std-table tbody tr:last-child td { border-bottom: none; }
.std-table td.std-conform { font-size: calc(13px * var(--font-scale)); font-weight: 700; }

/* 标准三率两级看板：1 级 = 4 工段卡（点卡下钻），2 级 = 该工段的汇总 + 班组明细 */
.std-scope {
  margin-left: auto; flex: none; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3);
  padding: 3px 9px; border-radius: 999px;
  background: var(--bg-sub); border: 1px solid var(--border);
  font-variant-numeric: tabular-nums;
}
.std-level { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; padding: 0 4px 9px; }
.std-level-tag {
  font-size: calc(12px * var(--font-scale)); font-weight: 650; color: var(--primary-deep);
  padding: 2px 9px; border-radius: 6px; background: var(--primary-light);
}
.std-level-hint { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
/* 来料质量 TOP10 卡的口径提示条（固定全量口径 · 不受筛选影响） */
.incoming-note {
  display: flex; align-items: center; gap: 5px; flex-wrap: wrap;
  font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); padding: 0 2px 8px;
}
.std-stage-grid { gap: 10px; margin-bottom: 12px; }
.std-stage {
  display: flex; flex-direction: column; gap: 7px; align-items: stretch;
  text-align: left; font: inherit; color: var(--text); cursor: pointer;
  padding: 11px 12px 10px; border-radius: 10px;
  border: 1px solid var(--border); background: var(--bg-soft);
  transition: border-color .13s ease, background .13s ease, box-shadow .13s ease;
}
.std-stage:hover {
  border-color: var(--primary); background: var(--primary-light-2);
  box-shadow: inset 0 0 0 1px var(--primary);
}
.std-stage:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
.std-stage-head { display: flex; align-items: baseline; gap: 6px; }
.std-stage-name { font-size: calc(14px * var(--font-scale)); font-weight: 700; letter-spacing: .2px; }
.std-stage-line { font-size: calc(11px * var(--font-scale)); color: var(--text-3); font-variant-numeric: tabular-nums; }
.std-stage-val { font-size: calc(26px * var(--font-scale)); line-height: 1.08; }
.std-stage-val i { font-style: normal; font-size: calc(13px * var(--font-scale)); font-weight: 600; margin-left: 1px; }
.std-stage-bars { display: flex; flex-direction: column; gap: 4px; }
.std-bar-row { display: flex; align-items: center; gap: 6px; font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); }
.std-bar-row i { font-style: normal; flex: none; width: 22px; }
.std-bar-row em {
  font-style: normal; flex: none; width: 40px; text-align: right;
  color: var(--text-2); font-variant-numeric: tabular-nums;
}
.std-bar { flex: 1 1 auto; height: 5px; border-radius: 3px; background: rgba(255, 255, 255, .10); overflow: hidden; }
.std-bar b { display: block; height: 100%; border-radius: 3px; background: var(--primary); }
.std-bar b.ok { background: var(--ok); }
.std-bar b.warn { background: var(--warn); }
.std-bar b.danger { background: var(--danger); }
.std-stage-foot {
  display: flex; align-items: center; gap: 6px;
  font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); font-variant-numeric: tabular-nums;
}
.std-stage-go { margin-left: auto; display: inline-flex; align-items: center; gap: 2px; color: var(--primary); }
.std-stage:hover .std-stage-go { text-decoration: underline; }
/* 2 级下钻页 */
.std-l2-head { display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; padding: 0 2px 8px; }
.std-l2-tag {
  font-size: calc(12px * var(--font-scale)); font-weight: 650; color: var(--text-2);
  padding: 2px 9px; border-radius: 6px;
  background: var(--bg-sub); border: 1px solid var(--border);
}
.std-l2-name { font-size: calc(13px * var(--font-scale)); font-weight: 650; color: var(--text); }
.std-l2-sum {
  margin-left: auto; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3);
  font-variant-numeric: tabular-nums;
}
.std-kpis { gap: 10px; padding: 2px 4px 12px; }
.std-mini {
  display: flex; flex-direction: column; gap: 2px;
  padding: 9px 11px; border-radius: 9px;
  border: 1px solid var(--border); background: var(--bg-soft);
}
.std-mini i { font-style: normal; font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); }
.std-mini b { font-size: calc(19px * var(--font-scale)); font-weight: 750; color: var(--text); line-height: 1.2;
  font-variant-numeric: tabular-nums; }
.std-mini em { font-style: normal; font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); }
.std-neg { color: var(--danger); }
.std-pos { color: var(--ok); }
.std-table td.std-team { font-weight: 600; color: var(--text); }
.std-table td.std-team svg { margin-right: 4px; vertical-align: -1px; color: var(--danger); }
.std-top-tag {
  display: inline-block; margin-right: 6px; padding: 0 5px; border-radius: 4px;
  font-size: calc(9.5px * var(--font-scale)); font-weight: 700; letter-spacing: .3px; vertical-align: 1px;
  color: var(--danger); background: var(--danger-bg);
}
.std-table td.std-delta { font-weight: 650; color: var(--text-2); font-variant-numeric: tabular-nums; }
.std-table td.std-delta.neg { color: var(--danger); }
.std-table td.std-delta.pos { color: var(--ok); }
.std-table td.std-dim { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
.std-l2-note { padding: 8px 4px 0; font-size: calc(11px * var(--font-scale)); color: var(--text-3); }
.std-topdef {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  margin-top: 10px; padding: 9px 11px; border-radius: 9px;
  border: 1px dashed var(--border); background: var(--bg-sub);
}
.std-topdef-title { display: inline-flex; align-items: center; gap: 5px;
  font-size: calc(11.5px * var(--font-scale)); font-weight: 650; color: var(--text-2); }
.std-topdef-title svg { color: var(--text-3); }
.std-topdef-title i { font-style: normal; font-weight: 400; color: var(--text-3); }
.std-topdef-list { display: inline-flex; gap: 8px; flex-wrap: wrap; }
.std-topdef-item {
  display: inline-flex; align-items: baseline; gap: 5px;
  padding: 3px 9px; border-radius: 999px; font-size: calc(11.5px * var(--font-scale));
  background: var(--card); border: 1px solid var(--border); color: var(--text-2);
}
.std-topdef-item b { font-size: calc(10px * var(--font-scale)); color: var(--danger); }
.std-topdef-item em { font-style: normal; color: var(--text-3); font-size: calc(10.5px * var(--font-scale));
  font-variant-numeric: tabular-nums; }
@media (max-width: 1180px) {
  .std-stage-grid, .std-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* 班组行可点 → 明细弹窗 */
.std-row-click { cursor: pointer; }
.std-row-click:hover td, html[data-theme="light"] .std-row-click:hover td { background: var(--bg-sub); }
.std-row-go { display: inline-flex; margin-left: 5px; color: var(--primary); opacity: 0; transition: opacity .12s; vertical-align: -1px; }
.std-row-click:hover .std-row-go, .std-row-click:focus-visible .std-row-go { opacity: 1; }
.std-row-click:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
/* 班组明细弹窗（遮罩 + 卡片；配色全部走主题变量，深浅色自适应） */
.std-modal {
  position: fixed; inset: 0; z-index: 260;
  display: flex; align-items: center; justify-content: center; padding: 28px 18px;
  background: rgba(4, 10, 22, .62); backdrop-filter: blur(2px);
}
body.std-modal-open { overflow: hidden; }
.std-modal-card {
  display: flex; flex-direction: column; width: min(880px, 100%);
  max-height: min(86vh, 760px);
  border-radius: 14px; border: 1px solid var(--border);
  background: var(--card); box-shadow: 0 18px 48px rgba(0, 0, 0, .38);
  overflow: hidden;
}
.std-modal-head {
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
  padding: 13px 16px; border-bottom: 1px solid var(--border); flex: none;
}
.std-modal-head b { font-size: calc(14.5px * var(--font-scale)); color: var(--text); }
.std-modal-tag {
  font-size: calc(10.5px * var(--font-scale)); font-weight: 650; padding: 2px 8px; border-radius: 6px;
  color: var(--primary); background: var(--bg-sub); border: 1px solid var(--border);
}
.std-modal-sub { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
.std-modal-x {
  margin-left: auto; width: 26px; height: 26px; border-radius: 7px;
  border: 1px solid var(--border); background: transparent;
  color: var(--text-2); font-size: calc(15px * var(--font-scale)); line-height: 1; cursor: pointer;
}
.std-modal-x:hover { color: var(--text); background: var(--bg-sub); }
/* 弹窗顶部入口（「进入 N 级看板」）：常驻标题右侧、紧邻关闭按钮，不再坠在正文末尾 */
.std-modal-head .std-modal-go { margin-left: auto; display: inline-flex; }
.std-modal-head .std-modal-go ~ .std-modal-x { margin-left: 0; }
.std-modal-body { padding: 14px 16px 16px; overflow-y: auto; }
.std-modal-loading {
  display: flex; align-items: center; justify-content: center; gap: 7px;
  padding: 46px 0; color: var(--text-3); font-size: calc(12.5px * var(--font-scale));
}
.std-modal-warn {
  display: flex; align-items: flex-start; gap: 6px; margin-bottom: 10px;
  padding: 8px 11px; border-radius: 8px; font-size: calc(11.5px * var(--font-scale)); line-height: 1.65;
  color: var(--warn); background: var(--warn-bg, rgba(217, 119, 6, .12));
}
.std-modal-warn svg { flex: none; margin-top: 2px; }
.std-modal-hint { margin-top: 7px; font-size: calc(11px * var(--font-scale)); color: var(--text-3); }
.std-modal-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 12px; }
.std-modal-col { min-width: 0; }
.std-modal-title {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  margin: 2px 0 8px; font-size: calc(12.5px * var(--font-scale)); font-weight: 650; color: var(--text);
}
.std-modal-title svg { color: var(--text-3); }
.std-modal-title i { font-style: normal; font-weight: 400; font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); }
.std-step-table td, .std-step-table th { white-space: nowrap; }
.std-step-table td.std-step-name { font-weight: 600; color: var(--text); }
/* 差值小签 */
.std-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.std-chip {
  display: inline-flex; align-items: baseline; gap: 5px;
  padding: 3px 10px; border-radius: 999px; font-size: calc(11px * var(--font-scale)); color: var(--text-3);
  background: var(--bg-sub); border: 1px solid var(--border);
  font-variant-numeric: tabular-nums;
}
.std-chip b { font-weight: 700; color: var(--text-2); }
.std-chip b.pos { color: var(--ok); }
.std-chip b.neg { color: var(--danger); }
/* 原因归因 */
.std-cause-dim { margin-bottom: 11px; }
.std-cause-dim-head {
  display: flex; align-items: baseline; gap: 8px; padding: 5px 2px;
  font-size: calc(11.5px * var(--font-scale)); color: var(--text-2);
}
.std-cause-dim-head b { color: var(--text); }
.std-cause-dim-head em { margin-left: auto; font-style: normal; font-size: calc(10.5px * var(--font-scale));
  color: var(--text-3); font-variant-numeric: tabular-nums; }
.std-cause-item { padding: 6px 2px; }
.std-cause-line { display: flex; align-items: baseline; gap: 7px; font-size: calc(12px * var(--font-scale)); }
.std-cause-name { color: var(--text); }
.std-cause-line b { margin-left: auto; font-variant-numeric: tabular-nums;
  color: var(--text-2); font-size: calc(11.5px * var(--font-scale)); }
.std-cause-flag {
  display: inline-block; margin-right: 5px; padding: 0 5px; border-radius: 4px;
  font-size: calc(9.5px * var(--font-scale)); font-weight: 700; font-style: normal; vertical-align: 1px;
  color: var(--danger); background: var(--danger-bg);
}
.std-cause-bar {
  height: 4px; border-radius: 2px; margin: 5px 0 4px;
  background: rgba(255, 255, 255, .10); overflow: hidden;
}
.std-cause-bar i { display: block; height: 100%; border-radius: 2px; background: var(--danger); }
.std-cause-meta { font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); line-height: 1.5; }
/* 逐日趋势行 */
.std-modal-trend {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-top: 12px; padding: 9px 11px; border-radius: 9px;
  border: 1px dashed var(--border); background: var(--bg-sub);
}
.std-modal-trend-label { display: inline-flex; align-items: baseline; gap: 7px;
  font-size: calc(11.5px * var(--font-scale)); font-weight: 650; color: var(--text-2); }
.std-modal-trend-label i { font-style: normal; font-weight: 400; font-size: calc(10px * var(--font-scale)); color: var(--text-3); }
.std-modal-trend-val { margin-left: auto; font-size: calc(11px * var(--font-scale)); color: var(--text-3);
  font-variant-numeric: tabular-nums; }
.std-notes { margin-top: 12px; display: flex; flex-direction: column; gap: 5px; }
.std-modal-note { display: flex; gap: 6px; align-items: flex-start;
  font-size: calc(10.8px * var(--font-scale)); line-height: 1.6; color: var(--text-3); }
.std-modal-note svg { flex: none; margin-top: 2px; }
/* 弹窗底部动作行（SPC 能力明细弹窗「进入 3 级看板」等） */
.std-modal-actions { display: flex; gap: 8px; justify-content: flex-end;
  margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); }
@media (max-width: 860px) {
  .std-modal { padding: 14px 8px; }
  .std-modal-cols { grid-template-columns: 1fr; }
  .std-modal-actions { justify-content: stretch; }
  .std-modal-actions .btn { flex: 1; }
}

/* 口径说明 */
.kpi-def { display: flex; flex-direction: column; gap: 7px; padding: 4px 2px; }
.kpi-def-row { display: flex; gap: 7px; align-items: flex-start; font-size: calc(12.2px * var(--font-scale)); line-height: 1.7; color: var(--text-2); }
.kpi-def-row svg { flex: none; margin-top: 3px; color: var(--text-3); }

/* ============================================================
   企业咨询助手（kbqa）· 复刻原项目微信式聊天 UI
   配色逐项取自原项目 webui.py 的 THEMES（单一浅色主题）；类名统一 .kbqa- 前缀，避免冲突。
   ============================================================ */
.kbqa-root {
  /* ---- 主题变量（深色，与门户侧边栏同源） ---- */
  --k-page: #0A1322; --k-text: #EEF4FE;
  --k-header-bg: rgba(13, 25, 45, .85); --k-header-border: rgba(255, 255, 255, .07);
  --k-title: #EEF4FE; --k-sub: #7E93B3;
  --k-online-bg: rgba(7, 193, 96, .15); --k-online-text: #34D399;
  --k-bot-bg: #1A2C47; --k-bot-border: #2A4066; --k-bot-text: #EEF4FE;
  --k-user-bg: #95ec69; --k-user-border: #86d95c; --k-user-text: #1a1a1a;
  --k-bubble-shadow: 0 1px 2px rgba(0, 0, 0, .25);
  --k-tag-bg: rgba(96, 165, 250, .14); --k-tag-text: #8FB8F0; --k-tag-border: rgba(96, 165, 250, .28);
  --k-tag-first-bg: #3E6FD8; --k-tag-first-text: #ffffff; --k-tag-first-border: #3E6FD8;
  --k-src-bg: rgba(7, 193, 96, .13); --k-src-text: #34D399; --k-src-border: rgba(7, 193, 96, .30);
  --k-time: #5E7396;
  --k-side-bg: #0E1A2E; --k-divider: rgba(255, 255, 255, .08);
  --k-arch-bg: #16273F; --k-arch-border: #263E62; --k-arch-text: #8FA2BD;
  --k-cat-hover: rgba(255, 255, 255, .05); --k-cat-name: #EEF4FE; --k-cat-desc: #7E93B3;
  --k-input-bg: #0D1B33; --k-input-border: #2E476C; --k-input-text: #E7EEF9;
  --k-scroll: rgba(255, 255, 255, .16);

  display: flex;
  height: calc(100vh - var(--topbar-h, 58px) - 62px);
  min-height: 440px;
  border: 1px solid var(--border); border-radius: 14px; overflow: hidden;
  background: var(--k-page); color: var(--k-text);
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
               "Microsoft YaHei", "Segoe UI", sans-serif;
}

/* ---- 助手侧栏 ---- */
.kbqa-side {
  width: 244px; flex-shrink: 0; overflow-y: auto; padding: 16px 14px;
  background: var(--k-side-bg); border-right: 1px solid var(--k-header-border);
}
.kbqa-logo {
  width: 40px; height: 40px; border-radius: 10px; flex: none;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, #667eea, #8b5cf6);
  box-shadow: 0 4px 12px rgba(102, 126, 234, .35);
}
.kbqa-arch {
  border-radius: 12px; padding: 12px 14px; font-size: calc(12px * var(--font-scale)); line-height: 1.9;
  background: var(--k-arch-bg); border: 1px solid var(--k-arch-border); color: var(--k-arch-text);
}
.kbqa-arch b { color: var(--k-title); }
.kbqa-divider { height: 1px; background: var(--k-divider); margin: 14px 0; }
.kbqa-sec-title { font-size: calc(13px * var(--font-scale)); font-weight: 700; color: var(--k-title); margin: 0 0 6px; }
.kbqa-cat-item { display: flex; align-items: center; gap: 10px; padding: 7px 8px; border-radius: 10px; transition: background .15s; }
.kbqa-cat-item:hover { background: var(--k-cat-hover); }
.kbqa-cat-ico { width: 32px; height: 32px; border-radius: 9px; flex: none; display: flex; align-items: center; justify-content: center; font-size: calc(15px * var(--font-scale)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .6), 0 2px 5px rgba(16, 24, 40, .07); }
.kbqa-cat-name { font-size: calc(13.5px * var(--font-scale)); font-weight: 600; color: var(--k-cat-name); }
.kbqa-cat-desc { font-size: calc(11px * var(--font-scale)); color: var(--k-cat-desc); margin-top: 1px; }
.kbqa-cat-loading { font-size: calc(12px * var(--font-scale)); color: var(--k-sub); padding: 6px 8px; }

/* ---- 主区：顶栏 / 聊天 / 输入 ---- */
.kbqa-main { flex: 1; min-width: 0; display: flex; flex-direction: column; background: var(--k-page); }
.kbqa-header {
  flex: none; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center;
  padding: 10px 20px; background: var(--k-header-bg); border-bottom: 1px solid var(--k-header-border);
  backdrop-filter: blur(10px) saturate(1.5);
  -webkit-backdrop-filter: blur(10px) saturate(1.5);
}
.kbqa-hcenter { grid-column: 2; justify-self: center; display: flex; align-items: center; gap: 12px; }
.kbqa-brand-title { font-size: calc(17px * var(--font-scale)); font-weight: 700; color: var(--k-title); letter-spacing: .3px; }
.kbqa-online {
  grid-column: 3; justify-self: end; font-size: calc(11px * var(--font-scale)); font-weight: 500; padding: 4px 11px; border-radius: 20px;
  color: var(--k-online-text); background: var(--k-online-bg); display: flex; align-items: center; gap: 5px;
}
.kbqa-online::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: #07c160; box-shadow: 0 0 6px #07c160; }

.kbqa-chat { flex: 1; overflow-y: auto; padding: 18px 20px 8px; }
.kbqa-chat::-webkit-scrollbar { width: 8px; height: 8px; }
.kbqa-chat::-webkit-scrollbar-thumb { background: var(--k-scroll); border-radius: 4px; }
.kbqa-chat::-webkit-scrollbar-track { background: transparent; }
.kbqa-time { text-align: center; font-size: calc(11.5px * var(--font-scale)); margin: 16px 0 6px; font-weight: 500; color: var(--k-time); }
.kbqa-row { display: flex; margin: 14px 0; align-items: flex-start; animation: kbqaMsgIn .28s ease both; }
@keyframes kbqaMsgIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.kbqa-row.kbqa-user { justify-content: flex-end; }
.kbqa-avatar {
  width: 40px; height: 40px; border-radius: 8px; flex: none;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 2px 6px rgba(0, 0, 0, .12);
}
.kbqa-av-bot { background: linear-gradient(135deg, #667eea, #8b5cf6); }
.kbqa-av-user { background: linear-gradient(135deg, #5b8def, #3b6fd4); }
.kbqa-wrap { max-width: 76%; display: flex; flex-direction: column; }
.kbqa-row.kbqa-user .kbqa-wrap { align-items: flex-end; }
.kbqa-bubble {
  position: relative; padding: 10px 14px; border-radius: 10px;
  font-size: calc(14.5px * var(--font-scale)); line-height: 1.7; white-space: pre-wrap; word-break: break-word;
}
.kbqa-row.kbqa-bot .kbqa-bubble {
  margin-left: 12px; border-top-left-radius: 3px;
  background: var(--k-bot-bg); border: 1px solid var(--k-bot-border);
  color: var(--k-bot-text); box-shadow: var(--k-bubble-shadow);
}
.kbqa-row.kbqa-user .kbqa-bubble {
  margin-right: 12px; border-top-right-radius: 3px;
  background: var(--k-user-bg); border: 1px solid var(--k-user-border);
  color: var(--k-user-text); box-shadow: var(--k-bubble-shadow);
}
.kbqa-row.kbqa-bot .kbqa-bubble::before {
  content: ""; position: absolute; top: 14px; left: -5px; width: 9px; height: 9px;
  transform: rotate(45deg); background: var(--k-bot-bg);
  border-left: 1px solid var(--k-bot-border); border-bottom: 1px solid var(--k-bot-border);
}
.kbqa-row.kbqa-user .kbqa-bubble::before {
  content: ""; position: absolute; top: 14px; right: -5px; width: 9px; height: 9px;
  transform: rotate(45deg); background: var(--k-user-bg);
  border-top: 1px solid var(--k-user-border); border-right: 1px solid var(--k-user-border);
}
.kbqa-pending { opacity: .65; font-style: italic; }
.kbqa-tags { margin: 6px 0 0 12px; display: flex; gap: 6px; flex-wrap: wrap; }
.kbqa-tag {
  font-size: calc(11px * var(--font-scale)); padding: 3px 10px; border-radius: 20px; font-weight: 500;
  background: var(--k-tag-bg); color: var(--k-tag-text); border: 1px solid var(--k-tag-border);
  display: inline-flex; align-items: center; gap: 5px;
}
.kbqa-tag::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: currentColor; opacity: .65; }
.kbqa-tag.first { background: var(--k-tag-first-bg); color: var(--k-tag-first-text); border-color: var(--k-tag-first-border); }
.kbqa-tag.src { background: var(--k-src-bg); color: var(--k-src-text); border-color: var(--k-src-border); }

/* ---- 统一答案契约角标 + 反馈（ADR-001） ---- */
.kbqa-meta { margin: 6px 0 0 12px; display: flex; align-items: center; gap: 8px; font-size: calc(11px * var(--font-scale)); color: var(--k-sub); }
.kbqa-badge { padding: 1px 8px; border-radius: 10px; font-size: calc(11px * var(--font-scale)); line-height: 1.6; }
.kbqa-badge-faq { background: var(--k-src-bg); color: var(--k-src-text); border: 1px solid var(--k-src-border); }
.kbqa-badge-rag { background: var(--k-tag-bg); color: var(--k-tag-text); border: 1px solid var(--k-tag-border); }
.kbqa-badge-warn { background: rgba(230, 80, 60, .10); color: #b3261e; border: 1px solid rgba(230, 80, 60, .25); }
/* direct = 意图路由约束直答：无出处的回答必须与 faq/rag 视觉区分，不许伪装制度原文 */
.kbqa-badge-direct { background: rgba(90, 90, 110, .10); color: #5a5a6e; border: 1px solid rgba(90, 90, 110, .25); }
.kbqa-like { border: none; background: transparent; cursor: pointer; font-size: calc(11px * var(--font-scale)); color: var(--k-sub); padding: 1px 4px; border-radius: 8px; }
.kbqa-like:hover { color: var(--k-src-text); background: var(--k-src-bg); }
.kbqa-like-done { color: var(--k-src-text); cursor: default; }
/* 失败气泡（超时/离线/接口错误）的重试入口：明显但不如主按钮抢眼 */
.kbqa-retry {
  margin: 6px 0 0 12px; border: 1px solid var(--k-tag-border); background: var(--k-tag-bg);
  color: var(--k-tag-text); cursor: pointer; font-size: calc(11px * var(--font-scale)); padding: 3px 12px; border-radius: 14px;
}
.kbqa-retry:hover { border-color: var(--k-src-border); color: var(--k-src-text); background: var(--k-src-bg); }
.kbqa-retry[data-done] { opacity: .5; cursor: default; }

.kbqa-inputbar { flex: none; display: flex; gap: 10px; padding: 12px 20px 16px; background: var(--k-page); border-top: 1px solid var(--k-header-border); }
/* 输入 pill：全圆角 + 40px 高（与发送钮齐平），白底 #2E476C 细边 —— 与参考设计逐像素对齐 */
.kbqa-input {
  flex: 1; height: 40px; border: 1px solid var(--k-input-border); border-radius: 999px; padding: 0 16px;
  font-size: calc(14px * var(--font-scale)); background: var(--k-input-bg); color: var(--k-input-text); outline: none;
  transition: border-color .15s, box-shadow .15s;
}
.kbqa-input:focus { border-color: #8b5cf6; box-shadow: 0 0 0 3px rgba(139, 92, 246, .18); }
.kbqa-input::placeholder { color: var(--k-sub); }
/* 发送钮：54×40 squircle + 品牌紫渐变；负右距让钮右缘贴卡片右缘 12px（参考设计实测） */
.kbqa-send {
  flex: none; width: 54px; border: none; border-radius: 12px; cursor: pointer;
  background: linear-gradient(135deg, #6f76ed, #8265f3); color: #fff;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 12px rgba(102, 126, 234, .35);
  margin-right: -8px;
  transition: filter .15s ease, transform .15s ease, box-shadow .15s ease;
}
.kbqa-send:hover { filter: brightness(1.06); transform: translateY(-1px); box-shadow: 0 6px 16px rgba(102, 126, 234, .42); }
.kbqa-send:active { transform: translateY(0); }

@media (max-width: 900px) { .kbqa-side { display: none; } }

/* ============================================================
   企业综合助手（office）· Agentic Agent 展示页（办公事务 + 制造数据只读速查）
   对话区复用平台通用聊天组件（.chat-scroll / .msg / .chat-inputbar），
   此处只放面板布局与"工具调用留痕"等本页专有样式（.of- 前缀）。
   ============================================================ */
/* 页面分区（OA 屏）：对话置顶（问答即入口）→ 办公桌面（手机桌面式三级入口）；
   （数据速查屏）：对话 → 制造数据速查。窄屏逐级回落：三栏 → 两栏 → 单列。 */
.of-grid {
  display: grid; gap: 14px;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  grid-template-areas: "chat chat chat" "snap snap snap";
}
.of-grid.of-grid-oa {
  grid-template-areas:
    "chat chat chat"
    "desk desk desk";
}
.of-a { min-width: 0; }
.of-a-chat { grid-area: chat; }
.of-a-snap { grid-area: snap; }
.of-a-desktop { grid-area: desk; }

/* 面板仓库（隐藏）：各应用的功能面板本体，点桌面瓷片时整块搬进应用窗口。
   必须 display:none（而非仅依赖 [hidden]，避免被其它 display 规则覆盖）。 */
.of-panels { display: none; }

/* —— 办公桌面一级：文件夹瓷片（内嵌 2×2 应用小图标，像手机桌面上的文件夹）—— */
.of-desk {
  display: grid; gap: 14px; justify-content: start;
  grid-template-columns: repeat(auto-fill, 148px);
  padding-top: 4px;
}
.of-desk-tile {
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  padding: 14px 10px 12px; cursor: pointer; font-family: inherit;
  border: 1px solid var(--border); border-radius: var(--radius);
  background: rgba(255, 255, 255, .03); color: var(--text-2);
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}
.of-desk-tile:hover {
  transform: translateY(-3px); border-color: rgba(var(--primary-rgb), .55);
  box-shadow: 0 2px 4px rgba(16, 24, 40, .05), 0 14px 30px rgba(27, 102, 204, .13);
}
.of-desk-ico {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 3px; align-content: center;
  width: 62px; height: 62px; padding: 6px; box-sizing: border-box;
  border-radius: 16px; background: rgba(var(--primary-rgb), .12);
  border: 1px solid rgba(var(--primary-rgb), .28);
}
.of-desk-mini {
  display: flex; align-items: center; justify-content: center;
  width: 23px; height: 23px; border-radius: 7px;
  background: var(--card); color: var(--primary); box-shadow: 0 1px 2px rgba(16, 24, 40, .12);
}
.of-desk-name { font-size: calc(13px * var(--font-scale)); font-weight: 650; color: var(--text); }
.of-desk-cnt { font-size: calc(11px * var(--font-scale)); color: var(--text-3); }

/* —— 办公桌面二级：文件夹窗口里的应用瓷片宫格 —— */
.of-apps {
  display: grid; gap: 12px;
  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
}
.of-app-tile {
  display: grid; grid-template-columns: 40px minmax(0, 1fr);
  grid-template-areas: "ico name" "ico desc";
  align-items: center; gap: 4px 10px;
  padding: 12px; cursor: pointer; font-family: inherit;
  border: 1px solid var(--border); border-radius: 10px;
  background: rgba(255, 255, 255, .03); color: var(--text);
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}
.of-app-tile:hover {
  transform: translateY(-2px); border-color: rgba(var(--primary-rgb), .55);
  box-shadow: 0 8px 22px rgba(16, 24, 40, .1), 0 2px 6px rgba(27, 102, 204, .12);
}
.of-app-tile > .of-app-ico {
  grid-area: ico; display: flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 12px;
  background: rgba(var(--primary-rgb), .13); color: var(--primary);
}
.of-app-tile > .of-app-name { grid-area: name; font-size: calc(13px * var(--font-scale)); font-weight: 650; }
.of-app-tile > .of-app-desc {
  grid-area: desc; font-size: calc(11px * var(--font-scale)); line-height: 1.6; color: var(--text-3);
}
/* OA 列表卡：会议室/餐厅/我的预订三张主卡定高 560px（应用窗口内放开为自适应，见 .of-viewer-app）。
   用**确定高度**（而非 height:100% 依赖栅格行）保证 flex 列有确定高度 → 内容区
   flex:1 吃剩余空间并内部下拉滚动（卡头/筛选条常驻可见）。
   560px 是 14 间会议室 / 8 道菜单下的折中：一屏能看到 6~7 行，剩下的靠卡内滚动，
   不再把「共 14 间」挤在一个只能露 2 行的小窗口里。 */
.of-a-rooms > .card, .of-a-rests > .card, .of-a-mine > .card {
  height: 560px;
  display: flex; flex-direction: column; overflow: hidden;
}
.of-a-rooms #of-rooms-scroll, .of-a-rests #of-menu, .of-a-mine #of-mine {
  flex: 1 1 auto; min-height: 0; overflow-y: auto; padding-right: 4px;
}
/* 我的申请单据：打开应用即全部展开（不做"卡内小视口 + 再点展开"的二次展开），
   外层应用窗口负责滚动，这里只做列表分帧 */
.of-a-myforms #of-myforms {
  border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px;
  background: rgba(255, 255, 255, .02);
}
/* 通用应用窗口：窗口贴内容自适应高度（内容少就小窗，超出才出滚动条），头部只有标题 + 关闭。
   二级文件夹窗口与三级应用窗口共用这套外壳，仅宽度不同。 */
.of-viewer-mask {
  position: fixed; inset: 0; z-index: 9999; background: rgba(15, 23, 42, .48);
  display: flex; align-items: center; justify-content: center; padding: 24px;
  animation: ofMaskIn .16s ease-out;
}
.of-viewer {
  width: min(64vw, 1080px);
  max-height: 86vh;
  display: flex; flex-direction: column; overflow: hidden;
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
  box-shadow: 0 18px 48px rgba(15, 23, 42, .3);
  animation: ofPopIn .18s ease-out;
}
.of-viewer-head {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 12px 16px; border-bottom: 1px solid var(--border);
}
.of-viewer-title {
  display: flex; align-items: center; gap: 8px;
  font-size: calc(14.5px * var(--font-scale)); font-weight: 650; color: var(--text);
}
.of-viewer-actions { display: flex; align-items: center; gap: 8px; }
.of-viewer-body { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 12px 16px; }
/* 二级「文件夹窗口」与三级「应用窗口」的窗口宽度差异 */
.of-viewer-folder { width: min(52vw, 760px); }
.of-viewer-app { width: min(74vw, 1120px); }
/* 应用窗口里放的是整块功能面板：放开面板卡的定高，交给窗口统一滚动（打开即展开态） */
.of-viewer-app .of-viewer-body > .of-panel > .of-a > .card {
  height: auto; overflow: visible;
}
.of-desc { max-width: 1080px; }
@media (max-width: 1200px) {
  .of-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .of-grid.of-grid-oa { grid-template-areas: "chat chat" "desk desk"; }
}
@media (max-width: 860px) {
  .of-grid { grid-template-columns: minmax(0, 1fr); }
  .of-grid.of-grid-oa { grid-template-areas: "chat" "desk"; }
  .of-viewer { width: 94vw; }
}

/* 对话卡片：卡片自带内边距 → 这里归零，让聊天区自己排布；
   置顶后独立定高（窄屏也不会被压扁） */
.card.of-chat-card { padding: 0; overflow: hidden; display: flex; flex-direction: column; }
.of-chat-card .card-head { padding: 14px 16px 10px; }
.of-chat { height: clamp(300px, 42vh, 480px); display: flex; flex-direction: column; background: #0A1322; }
.of-chat .chat-scroll { min-height: 0; }

/* 快捷问句带：与对话区/输入区连成一片灰底，1px 顶边框分隔 */
.of-quick { display: flex; flex-wrap: wrap; gap: 6px; padding: 10px 20px 2px; background: #0A1322; border-top: 1px solid rgba(255, 255, 255, .07); }

/* 快捷示例=完整案例（OA）：一句完整的办理话术（哪天 + 事由 + 类型），
   文字比旧版意图短语长，胶囊改为可换行、高度自适应，前置「类型」小标签便于一眼分辨。
   宽度上限 460px：一行放两条即止（约到 1200px），不再伸到右缘被悬浮帮助助手 FAB 压住尾巴。 */
.of-quick { padding-right: 72px; }
.of-quick .chip-hist {
  height: auto; min-height: 28px; max-width: 460px;
  padding: 5px 13px; white-space: normal; text-align: left; line-height: 1.5;
}
.of-quick .chip-kind {
  flex: none; padding: 0 7px; border-radius: 999px;
  background: var(--primary-light-2); color: var(--primary);
  font-size: calc(11.5px * var(--font-scale)); font-weight: 600; line-height: 17px;
}
html[data-theme="light"] .of-quick .chip-kind { background: rgba(27, 102, 204, .1); }

/* 输入区：复用通用聊天输入条，去掉卡片外的浮起阴影与圆角 */
.of-inputbar {
  border: none;
  border-radius: 0; box-shadow: none; padding: 10px 20px 12px;
}

/* 工具调用留痕（Agentic 证据链：工具名 + 入参 + 成败） */
.of-steps {
  margin: 7px 0 0 12px; padding: 7px 10px; border-radius: 9px;
  background: rgba(255, 255, 255, .045); border: 1px dashed var(--border-strong);
  display: flex; flex-direction: column; gap: 4px;
}
.of-step { display: flex; gap: 6px; font-size: calc(11.6px * var(--font-scale)); line-height: 1.65; color: var(--text-3); word-break: break-all; }
.of-step b { color: var(--text-2); font-weight: 600; }
.of-step .ok { color: var(--ok); flex: none; }
.of-step .bad { color: var(--danger); flex: none; }
.of-step-head { margin-bottom: 3px; font-size: calc(11px * var(--font-scale)); font-weight: 650; color: var(--text-2); }
.of-used { margin: 6px 0 0 12px; font-size: calc(11.4px * var(--font-scale)); line-height: 1.7; color: var(--text-3); }

.of-hitl {
  margin: 7px 0 0 12px; padding: 7px 10px; border-radius: 9px;
  background: var(--warn-bg); color: var(--warn); font-size: calc(11.8px * var(--font-scale)); line-height: 1.7;
}
.of-gaps {
  margin: 7px 0 0 12px; padding: 7px 10px; border-radius: 9px;
  background: var(--danger-bg); color: var(--danger); font-size: calc(11.8px * var(--font-scale)); line-height: 1.7;
}
.of-pending { opacity: .62; font-style: italic; }

/* 目录 / 列表行（会议室、餐厅菜单、我的预订与订单共用） */
.of-item { display: flex; gap: 10px; align-items: center; padding: 9px 0; border-bottom: 1px dashed rgba(255, 255, 255, .07); }
.of-item:last-child { border-bottom: none; }
.of-item-main { flex: 1; min-width: 0; }
.of-item-title { font-size: calc(13px * var(--font-scale)); font-weight: 600; color: var(--text); display: flex; gap: 6px; flex-wrap: wrap; }
.of-item-sub { margin-top: 3px; font-size: calc(11.8px * var(--font-scale)); line-height: 1.7; color: var(--text-3); display: flex; gap: 5px; flex-wrap: wrap; align-items: center; }
.of-code { font-size: calc(11px * var(--font-scale)); font-family: ui-monospace, Consolas, monospace; color: var(--text-3); font-weight: 500; }
.of-mine-label { margin: 10px 0 2px; font-size: calc(12px * var(--font-scale)); font-weight: 650; color: var(--text-2); }
.of-menu-head {
  margin: 8px 0 2px; font-size: calc(12.5px * var(--font-scale)); font-weight: 650; color: var(--text-2);
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
}
.of-note { padding: 7px 0; font-size: calc(12.2px * var(--font-scale)); color: var(--text-3); line-height: 1.7; }

/* ---- 制造数据速查（企业综合助手 · 只读快照） ----
   整行铺满：宽屏两块并排（每块 ≥500px，容纳 7 列明细表），窄屏单列堆叠。 */
/* 关键词速查：输入料号/型号/批号/名称定位到行 → 点行交给助手问答 */
.of-snap-search { display: flex; align-items: center; gap: 8px; margin: 12px 0 2px; }
.of-snap-search input {
  flex: 1; min-width: 0; height: 32px; border: 1px solid var(--border-strong); border-radius: 8px;
  padding: 0 10px; font-size: calc(12.5px * var(--font-scale)); font-family: inherit; color: var(--text); background: rgba(255, 255, 255, .04); outline: none;
}
.of-snap-search input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, .25); }
.of-snap-search input::placeholder { color: var(--text-3); }
.of-snap-hit { margin: 8px 0 0; font-size: calc(11.6px * var(--font-scale)); line-height: 1.7; color: var(--text-3); }
.of-snap-hit b { color: var(--primary); font-weight: 650; }
.of-snap-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 8px; }
.of-snap-block {
  border: 1px solid var(--border); border-radius: 10px; padding: 10px 11px;
  background: var(--bg-soft, #fafbfd); min-width: 0;
  display: flex; flex-direction: column;
  transition: box-shadow .16s ease, border-color .16s ease;
}
.of-snap-block:hover { border-color: var(--border-strong); box-shadow: 0 4px 14px rgba(16, 24, 40, .06); }
.of-snap-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.of-snap-title { font-size: calc(12.8px * var(--font-scale)); font-weight: 650; color: var(--text-2); display: flex; gap: 6px; align-items: baseline; }
.of-snap-count { font-size: calc(11px * var(--font-scale)); font-weight: 500; color: var(--text-3); }
.of-snap-note { margin: 3px 0 6px; font-size: calc(11.2px * var(--font-scale)); line-height: 1.6; color: var(--text-3); }
.of-snap-foot { margin-top: 8px; font-size: calc(11.2px * var(--font-scale)); line-height: 1.7; color: var(--text-3); }

.of-tbl { overflow-x: auto; min-width: 0; }
.of-tbl table { width: 100%; border-collapse: collapse; }
.of-tbl th {
  text-align: left; font-size: calc(11px * var(--font-scale)); font-weight: 600; color: var(--text-3);
  padding: 4px 6px; border-bottom: 1px solid var(--border); white-space: nowrap;
}
/* 文本列允许换行（列宽不足时不再横向溢出），编码/数值列保持等宽不折行 */
.of-tbl td { padding: 5px 6px; font-size: calc(12px * var(--font-scale)); color: var(--text-2); border-bottom: 1px dashed var(--border); }
.of-tbl td.of-num, .of-tbl td.of-mono { white-space: nowrap; }
.of-tbl tr[data-q] { cursor: pointer; }
.of-tbl tr[data-q]:hover { background: rgba(59, 130, 246, 0.06); }
.of-tbl tr.of-short td { background: rgba(239, 68, 68, 0.06); }
.of-num { text-align: right; font-variant-numeric: tabular-nums; }
.of-mono { font-family: ui-monospace, Consolas, monospace; font-size: calc(11.4px * var(--font-scale)); }
.of-bad { color: #dc2626; font-weight: 650; }

.of-age { margin-top: 8px; }
.of-age-head { font-size: calc(11.2px * var(--font-scale)); color: var(--text-3); margin-bottom: 4px; }
.of-age-bars { display: flex; gap: 8px; align-items: flex-end; }
.of-age-col { flex: 1; text-align: center; }
.of-age-num { font-size: calc(11px * var(--font-scale)); color: var(--text-2); font-variant-numeric: tabular-nums; }
.of-age-track {
  height: 44px; margin: 2px 0; border-radius: 5px; background: rgba(59, 130, 246, 0.08);
  display: flex; align-items: flex-end; overflow: hidden;
}
.of-age-bar { width: 100%; background: var(--primary); border-radius: 5px 5px 0 0; min-height: 2px; transition: height .3s; }
.of-age-bar.bad { background: #ef4444; }
.of-age-cap { font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); }
/* 块内是 6-7 列明细表：≥1200px 才并排两块（每块 ≥460px 不挤），以下整块铺满 */
@media (max-width: 1200px) { .of-snap-grid { grid-template-columns: minmax(0, 1fr); } }

/* 可用性查询表单：2×2 栅格 + 整行提交按钮，窄侧栏下也不折行溢出 */
.of-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin: 10px 0 6px; }
.of-form input {
  width: 100%; min-width: 0; height: 30px; border: 1px solid var(--border-strong); border-radius: 7px;
  padding: 0 8px; font-size: calc(12.3px * var(--font-scale)); font-family: inherit; color: var(--text-2);
  background: rgba(255, 255, 255, .04); outline: none;
}
.of-form input:focus { border-color: var(--primary); }
.of-form .of-cap { text-align: center; padding: 0 4px; }
.of-form .of-form-submit { grid-column: 1 / -1; }

/* OA 自助办理入口卡：三入口一行铺满，窄屏回落单列 */
.of-entry { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 6px; }
@media (max-width: 860px) { .of-entry { grid-template-columns: minmax(0, 1fr); } }
.of-entry-item {
  display: flex; flex-direction: column; gap: 6px; align-items: flex-start;
  padding: 12px; border: 1px solid var(--border); border-radius: 10px;
  background: linear-gradient(180deg, rgba(255, 255, 255, .03) 0%, rgba(255, 255, 255, .02) 100%);
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}
.of-entry-item:hover {
  transform: translateY(-2px);
  border-color: rgba(var(--primary-rgb), .55);
  box-shadow: 0 8px 22px rgba(16, 24, 40, .08), 0 2px 6px rgba(27, 102, 204, .10);
}
.of-entry-title { font-size: calc(13.5px * var(--font-scale)); font-weight: 650; color: var(--text); }
.of-entry-sub { flex: 1; font-size: calc(11.5px * var(--font-scale)); line-height: 1.65; color: var(--text-3); }
/* 同卡内的次级分区头（如「报销材料上传」）：与上方入口区以虚线分隔 */
.of-sub-head {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
  margin: 14px 0 10px; padding-top: 12px; border-top: 1px dashed var(--border);
  font-size: calc(13.5px * var(--font-scale)); font-weight: 650; color: var(--text);
}
/* 服务工单（IT 报修 / 账号权限 / 设备领用 / 车位 / 访客车辆 / 公务用车）表单：
   字段声明式渲染（SERVICE_SCHEMA），视觉与既有 .of-form 同口径 */
.of-svc-form {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  margin-top: 6px;
}
.of-svc-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.of-svc-label { font-size: calc(12px * var(--font-scale)); font-weight: 600; color: var(--text-2); }
.of-svc-input {
  width: 100%; min-width: 0; height: 34px; border: 1px solid var(--border-strong);
  border-radius: 8px; padding: 0 10px; font-family: inherit;
  font-size: calc(12.6px * var(--font-scale)); color: var(--text);
  background: rgba(255, 255, 255, .04); outline: none;
}
.of-svc-input:focus { border-color: var(--primary); }
button[data-svc-submit] { margin-top: 12px; }

/* 我的申请单据：假期余额横幅 */
.of-bal {
  margin: 2px 0 8px; padding: 8px 10px; font-size: calc(12px * var(--font-scale)); color: var(--text-2);
  background: var(--primary-light); border-radius: 8px; line-height: 1.7;
}
.of-bal b { color: var(--primary-deep); font-variant-numeric: tabular-nums; }

/* 反问弹窗（ask_user）：遮罩 + 卡片；select/multiselect→chips，其余→输入框 */
.of-clarify-mask {
  position: fixed; inset: 0; z-index: 9999; background: rgba(15, 23, 42, .38);
  display: flex; align-items: center; justify-content: center; padding: 24px;
  animation: ofMaskIn .16s ease-out;
}
@keyframes ofMaskIn { from { opacity: 0; } to { opacity: 1; } }
.of-clarify {
  width: 100%; max-width: 520px; max-height: 86vh; overflow-y: auto;
  background: var(--card); border-radius: var(--radius); box-shadow: 0 18px 48px rgba(15, 23, 42, .24);
  animation: ofPopIn .18s ease-out;
}
@keyframes ofPopIn { from { opacity: 0; transform: translateY(8px) scale(.98); } to { opacity: 1; transform: none; } }
.of-clarify-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 18px 8px;
}
.of-clarify-title { font-size: calc(15px * var(--font-scale)); font-weight: 650; color: var(--text); }
.of-clarify-close {
  border: none; background: none; cursor: pointer; font-size: calc(20px * var(--font-scale)); line-height: 1;
  color: var(--text-3); padding: 0 4px; font-family: inherit;
}
.of-clarify-close:hover { color: var(--text); }
.of-clarify-q { padding: 0 18px 6px; font-size: calc(12.8px * var(--font-scale)); line-height: 1.75; color: var(--text-2); }
.of-clarify-body { padding: 6px 18px 4px; display: flex; flex-direction: column; gap: 12px; }
.of-clarify-field { min-width: 0; }
.of-clarify-label { margin-bottom: 6px; font-size: calc(12.4px * var(--font-scale)); font-weight: 600; color: var(--text-2); }
.of-req { color: var(--danger); font-weight: 700; }
.of-clarify-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.of-clarify-chip {
  padding: 5px 11px; border: 1px solid var(--border-strong); border-radius: 999px;
  background: rgba(255, 255, 255, .04); color: var(--text-2); font-size: calc(12px * var(--font-scale)); cursor: pointer; font-family: inherit;
  transition: all .14s;
}
.of-clarify-chip:hover { border-color: var(--primary); color: var(--primary); }
.of-clarify-chip.active { border-color: var(--primary); background: var(--primary); color: #fff; }
.of-clarify-input {
  width: 100%; min-width: 0; height: 34px; border: 1px solid var(--border-strong); border-radius: 8px;
  padding: 0 10px; font-size: calc(12.6px * var(--font-scale)); font-family: inherit; color: var(--text);
  background: rgba(255, 255, 255, .04); outline: none;
}
.of-clarify-input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, .25); }
.of-clarify-select {
  width: 100%; min-width: 0; height: 34px; border: 1px solid var(--border-strong); border-radius: 8px;
  padding: 0 8px; font-size: calc(12.6px * var(--font-scale)); font-family: inherit; color: var(--text);
  background: rgba(255, 255, 255, .04); outline: none; cursor: pointer;
}
.of-clarify-select:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, .25); }
.of-clarify-foot {
  display: flex; justify-content: flex-end; gap: 8px;
  padding: 12px 18px 16px; border-top: 1px solid var(--border); margin-top: 12px;
}

/* 数据速查：无权限块的「申请查询权限」入口条 */
.of-apply-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 8px; }
.of-apply-hint { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); line-height: 1.6; }

/* ============================================================
   案例助手（cases）· case-screen.js
   命名空间 `.case-` 前缀，避免与看板/知识库样式互相覆盖。
   ============================================================ */

.case-root { display: flex; flex-direction: column; gap: 14px; }

/* ---------- 身份条 ---------- */
.case-identity {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 18px;
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
  padding: 14px 16px; flex-wrap: wrap;
  box-shadow: var(--shadow-sm), inset 0 1px 0 rgba(255, 255, 255, .05);
}
.case-identity-left { flex: 1 1 520px; min-width: 0; }
.case-id-row { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; }
.case-id-row label {
  display: flex; flex-direction: column; gap: 4px;
  font-size: calc(11px * var(--font-scale)); color: var(--text-3);
}
.case-id-row input, .case-id-row select {
  height: 32px; min-width: 92px; padding: 0 8px;
  border: 1px solid var(--border-strong); border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, .04); color: var(--text); font-size: calc(12.5px * var(--font-scale)); font-family: inherit;
}
.case-id-row input:focus, .case-id-row select:focus { outline: none; border-color: var(--primary); }
.case-id-row #case-role { min-width: 210px; }
.case-id-note { margin-top: 9px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); line-height: 1.6; }
.case-id-note b { color: var(--text-2); font-weight: 600; }

.case-principal {
  flex: 0 1 380px; min-width: 260px;
  border-left: 1px dashed var(--border-strong); padding-left: 16px;
}
.case-principal-name { font-size: calc(13px * var(--font-scale)); font-weight: 600; color: var(--text); }
.case-principal-name i { font-style: normal; font-weight: 400; color: var(--primary); margin-left: 6px; }
.case-principal-meta { margin-top: 3px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); line-height: 1.7; }
.case-token-row { margin-top: 6px; display: flex; gap: 5px; flex-wrap: wrap; }
.case-token {
  font-size: calc(10.5px * var(--font-scale)); padding: 1px 6px; border-radius: 5px;
  background: var(--primary-light); color: var(--primary-deep);
  font-family: ui-monospace, Menlo, Consolas, monospace;
}

/* ---------- 按钮 ---------- */
.case-btn {
  height: 32px; padding: 0 14px; border-radius: var(--radius-sm);
  border: 1px solid transparent;
  background: linear-gradient(180deg, var(--primary-bright) 0%, var(--primary) 100%);
  color: #fff;
  font-size: calc(12.5px * var(--font-scale)); font-weight: 500; cursor: pointer; font-family: inherit;
  box-shadow: 0 1px 2px rgba(16, 24, 40, .10), 0 3px 9px rgba(27, 102, 204, .22);
  transition: all .15s ease;
}
.case-btn:hover { background: linear-gradient(180deg, var(--primary-bright) 0%, var(--primary-dark) 100%); box-shadow: 0 2px 4px rgba(16,24,40,.10), 0 5px 13px rgba(27, 102, 204, .30); transform: translateY(-1px); }
.case-btn:active { transform: translateY(0); }
.case-btn-ghost { background: rgba(255, 255, 255, .04); color: var(--primary); border-color: var(--primary); box-shadow: none; }
.case-btn-ghost:hover { background: var(--primary-light); box-shadow: none; transform: none; }
.case-btn-wide { width: 100%; margin-top: 8px; }
/* 提问窗主按钮：40px 高 squircle + 品牌紫渐变 —— 与各对话窗口发送钮一致 */
.case-btn-ask {
  height: 40px; padding: 0 18px; border: none; border-radius: 12px;
  background: linear-gradient(135deg, #6f76ed, #8265f3); color: #fff;
  font-size: calc(13px * var(--font-scale)); font-weight: 500; cursor: pointer; font-family: inherit;
  box-shadow: 0 4px 12px rgba(102, 126, 234, .35);
  transition: filter .15s;
}
.case-btn-ask:hover { filter: brightness(1.06); }
.case-mini {
  height: 24px; padding: 0 9px; border-radius: 6px; cursor: pointer;
  border: 1px solid var(--border-strong); background: rgba(255, 255, 255, .04); color: var(--text-2);
  font-size: calc(11.5px * var(--font-scale)); font-family: inherit;
}
.case-mini:hover { border-color: var(--primary); color: var(--primary); }

/* ---------- 两栏 ---------- */
.case-body { display: grid; grid-template-columns: 264px minmax(0, 1fr); gap: 14px; align-items: start; }
@media (max-width: 1080px) { .case-body { grid-template-columns: minmax(0, 1fr); } }

.case-side {
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
  padding: 14px; box-shadow: var(--shadow-sm);
}
.case-side-empty { font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); line-height: 1.8; }
/* 加载失败优化：友好文案 + 重试入口 + 技术详情折叠（不再裸露原始报错） */
.case-load-fail-title {
  display: flex; align-items: center; gap: 7px;
  font-size: calc(13.5px * var(--font-scale)); font-weight: 650; color: var(--text); margin-bottom: 6px;
}
.case-load-fail-title svg { color: var(--warn); flex: none; }
.case-load-fail-text { margin-bottom: 10px; }
.case-side-empty .case-btn-wide { margin-bottom: 8px; }
.case-side-title {
  font-size: calc(11px * var(--font-scale)); font-weight: 600; color: var(--text-3);
  letter-spacing: .04em; margin: 14px 0 7px;
}
.case-side-block .case-side-title:first-child { margin-top: 0; }
.case-chip-row { display: flex; gap: 5px; flex-wrap: wrap; }
.case-chip {
  font-size: calc(11px * var(--font-scale)); padding: 2px 8px; border-radius: 999px;
  background: rgba(255, 255, 255, .07); color: var(--text-2);
}
.case-chip-on { background: var(--ok-bg); color: var(--ok); }
.case-act-row {
  display: flex; justify-content: space-between; gap: 8px;
  font-size: calc(12px * var(--font-scale)); color: var(--text-2); padding: 4px 0;
  border-bottom: 1px dashed var(--border);
}
.case-act-row:last-child { border-bottom: 0; }
.case-act-row b { font-weight: 500; color: var(--text-3); font-size: calc(11.5px * var(--font-scale)); }
.case-act-off { opacity: .45; }

/* ---------- 主区 ---------- */
.case-main {
  position: relative;
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
  padding: 14px 16px 18px; box-shadow: var(--shadow-sm); min-height: 420px;
}
.case-main::before {
  content: ""; position: absolute; left: 0; right: 0; top: 0; height: 3px;
  border-radius: var(--radius) var(--radius) 0 0;
  background: linear-gradient(90deg, var(--primary) 0%, var(--primary-bright) 45%, rgba(46, 134, 224, 0) 92%);
  opacity: .9; pointer-events: none; z-index: 3;
}
.case-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); margin-bottom: 12px; }
.case-tab {
  border: 0; background: none; cursor: pointer; font-family: inherit;
  padding: 8px 12px; font-size: calc(13px * var(--font-scale)); color: var(--text-2);
  border-bottom: 2px solid transparent;
}
.case-tab:hover { color: var(--primary); }
.case-tab.is-active { color: var(--primary); border-bottom-color: var(--primary); font-weight: 600; }

.case-searchbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.case-input {
  flex: 1 1 260px; min-width: 180px; height: 34px; padding: 0 11px;
  border: 1px solid var(--border-strong); border-radius: var(--radius-sm);
  font-size: calc(13px * var(--font-scale)); font-family: inherit; color: var(--text); background: rgba(255, 255, 255, .04);
}
.case-input:focus { outline: none; border-color: var(--primary); }
/* 提问窗输入：pill + 40px 高（与提问钮齐平），白底 #2E476C 细边 —— 与参考设计一致 */
.case-input-ask {
  height: 40px; padding: 0 16px;
  border: 1px solid #2E476C; border-radius: 999px;
}
.case-input-ask:focus { border-color: #8b5cf6; box-shadow: 0 0 0 3px rgba(139, 92, 246, .18); }
.case-select {
  height: 34px; padding: 0 8px; border-radius: var(--radius-sm);
  border: 1px solid var(--border-strong); background: rgba(255, 255, 255, .04);
  font-size: calc(12.5px * var(--font-scale)); font-family: inherit; color: var(--text);
}
.case-policy-note {
  margin-top: 9px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3);
  background: var(--primary-light-2); border: 1px dashed var(--border-strong);
  border-radius: var(--radius-sm); padding: 7px 10px; line-height: 1.7;
}
.case-policy-note b { color: var(--text-2); }

/* ---------- 提示 / 证据 ---------- */
.case-notice {
  display: flex; gap: 9px; align-items: flex-start;
  margin-top: 10px; padding: 9px 11px; border-radius: var(--radius-sm);
  font-size: calc(12px * var(--font-scale)); line-height: 1.7;
}
.case-notice-warn { background: var(--warn-bg); color: var(--warn); }
.case-notice-info { background: var(--info-bg); color: var(--primary-deep); }
.case-notice-ico {
  flex: none; width: 16px; height: 16px; border-radius: 50%;
  background: currentColor; color: #fff; font-size: calc(11px * var(--font-scale)); font-weight: 700;
  display: flex; align-items: center; justify-content: center; margin-top: 1px;
}
.case-evidence {
  margin-top: 9px; display: flex; gap: 12px; flex-wrap: wrap;
  font-size: calc(11px * var(--font-scale)); color: var(--text-3);
  font-family: ui-monospace, Menlo, Consolas, monospace;
}
.case-evidence-item::before { content: "·"; margin-right: 5px; color: var(--border-strong); }

/* ---------- 命中卡片 ---------- */
.case-hits { margin-top: 12px; display: flex; flex-direction: column; gap: 9px; }
.case-hit {
  display: flex; gap: 12px; padding: 11px 12px; cursor: pointer;
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, .04); transition: border-color .15s, box-shadow .15s, transform .15s;
}
.case-hit:hover, .case-hit:focus {
  border-color: rgba(var(--primary-rgb), .65);
  box-shadow: 0 6px 18px rgba(27, 102, 204, .10), 0 1px 3px rgba(16, 24, 40, .05);
  transform: translateY(-1px);
  outline: none;
}
.case-hit-score {
  flex: none; width: 52px; text-align: center; font-size: calc(13px * var(--font-scale)); font-weight: 600;
  color: var(--primary); font-variant-numeric: tabular-nums;
}
.case-hit-score i { display: block; font-style: normal; font-size: calc(10px * var(--font-scale)); color: var(--text-3); font-weight: 400; }
.case-hit-body { flex: 1; min-width: 0; }
.case-hit-top { display: flex; gap: 8px; align-items: center; justify-content: space-between; }
.case-hit-top h4 { margin: 0; font-size: calc(13.5px * var(--font-scale)); font-weight: 600; color: var(--text); line-height: 1.5; }
.case-hit-meta { margin-top: 3px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
.case-hit-text {
  margin: 6px 0 0; font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); line-height: 1.75;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.case-hit-foot {
  margin-top: 7px; display: flex; gap: 9px; align-items: center;
  font-size: calc(11px * var(--font-scale)); color: var(--text-3); flex-wrap: wrap;
}
.case-hit-foot code {
  font-family: ui-monospace, Menlo, Consolas, monospace;
  background: rgba(255, 255, 255, .06); padding: 1px 5px; border-radius: 4px; color: var(--text-2);
}
.case-chunk { color: var(--text-3); }
.case-hit-actions { margin-left: auto; display: flex; gap: 6px; }

/* ---------- 空态 / 加载 / 拒绝 ---------- */
.case-empty, .case-loading, .case-gate, .case-deny {
  padding: 26px 14px; text-align: center; font-size: calc(13px * var(--font-scale)); color: var(--text-2); line-height: 1.85;
}
.case-empty b { color: var(--primary); font-size: calc(15px * var(--font-scale)); }
.case-gate h3 { margin: 0 0 8px; font-size: calc(15px * var(--font-scale)); color: var(--text); }
.case-gate p { margin: 6px 0; }
.case-deny { background: var(--danger-bg); border-radius: var(--radius-sm); text-align: left; }
.case-deny b { color: var(--danger); font-family: ui-monospace, Menlo, Consolas, monospace; }
.case-offline {
  margin: 40px auto; max-width: 620px; text-align: center;
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
  padding: 28px; box-shadow: var(--shadow-sm); line-height: 1.9; font-size: calc(13px * var(--font-scale)); color: var(--text-2);
}
.case-offline-ico {
  display: inline-block; margin-bottom: 10px; padding: 5px 12px; border-radius: 999px;
  background: var(--warn-bg); color: var(--warn); font-size: calc(12px * var(--font-scale)); font-weight: 600;
}
.case-hint { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); line-height: 1.8; }
.case-pad { padding: 12px 2px; }
.case-ok { color: var(--ok); }
.case-bad { color: var(--danger); }
.case-warn { color: var(--warn); font-size: calc(12px * var(--font-scale)); }
.case-warn-inline { color: var(--warn); font-size: calc(11px * var(--font-scale)); font-style: normal; margin-left: 6px; }

/* ---------- 详情 / 录入 弹层 ---------- */
.case-modal {
  position: fixed; inset: 0; z-index: 60; background: rgba(31, 39, 51, .34);
  display: flex; align-items: flex-start; justify-content: center;
  padding: 48px 20px; overflow-y: auto;
}
.case-modal-card {
  width: min(760px, 100%); background: var(--card); border-radius: var(--radius);
  box-shadow: var(--shadow-pop); padding: 16px 18px 18px;
}
.case-modal-head {
  display: flex; gap: 10px; align-items: center;
  padding-bottom: 10px; border-bottom: 1px solid var(--border); margin-bottom: 10px;
}
.case-modal-head b { flex: 1; font-size: calc(14px * var(--font-scale)); color: var(--text); line-height: 1.5; }

/* ---------- 演示专用：自动审批执行弹层 ---------- */
.case-auto-card { width: min(560px, 100%); }
.case-auto-steps { margin-top: 2px; }
.case-auto-step {
  display: flex; gap: 10px; align-items: flex-start; padding: 6px 0;
  font-size: calc(12.8px * var(--font-scale)); color: var(--text-3); line-height: 1.6;
}
.case-auto-ico {
  flex-shrink: 0; width: 17px; height: 17px; margin-top: 1px;
  border-radius: 50%; border: 1px solid var(--border-strong); background: rgba(255, 255, 255, .04);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(10px * var(--font-scale)); font-weight: 700; color: var(--text-3);
}
.case-auto-step.is-done { color: var(--text-2); }
.case-auto-step.is-done .case-auto-ico { background: var(--ok); border-color: var(--ok); color: #fff; }
.case-auto-step.is-run { color: var(--text); font-weight: 600; }
.case-auto-step.is-run .case-auto-ico {
  border-color: var(--primary); color: var(--primary);
  animation: case-auto-pulse 1.1s ease-in-out infinite;
}
.case-auto-step.is-fail { color: var(--danger); }
.case-auto-step.is-fail .case-auto-ico { background: var(--danger); border-color: var(--danger); color: #fff; }
@keyframes case-auto-pulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--primary-light); }
  50% { box-shadow: 0 0 0 5px var(--primary-light); }
}
.case-auto-result {
  margin-top: 12px; padding: 10px 12px; border-radius: var(--radius-sm);
  font-size: calc(12.3px * var(--font-scale)); color: var(--text-2); line-height: 1.85;
}
.case-auto-result b { color: var(--text); }
.case-auto-result.is-ok { background: var(--ok-bg); border: 1px solid var(--ok); }
.case-auto-result.is-err { background: var(--warn-bg); border: 1px dashed var(--warn); }
.case-auto-bar {
  margin-top: 14px; display: flex; justify-content: flex-end; gap: 8px; align-items: center;
}
.case-auto-note { margin-top: 10px; font-size: calc(11.3px * var(--font-scale)); color: var(--text-3); line-height: 1.75; }
.case-chip-done { background: var(--ok); color: #fff; }
.case-detail-meta { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-bottom: 8px; line-height: 1.8; }
.case-detail-sec { margin-top: 12px; }
.case-detail-sec h5 {
  margin: 0 0 4px; font-size: calc(12px * var(--font-scale)); color: var(--primary); font-weight: 600;
  letter-spacing: .03em;
}
.case-detail-sec p { margin: 0; font-size: calc(13px * var(--font-scale)); color: var(--text-2); line-height: 1.85; }
.case-detail-foot {
  margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border);
  display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap;
}
.case-cite-result {
  margin-top: 12px; padding: 10px 12px; border-radius: var(--radius-sm);
  background: var(--primary-light-2); border: 1px dashed var(--border-strong);
}
.case-cite {
  display: inline-block; font-family: ui-monospace, Menlo, Consolas, monospace;
  font-size: calc(11px * var(--font-scale)); background: rgba(255, 255, 255, .04); border: 1px solid var(--border);
  border-radius: 5px; padding: 2px 6px; color: var(--primary-deep); margin: 2px 4px 2px 0;
}
.case-cite-row { display: flex; flex-wrap: wrap; }

/* ---------- 问答 ---------- */
.case-answer { margin-top: 14px; font-size: calc(13px * var(--font-scale)); color: var(--text-2); line-height: 1.9; }
.case-answer h4 { margin: 0 0 6px; font-size: calc(12.5px * var(--font-scale)); color: var(--primary); }
.case-answer p { margin: 0; }
.case-answer-deny { background: var(--warn-bg); border-radius: var(--radius-sm); padding: 12px 14px; }
.case-answer-deny h4 { color: var(--warn); }
.case-claims { margin: 6px 0 0; padding-left: 18px; }
.case-claims li { margin-bottom: 7px; font-size: calc(12.5px * var(--font-scale)); line-height: 1.85; }
.case-claims li span { display: block; }

/* ---------- 岗位对比 ---------- */
.case-cmp { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 14px; }
@media (max-width: 760px) { .case-cmp { grid-template-columns: minmax(0, 1fr); } }
.case-cmp-col { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 12px; }
.case-cmp-col h5 { margin: 0 0 6px; font-size: calc(12.5px * var(--font-scale)); color: var(--text); }
.case-cmp-num { font-size: calc(22px * var(--font-scale)); font-weight: 700; color: var(--primary); line-height: 1.2; }
.case-cmp-sub { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-top: 2px; }
.case-cmp-list { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 5px; }
.case-cmp-list code {
  font-family: ui-monospace, Menlo, Consolas, monospace; font-size: calc(10.5px * var(--font-scale));
  background: rgba(255, 255, 255, .06); border-radius: 4px; padding: 1px 5px; color: var(--text-2);
}
.case-cmp-only { background: var(--warn-bg) !important; color: var(--warn) !important; }
.case-cmp-diff {
  margin-top: 12px; padding: 10px 12px; border-radius: var(--radius-sm);
  background: var(--primary-light-2); font-size: calc(12px * var(--font-scale)); color: var(--text-2); line-height: 1.9;
}
.case-cmp-diff b { color: var(--text); }

/* ---------- 审计 ---------- */
.case-audit-sum {
  margin-top: 12px; font-size: calc(12.5px * var(--font-scale)); color: var(--text-2);
  padding: 9px 11px; border-radius: var(--radius-sm); background: var(--primary-light-2);
}
.case-audit-table { width: 100%; border-collapse: collapse; margin-top: 10px; font-size: calc(11.5px * var(--font-scale)); }
.case-audit-table th, .case-audit-table td {
  text-align: left; padding: 6px 8px; border-bottom: 1px solid var(--border); color: var(--text-2);
}
.case-audit-table th { color: var(--text-3); font-weight: 600; font-size: calc(10.5px * var(--font-scale)); letter-spacing: .03em; }
.case-audit-table code { font-family: ui-monospace, Menlo, Consolas, monospace; color: var(--text-3); }

/* ---------- 录入表单 ---------- */
.case-form { display: flex; flex-direction: column; gap: 9px; }
.case-form-row { display: flex; flex-direction: column; gap: 4px; font-size: calc(11px * var(--font-scale)); color: var(--text-3); }
.case-form-row input, .case-form-row textarea {
  border: 1px solid var(--border-strong); border-radius: var(--radius-sm);
  padding: 7px 9px; font-size: calc(12.5px * var(--font-scale)); font-family: inherit; color: var(--text);
  background: rgba(255, 255, 255, .04); resize: vertical;
}
.case-form-row input:focus, .case-form-row textarea:focus {
  outline: none; border-color: var(--primary);
}
.case-form-foot {
  margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border);
  display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap;
}

/* 岗位对比里的部门输入（授权维度，窄一点，避免挤掉关键词框） */
.case-dept-input {
  width: 118px; height: 34px; padding: 0 9px; border-radius: var(--radius-sm);
  border: 1px solid var(--border-strong); background: rgba(255, 255, 255, .04);
  font-size: calc(12.5px * var(--font-scale)); font-family: inherit; color: var(--text);
}
.case-dept-input:focus { outline: none; border-color: var(--primary); }

/* ---------- 案例助手 · 身份条补充（tv/pv、错误条） ---------- */
.case-tv {
  margin-left: 8px; font-size: calc(11px * var(--font-scale)); font-weight: 500; color: var(--text-3);
  font-family: ui-monospace, Menlo, Consolas, monospace;
}
.case-principal-empty .case-principal-name { color: var(--text-3); font-weight: 500; }
.case-auth-error {
  margin-top: 10px; padding: 9px 12px; border-radius: var(--radius-sm);
  background: var(--danger-bg); color: var(--danger); font-size: calc(12.5px * var(--font-scale));
  border: 1px solid rgba(207, 34, 46, .18);
}

/* ---------- 降级告警（degraded）---------- */
.case-degrade {
  margin-top: 10px; padding: 10px 12px; border-radius: var(--radius-sm);
  background: var(--warn-bg); color: var(--warn); font-size: calc(12.5px * var(--font-scale));
  display: flex; gap: 9px; align-items: baseline; flex-wrap: wrap;
}
.case-degrade b { font-weight: 700; }

/* ---------- 「为什么看不到」折叠面板 ---------- */
.case-why {
  margin-top: 10px; border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, .03);
}
.case-why > summary {
  cursor: pointer; padding: 9px 12px; font-size: calc(12.5px * var(--font-scale)); color: var(--primary);
  user-select: none; list-style: none;
}
.case-why > summary::-webkit-details-marker { display: none; }
.case-why > summary::before { content: "▸ "; }
.case-why[open] > summary::before { content: "▾ "; }
.case-why > summary:hover { background: var(--primary-light-2); }
.case-why-row {
  display: flex; justify-content: space-between; gap: 12px;
  padding: 4px 12px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2);
}
.case-why-row code {
  font-family: ui-monospace, Menlo, Consolas, monospace; color: var(--text-3);
  font-size: calc(11px * var(--font-scale)); max-width: 62%; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap;
}
.case-why-list { margin: 4px 0 0; padding: 0 12px 0 30px; }
.case-why-list li { font-size: calc(12px * var(--font-scale)); color: var(--text-2); line-height: 1.85; }

/* ---------- 卡片内联引用证据 ---------- */
.case-cite-inline {
  margin-top: 7px; padding: 6px 9px; border-radius: 6px;
  background: var(--ok-bg); color: var(--ok); font-size: calc(11.5px * var(--font-scale));
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
}
.case-cite-inline code {
  font-family: ui-monospace, Menlo, Consolas, monospace; font-size: calc(10.5px * var(--font-scale));
  background: rgba(255, 255, 255, .04); border-radius: 4px; padding: 1px 5px; color: var(--ok);
}
.case-notice-inline {
  margin-top: 8px; padding: 7px 10px; border-radius: 6px;
  background: var(--primary-light-2); color: var(--text-2);
}
.case-claims li em {
  font-style: normal; color: var(--text-3); font-size: calc(11px * var(--font-scale)); margin-right: 6px;
}

/* ---------- 演示风险条（AUTH_SECRET / 演示开关）---------- */
.case-warn-bar {
  margin: 0; padding: 7px 10px; border-radius: 6px;
  background: var(--warn-bg); border-left: 3px solid var(--warn);
  display: flex; flex-direction: column; gap: 3px;
}
.case-warn-line { font-size: calc(11.5px * var(--font-scale)); color: var(--warn); line-height: 1.6; }
.case-warn-line b { margin-right: 6px; font-weight: 600; }

/* 演示说明黄条：可收起（信息不丢，噪音可控） */
.case-warn-bar { position: relative; }
.case-warn-bar.is-collapsed { padding: 4px 10px; }
.case-warn-bar:not(.is-collapsed) .case-warn-line { padding-right: 46px; }
.case-warn-toggle {
  position: absolute; top: 4px; right: 6px; padding: 2px 7px;
  border: 1px solid var(--border-strong); border-radius: 6px;
  background: var(--card); color: var(--text-3);
  font-size: calc(11px * var(--font-scale)); cursor: pointer; font-family: inherit;
}
.case-warn-toggle:hover { color: var(--warn); border-color: var(--warn); }
.case-warn-bar.is-collapsed .case-warn-toggle {
  position: static; border: none; background: none; color: var(--warn); padding: 0;
}

/* ---------- 底部统计条（2026-10-20 由顶部下移；随页面滚动，不吸底） ---------- */
.case-stats {
  position: relative; margin: 0; padding: 10px 12px;
  border: 1px solid var(--border); border-radius: 10px; background: var(--card);
  display: flex; flex-direction: column; gap: 8px;
}
.case-stats.is-loading {
  flex-direction: row; align-items: center; gap: 6px;
  font-size: calc(12px * var(--font-scale)); color: var(--text-2);
}
.case-stats-fail { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); line-height: 1.6; }
.case-stats-cards {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));
}
.case-stat {
  padding: 9px 12px; border-radius: 9px; border: 1px solid var(--border);
  background: var(--primary-light-2);
  display: flex; flex-direction: column; gap: 2px;
}
.case-stat b { font-size: calc(22px * var(--font-scale)); font-weight: 600; line-height: 1.15; color: var(--text); }
.case-stat span { font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.case-stat[data-stats-jump] { cursor: pointer; }
.case-stat[data-stats-jump]:hover {
  border-color: var(--primary); background: var(--primary-light);
}
.case-stat.is-warn b { color: var(--warn); }
.case-stats-dist { display: flex; flex-direction: column; gap: 4px; }
.case-dist-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.case-dist-row em {
  font-style: normal; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); margin-right: 2px;
}
.case-dist-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 9px; border-radius: 10px; font-size: calc(11.5px * var(--font-scale));
  background: var(--bg); color: var(--text-2);
  white-space: nowrap;   /* 芯片内不折行："制程不良案例 18" 必须一行 */
}
.case-dist-chip i { font-style: normal; color: var(--text-3); margin-right: 4px; }
.case-dist-chip.is-rest { color: var(--text-3); }
.case-dist-note { font-size: calc(11px * var(--font-scale)); color: var(--text-3); }
.case-stats-refresh {
  position: absolute; top: 7px; right: 7px; padding: 3px;
  border: none; border-radius: 6px; background: none; color: var(--text-3);
  cursor: pointer; display: flex; align-items: center;
}
.case-stats-refresh:hover { color: var(--primary); background: var(--primary-light-2); }

/* ---------- 同案例多片段折叠 ---------- */
.case-chunk-count {
  margin-left: 8px; padding: 1px 7px; border-radius: 10px;
  background: var(--primary-light-2); color: var(--primary);
  font-size: calc(11px * var(--font-scale)); white-space: nowrap;
}
.case-chunk-list { margin-top: 8px; }
.case-chunk-list summary {
  cursor: pointer; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2);
  padding: 3px 0; user-select: none;
}
.case-chunk-list summary:hover { color: var(--primary); }
.case-chunk-list ul { list-style: none; margin: 6px 0 0; padding: 0; }
.case-chunk-row {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 6px 8px; border-radius: 6px;
  border: 1px solid var(--border); background: var(--card);
  margin-bottom: 5px;
}
.case-chunk-row.case-chunk-cited { border-color: var(--ok); background: var(--ok-bg); }
.case-chunk-tag {
  flex: none; min-width: 62px; font-size: calc(11px * var(--font-scale)); color: var(--text-3);
}
.case-chunk-score {
  flex: none; font-family: ui-monospace, Menlo, Consolas, monospace;
  font-size: calc(11px * var(--font-scale)); color: var(--text-3);
}
.case-chunk-text {
  flex: 1 1 auto; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); line-height: 1.6;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden;
}
.case-chunk-act { flex: none; display: flex; align-items: center; gap: 6px; }
.case-cited-flag { font-style: normal; font-size: calc(11px * var(--font-scale)); color: var(--ok); }

/* ---------- 主区重排：问答在上、检索在下 ---------- */
.case-block { margin-bottom: 14px; }
.case-block-title {
  margin: 0 0 8px; font-size: calc(14px * var(--font-scale)); color: var(--text);
  display: flex; align-items: baseline; gap: 10px;
}
.case-block-fold > summary {
  cursor: pointer; font-size: calc(13px * var(--font-scale)); color: var(--text-2); padding: 7px 0;
  user-select: none; font-weight: 600;
}
.case-block-fold > summary:hover { color: var(--primary); }
.case-side-links { display: flex; gap: 8px; margin: 10px 0; flex-wrap: wrap; }
.case-link {
  border: 1px solid var(--border); background: var(--card); color: var(--text-2);
  border-radius: 999px; padding: 4px 12px; font-size: calc(12px * var(--font-scale)); cursor: pointer;
}
.case-link:hover { border-color: var(--primary); color: var(--primary); }
.case-link.is-active { background: var(--primary); border-color: var(--primary); color: #fff; }

/* ---------- 本体增强处理轨迹 ---------- */
.case-trace { margin: 0 0 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--card); }
.case-trace > summary {
  cursor: pointer; padding: 8px 10px; font-size: calc(12.5px * var(--font-scale)); font-weight: 600;
  color: var(--text); user-select: none;
}
.case-trace-list { margin: 0; padding: 4px 12px 10px 30px; }
.case-trace-step { margin-bottom: 8px; }
.case-trace-no {
  display: inline-block; min-width: 18px; height: 18px; line-height: 18px;
  text-align: center; border-radius: 50%; background: var(--primary-light-2);
  color: var(--primary); font-size: calc(11px * var(--font-scale)); margin-right: 6px;
}
.case-trace-body b { font-size: calc(12.5px * var(--font-scale)); color: var(--text); }
.case-trace-body p { margin: 2px 0; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); line-height: 1.6; }
.case-trace-items { margin: 3px 0 0; padding-left: 16px; }
.case-trace-items li { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); line-height: 1.7; }

/* ---------- 技术详情（英文标识只允许出现在这里） ---------- */
.case-tech { margin-top: 4px; }
.case-tech > summary {
  cursor: pointer; font-size: calc(11px * var(--font-scale)); color: var(--text-3); user-select: none;
}
.case-tech > code {
  display: block; margin-top: 4px; padding: 6px 8px; border-radius: 5px;
  background: var(--primary-light-2); font-size: calc(10.5px * var(--font-scale)); color: var(--text-2);
  white-space: pre-wrap; word-break: break-all;
}

/* ---------- 访问申请 ---------- */
.case-restricted { margin-top: 10px; }
.case-table { width: 100%; border-collapse: collapse; margin-top: 6px; }
.case-table th, .case-table td {
  text-align: left; padding: 6px 8px; font-size: calc(12px * var(--font-scale));
  border-bottom: 1px solid var(--border);
}
.case-table th { color: var(--text-3); font-weight: 600; }
.case-mini-key { border-color: var(--primary); color: var(--primary); }
.case-access-form {
  margin-top: 10px; padding: 10px; border-radius: 8px;
  background: var(--primary-light-2); border: 1px solid var(--border);
}
.case-textarea {
  width: 100%; box-sizing: border-box; padding: 8px; font-size: calc(12.5px * var(--font-scale));
  border: 1px solid var(--border); border-radius: 6px; resize: vertical;
  font-family: inherit; color: var(--text);
}
.case-access-act { margin-top: 8px; display: flex; gap: 8px; }

/* ---------- 本体与资产（侧栏） ---------- */
.case-gain {
  margin: 8px 0; padding: 8px 10px; border-radius: 6px;
  background: var(--ok-bg); color: var(--ok); font-size: calc(11.5px * var(--font-scale)); line-height: 1.6;
}
.case-gain b { display: block; margin-bottom: 2px; }
.case-dist-row {
  display: flex; align-items: center; gap: 6px; font-size: calc(11.5px * var(--font-scale));
  color: var(--text-2); margin-bottom: 4px;
}
.case-dist-row span { flex: none; width: 72px; }
.case-dist-row i {
  display: block; height: 8px; border-radius: 4px;
  background: var(--primary-light-2); border-left: 3px solid var(--primary);
}
.case-dist-row b { flex: none; color: var(--text-3); font-weight: 500; }
.case-foot-cn { font-size: calc(11px * var(--font-scale)); color: var(--text-3); }
.case-cite-cn { font-size: calc(11px * var(--font-scale)); color: var(--ok); }

/* ---------- 帮助中心：技术 / 目的 卡片 ---------- */
.help-line {
  margin-top: 7px; font-size: calc(12.2px * var(--font-scale)); line-height: 1.8; color: var(--text-2);
}
.help-tag {
  display: inline-block; font-size: calc(10.5px * var(--font-scale)); font-weight: 700; padding: 1px 7px;
  border-radius: 4px; margin-right: 7px; vertical-align: 1px; flex: none;
}
.help-tag-tech { background: var(--primary-light-2); color: var(--primary); }
.help-tag-goal { background: var(--ok-bg); color: var(--ok); }

/* ---------- 帮助中心：技术栈对照表 ---------- */
.help-table { width: 100%; border-collapse: collapse; font-size: calc(12.2px * var(--font-scale)); }
.help-table th {
  text-align: left; padding: 8px 10px; background: var(--primary-light-2);
  color: var(--primary); font-weight: 700; font-size: calc(11.5px * var(--font-scale));
  border-bottom: 1px solid var(--border);
}
.help-table td {
  padding: 8px 10px; border-top: 1px solid var(--border);
  color: var(--text-2); vertical-align: top; line-height: 1.75;
}
.help-table td b { color: var(--text); }
.help-table code, .help-line code {
  font-family: ui-monospace, Consolas, Menlo, monospace; font-size: calc(11.3px * var(--font-scale));
  padding: 1px 5px; border-radius: 4px; background: var(--bg-2, #F2F5F8);
  color: var(--text); border: 1px solid var(--border);
}

/* ================= 案例检索 · 界面创新（I2/I3/I6/I7/I9/I10） =================
 * 追加样式，命名一律 `case-` 前缀，不与既有规则冲突。纯展示，不改变任何判定。 */

/* I2 · 加入对比按钮 + 选中态 */
.case-pick { white-space: nowrap; }
.case-pick.is-on { background: var(--accent, #2F6FEB); color: #fff; border-color: var(--accent, #2F6FEB); }
.case-hit-picked { border-color: var(--accent, #2F6FEB); box-shadow: 0 0 0 1px var(--accent, #2F6FEB) inset; }

/* I2 · 关键差异对比表 */
.case-diff { margin: 10px 0 14px; border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; background: var(--bg-2, rgba(255, 255, 255, .05)); }
.case-diff > summary { cursor: pointer; font-weight: 600; color: var(--text); }
.case-diff-table { width: 100%; margin-top: 8px; border-collapse: collapse; }
.case-diff-table th, .case-diff-table td { padding: 6px 8px; border-top: 1px solid var(--border); text-align: left; font-size: calc(12.5px * var(--font-scale)); }
.case-diff-table thead th { border-top: none; color: var(--text-2); font-weight: 600; }
.case-diff-table tbody th { color: var(--text-2); white-space: nowrap; width: 1%; }
.case-diff-differ td { background: rgba(255, 196, 0, 0.16); font-weight: 600; }

/* I7 · 验证 / 热度 / 新鲜度信号 */
.case-hit-signals { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 6px 0 2px; }
.case-signal { font-size: calc(11.5px * var(--font-scale)); padding: 1px 7px; border-radius: 10px; border: 1px solid var(--border); color: var(--text-2); }
.case-signal-ok { color: #3FCB79; border-color: rgba(63, 203, 121, .35); background: #eaf7ee; }
.case-signal-warn { color: #E3B341; border-color: rgba(232, 185, 62, .35); background: #fdf6e3; }
.case-fresh { display: inline-flex; align-items: center; gap: 6px; min-width: 150px; }
.case-fresh-bar { display: block; height: 6px; border-radius: 4px; background: #37a06a; min-width: 8px; max-width: 90px; }
.case-fresh-stale .case-fresh-bar { background: #c8922a; }
.case-fresh-unknown .case-fresh-bar { background: #b9c2cc; }
.case-fresh-txt { font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }

/* I3 · 判定链（身份令牌 + 计数） */
.case-why-ident { margin: 6px 0; padding: 6px 8px; border-left: 3px solid var(--border); color: var(--text-2); font-size: calc(12.3px * var(--font-scale)); }
.case-why-ident code { margin-right: 6px; }
.case-why-jump { margin-top: 6px; }

/* I6 · 处理轨迹时间线 + 本体增强收益 */
.case-trace-gain { margin: 6px 0 10px; padding: 8px 10px; border-radius: 8px; background: rgba(47, 111, 235, 0.08); border: 1px solid rgba(47, 111, 235, 0.25); }
.case-trace-gain-tag { display: inline-block; font-size: calc(11px * var(--font-scale)); padding: 1px 7px; border-radius: 10px; background: var(--accent, #2F6FEB); color: #fff; margin-right: 8px; }
.case-trace-timeline { position: relative; margin-left: 6px; }
.case-trace-timeline .case-trace-step { position: relative; padding-left: 18px; }
.case-trace-timeline .case-trace-step::before {
  content: ""; position: absolute; left: 6px; top: 4px; bottom: -6px; width: 2px; background: var(--border);
}
.case-trace-timeline .case-trace-step:last-child::before { bottom: auto; height: 8px; }
.case-trace-timeline .case-trace-no { box-shadow: 0 0 0 3px var(--bg, #fff); }

/* I9 · 岗位对比：独有案例的归属线索 */
.case-cmp-only-list { display: flex; flex-direction: column; gap: 4px; margin-top: 4px; }
.case-cmp-only-list code { align-self: flex-start; }
.case-cmp-why { font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.case-cmp-hint { margin-top: 8px; }

/* I10 · 空结果「相邻概念」引导 */
.case-concept { margin-top: 10px; padding-top: 8px; border-top: 1px dashed var(--border); }
.case-concept-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.case-concept-tag { border-radius: 12px; }

/* ================= 案例检索 · 界面创新 P1（I1 段导航 / I4 关系视图 / I5 跨段关联） ================= */

/* I1 · 段/工序导航 facet */
.case-facets { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 10px 0 4px; }
.case-facets-lead { font-size: calc(12.3px * var(--font-scale)); color: var(--text-2); margin-right: 2px; }
.case-facet { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: 14px; border: 1px solid var(--border); background: transparent; color: var(--text-2); font-size: calc(12.3px * var(--font-scale)); cursor: pointer; }
.case-facet:hover { border-color: var(--accent, #2F6FEB); color: var(--text); }
.case-facet.is-on { background: var(--accent, #2F6FEB); border-color: var(--accent, #2F6FEB); color: #fff; }
.case-facet i { font-style: normal; font-size: calc(11px * var(--font-scale)); opacity: 0.85; }
.case-facets-note { flex-basis: 100%; margin-top: 2px; }

/* I4 · 关系视图开关 */
.case-relview-bar { display: flex; align-items: center; gap: 8px; margin: 4px 0 8px; flex-wrap: wrap; }
.case-mini.is-on { background: var(--accent, #2F6FEB); color: #fff; border-color: var(--accent, #2F6FEB); }

/* I4 · 关系视图 SVG 图谱 */
.case-graph { margin: 8px 0 14px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-2, rgba(255, 255, 255, .05)); }
.case-graph-head { font-weight: 600; color: var(--text); margin-bottom: 4px; }
.case-graph svg { width: 100%; height: 220px; display: block; }
.case-graph-edge { stroke: var(--border); stroke-width: 1.4; stroke-dasharray: 4 3; }
.case-graph-edge.is-root { stroke: #6b86c9; stroke-dasharray: none; stroke-width: 1.8; }
.case-graph-center circle { fill: var(--accent, #2F6FEB); }
.case-graph-center text, .case-graph-node text { font-size: calc(11px * var(--font-scale)); fill: var(--text); }
.case-graph-node circle { fill: #16273F; stroke: #3E5A85; stroke-width: 1.6; cursor: pointer; }
.case-graph-node.is-cross circle { fill: #fdf6e3; stroke: #c8922a; }
.case-graph-node:hover circle { stroke: var(--accent, #2F6FEB); stroke-width: 2.4; }
.case-graph-sub { fill: var(--text-2); font-size: calc(10px * var(--font-scale)); }

/* I5 · 卡片内相关案例（跨段/跨域关联） */
.case-related { margin: 8px 0 6px; border-left: 3px solid var(--border); padding-left: 10px; }
.case-related > summary { cursor: pointer; font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); }
.case-related ul { list-style: none; margin: 6px 0 0; padding: 0; }
.case-related-row { display: flex; align-items: center; gap: 8px; padding: 3px 0; flex-wrap: wrap; }
.case-related-kind { font-size: calc(11px * var(--font-scale)); padding: 1px 7px; border-radius: 10px; background: var(--bg-2, #F2F5F8); color: var(--text-2); border: 1px solid var(--border); }
.case-related-cross { font-size: calc(11px * var(--font-scale)); padding: 1px 7px; border-radius: 10px; background: #fdf6e3; color: #E3B341; border: 1px solid rgba(232, 185, 62, .35); }
.case-related-link { color: var(--accent, #2F6FEB); text-decoration: none; font-size: calc(12.5px * var(--font-scale)); }
.case-related-link:hover { text-decoration: underline; }
.case-related-seg { font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }

/* ================= 提问对话窗口（对话式 + 回答案例列表） ================= */

.case-chat-turn { margin: 10px 0 14px; }
.case-chat-q { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 6px; }
.case-chat-role {
  flex: none; width: 22px; height: 22px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: calc(11.5px * var(--font-scale)); font-weight: 600; color: #fff; background: var(--accent, #2F6FEB);
}
/* 提问气泡：微信绿（与各对话窗口用户气泡统一） */
.case-chat-q > span:last-child {
  background: #95ec69; border: 1px solid #86d95c;
  border-radius: 10px; padding: 5px 12px; font-size: calc(13px * var(--font-scale)); color: #1a1a1a;
}
.case-chat-a { margin-left: 30px; }

/* 回答案例列表 */
.case-ans-list { list-style: none; margin: 6px 0 0; padding: 0; }
.case-ans-item {
  display: flex; gap: 10px; padding: 9px 10px; margin-bottom: 8px;
  border: 1px solid var(--border); border-radius: 8px; background: rgba(255, 255, 255, .04);
  /* 整行可点开详情（与检索卡片同一手感）：给可点提示，别让用户只在「看全文」小按钮上找入口 */
  cursor: pointer;
  transition: border-color .13s ease, box-shadow .13s ease;
}
.case-ans-item:hover { border-color: var(--border-strong); box-shadow: var(--shadow-sm); }
.case-ans-idx {
  flex: none; width: 20px; height: 20px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: calc(11px * var(--font-scale)); font-weight: 600; color: var(--accent, #2F6FEB);
  border: 1px solid var(--accent, #2F6FEB);
}
.case-ans-main { flex: 1; min-width: 0; }
.case-ans-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.case-ans-head b { color: var(--text); font-size: calc(13px * var(--font-scale)); }
.case-ans-score { font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.case-ans-meta { margin-top: 3px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.case-ans-meta code {
  font-family: ui-monospace, Consolas, Menlo, monospace; font-size: calc(11px * var(--font-scale));
  padding: 1px 5px; border-radius: 4px; background: var(--bg-2, #F2F5F8);
  border: 1px solid var(--border); color: var(--text);
}
.case-ans-text { margin: 6px 0 0; font-size: calc(12.8px * var(--font-scale)); line-height: 1.72; color: var(--text); }
.case-ans-act { margin-top: 7px; display: flex; gap: 8px; }

/* 对话折叠：每轮 = details，summary 常驻显示"问题 + 条数徽标"；
   问题条即用户消息气泡 —— 微信绿，与各对话窗口用户气泡统一 */
.case-chat-tools { display: flex; align-items: center; gap: 8px; margin: 8px 0 6px; }
.case-chat-sum {
  display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none;
  padding: 8px 12px; border: 1px solid #86d95c; border-radius: 10px;
  background: #95ec69;
}
.case-chat-sum::-webkit-details-marker { display: none; }
.case-chat-qtext {
  flex: 1; min-width: 0; font-size: calc(13px * var(--font-scale)); color: #1a1a1a;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.case-chat-badge {
  flex: none; font-size: calc(11px * var(--font-scale)); padding: 1px 7px; border-radius: 10px;
  background: rgba(255, 255, 255, .04); border: 1px solid rgba(255, 255, 255, .10); color: var(--text-2);
}
.case-chat-time {
  flex: none; font-size: calc(11px * var(--font-scale)); color: var(--text-2);
  font-family: ui-monospace, Consolas, Menlo, monospace;
}
.case-chat-caret { flex: none; color: var(--text-2); transition: transform .15s; }
.case-chat-turn[open] > .case-chat-sum .case-chat-caret { transform: rotate(180deg); }
.case-chat-turn[open] > .case-chat-sum { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }

/* ============================================================
   悬浮帮助助手（float-help.js · .fh- 命名空间）
   light 主题 · 复用全局 CSS 变量 · 位置由 JS 持久化（localStorage）
   ============================================================ */

/* ⚠ hidden 属性必须显式压住：作者样式的 display:flex 会盖过 UA 的
   [hidden]{display:none}，导致 JS 里 panel.hidden=true 的面板照样显示
   （表现为「每次刷新窗口都挂在左上角」）。本条选择器优先级
   （0,2,0）高于 .fh-panel（0,1,0），与书写顺序无关，但必须成对出现。 */
.fh-panel[hidden] { display: none; }

.fh-fab {
  position: fixed;
  left: 0; top: 0;               /* 左上角由 JS 写值，此处仅占位 */
  width: 48px; height: 48px;
  border-radius: 50%;
  background: linear-gradient(145deg, var(--primary-bright), var(--primary));
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .32), var(--shadow-md);
  cursor: grab;
  z-index: 500;
  user-select: none;
  -webkit-user-select: none;
  touch-action: none;           /* 指针拖动优先，不当页面滚动 */
  transition: transform .15s, box-shadow .15s, background .15s;
}
.fh-fab:hover { background: linear-gradient(145deg, var(--primary-bright), var(--primary-dark)); transform: translateY(-1px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .32), var(--shadow-pop); }
.fh-fab:active { cursor: grabbing; }
.fh-fab.fh-grab { cursor: grabbing; transform: scale(1.06); box-shadow: var(--shadow-pop); }
.fh-fab:focus-visible { outline: 2px solid var(--primary-deep); outline-offset: 2px; }

/* 场景已变、面板关着：按钮右上角小点提示 */
.fh-fab-dot {
  position: absolute; top: -2px; right: -2px;
  width: 11px; height: 11px; border-radius: 50%;
  background: var(--danger);
  border: 2px solid #fff;
}

/* 拖动中禁止文本选择，避免"拖出一片蓝" */
body.fh-dragging { user-select: none; -webkit-user-select: none; cursor: grabbing; }

/* ---------- 面板 ---------- */
.fh-panel {
  position: fixed;
  left: 0; top: 0;
  width: min(364px, calc(100vw - 24px));
  max-height: min(520px, calc(100vh - 120px));
  display: flex; flex-direction: column;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: var(--shadow-pop);
  z-index: 501;
  overflow: hidden;
  animation: fh-pop .16s ease-out;
}
@keyframes fh-pop {
  from { opacity: 0; transform: translateY(6px) scale(.98); }
  to   { opacity: 1; transform: none; }
}

.fh-head {
  display: flex; align-items: center; gap: 9px;
  padding: 11px 12px;
  background: linear-gradient(135deg, var(--primary) 0%, var(--primary-deep) 100%);
  color: #fff;
  cursor: grab;
  flex-shrink: 0;
  touch-action: none;
  user-select: none;
  -webkit-user-select: none;
}
.fh-head:active { cursor: grabbing; }
.fh-head-avatar {
  width: 28px; height: 28px; border-radius: 8px;
  background: rgba(255, 255, 255, .16);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.fh-head-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.fh-head-name {
  font-size: calc(13.5px * var(--font-scale)); font-weight: 700;
  display: flex; align-items: center; gap: 6px;
}
.fh-head-tag {
  font-size: calc(10px * var(--font-scale)); font-weight: 600;
  padding: 1px 6px; border-radius: 8px;
  background: rgba(255, 255, 255, .18);
  letter-spacing: .5px;
}
.fh-head-scene {
  font-size: calc(11.5px * var(--font-scale)); color: rgba(255, 255, 255, .82);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.fh-head-close {
  width: 26px; height: 26px; border-radius: 7px;
  color: #fff; font-size: calc(16px * var(--font-scale)); line-height: 1;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; opacity: .8;
}
.fh-head-close:hover { background: rgba(255, 255, 255, .18); opacity: 1; }

/* ---------- 消息区 ---------- */
.fh-body {
  flex: 1; min-height: 80px;    /* 矮屏（<600px 高）允许压缩，别把选项区顶出视口 */
  overflow-y: auto;
  overscroll-behavior: contain; /* 滚到头不连带滚动背后页面 */
  scrollbar-width: thin;
  padding: 12px;
  display: flex; flex-direction: column; gap: 9px;
  background: #0A1322;
}
.fh-msg { display: flex; }
.fh-msg-user { justify-content: flex-end; }
/* 用户气泡：微信绿（与各对话窗口用户气泡统一） */
.fh-msg-user .fh-bubble {
  max-width: 82%;
  background: #95ec69;
  border: 1px solid #86d95c;
  color: #1a1a1a;
  font-size: calc(12.8px * var(--font-scale)); line-height: 1.65;
  padding: 8px 11px; border-radius: 12px 12px 3px 12px;
}
.fh-msg-bot { align-items: flex-start; gap: 7px; }
.fh-avatar {
  width: 24px; height: 24px; border-radius: 7px;
  background: var(--primary-light); color: var(--primary);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; margin-top: 1px;
}
.fh-msg-bot .fh-bubble {
  max-width: calc(100% - 32px);
  background: var(--card);
  border: 1px solid #24395B;
  border-radius: 12px 12px 12px 3px;
  padding: 9px 11px;
  font-size: calc(12.8px * var(--font-scale)); line-height: 1.7; color: var(--text);
  box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}

/* 答案正文排版（fmt() 产出） */
.fh-p { margin: 0; }
.fh-p + .fh-p, .fh-list + .fh-p, .fh-p + .fh-list { margin-top: 5px; }
.fh-gap { height: 6px; }
.fh-list { margin: 2px 0; }
.fh-li { position: relative; padding-left: 13px; margin: 2px 0; }
.fh-li::before {
  content: ""; position: absolute; left: 2px; top: .62em;
  width: 4px; height: 4px; border-radius: 50%; background: var(--primary);
}
.fh-bubble code {
  font-family: ui-monospace, Consolas, Menlo, monospace; font-size: calc(11px * var(--font-scale));
  padding: 1px 4px; border-radius: 4px;
  background: var(--primary-light-2); border: 1px solid var(--border);
  color: var(--primary-deep);
}

/* 流式输出光标 */
.fh-caret {
  display: inline-block; width: 2px; height: 1em;
  background: var(--primary); margin-left: 2px;
  vertical-align: -2px;
  animation: fh-blink .8s steps(2) infinite;
}
@keyframes fh-blink { 50% { opacity: 0; } }

/* ---------- 选项区（＋/－ 折叠） ---------- */
.fh-optbar {
  flex-shrink: 0;
  border-top: 1px solid var(--border);
  background: var(--card);
  max-height: 46%;
  display: flex; flex-direction: column;
}
.fh-opt-toggle {
  display: flex; align-items: center; gap: 6px;
  padding: 8px 12px;
  font-size: calc(12px * var(--font-scale)); font-weight: 600; color: var(--primary);
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}
.fh-opt-toggle:hover { background: var(--primary-light-2); }
.fh-opt-sign {
  display: inline-flex; align-items: center; justify-content: center;
  width: 17px; height: 17px; border-radius: 5px;
  background: var(--primary-light); font-size: calc(12px * var(--font-scale)); font-weight: 700;
}
.fh-optbar.collapsed .fh-opt-toggle { border-bottom: none; }
.fh-optbar.collapsed .fh-opts { display: none; }

/* 选项列表：显式 max-height 才出滚动条。不要依赖 .fh-optbar 的百分比
   max-height——面板只有 max-height 没有定高，百分比解析不出值时选项
   一多会把整个面板撑出屏幕（表现为「问题多了滚不了也看不全」）。 */
.fh-opts {
  overflow-y: auto;
  max-height: 176px;
  overscroll-behavior: contain;   /* 滚轮滚到头不穿透到背后页面 */
  scrollbar-width: thin;
  padding: 7px; display: flex; flex-direction: column; gap: 5px;
}
.fh-opt {
  display: flex; align-items: center; gap: 8px;
  text-align: left;
  padding: 7px 10px;
  border: 1px solid var(--border);
  border-radius: 9px;
  background: var(--card);
  font-size: calc(12.5px * var(--font-scale)); color: var(--text);
  transition: border-color .12s, background .12s;
}
.fh-opt:hover { border-color: var(--primary); background: var(--primary-light-2); }
.fh-opt-q { flex: 1; min-width: 0; }
.fh-opt-go { color: var(--text-3); font-size: calc(14px * var(--font-scale)); flex-shrink: 0; }
.fh-opt:hover .fh-opt-go { color: var(--primary); }

/* 窄屏：面板贴边，别让圆角顶出视口 */
@media (max-width: 480px) {
  .fh-panel { border-radius: 12px 12px 0 0; }
}

/* ============================================================
   全局细节（焦点可见性 · 减少动态偏好）
   ============================================================ */

/* 键盘导航焦点环：鼠标点击不触发（:focus-visible），提升可访问性与精致感 */
.btn:focus-visible,
.chip:focus-visible,
.nav-item:focus-visible,
.icon-btn:focus-visible,
.link-btn:focus-visible,
a:focus-visible {
  outline: 2px solid rgba(59, 130, 246, .65);
  outline-offset: 2px;
  border-radius: 8px;
}

/* 系统级"减少动态"偏好：关闭过渡/动画，兼顾敏感用户与低端设备 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-duration: .01ms !important;
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================================
   场景屏深色适配覆写（scene-kit / sNN 运行时注入样式）
   注入的 <style> 晚于本文件挂载，同权重规则会被其覆盖，
   故统一使用两级选择器 / 属性选择器提权，保证深色主题下文字清晰。
   ============================================================ */

/* 事件流时间线：时间戳 / 类型药丸 / 场景标注 */
.sk-flow .sk-flow-ts { color: var(--text-2); font-weight: 550; }
.sk-flow .sk-flow-type { color: #9CC6F8; background: rgba(59, 130, 246, .16); font-weight: 600; }
.sk-flow .sk-flow-scene { color: var(--text-3); }

/* 会签卡 / 下钻弹层内的弱文字 */
.sk-signoff-body .sk-readonly,
.card .sk-readonly { color: var(--text-2); background: rgba(255, 255, 255, .06); }
.sk-signoff-body .sk-slot-ts,
.sk-signoff-body .sk-signoff-note { color: var(--text-2); }
.sk-drill .sk-drill-sub,
.sk-drill .sk-kv-k { color: var(--text-2); }

/* S04 SPC 控制图（内联 SVG 属性）：白底绘图区转深色，线条/文字提亮 */
svg rect[fill="#FFFFFF"] { fill: #0D1B33; stroke: #263E62; }
svg polyline[stroke="#185FA5"] { stroke: #5AA2F0; }
svg circle[fill="#185FA5"] { fill: #5AA2F0; }
svg text[fill="#8B98AB"] { fill: #93A8C6; }
svg text[fill="#CF222E"] { fill: #F4696B; }
svg line[stroke="#CF222E"] { stroke: #F4696B; }
svg text[fill="#1A7F37"] { fill: #3FCB79; }
svg line[stroke="#1A7F37"] { stroke: #3FCB79; }
/* ============================================================
   个性化主题（theme-switcher.js）
   html[data-accent]  = 主题色四选一（默认蓝无需属性）
   html[data-theme]   = light（默认，首次打开 / 登录即明亮）/ dark
   ============================================================ */

/* ---- 亮色主题（html[data-theme="light"]）----
   令牌组整体翻转回浅色；半透明 rgba 色彩两主题通用无需处理；
   下方仅覆盖「硬编码深色」的组件表面。侧边栏 / 登录页保持深色品牌形象。 */
html[data-theme="light"] {
  --primary: #1B66CC; --primary-bright: #2B7AE0; --primary-dark: #0F4C9E; --primary-deep: #0F4C9E; --primary-hover: #1559B4; --primary-rgb: 27, 102, 204;


  --bg: #F3F5F9; --card: #FFFFFF; --border: #E5E9F2; --border-strong: #D4DCE8;
  --text: #1B2434; --text-2: #525F75; --text-3: #8A96A9;
  --ok: #1A7F37; --ok-bg: #E9F6EC; --warn: #9A6700; --warn-bg: #FFF6DF;
  --danger: #CF222E; --danger-bg: #FFEBE9;
 --purple: #8250DF; --purple-bg: #F3EEFD;
  --bg-soft: #FAFBFD; --bg-sub: #F1F4F9; --bg-2: #F7F9FB;
 --accent: #1B66CC; --amber-bg: #FBF3E5;
  --shadow-sm: 0 1px 2px rgba(16, 24, 40, .04), 0 1px 3px rgba(16, 24, 40, .05);
  --shadow-md: 0 2px 4px rgba(16, 24, 40, .04), 0 10px 26px rgba(16, 24, 40, .08);
  --shadow-pop: 0 12px 40px rgba(16, 24, 40, .16);
}

html[data-theme="light"] ::selection { background: #D5E4F8; }
html[data-theme="light"] ::-webkit-scrollbar-thumb { background: #CBD5E3; }
html[data-theme="light"] ::-webkit-scrollbar-thumb:hover { background: #A9B8CC; }

/* 框架层 */
html[data-theme="light"] .topbar { background: rgba(255, 255, 255, .86); border-bottom-color: var(--border); }
html[data-theme="light"] .avatar { box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px rgba(27, 102, 204, .18); }

/* 卡片与标题 */
html[data-theme="light"] .page-title { color: #1B2434; text-shadow: none; }
html[data-theme="light"] .card-title { color: #1B2434; text-shadow: none; }
html[data-theme="light"] .card-head,
html[data-theme="light"] .hitl-screen .hitl-layout > .card > .card-head { background: linear-gradient(180deg, #F8FBFE, #F0F5FB); }
html[data-theme="light"] .stat-num {
  background: linear-gradient(120deg, #164FA0, #1B66CC 45%, #2E86E0);
  -webkit-background-clip: text; background-clip: text;
  filter: none;
}
html[data-theme="light"] .rank-no { background: #F0F3F8; color: var(--text-3); box-shadow: none; }
html[data-theme="light"] .rank-row.worst .rank-no { background: linear-gradient(145deg, #FBDCDA, #FEEEED); color: #CF222E; box-shadow: none; }

/* 聊天区（问数 / 办公助手 / 悬浮助手） */
html[data-theme="light"] .chat-wrap,
html[data-theme="light"] .of-chat,
html[data-theme="light"] .of-quick,
html[data-theme="light"] .chat-inputbar,
html[data-theme="light"] .fh-body { background: #FFFFFF; }
html[data-theme="light"] .chat-inputbar { border-top-color: rgba(0, 0, 0, .07); }
html[data-theme="light"] .msg-text,
html[data-theme="light"] .fh-msg-bot .fh-bubble { border-color: #E3E3E3; }
html[data-theme="light"] .flow-parallel-group::before { background: #FFFFFF; }

/* Toast / 输入 / 杂项 */
html[data-theme="light"] .toast { background: rgba(255, 255, 255, .96); border-color: var(--border); }
html[data-theme="light"] .hitl-search input { background: #F7F9FB; }
html[data-theme="light"] .sql-block { background: #F6F8FB; color: #31445E; }
html[data-theme="light"] .of-quick { border-top-color: rgba(0, 0, 0, .07); }

/* 场景屏覆写回浅色 */
html[data-theme="light"] .sk-flow .sk-flow-ts { color: var(--text-3); font-weight: 500; }
html[data-theme="light"] .sk-flow .sk-flow-type { color: #525F75; background: #EEF1F6; font-weight: 500; }
html[data-theme="light"] .sk-signoff-body .sk-readonly,
html[data-theme="light"] .card .sk-readonly { color: var(--text-2); background: #EEF1F6; }
html[data-theme="light"] svg rect[fill="#FFFFFF"] { fill: #FFFFFF; stroke: #E4E9F1; }
html[data-theme="light"] svg polyline[stroke="#185FA5"] { stroke: #185FA5; }
html[data-theme="light"] svg circle[fill="#185FA5"] { fill: #185FA5; }
html[data-theme="light"] svg text[fill="#8B98AB"] { fill: #8B98AB; }
html[data-theme="light"] svg text[fill="#CF222E"] { fill: #CF222E; }
html[data-theme="light"] svg line[stroke="#CF222E"] { stroke: #CF222E; }
html[data-theme="light"] svg text[fill="#1A7F37"] { fill: #1A7F37; }
html[data-theme="light"] svg line[stroke="#1A7F37"] { stroke: #1A7F37; }

/* 企业制度问答（kbqa）浅色回翻 */
html[data-theme="light"] .kbqa-root {
  --k-page: #ffffff; --k-text: #191919;
  --k-header-bg: rgba(255, 255, 255, .85); --k-header-border: rgba(0, 0, 0, .07);
  --k-title: #191919; --k-sub: #9a9a9a;
  --k-online-bg: rgba(7, 193, 96, .12); --k-online-text: #0a8f4d;
  --k-bot-bg: #ffffff; --k-bot-border: #e3e3e3; --k-bot-text: #191919;
  --k-bubble-shadow: 0 1px 2px rgba(0, 0, 0, .05);
  --k-tag-bg: #f0f4ff; --k-tag-text: #576b95; --k-tag-border: #dfe8fb;
  --k-src-bg: rgba(7, 193, 96, .10); --k-src-text: #0a8f4d; --k-src-border: rgba(7, 193, 96, .25);
  --k-time: #b0b0b0;
  --k-side-bg: #f7f7f7; --k-divider: rgba(0, 0, 0, .08);
  --k-arch-bg: #ffffff; --k-arch-border: #e8e8e8; --k-arch-text: #777777;
  --k-cat-hover: rgba(0, 0, 0, .045); --k-cat-name: #191919; --k-cat-desc: #9a9a9a;
  --k-input-bg: #ffffff; --k-input-border: #d9d9d9; --k-input-text: #191919;
  --k-scroll: rgba(0, 0, 0, .18);
}
/* ---- 亮色主题 · 侧边栏随主题翻转 ---- */
html[data-theme="light"] .sidebar {
  background: linear-gradient(180deg, #FFFFFF 0%, #F5F8FC 100%);
  border-right: 1px solid var(--border);
  box-shadow: 1px 0 0 var(--border), 4px 0 18px rgba(16, 24, 40, .05);
}
html[data-theme="light"] .brand { border-bottom-color: rgba(16, 24, 40, .07); }
html[data-theme="light"] .brand-name { color: #1B2434; }
html[data-theme="light"] .brand-sub { color: #8A96A9; }
html[data-theme="light"] .nav-group-label { color: #97A3B5; }
html[data-theme="light"] .nav-item { color: #525F75; }
html[data-theme="light"] .nav-item svg { color: #97A3B5; }
html[data-theme="light"] .nav-item:hover { background: rgba(27, 102, 204, .06); color: var(--primary); }
html[data-theme="light"] .nav-item.active {
  background: linear-gradient(90deg, rgba(27, 102, 204, .14) 0%, rgba(27, 102, 204, .05) 100%);
  color: var(--primary-deep);
  box-shadow: inset 0 0 0 1px rgba(27, 102, 204, .18);
}
html[data-theme="light"] .nav-item.active svg { color: var(--primary); }
html[data-theme="light"] .sidebar-foot { border-top-color: rgba(16, 24, 40, .07); }
html[data-theme="light"] .env-card { background: #F3F6FA; border-color: var(--border); }
html[data-theme="light"] .env-label { color: #8A96A9; }
html[data-theme="light"] .env-value { color: #525F76; }

/* ---- 亮色主题 · 登录页随主题翻转 ---- */
html[data-theme="light"] .login-root {
  background:
    radial-gradient(820px 520px at 12% -8%, rgba(27, 102, 204, .07), transparent 60%),
    radial-gradient(760px 480px at 96% 108%, rgba(34, 197, 140, .05), transparent 60%),
    radial-gradient(600px 400px at 88% -6%, rgba(130, 80, 223, .05), transparent 60%),
    linear-gradient(180deg, #F4F7FB 0%, #EAEFF6 100%);
}
html[data-theme="light"] .login-brand {
  background:
    radial-gradient(460px 320px at -12% -4%, rgba(var(--primary-rgb), .14), transparent 62%),
    radial-gradient(420px 320px at 112% 104%, rgba(130, 80, 223, .06), transparent 55%),
    linear-gradient(165deg, #FFFFFF 0%, #F2F6FC 100%);
  border-right: 1px solid var(--border);
}
html[data-theme="light"] .login-brand-name { color: #14213A; }
html[data-theme="light"] .login-brand-sub { color: #4A576C; opacity: 1; font-weight: 500; }
html[data-theme="light"] .login-brand-body h1 { color: #14213A; text-shadow: none; }
html[data-theme="light"] .login-brand-body p { color: #4A576C; opacity: 1; }
html[data-theme="light"] .login-points li { background: #F6F9FD; border-color: #DEE7F2; color: #3D4A5F; }
html[data-theme="light"] .login-points li:hover { background: #EFF5FC; border-color: rgba(27, 102, 204, .30); }
html[data-theme="light"] .login-points b { color: #173A63; }
html[data-theme="light"] .login-stats::before { background: linear-gradient(90deg, rgba(27, 102, 204, .30), rgba(27, 102, 204, .06) 70%, transparent); }
html[data-theme="light"] .login-stat { background: #F6F9FD; border-color: #DEE7F2; }
html[data-theme="light"] .login-stat:hover { background: #EFF5FC; border-color: rgba(27, 102, 204, .30); }
html[data-theme="light"] .login-stat b { color: #1B2434; text-shadow: none; }
html[data-theme="light"] .login-stat span { color: #5F6C80; opacity: 1; }
html[data-theme="light"] .login-brand-foot { border-top-color: rgba(16, 24, 40, .08); color: #6E7B90; opacity: 1; }
/* ============================================================
   主题色四选一（置于文件最末：级联顺序保证在明/暗两种主题下都生效）
   派生色经 --primary-rgb（rgba 引用）与每主题静态值定义，兼容不支持 color-mix 的浏览器，
   故此处只需声明核心三值。
   ============================================================ */
html[data-accent="cyan"] {
  --primary: #2AC3DE; --primary-bright: #1FB0CC; --primary-dark: #128CA4;
  --primary-deep: #8EE9F7; --primary-hover: #5CD2E6; --primary-rgb: 42, 195, 222;
}
html[data-accent="violet"] {
  --primary: #8B7CF6; --primary-bright: #7463EE; --primary-dark: #5B4AD6;
  --primary-deep: #C6BEFB; --primary-hover: #A092F8; --primary-rgb: 139, 124, 246;
}
html[data-accent="orange"] {
  --primary: #F2762E; --primary-bright: #E0661F; --primary-dark: #B54E12;
  --primary-deep: #F8B48C; --primary-hover: #F5925F; --primary-rgb: 242, 118, 46;
}
/* 亮色 + 主题色：deep/hover 需要深色变体（rgb 微调保持同色相） */
html[data-theme="light"][data-accent="cyan"]   { --primary-dark: #0E7D93; --primary-deep: #0E7D93; --primary-hover: #1493AC; --primary-rgb: 42, 195, 222; }
html[data-theme="light"][data-accent="violet"] { --primary-dark: #4E3FC4; --primary-deep: #5243C7; --primary-hover: #6A59E0; --primary-rgb: 139, 124, 246; }
html[data-theme="light"][data-accent="orange"] { --primary-dark: #A34610; --primary-deep: #B54E12; --primary-hover: #D2601D; --primary-rgb: 242, 118, 46; }
/* ---- 亮色主题 · 文字对比度回修 ----
   深色化时琥珀/绿色系文字统一调亮（为深底设计），白底上对比度不足；
   按选择器逐一回修为亮色语境的深色调。 */

/* 琥珀系：提示/降级/审计文字 */
html[data-theme="light"] .degrade-banner,
html[data-theme="light"] .offline-banner,
html[data-theme="light"] .dg-title,
html[data-theme="light"] .hitl-card-head,
html[data-theme="light"] .agent-sec.hitl,
html[data-theme="light"] .agent-sec.hitl b { color: #7A5B00; }
html[data-theme="light"] .degrade-banner svg { color: #B7791F; }
html[data-theme="light"] .d8-item.hot .d8-k { color: #7A5B00; }

/* 琥珀系：状态徽标 */
html[data-theme="light"] .as-node.warn,
html[data-theme="light"] .case-signal-warn,
html[data-theme="light"] .case-related-cross {
  color: #9A6700; border-color: #F0D9A0; background: #FDF6E3;
}
html[data-theme="light"] .d8-item.hot { background: #FDF6E7; border-color: #E5D5A0; }

/* 绿色系：完成态徽标 */
html[data-theme="light"] .as-node.done,
html[data-theme="light"] .case-signal-ok { color: #1A7F37; border-color: #B7E0C2; background: #F2FBF5; }
html[data-theme="light"] .d8-item.close { background: #EAF6EF; border-color: #A8D5BC; }
html[data-theme="light"] .d8-item.close .d8-k { color: #155E35; }
html[data-theme="light"] .stat-icon.green { color: #1A7F37; }

/* 脱敏标记 / 关键少数序号 */
html[data-theme="light"] .rank-row.locked .rank-name::after { color: #8A6D1F; background: rgba(212, 160, 23, .14); }
html[data-theme="light"] .pareto-row.vital .pareto-no { color: #B7791F; background: #FBF3E5; }

/* 亮色侧边栏状态文字 */
html[data-theme="light"] .env-value.online { color: #1A7F37; }
html[data-theme="light"] .env-value.offline,
html[data-theme="light"] .env-value.warn { color: #9A6700; }
html[data-theme="light"] .env-value.err { color: #CF222E; }

/* 进度/阶段槽轨道（白透明轨道在白底不可见） */
html[data-theme="light"] .progress,
html[data-theme="light"] .pipe-stage-bar,
html[data-theme="light"] .as-cost-bar { background: #ECF0F6; }

/* 交互反馈恢复（白透明 hover 在白底无反馈） */
html[data-theme="light"] .todo-item:hover,
html[data-theme="light"] .alert-item:hover,
html[data-theme="light"] .alert-clickable:hover,
html[data-theme="light"] .risk-order:hover,
html[data-theme="light"] .version-item:hover,
html[data-theme="light"] .pipe-stage:hover,
html[data-theme="light"] .rank-row:hover,
html[data-theme="light"] .pareto-row.clickable:hover,
html[data-theme="light"] .drill-table tbody tr.drill-row:hover,
html[data-theme="light"] .qa-archive-item:hover,
html[data-theme="light"] .icon-btn:hover { background: #F0F5FB; }
html[data-theme="light"] .std-table tbody tr:hover td,
html[data-theme="light"] .dept-table tbody tr:hover td { background: #F4F8FC; }
/* 标准三率两级看板（浅色）：进度槽白底不可见 → 换浅灰；预警色提对比 */
html[data-theme="light"] .std-bar { background: #E3EAF3; }
html[data-theme="light"] .std-conform.warn { color: #9A6700; }
/* 班组明细弹窗（浅色）：原因占比条轨道、遮罩与阴影按浅底校准 */
html[data-theme="light"] .std-cause-bar { background: #E3EAF3; }
html[data-theme="light"] .std-modal { background: rgba(15, 30, 55, .42); }
html[data-theme="light"] .std-modal-card { box-shadow: 0 18px 48px rgba(15, 40, 80, .22); }

/* 搜索图标 / 案例关系图（深底专用色回修） */
html[data-theme="light"] .hitl-search::before { background: no-repeat center/contain url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%234B5563" stroke-width="2.2" stroke-linecap="round"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.35-4.35"/></svg>'); }
html[data-theme="light"] .case-graph-node circle { fill: #FFFFFF; stroke: #9DB2D6; }
html[data-theme="light"] .case-graph-center text { fill: #FFFFFF; }

/* ============================================================
   案例智能体检索 · 大对话框改版（2026-10-20）
   整屏 = 左栏（身份卡 + 本体查看器 + 治理入口）+ 主区大对话框。
   主对话框复刻制度助手聊天气泡形态：页签「智能问答 / 案例检索」切换，
   智能问答为时间序气泡 + 底部输入条；每轮回答挂默认收起的「智能体检索」抽屉。
   全部颜色走主题令牌（明暗主题自适应）；新增类一律 .case- 前缀，不碰既有类名。
   ============================================================ */

/* ---- 整屏骨架：左右两栏拉满视口高度，主对话框内部自滚动 ---- */
.case-root {
  display: flex; flex-direction: column; gap: 14px;
  min-height: calc(100vh - var(--topbar-h, 58px) - 70px);
}
.case-body {
  flex: 1; min-height: 0;
  display: grid; grid-template-columns: 296px minmax(0, 1fr); gap: 14px;
  grid-template-rows: minmax(0, 1fr); align-items: stretch;
}
.case-side {
  display: flex; flex-direction: column; gap: 12px;
  padding: 12px; min-height: 0; overflow-y: auto;
}
.case-side-scroll { display: flex; flex-direction: column; gap: 12px; }
.case-main {
  display: flex; flex-direction: column;
  padding: 0; min-height: 0; overflow: hidden;
}

/* ---- 主对话框外壳（制度助手同款形态） ---- */
.case-shell { flex: 1; min-height: 0; display: flex; flex-direction: column; }
.case-shell-head {
  flex: none; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 10px;
  padding: 10px 16px; border-bottom: 1px solid var(--border);
  background: var(--bg-soft);
}
.case-shell-brand { display: flex; align-items: center; gap: 10px; min-width: 0; }
.case-shell-logo {
  width: 38px; height: 38px; border-radius: 10px; flex: none;
  display: flex; align-items: center; justify-content: center; color: #fff;
  background: linear-gradient(135deg, var(--primary-bright), var(--primary));
  box-shadow: 0 4px 12px rgba(var(--primary-rgb, 27, 102, 204), .35);
}
.case-shell-title b { display: block; font-size: calc(14.5px * var(--font-scale)); color: var(--text); letter-spacing: .3px; }
.case-shell-title i {
  display: block; font-style: normal; font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); margin-top: 1px;
}
.case-shell-tabs {
  grid-column: 2; display: flex; gap: 4px; padding: 3px;
  background: var(--bg-sub); border: 1px solid var(--border); border-radius: 999px;
}
.case-shell-tabs .case-tab {
  border: 0; background: transparent; cursor: pointer; font-family: inherit;
  padding: 6px 20px; font-size: calc(13px * var(--font-scale)); color: var(--text-2);
  border-radius: 999px; border-bottom: 0; transition: all .16s ease;
}
.case-shell-tabs .case-tab:hover { color: var(--primary); }
.case-shell-tabs .case-tab.is-active {
  color: #fff; font-weight: 600;
  background: linear-gradient(135deg, var(--primary-bright), var(--primary));
  box-shadow: 0 2px 8px rgba(var(--primary-rgb, 27, 102, 204), .35);
}
.case-shell-status { grid-column: 3; justify-self: end; }
.case-online {
  font-size: calc(11px * var(--font-scale)); font-weight: 500; padding: 4px 11px; border-radius: 20px;
  color: var(--ok); background: var(--ok-bg); display: inline-flex; align-items: center; gap: 5px;
}
.case-online::before {
  content: ""; width: 6px; height: 6px; border-radius: 50%;
  background: var(--ok); box-shadow: 0 0 6px var(--ok);
}

/* ---- 智能问答：聊天气泡区 + 底部输入条 ---- */
.case-chat { flex: 1; min-height: 0; overflow-y: auto; padding: 16px 18px 10px; }
.case-chat::-webkit-scrollbar { width: 8px; }
.case-chat::-webkit-scrollbar-thumb { background: rgba(var(--primary-rgb, 27, 102, 204), .25); border-radius: 4px; }
.case-chat::-webkit-scrollbar-track { background: transparent; }
.case-msg { display: flex; margin: 13px 0; align-items: flex-start; animation: caseMsgIn .26s ease both; }
@keyframes caseMsgIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.case-msg-user { justify-content: flex-end; }
.case-msg-avatar {
  width: 36px; height: 36px; border-radius: 9px; flex: none;
  display: flex; align-items: center; justify-content: center; color: #fff;
  background: linear-gradient(135deg, var(--primary-bright), var(--primary));
  box-shadow: 0 2px 8px rgba(var(--primary-rgb, 27, 102, 204), .30);
}
.case-msg-wrap { max-width: 78%; display: flex; flex-direction: column; min-width: 0; }
.case-msg-user .case-msg-wrap { align-items: flex-end; }
.case-bubble {
  position: relative; padding: 10px 14px; border-radius: 12px;
  font-size: calc(13.8px * var(--font-scale)); line-height: 1.75; word-break: break-word;
}
.case-msg-user .case-bubble {
  margin-right: 10px; border-top-right-radius: 4px;
  background: #95ec69; border: 1px solid #86d95c; color: #1a1a1a;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .18);
}
.case-msg-user .case-bubble::before {
  content: ""; position: absolute; top: 13px; right: -5px; width: 9px; height: 9px;
  transform: rotate(45deg); background: #95ec69; border-top: 1px solid #86d95c; border-right: 1px solid #86d95c;
}
.case-msg-bot .case-bubble {
  margin-left: 10px; border-top-left-radius: 4px;
  background: var(--bg-soft); border: 1px solid var(--border); color: var(--text);
  box-shadow: 0 1px 2px rgba(0, 0, 0, .18);
}
.case-msg-bot .case-bubble::before {
  content: ""; position: absolute; top: 13px; left: -5px; width: 9px; height: 9px;
  transform: rotate(45deg); background: var(--bg-soft);
  border-left: 1px solid var(--border); border-bottom: 1px solid var(--border);
}
.case-bubble-deny { background: var(--warn-bg) !important; border-color: rgba(232, 185, 62, .4) !important; }
.case-msg-time { font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); margin-top: 5px; padding: 0 4px; }

/* ============================================================
   OA 材料上传与科目整理（报销票据 / 出差报告 / 病假条）
   仅新增类，不覆盖既有类；全部用主题令牌，明暗两主题均随动。
   ============================================================ */
.of-upload-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 4px 0 8px; }
.of-upload-label { font-size: calc(12px * var(--font-scale)); font-weight: 650; color: var(--text-2); }
.of-upload-pick { cursor: pointer; }
.of-upload-hint { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); line-height: 1.6; }
.of-upload-list { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; }
.of-upload-item {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--bg-soft);
}
.of-upload-name {
  flex: 1; min-width: 120px; font-size: calc(12.5px * var(--font-scale));
  color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.of-upload-size { font-size: calc(11px * var(--font-scale)); color: var(--text-3); font-variant-numeric: tabular-nums; }
.of-exp-form { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.of-exp-form select, .of-exp-form input {
  height: 32px; padding: 0 8px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--card); color: var(--text); font-size: calc(12.5px * var(--font-scale));
}
.of-exp-cat { min-width: 84px; }
.of-exp-amount { width: 110px; }
.of-exp-note { flex: 1; min-width: 180px; }
.of-org { padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--bg-soft); }
.of-org-head { font-size: calc(12.8px * var(--font-scale)); font-weight: 650; color: var(--text); margin-bottom: 6px; }
.of-org-items { display: flex; flex-direction: column; gap: 4px; margin-bottom: 6px; }
.of-org-line { display: flex; align-items: center; gap: 8px; font-size: calc(12.4px * var(--font-scale)); }
.of-org-sub { min-width: 84px; font-weight: 600; color: var(--primary); }
.of-org-amt { font-variant-numeric: tabular-nums; color: var(--text); }
.of-org-note { color: var(--text-3); }
.of-org-kinds { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 4px; }
.of-org-miss { color: var(--danger); font-size: calc(12px * var(--font-scale)); margin-bottom: 4px; }
.of-org-hint { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
.of-atts { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.of-att {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  padding: 3px 9px; border: 1px solid var(--border); border-radius: 999px;
  background: rgba(var(--primary-rgb, 27, 102, 204), .10); color: var(--text);
  font-size: calc(11.5px * var(--font-scale)); max-width: 100%;
}
.of-att:hover { border-color: var(--primary); }
.of-att-kind { color: var(--primary); font-weight: 650; }
.of-att-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 180px; }
/* 答案区继承既有 .case-answer / .case-ans-* 口径，仅在气泡内收紧留白 */
.case-bubble .case-answer { margin-top: 0; }
.case-bubble .case-answer h4 { margin-top: 0; }

/* 欢迎语快捷提问 */
.case-quick { display: flex; gap: 6px; flex-wrap: wrap; margin: 8px 0 0 10px; }
.case-quick-q { height: 26px; border-radius: 999px; }

/* ---- 历史轮次收缩：新提问后上方回答只留一行摘要（点摘要条展开） ---- */
.case-fold-hint {
  margin: 2px 0 10px; padding: 6px 10px; text-align: center;
  font-size: calc(11.5px * var(--font-scale)); color: var(--text-3);
  background: var(--bg-sub); border: 1px dashed var(--border); border-radius: 999px;
}
.case-msg-folded { margin: 5px 0; animation: none; }
.case-msg-folded .case-msg-avatar { opacity: .55; }
.case-foldbar {
  display: flex; align-items: center; gap: 8px; max-width: 100%;
  margin: 2px 0 0 10px; padding: 7px 12px; min-height: 34px;
  background: var(--bg-sub); border: 1px dashed var(--border-strong); border-radius: 10px;
  font-family: inherit; font-size: calc(12px * var(--font-scale)); line-height: 1.5; color: var(--text-2);
  text-align: left; cursor: pointer; transition: background .15s, border-color .15s, color .15s;
}
.case-foldbar:hover {
  background: var(--primary-light-2); color: var(--primary-deep);
  border-color: rgba(var(--primary-rgb, 27, 102, 204), .45);
}
.case-foldbar-caret { flex: none; color: var(--text-3); font-size: calc(10px * var(--font-scale)); }
.case-foldbar:hover .case-foldbar-caret { color: var(--primary); }
.case-foldbar-tag {
  flex: none; font-size: calc(10.5px * var(--font-scale)); font-weight: 700; padding: 2px 8px; border-radius: 999px;
  background: var(--primary-light); color: var(--primary-deep);
  border: 1px solid rgba(var(--primary-rgb, 27, 102, 204), .28);
}
.case-foldbar.is-deny .case-foldbar-tag {
  background: var(--warn-bg); color: var(--warn); border-color: rgba(232, 185, 62, .45);
}
.case-foldbar-main {
  flex: 1 1 auto; min-width: 0; max-width: 560px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.case-foldbar-time { flex: none; font-size: calc(10.5px * var(--font-scale)); color: var(--text-3); }
.case-fold-toggle {
  align-self: flex-start; margin: 6px 0 0 10px; padding: 2px 4px;
  font-family: inherit; font-size: calc(11px * var(--font-scale)); color: var(--text-3);
  background: none; border: 0; cursor: pointer;
}
.case-fold-toggle:hover { color: var(--primary); text-decoration: underline; }

/* ---- 管线（收起摘要 & 等待动画共用） ---- */
.case-pipe { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; min-width: 0; }
.case-pipe-step {
  font-size: calc(10.5px * var(--font-scale)); line-height: 1.5; padding: 2px 9px; border-radius: 999px;
  display: inline-flex; align-items: center; gap: 4px; white-space: nowrap;
  background: var(--primary-light); color: var(--primary-deep);
  border: 1px solid rgba(var(--primary-rgb, 27, 102, 204), .30);
}
.case-pipe-step i { font-style: normal; font-weight: 600; }
.case-pipe-step.is-ok { background: var(--ok-bg); color: var(--ok); border-color: rgba(63, 203, 121, .35); }
.case-pipe-step.is-warn { background: var(--warn-bg); color: var(--warn); border-color: rgba(232, 185, 62, .4); }
/* 等待动画：五步依次点亮（循环） */
.case-bubble-pending { min-width: 300px; }
.case-pipe-live {
  display: flex; align-items: center; gap: 7px; margin-bottom: 8px;
  font-size: calc(12.5px * var(--font-scale)); font-weight: 600; color: var(--primary);
}
.case-pipe-dot {
  width: 8px; height: 8px; border-radius: 50%; background: var(--primary);
  animation: casePipeDot 1s ease-in-out infinite;
}
@keyframes casePipeDot { 0%, 100% { opacity: .35; transform: scale(.8); } 50% { opacity: 1; transform: scale(1.15); } }
.case-bubble-pending .case-pipe-step {
  opacity: .45; animation: casePipeGlow 2.4s ease-in-out infinite;
  animation-delay: calc(var(--i, 0) * .4s);
}
@keyframes casePipeGlow {
  0%, 100% { opacity: .45; }
  12% { opacity: 1; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb, 27, 102, 204), .16); }
  30% { opacity: .55; }
}

/* ---- 智能体检索细节抽屉（默认收起；展开 = 轨迹时间线 + 本体增强收益） ---- */
.case-agent {
  margin: 8px 0 0 10px; border: 1px dashed var(--border-strong); border-radius: 10px;
  background: var(--bg-sub); overflow: hidden;
}
.case-agent > summary {
  list-style: none; display: flex; align-items: center; gap: 8px;
  padding: 7px 10px; cursor: pointer; font-size: calc(12px * var(--font-scale)); color: var(--text-2);
  user-select: none;
}
.case-agent > summary::-webkit-details-marker { display: none; }
.case-agent > summary:hover { border-radius: 10px; background: var(--primary-light-2); }
.case-agent-tag {
  flex: none; font-size: calc(10.5px * var(--font-scale)); font-weight: 700; padding: 2px 8px; border-radius: 999px;
  color: #fff; background: linear-gradient(135deg, var(--primary-bright), var(--primary));
  letter-spacing: .04em;
}
.case-agent-caret { flex: none; color: var(--text-3); transition: transform .16s; }
.case-agent[open] > summary .case-agent-caret { transform: rotate(180deg); }
.case-agent-body { padding: 4px 12px 12px; border-top: 1px dashed var(--border); }
.case-agent-body .case-trace-list { margin: 6px 0 0; }
.case-agent-body .case-trace-gain { margin-top: 10px; }

/* ---- 案例检索视图 / 治理视图的滚动容器 ---- */
.case-shell-body { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 16px 18px; }
.case-shell-body::-webkit-scrollbar { width: 8px; }
.case-shell-body::-webkit-scrollbar-thumb { background: rgba(var(--primary-rgb, 27, 102, 204), .25); border-radius: 4px; }
.case-pane { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 16px 18px; }

/* 输入条（固定底部，制度助手同款 pill + 发送钮） */
.case-inputbar {
  flex: none; display: flex; gap: 10px; align-items: center;
  padding: 12px 16px 14px; border-top: 1px solid var(--border); background: var(--bg-soft);
}
.case-send { width: 54px; padding: 0; display: flex; align-items: center; justify-content: center; }

/* ---- 左栏卡片化 ---- */
.case-idcard {
  border: 1px solid var(--border); border-radius: 12px;
  background: var(--bg-soft); padding: 12px;
  box-shadow: var(--shadow-sm);
}
.case-idcard .case-side-title:first-child { margin-top: 0; }
.case-id-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 8px; }
.case-id-grid label {
  display: flex; flex-direction: column; gap: 4px;
  font-size: calc(11px * var(--font-scale)); color: var(--text-3); min-width: 0;
}
.case-id-grid label.case-id-full { grid-column: span 2; }
.case-id-grid input, .case-id-grid select {
  width: 100%; height: 30px; padding: 0 8px; box-sizing: border-box;
  border: 1px solid var(--border-strong); border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, .04); color: var(--text); font-size: calc(12px * var(--font-scale)); font-family: inherit;
}
.case-id-grid input:focus, .case-id-grid select:focus { outline: none; border-color: var(--primary); }
.case-id-act { display: flex; gap: 8px; align-items: center; margin-top: 10px; }
.case-id-act .case-btn { flex: 1; }
.case-id-act .case-mini { flex: none; }
/* 主体令牌（沿用 .case-principal 渲染，收进卡片后去分隔线） */
.case-idcard .case-principal { border-left: 0; padding-left: 0; flex: none; margin-top: 10px; }
.case-gov-links { display: flex; gap: 6px; flex-wrap: wrap; }
.case-gov-links .case-link { font-size: calc(11.5px * var(--font-scale)); padding: 5px 10px; }

/* ---- 本体查看器 ---- */
.case-onto {
  border: 1px solid var(--border); border-radius: 12px;
  background: var(--bg-soft); padding: 12px;
  box-shadow: var(--shadow-sm);
}
.case-onto-q {
  width: 100%; height: 30px; box-sizing: border-box; margin-top: 8px; padding: 0 10px;
  border: 1px solid var(--border-strong); border-radius: 999px;
  background: rgba(255, 255, 255, .04); color: var(--text); font-size: calc(12px * var(--font-scale)); font-family: inherit;
}
.case-onto-q:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb, 27, 102, 204), .14); }
.case-onto-vocabs { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.case-onto-vocab {
  border: 1px solid var(--border-strong); background: rgba(255, 255, 255, .04); color: var(--text-2);
  font-size: calc(11.5px * var(--font-scale)); font-family: inherit; padding: 3px 10px; border-radius: 999px; cursor: pointer;
}
.case-onto-vocab i { font-style: normal; opacity: .75; }
.case-onto-vocab:hover { border-color: var(--primary); color: var(--primary); }
.case-onto-vocab.is-on {
  background: linear-gradient(135deg, var(--primary-bright), var(--primary));
  border-color: transparent; color: #fff; font-weight: 600;
}
.case-onto-tree { margin-top: 8px; max-height: 320px; overflow-y: auto; padding-right: 2px; }
.case-onto-tree::-webkit-scrollbar { width: 6px; }
.case-onto-tree::-webkit-scrollbar-thumb { background: rgba(var(--primary-rgb, 27, 102, 204), .25); border-radius: 3px; }
.case-onto-node { border-top: 1px dashed var(--border); }
.case-onto-node:first-child { border-top: 0; }
.case-onto-node > summary {
  list-style: none; display: flex; align-items: center; gap: 6px;
  padding: 6px 6px; cursor: pointer; font-size: calc(12.5px * var(--font-scale)); color: var(--text);
  border-radius: 7px; user-select: none;
}
.case-onto-node > summary::-webkit-details-marker { display: none; }
.case-onto-node > summary:hover { background: var(--primary-light-2); }
.case-onto-caret { flex: none; color: var(--text-3); font-size: calc(10px * var(--font-scale)); transition: transform .15s; }
.case-onto-node[open] > summary .case-onto-caret { transform: rotate(90deg); }
.case-onto-node-row { border-top: 1px dashed var(--border); }
.case-onto-node-row:first-child { border-top: 0; }
.case-onto-dep { text-decoration: line-through; color: var(--text-3); }
.case-onto-code {
  font-style: normal; font-size: calc(9.5px * var(--font-scale)); color: var(--text-3);
  font-family: ui-monospace, Menlo, Consolas, monospace; margin-left: auto;
}
.case-onto-n {
  font-style: normal; font-size: calc(10px * var(--font-scale)); color: var(--text-3);
  background: rgba(255, 255, 255, .07); border-radius: 999px; padding: 0 6px; margin-left: 2px;
}
.case-onto-kids { padding: 0 4px 6px 20px; }
.case-onto-leaf {
  display: flex; align-items: center; gap: 6px; min-width: 0;
  font-size: calc(12px * var(--font-scale)); color: var(--text-2); padding: 4px 8px; border-radius: 7px; cursor: pointer;
}
.case-onto-leaf:hover { background: var(--primary-light-2); color: var(--primary); }
.case-onto-leaf.is-on { background: var(--primary-light); color: var(--primary-deep); font-weight: 600; }
.case-onto-leaf.is-on .case-onto-code { color: var(--primary-deep); }
.case-onto-leaf span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.case-onto-vocabtag {
  font-style: normal; font-size: calc(9.5px * var(--font-scale)); color: var(--text-3);
  border: 1px solid var(--border-strong); border-radius: 999px; padding: 0 5px; margin-left: 6px;
}
.case-onto-none { padding: 8px 2px; }
.case-onto-card {
  margin-top: 10px; border: 1px solid rgba(var(--primary-rgb, 27, 102, 204), .45);
  border-radius: 10px; padding: 10px;
  background: var(--primary-light-2);
}
.case-onto-card-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.case-onto-card-head b { font-size: calc(13px * var(--font-scale)); color: var(--primary-deep); }
.case-onto-card-head .case-onto-code { margin-left: 0; }
.case-onto-card-row {
  margin-top: 6px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); line-height: 1.7;
  display: flex; align-items: center; gap: 4px; flex-wrap: wrap;
}
.case-onto-card-act { display: flex; gap: 6px; margin-top: 9px; flex-wrap: wrap; }

/* ---- 窄屏回落：单列时侧栏限高，主对话框保底高度 ---- */
@media (max-width: 1080px) {
  .case-body { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; }
  .case-side { max-height: 430px; }
  .case-main { min-height: 560px; }
}
/* ============================================================
 * 报告中心（rp-*）· 报告一等对象屏
 * 仅新增类，不改任一既有类名；颜色一律走令牌，明暗两主题自动随动。
 * ============================================================ */

/* ---- 顶部 KPI 概览条 ---- */
.rp-kpis {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px; margin-bottom: 14px;
}
.rp-kpi {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 12px; padding: 14px 16px;
  position: relative; overflow: hidden;
}
.rp-kpi::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
  background: var(--border-strong);
}
.rp-kpi-num {
  font-size: calc(26px * var(--font-scale)); font-weight: 600; line-height: 1.15;
  color: var(--text); font-variant-numeric: tabular-nums;
}
.rp-kpi-num.is-warn { color: var(--warn); }
.rp-kpi-num.is-ok { color: var(--ok); }
.rp-kpi-num.is-danger { color: var(--danger); }
.rp-kpi-label { margin-top: 4px; font-size: calc(12.5px * var(--font-scale)); color: var(--text-2); }
.rp-kpi-hint { margin-top: 3px; font-size: calc(11px * var(--font-scale)); color: var(--text-3); }

/* ---- 工具条 ---- */
.rp-toolbar { padding: 10px 14px; margin-bottom: 12px; }
.rp-filters { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.rp-search { flex: 1 1 220px; min-width: 180px; }
.rp-search input {
  width: 100%; box-sizing: border-box;
  background: var(--bg-soft); border: 1px solid var(--border);
  border-radius: 8px; padding: 7px 11px; color: var(--text); font-size: calc(12.5px * var(--font-scale));
}
.rp-search input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--ring-color); }
.rp-select {
  background: var(--bg-soft); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 6px 9px; font-size: calc(12.5px * var(--font-scale)); min-width: 112px;
}
.rp-select:focus { outline: none; border-color: var(--primary); }
.rp-count { margin-left: auto; font-size: calc(12px * var(--font-scale)); color: var(--text-3); white-space: nowrap; }

/* ---- 报告列表 ---- */
.rp-list { display: flex; flex-direction: column; gap: 9px; }
.rp-item {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 12px; padding: 12px 15px; cursor: pointer;
  transition: border-color .15s ease, background .15s ease;
}
.rp-item:hover { border-color: var(--border-strong); background: var(--bg-soft); }
.rp-item:focus-visible { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--ring-color); }
.rp-item.is-open { border-color: var(--primary); background: var(--primary-bg); }
.rp-item-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.rp-item-title { font-size: calc(13.5px * var(--font-scale)); font-weight: 600; color: var(--text); }
.rp-item-time { margin-left: auto; font-size: calc(11px * var(--font-scale)); color: var(--text-3); white-space: nowrap; }
.rp-item-sub { margin-top: 5px; font-size: calc(12px * var(--font-scale)); color: var(--text-2); line-height: 1.6; }

/* ---- 详情抽屉 ---- */
.rp-detail:not(:empty) { margin-top: 14px; }
.rp-detail-card { padding: 0; }
.rp-detail-body { padding: 12px 16px 16px; }
.rp-meta {
  display: flex; flex-wrap: wrap; gap: 6px 16px;
  font-size: calc(12px * var(--font-scale)); color: var(--text-3); padding-bottom: 11px;
  border-bottom: 1px solid var(--border);
}
.rp-meta b { color: var(--text-2); font-weight: 500; }
.rp-close { margin-left: 8px; }

.rp-tabs { display: flex; gap: 6px; flex-wrap: wrap; margin: 12px 0 12px; }
.rp-tab {
  background: transparent; border: 1px solid var(--border); color: var(--text-2);
  border-radius: 999px; padding: 5px 13px; font-size: calc(12.5px * var(--font-scale)); cursor: pointer;
  transition: all .14s ease;
}
.rp-tab:hover { border-color: var(--border-strong); color: var(--text); }
.rp-tab.active {
  background: var(--primary-light); border-color: var(--primary); color: var(--primary-deep);
}
.rp-tab-body { min-height: 60px; }

.rp-cust {
  background: var(--bg-sub); border: 1px solid var(--border);
  border-radius: 10px; padding: 12px 14px;
}
.rp-cust-text { font-size: calc(13px * var(--font-scale)); line-height: 1.9; color: var(--text); }
.rp-block-title { font-size: calc(12.5px * var(--font-scale)); font-weight: 600; color: var(--text-2); margin-bottom: 7px; }
.rp-prov { margin: 0; padding-left: 18px; font-size: calc(12.3px * var(--font-scale)); color: var(--text-2); line-height: 1.85; }
.rp-prov b { color: var(--primary-deep); font-weight: 600; }
.rp-gap {
  margin-top: 12px; font-size: calc(12.3px * var(--font-scale)); color: var(--warn);
  background: var(--warn-bg); border: 1px solid rgba(232, 185, 62, .3);
  border-radius: 10px; padding: 9px 12px;
}
.rp-gap ul { margin: 5px 0 0; padding-left: 18px; }
.rp-note { font-size: calc(12px * var(--font-scale)); color: var(--text-3); line-height: 1.7; }

.rp-linked-group { margin-bottom: 14px; }
.rp-linked-item {
  display: flex; align-items: center; gap: 9px;
  background: var(--bg-soft); border: 1px solid var(--border);
  border-radius: 9px; padding: 8px 11px; margin-bottom: 6px;
  font-size: calc(12.5px * var(--font-scale)); color: var(--text); cursor: pointer;
  transition: border-color .14s ease;
}
.rp-linked-item:hover { border-color: var(--primary); }
.rp-linked-ref {
  font-family: var(--font-mono, monospace); font-size: calc(11.5px * var(--font-scale)); color: var(--text-3);
}
.rp-linked-go { margin-left: auto; font-size: calc(11.5px * var(--font-scale)); color: var(--primary-deep); white-space: nowrap; }

.rp-actions {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-top: 14px; padding-top: 13px; border-top: 1px solid var(--border);
}
.rp-actions .rp-note { margin-right: auto; }

/* ---- 就地生成报告 ---- */
.rp-gen { margin-bottom: 12px; padding: 0; }
.rp-gen-body { padding: 12px 16px 16px; display: flex; flex-wrap: wrap; gap: 10px 14px; }
.rp-field { display: flex; flex-direction: column; gap: 5px; flex: 1 1 240px; min-width: 200px; }
.rp-field > span { font-size: calc(12px * var(--font-scale)); color: var(--text-3); }
.rp-field input, .rp-field textarea {
  background: var(--bg-soft); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 7px 10px; font-size: calc(12.5px * var(--font-scale)); font-family: inherit;
  resize: vertical;
}
.rp-field input:focus, .rp-field textarea:focus {
  outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--ring-color);
}
.rp-gen-actions {
  flex: 1 1 100%; display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.rp-gen-actions .btn { flex: 0 0 auto; }

/* ---- 窄屏回落 ---- */
@media (max-width: 980px) {
  .rp-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 620px) {
  .rp-kpis { grid-template-columns: minmax(0, 1fr); }
  .rp-count { margin-left: 0; width: 100%; }
  .rp-item-time { margin-left: 0; width: 100%; }
}

/* ============================================================
 * 订单履约看板模块点击详情（2026-10-20）
 * 管道环节 button 化 / 风险订单行 / 部门域卡：复用 .std-modal 弹窗体系，
 * 这里只补三类命中区的可点击语义与焦点态。
 * ============================================================ */
button.pipe-stage {
  appearance: none; border: none; background: transparent;
  font: inherit; color: inherit; text-align: left; cursor: pointer;
}
.risk-order[data-risk-order],
.dept-domain[data-domain] { cursor: pointer; }
.pipe-stage:focus-visible,
.risk-order[data-risk-order]:focus-visible,
.dept-domain[data-domain]:focus-visible {
  outline: 2px solid var(--primary); outline-offset: -2px; border-radius: 10px;
}
html[data-theme="light"] .dept-domain[data-domain]:hover { background: #F0F5FB; }
/* 部门域卡弹窗：闭环率条语义为「达成」→ 用主色而非不良原因的警示红 */
.std-modal .std-cause-bar i.ok-fill { background: var(--primary, #2563eb); }

/* ============================================================
   帮助中心 · 协同架构图主题自适应（help-screen.js architectureSvg）
   类选择器优先级高于 SVG presentation attribute（fill/stroke 属性），
   因此这里能整体翻转「强块」配色，其他 pastel 层两主题通用不动。
   ============================================================ */
.help-arch .arch-portal { fill: #185FA5; stroke: #124A85; }
.help-arch .arch-portal-title { fill: #FFFFFF; }
.help-arch .arch-portal-line { fill: rgba(255, 255, 255, .85); }
.help-arch .arch-toolbox { fill: #FFFFFF; stroke: #A9BFD3; }
.help-arch .arch-toolbox-title { fill: #1F3B57; }
.help-arch .arch-toolbox-line { fill: #42566B; }
.help-arch .arch-base { fill: #1F3B57; stroke: #123049; }
.help-arch .arch-base-title { fill: #FFFFFF; }
.help-arch .arch-base-line { fill: rgba(255, 255, 255, .85); }

/* 亮色主题：入口三箱用主题蓝（与顶栏/主按钮同源），治理底盘翻成浅蓝带 +
   深蓝文字，不再压一块深藏青；统一工具层白底不变。 */
html[data-theme="light"] .help-arch .arch-portal { fill: #1B66CC; stroke: #1559B4; }
html[data-theme="light"] .help-arch .arch-base { fill: #E9F0FB; stroke: #A9C4E8; }
html[data-theme="light"] .help-arch .arch-base-title { fill: #0F4C9E; }
html[data-theme="light"] .help-arch .arch-base-line { fill: #35597F; }

/* ---------- 态势汇总卡（digest 策略 · V4.1） ----------
   "本月度最需关注什么"这类决策支持型问句的回答卡：跨域"未达标"清单，
   按严重度排序。样式只在本文件维护（类名由 screens.js 输出，勿改类名）。 */
.digest-card .digest-row {
  display: flex; align-items: center; gap: var(--spacer-8, 8px);
  padding: 9px 10px; border-radius: 8px; background: var(--bg-soft, rgba(255,255,255,.04));
  border-left: 3px solid var(--warn, #E8B93E); margin-bottom: 7px;
}
.digest-card .digest-row.danger { border-left-color: var(--danger, #F4696B); }
.digest-card .digest-no {
  width: 20px; height: 20px; flex: 0 0 20px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: calc(11px * var(--font-scale)); font-weight: 700; background: var(--bg-sub, rgba(255,255,255,.08)); color: var(--text-2);
}
.digest-card .digest-badge {
  flex: 0 0 auto; font-size: calc(10.5px * var(--font-scale)); font-weight: 700; padding: 1px 6px; border-radius: 5px;
  background: var(--amber-bg, rgba(232,185,62,.16)); color: var(--warn, #E8B93E);
}
.digest-card .digest-badge.danger { background: rgba(244,105,107,.16); color: var(--danger, #F4696B); }
.digest-card .digest-main { flex: 1 1 auto; min-width: 0; font-size: calc(12.6px * var(--font-scale)); line-height: 1.75; }
.digest-card .digest-main b { color: var(--text); }
.digest-card .digest-num { margin-left: 6px; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }
.digest-card .digest-meta { display: block; font-size: calc(11.2px * var(--font-scale)); color: var(--text-3); }
.digest-card .digest-foot { margin-top: 8px; font-size: calc(12px * var(--font-scale)); line-height: 1.9; color: var(--text-2); }

/* R10 老板经营 · 大单进度卡 */
.biz-card .biz-summary {
  padding: 12px 14px; border-radius: 10px;
  background: var(--bg-sub); border: 1px solid var(--border);
}
.biz-summary-top { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  font-size: calc(12.8px * var(--font-scale)); color: var(--text-2); }
.biz-summary-top b { color: var(--text); font-variant-numeric: tabular-nums; }
.biz-summary-meta { color: var(--text-3); font-size: calc(11.5px * var(--font-scale)); }
.biz-bar { height: 8px; border-radius: 999px; overflow: hidden;
  background: var(--border); margin-top: 8px; }
.biz-bar > span { display: block; height: 100%; border-radius: inherit;
  background: var(--primary); transition: width .35s ease; }
.biz-bar-lg { height: 11px; margin-top: 10px; }
.biz-focus { margin-top: 12px; padding: 12px 14px; border-radius: 10px;
  border: 1px solid var(--border); }
.biz-focus-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
  font-size: calc(13px * var(--font-scale)); color: var(--text-2); }
.biz-focus-head b { color: var(--text); font-size: calc(14px * var(--font-scale)); }
.biz-stage { padding: 1px 8px; border-radius: 999px;
  background: var(--primary-light-2); color: var(--primary);
  font-size: calc(11px * var(--font-scale)); font-weight: 600; }
.biz-focus-meta { margin-top: 5px; font-size: calc(12px * var(--font-scale)); color: var(--text-3); }
.biz-focus-meta b { color: var(--text); font-variant-numeric: tabular-nums; }
.biz-finish { margin-top: 8px; font-size: calc(12.2px * var(--font-scale)); color: var(--text-2); }
.biz-finish b { color: var(--text); }
.biz-finish-note { color: var(--text-3); font-size: calc(11.2px * var(--font-scale)); }
.biz-risks-title { margin-top: 12px; display: flex; align-items: center; gap: 5px;
  color: var(--warn); font-size: calc(12.5px * var(--font-scale)); font-weight: 650; }
.biz-risk { display: flex; gap: 8px; align-items: flex-start;
  margin-top: 6px; padding: 7px 10px; border-radius: 8px;
  background: var(--warn-bg); color: var(--text-2);
  font-size: calc(12.2px * var(--font-scale)); line-height: 1.65; }
.biz-risk-no { flex: none; width: 18px; height: 18px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--warn); color: var(--text); font-size: 11px; font-weight: 700; }

/* R11 呆滞料盘点卡 */
.ag-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
  gap: 8px; }
.ag-stat { padding: 9px 11px; border-radius: 9px; background: var(--bg-sub);
  border: 1px solid var(--border); display: flex; flex-direction: column; gap: 2px; }
.ag-stat b { color: var(--text); font-size: calc(15px * var(--font-scale));
  font-variant-numeric: tabular-nums; }
.ag-stat span { color: var(--text-3); font-size: calc(11px * var(--font-scale)); }
.ag-suppliers { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 9px; }
.ag-supplier { padding: 3px 9px; border-radius: 999px;
  background: var(--primary-light-2); color: var(--primary);
  font-size: calc(11.2px * var(--font-scale)); }
.ag-table-wrap { margin-top: 9px; overflow: auto; max-height: 280px; }
.ag-table { width: 100%; font-size: calc(11.8px * var(--font-scale)); }
.ag-table th { position: sticky; top: 0; background: var(--bg-sub); z-index: 1; }
.ag-table td, .ag-table th { white-space: nowrap; }
.ag-more { margin-top: 5px; color: var(--text-3);
  font-size: calc(11.2px * var(--font-scale)); }
.ag-policy { margin-top: 10px; padding: 9px 11px; border-radius: 8px;
  background: var(--bg-sub); color: var(--text-2);
  font-size: calc(12px * var(--font-scale)); line-height: 1.7; }
.ag-policy b { color: var(--text); }
.ag-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  margin-top: 10px; }
.ag-gate-note { display: inline-flex; align-items: center; gap: 4px;
  color: var(--text-3); font-size: calc(11.2px * var(--font-scale)); line-height: 1.5; }

/* R12 帮助中心 · 落地方法论 / 上线六项体检 */
.mth-card { padding: 14px; }
.mth-intro { font-size: calc(12.5px * var(--font-scale)); line-height: 1.85;
  color: var(--text-2); padding-bottom: 10px; border-bottom: 1px dashed var(--border); }
.mth-intro b { color: var(--text); }
.mth-sub { margin: 13px 0 7px; font-weight: 700; color: var(--text);
  font-size: calc(13px * var(--font-scale)); display: flex; align-items: baseline;
  gap: 8px; flex-wrap: wrap; }
.mth-sub-note { color: var(--text-3); font-weight: 400;
  font-size: calc(11.2px * var(--font-scale)); }
.mth-grid { display: grid; gap: 8px; }
.mth-grid-7 { grid-template-columns: repeat(auto-fit, minmax(205px, 1fr)); }
.mth-grid-5 { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.mth-step, .mth-map-item { display: flex; gap: 9px; align-items: flex-start;
  padding: 9px 11px; border-radius: 9px; background: var(--bg-sub);
  border: 1px solid var(--border); }
.mth-step-no, .mth-map-no { flex: none; width: 20px; height: 20px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--primary-light-2); color: var(--primary);
  font-size: 11px; font-weight: 700; }
.mth-step b, .mth-map-item b { color: var(--text);
  font-size: calc(12.3px * var(--font-scale)); }
.mth-step-d { margin-top: 3px; color: var(--text-2); line-height: 1.65;
  font-size: calc(11.5px * var(--font-scale)); }
.mth-evo-line { display: flex; gap: 6px; flex-wrap: wrap; }
.mth-evo { display: inline-flex; align-items: center; gap: 5px;
  padding: 4px 10px; border-radius: 999px; background: var(--bg-sub);
  border: 1px solid var(--border); color: var(--text-2);
  font-size: calc(11.8px * var(--font-scale)); }
.mth-evo em { font-style: normal; color: var(--text-3); font-size: 10.5px; }
.mth-progress-wrap { margin-top: 4px; padding: 10px 12px; border-radius: 9px;
  background: var(--bg-sub); border: 1px solid var(--border); }
.mth-progress-top { display: flex; justify-content: space-between;
  color: var(--text-2); font-size: calc(12px * var(--font-scale)); }
.mth-progress-top b { color: var(--text); font-variant-numeric: tabular-nums; }
.mth-progress { height: 8px; margin-top: 7px; border-radius: 999px;
  background: var(--border); overflow: hidden; }
.mth-progress > span { display: block; height: 100%; border-radius: inherit;
  background: var(--primary); transition: width .3s ease; }
.mth-checks { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.mth-check-row { display: flex; gap: 10px; align-items: flex-start;
  padding: 9px 11px; border-radius: 9px; border: 1px solid var(--border);
  background: var(--bg-sub); cursor: pointer; }
.mth-check-row input { margin-top: 2px; width: 16px; height: 16px;
  accent-color: var(--primary); flex: none; cursor: pointer; }
.mth-check-body { flex: 1; min-width: 0; }
.mth-check-body b { color: var(--text); font-size: calc(12.3px * var(--font-scale)); }
.mth-check-body span { display: block; margin-top: 2px; color: var(--text-2);
  line-height: 1.65; font-size: calc(11.4px * var(--font-scale)); }
.mth-check-state { flex: none; color: var(--text-3);
  font-size: calc(11px * var(--font-scale)); }
.mth-check-row:has(input:checked) { border-color: var(--ok);
  background: rgba(63, 203, 121, .08); }
.mth-check-row:has(input:checked) .mth-check-state { color: var(--ok); font-weight: 600; }
.mth-actions { margin-top: 10px; display: flex; gap: 8px; align-items: center;
  flex-wrap: wrap; }
.mth-reset { border: 1px solid var(--border); background: transparent;
  color: var(--text-2); }
.mth-reset:hover { border-color: var(--primary); color: var(--primary); }
.mth-actions-note { color: var(--text-3);
  font-size: calc(11.2px * var(--font-scale)); }

/* ============================================================
   SVG 图内文本的字号缩放
   ------------------------------------------------------------
   横向画布（帮助中心架构图 / 场景屏事件流与 SPC 图）里的文字用的是 SVG
   表现属性 font-size="N"。表现属性在层叠中按「最低优先级作者样式」处理，
   任何 CSS 规则都能覆盖它——所以这里按当前出现的字号值逐个接上 --font-scale，
   不必去改各场景 JS（改属性值本身反而无效：SVG 属性不接受 calc() 表达式）。
   值目录来源：help-screen.js（13 / 11 / 10.5，10.5 亦为 fontSize 选项值）、
   s04-batch-ecn.js（10.5 / 10）、s05-trace.js（12.5 / 11）。
   注意：SVG 内 1px = 1 用户单位，故 calc 里的 px 与视口缩放无关。
   ============================================================ */
svg text[font-size="10"]   { font-size: calc(10px * var(--font-scale)); }
svg text[font-size="10.5"] { font-size: calc(10.5px * var(--font-scale)); }
svg text[font-size="11"]   { font-size: calc(11px * var(--font-scale)); }
svg text[font-size="12.5"] { font-size: calc(12.5px * var(--font-scale)); }
svg text[font-size="13"]   { font-size: calc(13px * var(--font-scale)); }

/* ================= 案例检索 · 证据链 2.0 / 三方对照（2026-10-20 追加） =================
 * 对应 PRD FR-04 / FR-05 / FR-06 / FR-07。
 * 命名一律 case- 前缀；颜色**只用设计令牌**（令牌在亮/暗两套里都有定义），
 * 因此深浅主题与个性化主题色下都随动，不写死浅色 hex。 */

/* ---- 作答器徽标（诚实呈现：大模型 / 模板 / 模板降级） ---- */
.case-answer-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.case-answer-head h4 { margin: 0; }
.case-answerer {
  font-size: calc(10.5px * var(--font-scale)); font-weight: 650; letter-spacing: .03em;
  padding: 2px 9px; border-radius: 999px; border: 1px solid transparent; white-space: nowrap;
}
.case-answerer.is-llm {
  color: var(--primary-deep);
  background: rgba(var(--primary-rgb), .14);
  border-color: rgba(var(--primary-rgb), .40);
}
.case-answerer.is-tpl { color: var(--text-2); background: var(--bg-2); border-color: var(--border); }
.case-answerer.is-fb { color: var(--warn); background: var(--warn-bg); border-color: rgba(232, 185, 62, .40); }

/* ---- 循环摘要条（意图 / 轮数 / 跳数 / 终止原因） ---- */
.case-agentic-strip { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 10px; }
.case-kpi-chip {
  display: inline-flex; align-items: center; gap: 5px; max-width: 100%;
  font-size: calc(11px * var(--font-scale)); padding: 2px 9px; border-radius: 999px;
  color: var(--text-2); background: var(--bg-2); border: 1px solid var(--border);
}
.case-kpi-chip i { font-style: normal; color: var(--text-3); font-weight: 600; }
.case-kpi-chip.is-agent {
  color: var(--primary-deep); background: rgba(var(--primary-rgb), .12);
  border-color: rgba(var(--primary-rgb), .34);
}
.case-kpi-chip.is-term { color: var(--text); border-style: dashed; }

/* ---- 步骤三件套：决策类型徽标 / 关键数字 / 触发原因 ---- */
.case-trace-head { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.case-kind-badge {
  font-size: calc(10px * var(--font-scale)); font-weight: 650; padding: 1px 7px;
  border-radius: 999px; border: 1px solid var(--border); color: var(--text-3); white-space: nowrap;
}
.case-kind-badge.is-det { color: var(--text-2); background: var(--bg-2); }
.case-kind-badge.is-agent {
  color: var(--primary-deep); background: rgba(var(--primary-rgb), .14);
  border-color: rgba(var(--primary-rgb), .38);
}
.case-kind-badge.is-safe { color: var(--ok); background: var(--ok-bg); border-color: rgba(63, 203, 121, .38); }
.case-nums { display: flex; flex-wrap: wrap; gap: 5px; margin: 4px 0 2px; }
.case-num-chip {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: calc(10.5px * var(--font-scale)); font-variant-numeric: tabular-nums;
  padding: 1px 8px; border-radius: 6px; color: var(--text-2);
  background: var(--bg-sub); border: 1px solid var(--border);
}
.case-num-chip i { font-style: normal; color: var(--text-3); }
.case-step-why {
  margin: 3px 0 2px; padding: 4px 8px; border-left: 3px solid var(--warn);
  border-radius: 0 6px 6px 0; background: var(--warn-bg);
  font-size: calc(11.5px * var(--font-scale)); color: var(--text);
}
/* 时间线按决策类型着色：模型决策=品牌色，安全内核=绿色，规则=中性 */
.case-trace-timeline .case-trace-step.case-kind-is-agent::before { background: var(--primary); }
.case-trace-timeline .case-trace-step.case-kind-is-safe::before { background: var(--ok); }
.case-trace-timeline .case-trace-step.case-kind-is-det::before { background: var(--border-strong); }
.case-pipe-step.is-loop { background: rgba(var(--primary-rgb), .12); color: var(--primary-deep); }
.case-trace-rel { margin-top: 10px; }

/* ---- 问句改写引导（FR-07） ---- */
.case-sugg {
  margin-top: 10px; padding: 8px 10px; border: 1px dashed var(--border-strong);
  border-radius: 10px; background: var(--bg-sub);
}
.case-sugg > b { font-size: calc(12px * var(--font-scale)); color: var(--text); }
.case-sugg-tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 2px; }
.case-sugg-tag { cursor: pointer; }
.case-sugg-tag:hover { border-color: var(--primary); color: var(--primary); }

/* ---- 三方对照（FR-06）：三栏并列 ---- */
.case-cmp3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 12px 0; }
@media (max-width: 1100px) { .case-cmp3 { grid-template-columns: 1fr; } }
.case-cmp3-col {
  border: 1px solid var(--border); border-radius: 12px; padding: 12px;
  background: var(--card); min-width: 0;
}
.case-cmp3-col.is-agentic {
  border-color: rgba(var(--primary-rgb), .55);
  box-shadow: 0 0 0 1px rgba(var(--primary-rgb), .22) inset;
}
.case-cmp3-head { font-size: calc(13px * var(--font-scale)); color: var(--text); margin-bottom: 2px; }
.case-cmp3-col.is-agentic .case-cmp3-head b { color: var(--primary-deep); }
.case-cmp3-desc { font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); line-height: 1.6; margin-bottom: 8px; }
.case-cmp3-nums { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 6px; }
.case-cmp3-num { font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.case-cmp3-num b { font-size: calc(17px * var(--font-scale)); color: var(--text); font-variant-numeric: tabular-nums; margin-right: 2px; }
.case-cmp3-segs { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 6px; }
.case-cmp3-list { list-style: none; margin: 0; padding: 0; }
.case-cmp3-list li {
  display: flex; align-items: center; gap: 6px; padding: 5px 0;
  border-top: 1px solid var(--border); font-size: calc(11.8px * var(--font-scale));
  color: var(--text-2); min-width: 0;
}
.case-cmp3-list li b { color: var(--text); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.case-cmp3-list li code { flex: none; color: var(--text-3); }
.case-cmp3-seg { flex: none; font-size: calc(10.5px * var(--font-scale)); padding: 1px 7px; border-radius: 999px; background: var(--bg-2); border: 1px solid var(--border); color: var(--text-3); }
.case-cmp3-score { margin-left: auto; flex: none; font-variant-numeric: tabular-nums; color: var(--text-3); }
.case-cmp3-gain {
  border: 1px solid var(--border); border-radius: 12px; padding: 10px 12px;
  background: var(--bg-sub); margin-bottom: 10px;
}
.case-cmp3-gain > b { font-size: calc(12.5px * var(--font-scale)); color: var(--text); }
.case-cmp3-gain-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.case-cmp3-new {
  font-family: ui-monospace, Consolas, Menlo, monospace; font-size: calc(11px * var(--font-scale));
  padding: 1px 7px; border-radius: 6px; color: var(--primary-deep);
  background: rgba(var(--primary-rgb), .14); border: 1px solid rgba(var(--primary-rgb), .34);
}
.case-cmp3-strip { display: flex; flex-wrap: wrap; gap: 6px; }

/* ---- FR-08 本体覆盖率看板（治理视图） ---- */
.case-cov { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 12px 0; }
@media (max-width: 1000px) { .case-cov { grid-template-columns: 1fr; } }
.case-cov-card {
  border: 1px solid var(--border); border-left: 4px solid var(--border-strong);
  border-radius: 12px; padding: 12px 14px; background: var(--card); min-width: 0;
}
.case-cov-card.is-ok { border-left-color: var(--ok); }
.case-cov-card.is-warn { border-left-color: var(--warn); }
.case-cov-head { display: flex; align-items: baseline; gap: 8px; }
.case-cov-head b { font-size: calc(13px * var(--font-scale)); color: var(--text); }
.case-cov-pct { margin-left: auto; font-size: calc(20px * var(--font-scale)); font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }
.case-cov-card.is-warn .case-cov-pct { color: var(--warn); }
.case-cov-card.is-ok .case-cov-pct { color: var(--ok); }
.case-cov-bar { height: 7px; border-radius: 5px; background: var(--bg-2); overflow: hidden; margin: 8px 0; border: 1px solid var(--border); }
.case-cov-bar i { display: block; height: 100%; background: linear-gradient(90deg, var(--primary-bright), var(--primary)); }
.case-cov-card.is-warn .case-cov-bar i { background: linear-gradient(90deg, var(--warn), var(--danger)); }
.case-cov-nums, .case-cov-segs { display: flex; flex-wrap: wrap; gap: 5px; }
.case-cov-target { margin-top: 8px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-3); }
.case-cov-miss { margin-top: 8px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); line-height: 1.9; }
.case-cov-miss code {
  font-family: ui-monospace, Consolas, Menlo, monospace; font-size: calc(10.8px * var(--font-scale));
  padding: 1px 6px; margin-right: 4px; border-radius: 5px; color: var(--warn);
  background: var(--warn-bg); border: 1px solid rgba(232, 185, 62, .35);
}
.case-cov-notes { margin: 4px 0 10px; }
.case-cov-notes p {
  margin: 4px 0; padding: 6px 10px; border-left: 3px solid var(--warn);
  border-radius: 0 6px 6px 0; background: var(--warn-bg);
  font-size: calc(12px * var(--font-scale)); color: var(--text); line-height: 1.7;
}

/* ---- FR-10 命中分布热力（段 × 缺陷模式，可见范围） ---- */
.case-heat { margin: 10px 0; border: 1px solid var(--border); border-radius: 10px; background: var(--bg-sub); padding: 8px 10px; }
.case-heat-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.case-heat-wrap { overflow-x: auto; margin-top: 8px; }
.case-heat-table { border-collapse: collapse; font-size: calc(11.5px * var(--font-scale)); }
.case-heat-table th, .case-heat-table td {
  border: 1px solid var(--border); padding: 4px 7px; text-align: center;
  color: var(--text); white-space: nowrap; font-variant-numeric: tabular-nums;
}
.case-heat-table thead th { background: var(--bg-2); color: var(--text-2); font-weight: 600; }
.case-heat-seg { text-align: left !important; background: var(--bg-2); color: var(--text-2); }
.case-heat-code { display: block; font-style: normal; font-size: calc(9.5px * var(--font-scale)); color: var(--text-3); }
.case-heat-cell { min-width: 34px; font-weight: 650; }
.case-heat-blank {
  color: var(--text-3); background: repeating-linear-gradient(45deg,
    transparent, transparent 4px, rgba(128, 148, 180, .16) 4px, rgba(128, 148, 180, .16) 8px);
}
.case-heat-legend { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 8px; font-size: calc(11px * var(--font-scale)); color: var(--text-2); }
.case-heat-cell-swatch, .case-heat-blank-swatch { display: inline-block; width: 16px; height: 12px; border-radius: 3px; border: 1px solid var(--border); }
.case-heat-cell-swatch { background: rgba(var(--primary-rgb), .68); }
.case-heat-blank-swatch { background: repeating-linear-gradient(45deg, transparent, transparent 3px, rgba(128, 148, 180, .35) 3px, rgba(128, 148, 180, .35) 6px); }

/* ---- FR-09 本体缺口登记 ---- */
.case-gap-entry {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 10px;
  padding: 8px 10px; border: 1px dashed var(--border-strong); border-radius: 10px;
  background: var(--bg-sub); font-size: calc(12px * var(--font-scale)); color: var(--text-2);
}
.case-gap { margin-top: 14px; padding-top: 10px; border-top: 1px solid var(--border); }
.case-gap-form { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0; }
.case-gap-form .case-input { flex: 1; min-width: 220px; }
.case-gap-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 1000px) { .case-gap-cols { grid-template-columns: 1fr; } }
.case-gap-col-title { font-size: calc(12px * var(--font-scale)); font-weight: 650; color: var(--text); margin-bottom: 6px; }
.case-gap-row {
  border: 1px solid var(--border); border-left: 3px solid var(--border-strong);
  border-radius: 8px; padding: 8px 10px; margin-bottom: 8px; background: var(--card);
}
.case-gap-row.is-pending { border-left-color: var(--warn); background: var(--warn-bg); }
.case-gap-main { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.case-gap-main b { font-size: calc(13px * var(--font-scale)); color: var(--text); }
.case-gap-vocab {
  font-size: calc(10.5px * var(--font-scale)); padding: 1px 8px; border-radius: 999px;
  color: var(--primary-deep); background: rgba(var(--primary-rgb), .14);
  border: 1px solid rgba(var(--primary-rgb), .34);
}
.case-gap-meta { font-size: calc(10.8px * var(--font-scale)); color: var(--text-3); margin-top: 4px; }
.case-gap-decide { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.case-gap-reason { flex: 1; min-width: 160px; }

/* ---- 治理视图返回条（治理视图占满主区时，大对话框页签不可见） ---- */
.case-gov-back {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 6px 16px; border-bottom: 1px solid var(--border);
  background: var(--bg-soft);
}

/* ---- 岗位 AI 同事（D1/R2：同事切换器 / 问候行 / 工作台同事卡 / 结论卡） ---- */
/* 纪律：颜色一律取主题变量（默认蓝+明亮）；不引外部资源；零 build 增量。 */
.colleague-switch {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 3px 9px; border: 1px solid var(--border); border-radius: 999px;
  background: var(--card); color: var(--text-2);
  font-size: calc(12px * var(--font-scale));
}
.colleague-switch-name { font-weight: 650; color: var(--primary-deep); }
.colleague-select {
  border: none; background: transparent; color: var(--text-2);
  font-size: calc(12px * var(--font-scale)); max-width: 130px; cursor: pointer;
}
.colleague-select:focus { outline: 2px solid var(--primary); border-radius: 6px; }

.colleague-intro {
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
  padding: 9px 16px; border-bottom: 1px solid var(--border);
  background: var(--bg-soft); font-size: calc(12.3px * var(--font-scale));
}
.colleague-intro-name {
  display: inline-flex; align-items: center; gap: 5px;
  font-weight: 700; color: var(--primary-deep);
}
.colleague-intro-greet { color: var(--text-2); }
.colleague-intro-scenes { display: inline-flex; gap: 5px; flex-wrap: wrap; }
.chip-scene {
  border: 1px dashed rgba(var(--primary-rgb), .45); color: var(--primary-deep);
  background: rgba(var(--primary-rgb), .08); cursor: default;
}

.colleague-card {
  border: 1px solid var(--border); border-radius: 12px; margin-bottom: 16px;
  background: linear-gradient(135deg, rgba(var(--primary-rgb), .07), var(--card) 55%);
  overflow: hidden;
}
.colleague-card-head {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 11px 16px; border-bottom: 1px solid var(--border);
  font-weight: 700; font-size: calc(13.5px * var(--font-scale)); color: var(--text);
}
.colleague-card-body { padding: 13px 16px; display: grid; gap: 11px; }
.colleague-card-id { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.colleague-avatar {
  width: 42px; height: 42px; border-radius: 12px; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--primary-deep); background: rgba(var(--primary-rgb), .14);
  border: 1px solid rgba(var(--primary-rgb), .32);
}
.colleague-card-meta { display: grid; gap: 2px; min-width: 0; }
.colleague-card-name {
  display: flex; align-items: center; gap: 7px;
  font-weight: 700; font-size: calc(14px * var(--font-scale)); color: var(--text);
}
.colleague-card-greet { font-size: calc(12.3px * var(--font-scale)); color: var(--text-2); }
.colleague-card-qs { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.colleague-card-qs-label {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: calc(12px * var(--font-scale)); color: var(--text-3);
}
.colleague-card.is-offline .colleague-card-body {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}

/* 同事结论卡（conclusion）：与 result-card 同骨架，步骤流水为增量 */
.conclusion-card .concl-steps {
  margin-top: 11px; border: 1px solid var(--border); border-radius: 9px;
  padding: 9px 11px; background: var(--bg-soft);
}
.concl-steps-title {
  display: flex; align-items: center; gap: 6px; margin-bottom: 6px;
  font-size: calc(12px * var(--font-scale)); font-weight: 650; color: var(--text-2);
}
.concl-step {
  display: flex; align-items: baseline; gap: 8px;
  font-size: calc(12.3px * var(--font-scale)); padding: 2.5px 0; color: var(--text-2);
}
.concl-step-no { color: var(--primary-deep); font-weight: 700; flex: none; }
.concl-step-tool {
  flex: none; padding: 0 7px; border-radius: 6px; font-size: calc(11.3px * var(--font-scale));
  color: var(--primary-deep); background: rgba(var(--primary-rgb), .12);
}
.concl-step-sum { color: var(--text-3); }

/* ---- HITL 闸门公示（R3：闸门理由 + 会签方及缺谁） ---- */
.hitl-gate {
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  margin-top: 8px; padding: 7px 10px; border-radius: 8px;
  background: rgba(var(--primary-rgb), .07); border: 1px solid rgba(var(--primary-rgb), .22);
  font-size: calc(12px * var(--font-scale)); line-height: 1.75; color: var(--text-2);
}
.hitl-gate-cls {
  flex: none; padding: 0 8px; border-radius: 999px; font-size: calc(10.8px * var(--font-scale));
  color: var(--primary-deep); background: rgba(var(--primary-rgb), .14);
  border: 1px solid rgba(var(--primary-rgb), .34);
}
.hitl-gate-name { flex: none; font-weight: 700; color: var(--text); }
.hitl-gate-why { color: var(--text-2); }

.signoff-gap {
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  margin-top: 6px; font-size: calc(12px * var(--font-scale)); color: var(--text-2);
}
.signoff-gap-label {
  flex: none; padding: 0 7px; border-radius: 6px; font-size: calc(10.8px * var(--font-scale));
  color: var(--text-3); background: var(--bg-sub); border: 1px solid var(--border);
}
.signoff-gap-progress { color: var(--text-3); }
.signoff-gap-missing { color: var(--warn); font-weight: 650; }
.signoff-gap-ok { color: var(--ok); font-weight: 650; }

/* 帮助中心：治理槽位矩阵（R3） */
.help-gate-matrix { width: 100%; border-collapse: collapse; font-size: calc(12px * var(--font-scale)); }
.help-gate-matrix th, .help-gate-matrix td {
  border: 1px solid var(--border); padding: 6px 9px; text-align: left; vertical-align: top;
}
.help-gate-matrix th { background: var(--bg-sub); color: var(--text-2); font-weight: 650; }
.help-gate-matrix td b { color: var(--text); }
.help-gate-why-cell { color: var(--text-2); line-height: 1.7; }
.help-gate-gap {
  margin-top: 10px; padding: 9px 12px; border-radius: 8px;
  border: 1px dashed var(--warn); background: var(--warn-bg);
  font-size: calc(12px * var(--font-scale)); color: var(--text-2); line-height: 1.8;
}

/* 审批中心列表行闸门片（R3） */
.hli-gate {
  padding: 0 7px; border-radius: 6px; font-size: calc(10.8px * var(--font-scale));
  color: var(--primary-deep); background: rgba(var(--primary-rgb), .12);
  border: 1px solid rgba(var(--primary-rgb), .3);
}

/* 齐套催交跟踪（R6）：治理轨状态机 + 演示回写徽标 */
.fu-card { margin-top: 14px; }
.fu-card .card-head { align-items: center; gap: 10px; }
.fu-head-acts { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.fu-sum { font-size: calc(12px * var(--font-scale)); color: var(--text-2); }
.fu-sum b { color: var(--text); font-weight: 700; }
.fu-demo {
  display: inline-flex; align-items: center; gap: 4px; margin-left: 6px;
  padding: 0 7px; border-radius: 6px; font-size: calc(10.8px * var(--font-scale));
  color: var(--warn); background: var(--warn-bg); border: 1px dashed var(--warn);
}
.fu-basis {
  display: flex; align-items: center; gap: 6px; margin: 8px 0 0;
  padding: 8px 10px; border-radius: 8px; line-height: 1.7;
  font-size: calc(11.5px * var(--font-scale)); color: var(--text-2);
  background: var(--bg-sub); border: 1px solid var(--border);
}
.fu-list { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.fu-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 10px 12px; border-radius: 10px;
  border: 1px solid var(--border); background: var(--bg-soft);
}
.fu-row:hover { border-color: rgba(var(--primary-rgb), .45); }
.fu-main { min-width: 0; }
.fu-title {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: calc(13px * var(--font-scale)); font-weight: 650; color: var(--text);
}
.fu-name { color: var(--text-2); font-weight: 500; }
.fu-meta { margin-top: 5px; font-size: calc(11.5px * var(--font-scale)); color: var(--text-2); }
.fu-meta b.neg { color: var(--danger); }
.fu-note {
  display: flex; align-items: center; gap: 5px; margin-top: 5px;
  font-size: calc(11.5px * var(--font-scale)); color: var(--text-2);
}
.fu-acts { display: flex; gap: 6px; flex: none; }
.fu-empty { padding: 18px 0; }
@media (max-width: 820px) {
  .fu-row { flex-direction: column; align-items: stretch; }
  .fu-acts { justify-content: flex-end; }
}

/* ============================================================
   协同问数 · 历史轮次收缩（参考案例检索屏 case-foldbar 交互）
   默认只有最新一轮展开；上方历史轮收成一行摘要条，点摘要条展开，
   展开轮底部有「收起这一轮」。运行中的链路与未处理人工确认强制展开。
   ============================================================ */
.chat-fold-hint {
  text-align: center;
  font-size: calc(11px * var(--font-scale));
  color: var(--text-3);
  margin: -6px 0 2px;
}
.msg .chat-foldbar {
  flex: 1; min-width: 0;
  display: flex; align-items: center; gap: 8px;
  padding: 8px 12px; border-radius: 10px;
  border: 1px dashed var(--border-strong);
  background: rgba(255, 255, 255, .03);
  color: var(--text-2); font: inherit; text-align: left;
  cursor: pointer;
  transition: border-color .13s ease, background .13s ease;
}
.msg .chat-foldbar:hover {
  border-color: var(--primary);
  background: var(--primary-light-2);
}
.chat-foldbar-caret { flex: none; color: var(--text-3); font-size: 11px; }
.chat-foldbar-tag {
  flex: none; padding: 1px 8px; border-radius: 999px;
  background: var(--primary-light-2); color: var(--primary);
  font-size: calc(11px * var(--font-scale)); font-weight: 600;
  white-space: nowrap;
}
.chat-foldbar-main {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: calc(12.3px * var(--font-scale));
  color: var(--text-2);
}
.chat-fold-row { margin: 4px 0 2px 42px; }
.chat-fold-toggle {
  border: 0; background: transparent; padding: 2px 0;
  cursor: pointer; font: inherit;
  font-size: calc(11.3px * var(--font-scale));
  color: var(--text-3);
  transition: color .13s ease;
}
.chat-fold-toggle:hover { color: var(--primary); }
html[data-theme="light"] .msg .chat-foldbar {
  background: var(--bg-sub);
}
html[data-theme="light"] .msg .chat-foldbar:hover {
  background: var(--primary-light-2);
}

/* ============================================================
 * 签名流水（wf_signoff 只读审计 · 审批详情卡内折叠）
 * 收起只露一行摘要，展开懒加载；颜色全部走主题令牌。
 * ============================================================ */
.sg-flow {
  margin-top: 10px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--bg-sub);
  overflow: hidden;
}
.sg-flow-sum {
  display: flex; align-items: center; gap: 7px;
  padding: 8px 11px;
  list-style: none;
  cursor: pointer;
  user-select: none;
  font-size: calc(12px * var(--font-scale));
  color: var(--text-2);
}
.sg-flow-sum::-webkit-details-marker { display: none; }
.sg-flow-sum::after {
  content: "›";
  margin-left: auto;
  color: var(--text-3);
  transform: rotate(90deg);
  transition: transform .15s ease;
}
.sg-flow[open] .sg-flow-sum::after { transform: rotate(-90deg); }
.sg-flow[open] .sg-flow-sum { border-bottom: 1px solid var(--border); }
.sg-flow-title { font-weight: 600; color: var(--text); }
.sg-flow-tag {
  padding: 1px 7px; border-radius: 999px;
  background: var(--bg-2); color: var(--text-3);
  font-size: calc(10.5px * var(--font-scale));
  white-space: nowrap;
}
.sg-flow-count {
  color: var(--text-3);
  font-size: calc(11px * var(--font-scale));
  white-space: nowrap;
}
.sg-flow[open] .sg-flow-count { color: var(--primary); }
.sg-flow-body { padding-bottom: 2px; }
.sg-flow-note {
  padding: 8px 11px;
  color: var(--text-3);
  font-size: calc(11.5px * var(--font-scale));
  line-height: 1.65;
}
.sg-flow-note.warn { color: var(--warn); }
.sg-flow-note.err { color: var(--danger); }
.sg-flow-tools {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 9px 11px 0;
}
.sg-flow-src {
  flex: 1; min-width: 0;
  color: var(--text-3);
  font-size: calc(11px * var(--font-scale));
}
.sg-flow-src b { color: var(--text-2); font-weight: 600; }
.sg-flow-tools .btn { margin-left: auto; }
.sg-flow-empty {
  display: flex; align-items: flex-start; gap: 7px;
  margin: 9px 11px 11px;
  padding: 9px 10px;
  border: 1px dashed var(--border);
  border-radius: 8px;
  background: var(--bg-soft);
  color: var(--text-3);
  font-size: calc(11.5px * var(--font-scale));
  line-height: 1.65;
}
.sg-flow-table {
  margin: 9px 11px 11px;
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
}
.sg-flow-row {
  display: grid;
  grid-template-columns: 92px minmax(120px, 1.1fr) 84px 92px 150px minmax(140px, 2fr);
  gap: 8px;
  padding: 7px 10px;
  border-top: 1px solid var(--border);
  color: var(--text-2);
  font-size: calc(11.5px * var(--font-scale));
  line-height: 1.55;
}
.sg-flow-row:first-child { border-top: 0; }
.sg-flow-table .sg-flow-row:nth-child(even) { background: var(--bg-soft); }
.sg-flow-head {
  background: var(--bg-2);
  color: var(--text);
  font-weight: 600;
}
.sg-flow-table .sg-flow-head { background: var(--bg-2); }
.sg-flow-row > span { min-width: 0; word-break: break-word; }
.sg-flow-row > span:last-child { white-space: pre-wrap; }
.sg-flow-sub {
  display: block;
  font-style: normal;
  color: var(--text-3);
  font-size: calc(10.5px * var(--font-scale));
}
.sg-flow-verb { color: var(--primary); font-weight: 600; }
.sg-flow-over {
  display: block;
  font-style: normal;
  color: var(--warn);
  font-size: calc(10.5px * var(--font-scale));
}
@media (max-width: 860px) {
  .sg-flow-table { overflow-x: auto; }
  .sg-flow-row { min-width: 720px; }
}

