/* ==================================================================
   设计令牌（Design Tokens）—— 多巴胺配色
   ------------------------------------------------------------------
   规则：组件里不写死颜色/像素，一律引用这里的变量。
   换肤：<html data-theme="dark"> 即可切深色，无需改组件。
   ================================================================== */
:root {
  /* ---- 克制的低饱和色板：实色只做文字/边条，浅色只做面 ----
     取自商务精简规范的淡彩（pale red / blue / green / yellow）+ 同族两个 */
  --dp-violet: #5b4b8a;
  --dp-violet-soft: #efeaf7;
  --dp-pink: #9f2f2d;
  --dp-pink-soft: #fdebec;
  --dp-orange: #a15c2f;
  --dp-orange-soft: #fbf0e6;
  --dp-amber: #956400;
  --dp-amber-soft: #fbf3db;
  --dp-mint: #346538;
  --dp-mint-soft: #edf3ec;
  --dp-cyan: #1f6c9f;
  --dp-cyan-soft: #e1f3fe;
  --dp-lime: #4f6b2f;
  --dp-lime-soft: #eef3e6;

  /* ---- 中性色阶 8 档 ---- */
  --n-0: #ffffff;
  --n-1: #f7f8f9;   /* 画布 */
  --n-2: #eef0f2;
  --n-3: #e2e4e8;
  --n-4: #c9cdd3;
  --n-5: #969ba3;
  --n-6: #585e66;
  --n-7: #1a1d21;

  /* ---- 语义色：面 ---- */
  --bg: var(--n-1);
  --bg-sunken: var(--n-2);
  --surface: var(--n-0);
  --surface-2: var(--n-2);
  --surface-3: var(--n-3);

  /* ---- 语义色：线 ---- */
  --border: var(--n-3);
  --border-strong: var(--n-4);

  /* ---- 语义色：字 ---- */
  --text: var(--n-7);
  --text-2: var(--n-6);
  --text-3: var(--n-5);
  --text-on-accent: var(--n-0);

  /* ---- 主操作色 ---- */
  --accent: #7c3aed;
  --accent-hover: #6d28d9;
  --accent-quiet: #f2ebff;
  --accent-quiet-fg: #5b21b6;
  --focus-ring: rgba(124, 58, 237, 0.26);

  /* ---- 顶栏/外框（chrome） ---- */
  --chrome-bg: var(--n-0);
  --chrome-fg: var(--n-7);
  --chrome-fg-2: var(--n-6);
  --chrome-line: var(--n-3);
  --chrome-ok: var(--ok);
  --chrome-warn: var(--warn);

  /* ---- 状态色 ---- */
  --ok: #009e6a;
  --ok-bg: #dcfbef;
  --ok-bd: #8fecd0;
  --warn: #c26a00;
  --warn-bg: #fff3d4;
  --warn-bd: #ffd98a;
  --danger: #e01b4c;
  --danger-bg: #ffe4ec;
  --danger-bd: #ffb0c6;
  --info: #0077b6;
  --info-bg: #ddf3ff;
  --info-bd: #9fdcff;
  --idle: var(--n-5);
  --idle-bg: var(--n-2);
  --idle-bd: var(--n-3);
  /* 策略分组标识色（A/B/C/D 四类，非状态色） */
  --group-a: var(--dp-violet);
  --group-b: var(--dp-cyan);
  --group-c: var(--dp-orange);
  --group-d: var(--dp-pink);

  /* 四色轮转（KPI 等按顺序铺色用）：每色 = 实色 + 浅底 + 深字 */
  --hue-1: var(--dp-violet);
  --hue-1-bg: var(--dp-violet-soft);
  --hue-1-fg: #4a3c73;
  --hue-2: var(--dp-cyan);
  --hue-2-bg: var(--dp-cyan-soft);
  --hue-2-fg: #1f6c9f;
  --hue-3: var(--dp-amber);
  --hue-3-bg: var(--dp-amber-soft);
  --hue-3-fg: #956400;
  --hue-4: var(--dp-pink);
  --hue-4-bg: var(--dp-pink-soft);
  --hue-4-fg: #9f2f2d;

  /* 智能调控四个页签：低饱和四色，白字对比都 ≥5:1 */
  --tab-dashboard: #5b4b8a;
  --tab-manual: #1f6c9f;
  --tab-auto: #956400;
  --tab-records: #9f2f2d;
  --accent-shadow: none;

  /* ---- 字体 ---- */
  --font: "Microsoft YaHei", "PingFang SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --mono: ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, "Liberation Mono", monospace;
  --fw-regular: 400;
  --fw-medium: 500;
  --fw-bold: 600;

  /* ---- 字阶 ---- */
  --fs-xs: 12px;
  --fs-sm: 13px;
  --fs-base: 14px;
  --fs-md: 15px;
  --fs-lg: 18px;
  --fs-xl: 22px;
  --fs-2xl: 28px;
  --lh-tight: 1.25;
  --lh-base: 1.55;

  /* ---- 间距（8px 基准） ---- */
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;
  --sp-5: 24px;
  --sp-6: 32px;
  --sp-7: 48px;

  /* ---- 圆角（走硬边） ---- */
  --r-sm: 4px;
  --r: 6px;
  --r-pill: 999px;

  /* ---- 控件与节奏 ---- */
  /* 控件尺寸按设计规范：按钮/输入 36px 高、文字 14px、左右内边距 16px */
  --ctl-h: 36px;
  --ctl-h-lg: 40px;
  --row-h: 36px;
  /* ---- 表单栅格：标签列 / 控件列 定宽，行与行左边界对齐 ---- */
  --label-w: 68px;
  --field-w: 168px;
  --field-w-lg: 260px;
  --shadow-pop: 0 8px 24px rgba(17, 20, 24, 0.12);
  --dur: 0.14s;

  /* ---- 兼容旧变量名（230+ 处引用，逐步迁移） ---- */
  --navy: var(--n-7);
  --navy-2: #1c2229;
  --blue: var(--accent);
  --blue-2: var(--n-6);
  --blue-soft: var(--surface-2);
  --card: var(--surface);
  --muted: var(--text-2);
}

/* ---- 深色（同一套语义名，只换值） ---- */
html[data-theme="dark"] {
  --n-0: #0f1113;
  --n-1: #16181b;
  --n-2: #1d2024;
  --n-3: #292d33;
  --n-4: #3c4149;
  --n-5: #7b828b;
  --n-6: #b5bbc3;
  --n-7: #ebedf0;

  --bg: #121417;
  --bg-sunken: var(--n-0);
  --surface: var(--n-1);
  --surface-2: var(--n-2);
  --surface-3: var(--n-3);
  --border: var(--n-3);
  --border-strong: var(--n-4);
  --text: var(--n-7);
  --text-2: var(--n-6);
  --text-3: var(--n-5);
  --text-on-accent: #ffffff;

  --accent: #a78bfa;
  --accent-hover: #c4b5fd;
  --accent-quiet: var(--n-2);
  --accent-quiet-fg: var(--n-7);
  --focus-ring: rgba(167, 139, 250, 0.4);

  --chrome-bg: var(--n-1);
  --chrome-fg: var(--n-7);
  --chrome-fg-2: var(--n-6);
  --chrome-line: var(--n-3);
  --chrome-ok: var(--ok);
  --chrome-warn: var(--warn);

  --ok: #34d399;
  --ok-bg: rgba(52, 211, 153, 0.14);
  --ok-bd: rgba(52, 211, 153, 0.36);
  --warn: #fbbf24;
  --warn-bg: rgba(251, 191, 36, 0.14);
  --warn-bd: rgba(251, 191, 36, 0.36);
  --danger: #fb7185;
  --danger-bg: rgba(251, 113, 133, 0.14);
  --danger-bd: rgba(251, 113, 133, 0.36);
  --info: #38bdf8;
  --info-bg: rgba(56, 189, 248, 0.14);
  --info-bd: rgba(56, 189, 248, 0.36);
  --idle: var(--n-5);
  --idle-bg: var(--n-2);
  --idle-bd: var(--n-3);
  --group-a: #a78bfa;
  --group-b: #38bdf8;
  --group-c: #fbbf24;
  --group-d: #ff5fa2;

  --hue-1: #a78bfa;
  --hue-1-bg: rgba(139, 92, 246, 0.16);
  --hue-1-fg: #c4b5fd;
  --hue-2: #38bdf8;
  --hue-2-bg: rgba(0, 184, 240, 0.16);
  --hue-2-fg: #7dd3fc;
  --hue-3: #fbbf24;
  --hue-3-bg: rgba(255, 196, 0, 0.16);
  --hue-3-fg: #fcd34d;
  --hue-4: #ff5fa2;
  --hue-4-bg: rgba(255, 46, 136, 0.16);
  --hue-4-fg: #ff8fc0;

  --tab-dashboard: #a78bfa;
  --tab-manual: #22b8d8;
  --tab-auto: #d9a441;
  --tab-records: #f472b6;
  --accent-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);

  --navy: #120e26;
  --navy-2: var(--n-2);
  --blue: var(--accent);
  --blue-2: var(--n-6);
  --blue-soft: var(--surface-2);
  --shadow-pop: 0 8px 24px rgba(0, 0, 0, 0.55);
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  min-height: 100%;
}

body {
  font-family: var(--font);
  background: var(--bg);
  color: var(--text);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  -webkit-font-smoothing: antialiased;
}

:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/* ---------------- 顶部 ---------------- */
.topbar {
  display: flex;
  align-items: center;
  gap: var(--sp-5);
  padding: 0 var(--sp-4);
  height: 56px;
  background: var(--chrome-bg);
  border-bottom: 1px solid var(--chrome-line);
  position: sticky;
  top: 0;
  z-index: 50;
}

.brand {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex: 0 0 auto;
}

.brand-mark {
  width: 28px;
  height: 28px;
  border-radius: var(--r);
  background: var(--dp-violet);
  color: var(--text-on-accent);
  font-weight: var(--fw-bold);
  font-size: var(--fs-md);
  display: flex;
  align-items: center;
  justify-content: center;
}

.brand-name {
  color: var(--chrome-fg);
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  letter-spacing: 0.02em;
}

.topnav {
  display: flex;
  align-items: stretch;
  gap: var(--sp-1);
  height: 56px;
  flex: 1;
  min-width: 0;
  overflow-x: auto;
}

.topnav::-webkit-scrollbar {
  display: none;
}

.nav-item {
  border: none;
  background: transparent;
  color: var(--chrome-fg-2);
  font-size: var(--fs-base);
  padding: 0 var(--sp-4);
  cursor: pointer;
  white-space: nowrap;
  position: relative;
  transition: color var(--dur);
}

.nav-item:hover {
  color: var(--chrome-fg);
}

.nav-item.active {
  color: var(--chrome-fg);
  font-weight: var(--fw-bold);
}

.nav-item.active::after {
  content: "";
  position: absolute;
  left: var(--sp-3);
  right: var(--sp-3);
  bottom: 0;
  height: 2px;
  background: var(--dp-violet);
}

.topbar-right {
  flex: 0 0 auto;
}

.pill {
  padding: var(--sp-1) var(--sp-3);
  border-radius: var(--r-pill);
  font-size: var(--fs-xs);
  font-family: var(--mono);
  background: var(--surface-2);
  color: var(--text-2);
  white-space: nowrap;
}

.pill-ok {
  background: var(--ok-bg);
  color: var(--ok);
}

.pill-warn {
  background: var(--warn-bg);
  color: var(--warn);
}

.pill-muted {
  background: var(--surface-2);
  color: var(--text-2);
}

/* 顶栏已是浅色面，chip 直接用标准样式，不再需要 chrome 专用配色 */

/* ---------------- 主区 ---------------- */
#main {
  padding: var(--sp-5) var(--sp-5) var(--sp-7);
  max-width: 1440px;
  margin: 0 auto;
}

.page-head {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
  margin-bottom: var(--sp-4);
}
/* 概览页「导出云文档」的结果提示要单独占一行 */
.page-head .meta-line { flex-basis: 100%; }

.page-title {
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  letter-spacing: -0.01em;
  margin: 0;
}

.page-desc {
  color: var(--text-2);
  font-size: var(--fs-sm);
  margin: 0;
  flex: 1;
  min-width: 220px;
}

/* ---------------- 按钮：唯一标准样式 ---------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--sp-2);
  height: var(--ctl-h);
  padding: 0 var(--sp-4);
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  cursor: pointer;
  font-family: inherit;
  font-size: var(--fs-base);
  font-weight: var(--fw-medium);
  color: var(--text);
  line-height: 1;
  white-space: nowrap;
  transition: background var(--dur), border-color var(--dur), color var(--dur);
}

.btn:hover {
  border-color: var(--border-strong);
  background: var(--surface-2);
}

.btn-primary {
  background: var(--accent);
  border-color: transparent;
  color: var(--text-on-accent);
}

.btn-primary:hover {
  background: var(--accent);
  border-color: transparent;
  color: var(--text-on-accent);
  filter: brightness(1.08);
}

.btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.btn:active,
.bc-btn:active {
  transform: translateY(1px);
}

.meta-line {
  color: var(--text-2);
  font-size: var(--fs-xs);
  margin: 0 0 var(--sp-3);
}

/* ---------------- KPI ---------------- */
.kpi-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
}

.kpi-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-4);
  position: relative;
  overflow: hidden;
}

/* KPI 四色轮转：多巴胺主色按卡片顺序铺开 */
.kpi-card::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background: var(--hue-1);
}

.kpi-card:nth-child(4n + 1) { background: var(--hue-1-bg); }
.kpi-card:nth-child(4n + 2) { background: var(--hue-2-bg); }
.kpi-card:nth-child(4n + 3) { background: var(--hue-3-bg); }
.kpi-card:nth-child(4n + 4) { background: var(--hue-4-bg); }

.kpi-card:nth-child(4n + 1)::before { background: var(--hue-1); }
.kpi-card:nth-child(4n + 2)::before { background: var(--hue-2); }
.kpi-card:nth-child(4n + 3)::before { background: var(--hue-3); }
.kpi-card:nth-child(4n + 4)::before { background: var(--hue-4); }

.kpi-card:nth-child(4n + 1) .kpi-value { color: var(--hue-1-fg); }
.kpi-card:nth-child(4n + 2) .kpi-value { color: var(--hue-2-fg); }
.kpi-card:nth-child(4n + 3) .kpi-value { color: var(--hue-3-fg); }
.kpi-card:nth-child(4n + 4) .kpi-value { color: var(--hue-4-fg); }

