/* ==========================================================================
 * 知数 · 视觉皮肤层（zhishu-skin.css）
 * 参考 www.workbuddy.cn 的设计语言重做整体 UI：背景、字体、字重、卡片、按钮。
 *
 * 加载位置：所有页面 CSS 链的最后一环，因此本文件是最终视觉裁决层。
 *
 * 参考站核心语言（逐条对齐）：
 *   1. 字重克制    正文 300 / 常规 400 / 标题 500，几乎不用 700+
 *   2. 纯白卡面    background:#fff + 1px brand-100 细边，无渐变底、无顶部色条
 *   3. 黑色胶囊主按钮  background:#1a1a1a + border-radius:999px + font-weight:500
 *   4. 光晕背景    纯白页底 + 顶部 SVG 高斯模糊光晕（#DAF6FF → #E8FFF4）
 *   5. 圆角体系    面板 20 / 卡片 16 / 中 12 / 小 8 / 胶囊 999
 *   6. 大留白      区块间距 96px，容器 1200–1480px
 *   7. 眉标胶囊    浅绿底 + 品牌绿字，替代原来的「短横 + 文字」
 *
 * 与旧皮肤的关系：旧 style.css 里的 --wb-* 令牌保留可用，本文件新增 --zs-*
 * 令牌并对关键组件做最终覆盖。所有装饰性色条已在 #74 删除，本层不再引入。
 * ===================================================================== */

:root {
  /* --- 文字 --- */
  --zs-text-1: #1a1a1a;
  --zs-text-2: #646464;
  --zs-text-3: #a3a3a3;
  --zs-text-4: #bfbfbf;
  --zs-text-inverse: #ffffff;

  /* --- 可读性专色（#81 实测补） ---
   * text-3 (#a3a3a3) 在白底只有 2.52 对比度，做正文说明不合格。
   * 这两枚专色只用于「必须读得清」的小字：说明文案、轴标签、眉标。
   * 装饰性极淡文字仍用 text-3 / text-4，保持层次。 */
  --zs-muted: #666666;        /* 白底 5.74 / 灰底 5.13 / 淡绿底 4.85 */
  --zs-kicker: #007a60;       /* 白底 5.31，眉标不再靠 opacity 压暗 */

  /* --- 品牌绿（与参考站一致） --- */
  --zs-brand: #00c29a;
  --zs-brand-450: #1bc69b;
  --zs-brand-ink: #009273;
  --zs-brand-ink-deep: #007a60;
  --zs-brand-100: #ddf0ec;
  --zs-brand-50: #f2fcfa;
  --zs-brand-a12: rgba(27, 198, 155, .12);

  /* --- 语义色 --- */
  --zs-success: #079d55;
  --zs-success-bg: #f3f9f6;
  --zs-blue: #4084f1;
  --zs-violet: #6351fb;
  --zs-amber: #eebf52;
  --zs-orange: #e8845f;
  --zs-red: #d53f3f;
  --zs-red-bg: #fdf1f1;

  /* --- 面 --- */
  --zs-page: #ffffff;
  --zs-card: #ffffff;
  --zs-sunken: #f7f8f9;
  --zs-chip: #f1f2f4;
  --zs-dark: #1a1a1a;
  --zs-navy-1: #1a202c;
  --zs-navy-2: #4c4f6b;

  /* --- 线 --- */
  --zs-line: #ebebeb;
  --zs-line-strong: #e0e0e0;
  --zs-line-brand: #ddf0ec;

  /* --- 圆角 --- */
  --zs-r-panel: 20px;
  --zs-r-card: 16px;
  --zs-r-md: 12px;
  --zs-r-sm: 8px;
  --zs-r-pill: 999px;

  /* --- 阴影：参考站极轻，仅悬停时抬起 --- */
  --zs-sh-1: 0 1px 2px rgba(0, 0, 0, .03);
  --zs-sh-2: 0 8px 24px rgba(0, 0, 0, .06);
  --zs-sh-3: 0 16px 40px rgba(0, 0, 0, .08);
  --zs-sh-4: 0 20px 40px rgba(0, 0, 0, .15);
  --zs-sh-dark: 0 10px 24px rgba(0, 0, 0, .16);

  /* --- 字体与动效 --- */
  --zs-font: "PingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI",
    "Microsoft YaHei", "Noto Sans SC", Roboto, "Helvetica Neue", sans-serif;
  --zs-ease: cubic-bezier(.4, 0, .2, 1);
  --zs-ease-out: cubic-bezier(.16, 1, .3, 1);

  /* --- 版心 --- */
  --zs-container: 1480px;
  --zs-gutter: 40px;
  --zs-section-gap: 88px;
  --zs-header-h: 64px;
}

/* ==========================================================================
 * 1. 页面底色与光晕背景
 * ===================================================================== */
html,
body {
  background-color: var(--zs-page) !important;
  background-image: none !important;
  color: var(--zs-text-1) !important;
  font-family: var(--zs-font) !important;
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

/* 顶部光晕：参考站用一张高斯模糊 SVG，这里同源复用。
   固定定位 + pointer-events:none，滚动时保持在视口顶部，不干扰交互。 */
body::before {
  content: "" !important;
  display: block !important;
  position: fixed;
  top: calc(var(--zs-header-h) - 120px);
  left: 50%;
  width: 1565px;
  height: 1219px;
  margin-left: -782.5px;
  background: url("./zhishu-glow.svg") no-repeat center / 100% 100%;
  opacity: .5;
  pointer-events: none;
  z-index: 0;
  animation: zs-veil-in 1.15s var(--zs-ease-out) both,
    zs-veil-breathe 5.5s ease-in-out 1.15s infinite;
}

@keyframes zs-veil-in {
  from { opacity: 0; transform: translateY(-24px) scale(.96); }
  to { opacity: .5; transform: none; }
}

@keyframes zs-veil-breathe {
  0%, 100% { opacity: .46; transform: scale(1); }
  50% { opacity: .56; transform: scale(1.04); }
}

/* 内容层必须压在光晕之上 */
.page-shell,
.dashboard-content,
.nr-shell,
.pj-shell,
.qd-shell,
.ai-index-page {
  position: relative;
  z-index: 1;
  background: transparent !important;
}

.dashboard-content main,
.nr-main,
.pj-main,
.qd-main {
  background: transparent !important;
}

::selection,
::-moz-selection {
  background: rgba(0, 194, 154, .22);
  color: #0b3d31;
}

/* ==========================================================================
 * 2. 字重体系：参考站 300 / 400 / 500，全站降重
 * ===================================================================== */
/* 正文与说明文字：细体 */
body,
p,
li,
td,
small,
.nr-hint,
.nr-note,
.section-note,
.subsection-title > small,
.hero-copy > p {
  font-weight: 300;
}

/* 常规文本 */
span,
b,
label,
input,
select,
textarea,
button {
  font-weight: 400;
}

/* 标题：500 是参考站的上限 */
h1, h2, h3, h4, h5, h6,
.section-heading h2,
.subsection-title > span,
.nr-card-title h2,
.pj-card h3,
.qd-hero h1 {
  font-weight: 500 !important;
  letter-spacing: -.01em;
}

/* 强调数值：可比标题略重，但不超过 600 */
strong,
.kn-kpi-value,
.sd-kpi-value,
.nr-plat-summary b,
.pj-stat strong,
.heat-ball,
.hero-score strong {
  font-weight: 500 !important;
}

/* 眉标 / 徽标 / 小标签：500 */
.section-kicker,
.nr-step-tag,
.owned-source-badge,
.media-type-badge {
  font-weight: 500 !important;
}

/* ==========================================================================
 * 3. 顶栏与品牌
 * ===================================================================== */
.topbar,
.floating-shell .topbar,
.dashboard-content .topbar {
  height: var(--zs-header-h);
  background: rgba(255, 255, 255, .88) !important;
  background-image: none !important;
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  border-bottom: 1px solid var(--zs-line) !important;
  box-shadow: none !important;
}

/* 品牌名：参考站是纯黑细体，不用渐变字 */
.topbar .brand,
.dashboard-content .topbar .brand {
  font-size: 22px !important;
  font-weight: 500 !important;
  letter-spacing: -.01em !important;
  color: var(--zs-text-1) !important;
  background: none !important;
  background-image: none !important;
  -webkit-background-clip: border-box !important;
  background-clip: border-box !important;
  -webkit-text-fill-color: var(--zs-text-1) !important;
  text-shadow: none !important;
}

.sidebar-brand strong {
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}

.sidebar-brand small {
  font-weight: 300;
  letter-spacing: .08em;
  color: var(--zs-text-3) !important;
}

.sidebar-brand-mark {
  border-radius: var(--zs-r-sm) !important;
  background: var(--zs-dark) !important;
  color: #fff !important;
  font-weight: 500 !important;
}

.topbar-context,
.topbar-context span {
  font-weight: 300;
  color: var(--zs-text-2) !important;
}

/* 导航项：胶囊态 */
.topnav a,
.topbar-nav a,
.nav-links a {
  border-radius: var(--zs-r-pill) !important;
  font-weight: 400;
  color: var(--zs-text-2) !important;
  transition: background .2s var(--zs-ease), color .2s var(--zs-ease);
}

.topnav a:hover,
.topbar-nav a:hover,
.nav-links a:hover {
  background: var(--zs-chip) !important;
  color: var(--zs-text-1) !important;
}

.topnav a.active,
.topbar-nav a.active,
.nav-links a.active,
.topnav a.is-active {
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
}

.user-avatar {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
  font-weight: 500 !important;
  border: 1px solid var(--zs-line) !important;
}

/* ==========================================================================
 * 4. 按钮：主按钮黑色胶囊，次按钮描边胶囊
 * ===================================================================== */
/* 主行动按钮 */
.query-btn,
.nr-btn.primary,
.pj-btn.is-primary,
.ai-query-control button,
.topbar-actions .is-primary,
.nr-submit-btn,
[data-nr-action="submit"],
.ep-save-btn {
  border: 0 !important;
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-dark) !important;
  background-image: none !important;
  color: #fff !important;
  font-weight: 500 !important;
  box-shadow: none !important;
  transition: transform .2s var(--zs-ease), box-shadow .2s var(--zs-ease),
    background .2s var(--zs-ease);
}

.query-btn:hover,
.nr-btn.primary:hover,
.pj-btn.is-primary:hover,
.ai-query-control button:hover,
.nr-submit-btn:hover,
[data-nr-action="submit"]:hover,
.ep-save-btn:hover {
  background: #000 !important;
  transform: translateY(-1px);
  box-shadow: var(--zs-sh-dark) !important;
}

/* 主按钮内的箭头 / 图标保持白色 */
.nr-btn.primary i,
.nr-btn.primary svg,
.query-btn svg {
  color: #fff !important;
}

/* 次级按钮：白底细边胶囊 */
.nr-btn.ghost,
.pj-btn.is-ghost,
.nr-tool-btn,
.nr-bulk-btn,
.topbar-actions button:not(.is-primary),
.filter-bar button:not(.query-btn),
.pj-icon-btn,
.qd-back-btn {
  border: 1px solid var(--zs-line-strong) !important;
  border-radius: var(--zs-r-pill) !important;
  background: #fff !important;
  background-image: none !important;
  color: var(--zs-text-1) !important;
  font-weight: 400 !important;
  box-shadow: none !important;
  transition: background .2s var(--zs-ease), border-color .2s var(--zs-ease),
    color .2s var(--zs-ease), transform .2s var(--zs-ease);
}

.nr-btn.ghost:hover,
.pj-btn.is-ghost:hover,
.nr-tool-btn:hover,
.nr-bulk-btn:hover,
.topbar-actions button:not(.is-primary):hover,
.filter-bar button:not(.query-btn):hover,
.qd-back-btn:hover {
  border-color: var(--zs-brand-100) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
  transform: translateY(-1px);
}

/* 批量导入按钮：保留官方绿 / 合作蓝的语义区分，但改为胶囊细边（#107） */
.nr-bulk-btn {
  border-color: var(--zs-brand-100) !important;
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
}

.nr-source[data-nr-source="partner"] .nr-bulk-btn,
[data-nr-source="partner"] .nr-bulk-btn {
  border-color: #d8e6fb !important;
  color: #1f5fc4 !important;
}

[data-nr-source="partner"] .nr-bulk-btn:hover {
  background: #f1f6fe !important;
  border-color: #4084f1 !important;
}

/* 危险操作 */
.pj-icon-btn.is-danger:hover,
.nr-btn.danger:hover {
  border-color: #f3c9c9 !important;
  background: var(--zs-red-bg) !important;
  color: var(--zs-red) !important;
}

/* 禁用态 */
.nr-btn.primary:disabled,
.nr-btn.primary.is-blocked,
.pj-btn.is-primary:disabled {
  background: var(--zs-chip) !important;
  color: var(--zs-text-4) !important;
  box-shadow: none !important;
  transform: none !important;
  cursor: not-allowed;
}

/* ==========================================================================
 * 5. 卡片：纯白 + brand-100 细边 + 16/20 圆角，无渐变底
 * ===================================================================== */
.panel,
.volume-card,
.rep-card,
.overview-kpis > div,
.product-overview-item,
.video-overview-item,
.source-dual-card,
.competitor-board,
.trend-card,
.word-section-panel,
.question-source,
.industry-panel,
.semantic-panel,
.ai-index-search,
.ai-index-result,
.nr-card,
.pj-card,
.pj-stat,
.qd-day,
.qd-hero,
.qd-trend-card,
.nr-source,
.nr-plat-group,
.distribution-panel,
.source-analysis-card {
  background: var(--zs-card) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-brand) !important;
  border-radius: var(--zs-r-card) !important;
  box-shadow: var(--zs-sh-1) !important;
  transition: border-color .25s var(--zs-ease), box-shadow .25s var(--zs-ease),
    transform .25s var(--zs-ease);
}

/* 大面板用 20px */
.panel,
.question-source,
.trend-card,
.nr-card,
.qd-hero,
.qd-trend-card,
.ai-index-search,
.ai-index-result,
.source-analysis-card {
  border-radius: var(--zs-r-panel) !important;
}

/* 悬停：轻抬 + 品牌边，不用重投影 */
.panel:hover,
.volume-card:hover,
.rep-card:hover,
.overview-kpis > div:hover,
.product-overview-item:hover,
.video-overview-item:hover,
.source-dual-card:hover,
.competitor-board:hover,
.pj-card:hover,
.qd-day:hover,
.nr-source:hover {
  border-color: var(--zs-brand-100) !important;
  box-shadow: var(--zs-sh-2) !important;
  transform: translateY(-2px);
}

/* 卡片右上角柔光保留，但压淡到参考站的克制程度 */
.dashboard-content .volume-card::after,
.dashboard-content .rep-card::after,
.dashboard-content .overview-kpis > div::after,
.dashboard-content .product-overview-item::after,
.dashboard-content .video-overview-item::after {
  opacity: .45;
}

/* 竞品三卡不再各带一套渐变底，统一白卡 */
.dashboard-content .competitor-board:nth-child(1),
.dashboard-content .competitor-board:nth-child(2),
.dashboard-content .competitor-board:nth-child(3) {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line-brand) !important;
}

/* 官方 / 合作信源卡：靠徽标与 KPI 色区分，卡面统一白 */
.source-dual-card,
.source-dual-card.is-partner,
.source-dual-card[data-sd-active="reputation"],
.source-dual-card[data-sd-active="completeness"] {
  background: var(--zs-card) !important;
  background-image: none !important;
}

/* 明细行：白底细边，悬停浅绿 */
.media-source-row,
.product-ranking-row,
.video-ranking-row,
.board-row,
.distribution-row,
.question-item,
.word-list-row,
.rank-row,
.table-row,
.semantic-table-row,
.owned-media-row,
.question-source .media-source-row.owned-media-row,
.dashboard-content .owned-media-row {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  border-radius: var(--zs-r-sm);
}

.media-source-row:hover,
.product-ranking-row:hover,
.video-ranking-row:hover,
.board-row:hover,
.question-item:hover,
.word-list-row:hover,
.rank-row:hover,
.table-row:hover,
.semantic-table-row:hover {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand-100) !important;
  box-shadow: none !important;
}

/* ==========================================================================
 * 6. 首屏 Hero
 * ===================================================================== */
.report-hero {
  background: var(--zs-card) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-brand) !important;
  border-radius: var(--zs-r-panel) !important;
  box-shadow: var(--zs-sh-1) !important;
}

.report-hero h1 {
  font-size: 44px !important;
  font-weight: 500 !important;
  line-height: 1.14 !important;
  letter-spacing: -.02em !important;
  color: var(--zs-text-1) !important;
}

.hero-copy > p {
  font-weight: 300 !important;
  color: var(--zs-text-2) !important;
  letter-spacing: .02em;
}

/* 眉标改胶囊 */
.hero-eyebrow,
.section-kicker {
  display: inline-flex !important;
  align-items: center;
  gap: 8px;
  padding: 6px 14px !important;
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-success-bg) !important;
  background-image: none !important;
  color: var(--zs-brand-ink) !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  letter-spacing: .04em;
}

.hero-meta span {
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-sunken) !important;
  border: 1px solid var(--zs-line) !important;
  font-weight: 300;
}

.hero-meta b {
  font-weight: 400;
  color: var(--zs-text-2) !important;
}

.hero-score {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-brand) !important;
  border-radius: var(--zs-r-card) !important;
}

.hero-score strong {
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
}

.score-mini {
  background: var(--zs-brand-100) !important;
  border-radius: var(--zs-r-pill);
  overflow: hidden;
}

.score-mini i {
  background: var(--zs-brand) !important;
  background-image: none !important;
  border-radius: var(--zs-r-pill);
}

/* ==========================================================================
 * 7. 区块标题与眉标
 * ===================================================================== */
.section-heading {
  border-bottom: 1px solid var(--zs-line) !important;
  padding-bottom: 14px;
}

.section-heading h2 {
  font-size: 26px !important;
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}

.section-note {
  font-weight: 300 !important;
  color: var(--zs-text-3) !important;
}

.subsection-title > span,
.trend-inline-title > span,
.kn-block-title {
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}

.subsection-title > small,
.trend-inline-title > small {
  font-weight: 300 !important;
  color: var(--zs-text-3) !important;
}

/* 引用块：浅底圆角，无左色边（#74 已删） */
.kn-quote {
  background: var(--zs-sunken) !important;
  border-radius: var(--zs-r-md) !important;
  font-weight: 300;
  color: var(--zs-text-2) !important;
}

/* ==========================================================================
 * 8. TAB / 分段控件：胶囊化
 * ===================================================================== */
.sd-type-tabs,
.nr-word-tabs,
.distribution-tabs,
.detail-platform-tabs,
.pj-view-tabs,
.qd-metric-tabs {
  background: var(--zs-sunken) !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-pill) !important;
  padding: 3px;
}

.sd-type-tabs button,
.nr-word-tab,
.distribution-tabs button,
.detail-platform-tabs button,
.pj-view-tabs button,
.qd-metric-tabs button {
  border: 0 !important;
  border-radius: var(--zs-r-pill) !important;
  background: transparent !important;
  color: var(--zs-text-2) !important;
  font-weight: 400 !important;
  transition: background .2s var(--zs-ease), color .2s var(--zs-ease),
    box-shadow .2s var(--zs-ease);
}

.sd-type-tabs button.active,
.sd-type-tabs button[aria-selected="true"],
.nr-word-tab.is-active,
.distribution-tabs button.active,
.detail-platform-tabs button.active,
.pj-view-tabs button.active,
.qd-metric-tabs button.active {
  background: #fff !important;
  color: var(--zs-text-1) !important;
  font-weight: 500 !important;
  box-shadow: var(--zs-sh-1) !important;
}

/* 平台竖列按钮 */
.detail-platform-rail button,
.source-platform-rail button {
  border-radius: var(--zs-r-md) !important;
  font-weight: 400;
  color: var(--zs-text-2) !important;
}

.detail-platform-rail button.active,
.source-platform-rail button.active,
.dashboard-content .detail-platform-rail button.active,
.dashboard-content .source-platform-rail button.active {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
  border: 1px solid var(--zs-brand-100) !important;
}

/* ==========================================================================
 * 9. 表单控件
 * ===================================================================== */
input[type="text"],
input[type="date"],
input[type="search"],
input[type="number"],
select,
textarea,
.nr-mini-input,
.nr-tag-input,
.nr-bulk-input,
.ai-query-control input,
.filter-bar select,
.filter-bar input[type="date"] {
  border: 1px solid var(--zs-line-strong) !important;
  border-radius: var(--zs-r-md) !important;
  background: #fff !important;
  color: var(--zs-text-1) !important;
  font-family: var(--zs-font) !important;
  font-weight: 400;
  box-shadow: none !important;
  transition: border-color .2s var(--zs-ease), box-shadow .2s var(--zs-ease);
}

input[type="text"]:focus,
input[type="date"]:focus,
input[type="search"]:focus,
select:focus,
textarea:focus,
.nr-mini-input:focus,
.nr-tag-input:focus,
.nr-bulk-input:focus,
.ai-query-control input:focus {
  border-color: var(--zs-brand) !important;
  box-shadow: 0 0 0 3px var(--zs-brand-a12) !important;
  outline: none;
}

textarea::placeholder,
input::placeholder {
  color: var(--zs-text-4) !important;
  font-weight: 300;
}

/* 标签胶囊 */
.nr-tag,
.pj-dtags span,
.overview-tags span,
.kn-chips span {
  border-radius: var(--zs-r-pill) !important;
  font-weight: 400;
}

/* 筛选卡 */
.filter-bar,
.floating-shell .filter-bar {
  background: rgba(255, 255, 255, .92) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-card) !important;
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  box-shadow: var(--zs-sh-2) !important;
}

.filter-title span {
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}

.filter-title small {
  font-weight: 300 !important;
  color: var(--zs-text-3) !important;
}

.filter-bar label {
  font-weight: 300;
  color: var(--zs-text-2) !important;
}

/* ==========================================================================
 * 10. 弹层 / 抽屉 / 轻提示
 * ===================================================================== */
.nr-modal-box,
.pj-drawer-panel,
.kn-modal-box,
.modal-box {
  border-radius: 24px !important;
  border: 1px solid var(--zs-line) !important;
  background: #fff !important;
  box-shadow: var(--zs-sh-4) !important;
}

.nr-modal-head,
.pj-drawer-head,
.kn-modal-head {
  background: var(--zs-sunken) !important;
  border-bottom: 1px solid var(--zs-line) !important;
  border-radius: 24px 24px 0 0 !important;
}

.nr-modal-head h3,
.pj-drawer-head h3 {
  font-weight: 500 !important;
}

.nr-modal-head small,
.pj-drawer-head small {
  font-weight: 300 !important;
  color: var(--zs-text-2) !important;
}

.nr-modal-mask,
.pj-drawer-mask,
.kn-modal-mask {
  background: rgba(26, 26, 26, .32) !important;
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}

.nr-toast,
.pj-toast,
.qd-toast {
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-dark) !important;
  color: #fff !important;
  font-weight: 400 !important;
  box-shadow: var(--zs-sh-3) !important;
}

.nr-toast.is-warn,
.pj-toast.is-warn {
  background: #8a6412 !important;
}

.nr-toast.is-ok,
.pj-toast.is-ok {
  background: var(--zs-success) !important;
}

/* 释义提示 */
.kn-tip,
.nr-tip,
[data-tip-box] {
  border-radius: var(--zs-r-md) !important;
  background: var(--zs-dark) !important;
  color: #fff !important;
  font-weight: 300 !important;
  box-shadow: var(--zs-sh-3) !important;
}

/* 帮助问号 */
.nr-help,
.kn-tip-host {
  font-weight: 400;
}

.nr-help {
  border-radius: 50% !important;
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
  border: 0 !important;
}

.nr-help:hover {
  background: var(--zs-brand-100) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* ==========================================================================
 * 11. 批量导入弹层（#75 功能的视觉对齐）
 * ===================================================================== */
.nr-bulk-stats span {
  border-radius: var(--zs-r-pill) !important;
  font-weight: 400;
}

.nr-bulk-stats .is-ok {
  background: var(--zs-success-bg) !important;
  color: var(--zs-success) !important;
}

.nr-bulk-stats .is-dup {
  background: #fdf8ec !important;
  color: #8a6412 !important;
}

.nr-bulk-stats .is-bad {
  background: var(--zs-red-bg) !important;
  color: var(--zs-red) !important;
}

.nr-bulk-stats b {
  font-weight: 500 !important;
}

.nr-bulk-tip {
  background: var(--zs-sunken) !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-md) !important;
}

.nr-bulk-tip p {
  font-weight: 300;
  color: var(--zs-text-2) !important;
}

.nr-bulk-preview {
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-md) !important;
  background: #fff !important;
}

.nr-bulk-tr.is-head {
  background: var(--zs-sunken) !important;
  color: var(--zs-text-2) !important;
  font-weight: 500 !important;
}

.nr-bulk-tr {
  border-bottom: 1px solid var(--zs-line) !important;
  font-weight: 300;
}

.nr-bulk-tr.is-ok .nr-bulk-flag { color: var(--zs-success) !important; }
.nr-bulk-tr.is-dup { background: #fffdf7 !important; }
.nr-bulk-tr.is-dup .nr-bulk-flag { color: #8a6412 !important; }
.nr-bulk-tr.is-bad { background: #fffafa !important; }
.nr-bulk-tr.is-bad .nr-bulk-flag { color: var(--zs-red) !important; }

.nr-bulk-flag {
  font-weight: 400 !important;
}

.nr-bulk-no,
.nr-bulk-host {
  color: var(--zs-text-3) !important;
}

/* ==========================================================================
 * 12. 图表容器与图例
 * ===================================================================== */
.trend-card,
.qd-trend-card {
  background: #fff !important;
  background-image: none !important;
}

.trend-legend,
.qd-legend {
  font-weight: 300;
  color: var(--zs-text-2) !important;
}

.trend-tooltip,
.qd-tooltip {
  border-radius: var(--zs-r-md) !important;
  background: rgba(26, 26, 26, .94) !important;
  color: #fff !important;
  border: 0 !important;
  box-shadow: var(--zs-sh-3) !important;
  font-weight: 300;
}

.trend-tooltip .tooltip-row,
.qd-tooltip .tooltip-row {
  font-weight: 300;
}

/* 环形图中心数值 */
.donut-center strong,
.heat-ball {
  font-weight: 500 !important;
}

/* 热力球：保留六档语义色，仅降字重 */
.heat-ball {
  box-shadow: var(--zs-sh-2);
}

.heat-state-pill {
  border-radius: var(--zs-r-pill) !important;
  font-weight: 500 !important;
}

/* 条形图轨道 */
.sd-rank-bar,
.sd-type-bar,
.pj-stat-bar,
.dist-bar {
  background: var(--zs-chip) !important;
  border-radius: var(--zs-r-pill) !important;
  overflow: hidden;
}

.sd-rank-bar i,
.sd-type-bar i,
.pj-stat-bar i,
.dist-bar i {
  border-radius: var(--zs-r-pill) !important;
}

/* ==========================================================================
 * 13. 页脚
 * ===================================================================== */
.report-footer,
.nr-footer,
.qd-footer,
.dashboard-content footer {
  background: transparent !important;
  border-top: 1px solid var(--zs-line) !important;
  color: var(--zs-text-3) !important;
  font-weight: 300;
}

.footer-brand strong {
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}

.footer-brand span,
.nr-footer span,
.report-footer span {
  font-weight: 300 !important;
  color: var(--zs-text-3) !important;
}

/* ==========================================================================
 * 14. 空态 / 分隔 / 滚动条
 * ===================================================================== */
.nr-empty-line,
.pj-empty,
.qd-empty {
  color: var(--zs-text-3) !important;
  font-weight: 300;
}

.nr-core-col-head {
  border: 0 !important;
}

.nr-icon-btn {
  border-radius: var(--zs-r-sm) !important;
  border: 1px solid var(--zs-line-strong) !important;
  background: #fff !important;
  color: var(--zs-text-2) !important;
  font-weight: 400 !important;
}

.nr-icon-btn:hover {
  border-color: var(--zs-brand-100) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 滚动条统一细灰 */
* {
  scrollbar-width: thin;
  scrollbar-color: #d8dcdc transparent;
}

*::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

*::-webkit-scrollbar-track {
  background: transparent;
}

*::-webkit-scrollbar-thumb {
  background: #d8dcdc;
  border-radius: var(--zs-r-pill);
}

*::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand-100);
}

/* ==========================================================================
 * 15. 响应式
 * ===================================================================== */
@media (max-width: 1200px) {
  .report-hero h1 { font-size: 36px !important; }
  .section-heading h2 { font-size: 23px !important; }
}

@media (max-width: 700px) {
  :root {
    --zs-gutter: 16px;
    --zs-section-gap: 56px;
  }

  body::before {
    width: 900px;
    height: 701px;
    margin-left: -450px;
    top: -60px;
    opacity: .42;
  }

  .report-hero h1 { font-size: 27px !important; }
  .section-heading h2 { font-size: 20px !important; }
  .topbar .brand { font-size: 19px !important; }

  .panel,
  .question-source,
  .trend-card,
  .nr-card,
  .qd-hero {
    border-radius: var(--zs-r-card) !important;
  }

  .nr-modal-box,
  .pj-drawer-panel {
    border-radius: var(--zs-r-card) !important;
  }

  .nr-modal-head,
  .pj-drawer-head {
    border-radius: var(--zs-r-card) var(--zs-r-card) 0 0 !important;
  }
}

/* 尊重系统「减少动效」偏好 */
@media (prefers-reduced-motion: reduce) {
  body::before {
    animation: none;
    opacity: .46;
  }

  * {
    transition-duration: .01ms !important;
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
  }
}

/* ==========================================================================
 * 16. 最终裁决层：压过旧皮肤的高特异性 !important 规则
 *
 * 旧 style.css / interactions.css 里有大量 `.dashboard-content X{...!important}`
 * 与 `.query-btn{...!important}`。本段用「同级或更高特异性 + !important + 更后
 * 的源顺序」确保参考站语言最终生效。图表语义色（折线 / 环形 / 条形）不在此列，
 * 它们由 SVG 属性与 --kn-tone 驱动，保持原样。
 * ===================================================================== */

/* --- 16.1 卡片：一律纯白，去掉所有渐变纸面 --- */
.dashboard-content .panel,
.dashboard-content .detail-table,
.dashboard-content .word-section-panel,
.dashboard-content .question-source,
.dashboard-content .effect-pie-card,
.dashboard-content .overview-summary,
.dashboard-content .report-hero,
.dashboard-content .trend-card,
.dashboard-content .volume-card,
.dashboard-content .volume-card.blue,
.dashboard-content .volume-card.purple,
.dashboard-content .volume-card.green,
.dashboard-content .rep-card,
.dashboard-content .rep-card.positive,
.dashboard-content .rep-card.negative,
.dashboard-content .rep-card.complete,
.dashboard-content .overview-kpis > div,
.dashboard-content .overview-kpis > div:nth-child(1),
.dashboard-content .overview-kpis > div:nth-child(2),
.dashboard-content .overview-kpis > div:nth-child(3),
.dashboard-content .overview-kpis > div:nth-child(4),
.dashboard-content [data-tone="green"],
.dashboard-content [data-tone="blue"],
.dashboard-content [data-tone="violet"],
.dashboard-content [data-tone="amber"],
.dashboard-content .product-overview-item,
.dashboard-content .video-overview-item,
.dashboard-content .competitor-board,
.dashboard-content .competitor-board:nth-child(1),
.dashboard-content .competitor-board:nth-child(2),
.dashboard-content .competitor-board:nth-child(3),
.dashboard-content .source-dual-card,
.dashboard-content .source-analysis-card,
.dashboard-content .distribution-panel,
.dashboard-content .word-direct-group,
.dashboard-content .word-direct-group.positive-words,
.dashboard-content .word-direct-group.negative-words,
.dashboard-content .word-direct-group.neutral-words,
.dashboard-content .word-direct-group.all-words,
.dashboard-content .word-direct-group.mentioned-words,
.dashboard-content .word-direct-group.not-mentioned-words {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line-brand) !important;
  box-shadow: var(--zs-sh-1) !important;
}

.dashboard-content .panel,
.dashboard-content .question-source,
.dashboard-content .trend-card,
.dashboard-content .report-hero,
.dashboard-content .source-analysis-card {
  border-radius: var(--zs-r-panel) !important;
}

.dashboard-content .volume-card,
.dashboard-content .rep-card,
.dashboard-content .overview-kpis > div,
.dashboard-content .product-overview-item,
.dashboard-content .video-overview-item,
.dashboard-content .competitor-board,
.dashboard-content .source-dual-card,
.dashboard-content .word-direct-group {
  border-radius: var(--zs-r-card) !important;
}

/* 悬停统一轻抬 */
.dashboard-content .volume-card:hover,
.dashboard-content .rep-card:hover,
.dashboard-content .overview-kpis > div:hover,
.dashboard-content .product-overview-item:hover,
.dashboard-content .video-overview-item:hover,
.dashboard-content .competitor-board:hover,
.dashboard-content .panel:hover {
  border-color: var(--zs-brand-100) !important;
  box-shadow: var(--zs-sh-2) !important;
  transform: translateY(-2px) !important;
}

/* Hero 漂移光斑压淡 */
.dashboard-content .report-hero::after {
  background: radial-gradient(circle, rgba(0, 194, 154, .1), rgba(0, 194, 154, 0) 68%) !important;
}

.dashboard-content .hero-score {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-brand) !important;
  border-radius: var(--zs-r-card) !important;
  box-shadow: none !important;
}

/* --- 16.2 标题字重：压过 font-weight:700!important --- */
.dashboard-content .report-hero h1,
.dashboard-content .section-heading h2,
.dashboard-content .subsection-title > span,
.dashboard-content .trend-inline-title > span,
.dashboard-content .kn-block-title,
.report-hero h1,
.section-heading h2,
.nr-card-title h2,
.pj-card h3,
.qd-hero h1,
.qd-section-title,
.pj-section-title {
  font-weight: 500 !important;
}

.dashboard-content .report-hero h1 {
  font-size: 44px !important;
  line-height: 1.14 !important;
  letter-spacing: -.02em !important;
  color: var(--zs-text-1) !important;
  -webkit-text-fill-color: var(--zs-text-1) !important;
}

/* 数值：500，语义色保留 */
.dashboard-content .volume-card strong,
.dashboard-content .rep-card strong,
.dashboard-content .overview-kpis > div strong,
.dashboard-content .product-overview-item strong,
.dashboard-content .video-overview-item strong,
.dashboard-content .hero-score strong,
.dashboard-content .sd-kpi-value {
  font-weight: 500 !important;
}

/* --- 16.3 按钮：黑色胶囊，压过所有渐变 !important --- */
.query-btn,
.dashboard-content .query-btn,
.filter-bar .query-btn,
.dashboard-content .filter-bar .query-btn,
.nr-btn.primary,
.nr-btn.primary.is-blocked:hover,
.pj-btn.is-primary,
.ai-query-control button,
.nr-submit-btn,
[data-nr-action="submit"],
.ep-save-btn,
.qd-export-btn {
  border: 0 !important;
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-dark) !important;
  background-image: none !important;
  color: #fff !important;
  font-weight: 500 !important;
  box-shadow: none !important;
}

.query-btn:hover,
.dashboard-content .query-btn:hover,
.nr-btn.primary:hover,
.pj-btn.is-primary:hover,
.ai-query-control button:hover,
.nr-submit-btn:hover,
[data-nr-action="submit"]:hover,
.ep-save-btn:hover {
  background: #000 !important;
  background-image: none !important;
  box-shadow: var(--zs-sh-dark) !important;
  transform: translateY(-1px);
}

.nr-btn.primary:disabled,
.nr-btn.primary.is-blocked,
.pj-btn.is-primary:disabled,
.query-btn:disabled {
  background: var(--zs-chip) !important;
  background-image: none !important;
  color: var(--zs-text-4) !important;
  box-shadow: none !important;
  transform: none !important;
}

/* 次级按钮：白底细边 */
.dashboard-content .filter-bar button:not(.query-btn),
.topbar-actions button,
.nr-btn.ghost,
.pj-btn.is-ghost,
.nr-tool-btn,
.qd-back-btn,
.qd-tool-btn {
  border: 1px solid var(--zs-line-strong) !important;
  border-radius: var(--zs-r-pill) !important;
  background: #fff !important;
  background-image: none !important;
  color: var(--zs-text-1) !important;
  font-weight: 400 !important;
  box-shadow: none !important;
}

.dashboard-content .filter-bar button:not(.query-btn):hover,
.topbar-actions button:hover,
.nr-btn.ghost:hover,
.pj-btn.is-ghost:hover,
.nr-tool-btn:hover,
.qd-back-btn:hover {
  border-color: var(--zs-brand-100) !important;
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 顶栏「导出」是主行动，保持黑色胶囊 */
.topbar-actions .query-btn,
.topbar-actions [data-action="export"] {
  background: var(--zs-dark) !important;
  color: #fff !important;
}

/* --- 16.4 TAB 激活态：白胶囊，不用渐变 --- */
.dashboard-content .distribution-tabs button.active,
.dashboard-content .word-view-tabs button.active,
.dashboard-content .source-tabs button.active,
.dashboard-content .sd-metric-toggle button.active,
.dashboard-content .sa-metric-toggle button.active,
.dashboard-content .detail-platform-tabs button.active,
.distribution-tabs button.active,
.detail-platform-tabs button.active,
.sd-type-tabs button.active,
.nr-word-tab.is-active {
  background: #fff !important;
  background-image: none !important;
  color: var(--zs-text-1) !important;
  font-weight: 500 !important;
  border-color: var(--zs-line) !important;
  box-shadow: var(--zs-sh-1) !important;
}

/* TAB 容器：浅灰槽 + 胶囊 */
.dashboard-content .distribution-tabs,
.dashboard-content .detail-platform-tabs,
.dashboard-content .word-view-tabs,
.dashboard-content .source-tabs,
.dashboard-content .sd-metric-toggle,
.dashboard-content .sa-metric-toggle,
.sd-type-tabs,
.nr-word-tabs {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-pill) !important;
}

.dashboard-content .distribution-tabs button,
.dashboard-content .detail-platform-tabs button,
.dashboard-content .word-view-tabs button,
.dashboard-content .source-tabs button,
.dashboard-content .sd-metric-toggle button,
.dashboard-content .sa-metric-toggle button {
  border-radius: var(--zs-r-pill) !important;
  background: transparent !important;
  background-image: none !important;
  color: var(--zs-text-2) !important;
  font-weight: 400 !important;
}

/* --- 16.5 明细行：白底，类型靠徽标区分 --- */
.dashboard-content .media-source-row.is-official,
.dashboard-content .media-source-row.is-partner,
.dashboard-content .media-source-row.is-public,
.question-source .media-source-row.is-official,
.question-source .media-source-row.is-partner,
.question-source .media-source-row.is-public,
.dashboard-content .owned-media-row,
.question-source .media-source-row.owned-media-row {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

.dashboard-content .media-source-row:hover,
.question-source .media-source-row:hover {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  border-color: var(--zs-brand-100) !important;
}

/* 表头：浅灰纯色 */
.dashboard-content .detail-table .table-head,
.media-source-columns {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  color: var(--zs-text-2) !important;
  font-weight: 500 !important;
}

/* --- 16.6 眉标胶囊：压过旧色 --- */
.dashboard-content .section-kicker,
.section-kicker,
.hero-eyebrow {
  display: inline-flex !important;
  align-items: center;
  padding: 6px 14px !important;
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-success-bg) !important;
  background-image: none !important;
  color: var(--zs-brand-ink) !important;
  font-size: 12px !important;
  font-weight: 500 !important;
}

/* --- 16.7 新建 / 编辑 / 项目 / 详情页卡片 --- */
.nr-card,
.nr-source,
.nr-plat-group,
.nr-run-card,
.nr-word-panel,
.pj-card,
.pj-stat,
.pj-drawer-panel,
.qd-day,
.qd-hero,
.qd-trend-card,
.qd-stat,
.ep-card {
  background: var(--zs-card) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-brand) !important;
  box-shadow: var(--zs-sh-1) !important;
}

.nr-card,
.qd-hero,
.qd-trend-card {
  border-radius: var(--zs-r-panel) !important;
}

.nr-source,
.nr-plat-group,
.pj-card,
.pj-stat,
.qd-day,
.qd-stat {
  border-radius: var(--zs-r-card) !important;
}

/* 核心词条选中态：浅绿底 + 品牌边，无竖条 */
.nr-core-item.is-active,
.nr-word-panel[data-word="reputation"] .nr-core-item.is-active,
.nr-word-panel[data-word="completeness"] .nr-core-item.is-active {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand-100) !important;
  box-shadow: none !important;
}

/* 平台选择卡 */
.nr-plat-item.is-on {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand-100) !important;
}

/* 项目卡置顶态：靠徽标，不靠角标 */
.pj-card.is-pinned {
  border-color: var(--zs-brand-100) !important;
  box-shadow: var(--zs-sh-1) !important;
}

/* 详情页头部 */
.qd-hero {
  background: var(--zs-card) !important;
  background-image: none !important;
}

.qd-hero h1 {
  font-size: 32px !important;
  font-weight: 500 !important;
  letter-spacing: -.02em !important;
}

.qd-hero-score strong,
.qd-stat strong {
  font-weight: 500 !important;
}

/* 回答块：浅灰底，无左色条 */
.qd-answer {
  background: var(--zs-sunken) !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-md) !important;
  font-weight: 300;
}

/* --- 16.8 AI 指数页 --- */
.ai-index-search,
.ai-index-result,
.industry-panel,
.semantic-panel {
  background: var(--zs-card) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-brand) !important;
  border-radius: var(--zs-r-panel) !important;
  box-shadow: var(--zs-sh-1) !important;
}

.ai-index-label {
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}

.ai-index-search small,
.ai-index-result-head small,
.ai-subtitle small {
  font-weight: 300 !important;
  color: var(--zs-text-3) !important;
}

.platform-heat-row {
  border-radius: var(--zs-r-sm);
}

.ph-logo {
  border-radius: var(--zs-r-sm) !important;
  border-color: var(--zs-line) !important;
}

/* --- 16.9 字重兜底：把残留的 600/700/750/800 降到参考站区间 --- */
.dashboard-content h1,
.dashboard-content h2,
.dashboard-content h3,
.dashboard-content h4,
.dashboard-content .kn-kpi-value,
.dashboard-content .sd-kpi-value,
.dashboard-content .donut-center strong,
.nr-card-title h2,
.nr-sub-title,
.nr-plat-group-title,
.nr-plat-summary b,
.pj-stat strong,
.pj-dword-head b,
.qd-day-head b,
.heat-ball,
.heat-state-pill,
.ai-index-label,
.nr-modal-head h3,
.pj-drawer-head h3 {
  font-weight: 500 !important;
}

.nr-sub-title,
.nr-plat-group-title {
  font-weight: 500 !important;
}

/* 说明性文字统一细体 */
.dashboard-content .section-note,
.dashboard-content .subsection-title > small,
.dashboard-content .trend-inline-title > small,
.nr-hint,
.nr-note,
.nr-word-intro span,
.nr-bulk-tip p,
.qd-hero-note,
.pj-card-meta,
.pj-dword-head small {
  font-weight: 300 !important;
  color: var(--zs-text-2) !important;
}

/* --- 16.10 字重收尾：表格数值 / 涨跌 / 榜单 / 徽标 --- */
/* 表格高亮数值：500 足够醒目，语义色（红涨绿跌）保持不变 */
.table-highlight,
.metric-cell,
span.table-highlight.metric-cell,
.dashboard-content .table-highlight,
.dashboard-content .metric-cell {
  font-weight: 500 !important;
}

/* 涨跌幅：500，颜色仍按中国股市习惯红涨绿跌 */
.delta-up,
.delta-down,
small.delta-up,
small.delta-down,
.sd-kpi-delta,
.qd-delta {
  font-weight: 500 !important;
}

/* 榜单名称与占比 */
.sd-rank-name,
.sa-rank-name,
.sd-rank-pct,
.sa-rank-pct,
.sa-rank-no,
.board-row b,
.rank-row b,
.word-list-row,
.word-list-row b,
.word-direct-title,
.word-subsection-title {
  font-weight: 400 !important;
}

.sd-rank-pct,
.sa-rank-pct,
.word-list-row b {
  font-weight: 500 !important;
}

/* 小标题容器 */
.subsection-title,
.subsection-title.compact,
.subsection-actions,
.word-direct-title,
.word-subsection-title {
  font-weight: 500 !important;
}

/* LOGO 占位字母：400 即可，不需要粗体 */
.platform-logo,
.media-logo,
.product-logo,
i.platform-logo.has-logo {
  font-weight: 500 !important;
}

/* 徽标 / 标签 */
.sa-rank-tag,
.kn-ctx-chip,
.sd-kpi-label,
.sidebar-label,
.nr-step-tag,
.owned-source-badge,
.media-type-badge,
.pj-badge {
  font-weight: 500 !important;
}

/* 通用兜底：正文里的 b / span 不应比标题更重 */
.dashboard-content b,
.dashboard-content span,
.dashboard-content small,
.dashboard-content em {
  font-weight: 400;
}

.dashboard-content .sd-rank-pct,
.dashboard-content .sa-rank-pct,
.dashboard-content .metric-cell,
.dashboard-content .table-highlight {
  font-weight: 500 !important;
}

/* --- 16.11 最后残留：直接子选择器命中的无类名 span / b --- */
.filter-title,
.dashboard-content .filter-title {
  font-weight: 500 !important;
}

.word-direct-title > span,
.word-subsection-title > span,
.dashboard-content .word-direct-title > span,
.dashboard-content .word-subsection-title > span,
.dashboard-content .subsection-title > span {
  font-weight: 500 !important;
}

.question-item > b,
.dashboard-content .question-item > b,
.source-question-list .question-item > b {
  font-weight: 500 !important;
}

.kn-ctx-q,
.dashboard-content .kn-ctx-q {
  font-weight: 500 !important;
}

/* ==================================================================
 * 17. 项目页 / 新建页收尾（probe-skin 实测发现的漏覆盖项）
 *   - projects.css 的 .pj-hero 三层径向渐变、分页激活态渐变
 *   - .pj-btn.is-danger 危险按钮渐变
 *   - new-report.css 步骤序号 .nr-steps li i 的 700 字重与渐变
 *   - .nr-seg.small button 横向 padding 过大导致「提及截图」文字裁切
 * ================================================================== */

/* --- 17.1 项目页 Hero：纯白卡面 --- */
.pj-hero,
.pj-page .pj-hero {
  background: #fff !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-brand) !important;
  border-radius: var(--zs-r-panel) !important;
  box-shadow: var(--zs-sh-card) !important;
}

/* --- 17.2 项目页分页：白底细边，激活态黑胶囊 --- */
.pj-pager-nav > button,
.pj-pager-nums button {
  background: #fff !important;
  background-image: none !important;
  border: 1px solid var(--zs-line-strong) !important;
  border-radius: var(--zs-r-pill) !important;
  color: var(--zs-text-2) !important;
  font-weight: 400 !important;
  box-shadow: none !important;
}

.pj-pager-nav > button:hover:not([disabled]),
.pj-pager-nums button:hover:not(.active) {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  border-color: var(--zs-brand-100) !important;
  color: var(--zs-brand-ink-deep) !important;
}

.pj-pager-nums button.active {
  background: var(--zs-dark) !important;
  background-image: none !important;
  border-color: var(--zs-dark) !important;
  color: #fff !important;
  font-weight: 500 !important;
}

/* --- 17.3 危险按钮：语义红，不用渐变 --- */
.pj-btn.is-danger {
  background: #fff !important;
  background-image: none !important;
  border: 1px solid #f3d3cd !important;
  border-radius: var(--zs-r-pill) !important;
  color: #c0392b !important;
  font-weight: 400 !important;
  box-shadow: none !important;
}

.pj-btn.is-danger:hover {
  background: #fdf3f1 !important;
  background-image: none !important;
  border-color: #e8b4ab !important;
  color: #a5301f !important;
}

/* --- 17.4 新建页步骤序号：降字重 + 去渐变 --- */
.nr-steps li i {
  font-weight: 500 !important;
  background: var(--zs-chip) !important;
  background-image: none !important;
  color: var(--zs-text-3) !important;
}

.nr-steps li.is-done {
  font-weight: 400 !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

.nr-steps li.is-done i {
  background: var(--zs-brand) !important;
  background-image: none !important;
  color: #fff !important;
  font-weight: 500 !important;
}

/* --- 17.5 分段控件：收紧 padding，消除「提及截图」裁切 --- */
.nr-seg {
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-sunken) !important;
  border: 1px solid var(--zs-line) !important;
}

.nr-seg button {
  border-radius: var(--zs-r-pill) !important;
  font-weight: 400 !important;
  color: var(--zs-text-3) !important;
}

/* 三等分会把「提及截图」(需 53px) 压到 45px 造成裁切。
   改为按内容宽度分配：flex:1 1 auto + min-width:auto，长标签优先拿足空间。 */
.nr-seg.small {
  width: auto !important;
  flex: 0 0 auto !important;
}

.nr-seg.small button {
  padding: 6px 8px !important;
  font-size: 11.5px !important;
  flex: 1 1 auto !important;
  min-width: auto !important;
}

.nr-seg button.is-active {
  background: #fff !important;
  background-image: none !important;
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .07) !important;
}

/* --- 17.6 编辑页状态分段：激活态用品牌实色，不用渐变 --- */
.ep-status-seg button {
  border-radius: var(--zs-r-pill) !important;
  background-image: none !important;
  font-weight: 400 !important;
}

.ep-status-seg button.is-active {
  background: var(--zs-brand) !important;
  background-image: none !important;
  color: #fff !important;
  font-weight: 500 !important;
  box-shadow: none !important;
}

/* ==================================================================
 * 18. AI 指数页窄档溢出修复（probe-skin 实测）
 *   .semantic-table-head/row 带 min-width:650px，而 .ai-index-lower 用
 *   `1fr`（min 为 auto），列宽被内容撑到 696px，卡片右边界溢出视口。
 *   解法：网格列改 minmax(0,1fr) 允许收缩，横滚交给 .semantic-table。
 * ================================================================== */
.ai-index-lower {
  grid-template-columns: minmax(0, .82fr) minmax(0, 1.18fr) !important;
}

.ai-index-result-grid {
  grid-template-columns: minmax(0, 300px) minmax(0, 1fr) !important;
}

.industry-panel,
.semantic-panel,
.ai-index-search,
.ai-index-result {
  min-width: 0 !important;
  max-width: 100% !important;
}

.semantic-table {
  overflow-x: auto !important;
  overflow-y: hidden !important;
  -webkit-overflow-scrolling: touch;
}

/* 滚动条用皮肤自身视觉语言，不用浏览器默认 */
.semantic-table::-webkit-scrollbar {
  height: 8px;
}

.semantic-table::-webkit-scrollbar-track {
  background: var(--zs-sunken);
  border-radius: 999px;
}

.semantic-table::-webkit-scrollbar-thumb {
  background: var(--zs-brand-100);
  border-radius: 999px;
}

.semantic-table::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand);
}

@media (max-width: 1000px) {
  .ai-index-lower,
  .ai-index-result-grid {
    grid-template-columns: minmax(0, 1fr) !important;
  }
}

/* ==========================================================================
 * 19. 全站外壳（zhishu-shell）
 *     LOGO / 头像下拉 / 拉通页脚 / 二维码入框 / 固定浮动操作条
 *     与 zhishu-shell.js 配套，DOM 由脚本注入，本段只负责视觉。
 * ===================================================================== */

/* --- 19.1 品牌 LOGO --- */
.topbar .brand.zs-brand {
  display: flex !important;
  align-items: center !important;
  padding: 0 !important;
  background: none !important;
  border: 0 !important;
  box-shadow: none !important;
  font-size: 0 !important;
  line-height: 0 !important;
}

.topbar .brand.zs-brand img {
  display: block;
  height: 34px;
  width: auto;
  max-width: 168px;
}

.sidebar-brand-mark.zs-brand-mark {
  display: grid !important;
  place-items: center !important;
  padding: 0 !important;
  background: none !important;
  border: 0 !important;
  box-shadow: none !important;
  font-size: 0 !important;
  overflow: visible !important;
}

.sidebar-brand-mark.zs-brand-mark img {
  display: block;
  width: 34px;
  height: 34px;
  border-radius: 9px;
}

.footer-brand [data-zs-footer-brand] img,
[data-zs-footer-brand] img {
  display: block;
  height: 30px;
  width: auto;
}

/* --- 19.2 顶栏主题开关 --- */
.zs-top-theme {
  display: inline-grid !important;
  place-items: center;
  width: 34px;
  height: 34px;
  flex: 0 0 auto;
  padding: 0 !important;
  border: 1px solid var(--zs-line-strong) !important;
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-card) !important;
  background-image: none !important;
  color: var(--zs-text-2) !important;
  cursor: pointer;
  transition: background .2s var(--zs-ease), color .2s var(--zs-ease),
    border-color .2s var(--zs-ease);
}

.zs-top-theme:hover {
  border-color: var(--zs-brand-100) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

.zs-top-theme .zs-theme-ico {
  display: grid;
  place-items: center;
  line-height: 0;
}

/* --- 19.3 头像下拉 --- */
.zs-avatar-wrap {
  position: relative;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
}

.user-avatar.zs-avatar {
  cursor: pointer;
  outline: none;
  transition: box-shadow .2s var(--zs-ease), transform .2s var(--zs-ease);
}

.zs-avatar-wrap.is-open .user-avatar.zs-avatar,
.user-avatar.zs-avatar:focus-visible {
  box-shadow: 0 0 0 3px var(--zs-brand-a12) !important;
}

.zs-avatar-pop {
  position: absolute;
  top: calc(100% + 12px);
  right: 0;
  z-index: 200;
  width: 268px;
  padding: 8px;
  border: 1px solid var(--zs-line);
  border-radius: var(--zs-r-card);
  background: var(--zs-card);
  box-shadow: var(--zs-sh-3);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px) scale(.98);
  transform-origin: top right;
  transition: opacity .18s var(--zs-ease), transform .18s var(--zs-ease-out),
    visibility .18s;
}

/* 顶部小三角，视觉上与头像相连 */
.zs-avatar-pop::before {
  content: "";
  position: absolute;
  top: -6px;
  right: 14px;
  width: 11px;
  height: 11px;
  border-left: 1px solid var(--zs-line);
  border-top: 1px solid var(--zs-line);
  background: var(--zs-card);
  transform: rotate(45deg);
}

/* 悬停桥接：填补头像与弹层之间的 12px 空隙，避免鼠标穿越时误收起 */
.zs-avatar-pop::after {
  content: "";
  position: absolute;
  top: -14px;
  left: 0;
  right: 0;
  height: 14px;
}

.zs-avatar-wrap.is-open .zs-avatar-pop {
  opacity: 1;
  visibility: visible;
  transform: none;
}

.zs-pop-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 10px 12px;
  border-bottom: 1px solid var(--zs-line);
  margin-bottom: 6px;
}

.zs-pop-ava {
  display: grid;
  place-items: center;
  width: 36px;
  height: 36px;
  flex: 0 0 auto;
  border-radius: var(--zs-r-pill);
  background: linear-gradient(135deg, #3fd9ae, #28b894 52%, #0b7a60);
  color: #fff;
  font-size: 15px;
  font-weight: 500;
}

.zs-pop-id {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  flex: 1 1 auto;
}

.zs-pop-id b {
  font-size: 13.5px;
  font-weight: 500;
  color: var(--zs-text-1);
}

.zs-pop-id small {
  font-size: 11.5px;
  color: var(--zs-text-3);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.zs-pop-plan {
  flex: 0 0 auto;
  padding: 3px 8px;
  border-radius: var(--zs-r-pill);
  background: var(--zs-brand-50);
  border: 1px solid var(--zs-brand-100);
  color: var(--zs-brand-ink-deep);
  font-size: 11px;
  font-weight: 500;
}

.zs-pop-list {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.zs-pop-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  border-radius: var(--zs-r-md);
  text-decoration: none !important;
  color: var(--zs-text-1) !important;
  transition: background .16s var(--zs-ease);
}

.zs-pop-item:hover {
  background: var(--zs-sunken);
}

.zs-pop-item.is-current {
  background: var(--zs-brand-50);
}

.zs-pop-ico {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  flex: 0 0 auto;
  border-radius: 9px;
  background: var(--zs-sunken);
  color: var(--zs-text-2);
}

.zs-pop-ico svg {
  width: 16px;
  height: 16px;
}

.zs-pop-item.is-current .zs-pop-ico,
.zs-pop-item:hover .zs-pop-ico {
  background: var(--zs-brand-100);
  color: var(--zs-brand-ink-deep);
}

.zs-pop-tx {
  display: flex;
  flex-direction: column;
  gap: 1px;
  flex: 1 1 auto;
  min-width: 0;
}

.zs-pop-tx b {
  font-size: 13px;
  font-weight: 500;
}

.zs-pop-tx small {
  font-size: 11px;
  color: var(--zs-text-3);
}

.zs-pop-arrow {
  flex: 0 0 auto;
  color: var(--zs-text-4);
  font-size: 16px;
  line-height: 1;
}

.zs-pop-foot {
  margin-top: 6px;
  padding-top: 8px;
  border-top: 1px solid var(--zs-line);
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.zs-theme-btn {
  display: flex;
  align-items: center;
  gap: 9px;
  width: 100%;
  padding: 9px 10px;
  border: 0;
  border-radius: var(--zs-r-md);
  background: transparent;
  color: var(--zs-text-1);
  font-family: inherit;
  font-size: 13px;
  cursor: pointer;
  text-align: left;
  transition: background .16s var(--zs-ease);
}

.zs-theme-btn:hover {
  background: var(--zs-sunken);
}

.zs-theme-btn .zs-theme-ico {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  flex: 0 0 auto;
  border-radius: 9px;
  background: var(--zs-sunken);
  color: var(--zs-text-2);
  line-height: 0;
}

.zs-theme-btn .zs-theme-txt {
  flex: 1 1 auto;
  font-weight: 500;
}

.zs-theme-switch {
  flex: 0 0 auto;
  width: 34px;
  height: 19px;
  border-radius: var(--zs-r-pill);
  background: var(--zs-chip);
  border: 1px solid var(--zs-line-strong);
  position: relative;
  transition: background .2s var(--zs-ease), border-color .2s var(--zs-ease);
}

.zs-theme-switch i {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 13px;
  height: 13px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .2);
  transition: transform .2s var(--zs-ease-out);
}

.zs-theme-btn[aria-pressed="true"] .zs-theme-switch {
  background: var(--zs-brand);
  border-color: var(--zs-brand);
}

.zs-theme-btn[aria-pressed="true"] .zs-theme-switch i {
  transform: translateX(15px);
}

.zs-pop-logout {
  padding: 8px 10px;
  border-radius: var(--zs-r-md);
  font-size: 12.5px;
  color: var(--zs-text-3) !important;
  text-decoration: none !important;
  transition: background .16s var(--zs-ease), color .16s var(--zs-ease);
}

.zs-pop-logout:hover {
  background: var(--zs-sunken);
  color: var(--zs-text-1) !important;
}

/* --- 19.4 拉通式页脚：去掉卡片感，横向铺满 --- */
.report-footer.zs-footer,
.nr-footer.zs-footer,
.qd-footer.zs-footer,
.site-footer.zs-footer,
.dashboard-content footer.zs-footer {
  display: block !important;
  width: 100% !important;
  max-width: none !important;
  margin: 64px 0 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-top: 1px solid var(--zs-line) !important;
  border-radius: 0 !important;
  background: var(--zs-sunken) !important;
  background-image: none !important;
  box-shadow: none !important;
  color: var(--zs-text-3) !important;
  text-align: center;
}

.zs-footer-in {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  width: 100%;
  max-width: var(--zs-container);
  margin: 0 auto;
  padding: 34px var(--zs-gutter) 38px;
  box-sizing: border-box;
}

.zs-footer-in > span {
  font-size: 12.5px;
  font-weight: 300;
  color: var(--zs-text-3);
  letter-spacing: .01em;
}

/* 项目页 site-footer 的内芯是横向分栏，保留其布局，只统一留白 */
.site-footer.zs-footer .zs-footer-in {
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  text-align: left;
}

/* --- 19.6 固定浮动操作条 --- */
.nr-actionbar.zs-actionbar,
.ep-actionbar.zs-actionbar {
  position: fixed !important;
  /* #119 左边界与宽度由 zhishu-shell.js 实测版心后写入这两个变量，
     与 .dashboard-content main 严格同宽同位。缺省值仅作首帧兜底。 */
  left: var(--zs-bar-left, 50%) !important;
  right: auto !important;
  bottom: 20px !important;
  top: auto !important;
  transform: none !important;
  z-index: 120 !important;
  width: var(--zs-bar-width, min(calc(100vw - 2 * var(--zs-gutter)), var(--zs-container))) !important;
  max-width: var(--zs-bar-width, calc(100vw - 2 * var(--zs-gutter))) !important;
  margin: 0 !important;
  box-sizing: border-box;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-card) !important;
  background: rgba(255, 255, 255, .92) !important;
  background-image: none !important;
  -webkit-backdrop-filter: blur(16px) saturate(1.6);
  backdrop-filter: blur(16px) saturate(1.6);
  box-shadow: 0 18px 44px rgba(16, 32, 28, .16) !important;
}

/* #119 滚到页面底部：回落为文档流内的常规模块。
   不再 fixed、不再位移，宽度由父级（版心）自然撑满，
   与上方最后一个板块左右边缘完全对齐，也不再压住页脚。 */
.nr-actionbar.zs-actionbar.is-docked,
.ep-actionbar.zs-actionbar.is-docked {
  position: static !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
  transform: none !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 20px 0 0 !important;
  z-index: auto !important;
  /* 落位后是普通模块，不需要玻璃拟态与投影 */
  background: var(--zs-card) !important;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  box-shadow: var(--zs-sh-1) !important;
}

.zs-actionbar-spacer {
  width: 100%;
  flex: 0 0 auto;
  pointer-events: none;
}

/* 落位后 spacer 归零，避免底部多出一段空白 */
.zs-actionbar-spacer.is-docked {
  height: 0 !important;
}

@media (max-width: 700px) {
  .nr-actionbar.zs-actionbar,
  .ep-actionbar.zs-actionbar {
    bottom: 12px !important;
    border-radius: var(--zs-r-md) !important;
  }

  .zs-footer-in {
    padding: 28px 16px 32px;
  }

  .topbar .brand.zs-brand img {
    height: 28px;
  }
}

/* ==========================================================================
 * 20. 深色模式（html[data-theme="dark"]）
 *     令牌参考 zhishu-logo/index.html：
 *       --bg:#0A1512  --panel:#0F211B  --panel-2:#12281F  --line:#1E3A2F
 *       --tx:#E9F6F0  --tx-2:#9DBBAE   --tx-3:#84A194
 *       品牌绿在深色下提亮：#28B894 → #3FD9AE，保证对比度
 *
 *     策略：先重映射全部设计令牌（--zs-* / --wb-* / --nr-* / --pj-* /
 *     --qd-* / --ep-*），再对硬编码 #fff 的组件逐条兜底。
 *     本段位于文件末尾，源顺序最后，配合同级特异性 + !important 裁决。
 * ===================================================================== */

html[data-theme="dark"] {
  /* --- 文字：反相 --- */
  --zs-text-1: #e9f6f0;
  --zs-text-2: #9dbbae;
  /* text-3 原 #6e8a7e 在 chip(#12281f) 上仅 4.15，未过 AA。
     提到 #84a194：page 6.65 / card 5.99 / sunken 6.39 / chip 5.56，
     仍明显暗于 text-2(7.53)，三级层次保留。 */
  --zs-text-3: #84a194;
  --zs-text-4: #6b8578;
  --zs-text-inverse: #0a1512;

  /* 深色下的可读三级文字：card 6.27 / chip 5.83 / page 6.97 */
  --zs-muted: #87a598;
  --zs-kicker: #6fe3c1;       /* page 11.9 / card 10.72 */

  /* --- 品牌绿：深色下提亮 --- */
  --zs-brand: #3fd9ae;
  --zs-brand-450: #35cfa4;
  --zs-brand-ink: #6fe3c1;
  --zs-brand-ink-deep: #8ff0d4;
  --zs-brand-100: #1e3a2f;
  --zs-brand-50: #12281f;
  --zs-brand-a12: rgba(63, 217, 174, .16);

  /* --- 语义色：深色下提亮，保持可辨 --- */
  --zs-success: #3fd9ae;
  --zs-success-bg: #10261f;
  --zs-blue: #6ba6f7;
  --zs-violet: #9b8cff;
  --zs-amber: #f0cb74;
  --zs-orange: #f0a184;
  --zs-red: #f0736f;
  --zs-red-bg: #2a1618;
  /* 声誉负面用的玫红、以及信源榜的藏青字，浅色值(#a8306a / #4c4f6b)
     在深底上只有 2.4~2.6，这里补两个深色专用语义色。 */
  --zs-pink: #f28ab8;        /* page 8.06 / card 7.26 / chip 6.75 */
  --zs-navy-ink: #a8b0d8;    /* page 8.74 / card 7.87 / chip 7.31 */

  /* --- 面：深绿墨底 --- */
  --zs-page: #0a1512;
  --zs-card: #0f211b;
  --zs-sunken: #0c1a15;
  --zs-chip: #12281f;
  --zs-dark: #3fd9ae;
  --zs-navy-1: #0c1a15;
  --zs-navy-2: #12281f;

  /* --- 线 --- */
  --zs-line: #1e3a2f;
  --zs-line-strong: #27473a;
  --zs-line-brand: #1e3a2f;

  /* --- 阴影：深色下改用更重的黑，避免"发光"错觉 --- */
  --zs-sh-1: 0 1px 2px rgba(0, 0, 0, .4);
  --zs-sh-2: 0 8px 24px rgba(0, 0, 0, .5);
  --zs-sh-3: 0 16px 40px rgba(0, 0, 0, .58);
  --zs-sh-4: 0 20px 40px rgba(0, 0, 0, .62);
  --zs-sh-dark: 0 10px 24px rgba(0, 0, 0, .5);

  /* --- 旧 wb 令牌同步重映射 --- */
  --wb-text-1: #e9f6f0;
  --wb-text-2: #9dbbae;
  --wb-text-3: #84a194;
  --wb-text-4: #557064;
  --wb-brand: #3fd9ae;
  --wb-brand-500: #35cfa4;
  --wb-brand-text: #8ff0d4;
  --wb-brand-100: #1e3a2f;
  --wb-brand-50: #12281f;
  --wb-surface-page: #0a1512;
  --wb-surface-card: #0f211b;
  --wb-surface-sunken: #0c1a15;
  --wb-surface-chip: #12281f;
  --wb-border-subtle: #1e3a2f;
  --wb-border: #27473a;
  --wb-dark-1: #3fd9ae;
  --wb-navy-1: #0c1a15;
  --wb-navy-2: #12281f;
  --wb-blue: #6ba6f7;
  --wb-violet: #9b8cff;
  --wb-amber: #f0cb74;
  --wb-orange: #f0a184;
  --wb-red: #f0736f;
  --wb-shadow-sm: 0 4px 12px -4px rgba(0, 0, 0, .5);
  --wb-shadow-md: 0 8px 24px rgba(0, 0, 0, .5);
  --wb-shadow-lg: 0 16px 40px rgba(0, 0, 0, .58);
  --wb-shadow-xl: 0 24px 64px rgba(0, 0, 0, .62);
  --wb-shadow-brand: 0 2px 4px rgba(63, 217, 174, .22);
  --wb-shadow-brand-lg: 0 8px 24px rgba(63, 217, 174, .2);

  /* --- 新建页令牌 --- */
  --nr-green: #3fd9ae;
  --nr-green-2: #35cfa4;
  --nr-green-ink: #8ff0d4;
  --nr-green-soft: #12281f;
  --nr-green-line: #1e3a2f;
  --nr-blue: #6ba6f7;
  --nr-blue-ink: #a8cbfa;
  --nr-blue-soft: #101d2c;
  --nr-blue-line: #1d3350;
  --nr-amber: #f0cb74;
  --nr-amber-ink: #f5dda6;
  --nr-amber-soft: #241f12;
  --nr-amber-line: #3d3520;
  --nr-violet: #9b8cff;
  --nr-violet-soft: #1a1730;
  --nr-violet-line: #2c2650;
  --nr-red: #f0736f;
  --nr-red-soft: #2a1618;
  --nr-ink: #e9f6f0;
  --nr-ink-2: #9dbbae;
  --nr-ink-3: #84a194;
  --nr-line: #1e3a2f;
  --nr-bg: #0c1a15;

  /* --- 项目页令牌 --- */
  --pj-green: #3fd9ae;
  --pj-green-2: #35cfa4;
  --pj-green-ink: #8ff0d4;
  --pj-green-soft: #12281f;
  --pj-green-line: #1e3a2f;
  --pj-blue: #6ba6f7;
  --pj-blue-ink: #a8cbfa;
  --pj-blue-soft: #101d2c;
  --pj-blue-line: #1d3350;
  --pj-amber: #f0cb74;
  --pj-amber-ink: #f5dda6;
  --pj-amber-soft: #241f12;
  --pj-amber-line: #3d3520;
  --pj-violet: #9b8cff;
  --pj-violet-soft: #1a1730;
  --pj-red: #f0736f;
  --pj-red-ink: #f5a3a0;
  --pj-red-soft: #2a1618;
  --pj-gray: #8fa89c;
  --pj-gray-soft: #12281f;
  --pj-ink: #e9f6f0;
  --pj-ink-2: #9dbbae;
  --pj-ink-3: #84a194;
  --pj-line: #1e3a2f;
  --pj-bg: #0c1a15;
  --pj-shadow: 0 8px 24px rgba(0, 0, 0, .5);
  --pj-shadow-lg: 0 18px 48px rgba(0, 0, 0, .6);

  /* --- 详情页令牌 --- */
  --qd-brand: #3fd9ae;
  --qd-brand-deep: #8ff0d4;
  --qd-brand-50: #12281f;
  --qd-ink: #e9f6f0;
  --qd-muted: #9dbbae;
  --qd-faint: #84a194;
  --qd-line: #1e3a2f;
  --qd-line-soft: #162c23;
  --qd-good: #3fd9ae;
  --qd-mid: #6ba6f7;
  --qd-warn: #f0cb74;
  --qd-bad: #f0736f;
  --qd-miss: #557064;
  --qd-shadow: 0 8px 24px rgba(0, 0, 0, .5);
  --qd-shadow-sm: 0 2px 8px rgba(0, 0, 0, .4);

  /* --- 编辑页令牌 --- */
  --ep-green: #3fd9ae;
  --ep-green-ink: #8ff0d4;
  --ep-green-soft: #12281f;
  --ep-amber: #f0cb74;
  --ep-amber-ink: #f5dda6;
  --ep-amber-soft: #241f12;
  --ep-blue: #6ba6f7;
  --ep-blue-ink: #a8cbfa;
  --ep-violet: #9b8cff;
  --ep-red: #f0736f;
  --ep-red-ink: #f5a3a0;
  --ep-gray: #8fa89c;
  --ep-line: #1e3a2f;

  color-scheme: dark;
}

/* --- 20.1 页底与光晕：深色下换成极淡的品牌绿辉光 --- */
html[data-theme="dark"],
html[data-theme="dark"] body {
  background-color: var(--zs-page) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] body::before {
  background-image: none !important;
  background: radial-gradient(58% 52% at 50% 0%,
      rgba(63, 217, 174, .13) 0%,
      rgba(40, 184, 148, .06) 42%,
      rgba(10, 21, 18, 0) 76%) !important;
  opacity: .9 !important;
  animation: none !important;
}

html[data-theme="dark"] ::selection,
html[data-theme="dark"] ::-moz-selection {
  background: rgba(63, 217, 174, .28);
  color: #e9f6f0;
}

/* --- 20.2 卡片面：所有硬编码 #fff 的容器改深绿面板 --- */
html[data-theme="dark"] .panel,
html[data-theme="dark"] .dashboard-content .panel,
html[data-theme="dark"] .detail-table,
html[data-theme="dark"] .word-section-panel,
html[data-theme="dark"] .question-source,
html[data-theme="dark"] .effect-pie-card,
html[data-theme="dark"] .overview-summary,
html[data-theme="dark"] .report-hero,
html[data-theme="dark"] .trend-card,
html[data-theme="dark"] .volume-card,
html[data-theme="dark"] .rep-card,
html[data-theme="dark"] .overview-kpis > div,
html[data-theme="dark"] .product-overview-item,
html[data-theme="dark"] .video-overview-item,
html[data-theme="dark"] .competitor-board,
html[data-theme="dark"] .source-dual-card,
html[data-theme="dark"] .source-analysis-card,
html[data-theme="dark"] .distribution-panel,
html[data-theme="dark"] .word-direct-group,
html[data-theme="dark"] .hero-score,
html[data-theme="dark"] .ai-index-search,
html[data-theme="dark"] .ai-index-result,
html[data-theme="dark"] .industry-panel,
html[data-theme="dark"] .semantic-panel,
html[data-theme="dark"] .nr-steps,
html[data-theme="dark"] .nr-card,
html[data-theme="dark"] .nr-plat-card,
html[data-theme="dark"] .nr-q-row,
html[data-theme="dark"] .nr-link-row,
html[data-theme="dark"] .nr-core-item,
html[data-theme="dark"] .pj-card,
html[data-theme="dark"] .pj-stat,
html[data-theme="dark"] .pj-toolbar,
html[data-theme="dark"] .pj-table-wrap,
html[data-theme="dark"] .pj-empty,
html[data-theme="dark"] .pj-hero,
html[data-theme="dark"] .qd-kpi,
html[data-theme="dark"] .qd-day,
html[data-theme="dark"] .qd-run,
html[data-theme="dark"] .qd-ev-block,
html[data-theme="dark"] .qd-main .panel,
html[data-theme="dark"] .ep-diff-group,
html[data-theme="dark"] .ep-dirty-box,
html[data-theme="dark"] .kn-modal-card,
html[data-theme="dark"] .kn-mini-row,
html[data-theme="dark"] .nr-modal-box,
html[data-theme="dark"] .pj-modal,
html[data-theme="dark"] .pj-drawer {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}

/* 词条分组：深色下用 slightly 抬起的面区分 */
html[data-theme="dark"] .word-direct-group.positive-words,
html[data-theme="dark"] .word-direct-group.negative-words,
html[data-theme="dark"] .word-direct-group.neutral-words,
html[data-theme="dark"] .word-direct-group.all-words,
html[data-theme="dark"] .word-direct-group.mentioned-words,
html[data-theme="dark"] .word-direct-group.not-mentioned-words,
html[data-theme="dark"] .word-section-panel .word-direct-group {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
}

/* --- 20.3 顶栏 / 筛选条 / 侧栏 --- */
html[data-theme="dark"] .topbar,
html[data-theme="dark"] .floating-shell .topbar,
html[data-theme="dark"] .dashboard-content .topbar,
html[data-theme="dark"] .page-shell .floating-shell .topbar,
html[data-theme="dark"] div.floating-shell .topbar {
  background: rgba(15, 33, 27, .88) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .filter-bar,
html[data-theme="dark"] .floating-shell .filter-bar,
html[data-theme="dark"] .dashboard-content .filter-bar {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .dashboard-sidebar,
html[data-theme="dark"] .sidebar-brand,
html[data-theme="dark"] .sidebar-bottom {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .topbar nav,
html[data-theme="dark"] .dashboard-content .topbar nav {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .topbar-context,
html[data-theme="dark"] .topbar-context span,
html[data-theme="dark"] .topbar-context b {
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .topbar-context strong,
html[data-theme="dark"] .topbar-context a {
  color: var(--zs-text-1) !important;
}

/* --- 20.4 表单控件 --- */
html[data-theme="dark"] input[type="text"],
html[data-theme="dark"] input[type="date"],
html[data-theme="dark"] input[type="search"],
html[data-theme="dark"] input[type="number"],
html[data-theme="dark"] input[type="email"],
html[data-theme="dark"] input[type="password"],
html[data-theme="dark"] select,
html[data-theme="dark"] textarea,
html[data-theme="dark"] .nr-mini-input,
html[data-theme="dark"] .nr-tag-input,
html[data-theme="dark"] .nr-bulk-input,
html[data-theme="dark"] .nr-link-input,
html[data-theme="dark"] .nr-field input,
html[data-theme="dark"] .nr-field select,
html[data-theme="dark"] .nr-tagbox,
html[data-theme="dark"] .filter-bar select,
html[data-theme="dark"] .filter-bar input[type="date"],
html[data-theme="dark"] .ai-query-control input,
html[data-theme="dark"] .pj-search,
html[data-theme="dark"] .pj-modal-field input {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] input::placeholder,
html[data-theme="dark"] textarea::placeholder {
  color: var(--zs-text-4) !important;
}

html[data-theme="dark"] input:focus,
html[data-theme="dark"] select:focus,
html[data-theme="dark"] textarea:focus,
html[data-theme="dark"] .nr-field input:focus,
html[data-theme="dark"] .nr-field select:focus,
html[data-theme="dark"] .nr-tagbox:focus-within,
html[data-theme="dark"] .nr-link-input:focus,
html[data-theme="dark"] .nr-mini-input:focus,
html[data-theme="dark"] .filter-bar select:focus,
html[data-theme="dark"] .filter-bar input:focus,
html[data-theme="dark"] .date-range input:focus,
html[data-theme="dark"] .ai-query-control input:focus,
html[data-theme="dark"] .pj-search:focus-within,
html[data-theme="dark"] .pj-modal-field input:focus {
  background: var(--zs-chip) !important;
  border-color: var(--zs-brand) !important;
  box-shadow: 0 0 0 3px rgba(63, 217, 174, .16) !important;
}

/* 日期控件的原生日历图标在深色下反白 */
html[data-theme="dark"] input[type="date"]::-webkit-calendar-picker-indicator {
  filter: invert(1) brightness(1.6);
  opacity: .6;
}

html[data-theme="dark"] select option {
  background: var(--zs-card);
  color: var(--zs-text-1);
}

/* --- 20.5 次级按钮：深底细边（主按钮走品牌绿，见 20.6） --- */
html[data-theme="dark"] .nr-btn.ghost,
html[data-theme="dark"] .pj-btn,
html[data-theme="dark"] .pj-btn.is-ghost,
html[data-theme="dark"] .pj-top-btn,
html[data-theme="dark"] .nr-tool-btn,
html[data-theme="dark"] .nr-bulk-btn,
html[data-theme="dark"] .nr-add-btn,
html[data-theme="dark"] .nr-top-btn,
html[data-theme="dark"] .topbar-actions button:not(.is-primary),
html[data-theme="dark"] .filter-bar button:not(.query-btn),
html[data-theme="dark"] .pj-icon-btn,
html[data-theme="dark"] .qd-back-btn,
html[data-theme="dark"] .qd-tool-btn,
html[data-theme="dark"] .qd-copy-answer,
html[data-theme="dark"] .qd-load-more,
html[data-theme="dark"] .qd-record-tools button,
html[data-theme="dark"] .qd-metric-tabs button,
html[data-theme="dark"] .new-check-btn,
html[data-theme="dark"] .share-btn,
html[data-theme="dark"] .mobile-menu-toggle,
html[data-theme="dark"] .view-all-btn,
html[data-theme="dark"] .media-view-btn,
html[data-theme="dark"] .recommend-view-btn,
html[data-theme="dark"] .semantic-export-btn,
html[data-theme="dark"] .dialog-btn,
html[data-theme="dark"] .kn-modal-close,
html[data-theme="dark"] .nr-modal-x,
html[data-theme="dark"] .pj-drawer-x,
html[data-theme="dark"] .pj-modal-x,
html[data-theme="dark"] .pj-pager-nav > button,
html[data-theme="dark"] .pj-pager-nums button,
html[data-theme="dark"] .pj-dplat,
html[data-theme="dark"] .zs-top-theme {
  background: var(--zs-chip) !important;
  background-image: none !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .nr-btn.ghost:hover,
html[data-theme="dark"] .pj-btn:hover,
html[data-theme="dark"] .pj-top-btn:hover,
html[data-theme="dark"] .nr-tool-btn:hover,
html[data-theme="dark"] .topbar-actions button:not(.is-primary):hover,
html[data-theme="dark"] .filter-bar button:not(.query-btn):hover,
html[data-theme="dark"] .pj-icon-btn:hover,
html[data-theme="dark"] .qd-back-btn:hover,
html[data-theme="dark"] .new-check-btn:hover,
html[data-theme="dark"] .share-btn:hover,
html[data-theme="dark"] .zs-top-theme:hover {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* --- 20.6 主按钮：深色下用品牌绿实心 + 深墨字，替代浅色下的黑胶囊 --- */
html[data-theme="dark"] .query-btn,
html[data-theme="dark"] .dashboard-content .query-btn,
html[data-theme="dark"] .filter-bar .query-btn,
html[data-theme="dark"] .nr-btn.primary,
html[data-theme="dark"] .pj-btn.is-primary,
html[data-theme="dark"] .ai-query-control button,
html[data-theme="dark"] .nr-submit-btn,
html[data-theme="dark"] [data-nr-action="submit"],
html[data-theme="dark"] .ep-save-btn,
html[data-theme="dark"] .qd-export-btn,
html[data-theme="dark"] .topbar-actions .query-btn {
  background: var(--zs-brand) !important;
  background-image: none !important;
  color: #06231b !important;
  border-color: var(--zs-brand) !important;
}

html[data-theme="dark"] .query-btn:hover,
html[data-theme="dark"] .nr-btn.primary:hover,
html[data-theme="dark"] .pj-btn.is-primary:hover,
html[data-theme="dark"] .ai-query-control button:hover,
html[data-theme="dark"] .nr-submit-btn:hover,
html[data-theme="dark"] [data-nr-action="submit"]:hover,
html[data-theme="dark"] .ep-save-btn:hover {
  background: #6fe3c1 !important;
  background-image: none !important;
  color: #06231b !important;
}

html[data-theme="dark"] .nr-btn.primary:disabled,
html[data-theme="dark"] .nr-btn.primary.is-blocked,
html[data-theme="dark"] .pj-btn.is-primary:disabled,
html[data-theme="dark"] .query-btn:disabled {
  background: var(--zs-chip) !important;
  color: var(--zs-text-4) !important;
  border-color: var(--zs-line) !important;
}

/* 危险按钮：深色下用语义红 */
html[data-theme="dark"] .pj-btn.is-danger {
  background: var(--zs-red-bg) !important;
  border-color: rgba(240, 115, 111, .4) !important;
  color: var(--zs-red) !important;
}

/* --- 20.7 TAB / 分段控件：槽用更深的墨底，激活态抬起 --- */
html[data-theme="dark"] .distribution-tabs,
html[data-theme="dark"] .detail-platform-tabs,
html[data-theme="dark"] .word-view-tabs,
html[data-theme="dark"] .source-tabs,
html[data-theme="dark"] .sd-metric-toggle,
html[data-theme="dark"] .sa-metric-toggle,
html[data-theme="dark"] .sd-type-tabs,
html[data-theme="dark"] .nr-word-tabs,
html[data-theme="dark"] .nr-seg,
html[data-theme="dark"] .pj-viewmode,
html[data-theme="dark"] .pj-view-tabs,
html[data-theme="dark"] .ep-status-seg,
html[data-theme="dark"] .qd-metric-tabs {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .distribution-tabs button,
html[data-theme="dark"] .detail-platform-tabs button,
html[data-theme="dark"] .word-view-tabs button,
html[data-theme="dark"] .source-tabs button,
html[data-theme="dark"] .sd-metric-toggle button,
html[data-theme="dark"] .sa-metric-toggle button,
html[data-theme="dark"] .sd-type-tabs button,
html[data-theme="dark"] .nr-word-tab,
html[data-theme="dark"] .nr-seg button,
html[data-theme="dark"] .pj-viewmode button,
html[data-theme="dark"] .ep-status-seg button {
  background: transparent !important;
  background-image: none !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .distribution-tabs button.active,
html[data-theme="dark"] .detail-platform-tabs button.active,
html[data-theme="dark"] .word-view-tabs button.active,
html[data-theme="dark"] .source-tabs button.active,
html[data-theme="dark"] .sd-metric-toggle button.active,
html[data-theme="dark"] .sa-metric-toggle button.active,
html[data-theme="dark"] .sd-type-tabs button.active,
html[data-theme="dark"] .sd-type-tabs button[aria-selected="true"],
html[data-theme="dark"] .nr-word-tab.is-active,
html[data-theme="dark"] .nr-seg button.is-active,
html[data-theme="dark"] .pj-viewmode button.active,
html[data-theme="dark"] .pj-view-tabs button.active,
html[data-theme="dark"] .ep-status-seg button.is-active,
html[data-theme="dark"] .qd-metric-tabs button.active {
  background: var(--zs-chip) !important;
  background-image: none !important;
  color: var(--zs-brand-ink-deep) !important;
  border-color: var(--zs-line-strong) !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .4) !important;
}

html[data-theme="dark"] .sd-type-tabs button:hover,
html[data-theme="dark"] .nr-word-tab:hover,
html[data-theme="dark"] .ep-status-seg button:hover {
  background: var(--zs-chip) !important;
  color: var(--zs-text-1) !important;
}

/* --- 20.8 行 / 列表 / 表格 --- */
html[data-theme="dark"] .table-row,
html[data-theme="dark"] .word-list-row,
html[data-theme="dark"] .media-source-row,
html[data-theme="dark"] .question-source .media-source-row,
html[data-theme="dark"] .source-question-list .question-item,
html[data-theme="dark"] .semantic-table-row,
html[data-theme="dark"] .board-row,
html[data-theme="dark"] .bar-row,
html[data-theme="dark"] .rank-row,
html[data-theme="dark"] .distribution-row,
html[data-theme="dark"] .product-ranking-row,
html[data-theme="dark"] .video-ranking-row,
html[data-theme="dark"] .platform-heat-row,
html[data-theme="dark"] .sd-rank-row,
html[data-theme="dark"] .sd-type-row,
html[data-theme="dark"] .pj-table tbody tr,
html[data-theme="dark"] .nr-valid-list li,
html[data-theme="dark"] .nr-valid-list li button {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .source-question-list .question-item:hover,
html[data-theme="dark"] .table-row:hover,
html[data-theme="dark"] .pj-table tbody tr:hover,
html[data-theme="dark"] .nr-core-item:hover,
html[data-theme="dark"] .nr-plat-card:hover {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .source-question-list .question-item.active,
html[data-theme="dark"] .pj-table tbody tr.is-selected {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .table-head,
html[data-theme="dark"] .pj-table thead th,
html[data-theme="dark"] .semantic-table-head {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-3) !important;
}

/* --- 20.9 徽标 / 芯片 / 标签 --- */
html[data-theme="dark"] .hero-meta span,
html[data-theme="dark"] .product-stats span,
html[data-theme="dark"] .overview-tags span,
html[data-theme="dark"] .sd-tags span,
html[data-theme="dark"] .kn-ctx-chip,
html[data-theme="dark"] .kn-source-context .kn-ctx-chip,
html[data-theme="dark"] .section-kicker,
html[data-theme="dark"] .nr-step-tag,
html[data-theme="dark"] .nr-source-count,
html[data-theme="dark"] .pj-plat-dot,
html[data-theme="dark"] .media-type-badge,
html[data-theme="dark"] .owned-source-badge {
  background: var(--zs-chip) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .overview-tags span b,
html[data-theme="dark"] .sd-tags span,
html[data-theme="dark"] .kn-ctx-chip {
  color: var(--zs-brand-ink-deep) !important;
}

/* --- 20.10 图表：环形中心 / 平台 logo 底 / tooltip --- */
html[data-theme="dark"] .donut::before,
html[data-theme="dark"] .distribution-donut > div,
html[data-theme="dark"] .qd-day::before {
  background: var(--zs-card) !important;
}

html[data-theme="dark"] .qd-day::before {
  box-shadow: 0 0 0 3px var(--zs-card) !important;
}

/* 平台 logo 是彩色位图，深色下保留白底托，避免深色 logo 融进背景 */
html[data-theme="dark"] .platform-logo.has-logo,
html[data-theme="dark"] .qd-pf-logo.has-logo,
html[data-theme="dark"] .pf-logo.has-logo,
html[data-theme="dark"] .nr-plat-logo,
html[data-theme="dark"] .ph-logo {
  background: #f2f7f5 !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .4) !important;
}

html[data-theme="dark"] .trend-tooltip,
html[data-theme="dark"] .trend-card .trend-tooltip {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-1) !important;
  box-shadow: 0 14px 34px rgba(0, 0, 0, .6) !important;
}

html[data-theme="dark"] .trend-tooltip strong,
html[data-theme="dark"] .tooltip-row {
  color: var(--zs-text-1) !important;
}

/* --- 20.11 开关 / 勾选框 --- */
html[data-theme="dark"] .nr-mini-switch,
html[data-theme="dark"] .nr-switch {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .nr-mini-switch i,
html[data-theme="dark"] .nr-switch i::after {
  background: #cfe6dc !important;
}

html[data-theme="dark"] .nr-plat-check {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line-strong) !important;
}

/* --- 20.12 浮条 / 弹层 / 抽屉 --- */
html[data-theme="dark"] .nr-actionbar.zs-actionbar,
html[data-theme="dark"] .ep-actionbar.zs-actionbar {
  background: rgba(15, 33, 27, .92) !important;
  border-color: var(--zs-line-strong) !important;
  box-shadow: 0 18px 44px rgba(0, 0, 0, .6) !important;
}

html[data-theme="dark"] .nr-modal-mask,
html[data-theme="dark"] .pj-mask,
html[data-theme="dark"] .kn-modal-mask {
  background: rgba(4, 10, 8, .72) !important;
}

html[data-theme="dark"] .zs-avatar-pop {
  background: var(--zs-card);
  border-color: var(--zs-line-strong);
}

html[data-theme="dark"] .zs-avatar-pop::before {
  background: var(--zs-card);
  border-color: var(--zs-line-strong);
}

html[data-theme="dark"] .zs-pop-item:hover,
html[data-theme="dark"] .zs-theme-btn:hover,
html[data-theme="dark"] .zs-pop-logout:hover {
  background: var(--zs-chip);
}

html[data-theme="dark"] .zs-pop-ico,
html[data-theme="dark"] .zs-theme-btn .zs-theme-ico {
  background: var(--zs-chip);
  color: var(--zs-text-2);
}

html[data-theme="dark"] .zs-pop-item.is-current {
  background: var(--zs-brand-50);
}

html[data-theme="dark"] .zs-pop-item.is-current .zs-pop-ico,
html[data-theme="dark"] .zs-pop-item:hover .zs-pop-ico {
  background: var(--zs-brand-100);
  color: var(--zs-brand-ink-deep);
}

html[data-theme="dark"] .zs-theme-switch {
  background: var(--zs-chip);
  border-color: var(--zs-line-strong);
}

html[data-theme="dark"] .zs-theme-switch i {
  background: #cfe6dc;
}

/* --- 20.13 页脚：深色下用更深的墨底拉通 --- */
html[data-theme="dark"] .report-footer.zs-footer,
html[data-theme="dark"] .nr-footer.zs-footer,
html[data-theme="dark"] .qd-footer.zs-footer,
html[data-theme="dark"] .site-footer.zs-footer,
html[data-theme="dark"] .dashboard-content footer.zs-footer {
  background: var(--zs-sunken) !important;
  border-top-color: var(--zs-line) !important;
  color: var(--zs-text-3) !important;
}

/* --- 20.14 文字兜底：硬编码深色字改亮 --- */
html[data-theme="dark"] h1,
html[data-theme="dark"] h2,
html[data-theme="dark"] h3,
html[data-theme="dark"] h4,
html[data-theme="dark"] h5,
html[data-theme="dark"] h6,
html[data-theme="dark"] .section-heading h2,
html[data-theme="dark"] .subsection-title > span,
html[data-theme="dark"] .trend-inline-title > span,
html[data-theme="dark"] .kn-block-title,
html[data-theme="dark"] .report-hero h1,
html[data-theme="dark"] .word-subsection-title,
html[data-theme="dark"] .word-direct-title,
html[data-theme="dark"] .sd-module-title,
html[data-theme="dark"] .media-title,
html[data-theme="dark"] .filter-title span,
html[data-theme="dark"] .ai-index-label,
html[data-theme="dark"] .ai-subtitle,
html[data-theme="dark"] .trend-card-head,
html[data-theme="dark"] .competitor-heading,
html[data-theme="dark"] .ep-meta-item,
html[data-theme="dark"] .ep-diff-group-head,
html[data-theme="dark"] .ep-diff-after,
html[data-theme="dark"] .kn-ctx-q,
html[data-theme="dark"] .kn-modal-head,
html[data-theme="dark"] .kn-fact,
html[data-theme="dark"] .heat-summary,
html[data-theme="dark"] .sd-rank-pct,
html[data-theme="dark"] .effect-legend,
html[data-theme="dark"] .legend-list,
html[data-theme="dark"] .source-type-list {
  color: var(--zs-text-1) !important;
  -webkit-text-fill-color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .section-note,
html[data-theme="dark"] .subsection-title > small,
html[data-theme="dark"] .hero-copy > p,
html[data-theme="dark"] .nr-hint,
html[data-theme="dark"] .nr-note,
html[data-theme="dark"] .ep-empty,
html[data-theme="dark"] .ai-search-copy small {
  color: var(--zs-text-3) !important;
}

/* --- 20.15 滚动条 --- */
html[data-theme="dark"] .semantic-table::-webkit-scrollbar-track,
html[data-theme="dark"] .detail-question-scroll::-webkit-scrollbar-track {
  background: var(--zs-sunken);
}

html[data-theme="dark"] .semantic-table::-webkit-scrollbar-thumb,
html[data-theme="dark"] .detail-question-scroll::-webkit-scrollbar-thumb {
  background: var(--zs-line-strong);
}

html[data-theme="dark"] .semantic-table::-webkit-scrollbar-thumb:hover,
html[data-theme="dark"] .detail-question-scroll::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand);
}

/* --- 20.16 浅色下才有的暖色警示块，深色下换冷调 --- */
html[data-theme="dark"] .nr-valid-list,
html[data-theme="dark"] .ep-dirty-box {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
}

/* --- 20.17 白底残留收尾：实测扫出的 19 类硬编码浅底逐条覆盖 --- */

/* 词条分组外壳（.word-section-panel .word-subsection 特异性更高） */
html[data-theme="dark"] .word-section-panel .word-subsection,
html[data-theme="dark"] .word-subsection {
  background: var(--zs-chip) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

/* 词条行序号徽标 .word-list-row > b */
html[data-theme="dark"] .word-list-row b,
html[data-theme="dark"] .word-list-row > b {
  background: var(--zs-sunken) !important;
  color: var(--zs-text-2) !important;
}

/* 词条占比条底槽（无类名 div，靠父级定位） */
html[data-theme="dark"] .word-list-row div,
html[data-theme="dark"] .word-bar,
html[data-theme="dark"] .word-list-row i {
  background-color: var(--zs-sunken) !important;
}

/* 所有信源分析榜单标签：合作蓝 / 官方青绿（#107） */
html[data-theme="dark"] .sa-rank-tag {
  background: rgba(107, 166, 247, .16) !important;
  border-color: rgba(107, 166, 247, .30) !important;
  color: var(--zs-partner-ink) !important;
}

html[data-theme="dark"] .sa-rank-tag.is-official {
  background: rgba(63, 217, 174, .16) !important;
  border-color: rgba(63, 217, 174, .30) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 顶栏导航激活态（layout-fix.css 用了浅绿底） */
html[data-theme="dark"] .topbar nav a.active,
html[data-theme="dark"] .topbar nav button.active,
html[data-theme="dark"] .topbar nav a[aria-current="page"] {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  color: var(--zs-brand-ink-deep) !important;
  border-color: var(--zs-brand) !important;
}

html[data-theme="dark"] .topbar nav a,
html[data-theme="dark"] .topbar nav button {
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .topbar nav a:hover,
html[data-theme="dark"] .topbar nav button:hover {
  background: var(--zs-chip) !important;
  color: var(--zs-text-1) !important;
}

/* 项目页芯片 */
html[data-theme="dark"] .pj-chip {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

/* 新建 / 编辑页：标签、图标钮、明细块、说明条、平台端标 */
html[data-theme="dark"] .nr-tag.is-gray {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .nr-icon-btn,
html[data-theme="dark"] .nr-plat-quick button,
html[data-theme="dark"] .nr-detail-empty button,
html[data-theme="dark"] .nr-tag button {
  background: var(--zs-chip) !important;
  background-image: none !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .nr-icon-btn:hover,
html[data-theme="dark"] .nr-plat-quick button:hover {
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .nr-detail-block,
html[data-theme="dark"] .nr-detail-empty {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

/* 计费块原本有 amber→#fff 渐变，深色下改纯面 */
html[data-theme="dark"] .nr-detail-block.is-value {
  background: var(--zs-chip) !important;
  background-image: none !important;
}

html[data-theme="dark"] .nr-source-note {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .nr-plat-client,
html[data-theme="dark"] .nr-core-idx {
  background: var(--zs-sunken) !important;
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .nr-core-item.is-active .nr-core-idx {
  background: var(--zs-brand) !important;
  color: #06231b !important;
}

html[data-theme="dark"] .nr-plat-card.is-on .nr-plat-client {
  background: rgba(63, 217, 174, .18) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 输入类控件里 new-report.css 用了 #fcfdfd，比 20.4 更具体，需再压一层 */
html[data-theme="dark"] .nr-field input[type="text"],
html[data-theme="dark"] .nr-field input[type="url"],
html[data-theme="dark"] .nr-field select,
html[data-theme="dark"] .nr-tag-input,
html[data-theme="dark"] .nr-link-input,
html[data-theme="dark"] .nr-tagbox {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .nr-field.is-invalid input,
html[data-theme="dark"] .nr-field.is-invalid .nr-tagbox {
  background: var(--zs-red-bg) !important;
}

/* 详情页：标签、展开箭头、信源行、进度槽 */
html[data-theme="dark"] .qd-tag {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .qd-caret {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .qd-day.open .qd-caret {
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .qd-sc-row {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .qd-pf-row div,
html[data-theme="dark"] .qd-sc-bar,
html[data-theme="dark"] .qd-ev-bar {
  background-color: var(--zs-sunken) !important;
}

/* AI 指数页热词云：暖黄底改冷调，字号档位保留 */
html[data-theme="dark"] .industry-word-cloud .cloud-size-1,
html[data-theme="dark"] .industry-word-cloud .cloud-size-2,
html[data-theme="dark"] .industry-word-cloud .cloud-size-3,
html[data-theme="dark"] .industry-word-cloud .cloud-size-4,
html[data-theme="dark"] .industry-word-cloud button {
  background: var(--zs-chip) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .industry-word-cloud button:hover {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* --- 20.18 最后 3 类残留（实测规则溯源后精准覆盖） --- */

/* 信源问题列表的序号徽标：.source-question-list .question-item b */
html[data-theme="dark"] .source-question-list .question-item b {
  background: var(--zs-sunken) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .source-question-list .question-item.active b {
  background: var(--zs-brand) !important;
  color: #06231b !important;
}

/* 词条占比条底槽：.word-list-row 内无类名 div（JS 渲染的进度槽） */
html[data-theme="dark"] .word-direct-group .word-list-row div,
html[data-theme="dark"] .word-subsection .word-list-row div,
html[data-theme="dark"] .word-list div {
  background-color: var(--zs-sunken) !important;
}

/* 新建 / 编辑页卡片完成度标 */
html[data-theme="dark"] .nr-card-state {
  background: var(--zs-chip) !important;
  color: var(--zs-text-3) !important;
  box-shadow: none !important;
}

html[data-theme="dark"] .nr-card-state.is-done {
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
  box-shadow: inset 0 0 0 1px rgba(63, 217, 174, .28) !important;
}

html[data-theme="dark"] .nr-card-state.is-warn {
  background: var(--zs-red-bg) !important;
  color: var(--zs-red) !important;
  box-shadow: inset 0 0 0 1px rgba(240, 115, 111, .28) !important;
}

/* --- 20.19 柱状图底槽：interactions.css 用 .dashboard-content 前缀 + !important，
       必须同等特异性才能压过（这是最后一类白底残留） --- */
html[data-theme="dark"] .dashboard-content .sd-rank-bar,
html[data-theme="dark"] .dashboard-content .sd-type-bar,
html[data-theme="dark"] .dashboard-content .sa-type-row > div,
html[data-theme="dark"] .dashboard-content .distribution-row > div,
html[data-theme="dark"] .dashboard-content .board-track,
html[data-theme="dark"] .sd-rank-bar,
html[data-theme="dark"] .sd-type-bar,
html[data-theme="dark"] .sa-type-row > div,
html[data-theme="dark"] .distribution-row > div,
html[data-theme="dark"] .board-track {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  box-shadow: inset 0 0 0 1px rgba(233, 246, 240, .05) !important;
}

/* ==========================================================================
 * 21. 项目管理页：列表视图皮肤 / 查看报告入口 / 抽屉底部小横排
 *     根因：projects.css 的 .pj-table 是上一代绿色板（#fafcfb 表头、
 *     #f4f7f6 行线、11px 字号），皮肤层此前完全没覆盖，切到列表视图
 *     就像掉进了另一个站点。此段把列表视图拉回 wb 视觉语言。
 * ===================================================================== */

/* --- 21.1 列表容器：白卡 + 细边 + 大圆角，横滚不外溢 --- */
.pj-table-wrap,
.pj-page .pj-table-wrap {
  padding: 0 !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-panel) !important;
  background: var(--zs-card) !important;
  background-image: none !important;
  box-shadow: var(--zs-sh-1) !important;
  overflow: auto !important;
}

.pj-table {
  width: 100%;
  /* #131 操作列多了「查看词条」小胶囊（约 88px），最小宽同步 +100，
     否则新增按钮会把前面的数值列挤到换行。 */
  min-width: 1280px;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  font-size: 12.5px !important;
  font-family: var(--zs-font) !important;
}

/* --- 21.2 表头：浅灰底、细字、粘性吸顶 --- */
.pj-table thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  padding: 13px 14px !important;
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-bottom: 1px solid var(--zs-line) !important;
  color: var(--zs-text-2) !important;
  font-size: 11.5px !important;
  font-weight: 500 !important;
  letter-spacing: .01em;
  text-align: left;
  white-space: nowrap;
}

.pj-table thead th:first-child { border-top-left-radius: var(--zs-r-panel); }
.pj-table thead th:last-child { border-top-right-radius: var(--zs-r-panel); }

.pj-th-sort { cursor: pointer; user-select: none; transition: color .18s var(--zs-ease); }
.pj-th-sort:hover { color: var(--zs-brand-ink-deep) !important; }

/* 排序箭头：默认灰、激活品牌绿 */
.pj-th-sort > i {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 6px;
  border-left: 3.5px solid transparent;
  border-right: 3.5px solid transparent;
  border-bottom: 5px solid var(--zs-text-4) !important;
  vertical-align: middle;
  transition: border-color .18s var(--zs-ease);
}

.pj-th-sort.is-asc { color: var(--zs-brand-ink-deep) !important; }
.pj-th-sort.is-desc { color: var(--zs-brand-ink-deep) !important; }
.pj-th-sort.is-asc > i { border-bottom-color: var(--zs-brand) !important; }
.pj-th-sort.is-desc > i {
  border-bottom: 0 !important;
  border-top: 5px solid var(--zs-brand) !important;
}

.pj-th-check,
.pj-row-check { width: 42px; text-align: center !important; }
.pj-th-acts { width: 282px; }

/* --- 21.3 行：白底、极细行线、悬停浅绿 --- */
.pj-table tbody td {
  padding: 13px 14px !important;
  border-bottom: 1px solid var(--zs-line) !important;
  color: var(--zs-text-2) !important;
  font-weight: 300 !important;
  vertical-align: middle;
  background: transparent;
}

.pj-table tbody tr {
  background: var(--zs-card) !important;
  background-image: none !important;
  transition: background .18s var(--zs-ease);
}

.pj-table tbody tr:last-child td { border-bottom: 0 !important; }
.pj-table tbody tr:hover { background: var(--zs-brand-50) !important; }
.pj-table tbody tr.is-selected { background: var(--zs-brand-50) !important; }
.pj-table tbody tr.is-selected td { border-bottom-color: var(--zs-brand-100) !important; }
.pj-table tbody tr.is-dragging { opacity: .45; }
.pj-table tbody tr.is-dragover td { box-shadow: inset 0 2px 0 var(--zs-brand) !important; }

/* 项目名列 */
.pj-td-name { min-width: 230px; }

.pj-td-name button {
  border: 0;
  padding: 0;
  background: transparent;
  color: var(--zs-text-1) !important;
  font: inherit;
  font-size: 13px !important;
  font-weight: 500 !important;
  text-align: left;
  cursor: pointer;
  transition: color .18s var(--zs-ease);
}

.pj-td-name button:hover { color: var(--zs-brand-ink-deep) !important; }

.pj-td-name small {
  display: block;
  margin-top: 4px;
  color: var(--zs-text-3) !important;
  font-size: 11px !important;
  font-weight: 300 !important;
}

.pj-td-num {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: var(--zs-text-1) !important;
}

.pj-td-num.is-up { color: var(--zs-brand-ink-deep) !important; font-weight: 500 !important; }

/* 操作列：查看报告 + 三颗小图标，一行放下 */
.pj-td-acts { white-space: nowrap; }

.pj-td-acts .pj-icon-btn {
  display: inline-grid !important;
  width: 26px !important;
  height: 26px !important;
  margin-right: 4px;
  font-size: 11px !important;
  vertical-align: middle;
}

.pj-td-acts .pj-icon-btn:last-child { margin-right: 0; }

/* --- 21.4 查看报告按钮：卡片底部通栏 / 列表行内小胶囊 --- */
/* #131 卡片底部现在是「查看报告 + 查看词条」两个入口，改双列等宽并排。
   原先 .pj-card-cta .pj-report-btn{width:100%} 会让第二个按钮被挤到下一行，
   所以这里用 grid 定宽，并在下方把 width:100% 收进 grid 单元。 */
.pj-card-cta {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--zs-line);
}

.pj-report-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 32px;
  padding: 0 15px;
  border: 1px solid var(--zs-brand-100);
  border-radius: var(--zs-r-pill);
  background: var(--zs-brand-50);
  color: var(--zs-brand-ink-deep);
  font-family: var(--zs-font);
  font-size: 12px;
  font-weight: 500;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background .2s var(--zs-ease), border-color .2s var(--zs-ease),
    color .2s var(--zs-ease), transform .2s var(--zs-ease);
}

.pj-card-cta .pj-report-btn,
.pj-card-cta .pj-words-btn { width: 100%; min-width: 0; }

/* #146 「查看词条」外层包装：卡片 grid 单元 / 表格行内 / 抽屉底栏三处共用。
   菜单已改 fixed 挂视口，这里只负责让按钮撑满所在单元。 */
.pj-words-wrap {
  position: relative;
  display: inline-flex;
  min-width: 0;
  vertical-align: middle;
}

.pj-card-cta .pj-words-wrap { display: flex; width: 100%; min-width: 0; }
.pj-td-acts .pj-words-wrap { margin-right: 6px; }
.pj-dfoot-main .pj-words-wrap { flex: 0 0 auto; margin-right: 0; }

.pj-report-btn:hover {
  border-color: var(--zs-brand);
  background: var(--zs-brand-100);
  color: var(--zs-brand-ink-deep);
  transform: translateY(-1px);
}

.pj-report-btn:active { transform: translateY(0); }

.pj-report-btn.is-sm {
  height: 26px;
  padding: 0 11px;
  margin-right: 6px;
  font-size: 11.5px;
  vertical-align: middle;
}

/* 报告图标：纯 CSS 画一张带折线的纸 */
.pj-ico-report {
  position: relative;
  display: inline-block;
  width: 12px;
  height: 13px;
  flex: 0 0 12px;
  border: 1.4px solid currentColor;
  border-radius: 2.5px;
}

.pj-ico-report::before {
  content: '';
  position: absolute;
  left: 2px;
  right: 2px;
  bottom: 2.5px;
  height: 4px;
  border-left: 1.4px solid currentColor;
  border-bottom: 1.4px solid currentColor;
  transform: skewY(-24deg);
}

/* --- 21.4b #131 查看词条按钮 ---
   与「查看报告」同一尺寸体系，但用描边次级形态（报告是实底主操作），
   落地页 = question-detail.html（详细问题页）。 */
.pj-words-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 32px;
  padding: 0 15px;
  border: 1px solid var(--zs-line-strong);
  border-radius: var(--zs-r-pill);
  background: var(--zs-card);
  color: var(--zs-text-2);
  font-family: var(--zs-font);
  font-size: 12px;
  font-weight: 500;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background .2s var(--zs-ease), border-color .2s var(--zs-ease),
    color .2s var(--zs-ease), transform .2s var(--zs-ease);
}

.pj-words-btn:hover {
  border-color: var(--zs-brand);
  background: var(--zs-brand-50);
  color: var(--zs-brand-ink-deep);
  transform: translateY(-1px);
}

.pj-words-btn:active { transform: translateY(0); }

.pj-words-btn.is-sm {
  height: 26px;
  padding: 0 11px;
  margin-right: 6px;
  font-size: 11.5px;
  vertical-align: middle;
}

/* 词条图标：纯 CSS 画「三条长短不一的横线」= 词条列表 */
.pj-ico-words {
  position: relative;
  display: inline-block;
  width: 12px;
  height: 11px;
  flex: 0 0 12px;
  border-top: 1.4px solid currentColor;
}

.pj-ico-words::before,
.pj-ico-words::after {
  content: '';
  position: absolute;
  left: 0;
  height: 0;
  border-top: 1.4px solid currentColor;
}

.pj-ico-words::before { top: 3.4px; width: 12px; }
.pj-ico-words::after { top: 7.6px; width: 7px; }

/* 抽屉底部：词条按钮与报告按钮同属主操作组，不参与压缩 */
.pj-dfoot-main .pj-words-btn { margin-right: 0; flex: 0 0 auto; }

/* --- 21.5 抽屉底部：一排小按钮，主操作左 / 删除右 --- */
.pj-drawer-foot {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: nowrap !important;
  padding: 11px 20px !important;
  border-top: 1px solid var(--zs-line) !important;
  background: var(--zs-sunken) !important;
  background-image: none !important;
}

.pj-dfoot-main {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  flex: 1 1 auto;
  overflow-x: auto;
  scrollbar-width: none;
}

.pj-dfoot-main::-webkit-scrollbar { display: none; }
.pj-dfoot-main .pj-report-btn { margin-right: 0; flex: 0 0 auto; }
.pj-dfoot-main .pj-btn { flex: 0 0 auto; }

.pj-drawer-foot .pj-btn.is-sm {
  height: 28px;
  padding: 0 12px !important;
  font-size: 11.5px !important;
  font-weight: 400 !important;
}

.pj-dfoot-del { flex: 0 0 auto; }

/* --- 21.6 视图切换：卡片 / 列表 --- */
.pj-viewmode {
  padding: 3px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-pill) !important;
  background: var(--zs-sunken) !important;
  background-image: none !important;
}

.pj-viewmode button {
  border-radius: var(--zs-r-pill) !important;
  font-weight: 400 !important;
  color: var(--zs-text-2) !important;
}

.pj-viewmode button.active {
  background: var(--zs-card) !important;
  background-image: none !important;
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .07) !important;
}

/* --- 21.7 滚动条治理：列表容器内的滚动条统一细灰，
       信源问题列表右侧那根浅绿竖条彻底隐去（内容仍可滚动） --- */
.pj-table-wrap::-webkit-scrollbar,
.pj-drawer-body::-webkit-scrollbar,
.pj-modal-body::-webkit-scrollbar { width: 8px; height: 8px; }

.pj-table-wrap::-webkit-scrollbar-track,
.pj-drawer-body::-webkit-scrollbar-track,
.pj-modal-body::-webkit-scrollbar-track {
  background: transparent !important;
  border-radius: 999px;
}

.pj-table-wrap::-webkit-scrollbar-thumb,
.pj-drawer-body::-webkit-scrollbar-thumb,
.pj-modal-body::-webkit-scrollbar-thumb {
  background: #d8dcdc !important;
  border: 0 !important;
  border-radius: 999px;
}

.pj-table-wrap::-webkit-scrollbar-thumb:hover,
.pj-drawer-body::-webkit-scrollbar-thumb:hover,
.pj-modal-body::-webkit-scrollbar-thumb:hover { background: var(--zs-brand-100) !important; }

/* 信源问题列表：去掉右侧竖条，保留滚动能力 */
.source-question-list,
.question-source .source-question-list {
  scrollbar-width: none !important;
  -ms-overflow-style: none !important;
  padding-right: 2px !important;
}

.source-question-list::-webkit-scrollbar,
.question-source .source-question-list::-webkit-scrollbar {
  width: 0 !important;
  height: 0 !important;
  display: none !important;
}

/* 列表底部渐隐，暗示「下面还有」，替代滚动条的信息职责 */
.source-question-pane { position: relative; }

.source-question-pane::after {
  content: '';
  position: absolute;
  left: 0;
  right: 2px;
  bottom: 30px;
  height: 26px;
  pointer-events: none;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0), var(--zs-card));
}

/* --- 21.8 深色模式适配 --- */
html[data-theme="dark"] .pj-table-wrap {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .pj-table thead th {
  background: var(--zs-sunken) !important;
  border-bottom-color: var(--zs-line) !important;
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .pj-th-sort:hover,
html[data-theme="dark"] .pj-th-sort.is-asc,
html[data-theme="dark"] .pj-th-sort.is-desc { color: var(--zs-brand-ink-deep) !important; }

html[data-theme="dark"] .pj-th-sort > i { border-bottom-color: var(--zs-text-4) !important; }
html[data-theme="dark"] .pj-th-sort.is-asc > i { border-bottom-color: var(--zs-brand) !important; }
html[data-theme="dark"] .pj-th-sort.is-desc > i {
  border-bottom: 0 !important;
  border-top-color: var(--zs-brand) !important;
}

html[data-theme="dark"] .pj-table tbody td {
  border-bottom-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .pj-table tbody tr { background: var(--zs-card) !important; }
html[data-theme="dark"] .pj-table tbody tr:hover { background: var(--zs-chip) !important; }

html[data-theme="dark"] .pj-table tbody tr.is-selected {
  background: var(--zs-brand-50) !important;
}

html[data-theme="dark"] .pj-table tbody tr.is-selected td {
  border-bottom-color: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .pj-td-name button { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .pj-td-name button:hover { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .pj-td-name small { color: var(--zs-text-3) !important; }
html[data-theme="dark"] .pj-td-num { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .pj-td-num.is-up { color: var(--zs-brand-ink-deep) !important; }

html[data-theme="dark"] .pj-card-cta { border-top-color: var(--zs-line) !important; }

html[data-theme="dark"] .pj-report-btn {
  border-color: var(--zs-line-strong) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .pj-report-btn:hover {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-100) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* #131 查看词条：深色下用深卡底 + 亮字，避免白底残留 */
html[data-theme="dark"] .pj-words-btn {
  border-color: var(--zs-line-strong) !important;
  background: var(--zs-card) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .pj-words-btn:hover {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .pj-drawer-foot {
  border-top-color: var(--zs-line) !important;
  background: var(--zs-sunken) !important;
}

html[data-theme="dark"] .pj-viewmode {
  border-color: var(--zs-line) !important;
  background: var(--zs-sunken) !important;
}

html[data-theme="dark"] .pj-viewmode button { color: var(--zs-text-2) !important; }

html[data-theme="dark"] .pj-viewmode button.active {
  background: var(--zs-chip) !important;
  color: var(--zs-brand-ink-deep) !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .4) !important;
}

html[data-theme="dark"] .pj-table-wrap::-webkit-scrollbar-thumb,
html[data-theme="dark"] .pj-drawer-body::-webkit-scrollbar-thumb,
html[data-theme="dark"] .pj-modal-body::-webkit-scrollbar-thumb {
  background: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .pj-table-wrap::-webkit-scrollbar-thumb:hover,
html[data-theme="dark"] .pj-drawer-body::-webkit-scrollbar-thumb:hover,
html[data-theme="dark"] .pj-modal-body::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand) !important;
}

html[data-theme="dark"] .source-question-pane::after {
  background: linear-gradient(180deg, rgba(15, 33, 27, 0), var(--zs-card));
}

/* --- 21.9 窄屏：抽屉底部允许换行，但不回到大按钮 --- */
@media (max-width: 700px) {
  .pj-drawer-foot { padding: 10px 14px !important; gap: 8px; }
  .pj-dfoot-main { gap: 5px; }
  .pj-drawer-foot .pj-btn.is-sm { height: 27px; padding: 0 10px !important; font-size: 11px !important; }
  .pj-report-btn.is-sm,
  .pj-words-btn.is-sm { height: 27px; padding: 0 10px; font-size: 11px; }
  .pj-table { min-width: 1180px; }
  .pj-th-acts { width: 262px; }
  /* 卡片底部两个入口在极窄屏改为上下堆叠，避免文字被压成两行 */
  .pj-card-cta { grid-template-columns: 1fr; }
}

/* --- 21.10 抽屉 / 弹层底部：防御性兜底 ---
   根因：这两处历史上用 <footer> 标签，会命中 style.css 的全局
   `footer{display:flex!important;flex-direction:column!important;margin-top:90px;
   padding:34px 24px!important;background:linear-gradient(...)}` 版权页脚样式，
   导致操作条被撑成 89px 且按钮竖排。HTML 已改为 <div>，此处再压一层，
   保证任何标签形态下都是「一排小按钮」。 */
.pj-drawer-foot,
.pj-modal-foot,
footer.pj-drawer-foot,
footer.pj-modal-foot {
  margin: 0 !important;
  flex-direction: row !important;
  align-items: center !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  color: var(--zs-text-2) !important;
}

.pj-drawer-foot { justify-content: space-between !important; }

.pj-modal-foot {
  display: flex !important;
  justify-content: flex-end !important;
  gap: 8px;
  flex-wrap: nowrap !important;
  padding: 12px 20px !important;
  border-top: 1px solid var(--zs-line) !important;
  background: var(--zs-sunken) !important;
  background-image: none !important;
}

.pj-modal-foot .pj-btn {
  width: auto !important;
  height: 30px;
  padding: 0 15px !important;
  font-size: 12px !important;
  font-weight: 400 !important;
}

html[data-theme="dark"] .pj-modal-foot {
  border-top-color: var(--zs-line) !important;
  background: var(--zs-sunken) !important;
  background-image: none !important;
}

@media (max-width: 700px) {
  .pj-modal-foot { padding: 10px 14px !important; }
  .pj-modal-foot .pj-btn { height: 29px; padding: 0 13px !important; font-size: 11.5px !important; }
}

/* =====================================================================
 * 21.11 抽屉内部组件的深色兜底 + 合作媒体新色
 *
 * 根因：projects.css 里 .pj-dmetric / .pj-dword / .pj-dlink 写死
 *       background:#fcfdfd，.pj-dplat 写死 #fff，.pj-dsec-title 的
 *       分隔线写死 #f2f5f4。这些不走令牌，深色下属"漏网白底"。
 *       上一轮深色扫描只覆盖页面主体，未展开抽屉，故未暴露。
 *
 * 同时落地 #107：合作媒体不再用黄/橙（"合作要黄了"的负面联想），
 *       改为蓝 --zs-partner，与官方媒体的品牌青绿形成清晰色相区分。
 *       浅色徽章"实色底+白字"用 #2f6fd0（4.88），深色用墨蓝底+亮字。
 * ===================================================================== */

:root {
  --zs-partner: #4084f1;
  --zs-partner-ink: #1f5fc4;
  --zs-partner-soft: #f1f6fe;
  --zs-partner-line: #d8e6fb;
}

html[data-theme="dark"] {
  --zs-partner: #6ba6f7;
  --zs-partner-ink: #9cc4fb;
  --zs-partner-soft: #101d2c;
  --zs-partner-line: #1d3350;
}

/* --- 指标小卡 / 词条卡 / 链接行：白底改令牌 --- */
html[data-theme="dark"] .pj-dmetric,
html[data-theme="dark"] .pj-dword,
html[data-theme="dark"] .pj-dlink {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .pj-dword.is-blue,
html[data-theme="dark"] .pj-dword.is-amber,
html[data-theme="dark"] .pj-dword.is-green {
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .pj-dmetric small,
html[data-theme="dark"] .pj-dword-head small { color: var(--zs-text-3) !important; }

html[data-theme="dark"] .pj-dmetric strong,
html[data-theme="dark"] .pj-dword-head b { color: var(--zs-text-1) !important; }

html[data-theme="dark"] .pj-dmetric strong.is-up { color: var(--zs-brand-ink-deep) !important; }

html[data-theme="dark"] .pj-dsec-title { border-bottom-color: var(--zs-line) !important; }

/* 必须用直接子选择器：标题里除 <span>标题文案</span> 还并列着
   <span class="pj-badge">状态徽章</span>，用后代选择器会把徽章一起
   染成近白，连带 currentColor 的状态圆点变成白点。 */
html[data-theme="dark"] .pj-dsec-title > span { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .pj-dsec-title small { color: var(--zs-text-3) !important; }

/* --- 状态徽章：深色下按语义提亮，圆点随 currentColor 自动跟色 --- */
html[data-theme="dark"] .pj-badge.is-running {
  background: var(--pj-green-soft) !important;
  color: var(--pj-green-ink) !important;
}

html[data-theme="dark"] .pj-badge.is-paused {
  background: var(--pj-gray-soft) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .pj-badge.is-draft {
  background: var(--pj-amber-soft) !important;
  color: var(--pj-amber-ink) !important;
}

html[data-theme="dark"] .pj-badge.is-done {
  background: var(--pj-blue-soft) !important;
  color: var(--pj-blue-ink) !important;
}

html[data-theme="dark"] .pj-dl dt { color: var(--zs-text-3) !important; }
html[data-theme="dark"] .pj-dl dd,
html[data-theme="dark"] .pj-dqs li { color: var(--zs-text-2) !important; }
html[data-theme="dark"] .pj-dl dd b { color: var(--zs-text-1) !important; }

/* --- 平台胶囊：白底改芯片底，内嵌 em 再下沉一档以拉开层次 --- */
html[data-theme="dark"] .pj-dplat {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .pj-dplat em {
  background: var(--zs-sunken) !important;
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .pj-dplat.is-global em {
  background: #1a1730 !important;
  color: #c3b8ff !important;
}

/* --- 词条标签芯片 --- */
html[data-theme="dark"] .pj-dtags span {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .pj-dtags.is-value span {
  background: var(--pj-amber-soft) !important;
  color: var(--pj-amber-ink) !important;
}

/* --- 官方 / 合作 徽章：浅底深字，两主题都达 AA --- */
.pj-dlink.is-official i {
  background: var(--pj-green-soft) !important;
  color: var(--pj-green-ink) !important;
  border: 1px solid var(--pj-green-line);
}

.pj-dlink.is-partner i {
  background: var(--zs-partner-soft) !important;
  color: var(--zs-partner-ink) !important;
  border: 1px solid var(--zs-partner-line);
}

html[data-theme="dark"] .pj-dlink span { color: var(--zs-text-2) !important; }
html[data-theme="dark"] .pj-dlink:hover { border-color: var(--zs-line-strong) !important; }

/* --- 抽屉里的 JSON 预览本来就是深底，深色下只调边框 --- */
html[data-theme="dark"] .pj-djson {
  background: #06110d !important;
  border: 1px solid var(--zs-line);
  color: #cfe6dc !important;
}

/* =====================================================================
 * 22. 词条计费（需求 3：0.3 元 / 词条）
 *
 * 【#147 已改口径】费用卡不再是「平台调用费 + 词条监控费」两段式，
 * 改为单一词条计价的 6 项 + 预计费用/天。本段里 .nr-cost-group /
 * .nr-cost-group-title / .nr-cost-line.is-month 三组规则对应的 DOM
 * 已删除，规则本身保留但不再命中任何元素（无害）；新价格区的最终
 * 裁决与深色覆盖统一放在文件末尾的第 60 段。
 * ===================================================================== */

.nr-cost-box .nr-cost-group {
  padding: 2px 0 8px;
}

.nr-cost-box .nr-cost-group + .nr-cost-group {
  margin-top: 6px;
  padding-top: 9px;
  border-top: 1px dashed var(--zs-line);
}

/* 费用卡是淡绿渐变底，--zs-text-3(#a3a3a3) 在其上只有 2.52 对比度。
   这里改用 text-2(#646464)，实测 ≥5.3，达 WCAG AA。 */
.nr-cost-group-title {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-bottom: 3px;
  color: var(--zs-text-2);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: .02em;
}

.nr-cost-box .nr-cost-line > span { color: var(--zs-text-2); }
.nr-cost-box .nr-cost-line b { color: var(--zs-text-1); }
.nr-cost-box > small { color: var(--zs-text-2); }

.nr-cost-line.is-sub {
  padding-top: 5px;
  color: var(--zs-text-2);
}

.nr-cost-line.is-sub b {
  color: var(--zs-text-1);
  font-variant-numeric: tabular-nums;
}

.nr-cost-line.is-month {
  margin-top: 4px;
  padding-top: 6px;
  border-top: 1px solid var(--zs-line);
  color: var(--zs-text-2);
  font-size: 11.5px;
}

.nr-cost-line.is-month b {
  color: var(--zs-brand-ink-deep);
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}

/* 词条数与单价用等宽数字，改动时不会左右抖动 */
#nr-cost-words,
#nr-cost-word-unit,
#nr-cost-word-fee,
#nr-cost-platform-fee,
#nr-cost-month { font-variant-numeric: tabular-nums; }

/* --- 抽屉费用明细的补充说明 --- */
.pj-dcost-note {
  display: block;
  margin-top: 2px;
  color: var(--zs-text-3);
  font-size: 10.5px;
  font-weight: 300;
}

/* --- 深色：分组线与小计文字 --- */
html[data-theme="dark"] .nr-cost-box .nr-cost-group + .nr-cost-group {
  border-top-color: var(--zs-line);
}

html[data-theme="dark"] .nr-cost-group-title { color: var(--zs-text-2); }
html[data-theme="dark"] .nr-cost-box .nr-cost-line > span { color: var(--zs-text-2); }
html[data-theme="dark"] .nr-cost-box > small { color: var(--zs-text-2); }
html[data-theme="dark"] .nr-cost-line.is-sub { color: var(--zs-text-2); }
html[data-theme="dark"] .nr-cost-line.is-sub b { color: var(--zs-text-1); }

html[data-theme="dark"] .nr-cost-line.is-month {
  border-top-color: var(--zs-line);
  color: var(--zs-text-2);
}

html[data-theme="dark"] .nr-cost-line.is-month b { color: var(--zs-brand-ink-deep); }
html[data-theme="dark"] .pj-dcost-note { color: var(--zs-text-3); }

@media (max-width: 700px) {
  .nr-cost-group-title { font-size: 10px; }
  .nr-cost-line.is-month b { font-size: 12.5px; }
}

/* =====================================================================
 * 23. 深色模式：渐变白底兜底
 *
 * 上一轮深色扫描只读 backgroundColor，凡是把白色写在
 * background-image: linear-gradient(..., #fff) 里的组件整片漏网。
 * 实测全站 14 处（费用卡 / 信源块 / KPI 条 / 说明条 / 环形图中心 /
 * 进度环 / 详情页提示条）。这里按组件逐条改写渐变两端色。
 *
 * 例外：热力球 radial-gradient 里的白是球面高光，属设计意图，保留。
 * ===================================================================== */

/* --- 新建 / 编辑页：费用卡与信源块 --- */
html[data-theme="dark"] .nr-cost-box {
  background: linear-gradient(130deg, var(--zs-brand-50), var(--zs-card) 74%) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .nr-source-block {
  background: linear-gradient(130deg, var(--zs-brand-50), var(--zs-card) 68%) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .nr-source-block.is-partner {
  background: linear-gradient(130deg, var(--zs-partner-soft), var(--zs-card) 68%) !important;
  border-color: var(--zs-partner-line) !important;
}

/* 进度环：内圈实心白 → 卡片底；未完成轨道 → 深线色 */
html[data-theme="dark"] .nr-progress-ring {
  background:
    radial-gradient(closest-side, var(--zs-card) 76%, transparent 77% 100%),
    conic-gradient(var(--zs-brand) calc(var(--nr-pct, 0) * 1%), var(--zs-line) 0) !important;
}

/* --- 报告页：信源 KPI 条 / 上下文条 / 说明条 --- */
html[data-theme="dark"] .sd-kpi-wrap {
  background: linear-gradient(120deg, var(--zs-brand-50), var(--zs-card) 70%) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .is-partner .sd-kpi-wrap {
  background: linear-gradient(120deg, var(--zs-partner-soft), var(--zs-card) 70%) !important;
  border-color: var(--zs-partner-line) !important;
}

html[data-theme="dark"] .kn-source-context {
  background: linear-gradient(90deg, var(--zs-brand-50), var(--zs-card)) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .sd-note {
  background: linear-gradient(120deg, var(--zs-brand-50), var(--zs-card) 70%) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .sd-note[data-type="reputation"] {
  background: linear-gradient(120deg, #241621, var(--zs-card) 70%) !important;
  border-color: #3a2433 !important;
}

html[data-theme="dark"] .sd-note[data-type="completeness"] {
  background: linear-gradient(120deg, #1a1730, var(--zs-card) 70%) !important;
  border-color: #2c2650 !important;
}

/* --- 环形图中心：白底 → 卡片底，保留内描边层次 --- */
html[data-theme="dark"] .dashboard-content .sa-donut-center,
html[data-theme="dark"] .dashboard-content .donut > div,
html[data-theme="dark"] .dashboard-content .distribution-donut > div,
html[data-theme="dark"] .sa-donut-center,
html[data-theme="dark"] .donut > div,
html[data-theme="dark"] .donut-center {
  background: linear-gradient(160deg, var(--zs-chip), var(--zs-card)) !important;
  background-image: linear-gradient(160deg, var(--zs-chip), var(--zs-card)) !important;
  box-shadow: 0 2px 10px rgba(0, 0, 0, .45), inset 0 0 0 1px rgba(233, 246, 240, .05) !important;
}

/* 保真度环形图未完成段：浅灰 → 深线色，避免深色下刺眼 */
html[data-theme="dark"] .dashboard-content .completeness-donut,
html[data-theme="dark"] .completeness-donut {
  background: conic-gradient(var(--zs-violet) 0 68%, var(--zs-line) 68% 100%) !important;
}

/* --- 问题详情页提示条 --- */
html[data-theme="dark"] .qd-hero-note {
  background: linear-gradient(100deg, var(--zs-brand-50), var(--zs-card)) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

/* =====================================================================
 * 24. 报告页重构（需求 6 / 7 / 22）
 *
 * 设计语言对齐 question-detail：
 *   - 面板：白底 + 1px 细线 + 16px 圆角 + 柔和弥散阴影，不用重色块
 *   - 眉标：10.5px / .18em 字距 / 淡品牌色，替代原来的实心胶囊
 *   - 图表：Catmull-Rom 平滑 + 面积渐变 + 白心描边点 + 4 条网格
 *   - 数值：等宽数字，单位用小字弱化，避免"数字和单位一样重"
 * ===================================================================== */

/* --- 24.1 预计曝光三档 --- */
.zs-exposure {
  margin-top: 16px;
  padding-top: 15px;
  border-top: 1px dashed var(--zs-line);
}

.zs-exposure-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 11px;
}

.zs-exposure-title {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--zs-text-1);
  font-size: 13px;
  font-weight: 500;
}

.zs-exposure-head > small {
  color: var(--zs-text-3);
  font-size: 11px;
  font-weight: 300;
}

.zs-help {
  display: inline-grid;
  place-items: center;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: var(--zs-chip);
  color: var(--zs-text-3);
  font-size: 9.5px;
  font-style: normal;
  font-weight: 500;
  cursor: help;
}

.zs-help:hover { background: var(--zs-brand-100); color: var(--zs-brand-ink-deep); }

.zs-exposure-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.zs-exp-card {
  position: relative;
  padding: 13px 15px 14px;
  border: 1px solid var(--zs-line);
  border-radius: 13px;
  background: var(--zs-card);
  overflow: hidden;
  transition: transform .22s var(--zs-ease, ease), border-color .22s, box-shadow .22s;
}

.zs-exp-card::before {
  content: '';
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: var(--exp-c, var(--zs-brand));
  opacity: .85;
}

.zs-exp-card:hover {
  transform: translateY(-2px);
  border-color: var(--zs-line-strong);
  box-shadow: var(--zs-sh-2);
}

.zs-exp-card.is-mention { --exp-c: #28b894; }
.zs-exp-card.is-top3    { --exp-c: #4084f1; }
.zs-exp-card.is-top1    { --exp-c: #6351fb; }

.zs-exp-label {
  display: block;
  margin-bottom: 5px;
  color: var(--zs-text-2);
  font-size: 11.5px;
  font-weight: 400;
}

.zs-exp-card strong {
  display: flex;
  align-items: baseline;
  gap: 2px;
  color: var(--zs-text-1);
  font-variant-numeric: tabular-nums;
}

.zs-exp-card strong b {
  font-size: 26px;
  font-weight: 500;
  letter-spacing: -.02em;
  line-height: 1.1;
}

.zs-exp-card strong em {
  font-size: 13px;
  font-style: normal;
  font-weight: 400;
  color: var(--zs-text-2);
}

.zs-exp-card strong i {
  margin-left: 2px;
  font-size: 10.5px;
  font-style: normal;
  font-weight: 300;
  color: var(--zs-text-3);
}

.zs-exp-note {
  display: block;
  margin-top: 5px;
  color: var(--zs-text-3);
  font-size: 10.5px;
  font-weight: 300;
}

.zs-exp-bar {
  display: block;
  height: 4px;
  margin-top: 9px;
  border-radius: 999px;
  background: var(--zs-sunken);
  overflow: hidden;
}

.zs-exp-bar > i {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--exp-c, var(--zs-brand));
  transition: width .5s var(--zs-ease, ease);
}

/* --- 24.2 通用折线图（三条趋势 + 搜索热度共用） --- */
.zs-chart-wrap {
  position: relative;
  margin-top: 14px;
}

.zs-chart { display: block; width: 100%; }

.zs-grid-line {
  stroke: var(--zs-line);
  stroke-width: 1;
  shape-rendering: crispEdges;
}

.zs-axis-text {
  fill: var(--zs-text-3);
  font-size: 10.5px;
  font-weight: 300;
  font-family: var(--zs-font);
}

.zs-line {
  fill: none;
  stroke-width: 2.2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.zs-point { cursor: pointer; transition: r .16s ease; }

.zs-hover-line {
  stroke: var(--zs-line-strong);
  stroke-width: 1;
  stroke-dasharray: 3 3;
  pointer-events: none;
}

.zs-chart-tip {
  position: absolute;
  z-index: 6;
  min-width: 132px;
  padding: 9px 11px;
  border: 1px solid var(--zs-line);
  border-radius: 10px;
  background: var(--zs-card);
  box-shadow: var(--zs-sh-2);
  pointer-events: none;
  font-size: 11.5px;
}

.zs-tip-date {
  margin-bottom: 6px;
  padding-bottom: 5px;
  border-bottom: 1px solid var(--zs-line);
  color: var(--zs-text-2);
  font-size: 10.5px;
  font-weight: 500;
}

.zs-tip-row {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 2px 0;
  color: var(--zs-text-2);
}

.zs-tip-row > i {
  flex: 0 0 auto;
  width: 7px; height: 7px;
  border-radius: 50%;
}

.zs-tip-row > span { flex: 1 1 auto; font-weight: 300; }

.zs-tip-row > b {
  color: var(--zs-text-1);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}

.zs-chart-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--zs-line);
}

.zs-legend {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--zs-text-2);
  font-size: 11.5px;
  font-weight: 300;
}

.zs-legend > i {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--zs-brand);
}

.zs-legend > b { color: var(--zs-text-1); font-weight: 500; }
.zs-chart-hint { color: var(--zs-text-3); font-size: 10.5px; font-weight: 300; }

.zs-chart-tools { display: flex; align-items: center; gap: 14px; }

.zs-toggle {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--zs-text-2);
  font-size: 11.5px;
  font-weight: 300;
  cursor: pointer;
  user-select: none;
}

.zs-toggle input { accent-color: var(--zs-brand); width: 13px; height: 13px; cursor: pointer; }

/* --- 24.3 面板头（qd 语言） --- */
.zs-panel-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px;
  flex-wrap: wrap;
  padding-bottom: 13px;
  border-bottom: 1px solid var(--zs-line);
}

.zs-panel-kicker {
  display: block;
  margin-bottom: 3px;
  color: var(--zs-brand);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: .18em;
  opacity: .72;
}

.zs-panel-head h3 {
  margin: 0;
  color: var(--zs-text-1);
  font-size: 16px;
  font-weight: 500;
  letter-spacing: -.01em;
}

.zs-panel-head > small { color: var(--zs-text-3); font-size: 11px; font-weight: 300; }

.zs-panel-link {
  color: var(--zs-brand-ink-deep);
  font-size: 11.5px;
  font-weight: 400;
  text-decoration: none;
}

.zs-panel-link:hover { text-decoration: underline; }

/* --- 24.4 AI 搜索热度板块 --- */
.zs-heat-section { --zs-heat-accent: #d56c46; }

.zs-heat-top {
  display: grid;
  grid-template-columns: minmax(0, 1.32fr) minmax(0, 1fr);
  gap: 14px;
  margin-bottom: 14px;
}

.zs-heat-hero {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 132px;
  align-items: center;
  gap: 24px;
  padding: 22px 26px;
  overflow: hidden;
}

.zs-heat-hero::after {
  content: '';
  position: absolute;
  right: -60px; top: -80px;
  width: 240px; height: 240px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(40, 184, 148, .1), transparent 68%);
  pointer-events: none;
}

.zs-heat-hero-main { position: relative; z-index: 1; min-width: 0; }

.zs-heat-kicker {
  display: block;
  margin-bottom: 6px;
  color: var(--zs-brand);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: .18em;
  opacity: .72;
}

.zs-heat-hero h3 {
  margin: 0 0 8px;
  color: var(--zs-text-1);
  font-size: 20px;
  font-weight: 500;
  letter-spacing: -.015em;
}

.zs-heat-hero h3 b { color: var(--zs-brand-ink-deep); font-weight: 500; }

.zs-heat-hero p {
  margin: 0 0 12px;
  max-width: 52ch;
  color: var(--zs-text-2);
  font-size: 12.5px;
  font-weight: 300;
  line-height: 1.75;
}

.zs-heat-tags { display: flex; flex-wrap: wrap; gap: 7px; }

.zs-heat-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 11px;
  border: 1px solid var(--zs-line);
  border-radius: 999px;
  background: var(--zs-sunken);
  color: var(--zs-text-2);
  font-size: 11px;
  font-weight: 300;
}

.zs-heat-pill b { color: var(--zs-text-1); font-weight: 500; font-variant-numeric: tabular-nums; }
.zs-heat-pill i { font-style: normal; color: var(--zs-text-3); }

.zs-heat-pill.is-level {
  border-color: transparent;
  background: var(--zs-heat-accent);
  color: #fff;
  font-weight: 500;
}

.zs-heat-gauge { position: relative; z-index: 1; width: 132px; height: 132px; }
.zs-gauge { width: 132px; height: 132px; transform: rotate(-90deg); }

.zs-gauge-track {
  fill: none;
  stroke: var(--zs-sunken);
  stroke-width: 9;
}

.zs-gauge-fill {
  fill: none;
  stroke: var(--zs-heat-accent);
  stroke-width: 9;
  stroke-linecap: round;
  transition: stroke-dashoffset .8s var(--zs-ease, ease);
}

.zs-gauge-text {
  position: absolute;
  inset: 0;
  display: grid;
  place-content: center;
  text-align: center;
}

.zs-gauge-text strong {
  display: block;
  color: var(--zs-text-1);
  font-size: 32px;
  font-weight: 500;
  letter-spacing: -.02em;
  font-variant-numeric: tabular-nums;
  line-height: 1;
}

.zs-gauge-text small {
  display: block;
  margin-top: 4px;
  color: var(--zs-text-3);
  font-size: 10.5px;
  font-weight: 300;
}

.zs-heat-kpis {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.zs-heat-kpi {
  padding: 15px 17px;
  border: 1px solid var(--zs-line);
  border-radius: 14px;
  background: var(--zs-card);
  box-shadow: var(--zs-sh-1);
  transition: transform .22s, border-color .22s, box-shadow .22s;
}

.zs-heat-kpi:hover {
  transform: translateY(-2px);
  border-color: var(--zs-brand-100);
  box-shadow: var(--zs-sh-2);
}

.zs-heat-kpi > small {
  display: block;
  margin-bottom: 5px;
  color: var(--zs-text-3);
  font-size: 11px;
  font-weight: 300;
}

.zs-heat-kpi > strong {
  display: flex;
  align-items: baseline;
  gap: 2px;
  color: var(--zs-text-1);
  font-variant-numeric: tabular-nums;
}

.zs-heat-kpi > strong b { font-size: 23px; font-weight: 500; letter-spacing: -.02em; line-height: 1.15; }
.zs-heat-kpi > strong em { font-size: 12px; font-style: normal; font-weight: 400; color: var(--zs-text-2); }

.zs-heat-kpi > span {
  display: block;
  margin-top: 4px;
  color: var(--zs-text-3);
  font-size: 10.5px;
  font-weight: 300;
}

.zs-heat-delta.is-up { color: var(--zs-brand-ink-deep); font-weight: 400; }
.zs-heat-delta.is-down { color: var(--zs-red); font-weight: 400; }

.zs-heat-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.62fr) minmax(0, 1fr);
  gap: 14px;
}

.zs-heat-grid.is-bottom { margin-top: 14px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }

.zs-heat-chart-card,
.zs-heat-plat-card,
.zs-heat-funnel-card,
.zs-heat-related-card { padding: 20px 24px 18px; }

/* 平台条形 */
/* 与同排图表卡等高：行区撑满剩余高度并均分间距，
   否则 5 行只占 176px，卡片下方留一大片空白（实测截图可见）。 */
.zs-heat-plat-card { display: flex; flex-direction: column; }

.zs-heat-plat-rows {
  margin-top: 14px;
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 12px;
  min-height: 0;
}

.zs-heat-plat-row {
  display: grid;
  grid-template-columns: 82px minmax(0, 1fr) 52px;
  align-items: center;
  gap: 10px;
}

.zs-heat-plat-name {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--zs-text-2);
  font-size: 12px;
  font-weight: 400;
}

.zs-heat-plat-name > i { width: 7px; height: 7px; border-radius: 50%; flex: 0 0 auto; }

.zs-heat-plat-bar {
  display: block;
  height: 9px;
  border-radius: 999px;
  background: var(--zs-sunken);
  overflow: hidden;
}

.zs-heat-plat-bar > i {
  display: block;
  height: 100%;
  border-radius: 999px;
  transition: width .55s var(--zs-ease, ease);
}

.zs-heat-plat-row > b {
  text-align: right;
  color: var(--zs-text-1);
  font-size: 12.5px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}

/* 需求漏斗 */
.zs-funnel { margin-top: 15px; display: flex; flex-direction: column; gap: 9px; }

.zs-funnel-row { display: flex; align-items: center; gap: 12px; }

/* track 是宽度百分比的参照系：占 row 左侧固定比例，
   meta（转化率 + 说明）占右侧。窄条时文字外置到 track 内、条右侧。 */
.zs-funnel-track {
  position: relative;
  flex: 0 0 58%;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 9px;
}

.zs-funnel-out {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  min-width: 0;
  white-space: nowrap;
}

.zs-funnel-out > em {
  color: var(--zs-brand-ink-deep);
  font-size: 11.5px;
  font-style: normal;
  font-weight: 400;
}

.zs-funnel-out > b {
  color: var(--zs-text-1);
  font-size: 12.5px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}

/* 窄条本身不再放文字，去掉左右内边距，让 4% 也能看见。
   条内文字在桌面隐藏（由 .zs-funnel-out 在条右侧承担），
   <=700 时条铺满外框，再把条内文字显示回来。 */
.zs-funnel-row.is-narrow .zs-funnel-bar { padding: 0; min-width: 6px; }
.zs-funnel-row.is-narrow .zs-funnel-bar > span,
.zs-funnel-row.is-narrow .zs-funnel-bar > b { display: none; }

.zs-funnel-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  min-width: 0;
  height: 34px;
  padding: 0 13px;
  border-radius: 9px;
  background: linear-gradient(90deg, var(--zs-brand-100), var(--zs-brand-50));
  border: 1px solid var(--zs-brand-100);
  transition: width .55s var(--zs-ease, ease);
}

.zs-funnel-bar > span {
  color: var(--zs-brand-ink-deep);
  font-size: 11.5px;
  font-weight: 400;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.zs-funnel-bar > b {
  color: var(--zs-text-1);
  font-size: 12.5px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.zs-funnel-meta { flex: 1 1 auto; min-width: 0; }

.zs-funnel-meta em {
  display: block;
  color: var(--zs-text-2);
  font-size: 11px;
  font-style: normal;
  font-weight: 400;
}

.zs-funnel-meta small {
  display: block;
  color: var(--zs-text-3);
  font-size: 10px;
  font-weight: 300;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* 相关词 */
.zs-related-rows { margin-top: 14px; display: flex; flex-direction: column; gap: 10px; }

.zs-related-row {
  display: grid;
  grid-template-columns: 10px minmax(0, 1.35fr) minmax(0, 1fr) 58px 52px;
  align-items: center;
  gap: 9px;
}

.zs-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.zs-dot.is-owned { background: var(--zs-brand); }
.zs-dot.is-new { background: var(--zs-text-4); }

.zs-related-word {
  color: var(--zs-text-1);
  font-size: 12px;
  font-weight: 400;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.zs-related-row.is-owned .zs-related-word { color: var(--zs-brand-ink-deep); }

.zs-related-bar {
  display: block;
  height: 6px;
  border-radius: 999px;
  background: var(--zs-sunken);
  overflow: hidden;
}

.zs-related-bar > i {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--zs-brand-100);
}

.zs-related-row.is-owned .zs-related-bar > i { background: var(--zs-brand); }

.zs-related-row > b {
  text-align: right;
  color: var(--zs-text-1);
  font-size: 12px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}

.zs-related-row > em {
  text-align: right;
  font-size: 11px;
  font-style: normal;
  font-weight: 400;
  font-variant-numeric: tabular-nums;
}

.zs-related-row > em.is-up { color: var(--zs-brand-ink-deep); }
.zs-related-row > em.is-down { color: var(--zs-red); }

.zs-related-foot {
  display: flex;
  gap: 16px;
  margin-top: 13px;
  padding-top: 11px;
  border-top: 1px solid var(--zs-line);
  color: var(--zs-text-3);
  font-size: 10.5px;
  font-weight: 300;
}

.zs-related-foot span { display: inline-flex; align-items: center; gap: 5px; }

/* --- 24.5 报告页版式 qd 化：眉标去胶囊、面板统一 --- */
.dashboard-content .section-kicker {
  display: block !important;
  padding: 0 !important;
  margin-bottom: 4px !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: none !important;
  background-image: none !important;
  box-shadow: none !important;
  color: var(--zs-brand) !important;
  font-size: 10px !important;
  font-weight: 500 !important;
  letter-spacing: .18em !important;
  opacity: .72;
}

.dashboard-content .section-heading {
  align-items: flex-end !important;
  margin-bottom: 18px !important;
  padding-bottom: 13px !important;
  border-bottom: 1px solid var(--zs-line) !important;
}

.dashboard-content .section-heading h2 {
  font-size: 22px !important;
  font-weight: 500 !important;
  letter-spacing: -.015em !important;
}

/* 趋势卡：整行铺满，头尾对齐面板头语言 */
.trend-grid.trend-grid-single { grid-template-columns: minmax(0, 1fr) !important; }
.trend-inline + .trend-inline { margin-top: 22px; }

.dashboard-content .trend-card {
  padding: 20px 24px 16px !important;
  border-radius: var(--zs-r-panel) !important;
}

.dashboard-content .trend-card-head > div > span {
  font-size: 15px !important;
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}

/* --- 24.6 深色适配 --- */
html[data-theme="dark"] .zs-exp-card,
html[data-theme="dark"] .zs-heat-kpi {
  background: var(--zs-card);
  border-color: var(--zs-line);
}

html[data-theme="dark"] .zs-exp-bar,
html[data-theme="dark"] .zs-heat-plat-bar,
html[data-theme="dark"] .zs-related-bar,
html[data-theme="dark"] .zs-gauge-track { background: var(--zs-sunken); stroke: var(--zs-sunken); }

html[data-theme="dark"] .zs-gauge-track { stroke: var(--zs-line); }

html[data-theme="dark"] .zs-heat-pill {
  background: var(--zs-chip);
  border-color: var(--zs-line);
  color: var(--zs-text-2);
}

html[data-theme="dark"] .zs-heat-pill.is-level { color: #0a1512; border-color: transparent; }

html[data-theme="dark"] .zs-funnel-bar {
  background: linear-gradient(90deg, var(--zs-brand-100), var(--zs-brand-50));
  border-color: var(--zs-line);
}

html[data-theme="dark"] .zs-chart-tip {
  background: var(--zs-chip);
  border-color: var(--zs-line-strong);
}

html[data-theme="dark"] .zs-chart { --zs-chart-dot: #0f211b; }
html[data-theme="dark"] .zs-help { background: var(--zs-chip); color: var(--zs-text-3); }

html[data-theme="dark"] .zs-heat-hero::after {
  background: radial-gradient(circle, rgba(63, 217, 174, .12), transparent 68%);
}

/* --- 24.7 响应式 --- */
@media (max-width: 1180px) {
  .zs-heat-top { grid-template-columns: minmax(0, 1fr); }
  .zs-heat-grid { grid-template-columns: minmax(0, 1fr); }
  .zs-heat-grid.is-bottom { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 900px) {
  .zs-exposure-grid { grid-template-columns: minmax(0, 1fr); }
  .zs-heat-hero { grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 20px 20px; }
  .zs-heat-gauge { margin: 0 auto; }
  .zs-heat-chart-card, .zs-heat-plat-card,
  .zs-heat-funnel-card, .zs-heat-related-card { padding: 18px 18px 16px; }
  .zs-related-row { grid-template-columns: 10px minmax(0, 1.3fr) 54px 48px; }
  .zs-related-bar { display: none; }
}

@media (max-width: 700px) {
  .zs-heat-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .zs-heat-kpi { padding: 13px 14px; }
  .zs-heat-kpi > strong b { font-size: 20px; }
  .zs-exp-card strong b { font-size: 23px; }
  .zs-heat-hero h3 { font-size: 17px; }
  .zs-funnel-row { flex-direction: column; align-items: stretch; gap: 4px; }
  .zs-funnel-track { flex: 1 1 auto; }
  /* 窄屏横向空间不够，条按真实比例画会细到看不见：
     改为「条铺满 + 内部填充按比例」，比例信息不丢，文字也放得下。 */
  .zs-funnel-bar { width: 100% !important; }
  .zs-funnel-row.is-narrow .zs-funnel-bar { padding: 0 13px; }
  .zs-funnel-meta { display: flex; align-items: baseline; gap: 8px; }
  .zs-panel-head h3 { font-size: 15px; }
  .zs-chart-tools { gap: 10px; }
  .dashboard-content .section-heading h2 { font-size: 19px !important; }
}


/* =====================================================================
 * 25. #81 实测修复：可读性 + 深色眉标裁决 + 热度档位字色
 *
 * 三条都是 probe-r81 真实测出来的，不是预防性改动：
 *   - kicker_no_capsule 在深色下失败（20.9 段特异性更高）
 *   - text_contrast_aa 失败 6 项（最低 1.86）
 *   - 热度胶囊「高」档白字 3.46、「低」档白字 1.45
 * ===================================================================== */

/* --- 25.1 眉标：浅深两态统一为「无底纯文字」 ---
 * 20.9 段把 .section-kicker 混在芯片组里上了底色，这里用完全相同的
 * 特异性 (0,2,1) + 更后源顺序把它拆出来。注意必须同时覆盖 background
 * 与 background-image，否则深色下残留 --zs-chip。 */
.dashboard-content .section-kicker,
html[data-theme="dark"] .dashboard-content .section-kicker,
html[data-theme="dark"] .section-kicker {
  display: block !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: none !important;
  background-color: transparent !important;
  background-image: none !important;
  box-shadow: none !important;
  color: var(--zs-kicker) !important;
  font-size: 10px !important;
  font-weight: 500 !important;
  letter-spacing: .18em !important;
  /* opacity 会把 #007a60 混白成 #4aa38f（3.0），直接去掉 */
  opacity: 1 !important;
}

/* 面板眉标与 hero 眉标同口径 */
.zs-panel-kicker,
.zs-heat-kicker {
  color: var(--zs-kicker) !important;
  opacity: 1 !important;
}

/* --- 25.2 说明性小字改用可读三级色 ---
 * 只改「承担信息」的文字：说明、轴标签、单位、脚注、转化率。
 * 纯装饰的分隔与占位仍走 text-3，避免整页失去层次。 */
.zs-exp-note,
.zs-exposure-head > small,
.zs-heat-kpi > small,
.zs-heat-kpi > span,
.zs-funnel-meta small,
.zs-chart-hint,
.zs-related-foot,
.zs-panel-head > small,
.zs-heat-hero p,
.zs-axis-text {
  color: var(--zs-muted) !important;
  fill: var(--zs-muted) !important;
}

/* 轴标签是 SVG text，用 fill；上面那条已带 fill，这里显式兜底旧层 */
.dashboard-content .zs-axis-text { fill: var(--zs-muted) !important; }

/* 释义气泡：小字也要读得清 */
.zs-help { color: var(--zs-muted) !important; }

/* --- 25.3 热度档位胶囊：字色由数据层六档 fg 决定 ---
 * 六档底色里「低/中低/中等/中高/高」都是亮色，白字对比度 1.4–2.7，
 * 只有「极高 #d53f3f」适合白字。report-charts.js 已把 fg 写进
 * --zs-heat-accent-fg，这里直接消费，不在 CSS 里再抄一份色板。 */
.zs-heat-pill.is-level {
  border-color: transparent !important;
  background: var(--zs-heat-accent) !important;
  color: var(--zs-heat-accent-fg, #1a1a1a) !important;
  font-weight: 500 !important;
}

html[data-theme="dark"] .zs-heat-pill.is-level {
  color: var(--zs-heat-accent-fg, #1a1a1a) !important;
  border-color: transparent !important;
}

/* 仪表盘中心数字与档位副标：深色下也保持可读 */
.zs-gauge-text small { color: var(--zs-muted) !important; }

/* --- 25.4 曝光卡与热度 KPI 的说明层级 ---
 * 说明文字提到 muted 后与 label(text-2) 差距变小，用字号与字重拉开，
 * 而不是靠更淡的颜色 —— 淡到读不清就失去意义了。 */
.zs-exp-note { font-size: 10.5px; font-weight: 300; }
.zs-heat-kpi > span { font-size: 10.5px; font-weight: 300; }
.zs-funnel-meta em { color: var(--zs-text-2) !important; }

/* --- 25.5 深色：曝光卡左色条与条形底 ---
 * 语义色条在深色下沿用浅色值（#28b894/#4084f1/#6351fb）会偏暗，
 * 提亮到与深色令牌同一档，保证 3px 细条 still visible。 */
html[data-theme="dark"] .zs-exp-card.is-mention { --exp-c: #3fd9ae; }
html[data-theme="dark"] .zs-exp-card.is-top3    { --exp-c: #6ba6f7; }
html[data-theme="dark"] .zs-exp-card.is-top1    { --exp-c: #9b8cff; }

/* 漏斗条内的文字：淡绿底上用深绿墨字，深色下底变深绿则反相 */
html[data-theme="dark"] .zs-funnel-bar > span { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .zs-funnel-bar > b { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .zs-funnel-meta small { color: var(--zs-muted) !important; }

/* 相关词涨跌与平台名 */
html[data-theme="dark"] .zs-related-row > em.is-up { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .zs-related-row > em.is-down { color: var(--zs-red) !important; }
html[data-theme="dark"] .zs-heat-delta.is-up { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .zs-heat-delta.is-down { color: var(--zs-red) !important; }


/* --- 25.6 漏斗窄条：文字外置后的深色与窄档适配 --- */
html[data-theme="dark"] .zs-funnel-out > em { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .zs-funnel-out > b { color: var(--zs-text-1) !important; }

/* 中屏：track 收窄一点，给 meta 的说明文字留位置 */
@media (max-width: 1180px) {
  .zs-funnel-track { flex: 0 0 54%; }
}

@media (max-width: 900px) {
  .zs-funnel-track { flex: 0 0 50%; }
  .zs-funnel-out > em { font-size: 11px; }
  .zs-funnel-out > b { font-size: 12px; }
}

/* 窄屏：条铺满外框，内部用 ::after 画真实比例的填充。
   这样 2.4 万 / 86.4 万 = 2.8% 也能量出来，而不是一条 6px 的细线。 */
@media (max-width: 700px) {
  .zs-funnel-bar {
    position: relative;
    overflow: hidden;
    background: var(--zs-sunken) !important;
    border-color: var(--zs-line) !important;
    justify-content: flex-start !important;
  }
  .zs-funnel-bar::after {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: var(--zs-funnel-pct, 100%);
    background: linear-gradient(90deg, var(--zs-brand-100), var(--zs-brand-50));
    z-index: 0;
  }
  .zs-funnel-bar > span,
  .zs-funnel-bar > b { position: relative; z-index: 1; }
  .zs-funnel-bar > b { margin-left: auto; }
  /* 窄屏把外置文字收回条内，避免两行 */
  .zs-funnel-row.is-narrow .zs-funnel-out { display: none; }
  .zs-funnel-row.is-narrow .zs-funnel-bar > span { display: block; }
  .zs-funnel-row.is-narrow .zs-funnel-bar > b { display: block; }
}


/* --- 25.7 非零基线提示 + 窄档漏斗填充增强 --- */

/* 轴不从 0 起算时的显式声明：必须让人看见，否则会夸大波动 */
.zs-axis-note {
  display: block;
  margin-top: 7px;
  color: var(--zs-muted);
  font-size: 10px;
  font-weight: 300;
  letter-spacing: .01em;
}

.zs-axis-note[hidden] { display: none; }

html[data-theme="dark"] .zs-axis-note { color: var(--zs-muted) !important; }

/* 窄档漏斗：条铺满外框、内部按比例填充。
   原来用 brand-100 → brand-50（#ddf0ec → #f2fcfa），两色都极淡，
   在 #f7f8f9 的槽底上几乎看不出边界，比例信息等于没画。
   改成品牌绿实色渐变 + 右侧硬边，2.8% 也量得出来。 */
@media (max-width: 700px) {
  .zs-funnel-bar::after {
    background: linear-gradient(90deg, var(--zs-brand), var(--zs-brand-450)) !important;
    border-right: 2px solid var(--zs-brand-ink-deep);
    opacity: .9;
  }
  /* 填充是实色了，条内文字改用深墨字保证对比 */
  .zs-funnel-bar > span { color: #0a1512 !important; font-weight: 500; }
  .zs-funnel-bar > b { color: var(--zs-text-1) !important; }
  html[data-theme="dark"] .zs-funnel-bar > span { color: #06110d !important; }
}


/* --- 25.8 平台卡与图表卡等高后的收尾 --- */

/* 行区撑满后，条形与名称垂直居中对齐；行本身给一点内边距，
   让 5 行在 ~300px 里呼吸均匀，而不是挤在顶部。 */
.zs-heat-plat-row { padding: 2px 0; }

/* 平台名与数值在更高的行里保持基线对齐 */
.zs-heat-plat-name { font-size: 12.5px; }
.zs-heat-plat-row > b { font-size: 13px; }

/* 条形槽底加一道内描边，浅色下也能看出「槽」的边界 */
.zs-heat-plat-bar { box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .03); }
html[data-theme="dark"] .zs-heat-plat-bar { box-shadow: inset 0 0 0 1px rgba(233, 246, 240, .05); }

/* 窄档两卡上下堆叠，行区不再需要撑高 */
@media (max-width: 1180px) {
  .zs-heat-plat-rows { justify-content: flex-start; gap: 13px; }
  .zs-heat-plat-card { display: block; }
}


/* ==========================================================================
 * 26. 三条趋势卡：与问题详情页 / 搜索热度同一套图表语言（#82 需求 18）
 * --------------------------------------------------------------------------
 * 旧渲染器（viewBox 1080x220、硬编码 #e0e0e0 轴线、8px 轴字）已整段移除，
 * 改由 ZhishuChart.renderLine 按真实容器宽度重绘。本段负责：
 *   26.1 把被旧皮肤抢走的 stroke / fill 交回渲染器
 *   26.2 卡头 / 图例 / 浮层的 qd 化
 *   26.3 深色适配
 *   26.4 响应式
 * ===================================================================== */

/* --- 26.1 颜色主权：压过 .trend-grid line/path 的灰描边 ---
 * 特异性刻意做到 (0,3,1) 以上，高于 interactions.css 的
 * `.dashboard-content .trend-grid line` (0,2,1)。 */
.dashboard-content .trend-grid .zs-chart .zs-grid-line,
.trend-grid .zs-chart .zs-grid-line {
  stroke: var(--zs-line) !important;
  stroke-width: 1 !important;
  shape-rendering: crispEdges;
}

/* 曲线颜色由渲染器写在 <g class="zs-series"> 的 --series-color 上 */
.dashboard-content .trend-grid .zs-chart .zs-series .zs-line,
.trend-grid .zs-chart .zs-series .zs-line {
  fill: none !important;
  stroke: var(--series-color, #28b894) !important;
  stroke-width: 2.2 !important;
  stroke-linecap: round;
  stroke-linejoin: round;
  filter: none !important;
}

.dashboard-content .trend-grid .zs-chart .zs-series .zs-area,
.trend-grid .zs-chart .zs-series .zs-area {
  stroke: none !important;
}

/* #82 单层主色面积：四条 18% 不同色面积 normal 叠加会互相抵消成中性灰
 * （实测浅色面积区 rgb(236,238,240)，彩色像素几乎为 0）。
 * 渲染器给「第一条可见序列」打 is-area，这里只放行那一条，
 * 其余序列仅保留描边与圆点 —— 色相干净，且仍能读出趋势体量。
 * 多序列由渲染器在 .zs-chart 上打 is-multi 标记（svg 内还有 defs/line/text
 * 等前置节点，用 :has(.zs-series:nth-child(2)) 判会误判），
 * 单序列（如详情页单指标）不受影响，照常显示面积。 */
.zs-chart.is-multi .zs-series:not(.is-area) > .zs-area {
  display: none;
}

.dashboard-content .trend-grid .zs-chart .zs-series .zs-point,
.trend-grid .zs-chart .zs-series .zs-point {
  stroke: var(--series-color, #28b894) !important;
  stroke-width: 2 !important;
  fill: var(--zs-chart-dot, #fff) !important;
  cursor: pointer;
  transition: r .16s var(--zs-ease, ease);
}

/* 悬停竖线：品牌绿虚线，与详情页一致 */
.dashboard-content .trend-grid .zs-chart .zs-hover-line,
.trend-grid .zs-chart .zs-hover-line {
  stroke: var(--zs-brand) !important;
  stroke-width: 1.2 !important;
  stroke-dasharray: 4 4;
  opacity: 0;
  pointer-events: none;
}

.dashboard-content .trend-grid .zs-chart .zs-hover-line[opacity="1"],
.trend-grid .zs-chart .zs-hover-line[opacity="1"] { opacity: 1; }

/* 图例隐藏：只切 display，坐标轴不重算，其余曲线不跳尺度 */
.zs-chart .zs-series.is-off { display: none; }

/* 轴标签：可读三级色（白底 5.74 / 深底 6.27），不用装饰性的 text-3 */
.dashboard-content .trend-grid .zs-chart .zs-axis-text,
.trend-grid .zs-chart .zs-axis-text {
  fill: var(--zs-muted) !important;
  color: var(--zs-muted) !important;
  font-size: 10.5px !important;
  font-weight: 300 !important;
  font-family: var(--zs-font) !important;
}

/* 图表键盘可达 */
.zs-trend-card .zs-chart:focus-visible {
  outline: 2px solid var(--zs-brand);
  outline-offset: 4px;
  border-radius: 8px;
}

/* --- 26.2 卡头 / 图例 / 浮层 --- */

/* 卡头复用 .zs-panel-head，这里只补趋势卡自己的内边距节奏 */
.dashboard-content .zs-trend-card { padding: 20px 24px 16px !important; }
.zs-trend-card .zs-panel-head { padding-bottom: 13px; }
.zs-trend-card .zs-chart-wrap { margin-top: 16px; }

/* 图例：胶囊按钮 + 平台小 LOGO，点击显隐 */
.zs-trend-legend {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  min-width: 0;
}

.zs-trend-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px;
  border: 1px solid transparent;
  border-radius: var(--zs-r-pill);
  background: transparent;
  color: var(--zs-text-2);
  font-family: var(--zs-font);
  font-size: 11.5px;
  font-weight: 300;
  line-height: 1.4;
  cursor: pointer;
  user-select: none;
  transition: background .18s var(--zs-ease, ease),
    border-color .18s var(--zs-ease, ease), opacity .18s var(--zs-ease, ease);
}

.zs-trend-legend-item:hover {
  background: var(--zs-brand-50);
  border-color: var(--zs-brand-100);
}

.zs-trend-legend-item:focus-visible {
  outline: 2px solid var(--zs-brand);
  outline-offset: 1px;
}

.zs-trend-legend-item.is-off {
  opacity: .45;
  text-decoration: line-through;
}

.zs-trend-legend-line {
  flex: 0 0 auto;
  width: 18px;
  height: 3px;
  border-radius: 3px;
}

.zs-trend-legend-item.is-off .zs-trend-legend-line { background: var(--zs-line-strong) !important; }

.zs-trend-legend-logo {
  flex: 0 0 auto;
  width: 14px;
  height: 14px;
  border-radius: 4px;
  object-fit: cover;
  border: 1px solid rgba(26, 32, 44, .08);
}

/* 浮层脚注：均值 + 平台数 */
.zs-tip-foot {
  margin-top: 6px;
  padding-top: 5px;
  border-top: 1px solid var(--zs-line);
  color: var(--zs-muted);
  font-size: 10.5px;
  font-weight: 300;
}

/* 趋势浮层比单序列宽一点，四行平台名 + 数值不挤 */
.zs-trend-card .zs-chart-tip { min-width: 168px; max-width: 220px; }

/* --- 26.3 深色适配 --- */
html[data-theme="dark"] .zs-trend-card .zs-chart { --zs-chart-dot: #0f211b; }

html[data-theme="dark"] .zs-trend-legend-item { color: var(--zs-text-2); }

html[data-theme="dark"] .zs-trend-legend-item:hover {
  background: var(--zs-chip);
  border-color: var(--zs-line-strong);
}

html[data-theme="dark"] .zs-trend-legend-logo { border-color: rgba(233, 246, 240, .14); }

html[data-theme="dark"] .zs-trend-card .zs-tip-foot {
  border-top-color: var(--zs-line-strong);
  color: var(--zs-muted);
}

/* --- 26.4 响应式 --- */
@media (max-width: 900px) {
  .dashboard-content .zs-trend-card { padding: 18px 18px 14px !important; }
  .zs-trend-card .zs-panel-head { gap: 12px; }
  .zs-trend-card .zs-chart-foot { gap: 10px; }
}

@media (max-width: 700px) {
  /* 窄档图例与提示上下排，避免四个胶囊把提示挤成两行 */
  .zs-trend-card .zs-chart-foot { flex-direction: column; align-items: flex-start; }
  .zs-trend-legend { gap: 4px; }
  .zs-trend-legend-item { padding: 3px 8px; font-size: 11px; }
  .zs-trend-card .zs-chart-tip { min-width: 150px; max-width: 190px; }
}

@media (prefers-reduced-motion: reduce) {
  .zs-chart .zs-series .zs-point,
  .zs-trend-legend-item { transition: none; }
}

/* ==========================================================================
 * 27. 深色收口（#93）：深层证据卡 / 批量导入弹层 / 全站白色分割线
 *
 *     背景：前 26 段已覆盖绝大多数容器，但仍有三类漏网：
 *       a) 问题详情页「展开每天 → 展开单次检测」里的二层小卡
 *          （.qd-src / .qd-meta-item / .qd-day-summary / .qd-flag.f-neu）
 *       b) 批量导入弹层的预览表与底栏（.nr-bulk-preview / .nr-modal-foot）
 *       c) 各页「大类标题下的分割线」与项目卡内部分割线
 *          （.pj-card-metrics / .pj-card-foot / .sd-module-title 等）
 *     这些规则在浅色下由 style.css / interactions.css / projects.css 硬编码，
 *     皮肤层此前零覆盖，故深色下仍是白线白卡。本段统一收口。
 * ===================================================================== */

/* --- 27.1 问题详情页：深层证据卡 --- */
html[data-theme="dark"] .qd-day-summary {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .qd-sum-chip + .qd-sum-chip {
  border-left-color: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .qd-src,
html[data-theme="dark"] .qd-meta-item {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .qd-src:hover {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .qd-src b,
html[data-theme="dark"] .qd-meta-item b { color: var(--zs-text-1) !important; }

html[data-theme="dark"] .qd-src span,
html[data-theme="dark"] .qd-meta-item small { color: var(--zs-text-3) !important; }

/* 官方媒体行：官方＝青绿（#107 全站统一口径），深色改青绿墨底 */
html[data-theme="dark"] .qd-src.is-owned {
  background: rgba(63, 217, 174, .10) !important;
  background-image: none !important;
  border-color: rgba(63, 217, 174, .28) !important;
}

html[data-theme="dark"] .qd-own-tag {
  background: rgba(63, 217, 174, .18) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 合作媒体行：蓝墨底，与全站 --zs-partner 口径一致（#107） */
html[data-theme="dark"] .qd-src.is-partner {
  background: rgba(107, 166, 247, .10) !important;
  background-image: none !important;
  border-color: rgba(107, 166, 247, .28) !important;
}

html[data-theme="dark"] .qd-partner-tag {
  background: rgba(107, 166, 247, .18) !important;
  color: var(--zs-partner-ink) !important;
}

html[data-theme="dark"] .qd-flag.f-neu {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .qd-comp-bar > div { background: var(--zs-chip) !important; }

html[data-theme="dark"] .qd-empty {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .qd-load-more {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .qd-load-more:hover {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand) !important;
}

/* --- 27.2 批量导入弹层：预览表 / 底栏 / 统计胶囊 --- */
html[data-theme="dark"] .nr-bulk-preview {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .nr-modal-foot,
html[data-theme="dark"] .pj-modal-foot,
html[data-theme="dark"] .pj-drawer-foot {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-top-color: var(--zs-line) !important;
}

html[data-theme="dark"] .nr-bulk-tr.is-dup {
  background: rgba(240, 203, 116, .10) !important;
}

html[data-theme="dark"] .nr-bulk-tr.is-dup .nr-bulk-flag { color: var(--zs-amber) !important; }

html[data-theme="dark"] .nr-bulk-tr.is-bad {
  background: rgba(240, 115, 111, .10) !important;
}

html[data-theme="dark"] .nr-bulk-stats .is-dup {
  background: rgba(240, 203, 116, .14) !important;
  color: var(--zs-amber) !important;
}

html[data-theme="dark"] .nr-bulk-empty {
  background: var(--zs-sunken) !important;
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .nr-bulk-preview::-webkit-scrollbar-track { background: var(--zs-sunken) !important; }
html[data-theme="dark"] .nr-bulk-preview::-webkit-scrollbar-thumb { background: var(--zs-line-strong) !important; }

/* --- 27.3 全站白色分割线收口 ---
 * 这些边框在浅色下是 #f7f8f9 / #f0f2f1 / #f3f2f2 / #f2f5f4 一类的近白色，
 * 深色下必须落到 --zs-line / --zs-line-strong，否则就是一条刺眼白线。 */
html[data-theme="dark"] .effect-legend > span { border-bottom-color: var(--zs-line) !important; }

html[data-theme="dark"] .word-subsection-title { border-bottom-color: var(--zs-line) !important; }

html[data-theme="dark"] .question-source > .subsection-title,
html[data-theme="dark"] .dashboard-content .question-source > .subsection-title {
  border-bottom-color: var(--zs-line) !important;
}

html[data-theme="dark"] .sd-module-title { border-bottom-color: var(--zs-line) !important; }

html[data-theme="dark"] .detail-platform-note { border-top-color: var(--zs-line) !important; }

html[data-theme="dark"] .media-source-columns { border-bottom-color: var(--zs-line) !important; }

html[data-theme="dark"] .word-view-tabs button {
  border-color: var(--zs-line-strong) !important;
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .word-view-tabs button:hover {
  border-color: var(--zs-brand) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .word-view-tabs button.active {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 项目管理页：卡片中部的指标分割线与底部分割线 */
html[data-theme="dark"] .pj-card-metrics {
  border-top-color: var(--zs-line) !important;
  border-bottom-color: var(--zs-line) !important;
}

html[data-theme="dark"] .pj-card-foot { border-top-color: var(--zs-line) !important; }

/* 新建页：词条 TAB 名的虚线下划线用 currentColor，深色下压暗 */
html[data-theme="dark"] .nr-word-tab.is-active .nr-wt-name { color: var(--zs-brand-ink-deep) !important; }

/* 信源官方卡的涨幅胶囊：浅绿底 → 深绿墨底 */
html[data-theme="dark"] .sd-kpi-delta {
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 中性灰点：浅色 #cbd6d1 在深色下过亮，压到三级文字色 */
html[data-theme="dark"] .effect-legend .dot.gray { background: var(--zs-text-3) !important; }

/* 批量导入预览表的行分隔线（new-report.css 硬编码 #f2f5f4，特异性 0,3,0） */
html[data-theme="dark"] .nr-bulk-tr + .nr-bulk-tr:not(.is-head) {
  border-top-color: var(--zs-line) !important;
}

/* --- 27.4 深色可读性收口：深层证据区文字对比度 ---
 * 实测（深色，展开日卡 + 单次检测后）有 17 处文字低于 WCAG AA 4.5:1：
 *   .qd-answer 正文 #374151 → 2.17    .qd-flag.f-comp #4a37d6 → 2.01
 *   .qd-flag.f-src  #8a6412 → 2.77    .qd-rank.r3     #1f5fc0 → 2.44
 *   .qd-ev-title / .qd-src span / .qd-meta-item small（--qd-faint）→ 3.47~4.06
 * 这些色值来自 question-detail.css 的浅色硬编码，深色下必须整体提亮。 */
html[data-theme="dark"] .qd-answer {
  color: var(--zs-text-1) !important;
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .qd-answer::before { background: var(--zs-brand) !important; }

html[data-theme="dark"] .qd-answer mark {
  background: rgba(63, 217, 174, .18) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .qd-answer-label b { color: var(--zs-text-2) !important; }

html[data-theme="dark"] .qd-copy-answer {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .qd-copy-answer:hover {
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .qd-ev-title,
html[data-theme="dark"] .qd-comp-bar small { color: var(--zs-muted) !important; }

html[data-theme="dark"] .qd-src span,
html[data-theme="dark"] .qd-meta-item small { color: var(--zs-muted) !important; }

html[data-theme="dark"] .qd-flag.f-comp {
  background: rgba(155, 140, 255, .16) !important;
  color: #c3b8ff !important;
}

html[data-theme="dark"] .qd-flag.f-src {
  background: rgba(240, 203, 116, .16) !important;
  color: var(--zs-amber) !important;
}

html[data-theme="dark"] .qd-flag.f-pos {
  background: rgba(63, 217, 174, .16) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .qd-flag.f-neg {
  background: rgba(240, 115, 111, .16) !important;
  color: #ffb3b0 !important;
}

html[data-theme="dark"] .qd-rank.r1 {
  background: rgba(63, 217, 174, .16) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .qd-rank.r3 {
  background: rgba(107, 166, 247, .16) !important;
  color: #a8cbfa !important;
}

html[data-theme="dark"] .qd-rank.rn {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .qd-run-more { color: var(--zs-brand-ink-deep) !important; }

/* =====================================================================
 * 27.5 深色文字可读性收口（标准 WCAG sRGB 口径实测）
 *
 * 度量说明：先前探针用无 gamma 校正的线性近似算亮度，会系统性低估中间调
 * （#9dbbae on #12281f：近似 4.06 / 真实 7.53），导致过度提亮。本段所有
 * 数值均按标准 sRGB 线性化重算，阈值 4.5:1（正文）。
 *
 * 三类真实缺陷：
 *   A. 近黑字 #1a1a1a / #14372d 直接压深墨绿卡 → 1.04~1.29，几乎不可见；
 *   B. 浅色语义色（#00705a / #5b46c9 / #a8306a / #1f6fbd / #a9701a …）
 *      未做深色映射 → 2.3~3.2；
 *   C. 白字压亮色 chip（品牌绿 / 琥珀 / 浅灰底）→ 1.08~1.79。
 *
 * 已排除的假阳性（属设计意图，不改）：
 *   .heat-ball 是径向渐变亮球（白→橙→红），球内 #1a1a1a 深字对比充足；
 *   平台 logo 白底托、二维码白框、品牌色圆点同理。
 *
 * 特异性：interactions.css 的 `.dashboard-content X:nth-child(n) b` 为
 * (0,3,2)，压过皮肤层 `html[data-theme] X b` 的 (0,2,3)。故本段凡涉及
 * 这些选择器，一律带 .dashboard-content 前缀把特异性顶上去。
 * ===================================================================== */

/* --- A. 近黑字压深底：全部改亮 --- */
html[data-theme="dark"] .effect-legend > span > b,
html[data-theme="dark"] .effect-legend b,
html[data-theme="dark"] .sd-module-title > span,
html[data-theme="dark"] .sd-type-row > b,
html[data-theme="dark"] .distribution-row > b,
html[data-theme="dark"] .word-subsection-title > span,
html[data-theme="dark"] .word-subsection-title span,
html[data-theme="dark"] .sd-rank-pct,
html[data-theme="dark"] .sd-type-row > b:first-of-type {
  color: var(--zs-text-1) !important;
}

/* 词条区导语 #14372d(1.29) → 正文亮色 */
html[data-theme="dark"] .word-section-intro,
html[data-theme="dark"] .word-section-intro > div > span,
html[data-theme="dark"] .word-section-intro span {
  color: var(--zs-text-2) !important;
}

/* 中性灰 #646464(2.83) / #7c7575(3.72) / #827a7a(4.0) / #8a8a8a 系列 */
html[data-theme="dark"] .board-row > span,
html[data-theme="dark"] .board-list .board-row span,
html[data-theme="dark"] .effect-legend > span,
html[data-theme="dark"] .sd-kpi-label,
html[data-theme="dark"] .media-name,
html[data-theme="dark"] .media-source-row .media-name,
html[data-theme="dark"] .distribution-row > span,
html[data-theme="dark"] .sd-module-title small,
html[data-theme="dark"] .product-ranking-row small,
html[data-theme="dark"] .video-ranking-row small {
  color: var(--zs-text-2) !important;
}

/* 藏青字 #4c4f6b(2.1)：信源榜名称与内容形态名 */
html[data-theme="dark"] .sd-rank-name,
html[data-theme="dark"] .sd-type-row > span,
html[data-theme="dark"] .sd-type-row > span:first-child {
  color: var(--zs-navy-ink) !important;
}

/* 商品 / 视频榜标题 #386054(2.37) */
html[data-theme="dark"] .product-ranking-row strong,
html[data-theme="dark"] .video-ranking-row strong,
html[data-theme="dark"] .product-ranking-row > div > strong,
html[data-theme="dark"] .video-ranking-row > div > strong {
  color: var(--zs-text-1) !important;
}

/* 问题详情页洞察正文 #4b5563(2.22) */
html[data-theme="dark"] .qd-insight-list li,
html[data-theme="dark"] .qd-insight-list li.is-warn,
html[data-theme="dark"] .qd-insight-list li b,
html[data-theme="dark"] .qd-insight-list li.is-warn b {
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .qd-insight-list li strong { color: var(--zs-text-1) !important; }

/* --- B. 浅色语义色 → 深色语义色（带 .dashboard-content 顶特异性）--- */

/* 声量三卡涨幅：blue #1f6fbd / purple #5b46c9 / green #00705a */
html[data-theme="dark"] .dashboard-content .volume-card.blue b,
html[data-theme="dark"] .dashboard-content .volume-card.blue > div > b {
  color: var(--zs-blue) !important;
}
html[data-theme="dark"] .dashboard-content .volume-card.purple b,
html[data-theme="dark"] .dashboard-content .volume-card.purple > div > b {
  color: var(--zs-violet) !important;
}
html[data-theme="dark"] .dashboard-content .volume-card.green b,
html[data-theme="dark"] .dashboard-content .volume-card.green > div > b {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .dashboard-content .volume-card.orange b,
html[data-theme="dark"] .dashboard-content .volume-card.orange > div > b {
  color: var(--zs-orange) !important;
}
html[data-theme="dark"] .dashboard-content .volume-card > div > span,
html[data-theme="dark"] .dashboard-content .volume-card small {
  color: var(--zs-text-2) !important;
}

/* 声誉三卡：正面绿 / 负面红 / 保真度紫 */
html[data-theme="dark"] .dashboard-content .rep-card.positive strong,
html[data-theme="dark"] .reputation-kpis .rep-card.positive strong {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .dashboard-content .rep-card.negative strong,
html[data-theme="dark"] .reputation-kpis .rep-card.negative strong {
  color: var(--zs-red) !important;
}
html[data-theme="dark"] .dashboard-content .rep-card.complete strong,
html[data-theme="dark"] .reputation-kpis .rep-card.complete strong {
  color: var(--zs-violet) !important;
}

/* 概览 KPI 四色 + 商品/视频概览四色（data-tone 驱动） */
html[data-theme="dark"] .dashboard-content .overview-kpis > div[data-tone="green"] strong,
html[data-theme="dark"] .dashboard-content .product-overview-item[data-tone="green"] strong,
html[data-theme="dark"] .dashboard-content .video-overview-item[data-tone="green"] strong {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .dashboard-content .overview-kpis > div[data-tone="blue"] strong,
html[data-theme="dark"] .dashboard-content .product-overview-item[data-tone="blue"] strong,
html[data-theme="dark"] .dashboard-content .video-overview-item[data-tone="blue"] strong {
  color: var(--zs-blue) !important;
}
html[data-theme="dark"] .dashboard-content .overview-kpis > div[data-tone="violet"] strong,
html[data-theme="dark"] .dashboard-content .product-overview-item[data-tone="violet"] strong,
html[data-theme="dark"] .dashboard-content .video-overview-item[data-tone="violet"] strong {
  color: var(--zs-violet) !important;
}
html[data-theme="dark"] .dashboard-content .overview-kpis > div[data-tone="amber"] strong,
html[data-theme="dark"] .dashboard-content .product-overview-item[data-tone="amber"] strong,
html[data-theme="dark"] .dashboard-content .video-overview-item[data-tone="amber"] strong {
  color: var(--zs-amber) !important;
}
html[data-theme="dark"] .dashboard-content .overview-kpis small,
html[data-theme="dark"] .dashboard-content .overview-kpis span,
html[data-theme="dark"] .dashboard-content .product-overview-item small,
html[data-theme="dark"] .dashboard-content .product-overview-item span,
html[data-theme="dark"] .dashboard-content .product-overview-item strong em {
  color: var(--zs-text-2) !important;
}

/* 概览标签三枚涨幅：绿 / 玫红 / 紫 */
html[data-theme="dark"] .dashboard-content .overview-tags span:nth-child(1) b {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .dashboard-content .overview-tags span:nth-child(2) b {
  color: var(--zs-pink) !important;
}
html[data-theme="dark"] .dashboard-content .overview-tags span:nth-child(3) b {
  color: var(--zs-violet) !important;
}

/* 首屏总分 #00705a(2.76) */
html[data-theme="dark"] .dashboard-content .hero-score strong,
html[data-theme="dark"] .hero-score > strong {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .dashboard-content .hero-score > span,
html[data-theme="dark"] .dashboard-content .hero-score small,
html[data-theme="dark"] .dashboard-content .hero-score em {
  color: var(--zs-text-2) !important;
}

/* 信源双卡 KPI：默认绿 / 声誉玫红 / 保真度紫 */
html[data-theme="dark"] .sd-kpi-value,
html[data-theme="dark"] .sd-kpi-delta {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .source-dual-card[data-sd-active="reputation"] .sd-kpi-value,
html[data-theme="dark"] .source-dual-card[data-sd-active="reputation"] .sd-kpi-delta {
  color: var(--zs-pink) !important;
}
html[data-theme="dark"] .source-dual-card[data-sd-active="completeness"] .sd-kpi-value,
html[data-theme="dark"] .source-dual-card[data-sd-active="completeness"] .sd-kpi-delta {
  color: var(--zs-violet) !important;
}
html[data-theme="dark"] .is-partner .sd-kpi-value { color: var(--zs-partner-ink) !important; }

/* 信源类型页签激活态三色 */
html[data-theme="dark"] .sd-type-tabs button[data-sd-type="volume"].active {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .sd-type-tabs button[data-sd-type="reputation"].active {
  color: var(--zs-pink) !important;
}
html[data-theme="dark"] .sd-type-tabs button[data-sd-type="completeness"].active {
  color: var(--zs-violet) !important;
}

/* 词条列表分组色：全部紫 / 提及蓝 / 未提及琥珀 / 负面红 */
html[data-theme="dark"] .dashboard-content .word-section-panel .all-words .word-list-row span,
html[data-theme="dark"] .dashboard-content .word-section-panel .all-words .word-list-row b {
  color: var(--zs-violet) !important;
}
html[data-theme="dark"] .dashboard-content .word-section-panel .mentioned-words .word-list-row span,
html[data-theme="dark"] .dashboard-content .word-section-panel .mentioned-words .word-list-row b {
  color: var(--zs-blue) !important;
}
html[data-theme="dark"] .dashboard-content .word-section-panel .not-mentioned-words .word-list-row span,
html[data-theme="dark"] .dashboard-content .word-section-panel .not-mentioned-words .word-list-row b {
  color: var(--zs-amber) !important;
}
html[data-theme="dark"] .dashboard-content .word-section-panel .negative-words .word-list-row span,
html[data-theme="dark"] .dashboard-content .word-section-panel .negative-words .word-list-row b,
html[data-theme="dark"] .word-section-panel .negative-words .word-list-row span,
html[data-theme="dark"] .word-section-panel .negative-words .word-list-row b {
  color: var(--zs-red) !important;
}

/* --- C. 白字压亮底 chip：把底压深，保留白字 --- */

/* 新建页步骤序号 / 词条计数 / 说明图标：亮绿底 → 深绿墨底 */
html[data-theme="dark"] .nr-steps li.is-done > i,
html[data-theme="dark"] .nr-word-tab.is-active .nr-wt-count,
html[data-theme="dark"] .nr-word-intro > i,
html[data-theme="dark"] .nr-source-block.is-official .nr-source-badge {
  background: #0f5c48 !important;   /* 白字 7.94 */
  color: #eafff8 !important;
}
/* 合作徽标：亮蓝底 → 深蓝墨底（#107） */
html[data-theme="dark"] .nr-source-block.is-partner .nr-source-badge {
  background: #1b3a63 !important;   /* 亮字 8.72 */
  color: #cfe2ff !important;
}
/* 未选中的词条计数：浅灰底(#e8eeec)上的暗字 → 深 chip + 亮字 */
html[data-theme="dark"] .nr-word-tab .nr-wt-count {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}
/* 提示图标：中灰底白字(3.75) → 深底亮字 */
html[data-theme="dark"] .nr-note-icon {
  background: #3a4f46 !important;   /* 白字 8.8 */
  color: #eafff8 !important;
}
/* 平台 logo 字母托：浅底(#f2f7f5)白字(1.08) → 深 chip 亮字。
   注意：真实平台图标(.nr-plat-logo img)保留原白底托，不动。 */
html[data-theme="dark"] .nr-plat-logo > span {
  background: var(--zs-chip) !important;
  color: var(--zs-text-1) !important;
}

/* 项目卡片标签：紫字压紫墨底 4.3 → 提亮 */
html[data-theme="dark"] .pj-card-tags .pj-tag,
html[data-theme="dark"] .pj-tag {
  color: #c3b8ff !important;
}

/* --- 27.5 补丁：热度状态胶囊 ---
   .heat-state-pill 底色是 rgba(213,108,70,.38) 叠在深卡上，合成后约
   rgb(90,62,43)，原本的 #1a1a1a 深字只有 1.79:1。改成暖白字（7.42:1）。
   注意：同页的 .heat-ball 是径向渐变亮球（白心 17.4 / 橙环 6.56），
   球内深字对比充足，属设计意图，不在修复范围。 */
html[data-theme="dark"] .heat-state-pill {
  color: #ffd9c9 !important;
}

/* =====================================================================
 * 28. 页脚四段式居中重构（#94 深色堆叠 LOGO + #97 页脚版式）
 *
 * 结构：LOGO（堆叠版，深色自动切白版）→ 一句话介绍 → 四个分类链接
 *       → 附注文案 + 二维码。整体居中，横向拉通铺满视口。
 *
 * 注意：19.4 段里 `.site-footer.zs-footer .zs-footer-in` 曾强制 row 横向
 * 分栏（项目页旧版式），这里用 .zs-footer-stack 同类特异性 + 后置源顺序
 * 覆盖回 column，六页统一。
 * ===================================================================== */

.zs-footer-in.zs-footer-stack,
.site-footer.zs-footer .zs-footer-in.zs-footer-stack {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  text-align: center !important;
  gap: 18px !important;
  width: 100%;
  max-width: var(--zs-container);
  margin: 0 auto !important;
  padding: 44px 24px 40px !important;
}

/* --- 段 1：堆叠 LOGO --- */
.zs-footer-logo {
  display: flex;
  justify-content: center;
  line-height: 0;
}

.zs-footer-logo img {
  display: block;
  height: 76px;
  width: auto;
}

/* --- 段 2：一句话介绍 --- */
.zs-footer-tagline {
  margin: 0 !important;
  max-width: 560px;
  font-size: 13px !important;
  font-weight: 300 !important;
  line-height: 1.75 !important;
  letter-spacing: .01em;
  color: var(--zs-text-2) !important;
}

/* --- 段 3：动态署名（#130 已删导航与二维码） --- */
.zs-footer-meta {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  padding-top: 20px;
  width: 100%;
  border-top: 1px solid var(--zs-line);
}

.zs-footer-note {
  font-size: 12px !important;
  font-weight: 300 !important;
  color: var(--zs-text-3) !important;
  letter-spacing: .01em;
}

/* 深色下：附注同步提亮，保持与正文一致的层次 */
html[data-theme="dark"] .zs-footer-tagline { color: var(--zs-text-2) !important; }
html[data-theme="dark"] .zs-footer-note { color: var(--zs-text-3) !important; }
html[data-theme="dark"] .zs-footer-meta { border-top-color: var(--zs-line) !important; }

/* 窄屏：LOGO 收小，留白收紧 */
@media (max-width: 700px) {
  .zs-footer-in.zs-footer-stack,
  .site-footer.zs-footer .zs-footer-in.zs-footer-stack {
    gap: 15px !important;
    padding: 34px 16px 30px !important;
  }
  .zs-footer-logo img { height: 62px; }
  .zs-footer-tagline { font-size: 12.5px !important; }
}

/* --- 28.1 浅色页脚可读性修正 ---
   旧规则 `.footer-brand span, .nr-footer span, .report-footer span` 把页脚内
   所有 span 压到 --zs-text-3(#a3a3a3)，在页脚底 #f7f8f9 上只有 2.37:1。
   这里给三段式页脚（#130 已删导航与二维码）的文字显式定色：
     动态署名 #6e6e6e → 浅灰底 4.80、白底 5.06，均过 AA；
     一句话介绍沿用 --zs-text-2(#646464) → 5.57，作为次级正文。
   深色分支在下方单独给出，避免被本段浅色值覆盖。 */
.zs-footer-stack .zs-footer-note {
  color: #6e6e6e !important;
}

.zs-footer-stack .zs-footer-tagline {
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .zs-footer-stack .zs-footer-note {
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .zs-footer-stack .zs-footer-tagline {
  color: var(--zs-text-2) !important;
}

/* =====================================================================
 * 29. [hidden] 强制隐藏兜底（#97 视图切换残留）
 *
 * 根因：HTML 的 hidden 属性只对应 UA 样式表的 `[hidden]{display:none}`，
 * 优先级极低。业务样式里 `.pj-grid{display:grid}`、`.pj-table-wrap{display:block}`
 * 等作者级规则会直接压过它，导致 JS 设 el.hidden=true 后元素依然占位。
 * 实测：切到列表模式时 #pj-grid 仍 display:grid、高 1067px 停在 top 555，
 * 把列表挤到 top 1622 —— 即「切换了列表，卡片还在上面」。
 *
 * 这里用属性选择器 + !important 统一兜底，覆盖全站所有靠 hidden 切换的
 * 容器（视图、弹层、抽屉、分页、批量条、空态、撤销条等），
 * 一次性解决同类问题，而不只修 #pj-grid 一处。
 * ===================================================================== */

[hidden] {
  display: none !important;
}

/* 少数组件用 hidden 控制显隐但自身是 flex/grid 容器，
   上面的一条已足够；这里额外保证不会因 visibility/opacity 残留而占位。 */
#pj-grid[hidden],
#pj-table-wrap[hidden],
#pj-empty[hidden],
#pj-bulk[hidden],
#pj-pager[hidden],
#pj-views[hidden],
.pj-drawer[hidden],
.pj-drawer-mask[hidden],
.pj-modal[hidden],
.nr-modal[hidden],
.nr-modal-mask[hidden] {
  display: none !important;
  visibility: hidden !important;
}

/* =====================================================================
 * 30. 预计曝光改紧凑胶囊（#99）
 *
 * 用户要求：与上方「声量提升 / 声誉提升 / 保真度提升」三枚标签一样大小。
 * 基准实测 .overview-tags span = 108×31（font 11px / padding 9px 11px /
 * radius 7px）。原曝光卡是 253×110 的大卡，整块 778×155，明显 oversized。
 *
 * 改法：三档改为同规格横排胶囊，只留「短标签 + 数值 + 单位」，
 * 原本卡内的说明文案与占比条收进 data-tip（由 interactions.js 全站
 * 提示系统渲染，hover 与键盘 focus 均可达），信息不丢。
 * 左侧 3px 语义色条改为胶囊内前置圆点，保留三档色彩区分。
 * ===================================================================== */

.zs-exposure {
  margin-top: 14px !important;
  padding-top: 13px !important;
}

.zs-exposure-head {
  margin-bottom: 9px !important;
}

/* 横排胶囊，跟随标签行的排布方式，窄屏自动换行 */
.zs-exposure-grid {
  display: flex !important;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px !important;
  grid-template-columns: none !important;
}

.zs-exp-card {
  display: inline-flex !important;
  align-items: center;
  gap: 5px;
  padding: 9px 11px !important;
  border: 0 !important;
  border-radius: 7px !important;
  background: #f7f8f9 !important;
  box-shadow: none !important;
  overflow: visible !important;
  transform: none !important;
  font-size: 11px !important;
  line-height: 1.3 !important;
  cursor: help;
  transition: background .18s ease, color .18s ease;
}

/* 原大卡的左侧竖色条在胶囊里没有意义，改用前置圆点表意 */
.zs-exp-card::before {
  position: static !important;
  width: 6px !important;
  height: 6px !important;
  flex: 0 0 auto;
  border-radius: 50%;
  background: var(--exp-c, var(--zs-brand)) !important;
  opacity: 1 !important;
}

.zs-exp-card:hover {
  transform: none !important;
  box-shadow: none !important;
  background: var(--zs-brand-50) !important;
}

.zs-exp-card:focus-visible {
  outline: 2px solid var(--zs-brand);
  outline-offset: 2px;
}

.zs-exp-label {
  display: inline !important;
  margin: 0 !important;
  font-size: 11px !important;
  font-weight: 400 !important;
  color: #8a8383 !important;
}

/* 数值：与 .overview-tags b 同档，只略加字重以示强调 */
.zs-exp-card > b {
  font-size: 11px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  line-height: 1.3 !important;
  color: var(--exp-c, var(--zs-brand)) !important;
  font-variant-numeric: tabular-nums;
}

.zs-exp-card > em {
  font-size: 11px !important;
  font-style: normal !important;
  font-weight: 400 !important;
  color: #8a8383 !important;
}

/* 大卡遗留结构若被数据层重新插入，一律隐藏，避免撑破胶囊 */
.zs-exp-card .zs-exp-note,
.zs-exp-card .zs-exp-bar,
.zs-exp-card > strong > i {
  display: none !important;
}

/* 深色：胶囊底走 chip，文字与数值同步提亮 */
html[data-theme="dark"] .zs-exp-card {
  background: var(--zs-chip) !important;
}

html[data-theme="dark"] .zs-exp-card:hover {
  background: var(--zs-brand-50) !important;
}

html[data-theme="dark"] .zs-exp-label,
html[data-theme="dark"] .zs-exp-card > em {
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .zs-exp-card.is-mention > b { color: var(--zs-brand-ink) !important; }
html[data-theme="dark"] .zs-exp-card.is-top3 > b { color: var(--zs-blue) !important; }
html[data-theme="dark"] .zs-exp-card.is-top1 > b { color: var(--zs-violet) !important; }

/* 窄屏：曝光胶囊与标签行一致，允许换行不挤压 */
@media (max-width: 700px) {
  .zs-exposure-grid { gap: 8px !important; }
  .zs-exp-card { padding: 8px 10px !important; }
}

/* =====================================================================
 * 31. 头像下拉改 body 直属 fixed 层（#99 层级修复）
 *
 * 根因（实测）：
 *   .topbar        overflow:hidden; z-index:10; position:relative
 *   .page-shell    overflow:hidden; z-index:1
 *   .floating-shell position:fixed; z-index:100  ← 吸顶筛选条
 * 下拉原本 absolute 挂在 .zs-avatar-wrap 内，先被 topbar 的 64px 高度裁掉，
 * 即便不裁也会被 z-index:100 的筛选条盖住。
 *
 * 解法：JS 把 .zs-avatar-pop 移到 document.body 直属，这里改 position:fixed
 * 并给 z-index:1000（高于 floating-shell 的 100），坐标由 JS 按头像 rect
 * 实时换算。fixed + body 直属同时脱离祖先 overflow 裁剪与层叠上下文。
 *
 * 显隐开关也随之从「.zs-avatar-wrap.is-open .zs-avatar-pop」改为 pop 自身的
 * .is-open —— 因为 pop 已不在 holder 内，旧的后代选择器不再命中。
 * ===================================================================== */

.zs-avatar-pop.is-floating {
  position: fixed !important;
  top: 0;
  left: 0;
  right: auto !important;
  z-index: 1000 !important;
  margin: 0 !important;
  /* 关闭态彻底移出命中测试，避免透明层挡住页面点击 */
  pointer-events: none;
}

.zs-avatar-pop.is-floating.is-open {
  opacity: 1 !important;
  visibility: visible !important;
  transform: none !important;
  pointer-events: auto;
}

/* 小三角改为跟随右对齐（JS 已保证菜单右边缘贴头像右边缘） */
.zs-avatar-pop.is-floating::before {
  right: 14px !important;
  left: auto !important;
}

/* 桥接区加高到 12px，与 JS 里的 gap 一致，鼠标穿越不误收起 */
.zs-avatar-pop.is-floating::after {
  top: -12px !important;
  height: 12px !important;
}

/* 菜单内部滚动条沿用站点视觉语言，不用浏览器默认样式 */
.zs-avatar-pop.is-floating .zs-pop-list {
  max-height: min(52vh, 340px);
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--zs-line-strong) transparent;
}

.zs-avatar-pop.is-floating .zs-pop-list::-webkit-scrollbar { width: 6px; }
.zs-avatar-pop.is-floating .zs-pop-list::-webkit-scrollbar-track { background: transparent; }
.zs-avatar-pop.is-floating .zs-pop-list::-webkit-scrollbar-thumb {
  border-radius: 999px;
  background: var(--zs-line-strong);
}
.zs-avatar-pop.is-floating .zs-pop-list::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand);
}

/* =====================================================================
 * 32. 报告页顶部筛选卡改单行横滑（#102）
 *
 * 用户要求：做成和问题详情页顶部筛选卡一样，一行左右滑动，而不是换行。
 *
 * 根因（实测）：报告页加载 interactions.css，问题详情页加载
 * question-detail.css，两页样式链不同。interactions.css 的
 * @media(max-width:1100px) 把 `.dashboard-content .floating-shell .filter-bar`
 * 改成 `display:grid; grid-template-columns:repeat(3,1fr)`（860px 改 2 列、
 * 480px 改 1 列），并把 label 改成 `display:grid; grid-template-columns:auto minmax(0,1fr)`
 * + `width:100%`。于是报告页在 700~1100 区间被堆成 3~5 行（189px / 163px 高），
 * 而问题详情页始终是单行 67px / 51px 且 overflow-x:auto。
 *
 * 第一版修法（已废弃，见 .build/bak-r102/section32-old.css）踩了两个坑：
 *   ① 给子项写 `width:auto` —— 但 label 仍是 grid 容器，auto 会按剩余空间
 *      收缩，480px 下三个 label 直接被压成 0px 宽，完全不可用；
 *   ② 把 gap / padding / 控件宽度全断点写死 —— 反而改动了作为基准的问题
 *      详情页，两页高度对不齐（报告页 62/58 vs 基准 68）。
 *
 * 本版原则：
 *   - 只解决「换行 → 单行横滑」，不改基准页既有度量；
 *   - 子项一律 `flex:0 0 auto` + `width:max-content`，按内容取自然宽度，
 *      绝不参与收缩，溢出后由容器横滑承载；
 *   - label 从 grid 复位为 inline-flex，避免 grid 的 minmax(0,1fr) 吞宽度；
 *   - 控件宽度只在窄屏给下限（min-width），不写死 width；
 *   - 容器 padding / gap 沿用各页原有断点值，不覆盖。
 * ===================================================================== */

/* --- 32.1 容器：全断点单行 + 横滑，grid 属性彻底复位 --- */
.dashboard-content .floating-shell .filter-bar,
.dashboard-content .filter-bar,
.floating-shell .filter-bar,
.filter-bar {
  display: flex !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  overflow-x: auto !important;
  overflow-y: hidden !important;
  /* grid 残留属性必须清掉，否则子项仍按网格轨道定位 */
  grid-template-columns: none !important;
  grid-template-rows: none !important;
  grid-auto-rows: auto !important;
  grid-auto-flow: column !important;
  grid-auto-columns: auto !important;
  white-space: nowrap !important;
  /* interactions.css 在窄屏把 overflow 设成 visible，这里一并压回 */
  scrollbar-width: thin;
  scrollbar-color: var(--zs-line-strong) transparent;
  -webkit-overflow-scrolling: touch;
}

/* --- 32.2 子项：按内容取自然宽度，永不收缩 --- */
.dashboard-content .floating-shell .filter-bar > *,
.dashboard-content .filter-bar > *,
.floating-shell .filter-bar > *,
.filter-bar > * {
  flex: 0 0 auto !important;
  /* max-content 而非 auto：auto 在 grid/flex 混合下会被剩余空间压缩，
     实测 480px 时三个 label 被压成 0px。max-content 保证完整可读。 */
  width: max-content !important;
  min-width: max-content !important;
  max-width: none !important;
  grid-column: auto !important;
  grid-row: auto !important;
  justify-self: auto !important;
  align-self: center !important;
  white-space: nowrap !important;
}

/* --- 32.3 label：从 grid 复位成 inline-flex --- */
.dashboard-content .floating-shell .filter-bar label,
.floating-shell .filter-bar label,
.filter-bar label {
  display: inline-flex !important;
  align-items: center !important;
  grid-template-columns: none !important;
  gap: 7px;
  flex: 0 0 auto !important;
}

/* --- 32.4 标题块：主副标题竖排，窄屏让位 --- */
.dashboard-content .floating-shell .filter-bar .filter-title,
.floating-shell .filter-bar .filter-title,
.filter-bar .filter-title {
  display: inline-flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  grid-column: auto !important;
  gap: 2px;
  margin: 0 !important;
  padding: 0 4px 0 0 !important;
}

/* --- 32.5 日期区间：横排，两个 input 各自保持可读宽度 --- */
.dashboard-content .floating-shell .filter-bar .date-range,
.floating-shell .filter-bar .date-range,
.filter-bar .date-range {
  display: inline-flex !important;
  align-items: center !important;
  grid-template-columns: none !important;
  flex: 0 0 auto !important;
  gap: 6px !important;
}

/* --- 32.6 控件：只给下限，不写死宽度 --- */
.dashboard-content .floating-shell .filter-bar select,
.floating-shell .filter-bar select,
.filter-bar select {
  flex: 0 0 auto !important;
  width: auto !important;
  min-width: 96px !important;
}

.dashboard-content .floating-shell .filter-bar .date-range input[type="date"],
.floating-shell .filter-bar .date-range input[type="date"],
.filter-bar .date-range input[type="date"] {
  flex: 0 0 auto !important;
  width: auto !important;
  min-width: 118px !important;
}

/* --- 32.7 两个按钮随行尾横滑，不再被 grid 定位到独立行 --- */
.dashboard-content .floating-shell .filter-bar > button,
.floating-shell .filter-bar > button,
.filter-bar > button {
  flex: 0 0 auto !important;
  margin-top: 0 !important;
  justify-self: auto !important;
}

/* --- 32.8 滚动条：沿用站点视觉语言，细、圆角、悬停品牌色 --- */
.dashboard-content .floating-shell .filter-bar::-webkit-scrollbar,
.floating-shell .filter-bar::-webkit-scrollbar,
.filter-bar::-webkit-scrollbar {
  display: block !important;
  height: 5px;
}

.dashboard-content .floating-shell .filter-bar::-webkit-scrollbar-track,
.floating-shell .filter-bar::-webkit-scrollbar-track,
.filter-bar::-webkit-scrollbar-track {
  background: transparent;
  border-radius: 999px;
}

.dashboard-content .floating-shell .filter-bar::-webkit-scrollbar-thumb,
.floating-shell .filter-bar::-webkit-scrollbar-thumb,
.filter-bar::-webkit-scrollbar-thumb {
  border-radius: 999px;
  background: var(--zs-line-strong);
}

.dashboard-content .floating-shell .filter-bar::-webkit-scrollbar-thumb:hover,
.floating-shell .filter-bar::-webkit-scrollbar-thumb:hover,
.filter-bar::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand);
}

/* --- 32.9 窄屏：副标题让位，控件下限收紧 --- */
@media (max-width: 700px) {
  .dashboard-content .floating-shell .filter-bar .filter-title small,
  .floating-shell .filter-bar .filter-title small,
  .filter-bar .filter-title small {
    display: none !important;
  }
  .dashboard-content .floating-shell .filter-bar select,
  .floating-shell .filter-bar select,
  .filter-bar select {
    min-width: 88px !important;
  }
  .dashboard-content .floating-shell .filter-bar .date-range input[type="date"],
  .floating-shell .filter-bar .date-range input[type="date"],
  .filter-bar .date-range input[type="date"] {
    min-width: 108px !important;
  }
}

/* --- 32.10 两页度量对齐 ---
 * interactions.css 只给报告页写了 padding/gap 的窄屏覆盖
 * （1100px: 12px 16px + gap 9px 12px；700px: 10px 12px + gap 7px 8px），
 * 问题详情页没有这些覆盖，走 style.css 的 15px 18px / 9px 10px。
 * 结果同宽度下报告页 62px、基准页 68px，视觉不齐。
 * 这里把两页统一到基准页的度量，只动 padding 与 gap，不动控件本身。 */
.dashboard-content .floating-shell .filter-bar,
.floating-shell .filter-bar,
.filter-bar {
  gap: 12px !important;
  padding: 15px 18px !important;
}

@media (max-width: 700px) {
  .dashboard-content .floating-shell .filter-bar,
  .floating-shell .filter-bar,
  .filter-bar {
    gap: 8px !important;
    padding: 9px 10px !important;
  }
}

/* --- 32.11 收起态（nav-hidden）同样保持单行横滑 ---
 * interactions.css 在 700px 断点给 .nav-hidden 下的筛选条单独写了
 * position:relative + width:calc(100% - 28px)，这里不动它的定位，
 * 只确保 display / flex-wrap 不被其它规则改回 grid。 */
.nav-hidden .dashboard-content .floating-shell .filter-bar,
.nav-hidden .floating-shell .filter-bar,
.nav-hidden .filter-bar {
  display: flex !important;
  flex-wrap: nowrap !important;
  overflow-x: auto !important;
  grid-template-columns: none !important;
}

/* =====================================================================
 * 33. 顶栏中屏排版修复 + 筛选卡横滑可发现性（#102 视觉确认发现）
 *
 * 截图实测（1100px / 900px）暴露两个既有缺陷，与第 32 段无关但同属顶部壳区：
 *
 * ① 问题详情页顶栏「返回报告」「导出记录」被压成竖排文字。
 *    根因：.qd-back-btn / .export-btn 没有 white-space:nowrap，
 *    且 .topbar-actions 是 flex:0 1 auto，中屏空间不足时按钮被压缩，
 *    文字按字断行 → 62px 宽 80px 高、50px 宽 92px 高，
 *    整个 actions 高度撑到 92px 并溢出顶栏右边界 89~289px。
 *
 * ② 报告页 900px 时「新建报告」「分享」被 display:none 完全隐藏，
 *    主行动不可达。
 *
 * 修法：顶栏操作区按钮一律 nowrap + flex:0 0 auto（永不压缩），
 * 中屏让 .topbar nav 承担收缩与横滑（与筛选卡同一套交互语言），
 * 操作区始终完整可见。
 * ===================================================================== */

/* --- 33.1 操作区按钮：永不压缩、永不竖排 ---
 * 注意：这里不能写 display:flex !important。
 * style.css / layout-fix.css 在 ≤700px 把 .topbar-actions 设成 display:none，
 * 由汉堡菜单承载这些入口；强制显示会让 6 个按钮在 480px 下溢出顶栏。
 * 只约束「已显示时」的排布，显隐交给原有断点规则。 */
.topbar-actions,
.dashboard-content .topbar-actions {
  flex: 0 0 auto !important;
  align-items: center !important;
  flex-wrap: nowrap !important;
  gap: 8px;
}

.topbar-actions > *,
.dashboard-content .topbar-actions > * {
  flex: 0 0 auto !important;
  white-space: nowrap !important;
  word-break: keep-all !important;
}

.topbar-actions button,
.topbar-actions a,
.qd-back-btn,
.qd-tool-btn,
.dashboard-content .topbar-actions button,
.dashboard-content .topbar-actions a {
  white-space: nowrap !important;
  word-break: keep-all !important;
  flex: 0 0 auto !important;
  width: auto !important;
  min-width: max-content !important;
}

/* 图标按钮例外：主题开关是 34×34 的方形图标钮，
   上面的 width:auto + min-width:max-content 会把它压成 17px 宽
   （只剩 SVG 内容宽），必须显式还原固定尺寸。 */
.topbar-actions .zs-top-theme,
.dashboard-content .topbar-actions .zs-top-theme {
  width: 34px !important;
  min-width: 34px !important;
  height: 34px !important;
  padding: 0 !important;
  flex: 0 0 34px !important;
}

/* 头像同理：保持圆形，不被 max-content 影响 */
.topbar-actions .zs-avatar-wrap,
.dashboard-content .topbar-actions .zs-avatar-wrap {
  width: auto !important;
  min-width: 0 !important;
  flex: 0 0 auto !important;
}

/* --- 33.2 中屏：导航承担收缩与横滑，操作区保持完整 --- */
@media (max-width: 1280px) {
  .topbar,
  .floating-shell .topbar,
  .dashboard-content .topbar {
    gap: 14px !important;
    padding-left: 24px !important;
    padding-right: 24px !important;
  }

  .topbar nav,
  .dashboard-content .topbar nav {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    display: flex !important;
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    margin-left: 0 !important;
  }

  .topbar nav::-webkit-scrollbar,
  .dashboard-content .topbar nav::-webkit-scrollbar {
    display: none;
  }

  .topbar nav button,
  .topbar nav a,
  .dashboard-content .topbar nav button,
  .dashboard-content .topbar nav a {
    flex: 0 0 auto !important;
    white-space: nowrap !important;
  }

  /* 面包屑在中屏让位（layout-fix 已在 1100px 隐藏，这里提前到 1280px，
     给导航与操作区腾出空间，避免操作区被挤出顶栏） */
  .topbar-context,
  .dashboard-content .topbar-context {
    display: none !important;
  }
}

/* --- 33.3 中屏操作区按钮收紧内边距，保证 6 个控件都能放下 --- */
@media (max-width: 1280px) and (min-width: 701px) {
  .topbar-actions button:not(.zs-top-theme),
  .topbar-actions a,
  .qd-back-btn,
  .dashboard-content .topbar-actions button:not(.zs-top-theme),
  .dashboard-content .topbar-actions a {
    padding: 7px 11px !important;
    font-size: 12px !important;
  }
  .topbar-actions,
  .dashboard-content .topbar-actions {
    gap: 6px !important;
  }
}

/* --- 33.4 900px 以下不再隐藏主行动 ---
 * style.css / layout-fix.css 在窄断点把 .new-check-btn / .share-btn
 * 设成 display:none，导致「新建报告」不可达。这里恢复可见，
 * 由 33.2 的导航横滑腾出的空间承载。 */
@media (max-width: 1100px) and (min-width: 701px) {
  .topbar-actions .new-check-btn,
  .topbar-actions .share-btn,
  .topbar-actions .export-btn,
  .topbar-actions .qd-back-btn,
  .topbar-actions .qd-copy-link,
  .dashboard-content .topbar-actions .new-check-btn,
  .dashboard-content .topbar-actions .share-btn,
  .dashboard-content .topbar-actions .export-btn {
    display: inline-flex !important;
    align-items: center !important;
    visibility: visible !important;
  }
}

/* --- 33.5 筛选卡横滑可发现性 ---
 * 单行横滑后，右侧被裁的控件（如「查询」）没有任何视觉提示，
 * 用户不知道可以左右滑。这里在容器两端加渐隐遮罩 + 底部细滚动条，
 * 遮罩用 mask-image 实现，不额外插入 DOM，不影响命中测试。 */
.dashboard-content .floating-shell .filter-bar,
.floating-shell .filter-bar,
.filter-bar {
  /* 只有真正溢出时才显示渐隐，由 JS 打 .can-scroll-left / .can-scroll-right */
  --zs-fade-l: 0px;
  --zs-fade-r: 0px;
}

.filter-bar.can-scroll-left { --zs-fade-l: 28px; }
.filter-bar.can-scroll-right { --zs-fade-r: 28px; }

.filter-bar.can-scroll-left,
.filter-bar.can-scroll-right {
  -webkit-mask-image: linear-gradient(to right,
    transparent 0, #000 var(--zs-fade-l),
    #000 calc(100% - var(--zs-fade-r)), transparent 100%);
  mask-image: linear-gradient(to right,
    transparent 0, #000 var(--zs-fade-l),
    #000 calc(100% - var(--zs-fade-r)), transparent 100%);
}

/* 滚动条常显（此前 layout-fix 在 1100px 把它 display:none 了），
   细 5px、圆角、悬停品牌色，与站点其它滚动区一致 */
.dashboard-content .floating-shell .filter-bar::-webkit-scrollbar,
.floating-shell .filter-bar::-webkit-scrollbar,
.filter-bar::-webkit-scrollbar {
  display: block !important;
  height: 5px !important;
}

/* --- 33.6 窄屏（≤700px）操作区可达性 ---
 * 原设计在 ≤700px 把整个 .topbar-actions 设成 display:none，
 * 同时 .mobile-menu-toggle 也被 display:none !important 禁用，
 * 结果手机上「主题切换」「账号菜单」「新建报告」全部不可达。
 *
 * 头像菜单里已经完整承载了 项目管理 / AI 搜索热度 / 个人中心 /
 * 新建报告 四个入口 + 深色模式开关 + 账号设置，因此窄屏只需
 * 保留「主题图标钮 + 头像」两枚 34px 圆形钮（合计 76px），
 * 文字类行动按钮继续隐藏，由头像菜单承载，顶栏不会溢出。 */
@media (max-width: 700px) {
  .topbar-actions,
  .dashboard-content .topbar-actions {
    display: flex !important;
    flex: 0 0 auto !important;
    align-items: center !important;
    gap: 6px !important;
    margin-left: auto !important;
  }

  /* 文字行动按钮在窄屏隐藏（入口已在头像菜单内） */
  .topbar-actions > button:not(.zs-top-theme),
  .topbar-actions > a,
  .topbar-actions > .qd-back-btn,
  .dashboard-content .topbar-actions > button:not(.zs-top-theme),
  .dashboard-content .topbar-actions > a {
    display: none !important;
  }

  /* 两枚图标钮保持可见与固定尺寸 */
  .topbar-actions .zs-top-theme,
  .dashboard-content .topbar-actions .zs-top-theme {
    display: inline-grid !important;
    width: 32px !important;
    min-width: 32px !important;
    height: 32px !important;
    flex: 0 0 32px !important;
  }
  .topbar-actions .zs-avatar-wrap,
  .dashboard-content .topbar-actions .zs-avatar-wrap {
    display: block !important;
    flex: 0 0 auto !important;
  }
  .topbar-actions .zs-avatar,
  .dashboard-content .topbar-actions .zs-avatar {
    width: 32px !important;
    height: 32px !important;
  }

  /* 导航让出两枚图标钮的空间 */
  .topbar nav,
  .dashboard-content .topbar nav {
    flex: 1 1 auto !important;
    min-width: 0 !important;
  }
}

/* =====================================================================
 * 34 声誉 / 保真度彻底拆分 + 导航重排（#92 / #101）
 * ---------------------------------------------------------------------
 * 原 #details 一个板块承载「声量 + 声誉 + 保真度」，现拆成三个独立 section：
 *   #volume 声量效果 / #reputation 声誉效果 / #completeness 保真度效果
 * 导航同步 8 项：概览 热度 声量 声誉 保真度 信源 商品 视频。
 *
 * 本段只补「拆分后新出现的结构」的样式，不动既有视觉语言：
 *   34.1 保真度详情表列宽（新增 .completeness-table，6 列）
 *   34.2 声誉表删掉保真度列后从 7 列变 6 列，需重算列宽
 *   34.3 KPI 卡由 3 张变 2 张时的列数
 *   34.4 词条面板单类筛选时词卡铺满
 *   34.5 侧栏新增三枚图标（声量 / 声誉 / 保真度）
 * ===================================================================== */

/* --- 34.1 保真度详情表：平台 / 问题词 / 核心词 / 已提及 / 保真度 / 每日检测记录 --- */
.detail-table .table-head.completeness-table,
.detail-table .table-row.completeness-table {
  display: grid !important;
  grid-template-columns: .95fr 2fr .85fr .85fr .9fr 104px !important;
  align-items: center !important;
  gap: 10px !important;
}
/* 问题词列允许换行，与声量 / 声誉表口径一致 */
.detail-table .table-row.completeness-table > span:nth-child(2) {
  white-space: normal;
  word-break: break-word;
  line-height: 1.5;
}

/* --- 34.2 声誉表删「保真度」列后：平台 / 问题词 / 正面 / 负面 / 中性 / 每日检测记录 ---
 * style.css 原规则是 7 列（1fr 2fr .8fr .8fr .8fr .9fr 92px），
 * 少一列后若不重算，最后一列会被挤到 92px 之外造成错位。 */
.detail-table .table-head.reputation-table,
.detail-table .table-row.reputation-table {
  grid-template-columns: .95fr 2fr .85fr .85fr .85fr 104px !important;
}

/* --- 34.3 KPI 卡列数随实际张数走 ---
 * 声誉只剩正面 / 负面 2 张；保真度 3 张。
 * 用 :has 精确匹配张数，避免写死 3 列导致 2 张时右侧留空。 */
.reputation-kpis {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.reputation-kpis:has(> .rep-card:nth-child(2):last-child) {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
@media (max-width: 900px) {
  .reputation-kpis,
  .reputation-kpis:has(> .rep-card:nth-child(2):last-child) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 560px) {
  .reputation-kpis,
  .reputation-kpis:has(> .rep-card:nth-child(2):last-child) {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* 单张饼图独占一行时的横向铺满。
 * 拆分后声誉只剩 1 张饼图（3 项图例）、保真度 1 张（2 项图例）。
 * 若沿用「环形图 + 竖排图例」两栏，图例只占 420px，1438px 的内容区
 * 右侧会空掉 900px 以上（实测），视觉上像半张空卡。
 * 这里把图例改成横向指标条：项数 = 列数，每项等分剩余宽度，
 * 百分比靠右，既填满整行又保持「名称—数值」的读数习惯。 */
.effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) {
  grid-template-columns: minmax(0, 1fr);
}
.effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) .effect-pie-content {
  grid-template-columns: 170px minmax(0, 1fr);
  justify-content: stretch;
  gap: 32px;
}
.effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) .effect-legend {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: 14px;
  width: 100%;
}
.effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) .effect-legend > span {
  border-bottom: 0;
  border: 1px solid var(--zs-line, #ebebeb);
  border-radius: 12px;
  background: var(--zs-sunken, #f7f8f9);
  padding: 13px 16px;
  gap: 10px;
  font-size: 13px;
}
.effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) .effect-legend > span > b {
  margin-left: auto;
  font-size: 16px;
}
@media (max-width: 900px) {
  .effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) .effect-legend {
    grid-auto-flow: row;
    grid-auto-columns: auto;
    gap: 10px;
  }
}
@media (max-width: 700px) {
  .effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) .effect-pie-content {
    grid-template-columns: minmax(0, 1fr);
    justify-items: center;
    gap: 18px;
  }
  .effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child) .effect-legend {
    width: 100%;
  }
}

/* --- 34.4 词条面板：单类筛选时词卡铺满整行 ---
 * 拆分后每个面板只有一组词条（三张词卡）。点「仅正面」时只剩 1 张，
 * 若仍按 repeat(3,1fr) 排布会在右侧留两个空位。 */
.word-section-panel .word-direct-grid.is-single-kind {
  grid-template-columns: minmax(0, 1fr) !important;
}
/* .word-groups-grid 基础样式是 1fr 1fr（原来并列「声誉 / 保真度」两组）。
 * 拆分后每个面板只剩 1 个 word-subsection，第二列空着 →
 * 三张词卡被压在左半幅（实测 705px / 1438px）。
 * 用 :has 判「恰好一个子项」改单列，不依赖 JS 加的 is-single 类，
 * 初始渲染即生效，避免首屏闪一下半幅布局。 */
.word-section-panel .word-groups-grid:has(> .word-subsection:nth-child(1):last-child) {
  grid-template-columns: minmax(0, 1fr);
}
.word-section-panel .word-direct-group[hidden] {
  display: none !important;
}
/* 拆分后每个面板只有一组，去掉「第二组左边框」造成的多余竖线 */
.word-section-panel .word-groups-grid.is-single > .word-subsection + .word-subsection {
  border-left: 0;
  padding-left: 0;
}

/* --- 34.5 侧栏新增图标：声量（柱状）/ 声誉（笑脸）/ 保真度（环形进度） --- */
.icon-volume:after {
  content: "";
  position: absolute;
  left: 3px;
  right: 3px;
  bottom: 3px;
  height: 8px;
  background:
    linear-gradient(currentColor, currentColor) 0 100% / 3px 4px no-repeat,
    linear-gradient(currentColor, currentColor) 5px 100% / 3px 7px no-repeat,
    linear-gradient(currentColor, currentColor) 10px 100% / 3px 5px no-repeat;
}
.icon-reputation {
  border-radius: 50%;
}
.icon-reputation:after {
  content: "";
  position: absolute;
  left: 4px;
  right: 4px;
  bottom: 4px;
  height: 4px;
  border-bottom: 1.5px solid currentColor;
  border-radius: 0 0 6px 6px;
}
.icon-completeness {
  border-radius: 50%;
  border-right-color: transparent;
}
.icon-completeness:after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 4px;
  height: 4px;
  margin: -2px 0 0 -2px;
  border-radius: 50%;
  background: currentColor;
}

/* =====================================================================
 * 35 拆分后新元素的深色适配（#101）
 * ---------------------------------------------------------------------
 * question-detail.css 第 10 段新增的媒体占比条 / 三分类徽章 / 核心词清单
 * 全部是浅底硬编码（#fafbfc / #f2fcfa / #fff8f5 / #fff），
 * 深色下若不覆盖就是白卡（#93 已明确不允许）。这里逐项落到 zs 令牌。
 * ===================================================================== */

/* --- 35.1 三分类徽章 --- */
html[data-theme="dark"] .qd-kind-tag.k-official {
  background: rgba(63, 217, 174, .18) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-kind-tag.k-partner {
  background: rgba(107, 166, 247, .16) !important;
  color: var(--zs-partner-ink) !important;
}
html[data-theme="dark"] .qd-kind-tag.k-public {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}

/* --- 35.2 信源行 / 媒体行底色：去掉浅色渐变，改深底 + 分类描边 --- */
html[data-theme="dark"] .qd-src.is-official,
html[data-theme="dark"] .qd-src.is-partner,
html[data-theme="dark"] .qd-src.is-public,
html[data-theme="dark"] .qd-sc-row.is-official,
html[data-theme="dark"] .qd-sc-row.is-partner {
  background: var(--zs-sunken) !important;
  background-image: none !important;
}
html[data-theme="dark"] .qd-src.is-official,
html[data-theme="dark"] .qd-sc-row.is-official {
  border-color: rgba(63, 217, 174, .28) !important;
}
html[data-theme="dark"] .qd-src.is-partner,
html[data-theme="dark"] .qd-sc-row.is-partner {
  border-color: rgba(107, 166, 247, .26) !important;
}
html[data-theme="dark"] .qd-src.is-public {
  border-color: var(--zs-line) !important;
}
html[data-theme="dark"] .qd-src b,
html[data-theme="dark"] .qd-sc-row b {
  color: var(--zs-text-1) !important;
}
html[data-theme="dark"] .qd-src > span,
html[data-theme="dark"] .qd-sc-row > span {
  color: var(--zs-text-3) !important;
}
html[data-theme="dark"] .qd-src.is-public i {
  background: var(--zs-line-strong) !important;
  color: var(--zs-text-1) !important;
}

/* --- 35.3 检测条小旗 --- */
html[data-theme="dark"] .qd-flag.f-official {
  background: rgba(63, 217, 174, .16) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-flag.f-partner {
  background: rgba(107, 166, 247, .14) !important;
  color: var(--zs-partner-ink) !important;
}
html[data-theme="dark"] .qd-src-mix {
  color: var(--zs-text-3) !important;
}

/* --- 35.4 占比条与图例 --- */
html[data-theme="dark"] .qd-src-mix-bar {
  background: var(--zs-chip) !important;
}
html[data-theme="dark"] .qd-src-mix-legend span {
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .qd-src-mix-legend b {
  color: var(--zs-text-1) !important;
}
html[data-theme="dark"] .qd-src-mix-legend em {
  color: var(--zs-text-3) !important;
}
html[data-theme="dark"] .qd-insight-media .qd-source-rows {
  border-top-color: var(--zs-line) !important;
}

/* --- 35.5 核心词覆盖清单 --- */
html[data-theme="dark"] .qd-word-col {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}
html[data-theme="dark"] .qd-word-col.is-covered {
  background: var(--zs-brand-50) !important;
  border-color: rgba(63, 217, 174, .26) !important;
}
html[data-theme="dark"] .qd-word-col.is-missing {
  background: var(--zs-red-bg) !important;
  border-color: rgba(240, 115, 111, .26) !important;
}
html[data-theme="dark"] .qd-word-col.is-covered > small {
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .qd-word-col.is-missing > small {
  color: var(--zs-orange) !important;
}
html[data-theme="dark"] .qd-word-chips span {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}
html[data-theme="dark"] .qd-word-col.is-covered .qd-word-chips span {
  border-color: rgba(63, 217, 174, .3) !important;
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .qd-word-col.is-missing .qd-word-chips span {
  border-color: rgba(240, 161, 132, .3) !important;
  color: var(--zs-orange) !important;
}
html[data-theme="dark"] .qd-word-chips em {
  color: var(--zs-text-3) !important;
}

/* --- 35.6 保真度类型徽章：深色下紫底提亮，保证白字可读 --- */
html[data-theme="dark"] .qd-kind.is-completeness {
  background: linear-gradient(120deg, #6351fb, #8b7cf6) !important;
  color: #fff !important;
}

/* --- 35.7 保真度详情表：行 / 表头沿用既有深色规则，这里只补新问题词列 ---
 * .completeness-table 是新类名，深色下若没有底色规则会露出浅底。 */
html[data-theme="dark"] .detail-table .table-head.completeness-table {
  background: var(--zs-chip) !important;
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .detail-table .table-row.completeness-table {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
}
html[data-theme="dark"] .detail-table .table-row.completeness-table:hover {
  background: var(--zs-chip) !important;
}

/* --- 35.8 保真度日徽章：三态深色适配 ---
 * question-detail.css 里 .qd-day-badge.is-weak 是浅底硬编码
 * （rgba(238,191,82,.18) 底 + #8a6412 深琥珀字）。深色下琥珀底与
 * 深绿卡底合成 rgb(55,61,37)，深琥珀字压上去实测仅 2.11:1，
 * 「部分覆盖」几乎读不出来。这里三态一起给亮字 + 半透明语义底，
 * 避免只修 is-weak 后另两态在别的主题组合下再踩同一个坑。 */
html[data-theme="dark"] .qd-day-badge {
  background: rgba(46, 178, 142, .16) !important;
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .qd-day-badge.is-weak {
  background: rgba(238, 191, 82, .16) !important;
  color: var(--zs-amber) !important;
}
html[data-theme="dark"] .qd-day-badge.is-bad {
  background: rgba(213, 63, 63, .16) !important;
  color: var(--zs-red) !important;
}

/* ==========================================================================
 * 36. #100 信源详情列表：样式与特效对齐「问题详情列表」
 * --------------------------------------------------------------------------
 * 原来两套列表是两种视觉语言：
 *   问题详情表 .detail-table .table-row → 整行分隔线式（无四边框、
 *     border-bottom 分隔、hover 整行浅绿、无独立圆角卡片）
 *   信源问题列表 .source-question-list .question-item → 独立卡片式
 *     （四边框 + 9px 圆角 + 22px 实心序号徽章 + 8px 间隙）
 * 本段把后者改成前者的行式语言，保留「序号 + 问题文本」的信息结构，
 * 但序号弱化为纯文字、选中态用左侧品牌竖条而不是整块实心徽章。
 * ===================================================================== */

/* --- 36.1 列表容器：去掉卡片间隙，改连续行 --- */
.source-question-list {
  gap: 0 !important;
  padding: 0 !important;
}

/* --- 36.2 行本体：对齐 .table-row 的分隔线式 --- */
.source-question-list .question-item {
  width: 100%;
  min-height: 46px;
  padding: 12px 10px 12px 12px !important;
  gap: 12px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--zs-line) !important;
  border-radius: 0 !important;
  background: transparent !important;
  background-image: none !important;
  box-shadow: none !important;
  font-size: 12px !important;
  font-weight: 400 !important;
  color: var(--zs-text-2) !important;
  position: relative;
  transition: background .18s var(--zs-ease, ease), color .18s var(--zs-ease, ease);
}
.source-question-list .question-item:last-child {
  border-bottom: 0 !important;
}

/* 选中态左侧品牌竖条：与表行「整行浅绿」同源，但列表窄，
   纯底色不足以定位当前项，加 3px 竖条做锚点。 */
.source-question-list .question-item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  bottom: 8px;
  width: 3px;
  border-radius: 0 3px 3px 0;
  background: var(--zs-brand);
  opacity: 0;
  transition: opacity .18s var(--zs-ease, ease);
}
.source-question-list .question-item.active::before { opacity: 1; }

/* --- 36.3 悬停 / 选中：与 .table-row:hover 同一套底色 --- */
.source-question-list .question-item:hover {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-line) !important;
  transform: none !important;
  box-shadow: none !important;
  color: var(--zs-text-1) !important;
}
.source-question-list .question-item.active {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-brand-ink) !important;
  font-weight: 600 !important;
  box-shadow: none !important;
}

/* --- 36.4 序号：从实心徽章弱化为纯文字，与表行首列同量级 --- */
.source-question-list .question-item b {
  width: 20px !important;
  height: auto !important;
  flex: none;
  display: block !important;
  background: transparent !important;
  border-radius: 0 !important;
  color: var(--zs-text-3) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.source-question-list .question-item.active b {
  background: transparent !important;
  color: var(--zs-brand-ink) !important;
}

/* --- 36.5 问题文本：与表行问题词列同字号，超长省略 --- */
.source-question-list .question-item span {
  font-size: 12px;
  line-height: 1.5;
}

/* --- 36.6 深色：沿用表行的 card / chip 两级，不引入新底色 --- */
html[data-theme="dark"] .source-question-list .question-item {
  background: transparent !important;
  border-bottom-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .source-question-list .question-item:hover {
  background: var(--zs-chip) !important;
  border-bottom-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}
html[data-theme="dark"] .source-question-list .question-item.active {
  background: var(--zs-brand-50) !important;
  border-bottom-color: var(--zs-line) !important;
  color: var(--zs-brand-ink) !important;
}
html[data-theme="dark"] .source-question-list .question-item b {
  background: transparent !important;
  color: var(--zs-text-3) !important;
}
html[data-theme="dark"] .source-question-list .question-item.active b {
  background: transparent !important;
  color: var(--zs-brand-ink) !important;
}

/* --- 36.7 信源明细行（右侧列表）：同样对齐问题详情表行 ---
 * 实测差异：明细行带 3px 彩色内嵌左条 + 8px 圆角 + 11px 字号，
 * 表头只有 23px 高且 padding 不对称（0 10px 8px），
 * 与问题详情表（55px 行 / 46px 表头 / 12px 字 / 13px 0 padding）不是一套。
 * 分类信息已由行内「官方/合作/公共」徽章承载，左条与渐变属重复编码，
 * 去掉后扫读靠徽章，行语言与问题详情表完全一致。 */
.question-source .media-source-row,
.dashboard-content .source-media-pane .media-source-row {
  padding: 13px 0 !important;
  border: 0 !important;
  border-bottom: 1px solid var(--zs-line) !important;
  border-radius: 0 !important;
  background: var(--zs-card) !important;
  background-image: none !important;
  box-shadow: none !important;
  font-size: 12px !important;
  gap: 12px !important;
  transition: background .18s var(--zs-ease, ease), color .18s var(--zs-ease, ease);
}
.question-source .media-source-row:last-child,
.dashboard-content .source-media-pane .media-source-row:last-child {
  border-bottom: 0 !important;
}
/* 三分类行：去掉左条与渐变，只保留统一底色（徽章负责分类） */
.question-source .media-source-row.is-official,
.question-source .media-source-row.is-partner,
.question-source .media-source-row.is-public,
.dashboard-content .source-media-pane .media-source-row.is-official,
.dashboard-content .source-media-pane .media-source-row.is-partner,
.dashboard-content .source-media-pane .media-source-row.is-public,
.question-source .media-source-row.owned-media-row,
.dashboard-content .source-media-pane .owned-media-row {
  background: var(--zs-card) !important;
  background-image: none !important;
  box-shadow: none !important;
}
.question-source .media-source-row:hover,
.dashboard-content .source-media-pane .media-source-row:hover,
.question-source .media-source-row.is-official:hover,
.question-source .media-source-row.is-partner:hover,
.question-source .media-source-row.is-public:hover,
.dashboard-content .source-media-pane .media-source-row.is-official:hover,
.dashboard-content .source-media-pane .media-source-row.is-partner:hover,
.dashboard-content .source-media-pane .media-source-row.is-public:hover {
  background: var(--zs-brand-50) !important;
  background-image: none !important;
  border-bottom-color: var(--zs-line) !important;
  box-shadow: none !important;
  transform: none !important;
}
/* 行内文字统一到 12px，与表行同量级 */
.question-source .media-source-row strong,
.question-source .media-source-row time,
.question-source .media-source-row > b,
.question-source .media-source-row .media-name {
  font-size: 12px !important;
}

/* --- 36.8 明细表头：对齐 .detail-table .table-head 的高度与内距 --- */
.question-source .media-source-columns,
.dashboard-content .source-media-pane .media-source-columns {
  padding: 13px 0 !important;
  min-height: 46px;
  align-items: center;
  gap: 12px !important;
  border-radius: 0 !important;
  border-bottom: 1px solid var(--zs-line) !important;
  background: var(--zs-sunken) !important;
  font-size: 11px !important;
  font-weight: 500 !important;
}

/* --- 36.9 深色：明细行沿用表行两级底色 --- */
html[data-theme="dark"] .question-source .media-source-row,
html[data-theme="dark"] .dashboard-content .source-media-pane .media-source-row,
html[data-theme="dark"] .question-source .media-source-row.is-official,
html[data-theme="dark"] .question-source .media-source-row.is-partner,
html[data-theme="dark"] .question-source .media-source-row.is-public,
html[data-theme="dark"] .question-source .media-source-row.owned-media-row {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-bottom-color: var(--zs-line) !important;
  box-shadow: none !important;
}
html[data-theme="dark"] .question-source .media-source-row:hover,
html[data-theme="dark"] .dashboard-content .source-media-pane .media-source-row:hover,
html[data-theme="dark"] .question-source .media-source-row.is-official:hover,
html[data-theme="dark"] .question-source .media-source-row.is-partner:hover,
html[data-theme="dark"] .question-source .media-source-row.is-public:hover {
  background: var(--zs-chip) !important;
  background-image: none !important;
  border-bottom-color: var(--zs-line) !important;
  box-shadow: none !important;
}
html[data-theme="dark"] .question-source .media-source-columns,
html[data-theme="dark"] .dashboard-content .source-media-pane .media-source-columns {
  background: var(--zs-chip) !important;
  border-bottom-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

/* ==========================================================================
 * 37. #104 媒体列表「查看」＝外部原文链接，文章标题＝站内解读
 * --------------------------------------------------------------------------
 * 语义拆分后两个入口的外观必须能区分：
 *   · 「查看 ↗」是真 <a target="_blank">，做成轻量文字链 + 外链箭头，
 *     不再沿用旧的实心胶囊按钮（那会让人以为是站内弹层）。
 *   · 文章标题是 <button>，去掉原生按钮外观，继承行内 12px 字号，
 *     悬停才显品牌色 + 下划线，暗示「这里可点」。
 * 列宽已在 interactions.css 三档同步加宽（62 / 58 / 52px）。
 * ===================================================================== */

/* --- 37.1 查看：外链文字链 --- */
.question-source .media-source-row a.media-view-btn,
.dashboard-content .source-media-pane a.media-view-btn,
.kn-modal a.media-view-btn {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 3px;
  box-sizing: border-box;
  width: 100%;
  min-height: 26px;
  padding: 3px 7px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-pill) !important;
  background: transparent !important;
  background-image: none !important;
  box-shadow: none !important;
  color: var(--zs-text-2) !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  line-height: 1.2;
  text-decoration: none !important;
  white-space: nowrap;
  cursor: pointer;
  transform: none !important;
  transition: color .18s var(--zs-ease, ease), border-color .18s var(--zs-ease, ease),
    background .18s var(--zs-ease, ease);
}
.question-source .media-source-row a.media-view-btn:hover,
.question-source .media-source-row a.media-view-btn:focus-visible,
.dashboard-content .source-media-pane a.media-view-btn:hover,
.kn-modal a.media-view-btn:hover {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
  transform: none !important;
}
.question-source .media-source-row a.media-view-btn:focus-visible,
.dashboard-content .source-media-pane a.media-view-btn:focus-visible {
  outline: 2px solid var(--zs-brand) !important;
  outline-offset: 2px;
}
/* 外链箭头：比正文小一号，轻微上移，暗示「离开本站」 */
.media-view-ext {
  font-style: normal;
  font-size: 10px;
  line-height: 1;
  transform: translateY(-1px);
  opacity: .75;
}
a.media-view-btn:hover .media-view-ext {
  opacity: 1;
}

/* --- 37.2 文章标题：站内解读入口 --- */
.question-source .media-source-row strong,
.dashboard-content .source-media-pane .media-source-row strong {
  display: block;
  min-width: 0;
  overflow: hidden;
}
/* 标题是这一行的主信息，用 text-1；旧皮肤把整行文字压成灰绿 #597c71，
   标题继承后比日期还淡，主次颠倒，这里显式纠正。 */
.question-source .media-source-row .media-title-btn,
.dashboard-content .source-media-pane .media-title-btn {
  color: var(--zs-text-1);
}
html[data-theme="dark"] .question-source .media-source-row .media-title-btn,
html[data-theme="dark"] .dashboard-content .source-media-pane .media-title-btn {
  color: var(--zs-text-1);
}
.media-title-btn {
  display: block;
  width: 100%;
  max-width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  box-shadow: none;
  color: inherit;
  font: inherit;
  font-weight: 500;
  text-align: left;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
  transition: color .18s var(--zs-ease, ease);
}
.question-source .media-source-row .media-title-btn:hover,
.dashboard-content .source-media-pane .media-title-btn:hover,
.media-title-btn:hover {
  color: var(--zs-brand-ink-deep);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}
.media-title-btn:focus-visible {
  outline: 2px solid var(--zs-brand);
  outline-offset: 2px;
  border-radius: 3px;
}

/* --- 37.3 深色：描边与文字换深色令牌，悬停用 chip 底 --- */
html[data-theme="dark"] .question-source .media-source-row a.media-view-btn,
html[data-theme="dark"] .dashboard-content .source-media-pane a.media-view-btn,
html[data-theme="dark"] .kn-modal a.media-view-btn {
  border-color: var(--zs-line) !important;
  background: transparent !important;
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .question-source .media-source-row a.media-view-btn:hover,
html[data-theme="dark"] .dashboard-content .source-media-pane a.media-view-btn:hover,
html[data-theme="dark"] .kn-modal a.media-view-btn:hover {
  border-color: var(--zs-brand) !important;
  background: var(--zs-chip) !important;
  color: var(--zs-brand) !important;
}
html[data-theme="dark"] .question-source .media-source-row .media-title-btn:hover,
html[data-theme="dark"] .dashboard-content .source-media-pane .media-title-btn:hover,
html[data-theme="dark"] .media-title-btn:hover {
  color: var(--zs-brand);
}

/* --- 37.4 窄屏：末列只有 52px，收掉箭头保「查看」二字完整 --- */
@media (max-width: 700px) {
  .media-view-ext {
    display: none;
  }
  .question-source .media-source-row a.media-view-btn,
  .dashboard-content .source-media-pane a.media-view-btn {
    padding: 3px 4px !important;
    font-size: 10px !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .media-title-btn,
  a.media-view-btn,
  .media-view-ext {
    transition: none;
  }
}

/* --- 37.5 打印：外链还原成纯文本并附地址，纸面上仍可追溯 --- */
@media print {
  .question-source .media-source-row a.media-view-btn {
    border: 0 !important;
    padding: 0 !important;
    color: #666 !important;
  }
  .media-view-ext {
    display: none;
  }
}

/* ==========================================================================
 * 38. #105 问题详情页顶部「问题」筛选项
 * --------------------------------------------------------------------------
 * 筛选条已由 §32 统一成「单行 + 横滑」，新增控件必须遵守同一套约束：
 * flex:0 0 auto、width:max-content，绝不参与收缩。
 * 问题词比平台名长得多（最长 15 个汉字），若按 max-content 取自然宽度，
 * 1600px 下会把日期区间整个挤出视口。所以这里给一个上限并让 select
 * 自身省略号截断 —— 完整词在 title 与页面大标题里都能看到。
 * ===================================================================== */
.dashboard-content .floating-shell .filter-bar .qd-question-field,
.floating-shell .filter-bar .qd-question-field,
.filter-bar .qd-question-field {
  max-width: 300px !important;
  min-width: 0 !important;
  width: auto !important;
}
.dashboard-content .floating-shell .filter-bar #qd-question-filter,
.floating-shell .filter-bar #qd-question-filter,
.filter-bar #qd-question-filter {
  min-width: 150px !important;
  max-width: 232px;
  width: auto !important;
  text-overflow: ellipsis;
}
/* 问题＝这一页的主语，标签用主文本色，与「平台/时间范围」拉开层级 */
.qd-question-field {
  color: var(--zs-text-1);
  font-weight: 500;
}
html[data-theme="dark"] .qd-question-field {
  color: var(--zs-text-1);
}

@media (max-width: 1240px) {
  .dashboard-content .floating-shell .filter-bar #qd-question-filter,
  .floating-shell .filter-bar #qd-question-filter,
  .filter-bar #qd-question-filter {
    min-width: 132px !important;
    max-width: 190px;
  }
}
@media (max-width: 700px) {
  .dashboard-content .floating-shell .filter-bar #qd-question-filter,
  .floating-shell .filter-bar #qd-question-filter,
  .filter-bar #qd-question-filter {
    min-width: 118px !important;
    max-width: 150px;
  }
}

/* ==========================================================================
 * 39. #106 批量导入 Excel 入口的皮肤对齐
 * --------------------------------------------------------------------------
 * §9 / §26 把所有 .nr-tool-btn 统一成「白底细边胶囊 !important」，
 * 新增的「上传 Excel」若不单独提权就会和其余四个工具长一样，
 * 主路径失去视觉优先级。这里用同等特异性 + 更靠后的源顺序压回来。
 * ===================================================================== */
.nr-tool-btn.is-file,
.dashboard-content .nr-tool-btn.is-file {
  border-color: var(--zs-brand-100) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
}
.nr-tool-btn.is-file:hover,
.dashboard-content .nr-tool-btn.is-file:hover {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand) !important;
  color: #fff !important;
}
.nr-tool-btn.is-tpl,
.dashboard-content .nr-tool-btn.is-tpl {
  border-style: dashed !important;
}

/* 拖拽区：与弹层里其余「面」同一套令牌，不引入新底色 */
.nr-bulk-drop {
  border-color: var(--zs-line-strong) !important;
  border-radius: var(--zs-r-md) !important;
  background: var(--zs-sunken) !important;
  color: var(--zs-text-2) !important;
  font-weight: 300;
}
.nr-bulk-drop:hover {
  border-color: var(--zs-brand-100) !important;
  color: var(--zs-brand-ink-deep) !important;
}
.nr-bulk-drop.is-over,
.nr-bulk-drop.has-file {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}
.nr-bulk-drop-icon {
  background: var(--zs-brand-100) !important;
  color: var(--zs-brand-ink-deep) !important;
  border-radius: var(--zs-r-sm);
}
.nr-bulk-drop.is-over .nr-bulk-drop-icon,
.nr-bulk-drop.has-file .nr-bulk-drop-icon {
  background: var(--zs-brand) !important;
  color: #fff !important;
}
.nr-bulk-drop-name {
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
}
.nr-bulk-tip p b {
  color: var(--zs-brand-ink-deep) !important;
  font-weight: 500 !important;
}

/* --- 39.1 深色 --- */
html[data-theme="dark"] .nr-tool-btn.is-file,
html[data-theme="dark"] .dashboard-content .nr-tool-btn.is-file {
  border-color: var(--zs-brand-ink) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand) !important;
}
html[data-theme="dark"] .nr-tool-btn.is-file:hover {
  background: var(--zs-brand) !important;
  color: #06231d !important;
}
html[data-theme="dark"] .nr-bulk-drop {
  border-color: var(--zs-line) !important;
  background: var(--zs-sunken) !important;
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .nr-bulk-drop.is-over,
html[data-theme="dark"] .nr-bulk-drop.has-file {
  border-color: var(--zs-brand) !important;
  background: var(--zs-chip) !important;
  color: var(--zs-brand) !important;
}
html[data-theme="dark"] .nr-bulk-drop-icon {
  background: var(--zs-chip) !important;
  color: var(--zs-brand) !important;
}
html[data-theme="dark"] .nr-bulk-drop.is-over .nr-bulk-drop-icon,
html[data-theme="dark"] .nr-bulk-drop.has-file .nr-bulk-drop-icon {
  background: var(--zs-brand) !important;
  color: #06231d !important;
}
html[data-theme="dark"] .nr-bulk-drop-name,
html[data-theme="dark"] .nr-bulk-tip p b {
  color: var(--zs-brand) !important;
}

/* ==========================================================================
 * 40. #107 深色分类色收口
 *
 * 口径：官方媒体＝品牌青绿 / 合作媒体＝蓝 / 公共信源＝中性灰。
 *
 * 为什么必须放在文件最后：§20.5（次级按钮）、§20.9（徽标芯片）、§27（涨幅胶囊）
 * 是「宽泛通用规则」，带 !important 且源顺序在分类色之后，会把语义色压成
 * --zs-text-1 / --zs-text-2 中性色。这里用更高特异性 + 更靠后的源顺序压回来。
 * ========================================================================== */

/* --- 40.1 信源明细行徽章：深色实底 + 亮字（压过 §20.9 chip 组） ---
 * 浅色是「深底白字」，深色不能照搬亮底（白字会掉到 2.x），
 * 改为墨底 + 同色系亮字，三档均 ≥ 7.6。 */
html[data-theme="dark"] .dashboard-content .owned-source-badge.is-partner,
html[data-theme="dark"] .question-source .owned-source-badge.is-partner {
  background: #1b3a63 !important;
  background-image: none !important;
  border-color: #2b5288 !important;
  color: #cfe2ff !important;   /* 8.72 */
}
html[data-theme="dark"] .dashboard-content .owned-source-badge.is-official,
html[data-theme="dark"] .question-source .owned-source-badge.is-official {
  background: #0f5c48 !important;
  background-image: none !important;
  border-color: #1c7a60 !important;
  color: #eafff8 !important;   /* 7.62 */
}
html[data-theme="dark"] .dashboard-content .owned-source-badge.is-public,
html[data-theme="dark"] .question-source .owned-source-badge.is-public {
  background: #3a4149 !important;
  background-image: none !important;
  border-color: #4d565f !important;
  color: #e6e9ee !important;   /* 8.49 */
}

/* --- 40.2 信源双卡涨幅胶囊：合作卡走蓝（压过 §27 官方绿） ---
 * 只改合作卡，官方卡保留 §27 的青绿墨底；
 * 声誉玫红 / 保真度紫的 TAB 语义不动（由 data-sd-active 规则继续接管）。 */
html[data-theme="dark"] .source-dual-card.is-partner:not([data-sd-active="reputation"]):not([data-sd-active="completeness"]) .sd-kpi-delta {
  background: #1e363e !important;   /* 实色，等价 rgba(107,166,247,.16) 叠 #0f211b */
  color: var(--zs-partner-ink) !important;   /* 7.08 */
}

/* --- 40.3 新建 / 编辑页：信源计数胶囊 ---
 * §20.9 把 .nr-source-count 归入 chip 组，文字被压成 --zs-text-2 中性色。
 * 底色保留 chip，只把文字与内描边按分类还原。 */
html[data-theme="dark"] .nr-source-block.is-partner .nr-source-count,
html[data-theme="dark"] [data-nr-source-count="partner"] {
  color: var(--zs-partner-ink) !important;   /* #9cc4fb on #12281f = 8.67 */
  box-shadow: inset 0 0 0 1px rgba(107, 166, 247, .34) !important;
}
html[data-theme="dark"] .nr-source-block.is-official .nr-source-count,
html[data-theme="dark"] [data-nr-source-count="official"] {
  color: var(--zs-brand-ink-deep) !important;   /* #8ff0d4 on #12281f = 11.55 */
  box-shadow: inset 0 0 0 1px rgba(63, 217, 174, .34) !important;
}

/* --- 40.4 新建 / 编辑页：批量导入 / 添加按钮 ---
 * §20.5 把 .nr-bulk-btn / .nr-add-btn 归入次级按钮组，分类色全丢。
 * 这里按官方青绿 / 合作蓝还原描边与文字；hover 用同色系加深底 + 亮字，
 * 不用浅色那套「亮底白字」（白字压 #4084f1 只有 3.63，不达 AA）。 */
html[data-theme="dark"] .nr-source-block.is-partner .nr-bulk-btn,
html[data-theme="dark"] [data-nr-source="partner"] .nr-bulk-btn,
html[data-theme="dark"] .nr-source-block.is-partner .nr-add-btn,
html[data-theme="dark"] [data-nr-add-link="partner"] {
  border-color: var(--zs-partner-line) !important;
  color: var(--zs-partner-ink) !important;   /* 8.67 */
}
html[data-theme="dark"] .nr-source-block.is-partner .nr-bulk-btn:hover,
html[data-theme="dark"] [data-nr-source="partner"] .nr-bulk-btn:hover,
html[data-theme="dark"] .nr-source-block.is-partner .nr-add-btn:hover,
html[data-theme="dark"] [data-nr-add-link="partner"]:hover {
  background: rgba(107, 166, 247, .26) !important;   /* 叠 chip → #274454 */
  border-color: var(--zs-partner) !important;
  color: #cfe2ff !important;   /* 7.83 */
}
html[data-theme="dark"] .nr-source-block.is-official .nr-bulk-btn,
html[data-theme="dark"] [data-nr-source="official"] .nr-bulk-btn,
html[data-theme="dark"] .nr-source-block.is-official .nr-add-btn,
html[data-theme="dark"] [data-nr-add-link="official"] {
  border-color: var(--zs-brand-100) !important;
  color: var(--zs-brand-ink-deep) !important;   /* 11.55 */
}
html[data-theme="dark"] .nr-source-block.is-official .nr-bulk-btn:hover,
html[data-theme="dark"] [data-nr-source="official"] .nr-bulk-btn:hover,
html[data-theme="dark"] .nr-source-block.is-official .nr-add-btn:hover,
html[data-theme="dark"] [data-nr-add-link="official"]:hover {
  background: rgba(63, 217, 174, .22) !important;
  border-color: var(--zs-brand) !important;
  color: #eafff8 !important;
}

/* --- 40.5 新建 / 编辑页：链接行 favicon 字母托 ---
 * 与计数胶囊同一套分类口径，浅底深字改墨底亮字。 */
html[data-theme="dark"] .nr-source-block.is-partner .nr-link-fav {
  background: var(--zs-partner-soft) !important;
  color: var(--zs-partner-ink) !important;   /* #9cc4fb on #101d2c = 9.48 */
}
html[data-theme="dark"] .nr-source-block.is-official .nr-link-fav {
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* --- 40.6 详情页信源行字母托：深色墨底 + 同色系亮字 ---
 * 字母托里有媒体名首字母（9px/700），不是纯色块，必须过 AA。
 * §35 只覆盖了 is-public，official / partner 一直沿用浅色的亮底白字
 * （白字压 #4084f1 只有 3.63、压 #28b894 只有 2.51），这里补齐。 */
html[data-theme="dark"] .qd-src.is-partner i,
html[data-theme="dark"] .qd-sc-row.is-partner i {
  background: #1b3a63 !important;
  background-image: none !important;
  color: #cfe2ff !important;   /* 8.72 */
}
html[data-theme="dark"] .qd-src.is-official i,
html[data-theme="dark"] .qd-src.is-owned i,
html[data-theme="dark"] .qd-sc-row.is-official i {
  background: #0f5c48 !important;
  background-image: none !important;
  color: #eafff8 !important;   /* 7.62 */
}

/* ==========================================================================
   41. #108 回答链接 / 回答截图 —— 深色适配
   --------------------------------------------------------------------------
   浅色层里这批样式全是硬编码白底 / 浅青绿底，深色下必须整体换墨底。
   注意 §29 有 `.qd-meta-item { background: var(--zs-sunken) !important }`
   与 `.qd-meta-item small { color: var(--zs-muted) !important }`，
   本节靠更高特异性 + 更靠后源顺序压回容器与标签色。
   ========================================================================== */

/* --- 41.1 外链胶囊：青绿墨底 + 亮绿字（#8ff0d4 on #12281f ≈ 10.6） --- */
html[data-theme="dark"] .qd-meta-item.is-link .qd-answer-link {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-meta-item.is-link .qd-answer-link:hover {
  background: rgba(63, 217, 174, .16) !important;
  border-color: var(--zs-brand) !important;
  box-shadow: 0 2px 10px rgba(63, 217, 174, .22) !important;
}
html[data-theme="dark"] .qd-answer-ico {
  background: var(--zs-brand) !important;
  color: var(--zs-text-inverse) !important;
}
html[data-theme="dark"] .qd-answer-txt b { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .qd-answer-txt i { color: var(--zs-muted) !important; }
html[data-theme="dark"] .qd-answer-go {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-answer-link:hover .qd-answer-go,
html[data-theme="dark"] .qd-answer-link:focus-visible .qd-answer-go {
  background: var(--zs-brand) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-text-inverse) !important;
}
html[data-theme="dark"] .qd-answer-link:focus-visible {
  outline-color: var(--zs-brand-ink-deep) !important;
}

/* --- 41.2 截图缩略图 ---
 * 快照 SVG 本体是「平台会话截图」，无论主题都保持浅色画面（截图就是
 * 浅色 App 的真实样子），故只把外框与悬停遮罩换深色语言，不去反相图片，
 * 否则快照内容会与平台真实界面对不上。 */
html[data-theme="dark"] .qd-meta-item.is-shot .qd-shot-btn {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-line-strong) !important;
}
html[data-theme="dark"] .qd-meta-item.is-shot .qd-shot-btn:hover {
  background: rgba(63, 217, 174, .16) !important;
  border-color: var(--zs-brand) !important;
  box-shadow: 0 2px 10px rgba(63, 217, 174, .22) !important;
}
html[data-theme="dark"] .qd-shot-ico {
  background: var(--zs-brand) !important;
  color: var(--zs-text-inverse) !important;
}
html[data-theme="dark"] .qd-shot-txt b { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .qd-shot-txt i { color: var(--zs-muted) !important; }
html[data-theme="dark"] .qd-shot-txt i em {
  box-shadow: 0 0 0 1.5px rgba(10, 21, 18, .85) !important;
}
html[data-theme="dark"] .qd-shot-zoom {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-shot-btn:hover .qd-shot-zoom,
html[data-theme="dark"] .qd-shot-btn:focus-visible .qd-shot-zoom {
  background: var(--zs-brand) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-text-inverse) !important;
}
html[data-theme="dark"] .qd-shot-btn:focus-visible {
  outline-color: var(--zs-brand-ink-deep) !important;
}

/* --- 41.3 弹层骨架 --- */
html[data-theme="dark"] .qd-shot-modal {
  background: rgba(4, 10, 8, .72) !important;
}
html[data-theme="dark"] .qd-shot-card {
  background: var(--zs-card) !important;
  border-color: var(--zs-line-strong) !important;
  box-shadow: 0 24px 64px rgba(0, 0, 0, .55) !important;
}
html[data-theme="dark"] .qd-shot-head {
  background: linear-gradient(180deg, var(--zs-brand-50), var(--zs-card)) !important;
  border-bottom-color: var(--zs-line) !important;
}
html[data-theme="dark"] .qd-shot-kicker { color: var(--zs-kicker) !important; }
html[data-theme="dark"] .qd-shot-head h3 { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .qd-shot-head p { color: var(--zs-text-2) !important; }

html[data-theme="dark"] .qd-shot-x {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .qd-shot-x:hover {
  background: var(--zs-red-bg) !important;
  border-color: rgba(240, 115, 111, .42) !important;
  color: var(--zs-red) !important;
}
html[data-theme="dark"] .qd-shot-x:focus-visible {
  outline-color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .qd-shot-body { background: var(--zs-sunken) !important; }
html[data-theme="dark"] .qd-shot-body img {
  border-color: var(--zs-line-strong) !important;
  box-shadow: 0 6px 20px rgba(0, 0, 0, .4) !important;
}
html[data-theme="dark"] .qd-shot-body::-webkit-scrollbar-track { background: #0f211b !important; }
html[data-theme="dark"] .qd-shot-body::-webkit-scrollbar-thumb { background: rgba(63, 217, 174, .34) !important; }
html[data-theme="dark"] .qd-shot-body::-webkit-scrollbar-thumb:hover { background: rgba(63, 217, 174, .58) !important; }

html[data-theme="dark"] .qd-shot-foot {
  background: var(--zs-card) !important;
  border-top-color: var(--zs-line) !important;
}
html[data-theme="dark"] .qd-shot-note { color: var(--zs-text-3) !important; }

/* 主行动按钮：深色下用亮绿实底 + 墨字（#0a1512 on #3fd9ae ≈ 10.4），
   不沿用浅色的深绿底白字，那样在深底上会糊成一块。 */
html[data-theme="dark"] .qd-shot-jump {
  background: var(--zs-brand) !important;
  color: var(--zs-text-inverse) !important;
}
html[data-theme="dark"] .qd-shot-jump:hover {
  background: var(--zs-brand-ink-deep) !important;
  color: #0a1512 !important;
}
html[data-theme="dark"] .qd-shot-jump:focus-visible {
  outline-color: var(--zs-brand-ink-deep) !important;
}

/* --- 41.4 #108 快照缩放工具条：深色 --- */
html[data-theme="dark"] .qd-shot-zoombar {
  background: var(--zs-sunken) !important;
  border-bottom-color: var(--zs-line) !important;
}
html[data-theme="dark"] .qd-shot-zgroup {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong) !important;
}
html[data-theme="dark"] .qd-shot-zbtn { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .qd-shot-zbtn:hover { background: rgba(63, 217, 174, .18) !important; }
html[data-theme="dark"] .qd-shot-zbtn:active { background: rgba(63, 217, 174, .3) !important; }
html[data-theme="dark"] .qd-shot-zval { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .qd-shot-ztext { color: var(--zs-text-2) !important; }
html[data-theme="dark"] .qd-shot-ztext:hover {
  background: rgba(63, 217, 174, .16) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-shot-ztext.is-on {
  background: var(--zs-brand) !important;
  color: var(--zs-text-inverse) !important;
}
html[data-theme="dark"] .qd-shot-zhint { color: var(--zs-text-3) !important; }
html[data-theme="dark"] .qd-shot-zdl {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-shot-zdl:hover {
  background: var(--zs-brand) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-text-inverse) !important;
}
html[data-theme="dark"] .qd-shot-zbtn:focus-visible,
html[data-theme="dark"] .qd-shot-ztext:focus-visible,
html[data-theme="dark"] .qd-shot-zdl:focus-visible {
  outline-color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .qd-shot-body.is-zoomed img {
  box-shadow: 0 8px 26px rgba(0, 0, 0, .5) !important;
}


/* === 42. #115 各平台搜索量口径问号 === */
.zs-panel-head h3 .zs-help {
  margin-left: 7px;
  vertical-align: 2px;
}
.zs-panel-head h3 .zs-help:hover,
.zs-panel-head h3 .zs-help:focus-visible {
  background: var(--zs-brand-100);
  color: var(--zs-brand-ink-deep);
  outline: none;
}

/* === 43. #116/#117 声誉/保真度增强模块 === */
.effect-extra { margin: 4px 0 22px; display: grid; gap: 18px; }
.ee-grid { display: grid; grid-template-columns: 1fr 1.35fr; gap: 18px; }
.ee-card { padding: 22px 24px; }
.ee-head {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: 14px; flex-wrap: wrap; margin-bottom: 18px;
  padding-bottom: 12px; border-bottom: 1px solid var(--zs-line);
}
.ee-kicker {
  display: block; font-size: 10px; font-weight: 600; letter-spacing: .14em;
  color: var(--zs-kicker); margin-bottom: 5px;
}
.ee-head h4 { margin: 0; font-size: 15.5px; font-weight: 600; color: var(--zs-text-1); }
.ee-head > small { font-size: 11px; color: var(--zs-text-3); font-weight: 300; }
.ee-note { margin: 14px 0 0; font-size: 11.5px; line-height: 1.6; color: var(--zs-muted); }

/* 通用进度条 */
.ee-bar {
  display: block; height: 7px; border-radius: var(--zs-r-pill);
  background: var(--zs-chip); overflow: hidden;
}
.ee-bar > i { display: block; height: 100%; border-radius: var(--zs-r-pill); }

/* 口碑指数 */
.ee-score-body { display: flex; align-items: center; gap: 26px; }
.ee-gauge {
  --ee-deg: 259deg;
  width: 116px; height: 116px; flex: 0 0 116px; border-radius: 50%;
  background: conic-gradient(var(--zs-brand) 0deg, var(--zs-brand-ink) var(--ee-deg), var(--zs-chip) var(--ee-deg));
  display: grid; place-items: center;
}
.ee-gauge-in {
  width: 86px; height: 86px; border-radius: 50%;
  background: var(--zs-card); display: grid; place-items: center; text-align: center;
}
.ee-gauge-in strong { display: block; font-size: 30px; font-weight: 700; color: var(--zs-text-1); line-height: 1; }
.ee-gauge-in span { font-size: 11px; color: var(--zs-brand-ink-deep); font-weight: 600; margin-top: 3px; }
.ee-score-meta { flex: 1; display: grid; gap: 12px; min-width: 0; }
.ee-score-row { display: grid; grid-template-columns: auto auto 1fr; align-items: baseline; gap: 10px; }
.ee-score-row small { font-size: 12px; color: var(--zs-muted); }
.ee-score-row b { font-size: 17px; font-weight: 500; color: var(--zs-text-1); font-variant-numeric: tabular-nums; }
.ee-score-row b.is-pos { color: var(--zs-brand-ink-deep); }
.ee-score-row em { font-style: normal; font-size: 10.5px; color: var(--zs-text-3); text-align: right; }

/* 平台情感对比（堆叠） */
.ee-ps-list { display: grid; gap: 13px; }
/* 首列用 minmax(0,auto)：固定 64px 在窄屏放不下 DeepSeek（需 55px，可用 52px）。
   名称允许收缩并省略，避免硬裁切。 */
.ee-ps-row { display: grid; grid-template-columns: minmax(0, auto) 1fr 88px; align-items: center; gap: 12px; }
.ee-ps-name { font-size: 12.5px; color: var(--zs-text-2); font-weight: 500;
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ee-ps-bar { display: flex; height: 12px; border-radius: var(--zs-r-pill); overflow: hidden; background: var(--zs-chip); }
.ee-ps-bar > i { display: block; height: 100%; }
.ee-ps-bar > i.is-pos { background: #28b894; }
.ee-ps-bar > i.is-neu { background: #c4ccd6; }
.ee-ps-bar > i.is-neg { background: #e0607e; }
.ee-ps-val { display: flex; justify-content: flex-end; gap: 8px; font-size: 12px; font-variant-numeric: tabular-nums; }
.ee-ps-val b.is-pos { color: var(--zs-brand-ink-deep); font-weight: 600; }
.ee-ps-val b.is-neg { color: #c2486a; font-weight: 600; }
.ee-ps-legend { display: flex; gap: 16px; margin-top: 16px; }
.ee-ps-legend span { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; color: var(--zs-muted); }
.ee-ps-legend i { width: 9px; height: 9px; border-radius: 3px; }

/* 平台保真度对比 */
.ee-pc-list { display: grid; gap: 13px; }
.ee-pc-row { display: grid; grid-template-columns: 64px 1fr 44px; align-items: center; gap: 12px; }
.ee-pc-name { font-size: 12.5px; color: var(--zs-text-2); font-weight: 500; }
.ee-pc-val { font-size: 12.5px; font-weight: 600; color: var(--zs-text-1); text-align: right; font-variant-numeric: tabular-nums; }

/* 词条查看全部按钮 */
.ee-viewall-btn {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 6px 13px; border: 1px solid var(--zs-line-brand);
  border-radius: var(--zs-r-pill); background: var(--zs-brand-50);
  color: var(--zs-brand-ink-deep); font-size: 11.5px; font-weight: 600;
  font-family: inherit; cursor: pointer; white-space: nowrap;
  transition: background .2s var(--zs-ease), border-color .2s var(--zs-ease), transform .12s var(--zs-ease);
}
.ee-viewall-btn svg { width: 11px; height: 11px; }
.ee-viewall-btn:hover { background: var(--zs-brand-100); border-color: var(--zs-brand); transform: translateY(-1px); }
.ee-viewall-btn:focus-visible { outline: 2px solid var(--zs-brand); outline-offset: 2px; }
.word-section-intro { align-items: center; }

/* 词条全部弹层 */
.ee-wordall { display: grid; gap: 20px; }
.ee-wa-gtitle { display: flex; align-items: center; gap: 8px; margin-bottom: 11px; font-size: 13.5px; font-weight: 600; color: var(--zs-text-1); }
.ee-wa-gtitle i { width: 10px; height: 10px; border-radius: 3px; }
.ee-wa-gtitle b { margin-left: auto; font-size: 11px; font-weight: 500; color: var(--zs-muted); }
.ee-wa-rows { display: grid; gap: 8px; }
.ee-wa-row { display: grid; grid-template-columns: 96px 1fr 40px 52px; align-items: center; gap: 10px; }
.ee-wa-word { font-size: 12.5px; color: var(--zs-text-2); }
.ee-wa-count { font-size: 12px; font-weight: 600; color: var(--zs-text-1); text-align: right; font-variant-numeric: tabular-nums; }
.ee-wa-delta { font-size: 11px; font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; }
.ee-wa-delta.is-pos { color: var(--zs-brand-ink-deep); }
.ee-wa-delta.is-neg { color: #c2486a; }
.ee-wa-delta.is-flat { color: var(--zs-text-3); }

/* 深色微调 */
html[data-theme="dark"] .ee-ps-bar > i.is-neu { background: #3a4a44; }
html[data-theme="dark"] .ee-ps-val b.is-neg,
html[data-theme="dark"] .ee-wa-delta.is-neg { color: var(--zs-pink); }

/* 响应式 */
@media (max-width: 900px) {
  .ee-grid { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .ee-score-body { flex-direction: column; align-items: flex-start; }
  .ee-ps-row { grid-template-columns: 52px 1fr 76px; }
  .ee-wa-row { grid-template-columns: 80px 1fr 34px 46px; }
}

/* === 44. #118 所有信源分析并入信源效果板块 === */
/* 原独立 section 降级为 #sources 内的子区块：去掉 72/46px 的板块级上间距，
   改用与「信源问题详情」同级的子标题节奏，视觉上归属信源效果板块。 */
.dashboard-content .sa-subsection,
.sa-subsection {
  margin-top: 30px !important;
}

.sa-subsection > .subsection-title {
  align-items: center !important;
  gap: 14px !important;
  margin: 0 0 18px !important;
  padding-bottom: 13px !important;
  border-bottom: 1px solid var(--zs-line) !important;
}

.sa-subsection > .subsection-title > span {
  color: var(--zs-text-1) !important;
  font-size: 17px !important;
  font-weight: 500 !important;
  letter-spacing: -.01em !important;
}

.sa-subsection > .subsection-title > small {
  color: var(--zs-text-2) !important;
  font-size: 12px !important;
  font-weight: 300 !important;
}

/* 子区块内的三张卡沿用 .panel 统一皮肤，仅收紧内边距与列间距，
   避免在信源效果板块内显得比双卡更「重」。 */
.sa-subsection .sa-layout {
  gap: 16px !important;
}

.sa-subsection .sa-donut-card,
.sa-subsection .sa-types-card,
.sa-subsection .sa-rank-card {
  padding: 22px 24px !important;
}

@media (max-width: 760px) {
  .dashboard-content .sa-subsection,
  .sa-subsection { margin-top: 24px !important; }

  .sa-subsection > .subsection-title {
    flex-wrap: wrap !important;
    gap: 6px !important;
  }

  .sa-subsection > .subsection-title > small { flex: 1 0 100%; }

  .sa-subsection .sa-donut-card,
  .sa-subsection .sa-types-card,
  .sa-subsection .sa-rank-card { padding: 18px 16px !important; }
}

/* === 45. #119 浮条落位态 + 文案对比度 === */
/* #119 浮条文案对比度：--nr-ink-3 白底仅 3.72，未达 AA */
.nr-actionbar .nr-action-copy strong,
.ep-actionbar .nr-action-copy strong {
  color: var(--zs-text-1) !important;
}

.nr-actionbar .nr-action-copy small,
.ep-actionbar .nr-action-copy small {
  color: var(--zs-muted) !important;
}

html[data-theme="dark"] .nr-actionbar.zs-actionbar.is-docked,
html[data-theme="dark"] .ep-actionbar.zs-actionbar.is-docked {
  background: var(--zs-card) !important;
  border-color: var(--zs-line-strong) !important;
  box-shadow: var(--zs-sh-1) !important;
}

/* === 46. #119 编辑页深色残留收尾 === */
/* 变更对比空态 + 监控状态盒：浅色下文字提到 AA（--ep-gray 白底仅 3.72） */
.ep-diff-clean small,
.ep-status-label,
#ep-status-desc {
  color: var(--zs-muted) !important;
}

.ep-diff-clean strong {
  color: var(--zs-brand-ink-deep) !important;
}

/* 勾标：白字在 #2eb28e 绿底仅 2.67，改深墨字（与深色态同一口径） */
.ep-diff-clean-mark {
  color: #06231c !important;
}

/* 深色下这两块原本硬编码近白渐变底，浅绿字不可读 */
html[data-theme="dark"] .ep-diff-clean {
  background: var(--zs-chip) !important;
  background-image: none !important;
  border-color: var(--zs-line-strong) !important;
}

html[data-theme="dark"] .ep-diff-clean strong {
  color: var(--zs-brand) !important;
}

html[data-theme="dark"] .ep-diff-clean small {
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .ep-diff-clean-mark {
  background: var(--zs-brand) !important;
  background-image: none !important;
  color: #06231c !important;
}

html[data-theme="dark"] .ep-status-box {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  box-shadow: var(--zs-sh-1) !important;
}

html[data-theme="dark"] .ep-status-label {
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] #ep-status-desc {
  color: var(--zs-text-3) !important;
}

/* === 47. #119 悬浮浮条滚动兜底 === */
/* 悬浮条占据视口底部约 94px。锚点跳转与 scrollIntoView 默认把目标贴到
   视口边缘，会被浮条盖住；用 scroll-padding-bottom 让浏览器自动留出空间。
   落位后浮条回到文档流，不再需要预留，故只在非 docked 时生效。 */
html.zs-bar-floating {
  scroll-padding-bottom: calc(var(--zs-bar-h, 74px) + 32px);
}

/* 键盘聚焦浮条内控件时抬升层级，避免被后续内容盖住 */
.nr-actionbar.zs-actionbar:focus-within,
.ep-actionbar.zs-actionbar:focus-within {
  z-index: 130 !important;
}

/* === 48. #103 细字重体系收尾 + 窄屏平台名兜底 === */

/* style.css 原始 .word-section-intro span 是 font-weight:750，
   皮肤层此前只覆盖了颜色。750 不在 wb 档位（300/400/500）内，统一降到 500。 */
.dashboard-content .word-section-intro > div > span,
.dashboard-content .word-section-intro span,
.word-section-intro > div > span,
.word-section-intro span {
  font-weight: 500 !important;
}

/* 标题与副文案零间距紧贴：.word-section-intro 是 flex，内层 div 默认 block，
   <span>标题</span><small>副文案</small> 都是 inline，会横向挨在一起
   （实测宽屏 span.right=134 === small.left=134）。
   窄屏有 style.css 的 media query 把 small 改 block 才没暴露。
   这里统一让内层成 column，标题在上、副文案在下，与其余子标题一致。 */
.dashboard-content .word-section-intro > div,
.word-section-intro > div {
  display: flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  gap: 4px !important;
  min-width: 0 !important;
}
.dashboard-content .word-section-intro > div > small,
.word-section-intro > div > small {
  display: block !important;
  margin-top: 0 !important;
  color: var(--zs-text-3) !important;
  font-size: 11.5px !important;
  font-weight: 300 !important;
  line-height: 1.5 !important;
}
/* 导语整行改为顶部对齐：内层变两行后，baseline 会把按钮拽到副文案基线上 */
.dashboard-content .word-section-intro,
.word-section-intro {
  align-items: flex-start !important;
  gap: 16px !important;
}
/* 「查看全部」与视图 tabs 与标题首行视觉居中。
   父级 align-items 改成 flex-start 后，交叉轴不再拉伸，
   tabs 会按内容收缩并逐按钮换行（竖排），必须显式锁 flex:none + nowrap。 */
.dashboard-content .word-section-intro > .ee-viewall-btn,
.dashboard-content .word-section-intro > .word-view-tabs,
.word-section-intro > .ee-viewall-btn,
.word-section-intro > .word-view-tabs {
  align-self: center !important;
  flex: 0 0 auto !important;
}
.dashboard-content .word-section-intro > .word-view-tabs,
.word-section-intro > .word-view-tabs {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 5px !important;
}
/* 标题区占据剩余空间，把按钮与 tabs 推到右侧 */
.dashboard-content .word-section-intro > div,
.word-section-intro > div {
  flex: 1 1 auto !important;
}
@media (max-width: 760px) {
  .dashboard-content .word-section-intro,
  .word-section-intro { display: block !important; }
  .dashboard-content .word-section-intro > .ee-viewall-btn,
  .word-section-intro > .ee-viewall-btn { margin-top: 10px !important; }
  .dashboard-content .word-section-intro > .word-view-tabs,
  .word-section-intro > .word-view-tabs { margin-top: 10px !important; }
}

/* 平台情感对比：窄屏进一步压缩首列与数值列，保证 DeepSeek 完整可读 */
@media (max-width: 620px) {
  .ee-ps-row { grid-template-columns: minmax(0, 1fr) 1.4fr auto; gap: 8px; }
  .ee-ps-val { gap: 6px; font-size: 11.5px; }
}

/* === 49. #96 分多次定时：执行时间点编辑器 === */

/* 整块作为「执行频率」的下挂配置区，用浅槽底与主行区分层级。
   注意：不要用 animation 入场 —— 皮肤层全局 animation:none!important
   会把元素永久停在 opacity:0 起始帧（无头验收踩过）。 */
.nr-times {
  margin: 2px 0 10px;
  padding: 13px 14px 12px;
  border: 1px solid var(--zs-line, #ebebeb);
  border-radius: 14px;
  background: var(--zs-sunken, #f7f8f9);
}
.nr-times[hidden] { display: none !important; }

.nr-times-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 10px;
}
.nr-times-count {
  flex: 0 0 auto;
  padding: 3px 10px;
  border: 1px solid var(--zs-line-brand, #ddf0ec);
  border-radius: 999px;
  background: var(--zs-brand-50, #f2fcfa);
  color: var(--zs-brand-ink-deep, #007a60);
  font-size: 11.5px;
  font-weight: 500;
  white-space: nowrap;
}

/* 时间点列表：两列网格，8 个时间点也只占 4 行，不把费用卡挤出首屏 */
.nr-times-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
.nr-time-row {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
  padding: 5px 7px 5px 6px;
  border: 1px solid var(--zs-line, #ebebeb);
  border-radius: 10px;
  background: var(--zs-card, #fff);
}
.nr-time-idx {
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
  background: var(--zs-brand-50, #f2fcfa);
  color: var(--zs-brand-ink-deep, #007a60);
  font-size: 10.5px;
  font-weight: 500;
}

/* type=time 原生控件：去掉浏览器默认外观差异，统一走皮肤令牌。
   ::-webkit-calendar-picker-indicator 在深色下默认是黑图标，必须反相。 */
.nr-time-input {
  flex: 1 1 auto;
  min-width: 0;
  height: 28px;
  padding: 0 6px;
  border: 1px solid transparent;
  border-radius: 8px;
  background: transparent;
  color: var(--zs-text-1, #1a1a1a);
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 400;
  font-variant-numeric: tabular-nums;
  cursor: pointer;
}
.nr-time-input:hover { background: var(--zs-sunken, #f7f8f9); }
.nr-time-input:focus {
  outline: none;
  border-color: var(--zs-brand, #28b894);
  background: var(--zs-card, #fff);
  box-shadow: 0 0 0 3px rgba(40, 184, 148, .14);
}
.nr-time-input::-webkit-calendar-picker-indicator {
  opacity: .5;
  cursor: pointer;
}
.nr-time-input:hover::-webkit-calendar-picker-indicator { opacity: .85; }

.nr-time-del {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid var(--zs-line, #ebebeb);
  border-radius: 7px;
  background: var(--zs-card, #fff);
  color: var(--zs-muted, #666666);
  font-size: 14px;
  line-height: 1;
  font-family: inherit;
  cursor: pointer;
  transition: color .18s var(--zs-ease, ease), border-color .18s var(--zs-ease, ease), background .18s var(--zs-ease, ease);
}
.nr-time-del:hover:not(:disabled) {
  border-color: rgba(213, 63, 63, .4);
  background: rgba(213, 63, 63, .07);
  color: var(--zs-red, #d53f3f);
}
.nr-time-del:disabled { opacity: .35; cursor: not-allowed; }

.nr-times-tools {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: 10px;
}
.nr-times-add,
.nr-times-preset {
  padding: 5px 12px;
  border: 1px solid var(--zs-line, #ebebeb);
  border-radius: 999px;
  background: var(--zs-card, #fff);
  color: var(--zs-text-2, #4a5450);
  font-family: inherit;
  font-size: 11.5px;
  font-weight: 400;
  cursor: pointer;
  transition: color .18s var(--zs-ease, ease), border-color .18s var(--zs-ease, ease), background .18s var(--zs-ease, ease);
}
.nr-times-add {
  border-color: var(--zs-line-brand, #ddf0ec);
  background: var(--zs-brand-50, #f2fcfa);
  color: var(--zs-brand-ink-deep, #007a60);
  font-weight: 500;
}
.nr-times-add:hover:not(:disabled) {
  border-color: var(--zs-brand, #28b894);
  background: rgba(40, 184, 148, .12);
}
.nr-times-add:disabled { opacity: .45; cursor: not-allowed; }
.nr-times-preset:hover {
  border-color: var(--zs-line-brand, #ddf0ec);
  color: var(--zs-brand-ink-deep, #007a60);
}

.nr-times-note {
  margin-top: 9px;
  color: var(--zs-muted, #666666);
  font-size: 11px;
  font-weight: 300;
  line-height: 1.6;
}
/* 相邻时间点间隔过近：软提醒（不拦截提交），用琥珀而非红，避免误判为错误 */
.nr-times-note.is-warn { color: var(--nr-amber-ink, #a8641a); font-weight: 400; }

/* --- 49.1 深色模式 --- */
html[data-theme="dark"] .nr-times {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}
html[data-theme="dark"] .nr-time-row {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
}
html[data-theme="dark"] .nr-time-idx,
html[data-theme="dark"] .nr-times-count {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .nr-time-input {
  background: transparent !important;
  color: var(--zs-text-1) !important;
  /* 原生时间控件在深色下若不声明 color-scheme，弹出的选择面板仍是白底 */
  color-scheme: dark;
}
html[data-theme="dark"] .nr-time-input:hover { background: var(--zs-sunken) !important; }
html[data-theme="dark"] .nr-time-input:focus {
  background: var(--zs-card) !important;
  border-color: var(--zs-brand) !important;
}
html[data-theme="dark"] .nr-time-input::-webkit-calendar-picker-indicator {
  filter: invert(1);
  opacity: .55;
}
html[data-theme="dark"] .nr-time-del,
html[data-theme="dark"] .nr-times-preset {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-muted) !important;
}
html[data-theme="dark"] .nr-time-del:hover:not(:disabled) {
  background: rgba(240, 115, 111, .12) !important;
  border-color: rgba(240, 115, 111, .4) !important;
  color: var(--zs-red) !important;
}
html[data-theme="dark"] .nr-times-add {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line-strong, var(--zs-line)) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .nr-times-add:hover:not(:disabled) {
  background: rgba(40, 184, 148, .18) !important;
  border-color: var(--zs-brand) !important;
}
html[data-theme="dark"] .nr-times-preset:hover {
  color: var(--zs-brand-ink-deep) !important;
  border-color: var(--zs-line-strong, var(--zs-line)) !important;
}
html[data-theme="dark"] .nr-times-note { color: var(--zs-muted) !important; }
html[data-theme="dark"] .nr-times-note.is-warn { color: #e8b45c !important; }

/* --- 49.2 窄屏：单列铺满，工具按钮可换行 --- */
@media (max-width: 700px) {
  .nr-times-list { grid-template-columns: minmax(0, 1fr); }
  .nr-times-head { align-items: flex-start; }
}

/* --- 49.3 项目管理页：多次定时 chip 与时刻表 --- */
.pj-chip.is-multi {
  border-color: var(--zs-line-brand, #ddf0ec);
  background: var(--zs-brand-50, #f2fcfa);
  color: var(--zs-brand-ink-deep, #007a60);
  font-weight: 500;
}
.pj-dtimes {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 5px;
}
.pj-dtimes i {
  padding: 2px 8px;
  border: 1px solid var(--zs-line-brand, #ddf0ec);
  border-radius: 999px;
  background: var(--zs-brand-50, #f2fcfa);
  color: var(--zs-brand-ink-deep, #007a60);
  font-style: normal;
  font-size: 11px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
.pj-drecords {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  padding: 10px 13px;
  border: 1px solid var(--zs-line-brand, #ddf0ec);
  border-radius: 12px;
  background: var(--zs-brand-50, #f2fcfa);
  color: var(--zs-brand-ink-deep, #007a60);
  text-decoration: none;
  transition: border-color .18s var(--zs-ease, ease), background .18s var(--zs-ease, ease);
}
.pj-drecords > span { font-size: 12.5px; font-weight: 500; }
.pj-drecords > em {
  flex: 1 1 auto;
  min-width: 0;
  color: var(--zs-muted, #666666);
  font-style: normal;
  font-size: 11px;
  font-weight: 300;
  text-align: right;
}
.pj-drecords > i { flex: 0 0 auto; font-style: normal; font-size: 13px; }
.pj-drecords:hover {
  border-color: var(--zs-brand, #28b894);
  background: rgba(40, 184, 148, .12);
}
html[data-theme="dark"] .pj-chip.is-multi,
html[data-theme="dark"] .pj-dtimes i {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .pj-drecords {
  background: var(--zs-chip) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-brand-ink-deep) !important;
}
html[data-theme="dark"] .pj-drecords > em { color: var(--zs-muted) !important; }
html[data-theme="dark"] .pj-drecords:hover {
  background: rgba(40, 184, 148, .18) !important;
  border-color: var(--zs-brand) !important;
}
@media (max-width: 620px) {
  .pj-drecords { flex-wrap: wrap; }
  .pj-drecords > em { flex: 1 0 100%; text-align: left; }
}


/* ==========================================================================
 * 50. #121 / #122 控制台统一侧栏 + 个人中心 TAB 化 + 订阅/财务独立页
 * ===================================================================== */

/* --- 50.1 控制台左侧导航（外壳注入，四页同一份菜单） ---
   布局口径（#122 修订）：
   原实现把侧栏 fixed 悬浮在版心左侧「留白区」，并要求视口 >= 1720px
   才显示。实测 1920 下版心左边缘 211px、侧栏右边缘 216px，仍压住
   版心 5px；而 1600/1440 这类主流宽度侧栏被整体隐藏，用户根本看不到
   「控制台」统一菜单，需求落空。

   现改为「为侧栏预留左栏」：给 .dashboard-content 加 padding-left，
   版心在剩余空间内居中，侧栏 fixed 落在预留区里，两者永不重叠。
   预留宽度 --zs-console-w 随视口收敛（216 / 196 / 176），
   < 1180px 才收起侧栏，改由顶栏导航 + 头像菜单承载同一组入口。
   顶栏与页脚同样吃这份 padding，保证三者左右对齐。 */
.page-shell.has-console-nav {
  --zs-console-w: 216px;
  --zs-console-gap: 16px;
}
.page-shell.has-console-nav .dashboard-content {
  flex: 1 1 auto; min-width: 0; width: 100%;
  padding-left: var(--zs-console-w);
  box-sizing: border-box;
}

.zs-console-nav {
  /* fixed：不占布局流，滚动时始终可见；left/top 与预留区严格对齐。
     top 跟随 --shell-offset（外壳实测顶栏高度），吸顶收起时自动上移。 */
  position: fixed;
  left: var(--zs-console-gap, 16px);
  top: calc(var(--shell-offset, 86px) + 8px);
  width: calc(var(--zs-console-w, 216px) - var(--zs-console-gap, 16px) * 2);
  max-height: calc(100vh - var(--shell-offset, 86px) - 28px);
  overflow-y: auto;
  padding: 18px 14px 14px;
  background: var(--zs-card);
  border: 1px solid var(--zs-line-brand);
  border-radius: var(--zs-r-card);
  box-shadow: var(--zs-sh-1);
  z-index: 90;
  /* 侧栏自身滚动条走皮肤语言，不用浏览器默认灰条 */
  scrollbar-width: thin;
  scrollbar-color: var(--zs-brand-100) transparent;
}
.zs-console-nav::-webkit-scrollbar { width: 6px; }
.zs-console-nav::-webkit-scrollbar-track { background: transparent; }
.zs-console-nav::-webkit-scrollbar-thumb {
  background: var(--zs-brand-100); border-radius: 999px;
}
.zs-console-nav::-webkit-scrollbar-thumb:hover { background: var(--zs-brand); }
.zs-console-head { padding: 2px 10px 14px; border-bottom: 1px solid var(--zs-line); margin-bottom: 12px; }
.zs-console-kicker {
  display: block; font-size: 10px; font-weight: 600; letter-spacing: .18em;
  color: var(--zs-kicker); margin-bottom: 4px;
}
.zs-console-head b { font-size: 17px; font-weight: 500; color: var(--zs-text-1); }
.zs-console-list { display: grid; gap: 4px; }
.zs-console-list a {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px;
  border-radius: var(--zs-r-md);
  font-size: 13.5px; font-weight: 400;
  color: var(--zs-text-2);
  text-decoration: none;
  border: 1px solid transparent;
  transition: background .18s var(--zs-ease), color .18s var(--zs-ease), border-color .18s var(--zs-ease);
}
.zs-console-ico { width: 18px; height: 18px; flex: 0 0 18px; display: grid; place-items: center; color: var(--zs-text-3); }
.zs-console-ico svg { width: 17px; height: 17px; }
.zs-console-list a:hover { background: var(--zs-sunken); color: var(--zs-text-1); }
.zs-console-list a:hover .zs-console-ico { color: var(--zs-brand-ink); }
/* 当前项：#122 视觉复核发现 brand-50(#f2fcfa) 与白卡几乎同色，
   在 1600 宽截图里几乎看不出选中。改为「品牌描边 + 更明确的底 + 右侧指示点」。
   #145 删除左侧 inset 深色指示条（用户反馈突兀），选中态由
   底色 + 描边 + 右侧圆点三者共同表达，五项左边界仍严格对齐。 */
.zs-console-list a.is-active {
  background: var(--zs-brand-100);
  border-color: var(--zs-brand);
  /* brand-ink-deep(#007a60) 在 brand-100(#ddf0ec) 上只有 4.49，差 0.01 未过 AA。
     压深一档到 #00705a → 5.12，与全站 KPI 绿字同色，语义一致。 */
  color: #00705a;
  font-weight: 500;
}
.zs-console-list a.is-active .zs-console-ico { color: #00705a; }
.zs-console-dot {
  margin-left: auto; width: 6px; height: 6px; border-radius: 50%;
  background: var(--zs-brand); flex: 0 0 6px;
}
.zs-console-foot {
  margin-top: 14px; padding: 12px 10px 2px;
  border-top: 1px solid var(--zs-line);
  font-size: 11px; color: var(--zs-text-4); letter-spacing: .04em;
}

/* 深色：侧栏走令牌重映射 */
html[data-theme="dark"] .zs-console-nav {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
  box-shadow: var(--zs-sh-1) !important;
}
html[data-theme="dark"] .zs-console-head { border-bottom-color: var(--zs-line) !important; }
html[data-theme="dark"] .zs-console-head b { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .zs-console-list a { color: var(--zs-text-2) !important; }
html[data-theme="dark"] .zs-console-list a:hover { background: var(--zs-sunken) !important; color: var(--zs-text-1) !important; }
html[data-theme="dark"] .zs-console-list a.is-active {
  background: rgba(63, 217, 174, .2) !important;
  border-color: rgba(63, 217, 174, .5) !important;
  color: var(--zs-brand) !important;
  /* #145 左侧深色指示条已删除（浅色版同步） */
}
html[data-theme="dark"] .zs-console-list a.is-active .zs-console-ico { color: var(--zs-brand) !important; }
html[data-theme="dark"] .zs-console-foot { border-top-color: var(--zs-line) !important; color: var(--zs-text-4) !important; }

/* 顶栏 / 页脚与版心同步吃左栏预留，三者左右边界严格对齐。
   顶栏是 fixed 元素，宽度由 layout-fix.css 的 left/right 决定，
   这里只把它的左起点推进一个栏宽，不改其内部 40px 内边距。 */
.page-shell.has-console-nav .floating-shell {
  left: var(--zs-console-w) !important;
  /* layout-fix.css 写了 width:100%!important，只推 left 会向右溢出，
     必须同步把宽度扣掉一个栏宽 */
  width: calc(100% - var(--zs-console-w)) !important;
}
.page-shell.has-console-nav .dashboard-content footer {
  /* footer 与 main 同在已 padding 的 .dashboard-content 内，天然对齐 */
  margin-inline: auto;
}

/* 视口收敛：栏宽逐级压缩，保证版心不被挤到不可用 */
@media (max-width: 1560px) {
  .page-shell.has-console-nav { --zs-console-w: 196px; --zs-console-gap: 12px; }
}
@media (max-width: 1340px) {
  .page-shell.has-console-nav { --zs-console-w: 176px; --zs-console-gap: 10px; }
  .zs-console-nav { padding: 14px 10px 10px; }
  .zs-console-head b { font-size: 15.5px; }
  .zs-console-list a { padding: 9px 10px; font-size: 12.5px; gap: 8px; }
  .zs-console-foot { font-size: 10.5px; }
}
/* 窄屏：收起侧栏与左栏预留，入口由顶栏导航 + 头像菜单承载 */
@media (max-width: 1179px) {
  .zs-console-nav { display: none !important; }
  .page-shell.has-console-nav .dashboard-content { padding-left: 0; }
  .page-shell.has-console-nav .floating-shell { left: 0 !important; width: 100% !important; }
}

/* --- 50.2 个人中心 TAB 化（#121） --- */
.ac-section[hidden] { display: none !important; }
.ac-subnav a { cursor: pointer; }

/* --- 50.3 订阅页余额条 / 财务页组件 --- */
.ac-balance-strip {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 12px 18px; margin-bottom: 20px;
  background: var(--zs-sunken);
  border: 1px dashed var(--zs-line-strong);
  border-radius: var(--zs-r-md);
  font-size: 12.5px; color: var(--zs-text-2);
}
.ac-balance-strip b { color: var(--zs-text-1); font-variant-numeric: tabular-nums; font-weight: 600; margin-left: 4px; }
.ac-balance-link {
  margin-left: auto; font-size: 12px; font-weight: 500;
  color: var(--zs-brand-ink-deep); text-decoration: none;
}
.ac-balance-link:hover { text-decoration: underline; }
.ac-stat { position: relative; }
.ac-stat-btn { position: absolute; top: 18px; right: 18px; }
.ac-bill-count { font-size: 11.5px; font-weight: 400; color: var(--zs-muted); margin-left: 8px; }
html[data-theme="dark"] .ac-balance-strip {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line-strong) !important;
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .ac-balance-strip b { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .ac-balance-link { color: var(--zs-brand) !important; }

/* ==========================================================================
 * 51. #123 浮条平滑落位 + 编辑页元信息深色修复
 * --------------------------------------------------------------------------
 * 51.1 变量通道：皮肤层这些属性都带 !important，JS 的普通内联样式压不过。
 *      改为 JS 只写 --zs-dock-* 变量，这里用 var() 消费，缺省值即原悬浮态，
 *      因此「未起浮」时视觉与 #119 完全一致，零回归。
 *      落位（.is-docked）仍由 §19.6 / §45 的 static 规则掌管，
 *      JS 在 docked 时会清空全部变量，避免残留值造成起浮首帧闪跳。
 * ======================================================================== */
.nr-actionbar.zs-actionbar,
.ep-actionbar.zs-actionbar {
  /* 供 JS 读取的断点基准（贴底间距 / 起止圆角） */
  --zs-dock-gap: 20px;
  --zs-dock-r0: 16;
  --zs-dock-r1: 16;
  bottom: var(--zs-dock-bottom, 20px) !important;
  border-radius: var(--zs-dock-radius, var(--zs-r-card)) !important;
  background: var(--zs-dock-bg, rgba(255, 255, 255, .92)) !important;
  box-shadow: var(--zs-dock-shadow, 0 18px 44px rgba(16, 32, 28, .16)) !important;
  -webkit-backdrop-filter: var(--zs-dock-blur, blur(16px) saturate(1.6));
  backdrop-filter: var(--zs-dock-blur, blur(16px) saturate(1.6));
}

html[data-theme="dark"] .nr-actionbar.zs-actionbar,
html[data-theme="dark"] .ep-actionbar.zs-actionbar {
  background: var(--zs-dock-bg, rgba(15, 33, 27, .92)) !important;
  box-shadow: var(--zs-dock-shadow, 0 18px 44px rgba(0, 0, 0, .6)) !important;
}

/* 窄屏基准同步（原 §19.6 媒体查询在本规则之前，需在此重新声明） */
@media (max-width: 700px) {
  .nr-actionbar.zs-actionbar,
  .ep-actionbar.zs-actionbar {
    --zs-dock-gap: 12px;
    --zs-dock-r0: 12;
    --zs-dock-r1: 12;
    bottom: var(--zs-dock-bottom, 12px) !important;
    border-radius: var(--zs-dock-radius, var(--zs-r-md)) !important;
  }
}

/* --- 51.2 编辑页元信息胶囊：深色下仍是白底（#123） ---
   edit-project.css 里 .ep-meta-item 硬编码 linear-gradient(#fff,#f7fbfa)，
   皮肤层此前只改了 color，底色未覆盖 → 深色下「项目 ID / 负责人 /
   创建时间 / 最近检测 / 监控周期」整条仍是白卡。口径对齐 .ep-status-box。 */
html[data-theme="dark"] .ep-meta-item {
  background: var(--zs-card) !important;
  background-image: none !important;
  border-color: var(--zs-line) !important;
  box-shadow: var(--zs-sh-1) !important;
}

html[data-theme="dark"] .ep-meta-item small {
  color: var(--zs-text-3) !important;
}

html[data-theme="dark"] .ep-meta-item b {
  color: var(--zs-text-1) !important;
}

/* 浅色下 small 用 --ep-gray（白底 3.72，未达 AA），统一到令牌 */
.ep-meta-item small {
  color: var(--zs-muted) !important;
}

/* --- 51.3 核心词迷你开关：深色下激活态不可见（#124） ---
   缺陷根因：§20.11 的 html[data-theme="dark"] .nr-mini-switch{background:
   var(--zs-chip)!important} 特异性高于 new-report.css 的
   .nr-word-panel[data-word=...] .nr-mini-switch.is-on，把绿/蓝/琥珀三种
   激活底色一并压成暗灰 → 深色下「开」和「关」看起来完全一样。
   这里按 data-word 分别恢复激活底色，并加描边与滑块高对比，
   保证开关状态在任何主题下都一眼可辨。 */
html[data-theme="dark"] .nr-mini-switch {
  background: #33463d !important;
  border: 1px solid #4a6154 !important;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .35) !important;
}

html[data-theme="dark"] .nr-mini-switch i {
  background: #9fb3a8 !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .5) !important;
}

/* 激活：品牌绿（声量） */
html[data-theme="dark"] .nr-mini-switch.is-on {
  background: var(--zs-brand) !important;
  border-color: var(--zs-brand) !important;
  box-shadow: 0 0 0 1px rgba(40, 184, 148, .28) !important;
}

/* 激活：声誉蓝 / 保真度琥珀，与浅色语义保持一致 */
html[data-theme="dark"] .nr-word-panel[data-word="reputation"] .nr-mini-switch.is-on {
  background: #4c9fe8 !important;
  border-color: #4c9fe8 !important;
  box-shadow: 0 0 0 1px rgba(76, 159, 232, .3) !important;
}

html[data-theme="dark"] .nr-word-panel[data-word="completeness"] .nr-mini-switch.is-on {
  background: #efa23c !important;
  border-color: #efa23c !important;
  box-shadow: 0 0 0 1px rgba(239, 162, 60, .3) !important;
}

/* 激活态滑块统一亮白，与三种底色对比均 >= 4.5 */
html[data-theme="dark"] .nr-mini-switch.is-on i {
  background: #ffffff !important;
}

/* 浅色态也补一圈描边，避免灰底开关在白卡上边界模糊 */
.nr-mini-switch {
  border: 1px solid #c8cfcc !important;
  box-sizing: border-box !important;
}

.nr-mini-switch.is-on {
  border-color: transparent !important;
}

/* 键盘可达：聚焦时给出清晰焦点环 */
.nr-mini-switch:focus-visible {
  outline: 2px solid var(--zs-brand) !important;
  outline-offset: 2px !important;
}

/* --- 51.4 开关对比度达 WCAG 1.4.11（非文本组件 >= 3:1）（#124） ---
   51.3 只解决了「开/关可辨」，但实测开关底色与所在卡片底色的对比仍不足：
   浅色关态 1.38、激活绿 2.51 / 琥珀 2.89；深色关态 1.66。
   这里把两态底色都压到 >= 3:1，实测值见注释，色相语义保持不变。 */

/* 浅色：关态深灰绿（vs 白 4.31），激活三色加深（5.29 / 4.88 / 4.09） */
.nr-mini-switch {
  background: #6f7d77 !important;
  border-color: #6f7d77 !important;
}

.nr-mini-switch.is-on {
  background: #0b7a60 !important;
  border-color: #0b7a60 !important;
}

.nr-word-panel[data-word="reputation"] .nr-mini-switch.is-on {
  background: #2f6fd0 !important;
  border-color: #2f6fd0 !important;
}

.nr-word-panel[data-word="completeness"] .nr-mini-switch.is-on {
  background: #b06f1c !important;
  border-color: #b06f1c !important;
}

/* 浅色滑块纯白，与上述四种底色对比均 >= 4 */
.nr-mini-switch i {
  background: #ffffff !important;
}

/* 深色：关态提亮到 vs 卡片 4.18；激活沿用 51.3 的高亮三色（5.9~9.4） */
html[data-theme="dark"] .nr-mini-switch {
  background: #6b8577 !important;
  border-color: #6b8577 !important;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .3) !important;
}

html[data-theme="dark"] .nr-mini-switch i {
  background: #0f211b !important;
}

html[data-theme="dark"] .nr-mini-switch.is-on i {
  background: #ffffff !important;
}

/* 停用行文字在深色下也要可读（原 #b3bcb8 硬编码浅色） */
html[data-theme="dark"] .nr-core-item.is-off .nr-core-name,
html[data-theme="dark"] .nr-core-item.is-off .nr-core-meta {
  color: var(--zs-text-4) !important;
}

/* ==========================================================================
 * 52. #125 报告页：效果卡合并 + 词条全新「热度榜」样式
 * --------------------------------------------------------------------------
 * 52.1 口碑指数 / 平台情感对比并入「声誉效果」卡（保真度同构）。
 *      合并后 .effect-extra 不再是独立 panel，去掉自身卡片外观，
 *      只作为父卡内部的分区块，用一条发丝分隔线与上方环形图区隔。
 * ======================================================================== */
.dashboard-content .effect-pie-card.zs-merged-card {
  display: flex !important;
  flex-direction: column !important;
  gap: 0 !important;
}

/* 合并卡内的增强区：不再是独立卡片 */
.dashboard-content .effect-extra.is-merged {
  margin-top: 18px !important;
  padding-top: 18px !important;
  border-top: 1px solid var(--zs-line) !important;
}

.dashboard-content .effect-extra.is-merged .ee-grid {
  gap: 16px !important;
}

/* 子块去掉 panel 的边距/描边/阴影，改为浅底分区 */
.dashboard-content .effect-extra.is-merged .ee-card {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-card) !important;
  box-shadow: none !important;
  padding: 16px 18px !important;
  margin: 0 !important;
}

.dashboard-content .effect-extra.is-merged .ee-card:hover {
  border-color: var(--zs-brand-100) !important;
  box-shadow: none !important;
}

html[data-theme="dark"] .dashboard-content .effect-extra.is-merged {
  border-top-color: var(--zs-line) !important;
}

html[data-theme="dark"] .dashboard-content .effect-extra.is-merged .ee-card {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}

/* --- 52.2 词条「热度榜」全新样式 ---
   旧版是「词名 + 数字」两列平淡列表。新版改为排行胶囊：
     [序号徽章] 词名 ······ [热度微条] [频次]
   每类词有专属色相（正面绿 / 负面红 / 中性灰蓝 / 核心紫 / 已提及蓝 / 未提及琥珀），
   徽章与微条同色，便于一眼分辨情感与覆盖状态。
   保留 .word-list-row / data-word-kind / .word-direct-grid 等筛选钩子，
   initWordViews 的显隐与 is-single-kind 逻辑完全不受影响。 */

/* 分组容器：去掉厚重卡片感，改为通透分区 */
.dashboard-content .word-section-panel .word-direct-group {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
}

.dashboard-content .word-section-panel .word-direct-group:hover {
  box-shadow: none !important;
  border-color: transparent !important;
}

/* 分组标题：色点 + 标题 + 计数胶囊 */
.dashboard-content .word-section-panel .word-direct-title {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 0 2px 10px !important;
  margin-bottom: 10px !important;
  border-bottom: 1px solid var(--zs-line) !important;
  font-size: 12.5px !important;
  font-weight: 600 !important;
  letter-spacing: .02em !important;
}

.dashboard-content .word-section-panel .word-direct-title > span {
  display: inline-flex !important;
  align-items: center !important;
  gap: 7px !important;
}

/* 标题前的色点，颜色由分组类决定 */
.dashboard-content .word-section-panel .word-direct-title > span::before {
  content: '';
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--zs-word-tone, var(--zs-brand));
  box-shadow: 0 0 0 3px var(--zs-word-halo, rgba(40, 184, 148, .16));
  flex: 0 0 auto;
}

/* 标题右侧的计数（原 <i> 空标签复用为计数胶囊）
   注意：style.css 里有一条遗留装饰规则
     .word-section-panel .word-direct-title i { width:5px; height:5px; border-radius:50% }
   它把 <i> 当成 5×5 圆点。这里复用为文字胶囊，必须显式把
   width/height 还原为 auto 并禁止收缩换行，否则「5 词」会被压成两行。 */
.dashboard-content .word-section-panel .word-direct-title > i {
  margin-left: auto !important;
  font-style: normal !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  padding: 2px 9px !important;
  border-radius: 999px !important;
  color: var(--zs-word-ink, var(--zs-brand-ink-deep)) !important;
  background: var(--zs-word-halo, rgba(40, 184, 148, .14)) !important;
  width: auto !important;
  height: auto !important;
  min-width: 0 !important;
  flex: 0 0 auto !important;
  display: inline-flex !important;
  align-items: center !important;
  white-space: nowrap !important;
  line-height: 1.5 !important;
}

/* 分组标题文字本身也不允许被挤断行 */
.dashboard-content .word-section-panel .word-direct-title > span {
  flex: 0 1 auto !important;
  white-space: nowrap !important;
}

/* 六类词的色相令牌
   ------------------------------------------------------------------
   tone = 左边条 / 标题色点（装饰性，保留鲜亮色相便于区分）
   ink  = 频次 / 徽章 / 计数胶囊文字，必须 >= 4.5:1
   bar  = 前三名实心徽章底 + 热度微条实心段。因徽章上是白字，
          bar 同时受「白字 >= 4.5」与「微条 vs 轨道 >= 3」双约束，
          故比 tone 更深一档（保持色相与饱和度，仅降明度）。
   浅色实测（白卡 #fff，轨道 rgba(120,140,132,.18) 合成后 #e7eae9）：
     positive  bar #1c8268 → 白字 4.73 / 微条 3.90
     negative  bar #d93535 → 白字 4.66 / 微条 3.84
     neutral   bar #667685 → 白字 4.67 / 微条 3.86
     core      bar #6d5bf4 → 白字 4.72 / 微条 3.89
     mentioned bar #1a77c9 → 白字 4.64 / 微条 3.83
     missing   bar #a3630d → 白字 4.83 / 微条 3.99
   ink 实测（on 白卡 / on 各自 halo）：
     #0b6b4e 6.51/5.57  #a32626 7.34/6.17  #4d5a66 7.07/6.02
     #5b46c9 6.64/5.63  #1a62ab 6.21/5.35  #8a5a10 5.91/5.16 */
.dashboard-content .word-direct-group.positive-words {
  --zs-word-tone: #1f9d76; --zs-word-ink: #0b6b4e;
  --zs-word-halo: rgba(31, 157, 118, .14); --zs-word-bar: #1c8268;
}
.dashboard-content .word-direct-group.negative-words {
  --zs-word-tone: #d94a4a; --zs-word-ink: #a32626;
  --zs-word-halo: rgba(217, 74, 74, .13); --zs-word-bar: #d93535;
}
.dashboard-content .word-direct-group.neutral-words {
  --zs-word-tone: #7b8794; --zs-word-ink: #4d5a66;
  --zs-word-halo: rgba(123, 135, 148, .15); --zs-word-bar: #667685;
}
.dashboard-content .word-direct-group.all-words {
  --zs-word-tone: #7c5cf0; --zs-word-ink: #5b46c9;
  --zs-word-halo: rgba(124, 92, 240, .13); --zs-word-bar: #6d5bf4;
}
.dashboard-content .word-direct-group.mentioned-words {
  --zs-word-tone: #3b82d6; --zs-word-ink: #1a62ab;
  --zs-word-halo: rgba(59, 130, 214, .13); --zs-word-bar: #1a77c9;
}
.dashboard-content .word-direct-group.not-mentioned-words {
  --zs-word-tone: #d9902a; --zs-word-ink: #8a5a10;
  --zs-word-halo: rgba(217, 144, 42, .15); --zs-word-bar: #a3630d;
}

/* 列表：紧凑纵向排列 */
.dashboard-content .word-section-panel .word-list {
  display: flex !important;
  flex-direction: column !important;
  gap: 6px !important;
}

/* 每一行 = 排行胶囊 */
.dashboard-content .word-section-panel .word-list-row {
  position: relative !important;
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  padding: 9px 12px 9px 10px !important;
  border: 1px solid var(--zs-line) !important;
  border-left: 3px solid var(--zs-word-tone, var(--zs-brand)) !important;
  border-radius: 10px !important;
  background: var(--zs-card) !important;
  background-image: none !important;
  box-shadow: none !important;
  counter-increment: zs-word-rank;
  transition: border-color .18s ease, background .18s ease, transform .18s ease;
}

.dashboard-content .word-section-panel .word-list {
  counter-reset: zs-word-rank;
}

/* 序号徽章 */
.dashboard-content .word-section-panel .word-list-row::before {
  content: counter(zs-word-rank);
  flex: 0 0 auto;
  width: 20px; height: 20px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 6px;
  font-size: 10.5px; font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--zs-word-ink, var(--zs-brand-ink-deep));
  background: var(--zs-word-halo, rgba(40, 184, 148, .14));
}

/* 前三名徽章实心，突出头部词 */
.dashboard-content .word-section-panel .word-list-row:nth-child(-n+3)::before {
  color: #fff;
  background: var(--zs-word-bar, var(--zs-brand));
}

/* 词名 */
.dashboard-content .word-section-panel .word-list-row > span {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* 热度微条：宽度由 --zs-word-pct 驱动（JS 按组内最大值归一写入） */
.dashboard-content .word-section-panel .word-list-row::after {
  content: '';
  flex: 0 0 auto;
  width: 56px; height: 5px;
  border-radius: 999px;
  background:
    linear-gradient(90deg,
      var(--zs-word-bar, var(--zs-brand)) 0 var(--zs-word-pct, 60%),
      var(--zs-word-track, rgba(120, 140, 132, .18)) var(--zs-word-pct, 60%) 100%);
}

/* 频次数字 */
.dashboard-content .word-section-panel .word-list-row > b {
  flex: 0 0 auto !important;
  min-width: 30px !important;
  text-align: right !important;
  font-size: 12.5px !important;
  font-weight: 700 !important;
  font-variant-numeric: tabular-nums !important;
  color: var(--zs-word-ink, var(--zs-brand-ink-deep)) !important;
}

/* 悬停：整行轻微右移 + 同类色浅底，反馈明确但不喧宾夺主 */
.dashboard-content .word-section-panel .word-list-row:hover {
  background: var(--zs-word-halo, var(--zs-brand-50)) !important;
  border-color: var(--zs-word-tone, var(--zs-brand-100)) !important;
  border-left-color: var(--zs-word-tone, var(--zs-brand)) !important;
  transform: translateX(2px);
  box-shadow: none !important;
}

/* 只看某一类时铺满整行，词条胶囊改为两列排布，避免一行一条太稀疏 */
.dashboard-content .word-section-panel .word-direct-grid.is-single-kind .word-list {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 8px !important;
}

@media (max-width: 700px) {
  .dashboard-content .word-section-panel .word-direct-grid.is-single-kind .word-list {
    grid-template-columns: minmax(0, 1fr) !important;
  }
  .dashboard-content .word-section-panel .word-list-row::after { width: 40px; }
}

/* 深色：胶囊底走令牌，微条轨道提亮，文字保持高对比 */
html[data-theme="dark"] .dashboard-content .word-section-panel .word-direct-group {
  background: transparent !important;
  border-color: transparent !important;
}

html[data-theme="dark"] .dashboard-content .word-section-panel .word-direct-title {
  border-bottom-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .dashboard-content .word-section-panel .word-list-row {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
  border-left-color: var(--zs-word-tone, var(--zs-brand)) !important;
  --zs-word-track: rgba(180, 205, 195, .16);
}

html[data-theme="dark"] .dashboard-content .word-section-panel .word-list-row > span {
  color: var(--zs-text-1) !important;
}

/* 深色下把六类文字的 ink 提亮到可读（浅色 ink 在深底上对比不足） */
html[data-theme="dark"] .dashboard-content .word-direct-group.positive-words {
  --zs-word-ink: #6fe3bd; --zs-word-tone: #3fd6a8;
  --zs-word-halo: rgba(63, 214, 168, .16); --zs-word-bar: #3fd6a8;
}
html[data-theme="dark"] .dashboard-content .word-direct-group.negative-words {
  --zs-word-ink: #ff9a9a; --zs-word-tone: #f07070;
  --zs-word-halo: rgba(240, 112, 112, .16); --zs-word-bar: #f07070;
}
html[data-theme="dark"] .dashboard-content .word-direct-group.neutral-words {
  --zs-word-ink: #c3ced8; --zs-word-tone: #9aa8b5;
  --zs-word-halo: rgba(154, 168, 181, .18); --zs-word-bar: #9aa8b5;
}
html[data-theme="dark"] .dashboard-content .word-direct-group.all-words {
  --zs-word-ink: #c0b0ff; --zs-word-tone: #a08cff;
  --zs-word-halo: rgba(160, 140, 255, .18); --zs-word-bar: #a08cff;
}
html[data-theme="dark"] .dashboard-content .word-direct-group.mentioned-words {
  --zs-word-ink: #93c8f5; --zs-word-tone: #6cb2f0;
  --zs-word-halo: rgba(108, 178, 240, .18); --zs-word-bar: #6cb2f0;
}
html[data-theme="dark"] .dashboard-content .word-direct-group.not-mentioned-words {
  --zs-word-ink: #f5c884; --zs-word-tone: #efa23c;
  --zs-word-halo: rgba(239, 162, 60, .18); --zs-word-bar: #efa23c;
}

/* 前三名实心徽章在深色下用深字，保证与亮底对比 */
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list-row:nth-child(-n+3)::before {
  color: #06231c;
}

html[data-theme="dark"] .dashboard-content .word-section-panel .word-list-row:hover {
  background: var(--zs-word-halo, var(--zs-sunken)) !important;
  border-color: var(--zs-word-tone, var(--zs-line-strong)) !important;
}

/* --- 52.3 显式接管旧层的词条文字色 ---
   interactions.css 里有三条同 specificity(0,4,2) 的硬编码规则：
     .dashboard-content .word-section-panel .all-words .word-list-row span / > b
   同为 !important，靠源顺序压制。但皮肤层 52.2 的 `> span` 用的是
   var(--zs-text-1)、`> b` 用 var(--zs-word-ink)，其中「未提及词」的
   #a9701a 在白卡上只有 4.18:1，低于 4.5 阈值。
   这里按类逐一写回达标 ink，并把词名统一为 --zs-text-1（与其余三类一致），
   避免同一榜单里出现两种词名颜色。深色段随后再覆盖一次。 */
.dashboard-content .word-section-panel .positive-words .word-list-row > b { color: #0b6b4e !important; }
.dashboard-content .word-section-panel .negative-words .word-list-row > b { color: #a32626 !important; }
.dashboard-content .word-section-panel .neutral-words .word-list-row > b { color: #4d5a66 !important; }
.dashboard-content .word-section-panel .all-words .word-list-row > b { color: #5b46c9 !important; }
.dashboard-content .word-section-panel .mentioned-words .word-list-row > b { color: #1a62ab !important; }
.dashboard-content .word-section-panel .not-mentioned-words .word-list-row > b { color: #8a5a10 !important; }

.dashboard-content .word-section-panel .all-words .word-list-row > span,
.dashboard-content .word-section-panel .mentioned-words .word-list-row > span,
.dashboard-content .word-section-panel .not-mentioned-words .word-list-row > span {
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .dashboard-content .word-section-panel .positive-words .word-list-row > b { color: #6fe3bd !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .negative-words .word-list-row > b { color: #ff9a9a !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .neutral-words .word-list-row > b { color: #c3ced8 !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .all-words .word-list-row > b { color: #c0b0ff !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .mentioned-words .word-list-row > b { color: #93c8f5 !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .not-mentioned-words .word-list-row > b { color: #f5c884 !important; }

html[data-theme="dark"] .dashboard-content .word-section-panel .all-words .word-list-row > span,
html[data-theme="dark"] .dashboard-content .word-section-panel .mentioned-words .word-list-row > span,
html[data-theme="dark"] .dashboard-content .word-section-panel .not-mentioned-words .word-list-row > span {
  color: var(--zs-text-1) !important;
}

/* ==========================================================================
 * 53. #127 词条改词云 + 查看全部弹层三列横排并放大
 * --------------------------------------------------------------------------
 * 53.1 页面词云：.word-list 由「纵向排行胶囊」改为 flex-wrap 云状排布。
 *      #132 起字号**统一**（--zs-word-size 恒 15px），不再按频次放大缩小。
 *      频次改由字重与不透明度表达：
 *        --zs-word-size  15px（统一）
 *        --zs-word-wght  400→600（随频次）
 *        --zs-word-alpha .86→1（随频次）
 *        --zs-word-dy    0（统一字号后不再需要基线抖动）
 *      序号徽章 ::before 与热度微条 ::after 在词云里全部撤除，
 *      频次 <b> 降级为 hover 才显形的角标，避免数字破坏云图轮廓。
 *
 * 53.2 弹层三列横排：.ee-wordall.is-cols 用 grid 三列并排。
 *      #132 起列内由词云改为**可排序列表**（.ee-wa-rows.is-list）：
 *      表头（序号 / 词条 / 频次 / 环比）可点击排序，顶部工具条提供
 *      分组筛选、关键词搜索与 CSV 导出。
 *
 * 53.3 弹层放大：.kn-modal.is-wordall 单独接管宽高，
 *      不影响信源 / 商品 / 视频等其余五类详情弹层。
 *
 * 层叠注意：旧层（style.css / interactions.css）与本层 §52 有大量
 *   .dashboard-content .word-section-panel ... !important 规则，
 *   本段一律用同级或更高特异性 + !important + 更后源顺序裁决。
 * ===================================================================== */

/* --- 53.1 页面词云 --------------------------------------------------- */

/* 云容器：换行居中，行间距略大于词间距，形成「云团」而非表格 */
.dashboard-content .word-section-panel .word-list,
.dashboard-content .word-section-panel .word-list.is-cloud,
.dashboard-content .word-section-panel .word-direct-grid.is-single-kind .word-list {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  align-content: center !important;
  justify-content: center !important;
  gap: 6px 10px !important;
  grid-template-columns: none !important;
  counter-reset: none !important;
  padding: 12px 8px 14px !important;
  min-height: 132px !important;
  border: 1px dashed var(--zs-word-halo, var(--zs-line)) !important;
  border-radius: 14px !important;
  background: var(--zs-word-cloud-bg, rgba(127, 127, 127, .028)) !important;
  background-image: none !important;
  overflow: visible !important;
}

/* 词片：无边框无底色，纯文字云。字号是唯一的频次编码 */
.dashboard-content .word-section-panel .word-list-row {
  position: relative !important;
  display: inline-flex !important;
  align-items: baseline !important;
  flex: 0 0 auto !important;
  gap: 0 !important;
  width: auto !important;
  max-width: 100% !important;
  padding: 1px 5px !important;
  margin: 0 !important;
  border: 0 !important;
  border-left: 0 !important;
  border-radius: 8px !important;
  background: transparent !important;
  background-image: none !important;
  box-shadow: none !important;
  counter-increment: none !important;
  font-size: var(--zs-word-size, 14px) !important;
  line-height: 1.28 !important;
  cursor: default;
  /* 确定性纵向微偏移，营造词云的错落基线。transform 不参与布局，
     不会造成重叠或撑高；hover 时保持同一偏移，避免跳动。 */
  transform: translateY(var(--zs-word-dy, 0px)) !important;
  transition: background .18s ease, color .18s ease;
}

/* 撤掉 §52 的序号徽章与热度微条 —— 词云不需要排行语义 */
.dashboard-content .word-section-panel .word-list-row::before,
.dashboard-content .word-section-panel .word-list-row::after {
  content: none !important;
  display: none !important;
  width: 0 !important;
  height: 0 !important;
}

/* 词名：字号 / 字重 / 透明度三档同步，色彩沿用六类语义 ink */
.dashboard-content .word-section-panel .word-list-row > span {
  flex: 0 0 auto !important;
  min-width: 0 !important;
  font-size: inherit !important;
  font-weight: var(--zs-word-wght, 500) !important;
  line-height: inherit !important;
  letter-spacing: -.005em !important;
  white-space: nowrap !important;
  overflow: visible !important;
  text-overflow: clip !important;
  opacity: var(--zs-word-alpha, 1) !important;
}

/* 频次角标：默认隐藏，hover / focus 时浮现在词片右上角。
   保留 <b> 节点与文本，initWordHeat 的回退取数与后端旧结构都还能用。
   特异性注意：§52.3 有六条
     .dashboard-content .word-section-panel .positive-words .word-list-row > b
   （0,4,2）把频次写成各类 ink，会压过这里的（0,3,2）白字规则，
   实测白字被换成 #0b6b4e 后 on bar 只有 1.22–1.58。
   故一律加 .word-list.is-cloud 把特异性提到（0,5,2）稳定接管。 */
.dashboard-content .word-section-panel .word-list.is-cloud .word-list-row > b {
  position: absolute !important;
  left: 50% !important;
  bottom: calc(100% - 2px) !important;
  transform: translateX(-50%) !important;
  min-width: 0 !important;
  padding: 2px 7px !important;
  border-radius: 999px !important;
  font-size: 10.5px !important;
  font-weight: 600 !important;
  line-height: 1.4 !important;
  font-variant-numeric: tabular-nums !important;
  white-space: nowrap !important;
  text-align: center !important;
  color: #fff !important;
  background: var(--zs-word-bar, var(--zs-brand)) !important;
  box-shadow: 0 4px 12px rgba(16, 32, 28, .18) !important;
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  z-index: 6;
  transition: opacity .16s ease, visibility .16s ease;
}

.dashboard-content .word-section-panel .word-list.is-cloud .word-list-row:hover > b,
.dashboard-content .word-section-panel .word-list.is-cloud .word-list-row:focus-visible > b {
  opacity: 1 !important;
  visibility: visible !important;
}

/* 悬停：同类色浅底托住词片，字号不变（避免抖动引起回流） */
.dashboard-content .word-section-panel .word-list-row:hover {
  background: var(--zs-word-halo, var(--zs-brand-50)) !important;
  border: 0 !important;
  transform: translateY(var(--zs-word-dy, 0px)) !important;
  box-shadow: none !important;
}

.dashboard-content .word-section-panel .word-list-row:hover > span {
  opacity: 1 !important;
}

.dashboard-content .word-section-panel .word-list-row:focus-visible {
  outline: 2px solid var(--zs-word-tone, var(--zs-brand)) !important;
  outline-offset: 1px;
}

/* 六类词云的极淡底色，让三块云在视觉上各自成团 */
.dashboard-content .word-direct-group.positive-words { --zs-word-cloud-bg: rgba(31, 157, 118, .045); }
.dashboard-content .word-direct-group.negative-words { --zs-word-cloud-bg: rgba(217, 74, 74, .04); }
.dashboard-content .word-direct-group.neutral-words { --zs-word-cloud-bg: rgba(123, 135, 148, .05); }
.dashboard-content .word-direct-group.all-words { --zs-word-cloud-bg: rgba(124, 92, 240, .042); }
.dashboard-content .word-direct-group.mentioned-words { --zs-word-cloud-bg: rgba(59, 130, 214, .042); }
.dashboard-content .word-direct-group.not-mentioned-words { --zs-word-cloud-bg: rgba(217, 144, 42, .05); }

/* 词云里词名统一用各类 ink（§52.3 已把 > b 写死达标色，这里接住 > span）。
   注意 interactions.css / style.css 有同特异性硬编码，必须显式 !important。
   #127：词云带 alpha（最低 .86）且底是各类极淡 halo，比纯白卡更苛刻。
   实测 alpha=.86 时 mentioned #1a62ab 只有 4.47、missing #8a5a10 只有 4.23，
   故这两类再压深一档：#195fa6 → 4.60、#7f530f → 4.65。
   其余四类保持原 ink（4.63 / 5.35 / 4.79 / 4.68）。 */
.dashboard-content .word-section-panel .positive-words .word-list-row > span { color: #0b6b4e !important; }
.dashboard-content .word-section-panel .negative-words .word-list-row > span { color: #a32626 !important; }
.dashboard-content .word-section-panel .neutral-words .word-list-row > span { color: #4d5a66 !important; }
.dashboard-content .word-section-panel .all-words .word-list-row > span { color: #5b46c9 !important; }
.dashboard-content .word-section-panel .mentioned-words .word-list-row > span { color: #195fa6 !important; }
.dashboard-content .word-section-panel .not-mentioned-words .word-list-row > span { color: #7f530f !important; }

/* 分组标题下方补一行口径说明（由 JS 写入 data 属性，CSS 只负责呈现） */
.dashboard-content .word-section-panel .word-direct-title {
  padding-bottom: 9px !important;
  margin-bottom: 9px !important;
}

/* #127 去掉重复标题：面板导语已有「声誉词条 / 保真度词条」，
   内部 .word-subsection-title 又原样重复一遍（含右侧「情感倾向」小字），
   在词云版式下形成两行同名标题，视觉冗余。整块隐藏，
   分组语义由三张词卡自己的「正面词 / 负面词 / 中性词」承担。 */
.dashboard-content .word-section-panel .word-subsection-title {
  display: none !important;
}

/* 词云口径提示：字号即频次，放在导语副文案里由 JS 补充，
   这里给三张词卡的标题行留出稳定高度，避免计数胶囊跳动。 */
.dashboard-content .word-section-panel .word-direct-grid {
  align-items: start !important;
  gap: 14px !important;
}

/* 单类筛选时云容器更高，词云铺满整行不显稀疏 */
.dashboard-content .word-section-panel .word-direct-grid.is-single-kind .word-list {
  min-height: 190px !important;
  gap: 8px 14px !important;
  padding: 18px 16px 20px !important;
}

/* --- 53.2 弹层：三类词条横排 + 列内词云 ------------------------------ */

.kn-modal .ee-wordall.is-cols {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  align-items: start !important;
  gap: 16px !important;
}

.kn-modal .ee-wa-group {
  display: flex !important;
  flex-direction: column !important;
  min-width: 0 !important;
  padding: 14px 13px 12px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 16px !important;
  background: var(--zs-sunken) !important;
  background-image: none !important;
}

.kn-modal .ee-wa-gtitle {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  margin-bottom: 12px !important;
  padding-bottom: 10px !important;
  border-bottom: 1px solid var(--zs-line) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
  white-space: nowrap !important;
}

.kn-modal .ee-wa-gtitle i {
  width: 9px !important;
  height: 9px !important;
  border-radius: 50% !important;
  flex: 0 0 auto !important;
}

.kn-modal .ee-wa-gtitle b {
  margin-left: auto !important;
  padding: 2px 8px !important;
  border-radius: 999px !important;
  background: var(--zs-chip) !important;
  font-size: 10.5px !important;
  font-weight: 500 !important;
  color: var(--zs-muted) !important;
}

/* --- #132 列内改「列表」：表头 + 序号 / 词条 / 频次 / 环比 ---------
   页面内仍是词云（统一字号），弹层改为可排序表格，信息密度与可读性都更高。
   行内用一条按频次归一的极淡背景条（--zs-wa-pct）保留热度视觉编码。 */
.kn-modal .ee-wa-rows.is-list {
  display: flex !important;
  flex-direction: column !important;
  flex-wrap: nowrap !important;
  gap: 0 !important;
  grid-template-columns: none !important;
  flex: 1 1 auto !important;
  min-height: 240px !important;
  max-height: 430px !important;
  overflow-y: auto !important;
  padding: 2px 0 4px !important;
  /* 滚动条用皮肤自身语言，不留浏览器默认灰条 */
  scrollbar-width: thin;
  scrollbar-color: var(--zs-line-strong) transparent;
}

.kn-modal .ee-wa-rows.is-list::-webkit-scrollbar { width: 8px; }
.kn-modal .ee-wa-rows.is-list::-webkit-scrollbar-track { background: transparent; }

.kn-modal .ee-wa-rows.is-list::-webkit-scrollbar-thumb {
  background: var(--zs-line-strong);
  border-radius: 999px;
}

.kn-modal .ee-wa-rows.is-list::-webkit-scrollbar-thumb:hover { background: var(--zs-brand); }

/* 表头：四列与数据行严格同栅格，点击排序 */
.kn-modal .ee-wa-head {
  display: grid !important;
  grid-template-columns: 26px minmax(0, 1fr) 52px 56px !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 0 6px 7px !important;
  margin-bottom: 3px !important;
  border-bottom: 1px solid var(--zs-line) !important;
}

.kn-modal .ee-wa-th {
  display: inline-flex !important;
  align-items: center !important;
  gap: 3px !important;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
  font-family: var(--zs-font) !important;
  font-size: 10.5px !important;
  font-weight: 500 !important;
  line-height: 1.4 !important;
  color: var(--zs-muted) !important;
  white-space: nowrap !important;
  cursor: pointer;
  transition: color .16s ease;
}

.kn-modal .ee-wa-th.is-idx { cursor: default; }
.kn-modal .ee-wa-th.is-count,
.kn-modal .ee-wa-th.is-delta { justify-content: flex-end !important; }
.kn-modal button.ee-wa-th:hover { color: var(--zs-brand-ink-deep) !important; }
.kn-modal .ee-wa-th.is-active { color: var(--zs-brand-ink-deep) !important; font-weight: 600 !important; }

.kn-modal .ee-wa-sort {
  font-style: normal !important;
  font-size: 9px !important;
  opacity: .5;
}

.kn-modal .ee-wa-sort.is-on { opacity: 1; }

/* 数据行：与表头同栅格 */
.kn-modal .ee-wa-row {
  position: relative !important;
  display: grid !important;
  grid-template-columns: 26px minmax(0, 1fr) 52px 56px !important;
  align-items: center !important;
  gap: 8px !important;
  flex: 0 0 auto !important;
  width: 100% !important;
  max-width: 100% !important;
  padding: 6px !important;
  border: 0 !important;
  border-radius: 8px !important;
  background: transparent !important;
  font-size: 12.5px !important;
  line-height: 1.35 !important;
  cursor: default;
  transform: none !important;
  transition: background .16s ease;
}

/* 热度底条：按频次归一，极淡，不干扰文字对比 */
.kn-modal .ee-wa-row::before {
  content: '' !important;
  position: absolute !important;
  left: 0;
  top: 3px;
  bottom: 3px;
  width: var(--zs-wa-pct, 0%) !important;
  max-width: 100%;
  border-radius: 8px !important;
  background: var(--zs-wa-tone, var(--zs-brand)) !important;
  opacity: .085;
  pointer-events: none;
  z-index: 0;
}

.kn-modal .ee-wa-row > * { position: relative; z-index: 1; }

.kn-modal .ee-wa-idx {
  font-size: 10.5px !important;
  font-weight: 400 !important;
  color: var(--zs-text-3) !important;
  text-align: center !important;
  font-variant-numeric: tabular-nums !important;
}

.kn-modal .ee-wa-word {
  font-size: 12.5px !important;
  font-weight: 400 !important;
  line-height: 1.35 !important;
  min-width: 0 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  color: var(--zs-text-1) !important;
  opacity: 1 !important;
}

/* 频次 + 环比：列表形态下常驻显示（不再是 hover 角标） */
.kn-modal .ee-wa-meta {
  display: contents !important;
  position: static !important;
  transform: none !important;
  padding: 0 !important;
  background: none !important;
  box-shadow: none !important;
  opacity: 1 !important;
  visibility: visible !important;
}

.kn-modal .ee-wa-row:hover {
  background: var(--zs-chip) !important;
}

.kn-modal .ee-wa-count {
  font-size: 12px !important;
  font-weight: 600 !important;
  color: var(--zs-text-1) !important;
  text-align: right !important;
  font-variant-numeric: tabular-nums !important;
}

.kn-modal .ee-wa-delta {
  font-style: normal !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  text-align: right !important;
  font-variant-numeric: tabular-nums !important;
}

/* 列表里环比在浅/深卡底上，用两套语义色分别保证 >= 4.5 */
.kn-modal .ee-wa-delta.is-pos { color: #00705a !important; }
.kn-modal .ee-wa-delta.is-neg { color: #b03a5b !important; }
.kn-modal .ee-wa-delta.is-flat { color: var(--zs-muted) !important; }

html[data-theme="dark"] .kn-modal .ee-wa-delta.is-pos { color: #6fe3bd !important; }
html[data-theme="dark"] .kn-modal .ee-wa-delta.is-neg { color: #ff9a9a !important; }
html[data-theme="dark"] .kn-modal .ee-wa-delta.is-flat { color: #c3ced8 !important; }

.kn-modal .ee-wa-empty {
  padding: 26px 8px !important;
  font-size: 12px !important;
  color: var(--zs-muted) !important;
  text-align: center !important;
}

/* --- #132 弹层工具条：分组筛选 + 搜索 + 导出 ------------------------- */
.kn-modal .ee-wa-tools {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex-wrap: wrap !important;
  gap: 10px !important;
  margin-bottom: 10px !important;
}

.kn-modal .ee-wa-segs {
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  padding: 3px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 999px !important;
  background: var(--zs-sunken) !important;
}

.kn-modal .ee-wa-seg {
  height: 27px;
  padding: 0 13px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  font-family: var(--zs-font);
  font-size: 11.5px;
  font-weight: 400;
  line-height: 1;
  color: var(--zs-text-2);
  white-space: nowrap;
  cursor: pointer;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}

.kn-modal .ee-wa-seg:hover { color: var(--zs-brand-ink-deep); }

.kn-modal .ee-wa-seg.is-on {
  border-color: var(--zs-brand);
  background: var(--zs-card);
  color: var(--zs-brand-ink-deep);
  font-weight: 500;
}

.kn-modal .ee-wa-tool-right {
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  min-width: 0 !important;
}

.kn-modal .ee-wa-kw {
  width: 190px;
  height: 30px;
  padding: 0 12px;
  border: 1px solid var(--zs-line);
  border-radius: 999px;
  background: var(--zs-card);
  font-family: var(--zs-font);
  font-size: 12px;
  color: var(--zs-text-1);
  outline: none;
  transition: border-color .18s ease;
}

.kn-modal .ee-wa-kw::placeholder { color: var(--zs-text-3); }
.kn-modal .ee-wa-kw:focus { border-color: var(--zs-brand); }

.kn-modal .ee-wa-export {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 30px;
  padding: 0 14px;
  border: 1px solid var(--zs-brand);
  border-radius: 999px;
  background: var(--zs-brand-50);
  font-family: var(--zs-font);
  font-size: 11.5px;
  font-weight: 500;
  line-height: 1;
  color: var(--zs-brand-ink-deep);
  white-space: nowrap;
  cursor: pointer;
  transition: background .18s ease, transform .18s ease;
}

.kn-modal .ee-wa-export:hover { background: var(--zs-brand-100); transform: translateY(-1px); }
.kn-modal .ee-wa-export:active { transform: translateY(0); }

/* 下载图标：纯 CSS 画「托盘 + 下箭头」 */
.kn-modal .ee-wa-ico-dl {
  position: relative;
  display: inline-block;
  width: 11px;
  height: 11px;
  flex: 0 0 11px;
  border-bottom: 1.5px solid currentColor;
  border-left: 1.5px solid currentColor;
  border-right: 1.5px solid currentColor;
  border-radius: 0 0 2px 2px;
}

.kn-modal .ee-wa-ico-dl::before {
  content: '';
  position: absolute;
  left: 50%;
  top: -4px;
  width: 1.5px;
  height: 7px;
  background: currentColor;
  transform: translateX(-50%);
}

.kn-modal .ee-wa-ico-dl::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 1px;
  width: 5px;
  height: 5px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: translateX(-50%) rotate(45deg);
}

.kn-modal .ee-wa-export-tip {
  font-size: 11px;
  color: var(--zs-brand-ink-deep);
  white-space: nowrap;
  opacity: 0;
  transition: opacity .2s ease;
}

.kn-modal .ee-wa-export-tip.is-on { opacity: 1; }

.kn-modal .ee-wa-summary {
  display: flex !important;
  align-items: center !important;
  gap: 6px !important;
  margin-bottom: 12px !important;
  padding: 8px 12px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 10px !important;
  background: var(--zs-sunken) !important;
  font-size: 11.5px !important;
  font-weight: 300 !important;
  color: var(--zs-muted) !important;
}

.kn-modal .ee-wa-summary b {
  font-weight: 600 !important;
  color: var(--zs-text-1) !important;
  font-variant-numeric: tabular-nums !important;
}

.kn-modal .ee-wa-summary-note {
  margin-left: auto !important;
  font-size: 10.5px !important;
  color: var(--zs-text-3) !important;
}

/* 单组筛选时列表铺满整行 */
.kn-modal .ee-wordall.is-cols.is-single {
  grid-template-columns: minmax(0, 1fr) !important;
}

.kn-modal .ee-wordall.is-cols.is-single .ee-wa-rows.is-list {
  max-height: 520px !important;
}

/* 列脚统计：最高频次与合计，给词云一个量化锚点 */
.kn-modal .ee-wa-foot {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 10px !important;
  margin-top: 10px !important;
  padding-top: 9px !important;
  border-top: 1px solid var(--zs-line) !important;
  font-size: 11px !important;
  font-weight: 300 !important;
  color: var(--zs-muted) !important;
}

.kn-modal .ee-wa-foot b {
  font-weight: 600 !important;
  color: var(--zs-text-1) !important;
  font-variant-numeric: tabular-nums !important;
}

/* --- 53.3 词条弹层放大 ----------------------------------------------- */

/* 普通详情弹层保持 760px；词条弹层要装三列词云，放大到 1320px。
   高度上限同步抬到 90vh，让 24 词的列尽量一屏看完。 */
.kn-modal.is-wordall {
  padding: 24px 22px !important;
  align-items: center !important;
}

.kn-modal.is-wordall .kn-modal-card {
  width: min(1320px, 100%) !important;
  max-height: min(90vh, 980px) !important;
  border-radius: 22px !important;
}

.kn-modal.is-wordall .kn-modal-head {
  padding: 20px 24px 17px !important;
  border-radius: 22px 22px 0 0 !important;
}

.kn-modal.is-wordall .kn-modal-head h3 { font-size: 19px !important; }
.kn-modal.is-wordall .kn-modal-head p { font-size: 12px !important; }
.kn-modal.is-wordall .kn-modal-body { padding: 20px 24px 24px !important; }
.kn-modal.is-wordall .kn-modal-foot { padding: 13px 24px !important; }

/* 中等屏：三列仍横排，但压缩内边距与字号上限 */
@media (max-width: 1180px) {
  .kn-modal.is-wordall .kn-modal-card { width: min(1040px, 100%) !important; }
  .kn-modal .ee-wordall.is-cols { gap: 12px !important; }
  .kn-modal .ee-wa-group { padding: 12px 10px 10px !important; }
  .kn-modal .ee-wa-rows.is-list { min-height: 210px !important; max-height: 400px !important; }
  .kn-modal .ee-wa-head,
  .kn-modal .ee-wa-row {
    grid-template-columns: 22px minmax(0, 1fr) 44px 50px !important;
    gap: 6px !important;
  }
  .kn-modal .ee-wa-kw { width: 150px; }
}

/* 窄屏：三列挤不下时降为单列纵向，避免词被压断 */
@media (max-width: 860px) {
  .kn-modal.is-wordall { padding: 16px 12px !important; }
  .kn-modal.is-wordall .kn-modal-card {
    width: 100% !important;
    max-height: 90vh !important;
    border-radius: 18px !important;
  }
  .kn-modal.is-wordall .kn-modal-head { padding: 16px 16px 13px !important; border-radius: 18px 18px 0 0 !important; }
  .kn-modal.is-wordall .kn-modal-head h3 { font-size: 16px !important; }
  .kn-modal.is-wordall .kn-modal-body { padding: 16px !important; }
  .kn-modal.is-wordall .kn-modal-foot { padding: 11px 16px !important; }
  .kn-modal .ee-wordall.is-cols {
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 14px !important;
  }
  .kn-modal .ee-wa-rows.is-list { min-height: 0 !important; max-height: 320px !important; }
  /* 工具条在窄屏堆叠：分段一行、搜索与导出一行，均不溢出 */
  .kn-modal .ee-wa-tools { align-items: stretch !important; }
  .kn-modal .ee-wa-segs { align-self: flex-start !important; max-width: 100% !important; overflow-x: auto !important; }
  .kn-modal .ee-wa-tool-right { width: 100% !important; }
  .kn-modal .ee-wa-kw { flex: 1 1 auto !important; width: auto !important; min-width: 0 !important; }
  .kn-modal .ee-wa-summary { flex-wrap: wrap !important; }
  .kn-modal .ee-wa-summary-note { margin-left: 0 !important; width: 100% !important; }
}

/* 页面词云在窄屏收敛字号上限与间距，避免长词撑破容器。
   行间距必须大于错落基线的最大跨度（±4px = 8px），否则相邻两行的
   词片盒会因 translateY 相交 —— #125 回归在 782 档实测到 2.4x2.0px
   的盒相交（文字本身未压字，但 hover 底色会互相盖住），故 9→11px。 */
/* 特异性陷阱：§53.1 的基础规则里有一条
     .dashboard-content .word-section-panel .word-list.is-cloud  (0,4,2)
   媒体查询不增加特异性，只写 .word-list (0,3,2) 会被它压住 ——
   实测 782 档 gap 仍是 6px 10px，行距 6px < 抖动跨度 8px 导致词片盒相交。
   故窄屏规则必须同样带 .is-cloud 并列出 single-kind 变体。 */
@media (max-width: 900px) {
  .dashboard-content .word-section-panel .word-list,
  .dashboard-content .word-section-panel .word-list.is-cloud,
  .dashboard-content .word-section-panel .word-direct-grid.is-single-kind .word-list {
    gap: 9px 8px !important;
    padding: 11px 7px 12px !important;
    min-height: 118px !important;
  }
  /* #132 统一字号：窄屏只做一档整体缩小（15→14），不再按词乘系数，
     否则同一云图里又会出现大小不一。 */
  .dashboard-content .word-section-panel .word-list-row {
    font-size: 14px !important;
  }
}

@media (max-width: 700px) {
  .dashboard-content .word-section-panel .word-list,
  .dashboard-content .word-section-panel .word-list.is-cloud,
  .dashboard-content .word-section-panel .word-direct-grid.is-single-kind .word-list {
    justify-content: flex-start !important;
    gap: 9px 8px !important;
    min-height: 0 !important;
  }
  .dashboard-content .word-section-panel .word-direct-grid.is-single-kind .word-list {
    min-height: 0 !important;
    padding: 13px 10px 14px !important;
  }
  .dashboard-content .word-section-panel .word-list-row {
    font-size: 13.5px !important;
  }
}

/* --- 53.4 深色 -------------------------------------------------------- */

html[data-theme="dark"] .dashboard-content .word-section-panel .word-list,
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-cloud {
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .dashboard-content .word-direct-group.positive-words { --zs-word-cloud-bg: rgba(63, 214, 168, .06); }
html[data-theme="dark"] .dashboard-content .word-direct-group.negative-words { --zs-word-cloud-bg: rgba(240, 112, 112, .055); }
html[data-theme="dark"] .dashboard-content .word-direct-group.neutral-words { --zs-word-cloud-bg: rgba(154, 168, 181, .06); }
html[data-theme="dark"] .dashboard-content .word-direct-group.all-words { --zs-word-cloud-bg: rgba(160, 140, 255, .06); }
html[data-theme="dark"] .dashboard-content .word-direct-group.mentioned-words { --zs-word-cloud-bg: rgba(108, 178, 240, .055); }
html[data-theme="dark"] .dashboard-content .word-direct-group.not-mentioned-words { --zs-word-cloud-bg: rgba(239, 162, 60, .06); }

html[data-theme="dark"] .dashboard-content .word-section-panel .word-list,
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-cloud {
  background: var(--zs-word-cloud-bg, rgba(255, 255, 255, .022)) !important;
}

/* 深色词片必须同样通透。§52 的深色段
     html[data-theme="dark"] .dashboard-content .word-section-panel .word-list-row
   带属性选择器，特异性 (0,4,2) 高于 §53.1 的 (0,3,2)，会把 background
   压回 var(--zs-card)=#0f211b 实心卡、并补回 1px 描边与左侧色条 ——
   浅色是纯文字云、深色却是一堆小卡片，两主题形态不一致。
   这里同级 + 更后源顺序接管，恢复「无边框无底色」。 */
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list-row {
  background: transparent !important;
  background-image: none !important;
  border: 0 !important;
  border-left: 0 !important;
  box-shadow: none !important;
}

/* 深色词名用提亮 ink（与 §52.3 深色段一致），角标底走亮色配深字 */
html[data-theme="dark"] .dashboard-content .word-section-panel .positive-words .word-list-row > span { color: #6fe3bd !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .negative-words .word-list-row > span { color: #ff9a9a !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .neutral-words .word-list-row > span { color: #c3ced8 !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .all-words .word-list-row > span { color: #c0b0ff !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .mentioned-words .word-list-row > span { color: #93c8f5 !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .not-mentioned-words .word-list-row > span { color: #f5c884 !important; }

/* 深色角标：bar 在深色下是亮色（#3fd6a8 等），必须配深字。
   实测 深字 #06231c on 六类亮 bar = 5.74–9.01，全部过 AA。
   选择器加 .word-list.is-cloud 提高特异性，压过 §53.1 的白字规则。 */
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-cloud .word-list-row > b {
  color: #06231c !important;
  box-shadow: 0 4px 14px rgba(0, 0, 0, .4) !important;
}

html[data-theme="dark"] .dashboard-content .word-section-panel .word-list-row:hover {
  background: var(--zs-word-halo, var(--zs-chip)) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-group {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-gtitle,
html[data-theme="dark"] .kn-modal .ee-wa-foot { border-color: var(--zs-line) !important; }

html[data-theme="dark"] .kn-modal .ee-wa-gtitle b {
  background: var(--zs-chip) !important;
  color: var(--zs-muted) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-row:hover { background: var(--zs-chip) !important; }

/* 浅色弹层里的中性词 tone 是 #b8c0cc（白底仅 1.9），必须压深到达标 */
.kn-modal .ee-wa-group[data-wa-group="neutral"] { --zs-wa-tone: #4d5a66 !important; }
.kn-modal .ee-wa-group[data-wa-group="negative"] { --zs-wa-tone: #a32626 !important; }
.kn-modal .ee-wa-group[data-wa-group="positive"] { --zs-wa-tone: #0b6a4d !important; }
.kn-modal .ee-wa-group[data-wa-group="core"] { --zs-wa-tone: #5b46c9 !important; }
.kn-modal .ee-wa-group[data-wa-group="mentioned"] { --zs-wa-tone: #195ea4 !important; }
.kn-modal .ee-wa-group[data-wa-group="missing"] { --zs-wa-tone: #7f530f !important; }

/* 深色段必须在浅色 tone 覆盖之后，否则被压回浅色值 */
html[data-theme="dark"] .kn-modal .ee-wa-group[data-wa-group="positive"] { --zs-wa-tone: #6fe3bd !important; }
html[data-theme="dark"] .kn-modal .ee-wa-group[data-wa-group="negative"] { --zs-wa-tone: #ff9a9a !important; }
html[data-theme="dark"] .kn-modal .ee-wa-group[data-wa-group="neutral"] { --zs-wa-tone: #c3ced8 !important; }
html[data-theme="dark"] .kn-modal .ee-wa-group[data-wa-group="core"] { --zs-wa-tone: #c0b0ff !important; }
html[data-theme="dark"] .kn-modal .ee-wa-group[data-wa-group="mentioned"] { --zs-wa-tone: #93c8f5 !important; }
html[data-theme="dark"] .kn-modal .ee-wa-group[data-wa-group="missing"] { --zs-wa-tone: #f5c884 !important; }

/* #132 弹层已改列表：.ee-wa-meta 用 display:contents 让频次与环比成为
   独立栅格单元，本身不再是可见盒子。这里必须把深色段原先的
   「深底 #1f2a26 + 阴影」一并清掉，否则深色下每行右侧会出现两块深色小胶囊。 */
html[data-theme="dark"] .kn-modal .ee-wa-meta {
  display: contents !important;
  background: none !important;
  box-shadow: none !important;
}

/* 深色下列表文字与底条 */
html[data-theme="dark"] .kn-modal .ee-wa-word { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .kn-modal .ee-wa-count { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .kn-modal .ee-wa-idx { color: var(--zs-text-3) !important; }
html[data-theme="dark"] .kn-modal .ee-wa-head { border-bottom-color: var(--zs-line) !important; }
html[data-theme="dark"] .kn-modal .ee-wa-th { color: var(--zs-muted) !important; }
html[data-theme="dark"] .kn-modal .ee-wa-th.is-active,
html[data-theme="dark"] .kn-modal button.ee-wa-th:hover { color: var(--zs-brand-ink-deep) !important; }
html[data-theme="dark"] .kn-modal .ee-wa-row::before { opacity: .14; }

/* 深色工具条 */
html[data-theme="dark"] .kn-modal .ee-wa-segs {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-seg { color: var(--zs-text-2) !important; }

html[data-theme="dark"] .kn-modal .ee-wa-seg.is-on {
  background: var(--zs-card) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-kw {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-kw:focus { border-color: var(--zs-brand) !important; }

html[data-theme="dark"] .kn-modal .ee-wa-export {
  background: var(--zs-brand-50) !important;
  border-color: var(--zs-brand) !important;
  color: var(--zs-brand-ink-deep) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-summary {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-muted) !important;
}

html[data-theme="dark"] .kn-modal .ee-wa-summary b { color: var(--zs-text-1) !important; }

html[data-theme="dark"] .kn-modal .ee-wa-rows.is-list {
  scrollbar-color: var(--zs-line-strong) transparent;
}

html[data-theme="dark"] .kn-modal .ee-wa-rows.is-list::-webkit-scrollbar-thumb {
  background: var(--zs-line-strong);
}

html[data-theme="dark"] .kn-modal .ee-wa-rows.is-list::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand);
}

/* 打印：页面词云的 hover 角标不显；弹层列表的频次/环比是正文列，必须保留。
   （#132 前 .ee-wa-meta 是 hover 角标才需要隐藏，改列表后不能再隐藏。） */
@media print {
  .dashboard-content .word-section-panel .word-list-row > b { display: none !important; }
  .dashboard-content .word-section-panel .word-list { border: 0 !important; background: #fff !important; }
  .kn-modal .ee-wa-tools,
  .kn-modal .ee-wa-summary-note { display: none !important; }
  .kn-modal .ee-wa-rows.is-list { max-height: none !important; overflow: visible !important; }
  .kn-modal .ee-wa-row::before { display: none !important; }
}

/* --- 53.5 弹层底栏深色补漏（#127 视觉取证发现） ----------------------
 * interactions.css 的 .kn-modal-foot 硬编码 background:#fbfdfc，
 * 而 §20.2 的深色白卡清单只覆盖了 .kn-modal-card / .kn-modal-head，
 * 底栏从未被接管 —— 深色下词条弹层底部出现一条刺眼白带。
 * 这里补齐底栏与其分隔线、脚注文字，并让主按钮沿用皮肤主按钮语言。
 * 同时覆盖普通详情弹层（不只 is-wordall），彻底消除该类漏网。 */
html[data-theme="dark"] .kn-modal-foot {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border-top-color: var(--zs-line) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .kn-modal-note {
  color: var(--zs-text-2) !important;
  -webkit-text-fill-color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .kn-modal-foot .kn-modal-ok {
  background: var(--zs-brand) !important;
  border-color: var(--zs-brand) !important;
  color: #06231c !important;
  font-weight: 500 !important;
}

html[data-theme="dark"] .kn-modal-foot .kn-modal-ok:hover {
  background: var(--zs-brand-450) !important;
  box-shadow: 0 5px 16px rgba(63, 217, 174, .28) !important;
}

/* 弹层正文里的通用块（kn-fact / kn-block）底栏同族，一并核对 */
html[data-theme="dark"] .kn-modal-body {
  background: var(--zs-card) !important;
  color: var(--zs-text-1) !important;
}

/* 浅色底栏也统一到皮肤语言（原 #fbfdfc 与卡面纯白有微差，形成脏边） */
.kn-modal-foot {
  background: var(--zs-sunken) !important;
  border-top-color: var(--zs-line) !important;
  color: var(--zs-muted) !important;
}

.kn-modal-foot .kn-modal-ok {
  background: var(--zs-dark) !important;
  border-color: var(--zs-dark) !important;
  color: #fff !important;
  font-weight: 500 !important;
}

.kn-modal-foot .kn-modal-ok:hover {
  background: #000 !important;
  box-shadow: 0 5px 16px rgba(26, 26, 26, .22) !important;
}

/* 深色主按钮规则必须排在浅色之后才能生效（同特异性靠源顺序） */
html[data-theme="dark"] .kn-modal-foot .kn-modal-ok {
  background: var(--zs-brand) !important;
  border-color: var(--zs-brand) !important;
  color: #06231c !important;
}

/* ==========================================================================
   54. #135 环形图右侧概览 / 情感条 hover 详情 / 维度雷达图
   --------------------------------------------------------------------------
   三件事共用一套「浅底分区 + 发丝描边」语言，与 §52 合并卡内的子块一致。
   层叠裁决：旧层 .effect-legend 系列带 !important，本段凡需覆盖一律
   同级或更高特异性 + !important + 更后源顺序。
   ========================================================================== */

/* --- 54.1 环形图右侧：图例 + 派生指标 ---------------------------------
   原「环形图 + 3 条横向图例」在 1438px 内容区里只占了上半截，
   下方空掉约 90px。这里把第二列包成 .effect-legend-wrap（纵向两段）：
   上段仍是等分图例，下段补 5 条可直接支撑决策的事实。

   【稳健性】§34.3 的横向图例规则挂在
   `.effect-pie-grid:has(> .effect-pie-card:nth-child(1):last-child)` 上，
   一旦卡片脱离该祖先（截图隔离、后端换壳、组件复用）就整组失配，
   图例退回竖排三行、右侧重新空掉（本轮截图实测复现）。
   这里把横向布局改挂在 wrap 自身，与祖先结构解耦，
   并带 !important + 更后源顺序确保压过 §34.3。 */
.dashboard-content .effect-pie-content > .effect-legend-wrap,
.effect-pie-content > .effect-legend-wrap {
  display: flex !important;
  flex-direction: column !important;
  gap: 12px !important;
  min-width: 0 !important;
  width: 100% !important;
}
/* 图例：横向等分卡片，项数 = 列数 */
.dashboard-content .effect-legend-wrap > .effect-legend,
.effect-legend-wrap > .effect-legend {
  display: grid !important;
  grid-auto-flow: column !important;
  grid-auto-columns: minmax(0, 1fr) !important;
  gap: 12px !important;
  width: 100% !important;
}
.dashboard-content .effect-legend-wrap > .effect-legend > span,
.effect-legend-wrap > .effect-legend > span {
  display: flex !important;
  flex-direction: row !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 8px !important;
  min-width: 0 !important;
  padding: 12px 15px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 12px !important;
  background: var(--zs-sunken) !important;
  font-size: 12.5px !important;
  color: var(--zs-text-2) !important;
}
.dashboard-content .effect-legend-wrap > .effect-legend > span > .dot,
.effect-legend-wrap > .effect-legend > span > .dot {
  flex: 0 0 auto !important;
  margin-right: 0 !important;
}
.dashboard-content .effect-legend-wrap > .effect-legend > span > b,
.effect-legend-wrap > .effect-legend > span > b {
  margin-left: auto !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  color: var(--zs-text-1) !important;
  font-variant-numeric: tabular-nums !important;
}

/* 派生指标条：项数 = 列数，等分剩余宽度。
   底色用 chip（比子块的 sunken 再深一档），形成「卡中卡」的层次而不靠阴影。 */
.dashboard-content .ee-donut-facts,
.ee-donut-facts {
  display: grid !important;
  grid-auto-flow: column !important;
  grid-auto-columns: minmax(0, 1fr) !important;
  gap: 10px !important;
  width: 100% !important;
}
.dashboard-content .ee-df-item,
.ee-df-item {
  display: flex !important;
  flex-direction: column !important;
  gap: 5px !important;
  min-width: 0 !important;
  padding: 11px 13px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 12px !important;
  background: var(--zs-chip) !important;
}
.dashboard-content .ee-df-item > small,
.ee-df-item > small {
  display: block !important;
  font-size: 10.5px !important;
  font-weight: 500 !important;
  letter-spacing: .02em !important;
  color: var(--zs-muted) !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}
.dashboard-content .ee-df-item > b,
.ee-df-item > b {
  display: block !important;
  font-size: 19px !important;
  font-weight: 500 !important;
  line-height: 1.15 !important;
  color: var(--zs-text-1) !important;
  font-variant-numeric: tabular-nums !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}
.dashboard-content .ee-df-item > b > em,
.ee-df-item > b > em {
  font-style: normal !important;
  font-size: 11px !important;
  font-weight: 400 !important;
  margin-left: 3px !important;
  color: var(--zs-muted) !important;
}
/* 词名类指标（最高频词 / 最弱维度）不是数字，降到 14px 才放得下 4 字 */
.dashboard-content .ee-df-item > b.is-text,
.ee-df-item > b.is-text {
  font-size: 14px !important;
  font-weight: 600 !important;
  letter-spacing: .01em !important;
}
.dashboard-content .ee-df-item > span,
.ee-df-item > span {
  display: block !important;
  font-size: 10.5px !important;
  font-weight: 300 !important;
  line-height: 1.45 !important;
  color: var(--zs-text-3) !important;
}
.dashboard-content .ee-df-item.is-pos > b,
.ee-df-item.is-pos > b { color: var(--zs-brand-ink-deep) !important; }
.dashboard-content .ee-df-item.is-warn > b,
.ee-df-item.is-warn > b { color: #b07d1e !important; }

/* --- 54.2 情感条 / 保真度条：可 hover 的段 ---------------------------- */
.ee-ps-bar > i {
  cursor: default;
  transition: filter .16s var(--zs-ease), box-shadow .16s var(--zs-ease);
}
.ee-ps-bar > i:hover,
.ee-ps-bar > i:focus-visible {
  filter: brightness(1.08) saturate(1.1);
  box-shadow: inset 0 0 0 1.5px rgba(255, 255, 255, .85);
}
.ee-ps-bar > i:focus-visible { outline: 2px solid var(--zs-brand); outline-offset: 2px; }
.ee-pc-bar { cursor: default; transition: box-shadow .16s var(--zs-ease); }
.ee-pc-bar:hover,
.ee-pc-bar:focus-visible { box-shadow: 0 0 0 2px var(--zs-brand-100); }
.ee-pc-bar:focus-visible { outline: 2px solid var(--zs-brand); outline-offset: 3px; }

/* --- 54.3 单例 hover 浮层 ---------------------------------------------
   挂 body（脱离卡片 overflow 裁切），z-index 900 与既有 .kn-tip 同档，
   高于 .kn-modal(400)。不用 animation：皮肤层全局 animation:none!important
   会让 fill-mode:both 的起始帧永久生效；直接落最终态。 */
.ee-ps-tip {
  position: fixed;
  z-index: 900;
  min-width: 216px;
  max-width: min(300px, calc(100vw - 20px));
  padding: 11px 13px 10px;
  border: 1px solid var(--zs-line-strong);
  border-radius: 12px;
  background: var(--zs-card);
  box-shadow: var(--zs-sh-3);
  pointer-events: none;
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--zs-text-2);
}
.ee-ps-tip[hidden] { display: none; }
/* 箭头：默认在下方指向被 hover 的段；翻到下方时箭头朝上 */
.ee-ps-tip::after {
  content: '';
  position: absolute;
  left: 50%;
  bottom: -5px;
  width: 9px;
  height: 9px;
  margin-left: -4.5px;
  background: var(--zs-card);
  border-right: 1px solid var(--zs-line-strong);
  border-bottom: 1px solid var(--zs-line-strong);
  transform: rotate(45deg);
}
.ee-ps-tip.is-below::after {
  bottom: auto;
  top: -5px;
  border: 0;
  border-left: 1px solid var(--zs-line-strong);
  border-top: 1px solid var(--zs-line-strong);
}
.ee-pst-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  padding-bottom: 8px;
  margin-bottom: 8px;
  border-bottom: 1px solid var(--zs-line);
}
.ee-pst-head b { font-size: 13px; font-weight: 600; color: var(--zs-text-1); }
.ee-pst-head span { font-size: 10.5px; color: var(--zs-muted); font-variant-numeric: tabular-nums; }
.ee-pst-rows { display: grid; gap: 5px; }
.ee-pst-row {
  display: grid;
  grid-template-columns: 8px minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 7px;
  padding: 2px 4px;
  margin: 0 -4px;
  border-radius: 6px;
}
.ee-pst-row.is-on { background: var(--zs-brand-50); }
.ee-pst-row > i { width: 8px; height: 8px; border-radius: 3px; }
.ee-pst-row > i.is-pos { background: #28b894; }
.ee-pst-row > i.is-neu { background: #c4ccd6; }
.ee-pst-row > i.is-neg { background: #e0607e; }
.ee-pst-row > span { font-size: 11.5px; color: var(--zs-text-2); }
.ee-pst-row > b {
  font-size: 12px; font-weight: 600; color: var(--zs-text-1);
  font-variant-numeric: tabular-nums; min-width: 34px; text-align: right;
}
.ee-pst-row > em {
  font-style: normal; font-size: 10.5px; color: var(--zs-muted);
  font-variant-numeric: tabular-nums; min-width: 44px; text-align: right;
}
.ee-pst-row > em.is-pos { color: var(--zs-brand-ink-deep); font-weight: 600; }
.ee-pst-row > em.is-neg { color: #c2486a; font-weight: 600; }
.ee-pst-foot {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 12px;
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--zs-line);
}
.ee-pst-foot > span { font-size: 10.5px; color: var(--zs-muted); }
.ee-pst-foot b { font-weight: 600; color: var(--zs-text-1); margin-left: 3px; }
.ee-pst-foot b.is-pos { color: var(--zs-brand-ink-deep); }
.ee-pst-foot b.is-neg { color: #c2486a; }
.ee-pst-note { display: block; line-height: 1.55; color: var(--zs-text-2); }

/* --- 54.4 信息维度覆盖：雷达图 + 维度清单 -----------------------------
   8 行独立横条看不出「形状」，改双层雷达：品牌实心面 + 行业虚线参照面，
   凹陷处即补齐重点。纯 SVG，viewBox 320×300 随容器等比缩放。
   左图右表：图为形状判断，表为精确读数与差值，两者 hover 双向联动。 */
/* 保真度侧两列比例反转：雷达图比「5 行平台条」需要更多横向空间。
 * 沿用声誉侧的 1fr:1.35fr 会把雷达压到 288px（1600 档实测），
 * 轴标签随之缩到 8px 不可读。这里给雷达卡 1.5fr。 */
.dashboard-content .effect-extra[data-effect-extra="completeness"] .ee-grid {
  grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
}
.ee-dim-body {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
  gap: 18px;
  align-items: center;
}
/* 【层叠】layout-fix.css 有 `.dashboard-content main * { max-width:100% }`，
 * 特异性 (0,1,1) 会压过单类选择器 (0,1,0)，导致窄屏的 max-width 上限失效
 * （实测 560 档雷达被撑到 434px）。这里统一带 .dashboard-content 前缀提权。 */
.dashboard-content .ee-radar-wrap,
.ee-radar-wrap {
  min-width: 0; display: flex; flex-direction: column; gap: 8px;
  max-width: 420px;
}
.dashboard-content .ee-radar,
.ee-radar { display: block; width: 100%; height: auto; overflow: visible; }

/* 网格与轴：极淡，只做参照不抢主体 */
.ee-radar-ring { fill: none; stroke: var(--zs-line); stroke-width: 1; }
.ee-radar-ring:last-of-type { stroke: var(--zs-line-strong); }
.ee-radar-axis { stroke: var(--zs-line); stroke-width: 1; }
/* 轴标签必须读得清：用 muted（白底 5.74）而非 text-3（2.52）。
 * 【字号口径】SVG 按 viewBox 等比缩放，viewBox 内的 12px 在 380px 画布
 * 缩到 337px 时实际只有 10.6px。故 viewBox 内用 12px（而非 10.5px），
 * 保证最窄并排档仍 >= 10px 实际渲染字号。 */
.ee-radar-label {
  font-size: 12px;
  font-weight: 500;
  fill: var(--zs-muted);
  font-family: var(--zs-font);
}
.ee-radar-scale { font-size: 10px; font-weight: 400; fill: var(--zs-text-4); font-family: var(--zs-font); }

/* 行业参照面：虚线描边 + 极淡填充，永远压在品牌面之下 */
.ee-radar-base {
  fill: rgba(100, 116, 139, .07);
  stroke: #94a3b8;
  stroke-width: 1.2;
  stroke-dasharray: 4 3;
  stroke-linejoin: round;
}
/* 品牌面：实心半透明 + 实线轮廓 */
.ee-radar-area {
  fill: rgba(0, 194, 154, .18);
  stroke: none;
  stroke-linejoin: round;
}
.ee-radar-line {
  fill: none;
  stroke: var(--zs-brand-ink);
  stroke-width: 1.8;
  stroke-linejoin: round;
  stroke-linecap: round;
}
/* 顶点：透明热区 r=12 保证鼠标/触摸好命中，可见点 r=3.6 */
.ee-radar-hit { fill: transparent; stroke: none; }
.ee-radar-pt {
  fill: var(--zs-card);
  stroke: var(--zs-brand-ink);
  stroke-width: 1.8;
  transition: r .16s var(--zs-ease), fill .16s var(--zs-ease);
}
.ee-radar-dot { cursor: default; outline: none; }
.ee-radar-dot.is-on .ee-radar-pt,
.ee-radar-dot:focus-visible .ee-radar-pt { fill: var(--zs-brand-ink); r: 5.2; }
.ee-radar-dot:focus-visible .ee-radar-hit {
  fill: var(--zs-brand-a12);
  stroke: var(--zs-brand);
  stroke-width: 1.5;
}

.ee-radar-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; justify-content: center; }
.ee-radar-legend span {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 10.5px; color: var(--zs-muted); font-variant-numeric: tabular-nums;
}
.ee-radar-legend i { width: 14px; height: 0; border-top-width: 2px; border-top-style: solid; }
.ee-radar-legend i.is-brand { border-top-color: var(--zs-brand-ink); }
.ee-radar-legend i.is-base { border-top-color: #94a3b8; border-top-style: dashed; }

/* 维度清单：按钮化，hover/focus 与雷达顶点联动 */
.ee-dim-list { display: grid; gap: 6px; min-width: 0; align-content: center; }
.ee-dim-item {
  display: grid;
  grid-template-columns: 8px minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 9px;
  width: 100%;
  padding: 7px 10px;
  border: 1px solid transparent;
  border-radius: 9px;
  background: transparent;
  font-family: inherit;
  text-align: left;
  cursor: default;
  transition: background .16s var(--zs-ease), border-color .16s var(--zs-ease);
}
.ee-dim-item:hover,
.ee-dim-item.is-on { background: var(--zs-chip); border-color: var(--zs-line); }
.ee-dim-item:focus-visible { outline: 2px solid var(--zs-brand); outline-offset: 1px; }
.ee-dim-dot { width: 8px; height: 8px; border-radius: 3px; }
.ee-dim-item.is-good .ee-dim-dot { background: #28b894; }
.ee-dim-item.is-mid .ee-dim-dot { background: #eebf52; }
.ee-dim-item.is-low .ee-dim-dot { background: #e0607e; }
.ee-dim-name {
  font-size: 12px; font-weight: 500; color: var(--zs-text-2);
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ee-dim-val {
  font-size: 12.5px; font-weight: 600; color: var(--zs-text-1);
  font-variant-numeric: tabular-nums; min-width: 38px; text-align: right;
}
.ee-dim-diff {
  font-style: normal; font-size: 10.5px; font-weight: 600;
  font-variant-numeric: tabular-nums; min-width: 44px; text-align: right;
}
.ee-dim-diff.is-up { color: var(--zs-brand-ink-deep); }
.ee-dim-diff.is-down { color: #c2486a; }

/* --- 54.5 深色 -------------------------------------------------------- */
html[data-theme="dark"] .ee-df-item.is-warn > b { color: var(--zs-amber) !important; }
html[data-theme="dark"] .ee-ps-tip {
  background: var(--zs-card);
  border-color: var(--zs-line-strong);
  box-shadow: var(--zs-sh-4);
}
html[data-theme="dark"] .ee-ps-tip::after { background: var(--zs-card); }
html[data-theme="dark"] .ee-pst-row.is-on { background: var(--zs-brand-50); }
html[data-theme="dark"] .ee-pst-row > i.is-neu { background: #3a4a44; }
html[data-theme="dark"] .ee-pst-row > em.is-neg,
html[data-theme="dark"] .ee-pst-foot b.is-neg,
html[data-theme="dark"] .ee-dim-diff.is-down { color: var(--zs-pink); }
html[data-theme="dark"] .ee-radar-base { fill: rgba(148, 163, 184, .10); stroke: #6b7f96; }
html[data-theme="dark"] .ee-radar-area { fill: rgba(63, 217, 174, .20); }
html[data-theme="dark"] .ee-radar-legend i.is-base { border-top-color: #6b7f96; }
html[data-theme="dark"] .ee-dim-item.is-mid .ee-dim-dot { background: var(--zs-amber); }
html[data-theme="dark"] .ee-dim-item.is-low .ee-dim-dot { background: var(--zs-pink); }
html[data-theme="dark"] .ee-ps-bar > i:hover,
html[data-theme="dark"] .ee-ps-bar > i:focus-visible {
  box-shadow: inset 0 0 0 1.5px rgba(233, 246, 240, .7);
}

/* --- 54.6 响应式 ------------------------------------------------------
   【断点口径】无头 --window-size 含滚动条，实际视口比设定小约 18px，
   故断点一律取 920 / 720 / 580 这类「设定值 + 余量」，避免边界档不命中。
   【布局策略】雷达图有最小可读宽度（轴标签 12px × 缩放 >= 10px，
   即画布 >= 317px）。因此只要子块宽度不足，就优先堆叠而不是并排挤压：
     > 1180  ee-grid 两列，雷达卡 1.5fr（约 850px），图/表并排
     920~1180 ee-grid 仍两列但雷达卡只有约 520px → 图表堆叠，雷达居中 340px
     720~920 ee-grid 降单列（§43 的 900 断点），子块重新变宽 → 恢复并排
     < 720   子块再次变窄 → 图表堆叠
   --------------------------------------------------------------------- */
@media (max-width: 1180px) {
  .ee-dim-body { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  .dashboard-content .ee-radar-wrap,
  .ee-radar-wrap { max-width: 340px; margin: 0 auto; width: 100%; }
}
@media (max-width: 920px) {
  /* ee-grid 已在 900 断点降单列，子块宽度回到 700px+，可恢复并排 */
  .ee-dim-body { grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); gap: 18px; }
  .dashboard-content .ee-radar-wrap,
  .ee-radar-wrap { max-width: 420px; margin: 0; }
  .dashboard-content .effect-extra[data-effect-extra="completeness"] .ee-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
@media (max-width: 720px) {
  .ee-dim-body { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  .dashboard-content .ee-radar-wrap,
  .ee-radar-wrap { max-width: 340px; margin: 0 auto; }
  /* 饼图内容降单列：挂在 content 自身的 :has(> wrap) 上，
     不依赖 .effect-pie-grid 祖先，截图隔离后行为与线上一致 */
  .dashboard-content .effect-pie-content:has(> .effect-legend-wrap),
  .effect-pie-content:has(> .effect-legend-wrap) {
    grid-template-columns: minmax(0, 1fr) !important;
    justify-items: center !important;
    gap: 18px !important;
  }
}
@media (max-width: 1000px) {
  /* 图例与概览同步降列：3 项图例在 1000px 以下每项不足 200px，
     「正面词 + 54%」会挤成两行，故降竖排整行 */
  .dashboard-content .effect-legend-wrap > .effect-legend,
  .effect-legend-wrap > .effect-legend {
    grid-auto-flow: row !important;
    grid-auto-columns: auto !important;
    gap: 8px !important;
  }
  .dashboard-content .effect-legend-wrap > .effect-legend > span,
  .effect-legend-wrap > .effect-legend > span { padding: 10px 14px !important; }
  .dashboard-content .ee-donut-facts,
  .ee-donut-facts {
    grid-auto-flow: row !important;
    grid-auto-columns: auto !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 700px) {
  .dashboard-content .ee-df-item,
  .ee-df-item { padding: 10px 11px !important; }
  .dashboard-content .ee-df-item > b,
  .ee-df-item > b { font-size: 17px !important; }
}
@media (max-width: 580px) {
  .dashboard-content .ee-donut-facts,
  .ee-donut-facts { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .dashboard-content .ee-radar-wrap,
  .ee-radar-wrap { max-width: 320px; }
  .ee-ps-tip { min-width: 0; max-width: calc(100vw - 20px); }
}

/* =====================================================================
 * 55. 发票管理页（#129）
 * ------------------------------------------------------------------
 * 复用 account.css 的 .ac-* 骨架（页头 / 概览卡 / 面板 / 表格 / 弹层），
 * 本段只补发票专属组件：筛选分段、账单勾选池、状态徽标、进度时间线。
 * 财务中心的账单表也复用 .iv-pick / .ac-inv-tag，故这些类不带页面前缀。
 *
 * 【层叠】account.css 与皮肤层旧段大量使用 !important，本段一律
 * 同级或更高特异性 + !important + 更后源顺序，避免被压制。
 * ===================================================================== */

/* --- 55.1 概览四卡：财务三卡口径扩到四列 --- */
.dashboard-content .iv-stats {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  gap: 16px !important;
}
.dashboard-content .iv-stats .ac-stat { position: relative; }
/* 首卡带主按钮，给按钮留出底部空间，避免与 sub 文案叠字 */
.dashboard-content .iv-stats .ac-stat:has(.ac-stat-btn) { padding-bottom: 52px !important; }
/* 【层叠】皮肤层旧段有 `.ac-stat-btn{position:absolute;top:18px;right:18px}`
   （财务中心把按钮放右上角）。这里改放左下角，必须显式清掉 top/right ——
   否则 top 与 bottom 同时生效会把按钮从 32px 拉伸到 115px，压住 sub 文案。 */
.dashboard-content .iv-stats .ac-stat-btn {
  position: absolute; top: auto !important; right: auto !important;
  left: 20px; bottom: 16px;
}
.dashboard-content .iv-stats .ac-stat-btn[disabled] {
  opacity: .55; cursor: not-allowed;
}

/* --- 55.2 抬头面板 --- */
.dashboard-content .iv-title-panel .ac-grid-2 { gap: 18px !important; }
.dashboard-content .iv-title-hint {
  font-size: 11.5px !important; font-weight: 300 !important;
  color: var(--zs-text-4) !important; margin-left: 8px;
}
.dashboard-content .iv-title-acts { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dashboard-content .iv-title-note {
  margin: 14px 0 0 !important;
  padding-top: 12px;
  border-top: 1px solid var(--zs-line);
}
/* 抬头值可能很长（地址 / 开户行），允许换行不撑破面板 */
.dashboard-content .iv-title-panel .ac-field-value {
  white-space: normal !important;
  word-break: break-word;
  line-height: 1.6;
}

/* --- 55.3 筛选条：状态分段 + 类型 + 搜索 --- */
.dashboard-content .iv-filter {
  display: flex !important;
  align-items: flex-end;
  flex-wrap: wrap;
  gap: 12px 16px !important;
  padding: 0 0 16px !important;
  margin-bottom: 4px;
  border-bottom: 1px solid var(--zs-line);
}
.dashboard-content .iv-seg {
  display: inline-flex !important;
  flex-wrap: wrap;
  gap: 4px !important;
  padding: 4px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 999px !important;
  background: var(--zs-sunken) !important;
}
.dashboard-content .iv-seg button {
  appearance: none;
  border: 1px solid transparent !important;
  background: transparent !important;
  padding: 7px 14px !important;
  border-radius: 999px !important;
  font-family: inherit;
  font-size: 12.5px !important;
  font-weight: 400 !important;
  color: var(--zs-text-2) !important;
  cursor: pointer;
  transition: background .18s var(--zs-ease), color .18s var(--zs-ease);
}
.dashboard-content .iv-seg button:hover {
  background: var(--zs-card) !important;
  color: var(--zs-text-1) !important;
}
.dashboard-content .iv-seg button.is-on {
  background: var(--zs-card) !important;
  border-color: var(--zs-brand) !important;
  color: #00705a !important;
  font-weight: 500 !important;
  box-shadow: var(--zs-sh-1) !important;
}
.dashboard-content .iv-seg button:focus-visible {
  outline: 2px solid var(--zs-brand); outline-offset: 2px;
}
.dashboard-content .iv-fl { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.dashboard-content .iv-fl > span {
  font-size: 10.5px; font-weight: 500; letter-spacing: .06em;
  color: var(--zs-text-4);
}
.dashboard-content .iv-fl select,
.dashboard-content .iv-fl input {
  appearance: none;
  height: 34px;
  padding: 0 12px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 10px !important;
  background: var(--zs-card) !important;
  color: var(--zs-text-1) !important;
  font-family: inherit;
  font-size: 12.5px !important;
  min-width: 132px;
}
.dashboard-content .iv-fl-search { flex: 1 1 220px; }
.dashboard-content .iv-fl-search input { width: 100%; min-width: 0; }
.dashboard-content .iv-fl select:focus,
.dashboard-content .iv-fl input:focus {
  outline: none;
  border-color: var(--zs-brand) !important;
  box-shadow: 0 0 0 3px var(--zs-brand-50);
}

/* --- 55.4 发票表格 --- */
.dashboard-content .iv-table td.iv-no {
  font-variant-numeric: tabular-nums;
  font-size: 12px !important;
  letter-spacing: .01em;
}
.dashboard-content .iv-dash { color: var(--zs-text-4) !important; font-weight: 300; font-size: 11.5px; }
.dashboard-content .iv-title-cell {
  max-width: 210px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-content .iv-acts { white-space: nowrap; }
.dashboard-content .iv-acts .ac-btn + .ac-btn { margin-left: 6px; }
.dashboard-content .iv-type {
  display: inline-block;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 11.5px;
  font-weight: 400;
  border: 1px solid var(--zs-line);
  background: var(--zs-chip);
  color: var(--zs-text-2);
  white-space: nowrap;
}
.dashboard-content .iv-type.is-special {
  border-color: rgba(76, 132, 241, .35);
  background: rgba(76, 132, 241, .10);
  color: #2f62b8;
}

/* 状态徽标：五态色相区分，均按 AA 定色 */
.dashboard-content .iv-badge {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: 11.5px; font-weight: 500;
  border: 1px solid transparent;
  white-space: nowrap;
}
.dashboard-content .iv-badge::before {
  content: ''; width: 5px; height: 5px; border-radius: 50%;
  background: currentColor; flex: 0 0 5px;
}
.dashboard-content .iv-badge.is-pending  { background: rgba(238,191,82,.16); border-color: rgba(238,191,82,.45); color: #8a6412; }
.dashboard-content .iv-badge.is-issuing  { background: rgba(76,132,241,.12); border-color: rgba(76,132,241,.38); color: #2f62b8; }
.dashboard-content .iv-badge.is-issued   { background: var(--zs-brand-100); border-color: var(--zs-brand); color: #00705a; }
.dashboard-content .iv-badge.is-rejected { background: rgba(224,96,126,.12); border-color: rgba(224,96,126,.38); color: #b03a5b; }
.dashboard-content .iv-badge.is-void     { background: var(--zs-sunken); border-color: var(--zs-line-strong); color: #6e6e6e; }

/* 空态与合计行 */
.dashboard-content .iv-empty {
  display: grid !important;
  place-items: center !important;
  gap: 6px !important;
  padding: 46px 20px !important;
  text-align: center;
}
.dashboard-content .iv-empty[hidden] { display: none !important; }
.dashboard-content .iv-empty-mark {
  font-size: 26px; color: var(--zs-text-4); line-height: 1;
}
.dashboard-content .iv-empty b { font-size: 14px; font-weight: 500; color: var(--zs-text-2); }
.dashboard-content .iv-empty small { font-size: 12px; font-weight: 300; color: var(--zs-text-4); }
.dashboard-content .iv-foot {
  display: flex !important;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 8px 24px !important;
  padding: 14px 2px 0 !important;
  margin-top: 12px;
  border-top: 1px solid var(--zs-line);
  font-size: 12px;
  font-weight: 300;
  color: var(--zs-text-3);
}
.dashboard-content .iv-foot[hidden] { display: none !important; }
.dashboard-content .iv-foot b {
  font-weight: 500; color: var(--zs-text-1);
  font-variant-numeric: tabular-nums; margin-left: 4px;
}

/* --- 55.5 账单勾选池（申请开票弹层，财务中心共用） --- */
.iv-form-sec { margin-bottom: 16px; }
.iv-form-sec:last-of-type { margin-bottom: 8px; }
.iv-form-hd {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 9px;
}
.iv-form-hd b { font-size: 12.5px; font-weight: 500; color: var(--zs-text-1); margin-right: auto; }
.iv-mini-btn {
  appearance: none;
  border: 1px solid var(--zs-line) !important;
  background: var(--zs-card) !important;
  color: var(--zs-text-2) !important;
  border-radius: 999px !important;
  padding: 3px 11px !important;
  font-family: inherit;
  font-size: 11.5px !important;
  cursor: pointer;
  transition: border-color .18s var(--zs-ease), color .18s var(--zs-ease);
}
.iv-mini-btn:hover { border-color: var(--zs-brand) !important; color: var(--zs-brand-ink-deep) !important; }
.iv-pick-list {
  display: grid !important;
  gap: 6px !important;
  max-height: 216px;
  overflow-y: auto;
  padding: 3px;
  scrollbar-width: thin;
  scrollbar-color: var(--zs-brand-100) transparent;
}
.iv-pick-list::-webkit-scrollbar { width: 6px; }
.iv-pick-list::-webkit-scrollbar-thumb { background: var(--zs-brand-100); border-radius: 999px; }
.iv-pick {
  display: grid !important;
  grid-template-columns: 16px minmax(0, 132px) minmax(0, 1fr) 82px 92px !important;
  align-items: center;
  gap: 10px !important;
  padding: 9px 12px !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 10px !important;
  background: var(--zs-card) !important;
  cursor: pointer;
  transition: border-color .16s var(--zs-ease), background .16s var(--zs-ease);
}
.iv-pick:hover { border-color: var(--zs-brand) !important; }
.iv-pick.is-on {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-50) !important;
}
.iv-pick-ck { width: 15px; height: 15px; accent-color: #00a884; cursor: pointer; margin: 0; }
.iv-pick-id {
  font-size: 11.5px; font-variant-numeric: tabular-nums;
  color: var(--zs-text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.iv-pick-item {
  font-size: 12.5px; color: var(--zs-text-1);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.iv-pick-date { font-size: 11.5px; color: var(--zs-text-4); font-variant-numeric: tabular-nums; }
.iv-pick-amt {
  font-size: 12.5px; font-weight: 500; color: var(--zs-text-1);
  text-align: right; font-variant-numeric: tabular-nums;
}
.iv-pick-sum {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px;
  margin-top: 10px; padding: 10px 12px;
  border-radius: 10px;
  background: var(--zs-sunken);
  border: 1px solid var(--zs-line);
  font-size: 12px; font-weight: 300; color: var(--zs-text-2);
}
.iv-pick-sum b { font-weight: 500; color: var(--zs-brand-ink-deep); font-variant-numeric: tabular-nums; }
.iv-pick-sum > span { color: var(--zs-text-4); font-size: 11.5px; }
.iv-special-box {
  margin: 10px 0 0;
  padding: 12px 14px 2px;
  border: 1px dashed var(--zs-line-strong);
  border-radius: 12px;
  background: var(--zs-sunken);
}
.iv-special-box[hidden] { display: none !important; }
.iv-reapply-note,
.iv-reason {
  border-left: 3px solid #e0607e !important;
  padding-left: 10px !important;
  color: #b03a5b !important;
}

/* --- 55.6 详情弹层：金额条 / 关联账单 / 进度时间线 --- */
.iv-detail-top {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px;
  padding: 12px 14px; margin-bottom: 14px;
  border: 1px solid var(--zs-line);
  border-radius: 12px;
  background: var(--zs-sunken);
}
.iv-detail-amt {
  font-size: 21px; font-weight: 500; color: var(--zs-text-1);
  font-variant-numeric: tabular-nums; letter-spacing: -.01em;
}
.iv-detail-split { font-size: 11.5px; font-weight: 300; color: var(--zs-text-3); margin-left: auto; }
.iv-detail-grid { gap: 16px !important; }
.iv-detail-extra { margin-top: 12px; }
.iv-detail-sec { margin-top: 16px; }
.iv-detail-sec > b {
  display: block; font-size: 12.5px; font-weight: 500;
  color: var(--zs-text-1); margin-bottom: 9px;
}
.iv-bill-list {
  display: grid; gap: 5px;
  padding: 10px 12px;
  border: 1px solid var(--zs-line);
  border-radius: 10px;
  background: var(--zs-card);
}
.iv-bill-row {
  display: grid;
  grid-template-columns: minmax(0, 138px) minmax(0, 1fr) 96px;
  align-items: center; gap: 10px;
  font-size: 12px;
}
.iv-bill-id { color: var(--zs-text-3); font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.iv-bill-item { color: var(--zs-text-1); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.iv-bill-amt { text-align: right; font-weight: 500; color: var(--zs-text-1); font-variant-numeric: tabular-nums; }

.iv-timeline { list-style: none; margin: 0; padding: 0 0 0 4px; }
.iv-tl-item {
  position: relative;
  display: grid;
  grid-template-columns: 14px minmax(0, 1fr);
  gap: 10px;
  padding-bottom: 14px;
}
.iv-tl-item:last-child { padding-bottom: 0; }
/* 竖线：除末项外都画，形成连续进度轴 */
.iv-tl-item:not(:last-child)::before {
  content: '';
  position: absolute; left: 6px; top: 13px; bottom: 0;
  width: 1.5px; background: var(--zs-line-strong);
}
.iv-tl-dot {
  width: 11px; height: 11px; margin-top: 3px;
  border-radius: 50%;
  border: 2px solid var(--zs-line-strong);
  background: var(--zs-card);
  box-sizing: border-box;
}
.iv-tl-item.is-last .iv-tl-dot {
  border-color: var(--zs-brand);
  background: var(--zs-brand);
  box-shadow: 0 0 0 3px var(--zs-brand-50);
}
.iv-tl-tx { display: grid; gap: 2px; min-width: 0; }
.iv-tl-tx b { font-size: 12.5px; font-weight: 500; color: var(--zs-text-1); }
.iv-tl-tx small { font-size: 11.5px; font-weight: 300; color: var(--zs-text-3); line-height: 1.6; }
.iv-tl-tx time { font-size: 11px; color: var(--zs-text-4); font-variant-numeric: tabular-nums; }

/* --- 55.7 财务中心账单表的开票状态标签 --- */
.ac-inv-tag {
  display: inline-block;
  padding: 2px 9px;
  border-radius: 999px;
  font-size: 11.5px;
  font-weight: 400;
  border: 1px solid var(--zs-line);
  background: var(--zs-chip);
  color: var(--zs-text-3);
  text-decoration: none !important;
  white-space: nowrap;
}
.ac-inv-tag.is-free { border-color: var(--zs-brand); background: var(--zs-brand-50); color: #00705a; }
.ac-inv-tag.is-done { border-color: var(--zs-brand); background: var(--zs-brand-100); color: #00705a; }
.ac-inv-tag.is-doing { border-color: rgba(76,132,241,.4); background: rgba(76,132,241,.1); color: #2f62b8; }
.ac-inv-tag.is-wait { border-color: rgba(238,191,82,.45); background: rgba(238,191,82,.14); color: #8a6412; }
.ac-inv-tag.is-na { color: var(--zs-text-4); }
a.ac-inv-tag:hover { border-color: var(--zs-brand-ink) !important; color: var(--zs-brand-ink-deep) !important; }

/* --- 55.8 深色分支 --- */
html[data-theme="dark"] .dashboard-content .iv-seg { background: var(--zs-sunken) !important; border-color: var(--zs-line) !important; }
html[data-theme="dark"] .dashboard-content .iv-seg button { color: var(--zs-text-2) !important; }
html[data-theme="dark"] .dashboard-content .iv-seg button:hover { background: var(--zs-chip) !important; color: var(--zs-text-1) !important; }
html[data-theme="dark"] .dashboard-content .iv-seg button.is-on {
  background: rgba(63,217,174,.18) !important;
  border-color: rgba(63,217,174,.5) !important;
  color: var(--zs-brand) !important;
}
html[data-theme="dark"] .dashboard-content .iv-fl select,
html[data-theme="dark"] .dashboard-content .iv-fl input {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
  color: var(--zs-text-1) !important;
}
html[data-theme="dark"] .dashboard-content .iv-type.is-special {
  background: rgba(96,150,240,.16); border-color: rgba(96,150,240,.42); color: #9dc0f7;
}
html[data-theme="dark"] .dashboard-content .iv-badge.is-pending  { background: rgba(238,191,82,.18); border-color: rgba(238,191,82,.45); color: var(--zs-amber); }
html[data-theme="dark"] .dashboard-content .iv-badge.is-issuing  { background: rgba(96,150,240,.16); border-color: rgba(96,150,240,.42); color: #9dc0f7; }
html[data-theme="dark"] .dashboard-content .iv-badge.is-issued   { background: rgba(63,217,174,.18); border-color: rgba(63,217,174,.5); color: var(--zs-brand); }
html[data-theme="dark"] .dashboard-content .iv-badge.is-rejected { background: rgba(224,96,126,.18); border-color: rgba(224,96,126,.45); color: var(--zs-pink); }
html[data-theme="dark"] .dashboard-content .iv-badge.is-void     { background: var(--zs-chip); border-color: var(--zs-line-strong); color: var(--zs-text-3); }
html[data-theme="dark"] .iv-pick { background: var(--zs-card) !important; border-color: var(--zs-line) !important; }
html[data-theme="dark"] .iv-pick.is-on { background: rgba(63,217,174,.12) !important; border-color: rgba(63,217,174,.5) !important; }
html[data-theme="dark"] .iv-pick-item,
html[data-theme="dark"] .iv-pick-amt { color: var(--zs-text-1); }
html[data-theme="dark"] .iv-pick-sum { background: var(--zs-sunken); border-color: var(--zs-line); color: var(--zs-text-2); }
html[data-theme="dark"] .iv-pick-sum b { color: var(--zs-brand); }
html[data-theme="dark"] .iv-mini-btn { background: var(--zs-card) !important; border-color: var(--zs-line) !important; color: var(--zs-text-2) !important; }
html[data-theme="dark"] .iv-special-box { background: var(--zs-sunken); border-color: var(--zs-line-strong); }
html[data-theme="dark"] .iv-detail-top { background: var(--zs-sunken); border-color: var(--zs-line); }
html[data-theme="dark"] .iv-detail-amt { color: var(--zs-text-1); }
html[data-theme="dark"] .iv-bill-list { background: var(--zs-card); border-color: var(--zs-line); }
html[data-theme="dark"] .iv-bill-item,
html[data-theme="dark"] .iv-bill-amt { color: var(--zs-text-1); }
html[data-theme="dark"] .iv-tl-tx b { color: var(--zs-text-1); }
html[data-theme="dark"] .iv-tl-item.is-last .iv-tl-dot { box-shadow: 0 0 0 3px rgba(63,217,174,.16); }
html[data-theme="dark"] .iv-reapply-note,
html[data-theme="dark"] .iv-reason { color: var(--zs-pink) !important; }
html[data-theme="dark"] .ac-inv-tag.is-free,
html[data-theme="dark"] .ac-inv-tag.is-done { background: rgba(63,217,174,.16); border-color: rgba(63,217,174,.5); color: var(--zs-brand); }
html[data-theme="dark"] .ac-inv-tag.is-doing { background: rgba(96,150,240,.16); border-color: rgba(96,150,240,.42); color: #9dc0f7; }
html[data-theme="dark"] .ac-inv-tag.is-wait { background: rgba(238,191,82,.18); border-color: rgba(238,191,82,.45); color: var(--zs-amber); }
html[data-theme="dark"] .dashboard-content .iv-foot b,
html[data-theme="dark"] .dashboard-content .iv-empty b { color: var(--zs-text-1); }

/* --- 55.9 响应式 ---
   【断点口径】无头 --window-size 含滚动条，实际视口比设定小约 18px，
   故断点取 1340 / 1180 / 920 / 720 / 580 这类「设定值 + 余量」。 */
@media (max-width: 1340px) {
  .dashboard-content .iv-stats { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 1180px) {
  .dashboard-content .iv-title-cell { max-width: 150px; }
  .iv-pick { grid-template-columns: 16px minmax(0, 120px) minmax(0, 1fr) 88px !important; }
  .iv-pick-date { display: none; }
}
@media (max-width: 920px) {
  .dashboard-content .iv-filter { align-items: stretch; }
  .dashboard-content .iv-fl-search { flex: 1 1 100%; }
  .iv-detail-split { margin-left: 0; flex: 1 1 100%; }
}
@media (max-width: 720px) {
  .dashboard-content .iv-stats { grid-template-columns: minmax(0, 1fr) !important; }
  .dashboard-content .iv-seg button { padding: 6px 11px !important; font-size: 12px !important; }
  .iv-pick { grid-template-columns: 16px minmax(0, 1fr) 86px !important; gap: 8px !important; }
  .iv-pick-id { grid-column: 2 / 3; }
  .iv-pick-item { grid-column: 2 / 3; }
  .iv-pick-amt { grid-row: 1 / 3; grid-column: 3 / 4; align-self: center; }
  .iv-bill-row { grid-template-columns: minmax(0, 1fr) 88px; }
  .iv-bill-id { grid-column: 1 / 2; }
  .iv-bill-item { grid-column: 1 / 2; }
  .iv-bill-amt { grid-row: 1 / 3; grid-column: 2 / 3; align-self: center; }
}
@media (max-width: 580px) {
  .dashboard-content .iv-title-acts { width: 100%; }
  .dashboard-content .iv-foot { justify-content: flex-start; gap: 6px 16px !important; }
}

/* ==========================================================================
 * 56. #136–#143 本轮视觉迭代
 * --------------------------------------------------------------------------
 * 56.1 环形图图例：百分比配进度条（#137）
 * 56.2 平台保真度对比：竖向柱状图（#138）
 * 56.3 口碑指数：气泡图（#139）
 * 56.4 信源问题详情「平台」列表头居中（#141）
 *
 * 层叠裁决：§54.1 的 .effect-legend > span 系列带 !important，且把点与数字
 * 当作 span 的直接子元素。#137 把它们包进 .ee-lg-top 后，那些规则不再命中，
 * 因此本段必须**重新声明**两行卡片的全部布局，且同级或更高特异性 +
 * !important + 更后源顺序，否则会被 §54.1 的 flex-direction:row 压回单行。
 * ========================================================================== */

/* --- 56.1 图例进度条 --------------------------------------------------- */
.dashboard-content .effect-legend-wrap > .effect-legend > span,
.effect-legend-wrap > .effect-legend > span {
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  justify-content: flex-start !important;
  gap: 9px !important;
  padding: 12px 15px 13px !important;
  position: relative;
  overflow: hidden;
}
/* 卡片左侧一条同色细脊，把「这项是什么颜色」在整卡尺度上再强调一次 */
.dashboard-content .effect-legend-wrap > .effect-legend > span::after,
.effect-legend-wrap > .effect-legend > span::after {
  content: '';
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: var(--ee-lg-c, var(--zs-brand));
  opacity: .5;
}
.ee-lg-top {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  min-width: 0 !important;
  width: 100%;
}
.ee-lg-top > .dot { flex: 0 0 auto !important; margin-right: 0 !important; }
.ee-lg-top > b {
  margin-left: auto !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  line-height: 1.1 !important;
  color: var(--zs-text-1) !important;
  font-variant-numeric: tabular-nums !important;
}
/* 【层叠陷阱】.ee-lg-bar 本身是 <span>，会被旧层 style.css 的
   `.effect-legend span{display:flex;align-items:center;border-bottom:1px solid #f7f8f9;
   padding:...}` 命中：轨道被 padding 撑高、底部多出一条浅色横线，且子元素 <i>
   在 align-items:center 下 height:100% 解算为 0 —— 填充完全画不出来。
   因此这里必须显式重置 display/align/padding/border，并让填充用绝对定位
   铺满轨道高度，不再依赖百分比高度。 */
.ee-lg-bar {
  display: block !important;
  position: relative;
  width: 100%;
  height: 7px !important;
  min-height: 7px;
  padding: 0 !important;
  border: 0 !important;
  border-radius: var(--zs-r-pill);
  background: var(--zs-chip);
  overflow: hidden;
  box-shadow: inset 0 0 0 1px rgba(26, 32, 44, .04);
  flex: 0 0 auto !important;
  align-self: stretch !important;
}
.ee-lg-bar > i {
  display: block;
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  height: auto !important;
  min-height: 0;
  padding: 0 !important;
  border: 0 !important;
  border-radius: var(--zs-r-pill);
  background: var(--ee-lg-c, var(--zs-brand));
  /* 不用 animation：皮肤层全局 animation:none!important 会让起始帧永久生效。
     这里用 transition，宽度由 JS 一次性写入最终值。 */
  transition: width .45s var(--zs-ease);
}
html[data-theme="dark"] .ee-lg-bar {
  background: var(--zs-chip) !important;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .05);
}
html[data-theme="dark"] .effect-legend-wrap > .effect-legend > span::after { opacity: .65; }

/* --- 56.2 平台保真度：竖向柱状图 --------------------------------------- */
/* flow-root 建立 BFC：否则 .ee-pcc-foot 的 margin-top 会穿透容器折叠到
   外部，foot 顶边贴着绘图区底边，与绝对定位在绘图区下方的平台名 /
   均值差标签重叠（实测 nameTop < footTop）。 */
.ee-pcc { margin-top: 2px; display: flow-root; }
.ee-pcc-plot {
  position: relative;
  /* 纯绘图区：柱体 / 网格 / 均值线共用 0–100% 同一高度。
     平台名 / 均值差标签在绘图区外的独立网格行 .ee-pcc-xlabels，
     避免 absolute 百分比按 padding box 解算造成的基准错位。 */
  height: 208px;
  padding: 0 4px 0 30px;
}
.ee-pcc-gl {
  position: absolute;
  left: 30px; right: 4px;
  height: 0;
  border-top: 1px dashed var(--zs-line);
}
.ee-pcc-gl:first-child { border-top-style: solid; border-top-color: var(--zs-line-strong); }
.ee-pcc-gt {
  position: absolute;
  left: -30px; top: -7px;
  width: 24px;
  text-align: right;
  font-size: 10px;
  font-weight: 400;
  color: var(--zs-text-3);
  font-variant-numeric: tabular-nums;
}
/* 均值虚线：品牌色，带小签，压在网格之上、柱体之下 */
.ee-pcc-avg {
  position: absolute;
  left: 30px; right: 4px;
  height: 0;
  border-top: 1.5px dashed var(--zs-brand);
  opacity: .8;
  z-index: 1;
}
.ee-pcc-avg > span {
  position: absolute;
  right: 0; top: -17px;
  padding: 1px 7px;
  border-radius: var(--zs-r-pill);
  background: var(--zs-brand-50);
  border: 1px solid var(--zs-brand-100);
  font-size: 9.5px;
  font-weight: 600;
  color: var(--zs-brand-ink-deep);
  white-space: nowrap;
}
/* 柱列与网格线共用同一坐标系：absolute 的包含块是 plot 的 padding box，
   bottom 会从外底边量起（含 44px 标签区），因此改用 top:0 + height:100%
   （百分比高度按 content box 解算 = 绘图区高），柱底即 0% 网格线。 */
.ee-pcc-cols {
  position: absolute;
  left: 30px; right: 4px; top: 0; height: 100%;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: 10px;
  z-index: 2;
}
.ee-pcc-col {
  position: relative;
  min-width: 0;
}
.ee-pcc-track {
  position: relative;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
/* 柱体本体：沿用 .ee-bar / .ee-pc-bar 类名以复用 hover 详情绑定，
   但高度由内联 height 决定，宽度固定 34px（窄屏 26px）。
   §43 的 .ee-bar 是 height:7px，这里必须显式覆盖。 */
.ee-pcc .ee-pc-bar {
  display: block !important;
  width: 34px;
  max-width: 100%;
  height: var(--ee-pcc-h, 0%);
  border-radius: 8px 8px 3px 3px;
  background: var(--zs-chip);
  overflow: hidden;
  cursor: default;
  transition: box-shadow .16s var(--zs-ease), filter .16s var(--zs-ease);
}
.ee-pcc .ee-pc-bar > i {
  display: block;
  width: 100%;
  height: 100% !important;
  border-radius: 8px 8px 3px 3px;
}
.ee-pcc .ee-pc-bar:hover,
.ee-pcc .ee-pc-bar:focus-visible {
  filter: brightness(1.07) saturate(1.08);
  box-shadow: 0 0 0 2px var(--zs-brand-100), 0 4px 12px rgba(0, 0, 0, .08);
}
/* 数值签：贴在柱顶上方，跟随柱高 */
.ee-pcc-num {
  position: absolute;
  left: 50%;
  bottom: calc(var(--ee-pcc-h, 0%) + 6px);
  transform: translateX(-50%);
  font-size: 13px;
  font-weight: 600;
  line-height: 1;
  color: var(--zs-text-1);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  pointer-events: none;
}
.ee-pcc-num > em {
  font-style: normal;
  font-size: 9.5px;
  font-weight: 500;
  margin-left: 1px;
  color: var(--zs-muted);
}
/* 标签行：与 .ee-pcc-cols 同一列模板（left/right/gap 一致），逐列对齐 */
.ee-pcc-xlabels {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: 10px;
  margin: 7px 4px 0 30px;
}
.ee-pcc-xlabel {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  min-width: 0;
}
.ee-pcc-name {
  font-size: 11.5px;
  font-weight: 500;
  color: var(--zs-text-2);
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* 均值差小字：列宽在窄档只有 48px，而「高于均值 10pp」需 62px。
   原写 white-space:nowrap 会被裁切（probe-skin 的 no_text_overflow 实测
   sw=62 > cw=48）。改为允许换行 + 居中，窄档自然折成两行，信息不丢。 */
.ee-pcc-sub {
  font-size: 9.5px;
  font-weight: 500;
  max-width: 100%;
  white-space: normal;
  overflow-wrap: break-word;
  text-align: center;
  line-height: 1.25;
  color: var(--zs-text-3);
}
.ee-pcc-sub.is-up { color: var(--zs-brand-ink-deep); }
.ee-pcc-sub.is-down { color: #b07d1e; }
.ee-pcc-foot {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  margin-top: 10px;
}
.ee-pcc-foot > span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  color: var(--zs-muted);
}
.ee-pcc-lg { width: 12px; height: 0; border-top: 1.5px dashed var(--zs-brand); }
.ee-pcc-lg.is-hit {
  height: 9px; width: 7px; border: 0;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--zs-brand), var(--zs-brand-ink));
}
html[data-theme="dark"] .ee-pcc-gl { border-top-color: var(--zs-line); }
html[data-theme="dark"] .ee-pcc-gl:first-child { border-top-color: var(--zs-line-strong); }
/* 深色文字用提亮的 ink-deep(#8ff0d4)：brand-100 在深色主题是深绿底令牌
   (#1e3a2f)，当文字色会几乎不可见。 */
html[data-theme="dark"] .ee-pcc-avg > span {
  background: var(--zs-brand-a12);
  border-color: var(--zs-line-brand);
  color: var(--zs-brand-ink-deep);
}
html[data-theme="dark"] .ee-pcc-sub.is-up { color: var(--zs-brand-ink-deep); }
html[data-theme="dark"] .ee-pcc-sub.is-down { color: var(--zs-amber); }
html[data-theme="dark"] .ee-pcc .ee-pc-bar { background: var(--zs-chip); }

/* --- 56.3 口碑指数：气泡图 --------------------------------------------- */
/* 气泡图信息密度高于原仪表盘，左列给到 1.55fr（原 1fr），
   右列平台情感对比 1fr 仍够放五行堆叠条。 */
.dashboard-content .effect-extra.is-merged[data-effect-extra="reputation"] .ee-grid {
  grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr) !important;
}
.ee-bb-body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 186px;
  gap: 16px;
  align-items: start;
}
.ee-bb-chart {
  position: relative;
  min-width: 0;
  border: 1px solid var(--zs-line);
  border-radius: 14px;
  background: var(--zs-card);
  padding: 4px 6px 2px;
}
.ee-bb-svg { display: block; width: 100%; height: auto; overflow: visible; }
.ee-bb-zone { pointer-events: none; }
.ee-bb-zone.is-good { fill: #28b894; opacity: .055; }
.ee-bb-zone.is-risk { fill: #e8845f; opacity: .05; }
.ee-bb-grid { stroke: var(--zs-line); stroke-width: 1; stroke-dasharray: 3 4; }
.ee-bb-axis { stroke: var(--zs-line-strong); stroke-width: 1.2; }
.ee-bb-avg { stroke: var(--zs-brand); stroke-width: 1.2; stroke-dasharray: 5 4; opacity: .7; }
.ee-bb-tick { fill: var(--zs-text-3); font-size: 9.5px; font-weight: 400; }
.ee-bb-axname { fill: var(--zs-muted); font-size: 10px; font-weight: 500; }
.ee-bb-dot { cursor: default; }
.ee-bb-halo { fill: var(--ee-bb-c); opacity: .12; transition: opacity .16s var(--zs-ease); }
.ee-bb-fill {
  fill: var(--ee-bb-c);
  opacity: .82;
  stroke: var(--zs-card);
  stroke-width: 1.5;
  transition: opacity .16s var(--zs-ease), stroke-width .16s var(--zs-ease);
}
/* 综合＝均值十字交点上的靶心（不是样本气泡，面积不参与映射）。
   .ee-bb-fill 是靶心外圈，同时兼作浮层定位锚点。 */
.ee-bb-leader {
  stroke: #1f6f5c;
  stroke-width: 1.2;
  stroke-dasharray: 3 3;
  opacity: .7;
}
/* 综合靶心：白底 + 品牌粗描边，压在平台气泡上也能一眼分辨 */
.ee-bb-dot.is-overall .ee-bb-fill {
  fill: var(--zs-card);
  stroke: #1f6f5c;
  stroke-width: 2.4;
  opacity: 1;
}
.ee-bb-core { fill: #1f6f5c; pointer-events: none; }
/* 空角标注卡：名称 + 指数，与靶心用虚线引线相连 */
.ee-bb-callout {
  fill: var(--zs-card);
  stroke: #1f6f5c;
  stroke-width: 1.2;
  opacity: .97;
}
.ee-bb-dot.is-overall .ee-bb-val {
  fill: var(--zs-brand-ink-deep);
  font-size: 15px;
}
.ee-bb-dot.is-overall .ee-bb-name { font-size: 9.5px; letter-spacing: .02em; }
.ee-bb-dot.is-overall .ee-bb-halo { fill: #1f6f5c; opacity: .14; }
.ee-bb-dot.is-overall.is-on .ee-bb-callout { stroke-width: 2; }
.ee-bb-dot.is-overall.is-on .ee-bb-fill { stroke-width: 3.2; }
.ee-bb-dot.is-on .ee-bb-halo { opacity: .3; }
.ee-bb-dot.is-on .ee-bb-fill { opacity: 1; stroke-width: 2.5; }
.ee-bb-dot:focus-visible { outline: none; }
.ee-bb-dot:focus-visible .ee-bb-fill { stroke: var(--zs-brand); stroke-width: 3; }
.ee-bb-val {
  fill: #fff;
  font-size: 12px;
  /* 皮肤体系字重上限 500（probe-skin 的 fw_light_system 断言 heavy<=2）：
     气泡内数值原写 700，6 个 SVG text 全部超标 → 压到 500，
     靠字号与白色高对比保证可读，不靠加粗。 */
  font-weight: 500;
  pointer-events: none;
  font-variant-numeric: tabular-nums;
}
.ee-bb-name {
  fill: var(--zs-text-2);
  font-size: 10.5px;
  font-weight: 600;
  pointer-events: none;
}
.ee-bb-dot.is-overall .ee-bb-name { fill: var(--zs-brand-ink-deep); }

/* 右侧：总分 + 指标 + 平台清单 */
.ee-bb-side { display: grid; gap: 12px; min-width: 0; }
.ee-bb-total {
  display: grid;
  gap: 3px;
  padding: 12px 14px;
  border: 1px solid var(--zs-line);
  border-radius: 12px;
  background: var(--zs-chip);
}
.ee-bb-total-num { display: flex; align-items: baseline; gap: 4px; line-height: 1; }
.ee-bb-total-num > strong { font-size: 32px; font-weight: 600; font-variant-numeric: tabular-nums; }
.ee-bb-total-num > span { font-size: 11px; font-weight: 400; color: var(--zs-text-3); }
.ee-bb-total-lv {
  justify-self: start;
  margin-top: 2px;
  padding: 2px 9px;
  border-radius: var(--zs-r-pill);
  font-size: 10.5px;
  font-weight: 600;
  color: var(--ee-bb-c);
  background: color-mix(in srgb, var(--ee-bb-c) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--ee-bb-c) 30%, transparent);
}
.ee-bb-total > em {
  font-style: normal;
  font-size: 10px;
  color: var(--zs-text-3);
  margin-top: 3px;
}
.ee-bb-list { display: grid; gap: 5px; }
.ee-bb-item {
  display: grid;
  /* 通用档：圆点 8 + 名称(弹性) + 分值 + 条数。间隙 6px、内边距 8px 是
     紧凑基线；名称超长时以 ellipsis 兜底。整行宽档的名称完整显示由 §57
     通过加宽右侧信息列保证，不靠压缩字号或删掉条数单位。 */
  grid-template-columns: 8px minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 6px;
  width: 100%;
  padding: 6px 8px;
  border: 1px solid var(--zs-line);
  border-radius: 9px;
  background: var(--zs-card);
  font-family: inherit;
  text-align: left;
  cursor: pointer;
  transition: border-color .16s var(--zs-ease), background .16s var(--zs-ease);
}
.ee-bb-item:hover,
.ee-bb-item.is-on {
  border-color: var(--ee-bb-c);
  background: var(--zs-sunken);
}
.ee-bb-item:focus-visible { outline: 2px solid var(--zs-brand); outline-offset: 2px; }
.ee-bb-item-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ee-bb-c); }
.ee-bb-item-name {
  font-size: 11.5px;
  font-weight: 500;
  color: var(--zs-text-2);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ee-bb-item-val { font-size: 12.5px; font-weight: 600; font-variant-numeric: tabular-nums; }
.ee-bb-item-n { font-style: normal; font-size: 9.5px; color: var(--zs-text-3); white-space: nowrap; }

/* 气泡提示浮层：挂在 .ee-bb-chart 内（相对定位），不会被卡片裁切 */
.ee-bb-tip {
  position: absolute;
  z-index: 30;
  min-width: 194px;
  max-width: 250px;
  padding: 10px 12px 9px;
  border: 1px solid var(--zs-line-strong);
  border-radius: 12px;
  background: var(--zs-card);
  box-shadow: var(--zs-sh-2, 0 8px 24px rgba(0, 0, 0, .1));
  pointer-events: none;
}
.ee-bbt-head {
  display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
  padding-bottom: 7px; margin-bottom: 7px;
  border-bottom: 1px solid var(--zs-line);
}
.ee-bbt-head > b { font-size: 12.5px; font-weight: 600; color: var(--zs-text-1); }
.ee-bbt-head > span { font-size: 11px; font-weight: 600; font-variant-numeric: tabular-nums; }
.ee-bbt-rows { display: grid; gap: 4px; }
.ee-bbt-row {
  display: grid;
  grid-template-columns: 8px minmax(0, 1fr) auto;
  align-items: center; gap: 7px;
  font-size: 11px; color: var(--zs-text-2);
}
.ee-bbt-row > i { width: 8px; height: 8px; border-radius: 2px; }
.ee-bbt-row > i.is-pos { background: #28b894; }
.ee-bbt-row > i.is-neg { background: #e0607e; }
.ee-bbt-row > i.is-neu { background: #c4ccd6; }
.ee-bbt-row > i.is-net { background: var(--zs-brand-ink); }
.ee-bbt-row > i.is-n { background: var(--zs-text-3); }
.ee-bbt-row > b { font-weight: 600; color: var(--zs-text-1); font-variant-numeric: tabular-nums; }
.ee-bbt-foot {
  display: flex; flex-wrap: wrap; gap: 4px 12px;
  margin-top: 8px; padding-top: 7px;
  border-top: 1px solid var(--zs-line);
  font-size: 10px; color: var(--zs-text-3);
}
.ee-bbt-foot b { font-weight: 600; color: var(--zs-text-2); }
.ee-bbt-foot b.is-pos { color: var(--zs-brand-ink-deep); }
.ee-bbt-foot b.is-neg { color: #c2486a; }

.ee-bb-legend {
  display: flex; flex-wrap: wrap; gap: 6px 16px;
  margin-top: 13px;
}
.ee-bb-legend > span {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 10.5px; color: var(--zs-muted);
}
.ee-bb-lg { width: 10px; height: 10px; border-radius: 50%; }
.ee-bb-lg.is-plat { background: #28b894; opacity: .8; }
/* 图例图标＝靶心（外圈描边 + 中心点），与画布上的综合标记同形 */
.ee-bb-lg.is-all {
  width: 11px; height: 11px;
  border-radius: 50%;
  background: var(--zs-card);
  border: 2.2px solid #1f6f5c;
  position: relative;
}
.ee-bb-lg.is-all::after {
  content: '';
  position: absolute;
  left: 50%; top: 50%;
  width: 3px; height: 3px;
  margin: -1.5px 0 0 -1.5px;
  border-radius: 50%;
  background: #1f6f5c;
}
.ee-bb-lg.is-good { background: rgba(40, 184, 148, .18); border-radius: 3px; }
.ee-bb-lg.is-risk { background: rgba(232, 132, 95, .18); border-radius: 3px; }

/* 深色 */
html[data-theme="dark"] .ee-bb-chart { background: var(--zs-card); border-color: var(--zs-line); }
html[data-theme="dark"] .ee-bb-zone.is-good { opacity: .1; }
html[data-theme="dark"] .ee-bb-zone.is-risk { opacity: .09; }
html[data-theme="dark"] .ee-bb-fill { stroke: var(--zs-card); opacity: .9; }
html[data-theme="dark"] .ee-bb-dot.is-overall .ee-bb-fill {
  fill: var(--zs-card);
  stroke: var(--zs-brand);
}
html[data-theme="dark"] .ee-bb-core { fill: var(--zs-brand); }
html[data-theme="dark"] .ee-bb-callout { fill: var(--zs-chip); stroke: var(--zs-brand); }
html[data-theme="dark"] .ee-bb-dot.is-overall .ee-bb-halo { fill: var(--zs-brand); opacity: .2; }
html[data-theme="dark"] .ee-bb-leader { stroke: var(--zs-brand-ink-deep); }
html[data-theme="dark"] .ee-bb-dot.is-overall .ee-bb-val { fill: var(--zs-brand-ink-deep); }
html[data-theme="dark"] .ee-bb-name { fill: var(--zs-text-2); }
html[data-theme="dark"] .ee-bb-dot.is-overall .ee-bb-name { fill: var(--zs-brand-ink-deep); }
html[data-theme="dark"] .ee-bb-total { background: var(--zs-chip); border-color: var(--zs-line); }
html[data-theme="dark"] .ee-bb-item { background: var(--zs-card); border-color: var(--zs-line); }
html[data-theme="dark"] .ee-bb-item:hover,
html[data-theme="dark"] .ee-bb-item.is-on { background: var(--zs-sunken); }
html[data-theme="dark"] .ee-bbt-row > i.is-neu { background: #3a4a44; }
html[data-theme="dark"] .ee-bbt-foot b.is-neg { color: var(--zs-pink); }
html[data-theme="dark"] .ee-bbt-foot b.is-pos { color: var(--zs-brand-ink-deep); }
html[data-theme="dark"] .ee-bb-lg.is-all {
  background: var(--zs-card);
  border-color: var(--zs-brand);
}
html[data-theme="dark"] .ee-bb-lg.is-all::after { background: var(--zs-brand); }

/* --- 56.4 信源问题详情「平台」列表头居中 -------------------------------
   表头 .media-source-columns 第一列是 46px 的「平台」二字（左对齐），
   而下方 .owned-source-cell 是 flex + justify-content:flex-start，
   里面是 18px 高的「官方 / 合作 / 公共」徽章，实测徽章左边缘比表头文字
   左边缘还偏左 2px，视觉上「平台」明显没对齐。
   这里把表头首列与数据首列都改成水平居中，两者中心线严格重合。 */
.media-source-columns > span:first-child,
.media-source-columns > .kn-tip-host:first-child {
  text-align: center !important;
  justify-self: stretch !important;
  display: block !important;
}
.media-source-row > .owned-source-cell {
  justify-content: center !important;
}

/* --- 56.5 响应式 ------------------------------------------------------- */
@media (max-width: 1180px) {
  .ee-bb-body { grid-template-columns: minmax(0, 1fr) 168px; gap: 12px; }
  .ee-bb-total-num > strong { font-size: 28px; }
  .ee-pcc-plot { height: 190px; }
  .ee-pcc .ee-pc-bar { width: 30px; }
}
@media (max-width: 1000px) {
  /* 左列降到 1.3fr，气泡图仍能放下 480 viewBox 的等比缩放 */
  .dashboard-content .effect-extra.is-merged[data-effect-extra="reputation"] .ee-grid {
    grid-template-columns: minmax(0, 1fr) !important;
  }
}
@media (max-width: 860px) {
  .ee-bb-body { grid-template-columns: minmax(0, 1fr); }
  .ee-bb-side { grid-template-columns: minmax(0, 1fr); }
  .ee-bb-list { grid-template-columns: repeat(2, minmax(0, 1fr)); display: grid; }
}
@media (max-width: 700px) {
  .ee-pcc-plot { height: 176px; padding-left: 26px; }
  .ee-pcc-gl, .ee-pcc-avg, .ee-pcc-cols { left: 26px; }
  .ee-pcc-xlabels { margin-left: 26px; gap: 6px; }
  .ee-pcc-gt { left: -26px; width: 21px; font-size: 9px; }
  .ee-pcc-cols { gap: 6px; }
  .ee-pcc .ee-pc-bar { width: 24px; }
  .ee-pcc-num { font-size: 11.5px; }
  .ee-pcc-name { font-size: 10.5px; }
  .ee-pcc-sub { font-size: 8.5px; }
  .ee-bb-list { grid-template-columns: minmax(0, 1fr); }
  .ee-bb-tip { min-width: 170px; max-width: 210px; }
}
@media (max-width: 560px) {
  .ee-pcc-plot { height: 164px; }
  .ee-pcc .ee-pc-bar { width: 20px; }
  .ee-pcc-sub { display: none; }
  .ee-bb-legend { gap: 5px 12px; }
}

/* 打印：去掉交互态与浮层，保留图形本体 */
@media print {
  .ee-bb-tip { display: none !important; }
  .ee-bb-item { break-inside: avoid; }
  .ee-pcc-avg > span { background: #fff; }
}

/* ==========================================================================
   57. #143 / #144 声誉卡重排：口碑指数独立整行 + 图例单列 + 环形图 hover
   --------------------------------------------------------------------------
   · 口碑指数从声誉合并卡拆出，独立 .ee-score-panel 占满整行；
     声誉卡增强区只剩平台情感对比（单列铺满）。
   · 声誉 facts 删「词条总数 / 提及总次数 / 平台覆盖」，只留正负比 + 最高频词；
     被删三项改由环形图 hover 浮层承载（interactions.js eeDonutTipHTML）。
   · 两卡图例（正面/负面/中性、核心词/已提及）改单列纵排，
     压过 §34.3 / §54.1 的 grid-auto-flow:column !important。
   · 环形图整圈可 hover / 可聚焦，复用 .ee-ps-tip 单例浮层。
   层叠裁决：本段在文件最末，同级或更高特异性 + !important 即可定版。
   ========================================================================== */

/* --- 57.1 图例单列纵排 --------------------------------------------------- */
.dashboard-content .effect-legend-wrap > .effect-legend,
.effect-legend-wrap > .effect-legend {
  grid-auto-flow: row !important;
  grid-auto-columns: auto !important;
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 10px !important;
}
.dashboard-content .effect-legend-wrap > .effect-legend > span,
.effect-legend-wrap > .effect-legend > span {
  padding: 12px 16px 13px !important;
}

/* --- 57.2 环形图：可交互提示 --------------------------------------------- */
.dashboard-content .donut[data-ee-donut] {
  cursor: pointer;
  outline: none;
  transition: transform .18s var(--zs-ease);
}
.dashboard-content .donut[data-ee-donut]:hover { transform: scale(1.035); }
.dashboard-content .donut[data-ee-donut]:focus-visible {
  box-shadow: 0 0 0 3px var(--zs-brand-100), 0 10px 26px -14px rgba(22, 60, 50, .45) !important;
}
/* 图例下方一行小字提示：告诉用户环形图可悬停 */
.ee-donut-hint {
  display: flex !important;
  align-items: center !important;
  gap: 6px !important;
  margin: 0 !important;
  padding: 0 2px !important;
  font-size: 11px !important;
  font-weight: 300 !important;
  color: var(--zs-muted) !important;
}
.ee-donut-hint > svg {
  width: 12px;
  height: 12px;
  flex: 0 0 auto;
  opacity: .75;
}

/* --- 57.3 环形图浮层：保真度两段配色 + 加宽 ------------------------------- */
.ee-pst-row > i.is-core { background: #8b7cf6; }
.ee-pst-row > i.is-miss { background: var(--zs-chip); box-shadow: inset 0 0 0 1px var(--zs-line-strong); }
html[data-theme="dark"] .ee-pst-row > i.is-core { background: var(--zs-violet); }
html[data-theme="dark"] .ee-pst-row > i.is-miss {
  background: var(--zs-chip);
  box-shadow: inset 0 0 0 1px var(--zs-line-strong);
}
/* 浮层要承载 5 条统计 + 三段明细，比平台浮层略宽 */
.ee-ps-tip:has(.ee-pst-foot > span:nth-child(4)) { max-width: min(340px, calc(100vw - 20px)); }

/* --- 57.4 声誉卡整行 + 口碑指数独立整行板块 ------------------------------- */
/* #143 口碑指数拆出后，声誉卡若仍占半宽（732px），右侧会空出整个第二列
   （截图实测）。让声誉卡也横跨两列：环形图居左，单列图例 + 指标 + 平台
   情感对比吃满剩余宽度，整行无空洞。保真度卡保持原半宽布局不动。 */
.dashboard-content #reputation .effect-pie-grid > .effect-pie-card.zs-merged-card {
  grid-column: 1 / -1 !important;
}
/* .effect-pie-grid 是两列网格：口碑面板必须横跨两列独占一行，
   否则会被自动放进第二列，与声誉卡并排（实测 732px 半宽）。 */
.dashboard-content .effect-pie-grid > .ee-score-panel {
  grid-column: 1 / -1 !important;
}
.dashboard-content .ee-score-panel {
  margin-top: 0 !important;
  padding: 18px 20px !important;
}
.dashboard-content .ee-score-panel > .ee-card {
  background: transparent !important;
  background-image: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
/* 整行后横向空间充裕：图表吃满剩余宽度，右侧信息列加宽到 300px，
   平台清单不再挤成两行。图表限高 430px，避免 1480 版心下被拉到 700px+。

   【#148 顺手修 · DeepSeek 被截断】右列原为 280px，两列档每格 137px：
   扣掉内边距 14 + 三道间隙 15 + 圆点 8 + 分值 22.9 + 条数 26 后，
   名称只剩 49px，而「DeepSeek」实测需 50.7px → 被 ellipsis 截成「DeepSe…」。
   曾试过压间隙/压字号，余量不足 1px，仍失败。这里改为**加宽右列 20px**：
   每格变 147px、名称可用约 59.6px，对最长平台名留出 ~9px 安全余量。
   图表侧 max-width 700px，1480 版心下左列仍有 700px 以上，不受影响。 */
.dashboard-content .ee-score-panel .ee-bb-body {
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 22px;
}
.dashboard-content .ee-score-panel .ee-bb-chart {
  max-width: 700px;
  width: 100%;
}
.dashboard-content .ee-score-panel .ee-bb-total-num > strong { font-size: 36px; }
/* 平台清单：整行档改两列，五条 + 综合正好铺满右列。
   名称完整显示靠上面把右列加宽到 300px 实现（每格 147px，名称可用 ~59.6px，
   最长的「DeepSeek」需 50.7px）。这里只保留紧凑的间隙与内边距，
   **不删条数单位「条」、不压条数字号**，保持数据口径可读性。 */
.dashboard-content .ee-score-panel .ee-bb-list {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px;
}

.dashboard-content .ee-score-panel .ee-bb-item {
  gap: 5px;
  padding: 6px 7px;
}
/* 声誉增强区只剩平台情感对比：单列铺满，五行堆叠条不再被挤在半宽里 */
.dashboard-content .effect-extra.is-merged[data-effect-extra="reputation"] .ee-grid {
  grid-template-columns: minmax(0, 1fr) !important;
}

/* --- 57.5 响应式 --------------------------------------------------------- */
@media (max-width: 1180px) {
  .dashboard-content .ee-score-panel .ee-bb-body {
    grid-template-columns: minmax(0, 1fr) 232px;
    gap: 16px;
  }
  .dashboard-content .ee-score-panel .ee-bb-list { grid-template-columns: minmax(0, 1fr); }
  .dashboard-content .ee-score-panel .ee-bb-total-num > strong { font-size: 30px; }
}
@media (max-width: 860px) {
  .dashboard-content .ee-score-panel .ee-bb-body { grid-template-columns: minmax(0, 1fr); }
  .dashboard-content .ee-score-panel .ee-bb-chart { max-width: 560px; margin: 0 auto; }
  .dashboard-content .ee-score-panel .ee-bb-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 700px) {
  .dashboard-content .ee-score-panel { padding: 14px 14px !important; }
  .dashboard-content .ee-score-panel .ee-bb-list { grid-template-columns: minmax(0, 1fr); }
  .dashboard-content .ee-score-panel .ee-bb-total-num > strong { font-size: 28px; }
}

/* ==========================================================================
   58. #145 控制台导航重整：顶栏收敛 + 删侧栏深色竖线 + 窄屏菜单
   --------------------------------------------------------------------------
   · 侧栏当前项的 inset 深色指示条已在 §50.1 删除（浅/深两版）。
   · 控制台页顶栏 nav 收敛为单个跨区入口「效果报告」，不再重复侧栏菜单；
     上下文标签升级为「控制台 · 当前页」面包屑（作业页带三级）。
   · 窄屏（<=1179px）侧栏收起，汉堡展开完整控制台菜单 + 效果报告。
   ========================================================================== */

/* --- 58.1 上下文面包屑 --------------------------------------------------- */
.page-shell.has-console-nav .topbar-context {
  display: inline-flex !important;
  align-items: center !important;
  gap: 7px !important;
  min-width: 0 !important;
}
.page-shell.has-console-nav .topbar-context strong {
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
}
.zs-ctx-sep { color: var(--zs-text-4) !important; font-weight: 300 !important; }
.zs-ctx-page {
  font-weight: 400 !important;
  color: var(--zs-text-2) !important;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.zs-ctx-sub {
  font-style: normal !important;
  font-weight: 300 !important;
  color: var(--zs-text-3) !important;
  margin-left: 5px;
}
/* 顶栏只剩一个跨区入口：不再 flex:1 抢占中部空间，靠左随面包屑 */
.page-shell.has-console-nav .topbar nav {
  flex: 0 0 auto !important;
  margin-left: 6px;
}
.page-shell.has-console-nav .topbar nav a.nav-cross-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 14px;
  border: 1px solid var(--zs-line);
  border-radius: var(--zs-r-pill);
  background: var(--zs-card);
  font-size: 12.5px;
  font-weight: 400;
  color: var(--zs-text-2);
  text-decoration: none;
  white-space: nowrap;
  transition: background .18s var(--zs-ease), color .18s var(--zs-ease), border-color .18s var(--zs-ease);
}
.page-shell.has-console-nav .topbar nav a.nav-cross-link::before {
  content: '';
  width: 7px; height: 7px;
  border-left: 1.6px solid currentColor;
  border-bottom: 1.6px solid currentColor;
  transform: rotate(45deg);
  opacity: .7;
}
.page-shell.has-console-nav .topbar nav a.nav-cross-link:hover {
  background: var(--zs-brand-50);
  border-color: var(--zs-brand);
  color: var(--zs-brand-ink-deep);
}
html[data-theme="dark"] .page-shell.has-console-nav .topbar nav a.nav-cross-link {
  background: var(--zs-card);
  border-color: var(--zs-line);
  color: var(--zs-text-2);
}
html[data-theme="dark"] .page-shell.has-console-nav .topbar nav a.nav-cross-link:hover {
  background: var(--zs-brand-50);
  border-color: var(--zs-brand);
  color: var(--zs-brand);
}

/* --- 58.2 窄屏汉堡菜单：完整控制台 --------------------------------------- */
@media (max-width: 1179px) {
  /* 【必须】解除顶栏裁切，否则浮层被切在 64px 处。
     根因（实测 elementFromPoint）：layout-fix.css 给 .topbar 写了
     overflow:hidden（服务于 max-height 收拢动画），而汉堡浮层是
     top:60px 的 absolute 子元素 —— 菜单虽在 DOM 里 display:flex，
     但 6 项全部落在裁切区外，命中测试返回的是页面内容（pj-hero / H1…），
     即「看起来展开了却一项都点不到」。
     这里只在「控制台页 + 窄屏 + 顶栏未收起」三条件同时成立时放开裁切：
       · :not(.nav-hidden) 保证收起态仍走 layout-fix 的 overflow:hidden!important，
         收拢动画不会露出内容；
       · 选择器 5 个类，特异性高于 layout-fix 的 4 类规则，且皮肤层源顺序在后。
     顶栏自身高度/max-height 不变，因此视觉高度与 --shell-offset 口径不受影响。 */
  .page-shell.has-console-nav:not(.nav-hidden) .floating-shell .topbar,
  .page-shell.has-console-nav:not(.nav-hidden) .topbar {
    overflow: visible !important;
  }

  /* 侧栏收起后，控制台入口由汉堡菜单承载。旧层在 >=701 把汉堡
     display:none!important，这里恢复到 1179 断点，与侧栏收起同步。 */
  .page-shell.has-console-nav .mobile-menu-toggle {
    display: flex !important;
    margin-left: auto;
    width: 34px; height: 32px;
    padding: 7px;
    flex-direction: column;
    justify-content: center;
    gap: 4px;
    border: 1px solid var(--zs-line);
    border-radius: 8px;
    background: var(--zs-card);
    cursor: pointer;
  }
  .page-shell.has-console-nav .mobile-menu-toggle span {
    display: block;
    width: 18px; height: 2px;
    border-radius: 2px;
    background: var(--zs-brand);
  }
  .page-shell.has-console-nav .topbar nav {
    position: absolute !important;
    /* 顶栏高度随断点变化（>700 为 64px，<=700 旧层压到 58px），
       写死 60px 会在窄屏压住顶栏底边、宽屏留 4px 缝。用实测变量对齐。 */
    top: calc(var(--zs-header-h, 64px) + 6px) !important;
    left: 14px !important;
    right: 14px !important;
    display: none !important;
    flex-direction: column !important;
    /* 【必须】旧层 .topbar nav 是 align-items:center 的横向胶囊条，
       改成 column 后交叉轴变水平，继承的 center 会把每项按内容宽居中，
       实测 6 项宽度 108~124px 全部飘在卡片中轴（left 429/437），
       选中底色只裹住文字、右侧指示点也贴不到边。这里显式拉满。 */
    align-items: stretch !important;
    justify-content: flex-start !important;
    gap: 4px !important;
    margin-left: 0 !important;
    padding: 10px !important;
    background: var(--zs-card) !important;
    border: 1px solid var(--zs-line-strong) !important;
    border-radius: 14px !important;
    box-shadow: var(--zs-sh-3) !important;
    z-index: 120;
    /* 小屏高度兜底：菜单自身滚动，绝不超出视口 */
    max-height: calc(100vh - var(--zs-header-h, 64px) - 26px);
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: var(--zs-brand-100) transparent;
  }
  .page-shell.has-console-nav .topbar nav::-webkit-scrollbar { width: 6px; }
  .page-shell.has-console-nav .topbar nav::-webkit-scrollbar-track { background: transparent; }
  .page-shell.has-console-nav .topbar nav::-webkit-scrollbar-thumb {
    background: var(--zs-brand-100); border-radius: 999px;
  }
  .page-shell.has-console-nav .topbar nav.mobile-open { display: flex !important; }
  .page-shell.has-console-nav .topbar nav a {
    display: flex !important;
    align-items: center !important;
    justify-content: flex-start !important;
    /* 交叉轴拉满：旧层 flex:0 0 auto 在 column 下等于按内容取宽 */
    flex: 0 0 auto !important;
    width: 100% !important;
    align-self: stretch !important;
    box-sizing: border-box !important;
    gap: 10px !important;
    padding: 10px 12px !important;
    border: 1px solid transparent !important;
    border-radius: 10px !important;
    background: transparent !important;
    font-size: 13.5px !important;
    font-weight: 400 !important;
    color: var(--zs-text-2) !important;
    text-decoration: none !important;
    white-space: nowrap !important;
    text-align: left !important;
  }
  .page-shell.has-console-nav .topbar nav a::before { content: none !important; }
  .page-shell.has-console-nav .topbar nav a .zs-console-ico {
    width: 18px; height: 18px; flex: 0 0 18px;
    display: grid; place-items: center;
    color: var(--zs-text-3);
  }
  .page-shell.has-console-nav .topbar nav a .zs-console-ico svg { width: 17px; height: 17px; }
  .page-shell.has-console-nav .topbar nav a .zs-console-dot {
    margin-left: auto; width: 6px; height: 6px; border-radius: 50%;
    background: var(--zs-brand); flex: 0 0 6px;
  }
  .page-shell.has-console-nav .topbar nav a:hover { background: var(--zs-sunken) !important; color: var(--zs-text-1) !important; }
  .page-shell.has-console-nav .topbar nav a.is-active {
    background: var(--zs-brand-100) !important;
    border-color: var(--zs-brand) !important;
    color: #00705a !important;
    font-weight: 500 !important;
  }
  .page-shell.has-console-nav .topbar nav a.is-active .zs-console-ico { color: #00705a !important; }
  .page-shell.has-console-nav .topbar nav a.zs-mn-report {
    margin-top: 4px;
    border-top: 1px solid var(--zs-line) !important;
    border-radius: 0 0 10px 10px !important;
    padding-top: 12px !important;
    color: var(--zs-brand-ink-deep) !important;
  }
  html[data-theme="dark"] .page-shell.has-console-nav .topbar nav {
    background: var(--zs-card) !important;
    border-color: var(--zs-line-strong) !important;
    box-shadow: var(--zs-sh-4) !important;
  }
  html[data-theme="dark"] .page-shell.has-console-nav .topbar nav a.is-active {
    background: rgba(63, 217, 174, .2) !important;
    border-color: rgba(63, 217, 174, .5) !important;
    color: var(--zs-brand) !important;
  }
  html[data-theme="dark"] .page-shell.has-console-nav .topbar nav a.is-active .zs-console-ico { color: var(--zs-brand) !important; }
  html[data-theme="dark"] .page-shell.has-console-nav .topbar nav a.zs-mn-report { color: var(--zs-brand) !important; }
}
/* 中屏（侧栏仍在）面包屑让位规则沿用 §33.2：<=1280 隐藏上下文，
   但控制台页只剩一个 nav 入口，空间充裕，这里恢复显示到 900px。 */
@media (max-width: 1280px) and (min-width: 901px) {
  .page-shell.has-console-nav .topbar-context { display: inline-flex !important; }
}
@media (max-width: 900px) {
  .page-shell.has-console-nav .topbar-context { display: none !important; }
}

/* --- 58.3 手机档（<=700）顶栏高度与汉堡位置 -------------------------------
 * 旧层在 700 把 .topbar 压到 58px，而 --zs-header-h 仍是 64px，
 * 会让浮层顶边比顶栏底边低 6px（缝隙）或高（压边）。这里把变量同步到 58，
 * 并让汉堡在「品牌 → 面包屑 → 汉堡 → 操作区」序列里靠右紧邻操作区。 */
@media (max-width: 700px) {
  .page-shell.has-console-nav { --zs-header-h: 58px; }
  .page-shell.has-console-nav .topbar {
    height: 58px !important;
    min-height: 58px !important;
    gap: 10px !important;
  }
  .page-shell.has-console-nav .mobile-menu-toggle {
    order: 3;
    margin-left: auto;
    width: 32px; height: 30px;
    flex: 0 0 32px;
  }
  .page-shell.has-console-nav .topbar-actions { order: 4; margin-left: 0 !important; }
  .page-shell.has-console-nav .topbar nav {
    top: calc(58px + 6px) !important;
    left: 10px !important;
    right: 10px !important;
    max-height: calc(100vh - 58px - 22px);
  }
}

/* =====================================================================
 * 59. #146 项目管理：查看词条二级菜单 + 搜索框放大
 * ---------------------------------------------------------------------
 * 菜单由 projects.js 渲染在按钮旁（span.pj-words-wrap > .pj-words-menu），
 * 用 position:fixed 挂视口，坐标由 JS 按按钮 rect 实时换算。
 * 为什么不用 absolute：
 *   · .pj-card:hover 有 transform → 造包含块，absolute 会跟着卡片位移；
 *   · .pj-table-wrap{overflow:auto} 会把菜单切在表格边界；
 *   · .pj-dfoot-main{overflow-x:auto} 在抽屉底部，菜单需向上翻转。
 *
 * #153 关键修正：fixed 只脱离「裁切」，**不脱离层叠上下文**。菜单 DOM 仍在
 * 卡片内，而 .page-shell 是 z-index:1 的层叠上下文，菜单 z-index 只是其内
 * 局部值；顶栏壳(100)/侧栏(90)/抽屉(810)/弹层(950) 都是 body 级浮层，整体
 * 盖在 page-shell 之上 → 菜单被遮住。与 #99 头像下拉同病同解：
 *   openWordsMenu 把菜单 appendChild 到 document.body（根层叠上下文），
 *   z-index 由 JS 统一给 1010（高于头像下拉 1000）；closeWordsMenu 归还原
 *   wrap，render() 重绘时随卡片 DOM 一并销毁，不留孤儿节点。
 *
 * 显隐只用 [hidden] + visibility，不用 animation 入场 —— 皮肤层全局
 * animation:none!important 会让起始帧永久生效（见 §52 注释）。
 * ===================================================================== */

.pj-words-menu {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 700;
  display: flex;
  flex-direction: column;
  gap: 2px;
  box-sizing: border-box;
  width: 232px;
  max-width: calc(100vw - 16px);
  max-height: calc(100vh - 24px);
  overflow-y: auto;
  padding: 6px;
  border: 1px solid var(--zs-line-strong);
  border-radius: 14px;
  background: var(--zs-card);
  box-shadow: var(--zs-sh-3);
  scrollbar-width: thin;
  scrollbar-color: var(--zs-brand-100) transparent;
}

.pj-words-menu[hidden] { display: none !important; }
.pj-words-menu::-webkit-scrollbar { width: 6px; }
.pj-words-menu::-webkit-scrollbar-track { background: transparent; }
.pj-words-menu::-webkit-scrollbar-thumb { background: var(--zs-brand-100); border-radius: 999px; }

/* 三类词条的语义色：与 project-store.WORD_TYPES 的 green/blue/amber 对齐 */
.pj-words-item.is-green { --pj-wm-tone: #1f9d76; --pj-wm-halo: rgba(31, 157, 118, .12); }
.pj-words-item.is-blue { --pj-wm-tone: #3b82d6; --pj-wm-halo: rgba(59, 130, 214, .12); }
.pj-words-item.is-amber { --pj-wm-tone: #d9902a; --pj-wm-halo: rgba(217, 144, 42, .14); }

.pj-words-item {
  display: flex;
  align-items: center;
  gap: 9px;
  box-sizing: border-box;
  width: 100%;
  padding: 8px 10px;
  border: 1px solid transparent;
  border-radius: 10px;
  background: transparent;
  color: var(--zs-text-1);
  text-decoration: none;
  cursor: pointer;
  transition: background .16s var(--zs-ease), border-color .16s var(--zs-ease);
}

.pj-words-item:hover,
.pj-words-item:focus-visible {
  background: var(--pj-wm-halo);
  border-color: var(--pj-wm-tone);
  outline: none;
}

.pj-words-dot {
  flex: 0 0 7px;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--pj-wm-tone);
}

.pj-words-item-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }

.pj-words-item-txt b {
  font-size: 13px;
  font-weight: 500;
  line-height: 1.25;
  color: var(--zs-text-1);
}

.pj-words-item-txt small {
  font-size: 10.5px;
  font-weight: 300;
  line-height: 1.3;
  color: var(--zs-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.pj-words-item-n {
  flex: 0 0 auto;
  min-width: 22px;
  padding: 2px 6px;
  border-radius: 999px;
  background: var(--zs-chip);
  color: var(--zs-muted);
  font-size: 10.5px;
  font-weight: 500;
  font-style: normal;
  line-height: 1.4;
  text-align: center;
  font-variant-numeric: tabular-nums;
}

.pj-words-item:hover .pj-words-item-n,
.pj-words-item:focus-visible .pj-words-item-n {
  background: var(--pj-wm-tone);
  color: #fff;
}

/* 按钮右侧小箭头：展开时翻转，给出明确状态反馈 */
.pj-words-caret {
  flex: 0 0 7px;
  width: 7px;
  height: 7px;
  margin-left: 1px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: rotate(45deg) translate(-1px, -1px);
  opacity: .65;
  transition: transform .18s var(--zs-ease);
}

.pj-words-btn.is-open .pj-words-caret { transform: rotate(-135deg) translate(-1px, -1px); }

.pj-words-btn.is-open {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

/* 深色：菜单深卡底 + 亮字，语义色提亮保证可读 */
html[data-theme="dark"] .pj-words-menu {
  background: var(--zs-card) !important;
  border-color: var(--zs-line-strong) !important;
  box-shadow: var(--zs-sh-4) !important;
}

html[data-theme="dark"] .pj-words-item.is-green { --pj-wm-tone: #3fd9ae; --pj-wm-halo: rgba(63, 217, 174, .16); }
html[data-theme="dark"] .pj-words-item.is-blue { --pj-wm-tone: #6aa9f5; --pj-wm-halo: rgba(106, 169, 245, .16); }
html[data-theme="dark"] .pj-words-item.is-amber { --pj-wm-tone: #eebf52; --pj-wm-halo: rgba(238, 191, 82, .16); }
html[data-theme="dark"] .pj-words-item-txt b { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .pj-words-item-txt small { color: var(--zs-text-3) !important; }
html[data-theme="dark"] .pj-words-item-n { background: var(--zs-chip) !important; color: var(--zs-text-2) !important; }
html[data-theme="dark"] .pj-words-item:hover .pj-words-item-n,
html[data-theme="dark"] .pj-words-item:focus-visible .pj-words-item-n { color: #06231b !important; }

/* --- 59.1 搜索框放大 + #154 高度对齐筛选框 / 去框中框（最终裁决） ---
 * 旧层 .pj-search 是 38px / 12.5px / basis 280px，工具条里只占一小截。
 * #146 抬到 14px / basis 420px 优先吃剩余宽度。
 * #154 高度与右侧筛选 select 统一 40px；底色改白（与工具条同底），
 * 只留一层描边 —— 搜索框就是工具条里一个干净的输入框，不再「框内框」。 */
.pj-page .pj-search {
  flex: 1 1 420px !important;
  min-width: 260px !important;
  height: 40px !important;
  padding: 0 16px !important;
  gap: 10px !important;
  border-radius: 10px !important;
  background: #fff !important;
}
/* 筛选 select 与搜索框同高同底，整排控件视觉一致 */
.pj-page .pj-filter select {
  box-sizing: border-box !important;
  height: 40px !important;
  padding: 0 26px 0 10px !important;
  border-radius: 10px !important;
  background: #fff !important;
  font-size: 12px !important;
}

.pj-page .pj-search input {
  height: 100% !important;
  font-size: 14px !important;
}

.pj-page .pj-search input::placeholder { font-size: 13.5px !important; }

.pj-page .pj-search .pj-ico-search {
  width: 17px !important;
  height: 17px !important;
  flex: 0 0 17px !important;
}

.pj-page .pj-search .pj-ico-search::before { width: 12px !important; height: 12px !important; border-width: 1.8px !important; }
.pj-page .pj-search .pj-ico-search::after { width: 6px !important; height: 1.8px !important; }

.pj-page .pj-search-clear {
  width: 24px !important;
  height: 24px !important;
  font-size: 16px !important;
}

/* 筛选组与右侧操作组按内容取宽，把富余宽度让给搜索框 */
.pj-page .pj-filters { flex: 0 1 auto; }
.pj-page .pj-toolbar-right { flex: 0 0 auto; }

@media (max-width: 1100px) {
  /* 窄屏搜索独占一行（沿用旧层断点），高度保持 46px */
  .pj-page .pj-search { flex: 1 1 100% !important; min-width: 0 !important; }
}

@media (max-width: 700px) {
  .pj-page .pj-search { height: 40px !important; padding: 0 13px !important; }
  .pj-page .pj-search input { font-size: 13.5px !important; }
  .pj-words-menu { width: 216px; }
}

/* #154 深色：搜索框 / 筛选 select 与深色工具条同底（--zs-card，见 §27
 * 的 .pj-toolbar 深色规则），只留一层描边，同样消除框中框。
 * 特异性 (0,3,1)/(0,3,2) 压过 §27 通用输入框深色规则 (0,2,1)，源顺序更后。 */
html[data-theme="dark"] .pj-page .pj-search,
html[data-theme="dark"] .pj-page .pj-filter select {
  background: var(--zs-card) !important;
  border-color: var(--zs-line-strong) !important;
}
html[data-theme="dark"] .pj-page .pj-search:focus-within,
html[data-theme="dark"] .pj-page .pj-filter select:focus-visible {
  background: var(--zs-chip) !important;
  border-color: var(--zs-brand) !important;
}

/* =====================================================================
 * 60. #147 执行设置价格区：单一词条计价
 *
 * 价格项收敛为 6 项 + 预计费用/天：
 *   词条数量 / 平台端数 / 每日执行次数 / 记录方式 / 词条单价 / 小计天
 * 记录方式三枚 chip（标准 0.3 元/条 + 深度思考 0.05 + 截图 0.05）内嵌在
 * 价格区中段，让「加价 → 词条单价 → 小计」的因果链自上而下可读。
 *
 * 层叠裁决：基础层 new-report.css 与旧第 22 段都在本层之前，
 * 这里用 .nr-page 前缀提特异性 + !important 做最终裁决。
 * ===================================================================== */

.nr-page .nr-cost-box { padding: 14px 15px 13px !important; }

.nr-page .nr-cost-box .nr-cost-line {
  padding: 5px 0 !important;
  font-size: 12px !important;
}

.nr-page .nr-cost-box .nr-cost-line > span {
  display: flex !important;
  align-items: center !important;
  gap: 4px !important;
  min-width: 0 !important;
  color: var(--zs-text-2) !important;
  font-weight: 300 !important;
}

.nr-page .nr-cost-box .nr-cost-line b {
  color: var(--zs-text-1) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  font-variant-numeric: tabular-nums !important;
}

/* 小计/天：与上方明细拉开一档，但仍弱于总价 */
.nr-page .nr-cost-line.is-sub {
  margin-top: 3px !important;
  padding-top: 8px !important;
  border-top: 1px dashed var(--zs-line) !important;
}

.nr-page .nr-cost-line.is-sub b {
  color: var(--zs-brand-ink-deep) !important;
  font-size: 14px !important;
}

/* --- 记录方式区块 --- */
.nr-page .nr-cost-mode {
  margin: 7px 0 !important;
  padding: 9px 0 8px !important;
  border-top: 1px dashed var(--zs-line) !important;
  border-bottom: 1px dashed var(--zs-line) !important;
}

.nr-page .nr-cost-mode-label {
  margin-bottom: 8px !important;
  color: var(--zs-text-2) !important;
  font-size: 12px !important;
  font-weight: 300 !important;
}

.nr-page .nr-mode-chips {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  gap: 6px !important;
}

.nr-page .nr-mode-chip {
  gap: 6px !important;
  padding: 8px 8px !important;
  border: 1px solid var(--zs-line-strong) !important;
  border-radius: 11px !important;
  background: var(--zs-card) !important;
  color: var(--zs-text-2) !important;
  font-family: var(--zs-font) !important;
}

.nr-page .nr-mode-mark {
  flex: 0 0 16px !important;
  width: 16px !important;
  height: 16px !important;
  border: 1px solid var(--zs-line-strong) !important;
  border-radius: 5px !important;
  background: var(--zs-sunken) !important;
  color: transparent !important;
  font-size: 10px !important;
  line-height: 14px !important;
}

.nr-page .nr-mode-txt b {
  font-size: 12px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
}

.nr-page .nr-mode-txt small {
  color: var(--zs-muted) !important;
  font-size: 10px !important;
  font-weight: 300 !important;
  opacity: 1 !important;
}

/* 选中态（含标准基线）：品牌浅底 + 品牌描边 + 实心勾 */
.nr-page .nr-mode-chip.is-on,
.nr-page .nr-mode-chip.is-base {
  border-color: var(--zs-brand-100) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink-deep) !important;
}

.nr-page .nr-mode-chip.is-on .nr-mode-mark,
.nr-page .nr-mode-chip.is-base .nr-mode-mark {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand) !important;
  color: #fff !important;
}

/* 加价小字只有 10px，必须过 AA 4.5：brand-ink(#009273) 在 brand-50(#f2fcfa)
   上实测仅 3.75，改用 brand-ink-deep(#007a60) → 5.08。
   深色下 brand-ink 已提亮为 #6fe3c1，由后面的深色段单独覆盖。 */
.nr-page .nr-mode-chip.is-on .nr-mode-txt small,
.nr-page .nr-mode-chip.is-base .nr-mode-txt small { color: var(--zs-brand-ink-deep) !important; }

.nr-page .nr-mode-chip.is-base { cursor: default !important; }

.nr-page .nr-mode-chip:not(.is-base):hover {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-50) !important;
}

.nr-page .nr-mode-chip:focus-visible {
  outline: 2px solid var(--zs-brand) !important;
  outline-offset: 2px !important;
}

/* --- 总价 --- */
.nr-page .nr-cost-total {
  margin-top: 8px !important;
  padding-top: 10px !important;
  border-top: 1px solid var(--zs-line) !important;
}

.nr-page .nr-cost-total > span {
  color: var(--zs-text-1) !important;
  font-size: 12.5px !important;
  font-weight: 400 !important;
}

.nr-page .nr-cost-total strong {
  color: var(--zs-brand-ink-deep) !important;
  font-size: 26px !important;
  font-weight: 500 !important;
  font-variant-numeric: tabular-nums !important;
}

.nr-page .nr-cost-box > small {
  margin-top: 6px !important;
  color: var(--zs-muted) !important;
  font-size: 10.5px !important;
  font-weight: 300 !important;
}

/* --- 深色 --- */
html[data-theme="dark"] .nr-page .nr-cost-mode,
html[data-theme="dark"] .nr-page .nr-cost-line.is-sub,
html[data-theme="dark"] .nr-page .nr-cost-total { border-color: var(--zs-line) !important; }

html[data-theme="dark"] .nr-page .nr-mode-chip {
  border-color: var(--zs-line-strong) !important;
  background: var(--zs-sunken) !important;
  color: var(--zs-text-2) !important;
}

html[data-theme="dark"] .nr-page .nr-mode-mark {
  border-color: var(--zs-line-strong) !important;
  background: var(--zs-card) !important;
}

html[data-theme="dark"] .nr-page .nr-mode-txt small { color: var(--zs-text-2) !important; }

html[data-theme="dark"] .nr-page .nr-mode-chip.is-on,
html[data-theme="dark"] .nr-page .nr-mode-chip.is-base {
  border-color: var(--zs-brand-100) !important;
  background: var(--zs-brand-50) !important;
  color: var(--zs-brand-ink) !important;
}

html[data-theme="dark"] .nr-page .nr-mode-chip.is-on .nr-mode-txt small,
html[data-theme="dark"] .nr-page .nr-mode-chip.is-base .nr-mode-txt small { color: var(--zs-brand-ink) !important; }

html[data-theme="dark"] .nr-page .nr-mode-chip.is-on .nr-mode-mark,
html[data-theme="dark"] .nr-page .nr-mode-chip.is-base .nr-mode-mark {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand) !important;
  color: #06120f !important;
}

html[data-theme="dark"] .nr-page .nr-mode-chip:not(.is-base):hover {
  border-color: var(--zs-brand) !important;
  background: var(--zs-brand-50) !important;
}

html[data-theme="dark"] .nr-page .nr-cost-line.is-sub b,
html[data-theme="dark"] .nr-page .nr-cost-total strong { color: var(--zs-brand-ink) !important; }

/* --- 窄档：侧栏在 860 以下变整行，chip 有富余宽度；
       420 以下三列挤不下「深度思考 +0.05 元」，改单列并把加价挪到同一行 --- */
@media (max-width: 420px) {
  .nr-page .nr-mode-chips { grid-template-columns: minmax(0, 1fr) !important; }
  .nr-page .nr-mode-chip { padding: 9px 11px !important; }
  .nr-page .nr-mode-txt { flex-direction: row !important; align-items: baseline !important; gap: 7px !important; }
  .nr-page .nr-cost-total strong { font-size: 23px !important; }
}

/* --- #147 抽屉费用明细的可读性补齐 ---
 * 本轮重写了「调度与费用」的明细行，顺手把两处历史欠账修到 AA：
 *   .pj-dl dt        旧 --pj-ink-3(#7c8783) 白底仅 3.72
 *   .pj-dcost-note   旧 --zs-text-3(#a3a3a3) 白底仅 2.52
 * 浅色统一走 --zs-muted(#666666 → 5.74)；深色下 text-3 在 #0f211b 上
 * 已有 6.66，保持原令牌不动。 */
.pj-dl dt { color: var(--zs-muted) !important; }
.pj-dcost-note { color: var(--zs-muted) !important; }

html[data-theme="dark"] .pj-dl dt { color: var(--zs-text-3) !important; }
html[data-theme="dark"] .pj-dcost-note { color: var(--zs-text-3) !important; }

/* ==========================================================================
 * 61. #148 词条开关垂直居中 + 页脚 LOGO 与顶栏一致
 * --------------------------------------------------------------------------
 * 61.1 迷你开关（核心词 / 监控问题启用开关）
 *
 * 【缺陷取证】用户截图 + 像素实测（.build/px-r148.py）：
 *   深色保真度行，轨道 16px 高、白色滑块只有 10px 有效高，
 *   上留白 4px / 下留白 2px → 滑块偏下 1px；同时轨道自身相对整行
 *   偏上约 1.25px（行边框 y=18.5/65.5 → 行中心 42，轨道中心 40.75）。
 *
 * 【根因】51.3/51.4 给 .nr-mini-switch 补了 1px 描边并设
 *   box-sizing:border-box，轨道内高从 16 缩到 14；而基础层滑块仍写
 *   死 top:2px（那是按「无边框 16px」算的），于是垂直不再对称。
 *   另外 button 作为 flex item 时，UA 的 align-items 与行内基线会
 *   受 line-height 影响，单靠父级 align-items:center 不足以锁死。
 *
 * 【修法】基础层已把滑块改成 top:50% + translate(var(--nr-sw-x),-50%)，
 *   垂直恒定居中、水平位移走变量。这里再给轨道本身上一道显式锁：
 *   align-self:center + margin-block:0 + line-height:0，
 *   彻底排除基线/外边距带来的亚像素漂移。
 * ======================================================================== */
.nr-mini-switch {
  align-self: center !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  line-height: 0 !important;
  vertical-align: middle !important;
  flex: 0 0 auto !important;
}

/* 滑块：垂直居中由基础层的 translate(...,-50%) 负责，这里只确保
   任何主题分支都不会把它改回硬编码 top。 */
.nr-mini-switch i {
  top: 50% !important;
  bottom: auto !important;
  margin: 0 !important;
}

/* 行内所有成员统一按中线对齐（序号块 / 词名 / 问数 / 删除按钮）。
   .nr-core-item 与 .nr-q-row 都是 flex，显式重申一次，防止后续
   皮肤段落里的 align-items 覆盖造成整行错位。 */
.nr-core-item,
.nr-q-row {
  align-items: center !important;
}

.nr-core-item > .nr-core-idx,
.nr-core-item > .nr-core-name,
.nr-core-item > .nr-core-meta,
.nr-core-item > .nr-core-del,
.nr-q-row > .nr-q-text,
.nr-q-row > .nr-q-del {
  align-self: center !important;
}

/* --------------------------------------------------------------------------
 * 61.2 页脚 LOGO 改用横版（与顶栏同一素材）
 *
 * installFooter 已把 data-zs-logo 从 stacked 改为 horizontal。
 * 堆叠版是 300×336 的竖构图，按 height:76px 渲染只有 68px 宽，
 * 在页脚里显得又小又高；横版 422×144 与顶栏同源，按 40px 高渲染
 * 约 117px 宽，视觉重量与顶栏呼应，页脚整体高度也随之收敛。
 * 深色由 syncBrandImages 自动切 logo-horizontal-white.svg。
 * ----------------------------------------------------------------------- */
.zs-footer-logo img {
  height: 40px !important;
  width: auto !important;
  max-width: 200px !important;
}

@media (max-width: 700px) {
  .zs-footer-logo img { height: 34px !important; }
}

/* ==========================================================================
 * 62. 深色对比度补漏（回归实测暴露的两处既有缺陷）
 * --------------------------------------------------------------------------
 * 来源：diag-r93-contrast.py 只 dump 数据、没有断言字段，被 regress 的 judge
 * 判成「纯数据 dump → PASS」，属**假绿灯**。人工读输出才发现两处不达标，
 * 再用 diag-contrast-fix.py 精确取证（computed color + 合成底色）后修复。
 *
 * 62.1 环形图图例名称：深色下仍是浅色硬编码 #646464 → 3.02:1
 *   #137 把「点 + 名称 + 数字」包进 .ee-lg-top 后，名称是**裸文本节点**，
 *   §54.1 那些针对 `.effect-legend > span` 直接子元素的深色规则不再命中它，
 *   于是继承旧层 style.css 的 #646464（浅色 --zs-text-2 的值）。
 *   这里给 .ee-lg-top 显式声明 color，让名称走深色令牌；
 *   内部 > b（百分比）已有自己的 --zs-text-1 规则，不受影响。
 *
 * 62.2 控制台侧栏页脚小字：--zs-text-4(#6b8578) 在 #0f211b 上仅 4.19:1
 *   差 0.31 达不到 AA。改用 --zs-text-3(#84a194)，实测 5.6:1。
 *   浅色版不动（#bfbfbf 在白底上本就是装饰性小字，且本轮未报问题）。
 * ========================================================================== */

/* --- 62.1 图例名称（浅深都显式声明，避免继承旧层硬编码） --- */
.ee-lg-top {
  color: var(--zs-text-2) !important;
}
html[data-theme="dark"] .effect-legend-wrap > .effect-legend > span > .ee-lg-top,
html[data-theme="dark"] .ee-lg-top {
  color: var(--zs-text-2) !important;
}

/* --- 62.2 控制台侧栏页脚小字 --- */
html[data-theme="dark"] .zs-console-nav .zs-console-foot,
html[data-theme="dark"] .zs-console-foot {
  color: var(--zs-text-3) !important;
}

/* ==========================================================================
 * 63. #151 报告页：删两张合并卡 + 平台情感对比融入口碑指数
 * --------------------------------------------------------------------------
 * 需求：
 *   1) 删「声誉效果 / 情感分布 · 平台情感对比」整张合并卡；
 *   2) 「BY PLATFORM 平台情感对比」融入口碑指数卡，整体简洁紧凑；
 *   3) 删「保真度效果 / 信息分布 · 维度覆盖 · 平台保真度对比」整张合并卡。
 *
 * HTML 侧已把 .zs-merged-card 整体移除，并把
 * <div class="ee-card ee-platform" data-ee="platform"> 移进 .ee-score-panel，
 * 成为 [data-ee=score] 的兄弟。外层 grid 标记 .is-score-only。
 *
 * 层叠裁决：§57 的 `.dashboard-content .ee-score-panel ...` 是 (0,3,1) 起，
 * 本段一律沿用 `.dashboard-content` 前缀 + !important + 更后源顺序。
 * ========================================================================== */

/* --- 63.1 只剩口碑指数时，grid 退化为单列整行 --------------------------- */
.dashboard-content .effect-pie-grid.is-score-only {
  display: block !important;
  grid-template-columns: none !important;
  gap: 0 !important;
  margin: 0 !important;
}
.dashboard-content .effect-pie-grid.is-score-only > .ee-score-panel {
  grid-column: auto !important;
  width: 100%;
}

/* --- 63.2 卡内从属分区：平台情感对比 ------------------------------------ */
/* 与上方气泡图之间用一条发丝线分隔，而不是再来一张卡 */
.dashboard-content .ee-score-panel > .ee-platform.is-embedded {
  margin-top: 14px !important;
  padding-top: 14px !important;
  border-top: 1px solid var(--zs-line) !important;
}
/* 一行式小标题：左「BY PLATFORM 平台情感对比」+ 右操作提示。
   字号刻意低于主标题（h4 16px），避免与「口碑指数」争夺层级。 */
.ee-ps-subhead {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.ee-ps-subhead-t {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  font-size: 13.5px;
  font-weight: 500;
  color: var(--zs-text-1);
  letter-spacing: .01em;
}
.ee-ps-subhead-t > i {
  font-style: normal;
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: .1em;
  color: var(--zs-brand-ink);
  background: var(--zs-brand-50);
  border-radius: 999px;
  padding: 2px 7px;
  white-space: nowrap;
}
.ee-ps-subhead > small {
  font-size: 11px;
  color: var(--zs-text-3);
}
/* 紧凑化：五行堆叠条行距 13→8、条高与图例同步收一档 */
.dashboard-content .ee-score-panel .ee-platform.is-embedded .ee-ps-list {
  gap: 8px !important;
}
.dashboard-content .ee-score-panel .ee-platform.is-embedded .ee-ps-row {
  grid-template-columns: 76px minmax(0, 1fr) 84px !important;
  gap: 10px !important;
}
.dashboard-content .ee-score-panel .ee-platform.is-embedded .ee-ps-legend {
  margin-top: 10px !important;
  gap: 14px !important;
}
/* 深色：分隔线与徽标底走令牌，徽标文字用深色专用亮绿保证对比 */
html[data-theme="dark"] .dashboard-content .ee-score-panel > .ee-platform.is-embedded {
  border-top-color: var(--zs-line) !important;
}
html[data-theme="dark"] .ee-ps-subhead-t { color: var(--zs-text-1) !important; }
html[data-theme="dark"] .ee-ps-subhead-t > i {
  color: var(--zs-brand-ink-deep) !important;
  background: rgba(63, 217, 174, .14) !important;
}
html[data-theme="dark"] .ee-ps-subhead > small { color: var(--zs-text-3) !important; }

/* --- 63.3 响应式：窄档名称列回收，提示语换行不挤 ------------------------ */
@media (max-width: 860px) {
  .dashboard-content .ee-score-panel .ee-platform.is-embedded .ee-ps-row {
    grid-template-columns: 64px minmax(0, 1fr) 78px !important;
  }
}
@media (max-width: 700px) {
  .dashboard-content .ee-score-panel > .ee-platform.is-embedded {
    margin-top: 12px !important;
    padding-top: 12px !important;
  }
  .ee-ps-subhead { margin-bottom: 8px; }
  .ee-ps-subhead > small { display: none; }
  .dashboard-content .ee-score-panel .ee-platform.is-embedded .ee-ps-row {
    grid-template-columns: 56px minmax(0, 1fr) 72px !important;
    gap: 8px !important;
  }
}

/* =====================================================================
 * 64. #152 控制台顶栏靠左贯通 + 删除「效果报告」按钮
 * ---------------------------------------------------------------------
 * 此前 §50.1 把 .floating-shell 推进一个左栏宽（left:var(--zs-console-w) +
 * width:calc(100% - 栏宽)），顶栏只占右侧约 78%，左上方留空 —— 视觉上顶部
 * 是「断」的。#152 让顶栏回到 left:0 / width:100%，横贯全宽、靠左对齐：
 *   · 品牌 LOGO 落在最左（与报告页顶栏一致），面包屑「控制台 · 当前页」
 *     紧随其后，操作区（导入草稿/重置示例/新建项目/头像）靠右；
 *   · 左侧控制台菜单仍是 fixed 浮卡，顶边在顶栏之下（top:--shell-offset+8），
 *     与贯通后的顶栏不重叠；版心 .dashboard-content 仍吃左栏 padding，
 *     内容不被侧栏盖住。
 * 「效果报告」跨区按钮由 zhishu-shell.js 删除（宽屏 nav 为空、窄屏汉堡只留
 * 5 项控制台菜单），报告页入口由品牌 LOGO 链接承载。
 * ===================================================================== */

/* --- 64.1 顶栏贯通全宽（覆盖 §50.1 的左栏预留） ------------------------- */
.page-shell.has-console-nav .floating-shell {
  left: 0 !important;
  width: 100% !important;
}

/* --- 64.2 宽屏 nav 已空：彻底收起，避免空 flex 项残留间距 --------------- */
.page-shell.has-console-nav .topbar nav[data-zs-navmode="cross"] {
  display: none !important;
}

/* --- 64.3 窄屏汉堡菜单去掉「效果报告」项后，末项不再需要分隔顶边 -------- */
@media (max-width: 1179px) {
  .page-shell.has-console-nav .topbar nav a.zs-mn-report { display: none !important; }
}

/* =====================================================================
 * 65. #150 浅色对比度补漏（回归实测暴露的两处真实缺陷）
 * ---------------------------------------------------------------------
 * 来源：diag-r116.py 迁移到 #151 新契约后，对比度样本换成融合区真实元素，
 * 浅色档实测两处不达标（深色档本来就过）：
 *
 * 65.1 口碑指数等级色被当文字色用
 *   eeScoreLevel() 的 color 是**图形色**（气泡填充 / 圆点 / 胶囊底边），
 *   饱和度高：#efa23c 在 chip(#f1f2f4) 上仅 1.89:1，#28b894 2.24:1，
 *   #12a37c 2.86:1 —— 总分 65.5、等级胶囊「中等」、平台清单分值、
 *   气泡浮层等级全都直接用了它。
 *   修法：JS 增加 ink（同色系深墨），只给文字用；图形仍用 color。
 *     优秀 #096b50 / 良好 #0a6e54 / 中等 #8a5a06 /
 *     偏弱 #96461a / 待改善 #b32626
 *   实测 chip 底 5.29–5.82、12% 胶囊底 4.89–5.34，全部过 AA。
 *   DOM 契约：--ee-bb-c = 图形色，--ee-bb-ink = 文字色。
 *
 * 65.2 词条面板导语小字用了装饰色
 *   .word-section-intro > div > small 走 --zs-text-3(#a3a3a3)，
 *   白底仅 2.52:1。它是**要读的说明文案**（「词条按情感分组 · 悬停看
 *   出现次数 · 可只看某一类」），不是装饰，改用 --zs-muted(#666) → 5.74:1。
 *   同段 §48 的 color 声明是 (0,2,1)，这里同级 + 更后源顺序覆盖。
 * ===================================================================== */

/* --- 65.1 等级色：文字一律走 --ee-bb-ink ------------------------------- */
.dashboard-content .ee-score-panel .ee-bb-total-num {
  color: var(--ee-bb-ink, var(--zs-text-1)) !important;
}
.dashboard-content .ee-score-panel .ee-bb-total-lv {
  color: var(--ee-bb-ink, var(--zs-text-1)) !important;
}
.dashboard-content .ee-score-panel .ee-bb-item-val {
  color: var(--ee-bb-ink, var(--zs-text-1)) !important;
}
.ee-bbt-head > .ee-bbt-lv {
  color: var(--ee-bb-ink, var(--zs-text-1)) !important;
}
/* 深色：ink 是浅色深墨，在深底上会反过来不合格 → 统一提亮。
   实测 chip(#12281f) 8.45–11.92、12% 胶囊底 7.2–8.98，余量充足。 */
html[data-theme="dark"] .dashboard-content .ee-score-panel .ee-bb-total-num,
html[data-theme="dark"] .dashboard-content .ee-score-panel .ee-bb-total-lv,
html[data-theme="dark"] .dashboard-content .ee-score-panel .ee-bb-item-val,
html[data-theme="dark"] .ee-bbt-head > .ee-bbt-lv {
  color: var(--zs-brand-ink-deep) !important;
}
/* 深色下五档仍需可区分：按 --ee-bb-c 的色相分派提亮墨色 */
html[data-theme="dark"] .ee-bb-total[style*="#efa23c"] .ee-bb-total-num,
html[data-theme="dark"] .ee-bb-total[style*="#efa23c"] .ee-bb-total-lv,
html[data-theme="dark"] .ee-bb-item[style*="#efa23c"] .ee-bb-item-val {
  color: #f7dfa8 !important;
}
html[data-theme="dark"] .ee-bb-total[style*="#e8845f"] .ee-bb-total-num,
html[data-theme="dark"] .ee-bb-total[style*="#e8845f"] .ee-bb-total-lv,
html[data-theme="dark"] .ee-bb-item[style*="#e8845f"] .ee-bb-item-val {
  color: #f7c4ae !important;
}
html[data-theme="dark"] .ee-bb-total[style*="#d53f3f"] .ee-bb-total-num,
html[data-theme="dark"] .ee-bb-total[style*="#d53f3f"] .ee-bb-total-lv,
html[data-theme="dark"] .ee-bb-item[style*="#d53f3f"] .ee-bb-item-val {
  color: #ffa8a5 !important;
}

/* --- 65.2 词条面板导语：装饰灰 → 可读灰 ------------------------------- */
.dashboard-content .word-section-intro > div > small,
.word-section-intro > div > small {
  color: var(--zs-muted) !important;
}

/* ==========================================================================
 * 66. #155 口碑指数卡重排：左 / 中 / 右三栏 + 拉开与上方 KPI 的间距
 * --------------------------------------------------------------------------
 * 需求：
 *   左＝情感净值气泡图；
 *   中＝「综合口碑指数 · 样本加权」模块，下方豆包 / 千问等平台清单排成
 *       **一列**，整列窄长；
 *   右＝平台情感对比模块；
 *   口碑指数面板与上方 KPI 卡拉开适当距离。
 *
 * 结构（interactions.js #155 已把 .ee-platform 移入 .ee-score 末尾）：
 *   .ee-score
 *     .ee-head            主标题（跨整行）
 *     .ee-bb-body         display:contents → 拆出两个 grid 项
 *       .ee-bb-chart      左栏（气泡图 + 图例）
 *       .ee-bb-side       中栏（总分 + 三指标 + 单列平台清单，窄长）
 *     .ee-platform        右栏（平台情感对比，is-embedded）
 *     .ee-bb-legend       移入 .ee-bb-chart（JS）
 *     .ee-note            跨整行脚注
 *
 * 层叠裁决：§57.4 / §63 的 `.dashboard-content .ee-score-panel ...` 是
 * (0,3,1) 起，本段一律同级或更高特异性 + !important + 更后源顺序。
 * ========================================================================== */

/* --- 66.1 面板与上方 KPI 拉开间距 --------------------------------------- */
/* §57.4 原 margin-top:0 让面板紧贴 KPI（用户反馈太近）。抬到 22px，
   与板块内其它子区块（词条面板 / 趋势）的节奏一致。 */
.dashboard-content .ee-score-panel {
  margin-top: 22px !important;
}

/* --- 66.2 三栏网格 ------------------------------------------------------ */
/* 左气泡图吃满剩余宽度，中栏固定 248px 窄长，右栏平台情感对比 320px。
   1480 版心下左栏约 760px，气泡图（viewBox 480×300）渲染舒展。 */
.dashboard-content .ee-score-panel .ee-score {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) 248px 320px !important;
  grid-template-areas:
    "head head head"
    "chart side platform"
    "note note note" !important;
  gap: 0 24px !important;
  align-items: start !important;
}
.dashboard-content .ee-score-panel .ee-score > .ee-head {
  grid-area: head !important;
}
/* body 拆框：让 chart / side 直接成为 .ee-score 的 grid 项 */
.dashboard-content .ee-score-panel .ee-bb-body {
  display: contents !important;
}
.dashboard-content .ee-score-panel .ee-bb-chart {
  grid-area: chart !important;
  max-width: none !important;
  width: 100% !important;
}
.dashboard-content .ee-score-panel .ee-bb-side {
  grid-area: side !important;
}
.dashboard-content .ee-score-panel .ee-score > .ee-platform {
  grid-area: platform !important;
}
.dashboard-content .ee-score-panel .ee-score > .ee-note {
  grid-area: note !important;
}

/* --- 66.3 中栏窄长：平台清单强制单列 ------------------------------------ */
/* 覆盖 §57.4 的 repeat(2,…) 与 @860 的两列：豆包 / 千问 / DeepSeek / 元宝 /
   Kimi 五条 + 综合，自上而下排成一列，整列窄长。 */
.dashboard-content .ee-score-panel .ee-bb-list {
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 6px !important;
}
/* 中栏总分数字收一档（36→30），适配 248px 窄列 */
.dashboard-content .ee-score-panel .ee-bb-total-num > strong {
  font-size: 30px !important;
}
/* 三指标行：窄列下说明文案换行不挤，名称 / 数值保持基线对齐 */
.dashboard-content .ee-score-panel .ee-bb-side .ee-score-row {
  grid-template-columns: auto auto !important;
  gap: 4px 10px !important;
}
.dashboard-content .ee-score-panel .ee-bb-side .ee-score-row em {
  grid-column: 1 / -1 !important;
  text-align: left !important;
}

/* --- 66.4 右栏平台情感对比：从属分区，左侧发丝分隔 ---------------------- */
/* 平台卡已移入 .ee-score（不再是 .ee-score-panel 直接子元素），
   §63.2 的 `> .ee-platform.is-embedded` 顶部分隔不再命中，这里改为
   左侧竖分隔 + 左内边距，与中栏区隔。背景仍透明（§57.4 后代选择器命中）。 */
.dashboard-content .ee-score-panel .ee-score > .ee-platform.is-embedded {
  margin-top: 0 !important;
  padding-top: 0 !important;
  border-top: 0 !important;
  padding-left: 22px !important;
  border-left: 1px solid var(--zs-line) !important;
}
/* 右栏五行堆叠条：名称列回收一档，给堆叠条与数值留足宽度 */
.dashboard-content .ee-score-panel .ee-score > .ee-platform.is-embedded .ee-ps-row {
  grid-template-columns: 64px minmax(0, 1fr) 80px !important;
  gap: 10px !important;
}

/* --- 66.5 图例移入左栏底部 ---------------------------------------------- */
.dashboard-content .ee-score-panel .ee-bb-chart .ee-bb-legend {
  margin-top: 12px !important;
}

/* --- 66.6 深色：右栏分隔线走令牌 ---------------------------------------- */
html[data-theme="dark"] .dashboard-content .ee-score-panel .ee-score > .ee-platform.is-embedded {
  border-left-color: var(--zs-line) !important;
}

/* --- 66.7 响应式 -------------------------------------------------------- */
/* 1180：中栏收窄到 220px、右栏 280px，左栏仍吃满剩余 */
@media (max-width: 1180px) {
  .dashboard-content .ee-score-panel .ee-score {
    grid-template-columns: minmax(0, 1fr) 220px 280px !important;
    gap: 0 18px !important;
  }
  .dashboard-content .ee-score-panel .ee-score > .ee-platform.is-embedded {
    padding-left: 16px !important;
  }
  .dashboard-content .ee-score-panel .ee-bb-total-num > strong { font-size: 27px !important; }
}
/* 860：三栏降为两栏（左气泡图 + 中窄长），平台情感对比整行落到下方 */
@media (max-width: 860px) {
  .dashboard-content .ee-score-panel .ee-score {
    grid-template-columns: minmax(0, 1fr) 240px !important;
    grid-template-areas:
      "head head"
      "chart side"
      "platform platform"
      "note note" !important;
    gap: 0 18px !important;
  }
  .dashboard-content .ee-score-panel .ee-score > .ee-platform.is-embedded {
    margin-top: 16px !important;
    padding-top: 16px !important;
    padding-left: 0 !important;
    border-left: 0 !important;
    border-top: 1px solid var(--zs-line) !important;
  }
  .dashboard-content .ee-score-panel .ee-bb-chart { max-width: 560px !important; }
}
/* 700：单列堆叠，气泡图 → 综合模块 → 平台情感对比 → 脚注 */
@media (max-width: 700px) {
  .dashboard-content .ee-score-panel { margin-top: 16px !important; }
  .dashboard-content .ee-score-panel .ee-score {
    grid-template-columns: minmax(0, 1fr) !important;
    grid-template-areas:
      "head"
      "chart"
      "side"
      "platform"
      "note" !important;
    gap: 16px 0 !important;
  }
  .dashboard-content .ee-score-panel .ee-bb-chart { max-width: 560px !important; margin: 0 auto !important; }
  .dashboard-content .ee-score-panel .ee-score > .ee-platform.is-embedded {
    margin-top: 0 !important;
    padding-top: 16px !important;
  }
  .dashboard-content .ee-score-panel .ee-bb-total-num > strong { font-size: 28px !important; }
}

/* --- 66.8 #156 保真度增强区恢复：维度覆盖雷达 + 平台保真度竖柱 ---------- */
/* #151 删合并卡时连同 dims/pcc 宿主一起移除；#156 按用户要求恢复这两块
   （**不含环形图**）。渲染函数 eeRenderDims / eeRenderPlatformCompleteness
   与全部图形 CSS（§54.4 雷达 27 条 / §55 竖柱 46 条）从未删除，这里只补
   「独立增强区」的容器外观：白底面板 + 内部两张浅底子卡。
   双列比例沿用 §54.4 的 1.5fr:1fr（雷达需更宽），920px 降单列由其响应式负责。 */
.dashboard-content .effect-extra.is-restored {
  margin: 22px 0 0 !important;
  padding: 18px 20px !important;
  background: var(--zs-card) !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-panel) !important;
  box-shadow: var(--zs-shadow-card, 0 8px 24px rgba(0, 0, 0, .06)) !important;
}
.dashboard-content .effect-extra.is-restored .ee-grid {
  gap: 16px !important;
}
/* 子卡：浅底分区（与 §52 合并卡内子卡同构），去掉独立 panel 的厚阴影 */
.dashboard-content .effect-extra.is-restored .ee-card {
  background: var(--zs-sunken) !important;
  background-image: none !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: var(--zs-r-card) !important;
  box-shadow: none !important;
  padding: 16px 18px !important;
  margin: 0 !important;
}
.dashboard-content .effect-extra.is-restored .ee-card:hover {
  border-color: var(--zs-brand-100) !important;
  box-shadow: none !important;
}
/* 深色：容器与子卡走令牌，避免白卡闪白 */
html[data-theme="dark"] .dashboard-content .effect-extra.is-restored {
  background: var(--zs-card) !important;
  border-color: var(--zs-line) !important;
}
html[data-theme="dark"] .dashboard-content .effect-extra.is-restored .ee-card {
  background: var(--zs-sunken) !important;
  border-color: var(--zs-line) !important;
}
@media (max-width: 700px) {
  .dashboard-content .effect-extra.is-restored { padding: 14px 14px !important; margin-top: 16px !important; }
}

/* ==========================================================================
 * 67. #158 详情页「区间洞察」左卡三形态
 * --------------------------------------------------------------------------
 * 需求（用户原文）：
 *   声量详情页底部左卡   → 显示「效果总结」（文字结论）
 *   声誉详情页底部左卡   → 正面 / 中性 / 负面三类词条「竖排并列」
 *   保真度详情页底部左卡 → 已提及 / 未提及核心价值词，同样「并列竖排」
 *
 * 「并列竖排」的落地口径：多列**横向并排**，每列内部词条**纵向逐行**排列。
 *   与报告页 §53.1 的 flex-wrap 云团排布分道：
 *     报告页容器 .word-list.is-cloud  → 云状（字号即频次，角标 hover 才现）
 *     详情页容器 .word-list.is-rows   → 竖排行（统一字号，频次常驻右端）
 *   interactions.js::initWordHeat 已加守卫：带 .is-rows 的容器不再补
 *   .is-cloud，两形态互不污染。
 *
 * 结构（question-detail.html #158 双宿主 + question-detail.js::applyInsightShape）：
 *   .panel.qd-insight.qd-insight-words.word-section-panel
 *     .qd-sub-head > #qd-insight-title + #qd-word-viewall（声量态隐藏）
 *     #qd-words-note
 *     ul#qd-summary-list.qd-insight-list   ← 声量态
 *     #qd-word-wrap.word-groups-grid       ← 声誉 / 保真度态
 *       .word-subsection > #qd-word-groups.word-direct-grid
 *         .word-direct-group.{positive|neutral|negative|mentioned|not-mentioned}-words
 *           .word-direct-title > span + i（词数胶囊）
 *           .word-list.is-rows > .word-list-row[data-count] > span + b
 *   面板形态类：.is-summary / .is-rep（3 列）/ .is-cmp（2 列）
 *
 * 层叠裁决（本段全部 !important + 更后源顺序）：
 *   §53.1 `.dashboard-content .word-section-panel .word-list`          (0,3,2)
 *   §53.1 `.dashboard-content .word-section-panel .word-list.is-cloud` (0,4,2)
 *   §52.3 六条 `.… .positive-words .word-list-row > b`                 (0,4,2)
 *   §52   `.… .word-list-row > b { font-weight:700 }`                  (0,3,2)
 *   深色  `html[data-theme=dark] .dashboard-content .word-section-panel
 *          .word-list-row`                                            (0,4,2)
 *   → 本段选择器一律带 `.word-list.is-rows`（容器）或
 *     `.qd-insight-words.is-xxx`（形态），特异性 ≥ (0,4,2) 稳定接管。
 *   **媒体查询不增加特异性**：窄档规则同样必须把 .is-rows / .is-rep /
 *   .is-cmp 全部带上，否则被基础规则压住（#127 已踩过一次）。
 *
 * 字重契约：本段不引入任何 ≥650 的字重（probe-skin::fw_light_system
 *   要求全站重字重节点 ≤ 2）。§52 的频次 700 在此显式降到 500。
 * ========================================================================== */

/* --- 67.1 左卡标题 / 导语：服从全站字重与可读色 ------------------------- */
/* question-detail.css:706 是 `.qd-sub-head span{font-weight:700}`，
   而全站基线 span 为 400、小标题上限 500。三个子卡标题必须同档。 */
.dashboard-content .qd-insight .qd-sub-head > span {
  font-size: 15px !important;
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
  letter-spacing: -.01em !important;
}
/* 导语是**要读的口径说明**（「未提及词按缺失次数排序」等），
   不能用 --qd-faint(#9ca3af，白底仅 2.35:1)。走 --zs-muted(#666) → 5.74:1，
   与 §65.2 对报告页词条导语的处理一致。 */
.dashboard-content .qd-insight .qd-words-note {
  margin: 10px 0 0 !important;
  font-size: 11.5px !important;
  font-weight: 300 !important;
  line-height: 1.65 !important;
  color: var(--zs-muted) !important;
}
/* 「查看全部」按钮与标题基线对齐（.qd-sub-head 是 align-items:baseline） */
.dashboard-content .qd-insight .qd-sub-head > .ee-viewall-btn {
  align-self: center !important;
  flex: 0 0 auto !important;
}

/* --- 67.2 形态 A：声量「效果总结」文字列表 ----------------------------- */
/* 复用 #149 前的 .qd-insight-list 视觉（圆点 + 语义色），但 id 是新的
   #qd-summary-list，故 diag-r149::old_insight_removed 仍然成立。 */
.dashboard-content .qd-insight-words.is-summary .qd-insight-list {
  margin: 14px 0 0 !important;
  gap: 12px !important;
}
.dashboard-content .qd-insight-words.is-summary .qd-insight-list li {
  font-size: 12.5px !important;
  font-weight: 300 !important;
  line-height: 1.78 !important;
  color: var(--zs-text-2) !important;
}
/* 结论里的关键数值：500 足够醒目（原 question-detail.css 是 700）。
   语义色不再另设 —— 状态由左侧圆点（is-warn / is-bad）承担。 */
.dashboard-content .qd-insight-words.is-summary .qd-insight-list li b {
  font-weight: 500 !important;
  color: var(--zs-text-1) !important;
  font-variant-numeric: tabular-nums !important;
}
/* 空态：单条提示撑住卡片高度，避免左卡塌成一条线 */
.dashboard-content .qd-insight-words.is-summary .qd-insight-list li:only-child {
  padding: 12px 14px 12px 26px !important;
  border: 1px dashed var(--zs-line) !important;
  border-radius: 12px !important;
  background: var(--zs-sunken) !important;
}
.dashboard-content .qd-insight-words.is-summary .qd-insight-list li:only-child::before {
  left: 12px !important;
  top: 19px !important;
}

/* --- 67.3 左卡内部列数：声誉 3 列 / 保真度 2 列 ------------------------ */
/* .word-groups-grid 只有一个 .word-subsection，§34.4 的 :has 规则已把它
   收成单列铺满；这里裁决的是它内部 .word-direct-grid 的词卡列数。
   question-detail.css:725 是单列（纵向堆三块），@1200&min-701 才三列，
   与「并列竖排」的要求不符 —— 桌面起就必须并排。 */
.dashboard-content .qd-insight-words .word-groups-grid {
  margin-top: 12px !important;
}
/* align-items:stretch（不是 §53.1 的 start）：三组行数天然不等
   （实测声誉 7/3/3），start 会让三个容器底部参差、卡片右下角出现
   阶梯状空白。stretch 让各列等高，配合 67.4 的 flex:1 词列表铺满。 */
.dashboard-content .qd-insight-words .word-direct-grid {
  display: grid !important;
  align-items: stretch !important;
  gap: 12px !important;
}
.dashboard-content .qd-insight-words.is-rep .word-direct-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}
.dashboard-content .qd-insight-words.is-cmp .word-direct-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
/* 词卡自身也要成为纵向 flex，才能把高度传导给内部 .word-list */
.dashboard-content .qd-insight-words .word-direct-group {
  display: flex !important;
  flex-direction: column !important;
  min-width: 0 !important;
}
.dashboard-content .qd-insight-words .word-direct-group > .word-list.is-rows {
  flex: 1 1 auto !important;
}
/* 保真度只有两列，标题「已提及核心价值词」较长，字号收半档防换行 */
.dashboard-content .qd-insight-words.is-cmp .word-direct-title {
  font-size: 12px !important;
  gap: 6px !important;
}

/* --- 67.4 竖排容器：接管 §53.1 的云团排布 ------------------------------ */
.dashboard-content .word-section-panel .word-list.is-rows {
  display: flex !important;
  flex-direction: column !important;
  flex-wrap: nowrap !important;
  align-items: stretch !important;
  align-content: flex-start !important;
  justify-content: flex-start !important;
  gap: 4px !important;
  grid-template-columns: none !important;
  counter-reset: none !important;
  padding: 9px 8px 10px !important;
  min-height: 132px !important;
  /* 保真度每列 20 词（真实核心价值词总量），268px 只能露 8 行，
     且细滚动条在浅色下几乎不可见 —— 用户会以为只有 8 个词。
     抬到 372px（约 12 行）并在 67.4b 补底部渐隐 + 「滚动查看全部」提示，
     让「还有更多」可被发现；完整清单仍走「查看全部」弹层。 */
  max-height: 372px !important;
  overflow-y: auto !important;
  overflow-x: hidden !important;
  border: 1px solid var(--zs-line) !important;
  border-radius: 12px !important;
  background: var(--zs-word-cloud-bg, var(--zs-sunken)) !important;
  background-image: none !important;
  scrollbar-width: thin;
  scrollbar-color: var(--zs-line-strong) transparent;
}
.dashboard-content .word-section-panel .word-list.is-rows::-webkit-scrollbar { width: 6px; }
.dashboard-content .word-section-panel .word-list.is-rows::-webkit-scrollbar-track { background: transparent; }
.dashboard-content .word-section-panel .word-list.is-rows::-webkit-scrollbar-thumb {
  background: var(--zs-line-strong);
  border-radius: 999px;
}
.dashboard-content .word-section-panel .word-list.is-rows::-webkit-scrollbar-thumb:hover {
  background: var(--zs-brand);
}

/* --- 67.4b 溢出可发现性：底部渐隐 + 计数提示 ---------------------------
 * 保真度每列 20 词，容器 372px 只露约 12 行。细滚动条在浅色下几乎看不见，
 * 必须给出「下面还有」的明确信号，否则用户会误判词条总量。
 *
 * 两道提示，互相独立、都不依赖 JS：
 *   ① 词卡底部 .qd-words-more 计数条（由 question-detail.js 在溢出时写入，
 *      文案「还有 N 词 · 滚动查看」），常驻可见，滚到底自动变「已显示全部」；
 *   ② 容器底部渐隐遮罩，用 sticky 伪元素实现 —— 但 .word-list 是 flex 容器，
 *      ::after 会成为 flex item 参与布局，故改用 mask-image 渐隐最后 18px。
 *      mask 在滚动容器上会连同内容一起滚，因此只在「未滚到底」时启用，
 *      由 JS 写的 data-overflow="bottom|none" 控制。
 * 不支持 mask 的浏览器只是没有渐隐，计数条仍在 → 优雅降级。 */
.dashboard-content .qd-insight-words .word-direct-group > .qd-words-more {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 5px !important;
  flex: 0 0 auto !important;
  margin: 7px 0 0 !important;
  padding: 5px 8px !important;
  border-radius: 8px !important;
  background: var(--zs-word-halo, var(--zs-brand-50)) !important;
  font-size: 10.5px !important;
  font-weight: 400 !important;
  line-height: 1.5 !important;
  letter-spacing: .01em !important;
  color: var(--zs-word-ink, var(--zs-brand-ink-deep)) !important;
  white-space: nowrap !important;
}
.dashboard-content .qd-insight-words .word-direct-group > .qd-words-more::before {
  content: '' !important;
  width: 0 !important;
  height: 0 !important;
  flex: 0 0 auto;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 5px solid currentColor;
  opacity: .75;
}
/* 已滚到底：箭头翻转向上，文案由 JS 改为「已显示全部 N 词」 */
.dashboard-content .qd-insight-words .word-direct-group > .qd-words-more.is-end::before {
  border-top: 0;
  border-bottom: 5px solid currentColor;
}
.dashboard-content .word-section-panel .word-list.is-rows[data-overflow="bottom"] {
  -webkit-mask-image: linear-gradient(180deg, #000 calc(100% - 20px), transparent 100%);
  mask-image: linear-gradient(180deg, #000 calc(100% - 20px), transparent 100%);
}

/* --- 67.5 竖排词行：词名左 / 频次右，统一字号 -------------------------- */
/* §53.1 把词片写成 inline-flex + flex:0 0 auto + translateY 抖动（云感），
   竖排要的是等宽满行、基线整齐，故逐项归零。
   字号统一 13px：左卡三列时每列约 170px，字号若按频次浮动（12→30px）
   长词必然折行。频次改由右端常驻数字 + 极淡热度条编码，信息不丢。 */
.dashboard-content .word-section-panel .word-list.is-rows .word-list-row {
  position: relative !important;
  display: flex !important;
  flex: 0 0 auto !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 8px !important;
  width: 100% !important;
  max-width: 100% !important;
  padding: 5px 8px !important;
  margin: 0 !important;
  border: 0 !important;
  border-left: 0 !important;
  border-radius: 8px !important;
  background: transparent !important;
  background-image: none !important;
  box-shadow: none !important;
  counter-increment: none !important;
  font-size: 13px !important;
  line-height: 1.45 !important;
  transform: none !important;
  cursor: default;
  transition: background .16s ease;
}
/* 热度微条：贴行底的极淡进度线，替代云版的字号编码。
   --zs-word-pct 由 initWordHeat 按组内 max 归一（最小 8%）。 */
.dashboard-content .word-section-panel .word-list.is-rows .word-list-row::after {
  content: '' !important;
  display: block !important;
  position: absolute !important;
  left: 8px !important;
  right: 8px !important;
  bottom: 2px !important;
  width: auto !important;
  height: 2px !important;
  border-radius: 999px !important;
  background: linear-gradient(90deg,
    var(--zs-word-bar, var(--zs-brand)) 0 var(--zs-word-pct, 60%),
    var(--zs-word-track, rgba(120, 140, 132, .16)) var(--zs-word-pct, 60%) 100%) !important;
  opacity: .5 !important;
  pointer-events: none;
}
/* 词名：占满剩余宽度，超长省略（title 里有完整词 + 口径 + 次数） */
.dashboard-content .word-section-panel .word-list.is-rows .word-list-row > span {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  font-size: inherit !important;
  font-weight: 400 !important;
  line-height: inherit !important;
  letter-spacing: -.005em !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  opacity: 1 !important;
}
/* 频次：常驻可见（不是 hover 角标）。§52 的 700 在此降到 500，
   服从全站字重契约；颜色沿用六类 ink（白底 5.91–7.34，全部过 AA）。 */
.dashboard-content .word-section-panel .word-list.is-rows .word-list-row > b {
  position: static !important;
  left: auto !important;
  bottom: auto !important;
  transform: none !important;
  flex: 0 0 auto !important;
  min-width: 26px !important;
  padding: 0 !important;
  border-radius: 0 !important;
  text-align: right !important;
  font-size: 11.5px !important;
  font-weight: 500 !important;
  font-variant-numeric: tabular-nums !important;
  line-height: 1.45 !important;
  white-space: nowrap !important;
  color: var(--zs-word-ink, var(--zs-brand-ink-deep)) !important;
  background: none !important;
  box-shadow: none !important;
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: none;
  z-index: auto;
}
/* hover：同类色浅底托住整行，不做位移（竖排列表位移会显得抖） */
.dashboard-content .word-section-panel .word-list.is-rows .word-list-row:hover {
  background: var(--zs-word-halo, var(--zs-brand-50)) !important;
  border: 0 !important;
  transform: none !important;
  box-shadow: none !important;
}
.dashboard-content .word-section-panel .word-list.is-rows .word-list-row:hover::after {
  opacity: .85 !important;
}
/* 词名 ink：显式接管，避免 §52.3 的 `> span{color:var(--zs-text-1)}`
   （0,4,2）把三类情感词全压成同一种墨色，丢掉语义区分。 */
.dashboard-content .word-section-panel .positive-words .word-list.is-rows .word-list-row > span { color: #0b6b4e !important; }
.dashboard-content .word-section-panel .negative-words .word-list.is-rows .word-list-row > span { color: #a32626 !important; }
.dashboard-content .word-section-panel .neutral-words .word-list.is-rows .word-list-row > span { color: #4d5a66 !important; }
.dashboard-content .word-section-panel .mentioned-words .word-list.is-rows .word-list-row > span { color: #195fa6 !important; }
.dashboard-content .word-section-panel .not-mentioned-words .word-list.is-rows .word-list-row > span { color: #7f530f !important; }

/* 空列：当前筛选下该组无词时的占位，保持列高一致 */
.dashboard-content .word-section-panel .word-list.is-rows .qd-words-empty {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex: 1 1 auto !important;
  min-height: 96px !important;
  padding: 10px 8px !important;
  font-size: 11.5px !important;
  font-weight: 300 !important;
  line-height: 1.6 !important;
  text-align: center !important;
  color: var(--zs-muted) !important;
}

/* --- 67.6 弹层：两组时不留空列 ---------------------------------------- */
/* §53.2 硬写 repeat(3,1fr)，保真度只有「已提及 / 未提及」两组，
   右侧会空出三分之一。JS 已写 data-wa-cols（渲染期 = meta.groups.length，
   waRenderBody 再按筛选后实际列数同步），这里按属性裁决。 */
.kn-modal .ee-wordall.is-cols[data-wa-cols="2"] {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
.kn-modal .ee-wordall.is-cols[data-wa-cols="1"] {
  grid-template-columns: minmax(0, 1fr) !important;
}

/* --- 67.7 深色 -------------------------------------------------------- */
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-rows {
  border-color: var(--zs-line) !important;
  background: var(--zs-word-cloud-bg, rgba(255, 255, 255, .022)) !important;
  scrollbar-color: var(--zs-line-strong) transparent;
}
/* §52 深色段 (0,4,2) 把词行写成实心卡 + 描边 + 左色条，
   本段同级 + 更后源顺序恢复「无底色无边框」，与浅色形态一致。 */
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-rows .word-list-row {
  background: transparent !important;
  background-image: none !important;
  border: 0 !important;
  border-left: 0 !important;
  box-shadow: none !important;
  --zs-word-track: rgba(180, 205, 195, .16);
}
/* 深色 bar 是提亮色（#6cb2f0 / #efa23c 等），.5 透明度下每行都像一条
   实心分隔线，整列读起来像表格而非热度编码。压到 .32 让它退回「微条」
   语义；hover 时仍抬到 .85 给出明确反馈。 */
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-rows .word-list-row::after {
  opacity: .32 !important;
}
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-rows .word-list-row:hover::after {
  opacity: .85 !important;
}
html[data-theme="dark"] .dashboard-content .word-section-panel .word-list.is-rows .word-list-row:hover {
  background: var(--zs-word-halo, var(--zs-chip)) !important;
}
/* 溢出提示条深色：底走各类 halo（已在 §53.4 按类重映射），
   文字走提亮 ink，与词名同色系但更亮一档，保证 ≥4.5:1。 */
html[data-theme="dark"] .dashboard-content .qd-insight-words .word-direct-group > .qd-words-more {
  background: var(--zs-word-halo, var(--zs-chip)) !important;
  color: var(--zs-word-ink, var(--zs-text-1)) !important;
}
/* 深色词名 / 频次用提亮 ink（on #0f211b 全部 ≥ 6.4:1）。
   §53.4 的 `html… .mentioned-words .word-list-row b`（0,4,2）与本段
   容器版（0,5,2）相比更低，故这里稳定接管。 */
html[data-theme="dark"] .dashboard-content .word-section-panel .positive-words .word-list.is-rows .word-list-row > span,
html[data-theme="dark"] .dashboard-content .word-section-panel .positive-words .word-list.is-rows .word-list-row > b { color: #6fe3bd !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .negative-words .word-list.is-rows .word-list-row > span,
html[data-theme="dark"] .dashboard-content .word-section-panel .negative-words .word-list.is-rows .word-list-row > b { color: #ff9a9a !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .neutral-words .word-list.is-rows .word-list-row > span,
html[data-theme="dark"] .dashboard-content .word-section-panel .neutral-words .word-list.is-rows .word-list-row > b { color: #c3ced8 !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .mentioned-words .word-list.is-rows .word-list-row > span,
html[data-theme="dark"] .dashboard-content .word-section-panel .mentioned-words .word-list.is-rows .word-list-row > b { color: #93c8f5 !important; }
html[data-theme="dark"] .dashboard-content .word-section-panel .not-mentioned-words .word-list.is-rows .word-list-row > span,
html[data-theme="dark"] .dashboard-content .word-section-panel .not-mentioned-words .word-list.is-rows .word-list-row > b { color: #f5c884 !important; }

/* 声量总结深色：§27.5 已把 li / b 提到 --zs-text-2，这里补空态底与
   数值提亮（b 是结论里的关键数字，应比正文更亮一档）。 */
html[data-theme="dark"] .dashboard-content .qd-insight-words.is-summary .qd-insight-list li b {
  color: var(--zs-text-1) !important;
}
html[data-theme="dark"] .dashboard-content .qd-insight-words.is-summary .qd-insight-list li:only-child {
  border-color: var(--zs-line) !important;
  background: var(--zs-sunken) !important;
}

/* --- 67.8 响应式 ------------------------------------------------------ */
/* 1200 起 question-detail.css 把 .qd-insight-grid.has-words 收成单列，
   左卡铺满整行 → 三列 / 两列都更舒展，词行不必再省略号截断。 */
@media (max-width: 1200px) and (min-width: 701px) {
  .dashboard-content .qd-insight-words.is-rep .word-direct-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    gap: 14px !important;
  }
  .dashboard-content .qd-insight-words.is-cmp .word-direct-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 14px !important;
  }
  .dashboard-content .word-section-panel .word-list.is-rows {
    max-height: 396px !important;
    padding: 10px 9px 11px !important;
  }
}

@media (max-width: 900px) {
  .dashboard-content .word-section-panel .word-list.is-rows {
    gap: 4px !important;
    padding: 9px 7px 10px !important;
    min-height: 120px !important;
    max-height: 340px !important;
  }
  .dashboard-content .word-section-panel .word-list.is-rows .word-list-row {
    font-size: 12.5px !important;
    padding: 5px 7px !important;
    gap: 6px !important;
  }
  .dashboard-content .word-section-panel .word-list.is-rows .word-list-row > b {
    font-size: 11px !important;
    min-width: 24px !important;
  }
  .dashboard-content .qd-insight .qd-sub-head > span { font-size: 14.5px !important; }
}

/* 700 档：三列每列不足 100px，长词必被截断 → 词卡改纵向堆叠，
   但**列内仍是竖排**（用户要求的核心形态不变）。 */
@media (max-width: 700px) {
  .dashboard-content .qd-insight-words.is-rep .word-direct-grid,
  .dashboard-content .qd-insight-words.is-cmp .word-direct-grid {
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 12px !important;
  }
  .dashboard-content .word-section-panel .word-list.is-rows {
    min-height: 0 !important;
    max-height: 288px !important;
    gap: 3px !important;
    padding: 8px 7px 9px !important;
  }
  .dashboard-content .word-section-panel .word-list.is-rows .word-list-row {
    font-size: 12.5px !important;
    padding: 5px 7px !important;
  }
  .dashboard-content .word-section-panel .word-list.is-rows .qd-words-empty {
    min-height: 56px !important;
  }
  .dashboard-content .qd-insight .qd-sub-head > span { font-size: 14px !important; }
  .dashboard-content .qd-insight .qd-words-note { font-size: 11px !important; }
  /* 弹层两组在窄屏同样降单列（§53.2 的 @860 已处理 3 列，
     但属性选择器 (0,4,0) 会压过它的 (0,3,0)，必须在此显式收敛） */
  .kn-modal .ee-wordall.is-cols[data-wa-cols="2"],
  .kn-modal .ee-wordall.is-cols[data-wa-cols="1"] {
    grid-template-columns: minmax(0, 1fr) !important;
  }
}

/* 打印：竖排列表放开滚动高度，全部词一次印全 */
@media print {
  .dashboard-content .word-section-panel .word-list.is-rows {
    max-height: none !important;
    overflow: visible !important;
    border: 0 !important;
    background: #fff !important;
  }
  .dashboard-content .word-section-panel .word-list.is-rows .word-list-row::after {
    display: none !important;
  }
}

/* ==========================================================================
 * 68. 控制台顶栏滚动常驻（#162）
 * --------------------------------------------------------------------------
 * 需求：控制台页面的顶部导航固定在顶部显示，下滑不消失。
 *
 * 为什么单独开一段而不是改 layout-fix：
 *   layout-fix.css 的 `.page-shell.nav-hidden .floating-shell .topbar` 是
 *   全站收起态的**唯一真源**，报告页 / 问题详情页仍依赖它（那两页壳里还有
 *   filter-bar 托底，收起后顶部不会空）。这里只针对 `.has-console-nav`
 *   做定向反转，不动全局规则，报告页行为零影响。
 *
 * 特异性账（都必须压过 layout-fix 的 (0,4,1)）：
 *   .page-shell.has-console-nav.nav-hidden .floating-shell .topbar = (0,5,1) ✓
 *   皮肤层是 CSS 链最后一环，同级时源顺序也在后。
 *
 * 三层防线的第 ③ 层：JS 侧 projects.js 已不产生 nav-hidden、
 *   zhishu-shell.js::pinConsoleTopbar 用 MutationObserver 兜底拦截；
 *   本段保证即使类名漏网（bfcache 快照 / 未来新增脚本 / 探针注入），
 *   顶栏仍按可见态渲染，绝不出现「顶部整条消失」。
 * ===================================================================== */

/* --- 68.1 收起态强制还原为可见态 ---------------------------------------- */
.page-shell.has-console-nav.nav-hidden .floating-shell .topbar,
div.page-shell.has-console-nav.nav-hidden .floating-shell .topbar,
.page-shell.has-console-nav.nav-hidden .topbar {
  max-height: none !important;
  min-height: var(--zs-header-h) !important;
  height: var(--zs-header-h) !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  opacity: 1 !important;
  transform: none !important;
  visibility: visible !important;
  border-bottom-width: 1px !important;
  border-bottom-color: var(--zs-line) !important;
  pointer-events: auto !important;
}

/* 常驻态本体：不依赖 nav-visible 类是否被写入。
   高度用 --zs-header-h（>700 为 64、<=700 由 §58.3 改 58），
   与 syncConsoleOffset 量的实测值同源，避免壳高与 --shell-offset 打架。 */
.page-shell.has-console-nav .floating-shell .topbar,
.page-shell.has-console-nav .topbar {
  height: var(--zs-header-h) !important;
  max-height: none !important;
  opacity: 1 !important;
  transform: none !important;
  visibility: visible !important;
  /* 常驻后不需要收拢动画；留着 transition 反而会在主题切换时闪一下高度 */
  transition: background-color .2s var(--zs-ease), border-color .2s var(--zs-ease) !important;
}

/* --- 68.2 悬浮壳本身保持贴顶固定 ----------------------------------------
   layout-fix 已给 .floating-shell 写了 position:fixed;top:0，
   这里只做显式重申 + 关掉可能继承的位移，防止未来层叠改动把它推走。 */
.page-shell.has-console-nav .floating-shell {
  position: fixed !important;
  top: 0 !important;
  transform: none !important;
}

/* --- 68.3 窄屏汉堡浮层不被裁切（去掉 :not(.nav-hidden) 前置条件）---------
   §58.2 原规则带 :not(.nav-hidden)，是为了让收起态走 overflow:hidden
   把收拢动画藏干净。控制台不再收起，该前置条件已无意义，但若类名漏网
   就会重新裁掉浮层（菜单展开了却一项都点不到）。这里无条件放开。 */
@media (max-width: 1179px) {
  .page-shell.has-console-nav .floating-shell .topbar,
  .page-shell.has-console-nav .topbar {
    overflow: visible !important;
  }
}

/* --- 68.4 锚点落点让出常驻顶栏 ------------------------------------------
   顶栏不再收起 → 任何 scrollIntoView / 原生锚点都必须预留它的实测高度，
   否则目标标题会被压在顶栏下面。--shell-offset 由 syncConsoleOffset 写入
   （= 顶栏高 + 14），这里再留 8px 呼吸。 */
.page-shell.has-console-nav {
  scroll-padding-top: calc(var(--shell-offset, 86px) + 8px);
}
.page-shell.has-console-nav main section[id],
.page-shell.has-console-nav .ac-section[id],
.page-shell.has-console-nav .pj-page[id],
.page-shell.has-console-nav .nr-section[id] {
  scroll-margin-top: calc(var(--shell-offset, 86px) + 8px) !important;
}

/* --- 68.5 深色：常驻顶栏底色与描边 --------------------------------------
   浅色由 §3 的 rgba(255,255,255,.88) 提供；深色沿用 §27 的深墨玻璃。
   这里只补收起态反转后的边框色，避免深色下出现浅色亮线。 */
html[data-theme="dark"] .page-shell.has-console-nav.nav-hidden .floating-shell .topbar,
html[data-theme="dark"] .page-shell.has-console-nav.nav-hidden .topbar {
  border-bottom-color: var(--zs-line) !important;
  background: rgba(15, 33, 27, .88) !important;
}

/* --- 68.6 打印：顶栏回到文档流，不占每页顶部 ---------------------------- */
@media print {
  .page-shell.has-console-nav .floating-shell {
    position: static !important;
  }
  .page-shell.has-console-nav .floating-shell .topbar {
    height: auto !important;
    min-height: 0 !important;
    background: #fff !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
  }
  .page-shell.has-console-nav { scroll-padding-top: 0; }
}
