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

body.ops-dashboard {
  --db-ink: #1a1f36;
  --db-text: #3b4563;
  --db-muted: #667085;
  --db-faint: #98a2b3;
  --db-line: #e9edf4;
  --db-surface: #ffffff;
  --db-surface-dim: #f7f8fc;
  --db-accent: #7f56d9;
  --db-accent-deep: #53389e;
  --db-accent-soft: #f4efff;
  --db-accent-ring: rgba(127, 86, 217, .16);
  --db-green: #067647;
  --db-green-soft: #ecfdf3;
  --db-orange: #b54708;
  --db-orange-soft: #fff6ed;
  --db-red: #b42318;
  --db-red-soft: #fff1f0;
  /* 阴影层级取代边框层级：卡片"浮起"而非"框住"，hover 时沿 sm→md→lg 递进。 */
  --db-shadow-sm: 0 1px 2px rgba(16, 24, 40, .05);
  --db-shadow-md: 0 6px 16px rgba(16, 24, 40, .07), 0 2px 4px rgba(16, 24, 40, .04);
  --db-shadow-lg: 0 16px 40px rgba(16, 24, 40, .10), 0 4px 10px rgba(16, 24, 40, .05);
  --db-radius: 12px;
  background: #f7f8fb;
  color: var(--db-text);
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
}
/* 品牌紫选区：全页统一的细节点缀，不改变任何内容。 */
body.ops-dashboard ::selection { background: var(--db-accent-soft); color: var(--db-accent-deep); }

/* 1200px 栏宽：过宽会让卡片被拉成"表格行"，收紧后阅读节奏更稳定。 */
.ops-dashboard .container { max-width: 1200px; margin: 0 auto; padding-bottom: 64px; }
.dashboard-header { margin-bottom: 20px; }
.dashboard-header h1 { color: var(--db-ink); font-size: 26px; font-weight: 800; letter-spacing: -0.02em; }
/* 头部口径行：跟随查询结果展示当前日期范围与主播，避免用户忘记筛选条件。 */
.dashboard-header-meta { margin-top: 6px; color: var(--db-muted); font-size: 13px; }

/* 筛选面板吸顶：长页滚动后筛选上下文不丢失；半透明+毛玻璃让下方内容滚过时保持可读。
   z-index=100 必须低于 nav 抽屉（移动端抽屉层级更高），避免遮挡导航。 */