.kpi-label {
  color: var(--text-2);
  font-size: var(--fs-xs);
  margin-bottom: var(--sp-1);
}

.kpi-value {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  font-family: var(--mono);
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
}

.kpi-sub {
  color: var(--text-3);
  font-size: var(--fs-xs);
  margin-top: var(--sp-1);
}

/* ---------------- 卡片 ---------------- */
.card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-4);
  margin-bottom: var(--sp-4);
}

.card-title {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  margin: 0 0 var(--sp-1);
}

.card-sub {
  color: var(--text-2);
  font-size: var(--fs-xs);
  margin: 0 0 var(--sp-3);
}

.section-title {
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  margin: var(--sp-5) 0 var(--sp-3);
  letter-spacing: -0.01em;
  padding-left: var(--sp-3);
  border-left: 4px solid var(--dp-violet);
}

/* ---------------- 表格 ---------------- */
.data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-base);
}

.data-table th {
  background: var(--surface-3);
  color: var(--text-2);
  font-weight: var(--fw-bold);
  text-align: left;
  font-size: var(--fs-xs);
  letter-spacing: 0.05em;
  padding: var(--sp-2) var(--sp-3);
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
}

.data-table td {
  padding: var(--sp-2) var(--sp-3);
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
}

/* 整行悬停只给真正的数据表用；时段矩阵是网格，它的悬停/选中由格子自己决定，
   否则整行灰底会盖掉已选中的格子（看起来像"选了还是白的"） */
.data-table:not(.schedule-matrix) tbody tr:hover td {
  background: var(--n-2);
}

.data-table .num {
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
}

.strong {
  font-weight: var(--fw-bold);
}

.delta-up {
  color: var(--ok);
}

.delta-down {
  color: var(--danger);
}

/* ---------------- 进度条 ---------------- */
.progress-wrap {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  min-width: 110px;
}

.progress-track {
  flex: 1;
  height: 6px;
  border-radius: var(--r-pill);
  background: var(--surface-3);
  overflow: hidden;
}

.progress-bar {
  height: 100%;
  border-radius: var(--r-pill);
  background: var(--accent);
}

.progress-text {
  font-size: 12px;
  color: var(--text-2);
  font-family: var(--mono);
  min-width: 42px;
  text-align: right;
}

/* ---------------- 图表 ---------------- */
.chart-wrap {
  position: relative;
}
.chart-box {
  position: relative;
}

.chart-svg {
  display: block;
  width: 100%;
  height: auto;
}

.chart-tip {
  position: absolute;
  pointer-events: none;
  background: var(--chrome-bg);
  color: var(--chrome-fg);
  font-size: 12px;
  border-radius: 8px;
  padding: 8px 12px;
  box-shadow: 0 6px 18px rgba(17, 20, 24, 0.35);
  white-space: nowrap;
  z-index: 10;
  display: none;
}

.chart-tip b {
  color: var(--surface);
}

.chart-legend {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin: 12px 0 4px;
}

.chip {
  border: 1px solid var(--border);
  background: var(--surface-2);
  color: var(--text-2);
  border-radius: 999px;
  padding: 4px 13px;
  font-size: 12px;
  cursor: pointer;
  transition: all 0.15s;
}

.chip:hover {
  border-color: var(--blue);
  color: var(--blue);
}

.chip.active {
  background: var(--accent);
  border-color: transparent;
  color: var(--text-on-accent);
}

.toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 16px;
  margin: 12px 0 16px;
  padding: 12px 14px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.tb-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
}
.tb-label {
  color: var(--muted);
  white-space: nowrap;
}
.tb-item select {
  padding: 5px 8px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--surface);
  font-size: 13px;
}
.toolbar .chart-legend {
  margin: 0;
}
.row-total td {
  font-weight: 600;
  background: var(--surface-2);
}
.row-link {
  cursor: pointer;
}
.row-link:hover td {
  background: var(--surface-2);
}
.date-bar {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 8px 12px;
  flex-wrap: wrap;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 8px 12px;
}
.date-bar .chart-legend {
  margin: 0;
}
.chip-lg {
  padding: 8px 24px;
  font-size: 14px;
  border-radius: 999px;
}
.product-chips {
  margin: 0;
}

/* ---- 日期范围选择器（巨量风格） ---- */
.drp {
  position: relative;
}
.drp-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--text);
  border-radius: 8px;
  padding: 7px 14px;
  font-size: 13px;
  cursor: pointer;
  transition: all 0.15s;
  font-family: inherit;
}
.drp-btn:hover {
  border-color: var(--blue);
  color: var(--blue);
}
.drp-arrow {
  color: var(--muted);
  font-size: 11px;
}
.drp-panel {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  z-index: 50;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 12px;
  box-shadow: 0 8px 28px rgba(17, 20, 24, 0.14);
  width: 340px;
  padding: 14px;
}
.drp-presets {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 12px;
}
.drp-preset {
  border: 1px solid var(--border);
  background: var(--surface-2);
  color: var(--text-2);
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 12px;
  cursor: pointer;
  transition: all 0.15s;
  font-family: inherit;
}
.drp-preset:hover {
  border-color: var(--blue);
  color: var(--blue);
}
.drp-cal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.drp-cal-title {
  font-size: 14px;
  font-weight: 600;
}
.drp-cal-nav {
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 15px;
  color: var(--muted);
  padding: 2px 8px;
  border-radius: 6px;
}
.drp-cal-nav:hover {
  background: var(--blue-soft);
  color: var(--blue);
}
.drp-week {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  margin-bottom: 4px;
}
.drp-week span {
  text-align: center;
  font-size: 12px;
  color: var(--muted);
  padding: 2px 0;
}
.drp-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
}
.drp-day {
  text-align: center;
  font-size: 13px;
  padding: 5px 0;
  border-radius: 7px;
  cursor: pointer;
  color: var(--text);
  transition: background 0.12s;
}
.drp-day:hover {
  background: var(--blue-soft);
}
.drp-day.disabled {
  color: var(--text-3);
  cursor: not-allowed;
  background: transparent;
}
.drp-day.in-range {
  background: var(--blue-soft);
  color: var(--blue);
}
.drp-day.start,
.drp-day.end {
  background: var(--blue);
  color: var(--surface);
}
.drp-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 12px;
}
.drp-hint {
  margin-top: 10px;
  font-size: 12px;
  color: var(--blue);
  background: var(--blue-soft);
  border-radius: 6px;
  padding: 5px 8px;
}

/* ---- 可视化区块 ---- */
.viz-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 16px;
  margin-top: 12px;
}
.viz-item {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 14px;
  background: var(--surface);
}
.viz-title {
  margin: 0 0 10px;
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
}
.viz-legend {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--text-2);
  margin-right: 14px;
}
.viz-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  display: inline-block;
  flex: 0 0 auto;
}
.viz-legend-list {
  margin-top: 10px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.viz-legend-row {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--text);
}

/* ---- 策略组账户详情 ---- */
.group-top {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  margin-bottom: 12px;
}
.group-title .section-title {
  margin: 0 0 2px;
}
.group-sub {
  margin: 0;
  font-size: 12px;
  color: var(--muted);
}
.group-kpi {
  margin: 4px 0 14px;
}
.usage-bar {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 120px;
}
.usage-track {
  flex: 1;
  height: 6px;
  background: var(--surface-2);
  border-radius: 3px;
  overflow: hidden;
}
.usage-fill {
  height: 100%;
  background: var(--blue);
  border-radius: 3px;
  transition: width 0.2s;
}
.usage-fill.danger {
  background: var(--danger);
}
.usage-text {
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}
.quota-group {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 150px;
}
.donut-grid {
  display: flex;
  align-items: center;
  gap: 32px;
  flex-wrap: wrap;
}
.donut-grid svg {
  max-width: 280px;
  height: auto;
}
.prod-brief {
  flex: 1;
  min-width: 340px;
}
.prod-brief-title {
  font-size: 14px;
  font-weight: 600;
  margin-bottom: 8px;
  color: var(--text);
}
.prod-brief-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 7px 0;
  border-bottom: 1px dashed var(--surface-2);
}
.prod-brief-name {
  font-weight: 600;
  min-width: 52px;
  font-size: 13px;
  color: var(--text);
}
.prod-brief-text {
  font-size: 12px;
  color: var(--text-2);
}
.prod-brief-note {
  margin: 10px 0 0;
  font-size: 12px;
  color: var(--muted);
}

.chart-note {
  color: var(--muted);
  font-size: 12px;
  margin: 10px 0 0;
}

/* ---------------- 产品卡片 ---------------- */
.product-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(330px, 1fr));
  gap: 16px;
  margin-bottom: 18px;
}

.product-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 16px 18px;
  box-shadow: 0 1px 3px rgba(17, 20, 24, 0.05);
}

.product-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
}

.product-name {
  font-size: 15px;
  font-weight: 700;
}

.badge {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 12px;
  background: var(--surface-2);
  color: var(--muted);
}

.badge-blue {
  background: var(--blue-soft);
  color: var(--blue);
}

.badge-warn {
  background: var(--warn-bg);
  color: var(--warn);
}

.product-kpis {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 8px 14px;
  margin-bottom: 10px;
}

.mini-kpi {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  padding: 6px 0;
  border-bottom: 1px dashed var(--border);
}

.mini-kpi .k {
  color: var(--muted);
}

.mini-kpi .v {
  font-family: var(--mono);
  font-weight: 600;
}

.spark {
  width: 100%;
  height: 44px;
  display: block;
  margin-top: 4px;
}

/* ---------------- 占位页 ---------------- */
.placeholder-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 16px;
}

.placeholder-card {
  background: var(--card);
  border: 1px dashed var(--border-strong);
  border-radius: 12px;
  padding: 20px;
}

.placeholder-card .p-icon {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  background: var(--blue-soft);
  color: var(--blue);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  margin-bottom: 10px;
}

.placeholder-card .p-name {
  font-weight: 600;
  margin-bottom: 6px;
}

.placeholder-card .p-desc {
  color: var(--muted);
  font-size: 12px;
  line-height: 1.7;
}

.empty-note {
  color: var(--muted);
  font-size: 13px;
  line-height: 1.9;
}

/* ---------------- 智能创建（快速搭建） ---------------- */
.jz-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}

.jz-label {
  color: var(--muted);
  font-size: 13px;
  white-space: nowrap;
}

.jz-input {
  flex: 1;
  min-width: 200px;
  padding: 7px 10px;
  border: 1px solid var(--border);
  border-radius: 6px;
  font-size: 13px;
  font-family: var(--mono);
}

.jz-select {
  flex: 1;
  min-width: 180px;
  padding: 7px 10px;
  border: 1px solid var(--border);
  border-radius: 6px;
  font-size: 13px;
  background: var(--surface);
}

.jz-btns {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin: 8px 0 6px;
}

.jz-preview {
  margin: 12px 0 0;
  padding: 12px;
  background: var(--chrome-bg);
  color: var(--chrome-fg-2);
  border-radius: 8px;
  font-size: 12px;
  line-height: 1.55;
  max-height: 260px;
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-all;
}

.jz-log {
  margin: 0;
  padding: 12px;
  background: var(--chrome-bg);
  color: var(--chrome-fg-2);
  border-radius: 8px;
  font-size: 12px;
  line-height: 1.6;
  max-height: 320px;
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-all;
}

.step-list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.step-item {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px dashed var(--border);
}

.step-item:last-child {
  border-bottom: none;
}

.step-dot {
  flex: 0 0 26px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: var(--surface-2);
  color: var(--muted);
  font-size: 13px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 1px;
}

.step-running .step-dot {
  background: var(--blue-soft);
  color: var(--blue);
  animation: pulse 1.2s ease-in-out infinite;
}

.step-done .step-dot {
  background: var(--ok-bg);
  color: var(--ok);
}

.step-failed .step-dot {
  background: var(--danger-bg);
  color: var(--danger);
}

.step-main {
  flex: 1;
  min-width: 0;
}

.step-title {
  font-weight: 600;
  font-size: 13px;
  margin-bottom: 3px;
}

.step-meta {
  color: var(--muted);
  font-size: 12px;
  line-height: 1.6;
  word-break: break-all;
}

@keyframes pulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.45;
  }
}

/* ---------------- 其它 ---------------- */
.msg {
  padding: 12px 14px;
  border-radius: 10px;
  font-size: 13px;
  margin: 12px 0;
}

.msg-err {
  background: var(--danger-bg);
  color: var(--danger);
}

.msg-ok {
  background: var(--ok-bg);
  color: var(--ok);
}

.msg-info {
  background: var(--surface-2);
  color: var(--text-2);
}

.muted {
  color: var(--muted);
}

/* ---------------- 达人看板 ---------------- */
.daren-box .toolbar {
  flex-wrap: wrap;
  gap: 8px;
}
.pull-box {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.daren-task {
  margin: 10px 0 16px 18px;
}
.daren-task-name {
  display: flex;
  align-items: center;
  gap: 8px;
  font-weight: 600;
  font-size: 14px;
  color: var(--text);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-left: 4px solid var(--text-2);
  border-radius: 8px;
  padding: 8px 12px;
  margin-bottom: 10px;
}
.daren-block {
  margin: 12px 0 16px 14px;
  padding-left: 12px;
  border-left: 3px solid var(--border-strong);
}
.daren-block-title {
  display: flex;
  align-items: center;
  margin-bottom: 8px;
  line-height: 1.6;
}
.daren-name {
  font-size: 16px;
  font-weight: 700;
  color: var(--text);
}
.daren-name::before {
  content: '';
  display: inline-block;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--text-2);
  margin-right: 8px;
}
.daren-meta {
  margin-left: 10px;
  color: var(--text-3);
  font-size: 12px;
  font-weight: normal;
}
.badge {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 12px;
  line-height: 1.7;
  background: var(--surface-2);
  border: 1px solid var(--border);
  color: var(--text-2);
}
.badge-high {
  background: var(--ok-bg);
  border-color: var(--ok-bd);
  color: var(--ok);
}
.badge-muted {
  background: var(--surface-2);
  border-color: var(--border);
  color: var(--text-3);
}
.badge-lv {
  background: var(--surface-2);
  border-color: var(--border-strong);
  color: var(--text-2);
  margin-left: 8px;
}
.badge-count {
  font-weight: normal;
  color: var(--text-3);
}
.badge-create {
  background: var(--surface-2);
  border-color: var(--border-strong);
  color: var(--text-2);
  font-family: var(--mono);
}
.badge-danger {
  background: var(--danger-bg);
  border-color: var(--danger-bd);
  color: var(--danger);
}
.filter-input {
  padding: 7px 12px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--surface);
  font-size: 13px;
  min-width: 220px;
  color: var(--text);
}
.filter-input:focus {
  outline: none;
  border-color: var(--blue);
}
.thr-input {
  min-width: 110px;
  width: 110px;
}
.days-input {
  min-width: 80px;
  width: 80px;
}
.daren-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  margin: 2px 0 10px;
  font-size: 13px;
  color: var(--text-2);
}
.daren-stats .stat-warn {
  color: var(--warn);
  font-weight: 600;
}
.material-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  margin: 6px 0;
  border: 1px solid var(--surface-2);
  border-radius: 10px;
  background: var(--surface);
}
.material-row:hover {
  border-color: var(--border-strong);
  background: var(--surface);
}
.material-main {
  flex: 1;
  min-width: 0;
}
.material-title {
  font-size: 13px;
  color: var(--text-2);
  line-height: 1.5;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.material-meta {
  font-size: 12px;
  color: var(--text-3);
  margin-top: 2px;
  font-family: var(--mono);
}
.material-right {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}
.material-cost {
  text-align: right;
}
.cost-label {
  font-size: 11px;
  color: var(--text-3);
}
.cost-value {
  font-weight: 700;
  font-size: 14px;
  color: var(--text);
  font-family: var(--mono);
}
.btn-link {
  padding: 5px 12px;
  border: 1px solid var(--blue);
  border-radius: 8px;
  color: var(--blue);
  font-size: 12px;
  text-decoration: none;
  background: var(--surface);
  white-space: nowrap;
}
.btn-link:hover {
  background: var(--surface-2);
}

.toast {
  position: fixed;
  left: 50%;
  bottom: 34px;
  transform: translateX(-50%);
  background: var(--chrome-bg);
  color: var(--chrome-fg);
  border-radius: 10px;
  padding: 10px 20px;
  font-size: 13px;
  box-shadow: 0 8px 24px rgba(17, 20, 24, 0.35);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s;
  z-index: 99;
}

.toast.show {
  opacity: 1;
}

.loading {
  padding: 40px 0;
  text-align: center;
  color: var(--muted);
}

.spinner {
  display: inline-block;
  width: 22px;
  height: 22px;
  border: 3px solid var(--border-strong);
  border-top-color: var(--blue);
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
  vertical-align: middle;
  margin-right: 8px;
}

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

@media (max-width: 900px) {
  .topbar {
    gap: 12px;
    padding: 0 12px;
    flex-wrap: wrap;
    height: auto;
    padding-top: 8px;
  }

  .topnav {
    order: 3;
    width: 100%;
    height: 44px;
  }

  .topbar-right {
    margin-left: auto;
  }

  #main {
    padding: 16px;
  }
}

/* ============ 快速搭建（鲸准 页签B+C） ============ */
.bc {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.bc-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--sp-4);
  flex-wrap: wrap;
}

.bc-title {
  margin: 0 0 var(--sp-1);
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  letter-spacing: -0.01em;
}

.bc-desc {
  margin: 0;
  color: var(--text-2);
  font-size: var(--fs-sm);
  max-width: 760px;
  line-height: var(--lh-base);
}

.bc-account {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-3);
  flex-wrap: wrap;
}

.bc-account-label {
  font-size: var(--fs-xs);
  color: var(--text-2);
}

.bc-toolbar {
  display: flex;
  align-items: center;
  gap: var(--sp-1);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-1);
}

.bc-spacer {
  flex: 1;
}

.bc-tab {
  border: none;
  background: transparent;
  color: var(--text-2);
  font-family: inherit;
  font-size: var(--fs-base);
  padding: 0 var(--sp-4);
  height: var(--ctl-h);
  border-radius: var(--r-sm);
  cursor: pointer;
  font-weight: var(--fw-medium);
  transition: background var(--dur), color var(--dur);
}

.bc-tab:hover {
  background: var(--surface-2);
  color: var(--text);
}

.bc-tab.on {
  background: var(--accent);
  color: var(--text-on-accent);
  font-weight: var(--fw-bold);
}

/* 四个页签各自一个色相：导航本身就有颜色 */
.bc-tab[data-tab="dashboard"].on {
  background: var(--tab-dashboard);
}
.bc-tab[data-tab="manual"].on {
  background: var(--tab-manual);
}
.bc-tab[data-tab="auto"].on {
  background: var(--tab-auto);
}
.bc-tab[data-tab="records"].on {
  background: var(--tab-records);
}

.bc-layout {
  display: grid;
  grid-template-columns: 340px 1fr 380px;
  gap: var(--sp-3);
  align-items: start;
}

.bc-layout-c {
  grid-template-columns: 1fr;
}

.bc-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-4);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

.bc-card-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

.bc-card-head h3 {
  margin: 0;
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
}

.bc-hint {
  color: var(--text-2);
  font-size: var(--fs-xs);
}

.bc-row {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

.bc-label {
  font-size: var(--fs-xs);
  color: var(--text-2);
  white-space: nowrap;
}

/* 标签列定宽：动作 / 回读 / 出价 这些行才能左边界对齐 */
.bc-label,
.bc .bc-label {
  flex: 0 0 auto;
  min-width: var(--label-w);
}

.bc-input,
.bc-select,
.bc-textarea {
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 0 var(--sp-3);
  height: var(--ctl-h);
  font-size: var(--fs-base);
  font-family: inherit;
  color: var(--text);
  background: var(--surface);
  min-width: 0;
  transition: border-color var(--dur), box-shadow var(--dur);
}

.bc-input:focus,
.bc-select:focus,
.bc-textarea:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--focus-ring);
}

.bc-input {
  flex: 0 1 auto;
  width: var(--field-w-lg);
  max-width: 100%;
  min-width: 140px;
}

.bc-input-sm {
  width: 84px;
  min-width: 84px;
}

.bc-select {
  flex: 0 0 auto;
  width: var(--field-w);
  max-width: 100%;
  min-width: 132px;
}

.bc-textarea {
  width: 100%;
  height: auto;
  min-height: 64px;
  padding: var(--sp-2) var(--sp-3);
  resize: vertical;
  line-height: var(--lh-base);
  font-family: var(--mono);
}

.bc-mono {
  font-family: var(--mono);
  font-size: var(--fs-xs);
  font-variant-numeric: tabular-nums;
}

.bc-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--sp-2);
  height: var(--ctl-h);
  padding: 0 var(--sp-4);
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  color: var(--text);
  font-family: inherit;
  font-size: var(--fs-base);
  font-weight: var(--fw-medium);
  line-height: 1;
  cursor: pointer;
  white-space: nowrap;
  transition: background var(--dur), border-color var(--dur), color var(--dur);
}

.bc-btn:hover {
  border-color: var(--border-strong);
  background: var(--surface-2);
}

.bc-btn-primary {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--text-on-accent);
}

.bc-btn-primary:hover {
  background: var(--accent-hover);
  border-color: var(--accent-hover);
  color: var(--text-on-accent);
}

.bc-btn-danger {
  background: var(--danger);
  border-color: var(--danger);
  color: var(--n-0);
}

.bc-btn-danger:hover {
  background: var(--danger);
  border-color: var(--danger);
  color: var(--n-0);
  opacity: 0.88;
}

.bc-btn-danger-soft {
  color: var(--danger);
  border-color: var(--danger-bd);
  background: var(--surface);
}

.bc-btn-ghost {
  border-color: transparent;
  background: transparent;
}

.bc-btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.bc-pill {
  display: inline-block;
  padding: 2px var(--sp-2);
  border-radius: var(--r-sm);
  font-size: var(--fs-xs);
  background: var(--surface-2);
  color: var(--text-2);
  white-space: nowrap;
}

.bc-pill-ok {
  background: var(--ok-bg);
  color: var(--ok);
}

.bc-pill-warn {
  background: var(--warn-bg);
  color: var(--warn);
}

.bc-pill-blue {
  background: var(--info-bg);
  color: var(--info);
}

.bc-pill-danger {
  background: var(--danger-bg);
  color: var(--danger);
}

/* 多彩标签：给分类/标签用，不承载状态语义 */
.bc-pill-violet {
  background: var(--hue-1-bg);
  color: var(--hue-1-fg);
}
.bc-pill-cyan {
  background: var(--hue-2-bg);
  color: var(--hue-2-fg);
}
.bc-pill-amber {
  background: var(--hue-3-bg);
  color: var(--hue-3-fg);
}
.bc-pill-pink {
  background: var(--hue-4-bg);
  color: var(--hue-4-fg);
}

.bc-meta {
  margin: 0;
  color: var(--text-2);
  font-size: var(--fs-xs);
  line-height: var(--lh-base);
}

.bc-empty {
  color: var(--text-2);
  font-size: var(--fs-sm);
  padding: var(--sp-5) var(--sp-3);
  text-align: center;
}

.bc-seg {
  display: inline-flex;
  background: var(--surface-2);
  border-radius: var(--r);
  padding: 3px;
  gap: 2px;
  align-self: flex-start;
}

.bc-seg-btn {
  border: none;
  background: transparent;
  padding: 0 var(--sp-4);
  height: 34px;
  border-radius: var(--r-sm);
  cursor: pointer;
  color: var(--text-2);
  font-family: inherit;
  font-size: var(--fs-base);
  font-weight: var(--fw-medium);
  transition: background var(--dur), color var(--dur);
}

.bc-seg-btn:hover {
  background: var(--surface-2);
  color: var(--text);
}

.bc-seg-btn.on {
  background: var(--accent);
  color: var(--text-on-accent);
  font-weight: var(--fw-bold);
}

/* ==================================================================
   每个一级页面的点缀色
   ------------------------------------------------------------------
   同一套中性面（暖白纸面 + 近黑），只换一处点缀色，让五个页面各有身份，
   又不至于各说各话。点缀只出现在：顶栏当前项下划线、页标题标记、
   区块标题标记、页内选中态。
   ================================================================== */