.filter-panel { position: sticky; top: 12px; z-index: 100; margin-bottom: 24px; padding: 12px 14px; border: 1px solid rgba(233, 237, 244, .9); border-radius: var(--db-radius); background: rgba(255, 255, 255, .86); -webkit-backdrop-filter: blur(14px) saturate(1.5); backdrop-filter: blur(14px) saturate(1.5); box-shadow: var(--db-shadow-sm); }
/* 查询加载态：禁用筛选栏交互，半透明反馈避免重复操作。 */
.filter-panel.loading { pointer-events: none; opacity: 0.6; }
.toolbar { display: grid; width: 100%; grid-template-columns: minmax(0, 1.6fr) minmax(0, .8fr) minmax(0, 1fr); gap: 10px; align-items: center; justify-content: stretch; }
.select { width: 100%; height: 36px; border: 1px solid #dbe1ea; border-radius: 8px; padding: 0 12px; background: #fff; color: #1e293b; outline: none; font-size: 13px; cursor: pointer; transition: all .18s ease; }
.select:hover { border-color: #b8bfd1; }
.select:focus { border-color: var(--db-accent); box-shadow: 0 0 0 3px var(--db-accent-ring); }
.anchor-dropdown { position: relative; min-width: 0; }
.anchor-search { height: 36px; border: 1px solid #dbe1ea; border-radius: 8px; padding: 0 12px; background: #fff; color: #1e293b; outline: none; font-size: 13px; width: 100%; transition: all .18s ease; }
.anchor-search:hover { border-color: #b8bfd1; }
.anchor-search:focus { border-color: var(--db-accent); box-shadow: 0 0 0 3px var(--db-accent-ring); }
.anchor-menu { position: absolute; top: 40px; left: 0; right: 0; z-index: 200; max-height: 260px; overflow-y: auto; display: none; background: #fff; border: 1px solid var(--db-line); border-radius: 10px; box-shadow: var(--db-shadow-lg); }
.anchor-menu.open { display: block; }
.anchor-option { display: flex; align-items: center; gap: 8px; padding: 8px 12px; cursor: pointer; font-size: 13px; color: #1e293b; transition: background .18s ease; }
.anchor-option:hover { background: var(--db-surface-dim); }
.anchor-option.selected { background: var(--db-accent-soft); color: var(--db-accent-deep); }
.anchor-avatar { width: 24px; height: 24px; border-radius: 50%; object-fit: cover; background: var(--db-accent-soft); color: var(--db-accent); display: inline-flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; flex-shrink: 0; overflow: hidden; }
.anchor-avatar img { width: 100%; height: 100%; object-fit: cover; }
.date-range-field { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; min-width: 0; padding: 0 12px; border: 1px solid #dbe1ea; border-radius: 8px; background: #fff; height: 36px; transition: all .18s ease; }
.date-range-field:hover { border-color: #b8bfd1; }
.date-range-field:focus-within { border-color: var(--db-accent); box-shadow: 0 0 0 3px var(--db-accent-ring); }
.date-input { position: absolute; top: 0; bottom: 0; width: 50%; height: 100%; opacity: 0; cursor: pointer; z-index: 2; border: 0; padding: 0; }
.date-input-start { left: 0; }
.date-input-end { right: 0; }
.date-range-text { position: relative; z-index: 3; pointer-events: auto; cursor: pointer; white-space: nowrap; color: #1e293b; font-size: 13px; }
.date-range-sep { color: #94a3b8; pointer-events: none; font-weight: 700; }
/* 与直播复盘共用轻量日历提示，明确整个组合框支持日期选择。 */
.date-range-field::after { content: ""; width: 14px; height: 14px; margin-left: 12px; flex: 0 0 auto; border: 1.8px solid var(--db-muted); border-radius: 3px; background: linear-gradient(var(--db-muted), var(--db-muted)) 2px 3px / 10px 1.8px no-repeat; opacity: .8; }
.btn { height: 36px; padding: 0 16px; border-radius: 8px; border: none; outline: none; font-size: 13px; font-weight: 700; cursor: pointer; transition: all .18s ease; white-space: nowrap; }
.btn-primary { background: var(--db-accent); color: #fff; font-weight: 800; box-shadow: 0 2px 6px rgba(127,86,217,.16); }
.btn-primary:hover { background: var(--db-accent-deep); box-shadow: 0 4px 10px rgba(127,86,217,.24); transform: translateY(-1px); }
.btn-primary:active { transform: translateY(0); box-shadow: 0 2px 6px rgba(127,86,217,.16); }
/* 查询中禁用态：保持品牌底色但降透明度，不允许 hover 浮起，避免重复点击错觉。 */
.btn-primary:disabled, .btn-primary:disabled:hover { background: var(--db-accent); box-shadow: 0 2px 6px rgba(127,86,217,.16); opacity: .6; cursor: not-allowed; transform: none; }
/* 筛选校验错误在面板内联展示，取代原生 alert。 */
.filter-error { margin-top: 10px; padding: 9px 12px; border: 1px solid #f4bdb7; border-radius: 9px; background: var(--db-red-soft); color: var(--db-red); font-size: 12px; font-weight: 700; }
.filter-error[hidden] { display: none; }

/* 本地智能引导条 */
.local-ai-guide { display: none; grid-template-columns: 38px minmax(0, 1fr) auto; gap: 13px; align-items: center; margin-bottom: 20px; padding: 16px 18px; border: 1px solid #f0dcbd; border-left: 3px solid var(--db-orange); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-sm); }
.local-ai-guide.show { display: grid; }
.local-ai-guide-icon { width: 38px; height: 38px; border-radius: 10px; background: var(--db-orange-soft); color: var(--db-orange); display: inline-flex; align-items: center; justify-content: center; font-size: 18px; font-weight: 900; }
.local-ai-guide-title { color: var(--db-ink); font-size: 14px; font-weight: 800; }
.local-ai-guide-badge { display: inline-flex; margin-right: 8px; padding: 4px 7px; border-radius: 999px; background: var(--db-orange); color: #fff; font-size: 11px; line-height: 1; }
.local-ai-guide-desc { margin-top: 5px; color: var(--db-muted); font-size: 12px; line-height: 1.5; }
/* 紫底白字按钮必须是 body.ops-page 前缀：ops-classic.css 的 body.ops-page a { color: var(--ops-primary) !important }
   特异性为 0-1-2，会压过裸类名（0-1-0）的 color:#fff !important，导致白字变紫、在紫底上不可见。 */
body.ops-page .local-ai-guide-action { height: 36px; padding: 0 14px; border-radius: 8px; background: var(--db-accent); color: #fff !important; display: inline-flex; align-items: center; text-decoration: none; font-size: 12px; font-weight: 800; white-space: nowrap; transition: all .18s ease; box-shadow: 0 2px 6px rgba(127, 86, 217, .16); }
.local-ai-guide-action:hover { background: var(--db-accent-deep); box-shadow: 0 4px 10px rgba(127, 86, 217, .24); }

/* 状态只提供筛选范围内的背景信息；三张独立 KPI 卡（标签在上、数字在下）比连体条更易扫读，
   同时保持低视觉权重，不与首要动作争夺注意力。 */
.metrics-strip { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-bottom: 32px; }
/* 指标卡沿用商品复盘指标单元格的局部光晕与数字渐变，反馈集中在被指向的卡片内部。 */
.metric-card { position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; min-width: 0; overflow: hidden; padding: 16px 18px; border: 1px solid var(--db-line); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-sm); color: inherit; text-decoration: none; transition: all .4s cubic-bezier(.4, 0, .2, 1); }
body.ops-page a.metric-card, body.ops-page a.metric-card:hover { color: inherit !important; }
.metric-card:hover { border-color: rgba(127, 86, 217, .3); box-shadow: 0 12px 32px rgba(127, 86, 217, .16), inset 0 1px 0 rgba(255, 255, 255, .9); transform: translateY(-4px) scale(1.02); }
.metric-card::before { content: ''; position: absolute; top: -20px; right: -20px; width: 100px; height: 100px; background: radial-gradient(circle, rgba(127, 86, 217, .08), transparent 70%); pointer-events: none; transition: all .4s cubic-bezier(.4, 0, .2, 1); }
.metric-card:hover::before { top: -30px; right: -30px; width: 120px; height: 120px; background: radial-gradient(circle, rgba(127, 86, 217, .12), transparent 70%); }
.metric-card:focus-visible { outline: 3px solid var(--db-accent-ring); outline-offset: 2px; }
.metric-label { position: relative; z-index: 1; overflow: hidden; color: var(--db-muted); font-size: 12px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.metric-number { position: relative; z-index: 1; display: flex; flex-shrink: 0; align-items: baseline; gap: 4px; }
.metric-value { color: var(--db-ink); font-size: 30px; line-height: 1; font-weight: 900; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; transition: all .4s cubic-bezier(.4, 0, .2, 1); }
.metric-card:hover .metric-value { background: linear-gradient(135deg, var(--db-accent) 0%, #9b87f5 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.metric-unit { color: var(--db-faint); font-size: 11px; font-weight: 700; }
.metric-card--leads.is-highlight { background: var(--db-green-soft); border-color: rgba(6, 118, 71, .2); }
.metric-card--leads.is-highlight .metric-value { color: var(--db-green); }

.next-analysis-panel { margin: 0 0 36px; }
.next-analysis-list { display: grid; gap: 16px; }
/* 首要动作卡：白底+左侧 4px 语义色条承担类别语义，品牌紫收敛为点缀。 */
.next-analysis-primary { display: grid; gap: 18px; padding: 22px 24px; border: 1px solid var(--db-line); border-left: 4px solid var(--db-accent); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-md); }
.next-analysis-primary--intent { border-left-color: var(--db-green); }
.next-analysis-primary--resistance { border-left-color: var(--db-red); }
.next-analysis-primary--attention { border-left-color: var(--db-red); }
.next-analysis-primary--reusable { border-left-color: var(--db-green); }
.next-analysis-primary-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.next-analysis-primary-meta { display: inline-flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 7px; }
.next-analysis-priority { display: inline-flex; padding: 5px 10px; border-radius: 999px; background: var(--db-accent); color: #fff; font-size: 11px; font-weight: 900; letter-spacing: .02em; }
.next-analysis-kind { color: var(--db-accent-deep); font-size: 11px; font-weight: 800; }
.next-analysis-primary--intent .next-analysis-priority, .next-analysis-primary--intent .next-analysis-kind { color: var(--db-green); }
.next-analysis-primary--intent .next-analysis-priority { background: var(--db-green); color: #fff; }
.next-analysis-primary--resistance .next-analysis-priority, .next-analysis-primary--attention .next-analysis-priority { background: var(--db-red); }
.next-analysis-primary--resistance .next-analysis-kind, .next-analysis-primary--attention .next-analysis-kind { color: var(--db-red); }
.next-analysis-primary--reusable .next-analysis-priority { background: var(--db-green); }
.next-analysis-primary--reusable .next-analysis-kind { color: var(--db-green); }
.next-analysis-primary-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(280px, .6fr); gap: 24px; align-items: center; }
.next-analysis-primary-copy { min-width: 0; }
.next-analysis-finding { display: block; overflow: hidden; margin-bottom: 6px; color: var(--db-muted); font-size: 11px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.next-analysis-primary-copy h3 { color: var(--db-ink); font-size: 21px; line-height: 1.35; letter-spacing: -0.01em; }
/* 比较类证据直接展示指标名称和变化幅度，避免只展示无上下文的“1项”。 */
.next-analysis-evidence { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 14px; align-items: center; padding: 14px 16px; border: 1px solid var(--db-line); border-radius: 10px; background: var(--db-surface); box-shadow: var(--db-shadow-sm); }
.next-analysis-primary--resistance .next-analysis-evidence { border-color: rgba(180, 35, 24, .18); background: rgba(255, 241, 240, .45); }
.next-analysis-primary--intent .next-analysis-evidence { border-color: rgba(6, 118, 71, .18); background: rgba(236, 253, 243, .5); }
.next-analysis-primary--attention .next-analysis-evidence { border-color: rgba(180, 35, 24, .18); background: rgba(255, 241, 240, .45); }
.next-analysis-primary--reusable .next-analysis-evidence { border-color: rgba(6, 118, 71, .18); background: rgba(236, 253, 243, .5); }
.next-analysis-evidence-total { display: flex; align-items: baseline; min-width: 72px; color: var(--db-accent-deep); }
.next-analysis-primary--resistance .next-analysis-evidence-total { color: var(--db-red); }
.next-analysis-primary--intent .next-analysis-evidence-total { color: var(--db-green); }
.next-analysis-primary--attention .next-analysis-evidence-total { color: var(--db-red); }
.next-analysis-primary--reusable .next-analysis-evidence-total { color: var(--db-green); }
.next-analysis-evidence-total strong { font-size: 34px; line-height: 1; font-weight: 900; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
.next-analysis-evidence-total span { margin-left: 3px; font-size: 12px; font-weight: 800; }
.next-analysis-evidence-copy { min-width: 0; }
.next-analysis-evidence-copy > b { display: block; color: var(--db-ink); font-size: 12px; }
.next-analysis-evidence-copy > small { display: block; margin-top: 2px; color: var(--db-muted); font-size: 10px; }
.next-analysis-evidence-wrap { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: end; min-width: 0; }
.next-analysis-evidence-wrap .next-analysis-action { align-self: end; justify-self: end; margin-bottom: 8px; }
.next-analysis-evidence--metrics { grid-template-columns: minmax(0, 1fr); gap: 10px; padding: 10px; }
.next-analysis-evidence-breakdown { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.next-analysis-evidence-breakdown span { display: grid; gap: 6px; min-width: 0; padding: 11px 12px; border: 1px solid rgba(127, 86, 217, .12); border-radius: 9px; background: rgba(255, 255, 255, .72); }
.next-analysis-evidence-breakdown b { overflow: hidden; color: var(--db-muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.next-analysis-evidence-breakdown strong { color: var(--db-ink); font-size: 20px; line-height: 1; font-variant-numeric: tabular-nums; }
.next-analysis-primary--attention .next-analysis-evidence-breakdown strong { color: var(--db-red); }
.next-analysis-primary--reusable .next-analysis-evidence-breakdown strong { color: var(--db-green); }
/* 行动入口只保留文字和箭头，避免把入口误读成卡片按钮或再次强调整行可点。 */
.next-analysis-action, .next-analysis-queue-action, .attention-card-action { display: inline-flex; align-items: center; color: var(--db-accent-deep); font-size: 12px; font-weight: 800; text-decoration: none; white-space: nowrap; transition: color .18s ease, transform .18s ease; }
.next-analysis-action:hover, .next-analysis-queue-action:hover, .attention-card-action:hover { color: var(--db-accent); text-decoration: underline; transform: translateX(2px); }
.next-analysis-action:focus-visible, .next-analysis-queue-action:focus-visible, .attention-card-action:focus-visible { outline: 3px solid var(--db-accent-ring); outline-offset: 3px; }
.next-analysis-queue { overflow: hidden; border: 1px solid var(--db-line); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-sm); }
/* 队列头部用白底+发丝线而非灰底块：队列是次级信息，头部视觉权重必须低于主卡。 */
.next-analysis-queue-head { display: flex; align-items: center; justify-content: space-between; padding: 13px 18px; border-bottom: 1px solid var(--db-line); }
.next-analysis-queue-head h3 { color: var(--db-ink); font-size: 13px; }
.next-analysis-queue-list { display: grid; }
.next-analysis-queue-item { display: grid; grid-template-columns: 32px minmax(0, 1fr) minmax(150px, auto) auto; gap: 14px; align-items: center; padding: 13px 18px; border-top: 1px solid var(--db-line); }
.next-analysis-queue-item:first-child { border-top: 0; }
/* 序号做成小方块 chip：比裸数字更能锚定每行起点，降低扫读成本。 */
.next-analysis-rank { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 7px; background: var(--db-surface-dim); color: var(--db-faint); font-size: 11px; font-weight: 900; }
.next-analysis-queue-copy, .next-analysis-queue-evidence { display: grid; min-width: 0; }
.next-analysis-queue-copy-meta { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px; min-width: 0; }
/* kind chip 与复盘状态/隐私标签是同一 flex 行内的兄弟节点，必须跟随父容器居中对齐；
   单独的 align-self 会让它与行内最高标签（隐私徽标 22px）错位，视觉上像高度不一致。 */
.next-analysis-queue-copy small { display: inline-flex; width: fit-content; padding: 3px 7px; border-radius: 999px; background: var(--db-surface-dim); color: var(--db-muted); font-size: 10px; font-weight: 800; line-height: 1; }
.next-analysis-queue-item--intent .next-analysis-queue-copy small { background: var(--db-green-soft); color: var(--db-green); }
.next-analysis-queue-item--resistance .next-analysis-queue-copy small, .next-analysis-queue-item--attention .next-analysis-queue-copy small { background: var(--db-red-soft); color: var(--db-red); }
.next-analysis-queue-item--reusable .next-analysis-queue-copy small { background: var(--db-green-soft); color: var(--db-green); }
.next-analysis-queue-copy strong { overflow: hidden; margin-top: 4px; color: var(--db-ink); font-size: 13px; text-overflow: ellipsis; white-space: nowrap; }
.next-analysis-queue-evidence { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 6px; min-width: 0; }
.next-analysis-queue-evidence strong { color: var(--db-ink); font-size: 15px; font-weight: 900; letter-spacing: -0.01em; font-variant-numeric: tabular-nums; }
.next-analysis-queue-item--intent .next-analysis-queue-evidence strong { color: var(--db-green); }
.next-analysis-queue-item--resistance .next-analysis-queue-evidence strong { color: var(--db-red); }
.next-analysis-queue-item--attention .next-analysis-queue-evidence strong { color: var(--db-red); }
.next-analysis-queue-item--reusable .next-analysis-queue-evidence strong { color: var(--db-green); }
.next-analysis-queue-evidence small { color: var(--db-faint); font-size: 10px; }
.next-analysis-queue-evidence > span { display: grid; justify-items: end; gap: 2px; min-width: 0; padding: 6px 8px; border-radius: 8px; background: var(--db-surface-dim); }
.next-analysis-queue-evidence > span strong { font-size: 13px; }
.next-analysis-queue-evidence > span small { max-width: 86px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.review-status-tag { display: inline-flex; align-items: center; width: fit-content; padding: 3px 7px; border-radius: 999px; background: var(--db-surface-dim); color: var(--db-muted); font-size: 10px; font-weight: 800; line-height: 1; white-space: nowrap; }
.review-status-tag--done { background: var(--db-green-soft); color: var(--db-green); }
.review-status-tag--comment_analyzed { background: var(--db-accent-soft); color: var(--db-accent-deep); }
.review-status-tag--pending { background: var(--db-orange-soft); color: var(--db-orange); }
.review-status-tag--failed { background: var(--db-red-soft); color: var(--db-red); }
.privacy-badge { display: inline-flex; align-items: center; gap: 4px; min-height: 22px; padding: 0 7px; border: 1px solid #fecdca; border-radius: 999px; background: #fff1f0; color: #b42318; font-size: 11px; line-height: 1; font-weight: 600; white-space: nowrap; }
.privacy-badge svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
/* 元信息容器会统一把 span 染成灰色；隐私边界必须保持红色，盾牌通过 currentColor 同步。 */
.session-signal-head .privacy-badge, .next-analysis-primary-meta .privacy-badge, .next-analysis-queue-copy-meta .privacy-badge { color: #b42318; }
.attention-card-review-status { font-size: 10px; }
.next-analysis-empty { padding: 18px 2px 2px; color: var(--db-muted); }
.next-analysis-empty strong { color: var(--db-ink); font-size: 14px; }
.next-analysis-empty p { margin-top: 5px; font-size: 12px; }

/* 提升和下降是推荐依据，不再复制行动卡；上下两个独立面板用留白完成分组。
   指标明细固定一项一行，避免同一场的指标在横向网格中跳读。 */
.change-evidence-section { margin-bottom: 36px; }
.change-evidence-board { display: grid; grid-template-columns: 1fr; gap: 16px; align-items: start; overflow: visible; }
.change-lane { min-width: 0; overflow: hidden; border: 1px solid var(--db-line); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-sm); }
/* 每条泳道都是独立面板；留白负责分组，避免提升和下降被误读为同一份列表。 */
.change-lane + .change-lane { border-top: 1px solid var(--db-line); }
.change-lane-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 15px 18px; border-bottom: 1px solid var(--db-line); }
.change-lane-head h3 { display: flex; align-items: center; gap: 8px; color: var(--db-ink); font-size: 14px; font-weight: 800; }
.change-lane-head h3::before { width: 8px; height: 8px; flex-shrink: 0; border-radius: 50%; content: ''; }
.change-lane--positive .change-lane-head h3::before { background: var(--db-green); }
.change-lane--negative .change-lane-head h3::before { background: var(--db-red); }
.change-lane-head p { color: var(--db-muted); font-size: 11px; text-align: right; }
/* 空态只保留一行说明：此前大 padding 的灰盒在双泳道都无数据时叠出两块大白盒，
   被用户误读为页面异常；文案本身已说明原因，不需要容器撑场。
   注意 .empty 渲染在 .reusable-list/.attention-list 内部，不是泳道直接子级，
   必须用后代选择器（旧版写成子选择器，从未命中，是一直存在的死规则）。
   ops-classic 把 .ops-page .empty 归一化为带边框/圆角/阴影的卡片且全 !important，
   泳道内必须逐项 !important 复位，否则卡片里再套一张卡片、内外边框重叠；
   横向 padding 归 0：列表容器已有 18px 内边距，再写 18px 会让文案比标题多缩进一级。 */
.change-lane .empty { padding: 13px 0 15px; background: none !important; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; text-align: left; }
/* 场次之间用带边框圆角的小卡分隔（而非发丝线行），每场直播的入口单独承担跳转。 */
.reusable-list, .attention-list { display: grid; gap: 0; padding: 0 18px; }
.panel-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 20px 24px; border-bottom: 1px solid var(--db-line); background: var(--db-surface); }
.panel-head-right { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex-shrink: 0; }
/* 面板标题 15px，与 19px 章节标题（.section-title）拉开层级。 */
.panel-title { color: var(--db-ink); font-size: 15px; line-height: 1.3; font-weight: 800; letter-spacing: 0; }
.panel-note { color: var(--db-muted); font-size: 12px; line-height: 1.4; text-align: right; }
.link { color: var(--db-accent-deep); font-size: 12px; font-weight: 800; text-decoration: none; white-space: nowrap; }
.link:hover { text-decoration: underline; }

/* 待核验信号仍属于辅助诊断，章节间距与行动区拉开。 */
.overview-section { margin-bottom: 36px; }
.overview-section[hidden] { display: none; }
.section-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.section-title { color: var(--db-ink); font-size: 19px; font-weight: 800; letter-spacing: -0.01em; }
.section-heading p { color: var(--db-muted); font-size: 12px; text-align: right; }
/* 行动区说明位只在空态/处理中写动态文案；有候选时为空，空节点不残留占位。 */
#nextAnalysisNote:empty { display: none; }
.section-heading-actions { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }
.overview-section > .ranking-panel { width: 100%; }
.review-history { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--db-line); }
.review-history > strong { display: block; margin-bottom: 7px; color: var(--db-muted); font-size: 11px; }
.review-history > div { display: flex; flex-wrap: wrap; gap: 6px; }
.review-history span { padding: 5px 8px; border-radius: 7px; background: var(--db-green-soft); color: var(--db-green); font-size: 11px; font-weight: 700; }

/* 排行榜切换按钮 - 优化为品牌紫风格 */
.ranking-sort-toggle {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px;
  border-radius: 10px;
  background: var(--db-surface-dim);
  border: 1px solid var(--db-line);
}
.sort-btn {
  padding: 6px 13px;
  border: none;
  border-radius: 7px;
  background: transparent;
  color: var(--db-muted);
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
  transition: all .18s ease;
  white-space: nowrap;
}
.sort-btn:hover {
  color: var(--db-text);
  background: rgba(127, 86, 217, .08);
}
.sort-btn.active {
  background: var(--db-accent);
  color: #fff;
  box-shadow: 0 2px 8px rgba(127, 86, 217, .20), 0 1px 3px rgba(15, 23, 42, .10);
}

/* 场次卡：独立边框+圆角+阴影的迷你卡片，场与场之间一眼可分；入口单独承担跳转。 */
.attention-card {
  position: relative;
  display: block;
  min-width: 0;
  padding: 16px 0;
  border-top: 1px solid var(--db-line);
  background: transparent;
}
.attention-card.reusable-card {
  border-top-color: rgba(6, 118, 71, .34);
  background: rgba(236, 253, 243, .28);
}
.reusable-list .attention-card:first-child, .attention-list .attention-card:first-child { border-top: 0; }

/* 卡片序号 */
.attention-card-sequence {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--db-surface-dim);
  color: var(--db-muted);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 800;
  line-height: 1;
}

/* 同一个异常分数同时控制排序与这三档视觉标记；卡片化后严重度同时染边框，扫外轮廓即可分级。 */
.attention-card--critical {
  border-top-color: rgba(180, 35, 24, .38);
  background: rgba(255, 241, 240, .3);
}
.attention-card--warning {
  border-top-color: rgba(181, 71, 8, .34);
  background: rgba(255, 246, 237, .3);
}
.attention-card--watch {
  background: var(--db-surface);
}

/* 标记与直播名称必须在同一行；首页不展示主播名。 */
.attention-card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
.attention-card-name-line { display: flex; align-items: center; gap: 8px; min-width: 0; }
.attention-card-room { min-width: 0; overflow: hidden; color: var(--db-ink); font-size: 15px; font-weight: 800; text-overflow: ellipsis; white-space: nowrap; }
.attention-card-time { flex-shrink: 0; color: var(--db-faint); font-size: 12px; }

.signal-tag { display: inline-flex; align-items: center; padding: 4px 9px; border-radius: 999px; font-size: 11px; font-weight: 700; line-height: 1; background: var(--db-surface-dim); color: var(--db-muted); }
.signal-tag--critical { background: var(--db-red-soft); color: var(--db-red); }
.signal-tag--warning { background: var(--db-orange-soft); color: var(--db-orange); }
.signal-tag--watch { background: var(--db-orange-soft); color: var(--db-orange); }
.signal-tag--positive { background: var(--db-green-soft); color: var(--db-green); }

/* 指标明细按“指标、本场、历史、变化”四列对齐，每个指标只占一行，便于横向核对同一指标的四个事实。 */
.attention-anomaly-list { display: grid; grid-template-columns: 1fr; margin-bottom: 12px; border-top: 1px solid var(--db-line); }
.attention-anomaly-row { display: grid; grid-template-columns: minmax(110px, 1.1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(100px, .8fr); gap: 12px; align-items: center; min-width: 0; padding: 10px 0; border-bottom: 1px solid var(--db-line); color: var(--db-muted); font-size: 11px; line-height: 1.35; }
.attention-anomaly-row strong { color: var(--db-ink); font-size: 12px; font-weight: 800; font-variant-numeric: tabular-nums; }
.attention-anomaly-label { min-width: 0; color: var(--db-text); font-size: 12px; font-weight: 800; }
.attention-anomaly-row > span { min-width: 0; }
.attention-anomaly-delta { justify-self: end; min-width: 0; max-width: 100%; overflow: hidden; padding: 3px 8px; border-radius: 999px; background: var(--db-red-soft); color: var(--db-red); font-size: 11px; font-weight: 800; font-variant-numeric: tabular-nums; text-align: right; text-overflow: ellipsis; white-space: nowrap; }
.reusable-anomaly-delta { background: var(--db-green-soft); color: var(--db-green); }

.attention-card-footer { display: flex; justify-content: flex-end; margin-top: 10px; }
/* hover 时入口文字右移 2px，给"可进入"一个方向性暗示。 */

/* 待核验信号内部两个信号组沿用数据提升/下降的泳道式上下阅读。 */
.user-signals-workbench { display: grid; grid-template-columns: minmax(0, 1fr); overflow: hidden; border: 1px solid var(--db-line); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-sm); }
.user-signal-column { min-width: 0; }
.user-signal-column[hidden] { display: none; }
.signal-groups { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; padding: 16px; background: var(--db-surface-dim); }
.signal-groups[hidden] { display: none; }
.signal-group { min-width: 0; overflow: hidden; border: 1px solid var(--db-line); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-sm); }
.signal-group-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 15px 18px; border-bottom: 1px solid var(--db-line); }
.signal-group-head h4 { display: flex; align-items: center; gap: 8px; color: var(--db-ink); font-size: 14px; font-weight: 800; }
.signal-group-head h4::before { width: 7px; height: 7px; flex-shrink: 0; border-radius: 50%; content: ''; }
.signal-panel--resistance .signal-group-head h4::before { background: var(--db-red); }
.signal-panel--intent .signal-group-head h4::before { background: var(--db-green); }
.signal-group-head span { overflow: hidden; color: var(--db-muted); font-size: 11px; text-align: right; text-overflow: ellipsis; white-space: nowrap; }
.session-signal-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; padding: 14px 18px 18px; background: var(--db-surface-dim); }
/* 每场信号保持原字段和顺序，但以独立卡片承载，避免整页被发丝线切成连续长行。 */
.session-signal-item { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "head head" "meta footer"; column-gap: 12px; row-gap: 10px; min-width: 0; padding: 14px; border: 1px solid var(--db-line); border-left: 3px solid var(--db-line); border-radius: 10px; background: var(--db-surface); box-shadow: var(--db-shadow-sm); text-decoration: none; transition: background .18s ease, border-color .18s ease, box-shadow .18s ease, transform .18s ease; }
.session-signal-list > .empty { grid-column: 1 / -1; }
.session-signal-item--resistance .session-signal-count { color: var(--db-red); }
.session-signal-item--intent .session-signal-count { color: var(--db-green); }
.session-signal-item--resistance { border-left-color: var(--db-red); }
.session-signal-item--intent { border-left-color: var(--db-green); }
.session-signal-item.is-disabled { opacity: .75; }
/* 整卡可点时是 <a>，必须压住 ops-classic 的 body.ops-page a 全局紫链规则，否则卡片文字被染色。 */
body.ops-page a.session-signal-item,
body.ops-page a.session-signal-item:hover { color: inherit !important; }
body.ops-page a.session-signal-item:hover { background: var(--db-surface); border-color: rgba(127, 86, 217, .24); box-shadow: var(--db-shadow-md); transform: translateY(-1px); }
body.ops-page a.session-signal-item:hover .session-signal-action { text-decoration: underline; transform: translateX(2px); }
.session-signal-head { grid-area: head; display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.session-signal-head strong { overflow: hidden; color: var(--db-ink); font-size: 14px; font-weight: 800; text-overflow: ellipsis; white-space: nowrap; }
.session-signal-head span { flex-shrink: 0; color: var(--db-faint); font-size: 11px; }
.session-signal-head-meta { display: inline-flex; align-items: center; gap: 7px; }
.session-signal-head-meta .review-status-tag { color: var(--db-muted); }
.session-signal-head-meta .review-status-tag--done { color: var(--db-green); }
.session-signal-head-meta .review-status-tag--comment_analyzed { color: var(--db-accent-deep); }
.session-signal-head-meta .review-status-tag--pending { color: var(--db-orange); }
.session-signal-head-meta .review-status-tag--failed { color: var(--db-red); }
.session-signal-time { color: var(--db-faint) !important; font-size: 11px !important; }
.session-signal-meta { grid-area: meta; align-self: end; display: flex; flex-wrap: wrap; gap: 6px 10px; color: var(--db-muted); font-size: 11px; line-height: 1.4; }
.session-signal-count { color: var(--db-accent-deep); font-weight: 800; }
.session-signal-breakdown { display: flex; flex-wrap: wrap; gap: 6px; }
.session-signal-category { display: inline-flex; align-items: baseline; gap: 4px; padding: 3px 7px; border-radius: 999px; background: var(--db-surface-dim); }
.session-signal-category small { color: var(--db-muted); font-size: 10px; }
.session-signal-category strong { color: var(--db-ink); font-size: 11px; font-weight: 800; font-variant-numeric: tabular-nums; }
.session-signal-item--intent .session-signal-category strong { color: var(--db-green); }
.session-signal-item--resistance .session-signal-category strong { color: var(--db-red); }
.session-signal-footer { grid-area: footer; align-self: end; display: flex; justify-content: flex-end; }
.session-signal-action { display: inline-flex; align-items: center; color: var(--db-accent-deep); font-size: 12px; font-weight: 800; text-decoration: none; transition: transform .18s ease; }
/* 下划线只出现在可点卡片上（见 a.session-signal-item:hover 规则），禁用态不能给出可点暗示。 */
.session-signal-action.is-disabled { color: var(--db-faint); cursor: not-allowed; }

/* 排行面板内部使用行，不再嵌套第二层卡片。主播行整行为 <a>，跳转该主播场次分析。 */
.ranking-item {
  display: grid;
  grid-template-columns: 24px 40px minmax(0, 1fr);
  gap: 10px;
  align-items: center;
  margin: 0 -8px;
  padding: 12px 8px;
  border-top: 1px solid var(--db-line);
  border-radius: 10px;
  color: inherit;
  text-decoration: none;
  transition: background .18s ease;
}
.ranking-item:first-child { border-top: 0; }
/* 整行 <a> 必须压住 ops-classic 的 body.ops-page a 全局紫链规则，理由同 session-signal-item。 */
body.ops-page a.ranking-item,
body.ops-page a.ranking-item:hover { color: inherit !important; text-decoration: none; }
body.ops-page a.ranking-item:hover { background: var(--db-surface-dim); }
body.ops-page a.ranking-item:hover .ranking-name { color: var(--db-accent-deep); }

.ranking-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: var(--db-accent-soft);
  color: var(--db-accent);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  font-weight: 900;
  flex-shrink: 0;
  overflow: hidden;
}
.ranking-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ranking-info { min-width: 0; }
.ranking-name {
  margin-bottom: 6px;
  color: var(--db-ink);
  font-size: 15px;
  font-weight: 800;
  letter-spacing: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ranking-stats {
  display: flex;
  align-items: center;
  gap: 12px;
  color: var(--db-muted);
  font-size: 12px;
  line-height: 1.3;
}
.ranking-stat {
  display: flex;
  align-items: center;
  gap: 4px;
}
.ranking-stat strong {
  color: var(--db-text);
  font-weight: 800;
}
.ranking-stat--primary strong {
  color: var(--db-accent);
}

/* 销售线索 banner */
/* 数据口径 */
.data-boundary { display: block; margin-bottom: 0; padding: 14px 16px; border: 1px solid var(--db-line); border-radius: var(--db-radius); background: var(--db-surface); box-shadow: var(--db-shadow-sm); color: var(--db-muted); font-size: 11px; line-height: 1.5; }
.data-boundary summary { color: var(--db-text); font-weight: 800; cursor: pointer; }
.data-boundary > div { display: grid; gap: 5px; margin-top: 9px; }
.data-boundary span::before { content: "· "; color: var(--db-accent); font-weight: 900; }
.empty { padding: 40px 14px; color: var(--db-faint); font-size: 13px; text-align: center; }
/* 加载骨架：脉冲条占位高度接近真实卡片，替代“加载中...”纯文本，减少渲染跳变。 */
.loading-skeleton { display: grid; grid-column: 1 / -1; gap: 14px; }
.loading-skeleton span { height: 78px; border-radius: var(--db-radius); background: linear-gradient(90deg, var(--db-surface-dim) 25%, #eceff6 50%, var(--db-surface-dim) 75%); background-size: 200% 100%; animation: db-skeleton-pulse 1.2s ease-in-out infinite; }
@keyframes db-skeleton-pulse { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.loading { opacity: .68; }

@media (max-width: 960px) {
  .next-analysis-primary-body { grid-template-columns: 1fr; gap: 16px; }
  /* 指标保持一项一行，窄屏只压缩卡片宽度，不改变指标阅读顺序。 */
  .attention-anomaly-list { grid-template-columns: 1fr; }
}

@media (max-width: 720px) {
  /* 移动端隐藏侧栏、page-tabs-bar/main-content 归零已由 nav.css 全局抽屉规则接管，
     此处只保留 dashboard 页面自身的局部布局适配，禁止加回 sidebar display:none。 */
  body.ops-page.ops-dashboard[class] .main-content,
  body.ops-page.ops-dashboard[class].sidebar-collapsed .main-content { left: 0 !important; }
  /* 小屏取消吸顶与毛玻璃：sticky 会占用宝贵纵向空间，且避免与抽屉导航层级互相干扰。 */
  .filter-panel { position: static; background: var(--db-surface); -webkit-backdrop-filter: none; backdrop-filter: none; }
  .ops-dashboard .container { padding: 20px 14px 42px; }
  .toolbar { grid-template-columns: 1fr; }
  .local-ai-guide { grid-template-columns: 1fr; }
  .local-ai-guide-action { width: 100%; justify-content: center; }
  .metrics-strip { gap: 10px; }
  .metric-card { gap: 6px; padding: 13px 14px; }
  .metric-label { white-space: normal; }
  .metric-value { font-size: 24px; }
  .next-analysis-primary { padding: 18px; }
  .next-analysis-primary-copy h3 { font-size: 19px; }
  .next-analysis-queue-item { grid-template-columns: 28px minmax(0, 1fr) auto; gap: 10px; }
  .next-analysis-queue-evidence { grid-column: 2; justify-content: flex-start; }
  .next-analysis-queue-action { grid-row: 1 / span 2; grid-column: 3; }
  .panel-head { flex-direction: column; align-items: flex-start; padding: 16px 18px; }
  .panel-head-right { align-items: flex-start; }
  .panel-note { text-align: left; }
  .section-heading { flex-direction: column; align-items: flex-start; gap: 5px; }
  .section-heading p { text-align: left; }
  .section-heading-actions { align-items: flex-start; }
  .change-lane-head { align-items: flex-start; flex-direction: column; gap: 4px; }
  .change-lane-head p { text-align: left; }
  .attention-card { padding: 14px; }
  .attention-card-head { flex-direction: column; gap: 4px; }
  .attention-card-name-line { width: 100%; }
  .signal-groups { grid-template-columns: 1fr; gap: 12px; padding: 12px; }
  .session-signal-list { grid-template-columns: 1fr; }
  /* 小屏继续保持指标单列，信号卡元信息与操作入口恢复纵向堆叠。 */
  .attention-anomaly-list { grid-template-columns: 1fr; }
  .session-signal-item { grid-template-columns: 1fr; grid-template-areas: "head" "meta" "footer"; }
  .session-signal-footer { justify-content: flex-start; }
}

@media (max-width: 480px) {
  .metrics-strip { grid-template-columns: 1fr; }
  .metric-card { flex-direction: row; align-items: center; justify-content: space-between; }
  .next-analysis-evidence-wrap { grid-template-columns: 1fr; gap: 8px; }
  .next-analysis-evidence-wrap .next-analysis-action { justify-self: start; margin-bottom: 0; }
  .next-analysis-evidence { grid-template-columns: 1fr; gap: 8px; }
  .next-analysis-evidence-total { min-width: 0; }
  .next-analysis-queue-item { grid-template-columns: 26px minmax(0, 1fr); }
  .next-analysis-queue-action { grid-row: auto; grid-column: 2; }
}

@media (max-width: 420px) { .panel-note { text-align: left; } }

@media (prefers-reduced-motion: reduce) {
  .metric-card, .metric-card::before, .metric-card .metric-value { transition: none; }
}