body[data-page="overview"] { --page-accent: #1f6c9f; --page-accent-bg: #e1f3fe; }
body[data-page="daren"]    { --page-accent: #956400; --page-accent-bg: #fbf3db; }
body[data-page="build"]    { --page-accent: #346538; --page-accent-bg: #edf3ec; }
body[data-page="monitor"]  { --page-accent: #5b4b8a; --page-accent-bg: #efeaf7; }
body[data-page="control"]  { --page-accent: #9f2f2d; --page-accent-bg: #fdebec; }

/* 顶栏当前项下划线跟页面点缀色走 */
.nav-item.active::after {
  background: var(--page-accent, #111111);
}

/* 页标题：先短横线再标题，颜色即页面身份 */
.page-title,
.bc-title {
  padding-left: var(--sp-4);
  border-left: 3px solid var(--page-accent, #111111);
}

/* 页内选中态也用页面点缀色，跟中性面拉开但没有大面积色块 */
.bc-seg-btn.on {
  background: var(--page-accent, var(--accent));
}

.bc-form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: var(--sp-3);
}

.bc-form-grid label {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  font-size: var(--fs-xs);
  color: var(--text-2);
}

.bc-form-grid label > .bc-input,
.bc-form-grid label > .bc-select {
  width: 100%;
  flex: initial;
  min-width: 0;
}

.bc-check {
  display: flex !important;
  flex-direction: row !important;
  align-items: center;
  gap: var(--sp-2);
  padding-top: 22px;
  cursor: pointer;
}

.bc-check input {
  accent-color: var(--accent);
  width: 15px;
  height: 15px;
}

.bc-fixed {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-1) var(--sp-3);
  font-size: var(--fs-sm);
  color: var(--text-2);
  min-height: 21px;
}

.bc-status-wrap {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
}

.bc-status-seg {
  display: inline-flex;
  background: var(--surface-2);
  border-radius: var(--r);
  padding: 2px;
  gap: 2px;
}

.bc-status-seg button {
  border: none;
  background: transparent;
  color: var(--text-2);
  font-family: inherit;
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  padding: 0 var(--sp-3);
  height: 26px;
  border-radius: var(--r-sm);
  cursor: pointer;
}

.bc-status-seg button.on {
  background: var(--accent);
  color: var(--text-on-accent);
  font-weight: var(--fw-bold);
}

/* ---------------- 调控页 UI 优化（bc 体系扩展） ---------------- */
.bc {
  /* 调控页继承全局令牌；这里只补一个自用别名 */
  --accent-soft: var(--accent-quiet);
}
.bc .bc-card {
  border: 1px solid var(--border);
}
.bc .bc-card-head {
  padding: 0 0 var(--sp-3);
  background: transparent;
  border-bottom: 1px solid var(--border);
  border-radius: 0;
}
.bc .bc-card-head h3 {
  color: var(--text);
  font-size: var(--fs-md);
}
.bc .bc-card-head .bc-hint {
  color: var(--text-2);
}
.bc .bc-title {
  background: none;
  -webkit-background-clip: initial;
  background-clip: initial;
  color: var(--text);
}
.rg-collapse-btn {
  margin-left: auto;
  cursor: pointer;
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--text-2);
  border-radius: var(--r-sm);
  padding: 2px var(--sp-2);
  font-family: inherit;
  font-size: var(--fs-xs);
}
.rg-collapse-btn:hover {
  border-color: var(--border-strong);
  color: var(--text);
  background: var(--surface-2);
}
.bc-btn-busy {
  position: relative;
  color: transparent !important;
  pointer-events: none;
  opacity: 0.85;
}
.bc-btn-busy::before {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 14px;
  height: 14px;
  margin: -7px 0 0 -7px;
  border: 2px solid var(--text-on-accent);
  border-top-color: transparent;
  border-radius: 50%;
  animation: rg-spin 0.8s linear infinite;
}
@keyframes rg-spin {
  to { transform: rotate(360deg); }
}
.bc-btn:disabled {
  cursor: not-allowed;
}
.bc-row {
  gap: var(--sp-2);
  flex-wrap: wrap;
}
.bc-account {
  background: var(--accent-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
}

/* 控件统一：等高、圆角、聚焦高亮、不忽长忽短 */
.bc .bc-input,
.bc .bc-select,
.bc .bc-textarea {
  height: var(--ctl-h);
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  color: var(--text);
  font-size: var(--fs-sm);
  box-sizing: border-box;
  transition: border-color var(--dur), box-shadow var(--dur);
}
.bc .bc-input { min-width: 170px; padding: 0 var(--sp-3); }
.bc .bc-input-sm { min-width: 110px; }
.bc .bc-select { min-width: 150px; padding: 0 var(--sp-2); }
.bc .bc-textarea {
  width: 100%;
  height: auto;
  min-height: 64px;
  padding: var(--sp-2) var(--sp-3);
  line-height: var(--lh-base);
  resize: vertical;
}
.bc .bc-input:focus,
.bc .bc-select:focus,
.bc .bc-textarea:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--focus-ring);
}
.bc .bc-label {
  flex: 0 0 auto;
  min-width: var(--label-w);
  color: var(--text-2);
  font-weight: var(--fw-medium);
}

/* 按钮主色/选中态/置灰统一 */
.bc .bc-btn {
  height: var(--ctl-h);
  border-radius: var(--r);
  font-size: var(--fs-base);
  padding: 0 var(--sp-4);
}
.bc .bc-btn-primary {
  background: var(--accent);
  border: 1px solid transparent;
  color: var(--text-on-accent);
  box-shadow: none;
}
.bc .bc-btn-primary:hover {
  background: var(--accent);
  border-color: transparent;
  color: var(--text-on-accent);
  filter: brightness(1.08);
}
.bc .bc-btn-ghost.on,
.bc .bc-btn.on {
  background: var(--accent) !important;
  color: var(--text-on-accent) !important;
  border-color: transparent !important;
  font-weight: var(--fw-bold);
}
.bc .bc-btn:disabled {
  opacity: 0.45;
}

/* 滚动区滚动条美化 */
.rg-scroll::-webkit-scrollbar { width: 8px; height: 8px; }
.rg-scroll::-webkit-scrollbar-thumb {
  background: var(--border-strong);
  border-radius: var(--r-sm);
}
.rg-scroll::-webkit-scrollbar-thumb:hover { background: var(--text-3); }
.rg-scroll::-webkit-scrollbar-track { background: transparent; }

/* 统计条 + 筛选面板（② 选择账户与项目） */
.rg-stats {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  padding: var(--sp-2) 0;
}
.rg-stats .bc-pill {
  background: var(--surface-2);
  color: var(--text);
  font-weight: var(--fw-medium);
  font-variant-numeric: tabular-nums;
}
.rg-stats .bc-pill.rg-stale {
  background: var(--warn-bg);
  color: var(--warn);
}
.rg-stale-card {
  border: 1px solid var(--warn-bd) !important;
  background: var(--surface);
}
.rg-filter-panel {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--sp-2);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-2);
  margin-bottom: var(--sp-2);
}
.rg-filter-panel .bc-input,
.rg-filter-panel .bc-select {
  height: var(--ctl-h);
}
.rg-filter-panel .bc-input:first-child {
  flex: 1 1 190px;
}
.rg-filter-panel select {
  flex: 0 0 132px;
}
.rg-filter-panel input[type='date'] {
  flex: 0 0 150px;
}

.bc-inline {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}

.bc-cnt-max,
.as-cnt-max {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
}

/* 单广告素材数：固定/随机 下拉 + 左值(+右值)，紧凑排布不串列 */
.bc .cnt-cell {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  min-width: 0;
  flex-wrap: nowrap;
}

.bc .cnt-cell > .bc-select {
  min-width: 0;
  width: 84px;
  flex: 0 0 auto;
  padding: 0 var(--sp-1);
}

.bc .cnt-cell > .bc-input {
  flex: 1 1 56px;
  min-width: 46px;
  padding: 0 var(--sp-2);
}

.bc .cnt-cell > .bc-cnt-max,
.bc .cnt-cell > .as-cnt-max {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  flex: 1 1 64px;
  min-width: 0;
}

.bc .cnt-cell > .bc-cnt-max > .bc-input,
.bc .cnt-cell > .as-cnt-max > .bc-input {
  flex: 1 1 46px;
  min-width: 40px;
  padding: 0 var(--sp-2);
}

.bc-strategy-list {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.bc-strategy-card {
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-3);
  background: var(--surface);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.bc-strategy-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

.bc-two {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-3);
}

.bc-ta-label {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  font-size: var(--fs-xs);
  color: var(--text-2);
}

.bc-cnt {
  font-size: var(--fs-xs);
  color: var(--text-2);
  background: var(--surface-2);
  padding: 1px var(--sp-2);
  border-radius: var(--r-sm);
  font-family: var(--mono);
  align-self: flex-start;
}

.bc-adv {
  font-size: var(--fs-xs);
  color: var(--text-2);
}

.bc-adv summary {
  cursor: pointer;
  user-select: none;
}

.bc-adv textarea {
  margin-top: var(--sp-2);
}

.bc-sub {
  border-top: 1px dashed var(--border);
  padding-top: var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.bc-run-area {
  display: flex;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

.bc-run-hint {
  color: var(--text-2);
  font-size: var(--fs-xs);
  border-left: 2px solid var(--border-strong);
  background: var(--surface-2);
  padding: var(--sp-2) var(--sp-3);
  border-radius: 0 var(--r) var(--r) 0;
}

.bc-result {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.bc-msg {
  padding: var(--sp-3);
  border-radius: var(--r);
  border: 1px solid transparent;
  font-size: var(--fs-sm);
  line-height: var(--lh-base);
}

.bc-msg-ok {
  background: var(--ok-bg);
  border-color: var(--ok-bd);
  color: var(--ok);
}

.bc-msg-err {
  background: var(--danger-bg);
  border-color: var(--danger-bd);
  color: var(--danger);
}

.bc-msg-warn {
  background: var(--warn-bg);
  border-color: var(--warn-bd);
  color: var(--warn);
}

.bc-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-base);
}

.bc-table th,
.bc-table td {
  border-bottom: 1px solid var(--border);
  padding: var(--sp-2) var(--sp-3);
  overflow-wrap: break-word;
}

.bc-table thead th {
  background: var(--surface-3);
  color: var(--text-2);
  font-weight: var(--fw-bold);
  text-align: left;
  font-size: var(--fs-sm);
  letter-spacing: 0.05em;
  white-space: nowrap;
}

.bc-table tbody tr:hover td {
  background: var(--n-2);
}

/* 表头吸顶 */
.bc-table-scroll .bc-table thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--surface-3);
}

/* ---- 宽表：一条记录只占一行，列宽固定，超长截断 ----
   依据 Ant Design 表格规范：「时间、状态、操作栏需保持词语完整不过行」 */
.bc-table-fixed {
  table-layout: fixed;
}

.bc-table-fixed th,
.bc-table-fixed td {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.bc-table-fixed td {
  height: var(--row-h);
}

/* 执行日志：ID / 时间 / 来源 / 动作 / 对象 / 结果 / 备注 */
.bc-table-log th:nth-child(1), .bc-table-log td:nth-child(1) { width: 64px; }
.bc-table-log th:nth-child(2), .bc-table-log td:nth-child(2) { width: 152px; }
.bc-table-log th:nth-child(3), .bc-table-log td:nth-child(3) { width: 104px; }
.bc-table-log th:nth-child(4), .bc-table-log td:nth-child(4) { width: 120px; }
.bc-table-log th:nth-child(5), .bc-table-log td:nth-child(5) { width: 280px; }
.bc-table-log th:nth-child(6), .bc-table-log td:nth-child(6) { width: 96px; }

/* 未起量候选：单元ID / 单元名 / 项目 / 账户 / 产品 / 状态 / 创建时间 */
.bc-table-units th:nth-child(1), .bc-table-units td:nth-child(1) { width: 136px; }
.bc-table-units th:nth-child(2), .bc-table-units td:nth-child(2) { width: 240px; }
.bc-table-units th:nth-child(3), .bc-table-units td:nth-child(3) { width: 220px; }
.bc-table-units th:nth-child(4), .bc-table-units td:nth-child(4) { width: 180px; }
.bc-table-units th:nth-child(5), .bc-table-units td:nth-child(5) { width: 110px; }
.bc-table-units th:nth-child(6), .bc-table-units td:nth-child(6) { width: 96px; }

/* 数字/ID 列：等宽 + 右对齐更整齐（对齐观感的关键） */
.bc-table td.bc-mono {
  font-variant-numeric: tabular-nums;
}

.bc-td-k {
  color: var(--text-2);
  width: 130px;
  white-space: nowrap;
}

.bc-loading {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  color: var(--text-2);
  font-size: var(--fs-sm);
  padding: var(--sp-4) 0;
}

.bc-spinner {
  width: 16px;
  height: 16px;
  border: 2px solid var(--border-strong);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
  display: inline-block;
}

.bc-modal {
  position: fixed;
  inset: 0;
  background: rgba(11, 13, 16, 0.55);
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: var(--sp-7) var(--sp-4);
  z-index: 200;
  overflow: auto;
}

.bc-modal-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  max-width: 820px;
  width: 100%;
  padding: var(--sp-5);
  position: relative;
  box-shadow: var(--shadow-pop);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

.bc-modal-close {
  position: absolute;
  right: var(--sp-3);
  top: var(--sp-2);
  border: none;
  background: transparent;
  font-size: var(--fs-xl);
  color: var(--text-3);
  cursor: pointer;
  line-height: 1;
}

.bc-modal-title {
  margin: 0;
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  padding-right: 28px;
}

.bc-modal-body {
  margin: 0;
  color: var(--text);
  line-height: var(--lh-base);
  white-space: pre-wrap;
}

.bc-modal-actions {
  display: flex;
  justify-content: flex-end;
  gap: var(--sp-2);
  margin-top: var(--sp-1);
}

.bc-acc-list,
.bc-std-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.bc-acc-row,
.bc-std-row {
  display: flex;
  align-items: center;
  gap: 10px;
  border: 1px solid var(--border);
  border-radius: 9px;
  padding: 7px 10px;
}

.bc-acc-main,
.bc-std-name {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.bc-acc-add,
.bc-std-add {
  border-top: 1px dashed var(--border);
  padding-top: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.bc-acc-add h4,
.bc-std-add h4 {
  margin: 0;
  font-size: 14px;
}

.bc-rec-filter {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
}

.bc-rec-filter .bc-input {
  min-width: 180px;
}

.bc-rec-list {
  max-height: 56vh;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.bc-rec-row {
  border: 1px solid var(--border);
  border-radius: 9px;
  padding: 6px 10px;
}

.bc-rec-row summary {
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  flex-wrap: wrap;
  list-style: none;
}

.bc-rec-row summary::-webkit-details-marker {
  display: none;
}

.bc-rec-name {
  font-weight: 600;
  min-width: 120px;
}

.bc-rec-detail {
  padding: 8px 4px 2px;
}

@media (max-width: 1180px) {
  .bc-layout {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 720px) {
  .bc-two {
    grid-template-columns: 1fr;
  }

  .bc-toolbar {
    flex-wrap: wrap;
  }

  .bc-account {
    width: 100%;
  }
}

/* ============ 快速搭建 · 执行记录（页签下方常驻） ============ */
.bc-record-bar {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-3) var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.bc-rec-head {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
}

.bc-rec-title {
  font-size: var(--fs-base);
  font-weight: 700;
}

.bc-rec-total {
  margin-left: auto;
  color: var(--text-2);
  font-size: var(--fs-xs);
  background: var(--surface-2);
  padding: var(--sp-1) var(--sp-3);
  border-radius: 999px;
}

.bc-record-bar .bc-rec-filter {
  border-top: 1px dashed var(--border);
  padding-top: var(--sp-2);
}

.bc-record-bar .bc-rec-list {
  max-height: 48vh;
}

.bc-record-bar .bc-rec-row {
  padding: 0;
  overflow: hidden;
}

.bc-rec-brief {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  width: 100%;
  border: none;
  background: transparent;
  padding: var(--sp-2) var(--sp-3);
  cursor: pointer;
  font: inherit;
  color: inherit;
  text-align: left;
  flex-wrap: wrap;
}

.bc-rec-brief:hover {
  background: var(--surface-2);
}

.bc-rec-time {
  color: var(--text-2);
  font-size: var(--fs-xs);
  width: 92px;
  flex: 0 0 auto;
  font-variant-numeric: tabular-nums;
}

.bc-rec-name {
  font-weight: 600;
  flex: 1;
  min-width: 130px;
}

.bc-rec-id {
  color: var(--text-2);
  font-size: var(--fs-xs);
  max-width: 38%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.bc-rec-count {
  color: var(--accent);
  font-size: var(--fs-xs);
  background: var(--surface-2);
  padding: var(--sp-1) var(--sp-3);
  border-radius: 999px;
  white-space: nowrap;
}

.bc-rec-arrow {
  color: var(--text-2);
  font-size: var(--fs-xs);
}

.bc-rec-row.bc-rec-open {
  border-color: var(--accent);
}

.bc-record-bar .bc-rec-detail {
  padding: var(--sp-3) var(--sp-3) var(--sp-3);
  border-top: 1px dashed var(--border);
  background: var(--surface);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

.bc-detail-sec {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.bc-detail-sec-title {
  font-size: var(--fs-sm);
  font-weight: 700;
  color: var(--navy-2);
  border-left: 3px solid var(--accent);
  padding-left: var(--sp-2);
}

.bc-idlist {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  max-height: 190px;
  overflow: auto;
  padding: var(--sp-1) 0;
}

.bc-idlist-inline {
  display: inline-flex;
  flex-wrap: wrap;
  gap: var(--sp-1);
  margin-top: var(--sp-1);
}

.bc-idchip {
  font-family: var(--mono);
  font-size: var(--fs-xs);
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
  color: var(--text-2);
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--r);
  white-space: nowrap;
}

.bc-kv td {
  vertical-align: top;
}

/* ============ 执行记录 v2 ============ */
.bc-rec-src {
  display: inline-flex;
  background: var(--surface-3);
  border-radius: var(--r);
  padding: var(--sp-1);
  gap: var(--sp-1);
}

.bc-rec-src button {
  border: none;
  background: transparent;
  color: var(--text-2);
  font-size: var(--fs-xs);
  font-weight: 600;
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r);
  cursor: pointer;
  white-space: nowrap;
}

.bc-rec-src button.on {
  background: var(--surface);
  color: var(--accent);
  box-shadow: 0 1px 3px rgba(17, 20, 24, 0.12);
}

.bc-detail-meta {
  color: var(--navy-2);
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-3);
  font-weight: 600;
}

/* ============ 执行记录 · 列表 / 详情小页 ============ */
.bc-record-bar .bc-rec-list {
  max-height: 62vh;
}

.bc-rec-page {
  border-top: 1px dashed var(--border);
  padding-top: var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

.bc-rec-page-top {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
  padding: var(--sp-1) 0;
}

.bc-rec-page-body {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-3) var(--sp-4);
  max-height: 62vh;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

.bc-rec-arrow {
  color: var(--accent);
  font-size: var(--fs-xs);
  font-weight: 600;
}

/* ============ 执行记录 · 紧凑化 + ID 逐行 ============ */
.bc-record-bar {
  padding: var(--sp-2) var(--sp-3);
  gap: var(--sp-2);
}

.bc-rec-head {
  gap: var(--sp-2);
}

.bc-record-bar .bc-meta {
  font-size: var(--fs-xs);
  line-height: 1.5;
}

.bc-record-bar .bc-rec-filter {
  padding-top: var(--sp-2);
}

.bc-record-bar .bc-select,
.bc-record-bar .bc-input {
  padding: var(--sp-2) var(--sp-3);
  font-size: var(--fs-xs);
}

.bc-record-bar .bc-btn {
  padding: var(--sp-2) var(--sp-3);
  font-size: var(--fs-xs);
}

.bc-record-bar .bc-rec-list {
  max-height: 46vh;
}

.bc-record-bar .bc-rec-row {
  padding: 0;
}

.bc-record-bar .bc-rec-brief {
  padding: var(--sp-2) var(--sp-2);
  gap: var(--sp-2);
}

.bc-rec-page-body {
  padding: var(--sp-3) var(--sp-3);
  max-height: 46vh;
  gap: var(--sp-3);
}

.bc-record-bar .bc-rec-brief {
  flex-wrap: nowrap;
  overflow: hidden;
  min-width: 0;
}

.bc-record-bar .bc-rec-row {
  display: flex;
  align-items: stretch;
  height: auto !important;
  min-height: 34px !important;
  overflow: hidden;
}

.bc-record-bar .bc-rec-row .bc-rec-brief {
  flex: 1 1 auto;
  height: auto;
  min-height: var(--ctl-h);
}

.bc-record-bar .bc-rec-brief > * {
  flex: 0 0 auto;
}

.bc-record-bar .bc-rec-name {
  flex: 0 1 auto;
  min-width: 0;
  max-width: 22ch;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.bc-record-bar .bc-rec-id {
  flex: 1 1 0;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: none;
}

.bc-rec-prod {
  flex: 0 0 auto;
  font-size: var(--fs-xs);
  color: var(--accent);
  background: var(--surface-2);
  border-radius: 999px;
  padding: var(--sp-1) var(--sp-2);
  white-space: nowrap;
}

.bc-record-bar .bc-rec-arrow {
  white-space: nowrap;
  flex: 0 0 auto;
}

.bc-record-bar .bc-rec-brief .bc-rec-arrow {
  width: auto;
  margin-left: 0;
}

.bc-record-bar .bc-rec-time {
  width: 78px;
  flex: 0 0 auto;
}

.bc-record-bar .bc-rec-list {
  max-height: 196px !important;
}

.bc-detail-sec {
  gap: var(--sp-1);
}

.bc-detail-sec-title {
  font-size: var(--fs-xs);
}

.bc-table td {
  padding: var(--sp-1) var(--sp-2);
}

.bc-td-k {
  width: 118px;
}

.bc-detail-meta {
  font-size: var(--fs-xs);
  padding: var(--sp-1) var(--sp-2);
}

.bc-idlines {
  display: flex;
  flex-direction: column;
  gap: 0;
  max-height: none;
}

.bc-id-line {
  font-family: var(--mono);
  font-size: var(--fs-xs);
  line-height: 1.55;
  padding: var(--sp-1) 0;
  border-bottom: 1px dotted var(--border);
}

.bc-id-line:last-child {
  border-bottom: none;
}

/* 账户/素材下拉块 */
.bc-id-details {
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  padding: var(--sp-2) var(--sp-3);
  font-size: var(--fs-xs);
}

.bc-id-details summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  cursor: pointer;
  list-style: none;
  user-select: none;
}

.bc-id-details summary::-webkit-details-marker {
  display: none;
}

.bc-id-details summary::before {
  content: "▸ ";
  color: var(--accent);
}

.bc-id-details[open] summary::before {
  content: "▾ ";
}

.bc-id-details .bc-idlines {
  max-height: 240px;
  overflow: auto;
  margin-top: var(--sp-2);
  padding-top: var(--sp-2);
  border-top: 1px dashed var(--border);
}

/* 账户/素材：与智能创建输入框一致的只读文本域 */
.bc-id-pair {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-3);
  align-items: start;
}

.bc-table-scroll {
  width: 100%;
  max-width: 100%;
  max-height: 60vh;
  overflow: auto;
  border: 1px solid var(--border);
  border-radius: var(--r);
}

.bc-table-scroll .bc-table th {
  position: sticky;
  top: 0;
  background: var(--surface-3);
  z-index: 1;
}

/* 总览的三线表：表头不加底色（要压过上面这条吸顶底色） */
.ov-scroll .ov-table thead th {
  background: transparent;
}

.bc-col-settings {
  font-size: var(--fs-xs);
  color: var(--text-2);
  border-top: 1px dashed var(--border);
  padding-top: var(--sp-2);
}

.bc-col-settings summary {
  cursor: pointer;
  user-select: none;
  color: var(--accent);
  font-weight: 600;
}

.bc-col-grid {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1) var(--sp-4);
  margin-top: var(--sp-2);
}

.bc-col-opt {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  color: var(--text);
  cursor: pointer;
}

.bc-col-opt input {
  accent-color: var(--accent);
}

.bc-col-row {
  display: inline-flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  min-width: 240px;
  flex: 0 1 30%;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-1) var(--sp-2);
  background: var(--surface);
}

.bc-col-btns {
  display: inline-flex;
  gap: var(--sp-1);
}

.bc-col-btn {
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--text-2);
  width: 24px;
  height: 22px;
  border-radius: var(--r);
  cursor: pointer;
  font-size: var(--fs-xs);
  line-height: 1;
}

.bc-col-btn:not(:disabled):hover {
  border-color: var(--accent);
  color: var(--accent);
}

.bc-col-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

/* ============ 素材看板（M）· B端表格与表单 ============ */
#bcPaneM .mb-form {
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

#bcPaneM .mb-product-bar {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
  margin-bottom: var(--sp-1);
}

#bcPaneM .mb-mode-bar {
  align-self: flex-start;
  margin-bottom: var(--sp-3);
}

#bcPaneM .mb-form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(160px, 220px));
  gap: var(--sp-3) var(--sp-3);
}

#bcPaneM .mb-field-wide {
  grid-column: span 2;
}

#bcPaneM .mb-range {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}

#bcPaneM .mb-range .bc-input {
  flex: 1;
  min-width: 0;
}

#bcPaneM .mb-field {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

#bcPaneM .mb-field label {
  font-size: var(--fs-xs);
  color: var(--text-2);
}

#bcPaneM .mb-form-actions {
  display: flex;
  gap: var(--sp-2);
  align-items: center;
}

#bcPaneM .bc-table-scroll.mb-scroll {
  border: 1px solid var(--border);
  border-radius: var(--r);
}

#bcPaneM .mb-table {
  border-collapse: separate;
  border-spacing: 0;
  min-width: max-content;
  table-layout: auto;
}

#bcPaneM .mb-table th.mb-th {
  background: var(--surface-2);
  font-weight: 700;
  color: var(--text);
  padding: 0;
  border-bottom: 2px solid var(--border-strong);
  white-space: nowrap;
}

#bcPaneM .mb-th .mb-th-label {
  display: inline-block;
  padding: var(--sp-3) var(--sp-3);
  padding-right: var(--sp-1);
}

#bcPaneM .mb-sort {
  border: none;
  background: transparent;
  color: var(--text-2);
  cursor: pointer;
  padding: 0 var(--sp-1);
  font-size: var(--fs-xs);
  line-height: 1;
  vertical-align: middle;
  width: 16px;
}

#bcPaneM .mb-sort:hover {
  color: var(--accent);
}

#bcPaneM .mb-sort.on {
  color: var(--accent);
  font-weight: 700;
}

#bcPaneM .mb-arrows {
  display: inline-flex;
  align-items: center;
  gap: 0;
  vertical-align: middle;
}

#bcPaneM .mb-th {
  cursor: grab;
}

#bcPaneM .mb-th.mb-dragging {
  opacity: 0.5;
  cursor: grabbing;
}

#bcPaneM .mb-th.mb-drop {
  background: var(--border-strong);
  box-shadow: inset 0 0 0 2px var(--accent);
}

#bcPaneM .mb-resizer {
  position: absolute;
  top: 0;
  right: -5px;
  bottom: 0;
  width: 9px;
  cursor: col-resize;
  background: transparent;
  user-select: none;
}

#bcPaneM .mb-resizer:hover,
#bcPaneM .mb-resizer:active {
  background: var(--focus-ring);
}

#bcPaneM .bc-card {
  overflow: hidden;
  max-width: 100%;
}

#mbResult {
  overflow: hidden;
  min-width: 0;
}

body.mb-resizing {
  cursor: col-resize !important;
  user-select: none;
}

#bcPaneM .mb-table td.mb-cell {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 240px;
  padding: var(--sp-2) var(--sp-3);
  line-height: 1.35;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
}

#bcPaneM .mb-table td.mb-id {
  max-width: none;
  min-width: 190px;
  font-family: var(--mono);
  font-size: var(--fs-xs);
}

#bcPaneM .mb-table td.mb-num {
  text-align: center;
  font-weight: 700;
  color: var(--navy-2);
  font-variant-numeric: tabular-nums;
}

#bcPaneM .mb-table .st-ok {
  color: var(--ok);
  font-weight: 600;
}

#bcPaneM .mb-table .st-err {
  color: var(--danger);
  font-weight: 600;
}

#bcPaneM .mb-table .st-mut {
  color: var(--text-3);
}

#bcPaneM .bc-table-scroll.mb-scroll tbody tr:hover td {
  background: var(--n-2);
}

#bcPaneM .mb-delta {
  display: inline-block;
  margin-left: 0;
  font-size: var(--fs-xs);
  font-weight: 600;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

#bcPaneM .mb-cell-val {
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

#bcPaneM .mb-delta.up {
  color: var(--ok);
}

#bcPaneM .mb-delta.down {
  color: var(--danger);
}

#bcPaneM .mb-result-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  flex-wrap: wrap;
  margin-top: var(--sp-2);
  padding-top: var(--sp-2);
  border-top: 1px dashed var(--border);
}

#bcPaneM .mb-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  margin-left: auto;
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
  color: var(--text-2);
  border-radius: 999px;
  padding: var(--sp-1) var(--sp-3);
  font-size: var(--fs-xs);
}

#bcPaneM .mb-delta-legend {
  display: inline-flex;
  gap: var(--sp-3);
  align-items: center;
  font-size: var(--fs-xs);
}

/* ============ 素材看板 · BI 风 KPI 与数字列 ============ */
#bcPaneM .bc-card {
  border-radius: var(--r);
  box-shadow: 0 1px 4px rgba(17, 20, 24, 0.06);
}

#bcPaneM .mb-kpis {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(172px, 1fr));
  gap: var(--sp-3);
}

#bcPaneM .mb-kpi {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-3) var(--sp-3);
  box-shadow: 0 1px 2px rgba(17, 20, 24, 0.04);
}

#bcPaneM .mb-kpi-ic {
  width: 34px;
  height: 34px;
  flex: 0 0 auto;
  border-radius: var(--r);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: var(--fs-md);
  background: var(--surface-2);
}

#bcPaneM .mb-kpi.up .mb-kpi-ic {
  background: var(--ok-bg);
}

#bcPaneM .mb-kpi.down .mb-kpi-ic {
  background: var(--danger-bg);
}

#bcPaneM .mb-kpi.ok .mb-kpi-ic {
  background: var(--surface-2);
}

#bcPaneM .mb-kpi.warn .mb-kpi-ic {
  background: var(--warn-bg);
}

#bcPaneM .mb-kpi-main {
  min-width: 0;
}

#bcPaneM .mb-kpi-label {
  font-size: var(--fs-xs);
  color: var(--text-2);
}

#bcPaneM .mb-kpi-val {
  font-size: var(--fs-lg);
  font-weight: 800;
  color: var(--navy-2);
  font-variant-numeric: tabular-nums;
  line-height: 1.25;
}

#bcPaneM .mb-kpi-sub {
  font-size: var(--fs-xs);
  color: var(--text-2);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#bcPaneM .mb-kpi.up .mb-kpi-sub {
  color: var(--ok);
}

#bcPaneM .mb-kpi.down .mb-kpi-sub {
  color: var(--danger);
}

#bcPaneM .mb-table td.mb-num {
  text-align: center;
}

#bcPaneM .mb-th-num {
  text-align: center;
  min-width: 150px;
}

#bcPaneM .mb-table td.mb-num {
  min-width: 150px;
}

#bcPaneM .mb-th-num .mb-th-label {
  text-align: center;
}

#bcPaneM .mb-th-num .mb-resizer {
  right: -5px;
}

#bcPaneM .mb-form-actions .bc-btn:not(.bc-btn-primary):not(.bc-btn-export) {
  background: var(--surface);
}

/* 表头筛选（飞书式） */
#bcPaneM .mb-fhead {
  display: inline-flex;
  vertical-align: middle;
}

#bcPaneM .mb-fbtn {
  border: none;
  background: transparent;
  color: var(--text-3);
  cursor: pointer;
  font-size: var(--fs-xs);
  padding: 0 var(--sp-1);
  line-height: 1;
}

#bcPaneM .mb-fbtn:hover,
#bcPaneM .mb-fbtn.on {
  color: var(--accent);
  font-weight: 700;
}

#bcPaneM .mb-fclear {
  border: none;
  background: var(--danger-bg);
  color: var(--danger);
  border-radius: 50%;
  width: 16px;
  height: 16px;
  font-size: var(--fs-xs);
  line-height: 1;
  cursor: pointer;
  padding: 0;
  vertical-align: middle;
  margin-left: var(--sp-1);
}

#bcPaneM .mb-fclear:hover {
  background: var(--danger-bd);
}

#bcPaneM .mb-filter-chips {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--sp-2);
  padding: var(--sp-2) 0;
}

#bcPaneM .mb-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  background: var(--ok-bg);
  border: 1px solid var(--ok-bd);
  color: var(--ok);
  border-radius: 999px;
  padding: var(--sp-1) var(--sp-2) var(--sp-1) var(--sp-3);
  font-size: var(--fs-xs);
}

#bcPaneM .mb-chip button {
  border: none;
  background: var(--ok-bg);
  color: var(--ok);
  width: 16px;
  height: 16px;
  border-radius: 50%;
  cursor: pointer;
  font-size: var(--fs-xs);
  line-height: 1;
  padding: 0;
}

#bcPaneM .mb-chip button:hover {
  background: var(--ok-bd);
}

#bcPaneM .mb-th-filtered {
  background: var(--ok-bg) !important;
}

#bcPaneM .mb-th-filtered .mb-fbtn {
  color: var(--ok);
  background: var(--ok-bd);
  border-radius: var(--r-sm);
}

.bc-input.ctl-field {
  border-color: var(--ok);
  background: var(--surface-2);
  box-shadow: 0 0 0 2px var(--ok-bg);
}

#bcPaneM .mb-mode-bar .bc-seg-btn.on,
#bcPaneM .mb-product-bar .bc-seg-btn.on {
  background: var(--accent);
  color: var(--text-on-accent);
  box-shadow: none;
}

.mb-filter-pop {
  position: fixed;
  z-index: 400;
  width: 260px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r);
  box-shadow: 0 12px 32px rgba(17, 20, 24, 0.18);
  padding: var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.mb-fp-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
}

.mb-fp-head b {
  font-size: var(--fs-sm);
}

.mb-fp-actions {
  display: inline-flex;
  gap: var(--sp-1);
}

.mb-fp-q {
  width: 100%;
}

.mb-fp-list {
  max-height: 260px;
  overflow: auto;
  border: 1px solid var(--border);
  border-radius: var(--r);
}

.mb-fp-item {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  padding: var(--sp-1) var(--sp-2);
  cursor: pointer;
  font-size: var(--fs-xs);
  border-bottom: 1px solid var(--border);
}

.mb-fp-item:hover {
  background: var(--surface-2);
}

.mb-fp-val {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mb-fp-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.mb-fp-batch {
  font-size: var(--fs-xs);
}

.mb-fp-batchbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
}

.mb-fp-note {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 总数据居左 + 今日新增居右 + 四分之一圆弧箭头 */
#bcPaneM .mb-kpi-line {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
}

#bcPaneM .mb-kpi-trend {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  font-size: var(--fs-xs);
  font-weight: 700;
  white-space: nowrap;
}

#bcPaneM .mb-kpi-trend.up {
  color: var(--ok);
}

#bcPaneM .mb-kpi-trend.down {
  color: var(--danger);
}

#bcPaneM .mb-kpi-trend.muted {
  color: var(--text-2);
}

#bcPaneM .mb-arc {
  display: inline-block;
  width: auto;
  height: auto;
  font-size: var(--fs-base);
  font-weight: 800;
  line-height: 1;
}

#bcPaneM .mb-arc.down {
  color: var(--danger);
}

#bcPaneM .mb-arc.up {
  color: var(--ok);
}

#bcPaneM .mb-table td.mb-num-pair {
  text-align: center;
}

#bcPaneM .mb-total {
  font-weight: 800;
  color: var(--navy-2);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

#bcPaneM .mb-today {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  margin-left: var(--sp-2);
  white-space: nowrap;
}

#bcPaneM .mb-today-none {
  color: var(--text-3);
}

#bcPaneM .mb-today .mb-delta {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
}

/* 表头横向滚动时定格 */
#bcPaneM .mb-scroll thead th {
  position: sticky;
  top: 0;
  z-index: 5;
  background: var(--surface-2);
  box-shadow: 0 1px 0 var(--border-strong);
}

/* 统一居中排版：表头与内容都居中，表头单行不换行 */
#bcPaneM .mb-table th.mb-th,
#bcPaneM .mb-table td {
  text-align: center;
}

#bcPaneM .mb-table th.mb-th {
  white-space: nowrap;
  height: 38px;
}

#bcPaneM .mb-table td.mb-num,
#bcPaneM .mb-table td.mb-num-pair {
  text-align: center;
}

#bcPaneM .mb-th-num {
  text-align: center;
}

#bcPaneM .mb-freeze-bar {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
  border-top: 1px dashed var(--border);
  padding-top: var(--sp-2);
}

#bcPaneM .mb-freeze-bar .bc-select {
  flex: 0 1 220px;
}

@media (max-width: 900px) {
  #bcPaneM .mb-form-grid {
    grid-template-columns: 1fr 1fr;
  }
}


.bc-id-ta {
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  padding: var(--sp-2) var(--sp-3);
  gap: var(--sp-2);
}

.bc-id-ta-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  font-size: var(--fs-xs);
  color: var(--text);
}

.bc-id-ta-head b {
  color: var(--navy-2);
}

.bc-id-textarea {
  height: 168px;
  min-height: 96px;
  resize: none;
  font-size: var(--fs-xs);
  line-height: 1.65;
  background: var(--surface);
  overflow: auto;
}

@media (max-width: 720px) {
  .bc-id-pair {
    grid-template-columns: 1fr;
  }
}

.bc-rec-toggle {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  border: none;
  background: transparent;
  padding: 0;
  cursor: pointer;
  font: inherit;
  color: inherit;
}

.bc-rec-toggle .bc-rec-arrow {
  color: var(--accent);
  font-size: var(--fs-base);
  width: 14px;
}

.bc-objtable th {
  background: var(--surface-2);
  color: var(--navy-2);
  font-size: var(--fs-xs);
  text-align: left;
  padding: var(--sp-2) var(--sp-2);
  border-bottom: 1px solid var(--border-strong);
  white-space: nowrap;
}

.bc-objtable td {
  padding: var(--sp-2) var(--sp-2);
  font-size: var(--fs-xs);
}

.bc-reg-group {
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  padding: var(--sp-2) var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.bc-reg-group-head {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
}

.bc-reg-group-head b {
  color: var(--accent);
}

/* ============ 快速搭建 · C 页分组与统计强化 ============ */
.bc-chipline {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
}

.bc-statchip {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  background: var(--surface-2);
  border: 1px solid var(--border);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r);
  font-size: var(--fs-xs);
  color: var(--text-2);
}

.bc-statchip b {
  font-size: var(--fs-md);
  color: var(--navy-2);
  font-variant-numeric: tabular-nums;
}

.bc-statchip-main {
  background: var(--surface-2);
  border-color: var(--border-strong);
}

.bc-statchip-main b {
  color: var(--accent);
  font-size: var(--fs-lg);
}

.bc-stat-warn .bc-statchip-main {
  background: var(--warn-bg);
  border-color: var(--warn);
}

.bc-btn-export {
  background: var(--warn-bg);
  border-color: var(--warn);
  color: var(--warn);
}

.bc-btn-export:hover {
  background: var(--warn-bg);
  border-color: var(--warn);
  color: var(--warn);
}

.bc-group-summary {
  font-size: var(--fs-xs);
  color: var(--text-2);
  background: var(--surface-2);
  border: 1px dashed var(--border);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-3);
}

.bc-group-summary b {
  color: var(--navy-2);
  font-size: var(--fs-base);
}

.bc-syncnote {
  margin: 0;
  font-size: var(--fs-xs);
  color: var(--text-2);
  padding: 0 var(--sp-1);
}

.bc-syncnote-ok {
  color: var(--ok);
  font-weight: 700;
}

.bc-syncnote-bad {
  color: var(--danger);
  font-weight: 700;
}

.bc-group-card {
  background: var(--surface);
  border-color: var(--border);
}

.bc-group-card .bc-strategy-head b {
  color: var(--navy-2);
}

.bc-card-head h3 {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
}

.bc-card-head h3::after {
  content: "";
  flex: 1;
  height: 1px;
  min-width: 28px;
  background: var(--border);
  margin-left: var(--sp-1);
}

.bc-tab.on {
  box-shadow: var(--accent-shadow);
}

.bc-rec-brief .bc-pill-blue,
.bc-tab.on {
  letter-spacing: 0.2px;
}

#envCheckRows {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

#bcPaneM .ac-log-cols {
  display: flex;
  gap: var(--sp-3);
  align-items: flex-start;
  overflow-x: auto;
  padding: var(--sp-1) 0 var(--sp-2);
}

#bcPaneM .ac-log-col {
  flex: 1 1 0;
  min-width: 280px;
  max-width: 520px;
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  padding: var(--sp-2) var(--sp-3);
}

#bcPaneM .ac-log-col-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  font-weight: 600;
  color: var(--text);
  margin-bottom: var(--sp-2);
}

#bcPaneM .ac-log-col-list {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  max-height: 260px;
  overflow: auto;
}

#bcPaneM .ac-log-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--sp-2);
  font-size: var(--fs-xs);
}

#bcPaneM .ac-log-time {
  color: var(--text-2);
}

#bcPaneM .ac-log-err {
  color: var(--danger);
}

#bcPaneM .ac-log-detail {
  font-size: var(--fs-xs);
  margin: 0 0 var(--sp-2) var(--sp-1);
}

#bcPaneM .ac-exec {
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  padding: var(--sp-2) var(--sp-3);
  margin: var(--sp-2) 0;
}

#bcPaneM .ac-exec-paused {
  background: var(--surface-2);
  opacity: 0.9;
}

#bcPaneM .ac-exec .mb-row {
  flex-wrap: wrap;
  gap: var(--sp-2);
}

#bcPaneM .ac-exec-title {
  min-width: 88px;
  color: var(--text);
  font-size: var(--fs-sm);
}

#bcPaneM .ac-exec-meta {
  margin: var(--sp-2) 0 0;
  font-size: var(--fs-xs);
}

.env-row {
  display: grid;
  grid-template-columns: auto auto 1fr;
  gap: var(--sp-2);
  align-items: center;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-3);
  background: var(--surface);
}

.env-row .env-fix {
  grid-column: 1 / -1;
  font-size: var(--fs-xs);
  color: var(--warn);
  background: var(--warn-bg);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-2);
}

.bc-empty.bc-empty-strong {
  color: var(--navy-2);
  font-weight: 600;
}

/* ============ 测试账户 & 批次分配执行（M 页签新增子页） ============ */
#bcPaneM .bc-layout-split {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(300px, 0.85fr);
  gap: var(--sp-4);
  align-items: start;
}

#bcPaneM .bc-layout-split > .bc-layout-l,
#bcPaneM .bc-layout-split > .bc-layout-r {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
  min-width: 0;
}

@media (max-width: 1080px) {
  #bcPaneM .bc-layout-split {
    grid-template-columns: 1fr;
  }
}

#bcPaneM .mb-row {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
  margin: var(--sp-1) 0 var(--sp-2);
}

/* 账户×任务分配：搜索框改为多行，方便直接粘贴一批 ID（单行输入会把换行吃掉） */
#bcPaneM .as-search-ta {
  flex: 1 1 280px;
  min-width: 240px;
  width: auto;
  min-height: 46px;
  max-height: 140px;
  resize: vertical;
  padding: var(--sp-2) var(--sp-3);
  line-height: 1.5;
  font-family: var(--font-mono, monospace);
}

#bcPaneM .bc-col-settings {
  border: 1px dashed var(--border);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-3);
  margin: var(--sp-2) 0;
}

#bcPaneM .bc-col-settings > summary {
  cursor: pointer;
  font-size: var(--fs-sm);
  color: var(--navy-2);
  font-weight: 600;
  user-select: none;
}

#bcPaneM .bp-task-list {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  max-height: 380px;
  overflow: auto;
  padding-right: var(--sp-1);
}

#bcPaneM .bp-task-row {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  padding: var(--sp-2) var(--sp-3);
}

#bcPaneM .bp-task-row .bp-task-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
}

#bcPaneM .bp-task-row .bp-task-main b {
  font-size: var(--fs-sm);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#bcPaneM .bp-saved-card {
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-3) var(--sp-3);
  background: var(--surface);
  margin-bottom: var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
}

#bcPaneM .bc-col-opt span {
  display: inline-block;
  max-width: 260px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  vertical-align: middle;
}

#bcPaneM .bc-table.mb-table td.mb-ellip {
  max-width: 260px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ============ 账户×任务分配（新版合并页） ============ */
.bc-pill-muted {
  background: var(--surface-2);
  color: var(--text-2);
}

#bcPaneM .as-wrap {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(360px, 1fr);
  gap: var(--sp-4);
  align-items: start;
  margin-top: var(--sp-4);
}

#bcPaneM .as-left,
#bcPaneM .as-right {
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
  min-width: 0;
}

#bcPaneM .as-right {
  position: sticky;
  top: 72px;
  max-height: calc(100vh - 92px);
}

@media (max-width: 1280px) {
  #bcPaneM .as-wrap {
    grid-template-columns: 1fr;
  }
}

#bcPaneM .as-group {
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(17, 20, 24, 0.06);
}

#bcPaneM .as-group-head {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  padding: var(--sp-3) var(--sp-3);
  background: var(--surface-2);
  border-bottom: 1px solid var(--border);
  flex-wrap: wrap;
}

#bcPaneM .as-gc-A {
  border-left: 5px solid var(--group-a);
}
#bcPaneM .as-gc-B {
  border-left: 5px solid var(--group-b);
}
#bcPaneM .as-gc-C {
  border-left: 5px solid var(--group-c);
}
#bcPaneM .as-gc-D {
  border-left: 5px solid var(--group-d);
}
#bcPaneM .as-gc-__none {
  border-left: 5px solid var(--text-3);
}

#bcPaneM .as-collapse {
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: var(--fs-xs);
  color: var(--text-2);
  padding: var(--sp-1) var(--sp-1);
}

#bcPaneM .as-group-title {
  font-size: var(--fs-md);
  color: var(--text);
}

#bcPaneM .as-gp-pill {
  font-size: var(--fs-xs);
}

#bcPaneM .as-group-hint {
  flex: 1;
  text-align: right;
  font-size: var(--fs-xs);
}

#bcPaneM .as-group-actions .bc-btn {
  padding: var(--sp-2) var(--sp-3);
}

#bcPaneM .as-g-body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 260px;
  gap: 0;
}

#bcPaneM .as-acct-col {
  min-width: 0;
  padding: var(--sp-2) var(--sp-3);
}

#bcPaneM .as-scroll {
  max-height: 52vh;
  overflow: auto;
  border: 1px solid var(--border);
  border-radius: var(--r);
}

#bcPaneM .as-grid {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: var(--fs-xs);
  table-layout: fixed;
}

#bcPaneM .as-grid thead th {
  position: sticky;
  top: 0;
  z-index: 5;
  background: var(--surface-2);
  color: var(--text-2);
  font-weight: 600;
  text-align: left;
  padding: var(--sp-2) var(--sp-2);
  border-bottom: 1px solid var(--border-strong);
  white-space: nowrap;
}

#bcPaneM .as-acct-col {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  min-width: 0;
}

#bcPaneM .as-headtools {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  flex-wrap: wrap;
  min-height: var(--ctl-h);
}

#bcPaneM .as-repl {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  font-size: var(--fs-xs);
  color: var(--text-2);
  white-space: nowrap;
}

#bcPaneM .as-repl .as-replace-val {
  width: 92px;
  min-width: 92px;
  padding: var(--sp-1) var(--sp-2);
  font-size: var(--fs-xs);
}

#bcPaneM .as-repl .bc-btn {
  padding: var(--sp-1) var(--sp-3);
}

#bcPaneM .as-strat-box {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  margin: var(--sp-2) 0;
}

#bcPaneM .as-strat-row {
  display: grid;
  grid-template-columns: minmax(160px, 1fr) minmax(150px, auto) 110px;
  gap: var(--sp-2);
  align-items: center;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-2);
  background: var(--surface);
}

#bcPaneM .as-strat-minmax {
  display: flex;
  align-items: center;
  gap: var(--sp-1);
}

#bcPaneM .as-strat-minmax .bc-input {
  flex: 1;
  min-width: 50px;
}

#bcPaneM .as-strat-grid {
  display: grid;
  grid-template-columns: minmax(130px, 1fr) minmax(200px, auto) 84px 168px;
  gap: var(--sp-2) var(--sp-3);
  margin: var(--sp-2) 0;
  align-items: start;
}

#bcPaneM .as-strat-grid label {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  font-size: var(--fs-xs);
  color: var(--text-2);
}

#bcPaneM .as-strat-grid label .bc-input {
  min-width: 0;
}

#bcPaneM .as-strat-sep {
  grid-column: 1 / -1;
  border-top: 1px dashed var(--border);
  height: 0;
}

@media (max-width: 1200px) {
  #bcPaneM .as-strat-grid {
    grid-template-columns: 1fr 1fr;
  }
}

#bcPaneM .as-sec {
  border-radius: var(--r);
  padding: var(--sp-3) var(--sp-3);
  margin: var(--sp-2) 0;
}

#bcPaneM .as-sec-ai {
  background: var(--surface-2);
  border: 1px solid var(--border-strong);
}

#bcPaneM .as-sec-reg {
  background: var(--warn-bg);
  border: 1px solid var(--warn-bd);
}

#bcPaneM .as-sec-title {
  font-size: var(--fs-sm);
  font-weight: 700;
  color: var(--text);
  margin-bottom: var(--sp-2);
}

#bcPaneM .as-sec-ai .as-sec-title {
  color: var(--accent-hover);
}

#bcPaneM .as-sec-reg .as-sec-title {
  color: var(--warn);
}

#bcPaneM .as-grid th.as-th .as-th-txt {
  display: block;
  font-size: var(--fs-xs);
}

#bcPaneM .as-grid th.as-th .as-head-sel {
  width: 100%;
  margin-top: var(--sp-1);
  min-width: 0;
  padding: var(--sp-1) var(--sp-1);
  font-size: var(--fs-xs);
}

#bcPaneM .as-grid td.as-cell {
  border-right: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  padding: var(--sp-2) var(--sp-2);
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  background: var(--surface);
  cursor: cell;
  user-select: text;
  line-height: 21px;
  box-sizing: border-box;
}

#bcPaneM .as-grid tbody tr {
  height: 40px;
}

#bcPaneM .as-grid tbody tr td {
  vertical-align: middle;
}

#bcPaneM .as-grid tr:hover td.as-cell {
  background: var(--n-2);
}

#bcPaneM .as-grid td.as-cell.as-sel {
  background: var(--border-strong) !important;
  outline: 1px solid var(--accent);
  outline-offset: -1px;
}

#bcPaneM .as-grid th.as-th {
  position: sticky;
  top: 0;
  z-index: 5;
}

#bcPaneM .as-grid th.as-th-status {
  position: sticky;
  top: 0;
  right: 0;
  left: auto;
  z-index: 8;
  background: var(--surface-2);
  box-shadow: -2px 0 0 rgba(17, 20, 24, 0.08);
  text-align: center;
}

#bcPaneM .as-grid td.as-pin-status {
  position: sticky;
  right: 0;
  z-index: 5;
  background: var(--surface);
  box-shadow: -2px 0 0 rgba(17, 20, 24, 0.05);
  border-left: 1px solid var(--border);
  text-align: center;
  padding: var(--sp-2) var(--sp-1);
}

#bcPaneM .as-grid tr:hover td.as-pin-status {
  background: var(--n-2);
}

#bcPaneM .as-grid td.as-pin-status.as-sel {
  background: var(--border-strong) !important;
}

#bcPaneM .as-grid th.as-th-move {
  cursor: grab;
  user-select: none;
}

#bcPaneM .as-grid th.as-th-move.as-th-drop {
  outline: 2px dashed var(--accent);
  outline-offset: -2px;
  background: var(--surface-3);
}

#bcPaneM .as-grid .as-col-resizer {
  position: absolute;
  top: 0;
  right: 0;
  width: 6px;
  height: 100%;
  cursor: col-resize;
  background: transparent;
  z-index: 4;
}

#bcPaneM .as-grid .as-col-resizer:hover {
  background: var(--focus-ring);
}

body.as-resizing {
  cursor: col-resize;
  user-select: none;
}

#bcPaneM .as-grid td.as-cell-id {
  font-family: var(--mono);
  font-size: var(--fs-xs);
}

#bcPaneM .as-grid td.as-cell-ellip {
  max-width: 220px;
}

#bcPaneM .as-grid td.as-cell-check,
#bcPaneM .as-grid th.as-th-check {
  text-align: center;
  width: 32px;
}

#bcPaneM .as-cell-edit {
  width: 100%;
  min-width: 0;
  padding: var(--sp-1) var(--sp-1);
  font-size: var(--fs-xs);
}

#bcPaneM .as-row-actions {
  white-space: nowrap;
  text-align: right;
}

#bcPaneM .as-row-actions .bc-btn {
  padding: var(--sp-1) var(--sp-2);
  font-size: var(--fs-xs);
}

#bcPaneM .as-claim-col {
  border-left: 1px dashed var(--border-strong);
  background: var(--surface);
  display: flex;
  flex-direction: column;
  min-height: 160px;
  max-height: 52vh;
}

#bcPaneM .as-claim-head {
  padding: var(--sp-3) var(--sp-3);
  border-bottom: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  align-items: center;
  color: var(--text-2);
}

#bcPaneM .as-claims {
  flex: 1;
  overflow: auto;
  padding: var(--sp-2);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

#bcPaneM .as-claims.as-drop-hover {
  background: var(--surface-2);
  outline: 2px dashed var(--accent);
  outline-offset: -3px;
  border-radius: var(--r);
}

#bcPaneM .as-claim-row {
  display: flex;
  gap: var(--sp-2);
  align-items: center;
  border: 1px solid var(--border);
  background: var(--surface);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-2);
}

#bcPaneM .as-claim-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
}

#bcPaneM .as-claim-main b {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: var(--fs-xs);
}

#bcPaneM .as-claim-side {
  display: flex;
  align-items: center;
  gap: var(--sp-1);
}

#bcPaneM .as-claim-side .bc-btn {
  padding: var(--sp-1) var(--sp-2);
}

#bcPaneM .as-claim-disabled {
  opacity: 0.55;
}

#bcPaneM .as-bulk {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
  padding: var(--sp-2) var(--sp-3);
  margin-top: var(--sp-2);
  border-radius: var(--r);
  border: 1px dashed var(--border-strong);
  background: var(--surface-2);
  font-size: var(--fs-sm);
}

#bcPaneM .as-bulk.on {
  border-style: solid;
  border-color: var(--accent);
  background: var(--surface-2);
}

#bcPaneM .as-bulk .bc-input,
#bcPaneM .as-bulk .bc-select {
  min-width: 110px;
  flex: 0 1 150px;
}

#bcPaneM .as-task-sec {
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  margin: var(--sp-2) 0;
}

#bcPaneM .as-task-sec-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--sp-2) var(--sp-3);
  color: var(--text-2);
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  background: var(--surface-2);
  border-radius: var(--r) var(--r) 0 0;
  z-index: 2;
}

#bcPaneM .as-task-list {
  max-height: 300px;
  overflow: auto;
  padding: var(--sp-2);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

#bcPaneM .as-task-row {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: var(--sp-2) var(--sp-2);
  background: var(--surface);
  cursor: grab;
}

#bcPaneM .as-task-row:active {
  cursor: grabbing;
  opacity: 0.75;
}

#bcPaneM .as-task-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
}

#bcPaneM .as-task-main b {
  font-size: var(--fs-xs);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#bcPaneM .as-task-main b.as-full,
#bcPaneM .as-claim-main b.as-full {
  white-space: normal;
  word-break: break-all;
  overflow: visible;
  text-overflow: clip;
  font-weight: 600;
}

#bcPaneM .as-full-id {
  display: block;
  font-family: var(--mono);
  font-size: var(--fs-xs);
  color: var(--text-2);
  word-break: break-all;
  white-space: normal;
  line-height: 1.4;
}

#bcPaneM .as-task-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: var(--sp-1);
  max-width: 150px;
}

#bcPaneM .as-task-owner {
  font-size: var(--fs-xs);
  border-radius: var(--r);
  padding: var(--sp-1) var(--sp-2);
}

#bcPaneM .as-task-owner.as-pending {
  background: var(--warn-bg);
  color: var(--warn);
}

#bcPaneM .as-task-owner.as-done {
  background: var(--ok-bg);
  color: var(--ok);
}

#bcPaneM .as-claimto {
  font-size: var(--fs-xs);
  width: 64px;
  min-width: 64px;
  max-width: 64px;
  padding: var(--sp-1) var(--sp-2);
}

#bcPaneM .as-gremark {
  display: inline-block;
  max-width: 240px;
  font-size: var(--fs-xs);
  color: var(--group-d);
  background: var(--surface-2);
  border-radius: var(--r);
  padding: var(--sp-1) var(--sp-2);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#bcPaneM .as-claim-head {
  gap: var(--sp-2);
  align-items: center;
}

#bcPaneM .as-claim-title {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  min-width: 0;
}

#bcPaneM .as-claim-cnt {
  font-size: var(--fs-xs);
  color: var(--accent);
  font-weight: 600;
}

#bcPaneM .as-claim-acts {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  align-items: stretch;
}

#bcPaneM .as-claim-acts .bc-btn {
  padding: var(--sp-1) var(--sp-2);
  font-size: var(--fs-xs);
}

#bcPaneM .as-tasks-card {
  max-height: calc(100vh - 92px);
  overflow: auto;
}

#bcPaneM .as-total-bar {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
  padding: var(--sp-2) var(--sp-3);
  border-bottom: 1px solid var(--border);
  background: var(--surface);
  position: sticky;
  top: 0;
  z-index: 3;
}

#bcPaneM .as-total-bar .bc-pill {
  font-size: var(--fs-xs);
}

#bcPaneM .as-run-split {
  margin-top: var(--sp-4);
}

#bcPaneM .as-log-list {
  margin-top: var(--sp-2);
  max-height: 300px;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

#bcPaneM .as-log-row {
  display: flex;
  gap: var(--sp-2);
  align-items: baseline;
  border-bottom: 1px dashed var(--border);
  padding: var(--sp-1) var(--sp-1);
  font-size: var(--fs-xs);
}

#bcPaneM .as-log-text {
  flex: 1;
  min-width: 0;
  color: var(--text-2);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#bcPaneM .as-log-type-add,
#bcPaneM .as-log-type-claim_add,
#bcPaneM .as-log-type-run_ok {
  background: var(--ok-bg);
  color: var(--ok);
}

#bcPaneM .as-log-type-update {
  background: var(--surface-2);
  color: var(--accent-hover);
}

#bcPaneM .as-log-type-delete,
#bcPaneM .as-log-type-claim_remove,
#bcPaneM .as-log-type-run_fail {
  background: var(--danger-bg);
  color: var(--danger);
}

#bcPaneM .as-log-type-import {
  background: var(--surface-2);
  color: var(--group-d);
}

/* 智能调控：巨量式投放时段矩阵 */
.schedule-cell {
  width: auto;
  min-width: 0;
  height: 20px;
  padding: 0 !important;
  cursor: pointer;
  background: var(--surface-2);
  border: 1px solid var(--border);
}
.schedule-cell:hover {
  background: var(--n-3);
  box-shadow: inset 0 0 0 1px var(--text-2);
}
/* 选中态要不输给 hover：把 :hover 也一起写进来 */
.schedule-cell.cell-on,
.schedule-cell.cell-on:hover {
  background: var(--accent);
  border-color: var(--accent);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.5);
}

/* 半小时矩阵：固定布局自适应容器宽度，避免横向拖动 */
.schedule-matrix {
  width: 100%;
  table-layout: fixed;
  user-select: none;
  -webkit-user-select: none;
}
.schedule-matrix th:first-child,
.schedule-matrix td:first-child {
  width: 62px;
  /* 行高由半小时格决定：这里不撑高，行才不会变成 39px 的胖条 */
  padding: 0 var(--sp-2);
  font-size: var(--fs-xs);
  color: var(--text-2);
  white-space: nowrap;
}
.schedule-matrix thead th {
  font-size: var(--fs-xs);
  padding: var(--sp-1) 0;
  text-align: center;
  white-space: nowrap;
}
.schedule-matrix td.schedule-cell {
  border: 1px solid var(--border);
}

/* 矩阵下方：回显当前选中的投放时段 */
.sched-summary {
  margin: 0;
  padding: var(--sp-2) var(--sp-3);
  background: var(--surface-2);
  border-radius: var(--r);
  color: var(--text-2);
  font-size: var(--fs-xs);
  font-variant-numeric: tabular-nums;
  line-height: var(--lh-base);
}

/* 项目勾选条：整条给底色，计数做成醒目标记，右侧三个标准按钮 */
.pick-bar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-3);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
}

.pick-count {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  margin-right: auto;
  height: var(--ctl-h);
  box-sizing: border-box;
  padding: 0 var(--sp-3);
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: var(--r-sm);
  font-size: var(--fs-sm);
  color: var(--text-2);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.pick-count b {
  font-family: var(--mono);
  font-size: var(--fs-sm);
  font-weight: var(--fw-bold);
  color: var(--accent-quiet-fg);
}

/* 调控总览：产品行点击展开该产品的账户分组明细 */
/* ---- 调控总览专用：三线表 + 汇总/明细两级层次 ----
   只有这一张表用三线表；其它表格保持全局样式不变。 */
.ov-scroll {
  border: none;
  border-radius: 0;
}

.ov-table {
  border-top: 2px solid var(--text);
  border-bottom: 2px solid var(--text);
}
.ov-table th,
.ov-table td {
  border: none;
  padding-left: 0;
  padding-right: var(--sp-4);
}
.ov-scroll .ov-table thead th {
  background: transparent;
  border-bottom: 1px solid var(--text);
  font-size: var(--fs-sm);
  letter-spacing: 0.08em;
  color: var(--text-2);
}
.ov-table tbody tr:hover td {
  background: transparent;
}
.ov-table tbody tr.ov-group td { background: var(--n-1); }
.ov-table tbody tr.ov-group:hover td { background: var(--n-2); }
.ov-table th.num,
.ov-table td.num {
  width: 104px;
  text-align: right;
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
  padding-right: var(--sp-4);
}
/* 名称列定宽：否则它会吃掉全部剩余宽度，数字被甩到最右、跟名字失联 */
.ov-table th:first-child,
.ov-table td:first-child {
  width: 380px;
  padding-right: var(--sp-5);
}
/* 末列留白：把数字块收在名称旁边，多余宽度由它吸收 */
.ov-table th.ov-fill,
.ov-table td.ov-fill {
  width: auto;
  padding: 0;
}

/* 第一级：产品行 —— 白底、近黑、大一号加粗，读作「汇总」 */
.ov-table .ov-prod { cursor: pointer; }
.ov-table .ov-prod td {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--text);
  padding-top: var(--sp-4);
  padding-bottom: var(--sp-3);
  border-top: 1px solid var(--border);
}
.ov-table tbody tr.ov-prod:hover td { background: var(--n-1); }
/* 展开中的产品行：压成灰底，和它下面的明细连成一整块 */
.ov-table tbody tr.ov-prod.open td { background: var(--n-2); }

.ov-caret {
  display: inline-block;
  width: 16px;
  color: var(--n-5);
  font-size: var(--fs-sm);
}
.ov-prod:hover .ov-caret,
.ov-prod.open .ov-caret { color: var(--accent); }

.ov-sub {
  margin-left: var(--sp-2);
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
  color: var(--n-6);
}

/* 第二级：账户分组行 —— 灰底、灰字、小一号、缩进，读作「明细」 */
.ov-table .ov-group td {
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
  color: var(--n-6);
  padding-top: var(--sp-2);
  padding-bottom: var(--sp-2);
  background: var(--n-1);   /* 比展开的产品行再浅一档，明细压在汇总下面 */
}
.ov-table .ov-group td.num { color: var(--n-6); }
.ov-table .ov-group td:first-child {
  padding-left: var(--sp-6);
  box-shadow: inset 2px 0 0 var(--n-4);
}
.ov-gname {
  font-size: var(--fs-xs);
  color: var(--n-6);
}

/* 分组行上的「暂无项目」提示：有账户但对象清单里 0 项目 */
.ov-warn {
  margin-left: var(--sp-2);
  padding: 1px var(--sp-2);
  border-radius: var(--r-sm);
  font-size: var(--fs-xs);
  color: #a35b00;
  background: rgba(255, 176, 32, 0.16);
  border: 1px solid var(--warn-bd);
  cursor: help;
}

/* ---------------- 调度总览页（#schedule） ---------------- */
.schedule-box {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}
.card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
}
.head-actions {
  display: flex;
  gap: var(--sp-2);
}
.schedule-box .data-table th,
.schedule-box .data-table td {
  padding: var(--sp-2) var(--sp-3);
  border-bottom: 1px solid var(--border);
  vertical-align: top;
  text-align: left;
}
.schedule-box .data-table td.mono {
  font-family: var(--mono);
  font-size: var(--fs-sm);
  white-space: nowrap;
}
.schedule-box .data-table td.wrap {
  color: var(--text-2);
  line-height: 1.5;
  min-width: 260px;
}
.schedule-box .data-table tbody tr.row-off td {
  opacity: 0.45;
}
.schedule-box .data-table td.cell-bad {
  color: #c0392b;
  font-weight: var(--fw-bold);
}
.conflict-list {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}
.conflict-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-3);
  border: 1px solid rgba(255, 176, 32, 0.45);
  background: rgba(255, 176, 32, 0.10);
  border-radius: 8px;
}
.conflict-time {
  font-family: var(--mono);
  font-weight: var(--fw-bold);
  color: #a35b00;
}
.conflict-res {
  font-size: var(--fs-xs);
  color: var(--text-2);
}
.conflict-items {
  font-size: var(--fs-sm);
}
/* 远程访问入口 */
.tunnel-line {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
}
.tunnel-url {
  font-family: var(--mono);
  font-size: var(--fs-base);
  word-break: break-all;
}
.tunnel-ok {
  color: #1a7f37;
  font-size: var(--fs-sm);
}
.tunnel-bad {
  color: #c0392b;
  font-size: var(--fs-sm);
  font-weight: var(--fw-bold);
}

/* 目标预览：账户 → 项目 两级折叠
   列宽说明：表是 table-layout:fixed + width:100%，所以必须给每一列都定宽，
   否则「项目名称」会把剩余宽度全部吃掉，数字列被挤到最右边、间距也不匀。
   这里按内容宽度分配比例：项目名称最宽，其余按 项目数 < 出价 < 单元数 < 深度转化出价 递进
   （数字列宽度要能放下表头文字，「深度转化出价」6 个字最宽，不能窄于 120px）。 */
.pick-table th:nth-child(1),
.pick-table td:nth-child(1) { width: 208px; }   /* 账户 / 项目 ID */
.pick-table th:nth-child(2),
.pick-table td:nth-child(2) { width: 360px; }   /* 项目名称（超长省略） */
.pick-table th:nth-child(3),
.pick-table td:nth-child(3) { width: 88px; }    /* 项目数 */
.pick-table th:nth-child(4),
.pick-table td:nth-child(4) { width: 122px; }   /* 单元数 */
.pick-table th:nth-child(5),
.pick-table td:nth-child(5) { width: 92px; }    /* 出价 */
.pick-table th:nth-child(6),
.pick-table td:nth-child(6) { width: 124px; }   /* 深度转化出价 */
.pick-table th.num,
.pick-table td.num {
  text-align: right;
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
}
.pick-table tbody tr.pk-acct {
  cursor: pointer;
}
.pick-table tbody tr.pk-acct td {
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  color: var(--text);
  background: var(--surface);  /* 账户层：最浅（白） */
  padding-top: var(--sp-2);
  padding-bottom: var(--sp-2);
  border-top: 1px solid var(--border);
}
.pick-table tbody tr.pk-acct:hover td { background: var(--n-1); }
.pick-table tbody tr.pk-acct.open td { background: var(--n-1); }
.pick-table tbody tr.pk-acct.open .ov-caret { color: var(--accent); }
.pk-acct-id {
  font-family: var(--mono);
  font-size: var(--fs-sm);
}
.pk-acct-name {
  display: inline;
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  color: var(--text);
}
.pk-acct-sub {
  display: inline;
  margin-left: var(--sp-2);
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
  color: var(--text-2);
}
/* 账户行：第一行放账户名（超长截断），第二行放数据新鲜度。
   必须拆两行 —— 账户名 + 产品/策略组本身就占满整列，拼在末尾会被 nowrap+省略号裁掉。 */
.pick-table tbody tr.pk-acct td:nth-child(2) {
  white-space: normal;
  overflow: hidden;
  text-overflow: clip;
}
.pk-acct-line {
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.pk-time {
  display: block;
  margin-top: 2px;
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
  color: var(--text-2);
  opacity: 0.75;
}
.pk-warn {
  display: inline-block;
  margin-top: 3px;
  padding: 1px 6px;
  border-radius: 8px;
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
  color: #a35b00;
  background: rgba(255, 176, 32, 0.16);
  border: 1px solid rgba(255, 176, 32, 0.45);
}
.pick-table tbody tr.pk-proj td {
  font-size: var(--fs-xs);
  color: var(--text-2);
  background: var(--n-2);      /* 项目层：明显深一档 */
  height: 30px;                /* 比账户行再矮一档，层级更清楚 */
  padding-top: var(--sp-1);
  padding-bottom: var(--sp-1);
}
.pick-table tbody tr.pk-proj:hover td { background: var(--n-3); }
.pick-table tbody tr.pk-proj td:first-child {
  padding-left: var(--sp-6);
  box-shadow: inset 3px 0 0 var(--border-strong);
}
.pk-proj-id {
  margin-left: var(--sp-2);
  font-family: var(--mono);
}
.pk-proj-name { color: var(--text-2); }

/* 单元调价：手投项目下面挂的单元行 */
.pick-table tbody tr.pk-unit td {
  font-size: var(--fs-xs);
  color: var(--text-2);
  background: var(--n-1);
  height: 28px;
  padding-top: var(--sp-1);
  padding-bottom: var(--sp-1);
}
.pick-table tbody tr.pk-unit:hover td { background: var(--n-3); }
.pick-table tbody tr.pk-unit td:first-child {
  padding-left: var(--sp-8);
  box-shadow: inset 3px 0 0 var(--accent);
}

/* 目标预览：项目名称筛选 */
.pk-filter {
  min-width: 260px;
  flex: 0 1 320px;
}
.pk-list-meta:empty { display: none; }
.pk-list-meta { margin: var(--sp-2) 0; }

/* 术语说明：EBP / ad 域 是什么 */
.term-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: var(--sp-4);
  margin-top: var(--sp-2);
}

.term-item {
  padding: var(--sp-4);
  background: var(--n-1);
  border: 1px solid var(--border);
  border-left: 3px solid var(--page-accent, var(--accent));
  border-radius: var(--r);
}

.term-head {
  display: flex;
  align-items: baseline;
  gap: var(--sp-2);
  margin-bottom: var(--sp-2);
}

.term-head b {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--text);
}

.term-host {
  font-family: var(--mono);
  font-size: var(--fs-xs);
  color: var(--text-2);
}

.term-body {
  margin: 0 0 var(--sp-1);
  font-size: var(--fs-sm);
  line-height: var(--lh-base);
  color: var(--text-2);
}

.term-body:last-child {
  margin-bottom: 0;
}

/* ---------- 测试线分析面板 & 堆叠图（2026-09-12） ---------- */
.stacked-legend {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-4);
  margin: var(--sp-2) 0 0;
  font-size: var(--fs-xs);
  color: var(--text-2);
}
.stacked-legend-item {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
}
.stacked-dot {
  width: 9px;
  height: 9px;
  border-radius: var(--r-sm);
  display: inline-block;
}
.ai-panel {
  flex: 1;
  min-width: 380px;
}
.ai-title {
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--text-2);
  margin: var(--sp-3) 0 var(--sp-2);
}
.ai-progress-row {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-1) 0;
}
.ai-progress-name {
  width: 44px;
  font-size: var(--fs-xs);
  color: var(--text-2);
  flex: none;
}
.ai-bar {
  flex: 1;
  height: 9px;
  background: var(--surface-2);
  border-radius: 999px;
  overflow: hidden;
  min-width: 80px;
}
.ai-bar-fill {
  display: block;
  height: 100%;
  border-radius: 999px;
}
.ai-progress-val {
  width: 52px;
  text-align: right;
  font-size: var(--fs-xs);
  font-weight: 600;
  flex: none;
}
.ai-progress-sub {
  width: 138px;
  text-align: right;
  font-size: var(--fs-xs);
  color: var(--text-3);
  flex: none;
}
.ai-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin: var(--sp-3) 0 var(--sp-1);
}
.ai-chip {
  font-size: var(--fs-xs);
  padding: var(--sp-1) var(--sp-3);
  border-radius: 999px;
  background: var(--surface-2);
  color: var(--accent-hover);
}
.ai-chip-warn {
  background: var(--warn-bg);
  color: var(--warn);
}
.ai-chip-danger {
  background: var(--danger-bg);
  color: var(--danger);
}
.ai-advice-row {
  display: flex;
  gap: var(--sp-2);
  align-items: flex-start;
  padding: var(--sp-1) 0;
}
.ai-badge {
  flex: none;
  font-size: var(--fs-xs);
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--r);
  background: var(--surface-2);
  color: var(--accent-hover);
}
.ai-badge-down {
  background: var(--danger-bg);
  color: var(--danger);
}
.ai-badge-up {
  background: var(--ok-bg);
  color: var(--ok);
}
.ai-badge-ok {
  background: var(--surface-2);
  color: var(--text-2);
}
.ai-advice-text {
  font-size: var(--fs-xs);
  color: var(--text-2);
  line-height: 1.5;
}
.ai-advice-text b {
  color: var(--text);
}
.ai-note {
  font-size: var(--fs-xs);
  color: var(--text-3);
  margin: var(--sp-2) 0 0;
}
.ai-grid {
  display: grid;
  grid-template-columns: minmax(320px, 1fr) minmax(380px, 1.2fr);
  gap: var(--sp-5);
}
@media (max-width: 1100px) {
  .ai-grid {
    grid-template-columns: 1fr;
  }
}
.ai-col {
  min-width: 0;
}
.ai-table {
  display: flex;
  flex-direction: column;
}
.ai-tr {
  display: grid;
  grid-template-columns: 1.3fr 0.7fr 0.6fr 1.6fr;
  gap: var(--sp-2);
  align-items: center;
  padding: var(--sp-2) 0;
  border-bottom: 1px solid var(--border);
}
.ai-th {
  font-size: var(--fs-xs);
  color: var(--text-3);
  border-bottom: 1px solid var(--border);
}
.ai-td {
  font-size: var(--fs-xs);
  color: var(--text-2);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ai-badge-warn {
  background: var(--warn-bg);
  color: var(--warn);
}
.ai-advice-line {
  display: block;
  color: var(--text-2);
  font-size: var(--fs-xs);
  margin-top: var(--sp-1);
}

/* 达人看板：专用鲸准账户登录卡（与其它页签分开） */
.daren-auth-card {
  margin-bottom: 14px;
  border-left: 3px solid var(--blue);
}
.daren-auth-card .jz-row {
  flex-wrap: wrap;
  gap: 8px;
}

/* 达人看板：同步进度条 */
.daren-prog-wrap {
  margin: 4px 0 10px;
}
.daren-prog-inner {
  height: 8px;
  background: #e9eef7;
  border-radius: 999px;
  overflow: hidden;
}
.daren-prog-bar {
  height: 100%;
  width: 0;
  background: var(--blue);
  border-radius: 999px;
  transition: width 0.4s ease;
}
.daren-prog-bar.done {
  background: var(--ok);
}
.daren-prog-bar.failed {
  background: var(--danger);
}
.daren-prog-text {
  margin: 6px 0 0;
  font-size: var(--fs-xs);
  color: var(--muted);
}
