/* ==========================================================================
   全球神经科技产业全景 · Neurotech Landscape
   视觉风格：在册 —— 石墨青底色、黄铜信号、无发光、层级靠留白与分隔线
   颜色唯一权威在本文件。app.js 只输出 var(--token) 字符串，不持有十六进制色。
   见 docs/adr/0012-visual-identity-register.md（取代 docs/adr/0009-visual-language.md §3）
   ========================================================================== */

:root{
  color-scheme:dark;

  /* ── 表面 ─────────────────────────────────────────────── */
  --bg:#15191a;                 /* 页面底 */
  --surface-1:#1b2021;          /* 面板：筛选条、表格、抽屉、弹窗、侧栏 */
  --surface-2:#212829;          /* 抬起：卡片、KPI、赛道卡、页头 */
  --surface-3:#283031;          /* 悬停底、标签底、徽标底 */
  --surface-inset:#111516;      /* 输入框、条形槽、置信度槽 */
  --topbar-bg:rgba(21,25,26,.86);
  --sidebar-bg:rgba(24,29,30,.94);
  --scrim:rgba(6,8,9,.62);

  /* ── 文字（四档全部 ≥4.5:1，含最亮的面板 --surface-3）───── */
  --text-1:#e9efed;
  --text-2:#bcc7c5;
  --text-3:#a2b0ae;
  --text-4:#97a4a2;

  /* ── 线 ───────────────────────────────────────────────── */
  --border:#2f3a3a;
  --border-2:#232b2b;
  --border-strong:#3f4d4c;

  /* ── 强调 ─────────────────────────────────────────────── */
  --accent:#d9a441;
  --accent-hover:#e8bc63;
  --accent-weak:rgba(217,164,65,.13);
  --accent-border:rgba(217,164,65,.42);
  --accent-text:#d9a441;        /* 强调色当**文字**用时 */
  --on-accent:#1a1206;          /* 压在强调色块上的文字 */

  /* ── 公司状态（五个闭集取值）───────────────────────────── */
  --st-active:#5cb87f;
  --st-listed:#6a9fd4;
  --st-acquired:#cb85c0;
  --st-closed:#de9179;
  --st-undisclosed:#97a4a2;
  --st-active-weak:rgba(92,184,127,.14);
  --st-acquired-weak:rgba(203,133,192,.14);

  /* ── 置信度（三档）────────────────────────────────────── */
  --conf-high:#5cb87f;
  --conf-medium:#c9902f;
  --conf-low:#de9179;

  /* 「数据来源集」三族的颜色令牌（--src-*）已于 UI-005 拆除：站内不再有来源徽标。
     见 specs/UI-005-source-vocabulary-removal.md。 */

  /* ── 分类色（图表兜底、四层、头像）─────────────────────── */
  --cat-1:#6a9fd4;
  --cat-2:#cb85c0;
  --cat-3:#a498db;
  --cat-4:#5fb3ad;
  --cat-5:#5cb87f;
  --cat-6:#de9179;
  --cat-7:#97a4a2;

  /* ── 图表底衬 ─────────────────────────────────────────── */
  --chart-track:#283031;
  --chart-bar:var(--cat-7);

  /* ── 字母字标配色（十档，按企业 id 散列取用）───────────────
     app.js 的 monoTone() 只回一个档号，取值全在这里。 */
  --mono-1-bg:#1f2b34;  --mono-1-fg:#6a9fd4;
  --mono-2-bg:#1d2f27;  --mono-2-fg:#5cb87f;
  --mono-3-bg:#2e291a;  --mono-3-fg:#c9902f;
  --mono-4-bg:#2f2731;  --mono-4-fg:#cb85c0;
  --mono-5-bg:#1f2b34;  --mono-5-fg:#6a9fd4;
  --mono-6-bg:#292a36;  --mono-6-fg:#a498db;
  --mono-7-bg:#2e291a;  --mono-7-fg:#c9902f;
  --mono-8-bg:#1d2e2e;  --mono-8-fg:#5fb3ad;
  --mono-9-bg:#322926;  --mono-9-fg:#de9179;
  --mono-10-bg:#1d2f27; --mono-10-fg:#5cb87f;

  /* ── 专用徽标 ─────────────────────────────────────────── */
  --layer-tag-bg:rgba(164,152,219,.12);
  --layer-tag-fg:#a498db;
  --accent-badge-bg:rgba(217,164,65,.12);
  --accent-badge-fg:#d9a441;

  /* ── 提示条 ───────────────────────────────────────────── */
  --notice-warn-bg:rgba(201,144,47,.08);
  --notice-warn-border:rgba(201,144,47,.30);
  --notice-warn-fg:#e3bd72;
  --notice-info-bg:rgba(106,159,212,.08);
  --notice-info-border:rgba(106,159,212,.32);
  --notice-info-fg:#93bfdf;

  /* ── 滚动条 ───────────────────────────────────────────── */
  --scrollbar:#2f3a3a;
  --scrollbar-hover:#3f4d4c;

  /* ── 形状与投影（中性黑，不含任何彩色光晕）─────────────── */
  --radius:12px;
  --radius-sm:8px;
  --radius-xs:6px;
  --radius-pill:999px;
  --shadow-2:0 8px 24px rgba(0,0,0,.45);
  --shadow-3:0 18px 48px rgba(0,0,0,.55);
  --focus-ring:0 0 0 3px rgba(217,164,65,.35);

  --topbar-h:60px;
  --sidebar-w:236px;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Source Han Sans SC","Noto Sans CJK SC",Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
}

/* ==========================================================================
   浅色令牌
   --------------------------------------------------------------------------
   上面 :root 是深色（默认）。浅色块要写**两遍** —— 原生 CSS 无法让媒体查询
   与属性选择器共用同一个声明块：

     1) 系统偏好浅色，且用户没手动选深色；
     2) 用户手动选了浅色（压过系统偏好）。

   两块的声明必须**逐字相同**（只差缩进）。tools/check_data.js 有一条断言把守：
   它把两块取出来、去掉每行前导空白后逐字比对，不同就报红。
   要改浅色配色，两处一起改 —— 只改一处，那条断言会拦下。

   只列**取值随主题变**的令牌。形状、字体、间距与纯别名（--radius*、--font、
   --mono、--topbar-h、--sidebar-w、--chart-bar）留在 :root，不必重复。

   浅色配色全部逐对验算 ≥4.5:1。最差一档是字母字标 mono-8（5.12）。
   ========================================================================== */
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]){
    color-scheme:light;

    /* 表面：页面浅灰、面板与卡片纯白、悬停与标签再深一档 */
    --bg:#f4f6f4;
    --surface-1:#ffffff;
    --surface-2:#ffffff;
    --surface-3:#eaeeec;
    --surface-inset:#eaeeec;
    --topbar-bg:rgba(255,255,255,.86);
    --sidebar-bg:rgba(255,255,255,.94);
    --scrim:rgba(20,26,26,.34);

    /* 文字（四档全部 ≥4.5:1，最暗一档 --text-4 压在最深的 --surface-3 上为 4.94）*/
    --text-1:#141a1a;
    --text-2:#3c4747;
    --text-3:#4f5b5a;
    --text-4:#5c6867;

    --border:#dde3e1;
    --border-2:#e7ebe9;
    --border-strong:#b4bdbb;

    --accent:#7d5a10;
    --accent-hover:#6b4d0f;
    --accent-weak:rgba(125,90,16,.10);
    --accent-border:rgba(125,90,16,.38);
    --accent-text:#7d5a10;
    --on-accent:#ffffff;

    --st-active:#2b7149;
    --st-listed:#2c5f96;
    --st-acquired:#93386f;
    --st-closed:#a2432f;
    --st-undisclosed:#5c6867;
    --st-active-weak:rgba(43,113,73,.12);
    --st-acquired-weak:rgba(147,56,111,.10);

    --conf-high:#2b7149;
    --conf-medium:#94420e;
    --conf-low:#a2432f;

    --cat-1:#2c5f96;
    --cat-2:#93386f;
    --cat-3:#6356a5;
    --cat-4:#2a6f6a;
    --cat-5:#2b7149;
    --cat-6:#a2432f;
    --cat-7:#5c6867;

    --chart-track:#eaeeec;

    --mono-1-bg:#eaeff5;  --mono-1-fg:#2c5f96;
    --mono-2-bg:#eaf1ed;  --mono-2-fg:#2b7149;
    --mono-3-bg:#f4ece7;  --mono-3-fg:#94420e;
    --mono-4-bg:#f4ebf1;  --mono-4-fg:#93386f;
    --mono-5-bg:#eaeff5;  --mono-5-fg:#2c5f96;
    --mono-6-bg:#efeef6;  --mono-6-fg:#6356a5;
    --mono-7-bg:#f4ece7;  --mono-7-fg:#94420e;
    --mono-8-bg:#eaf1f0;  --mono-8-fg:#2a6f6a;
    --mono-9-bg:#f6ecea;  --mono-9-fg:#a2432f;
    --mono-10-bg:#eaf1ed; --mono-10-fg:#2b7149;

    --layer-tag-bg:rgba(99,86,165,.09);
    --layer-tag-fg:#6356a5;
    --accent-badge-bg:rgba(125,90,16,.09);
    --accent-badge-fg:#7d5a10;

    --notice-warn-bg:rgba(148,66,14,.07);
    --notice-warn-border:rgba(148,66,14,.26);
    --notice-warn-fg:#6d4a0d;
    --notice-info-bg:rgba(44,95,150,.07);
    --notice-info-border:rgba(44,95,150,.26);
    --notice-info-fg:#1f5486;

    --scrollbar:#cbd2d0;
    --scrollbar-hover:#aeb6b4;

    --shadow-2:0 8px 24px rgba(20,26,26,.10);
    --shadow-3:0 18px 48px rgba(20,26,26,.16);
    --focus-ring:0 0 0 3px rgba(125,90,16,.30);
  }
}
/* 与上面那块逐字相同（只差缩进）。改一处就要改两处，见本区块开头的说明。 */
:root[data-theme="light"]{
  color-scheme:light;

  /* 表面：页面浅灰、面板与卡片纯白、悬停与标签再深一档 */
  --bg:#f4f6f4;
  --surface-1:#ffffff;
  --surface-2:#ffffff;
  --surface-3:#eaeeec;
  --surface-inset:#eaeeec;
  --topbar-bg:rgba(255,255,255,.86);
  --sidebar-bg:rgba(255,255,255,.94);
  --scrim:rgba(20,26,26,.34);

  /* 文字（四档全部 ≥4.5:1，最暗一档 --text-4 压在最深的 --surface-3 上为 4.94）*/
  --text-1:#141a1a;
  --text-2:#3c4747;
  --text-3:#4f5b5a;
  --text-4:#5c6867;

  --border:#dde3e1;
  --border-2:#e7ebe9;
  --border-strong:#b4bdbb;

  --accent:#7d5a10;
  --accent-hover:#6b4d0f;
  --accent-weak:rgba(125,90,16,.10);
  --accent-border:rgba(125,90,16,.38);
  --accent-text:#7d5a10;
  --on-accent:#ffffff;

  --st-active:#2b7149;
  --st-listed:#2c5f96;
  --st-acquired:#93386f;
  --st-closed:#a2432f;
  --st-undisclosed:#5c6867;
  --st-active-weak:rgba(43,113,73,.12);
  --st-acquired-weak:rgba(147,56,111,.10);

  --conf-high:#2b7149;
  --conf-medium:#94420e;
  --conf-low:#a2432f;

  --cat-1:#2c5f96;
  --cat-2:#93386f;
  --cat-3:#6356a5;
  --cat-4:#2a6f6a;
  --cat-5:#2b7149;
  --cat-6:#a2432f;
  --cat-7:#5c6867;

  --chart-track:#eaeeec;

  --mono-1-bg:#eaeff5;  --mono-1-fg:#2c5f96;
  --mono-2-bg:#eaf1ed;  --mono-2-fg:#2b7149;
  --mono-3-bg:#f4ece7;  --mono-3-fg:#94420e;
  --mono-4-bg:#f4ebf1;  --mono-4-fg:#93386f;
  --mono-5-bg:#eaeff5;  --mono-5-fg:#2c5f96;
  --mono-6-bg:#efeef6;  --mono-6-fg:#6356a5;
  --mono-7-bg:#f4ece7;  --mono-7-fg:#94420e;
  --mono-8-bg:#eaf1f0;  --mono-8-fg:#2a6f6a;
  --mono-9-bg:#f6ecea;  --mono-9-fg:#a2432f;
  --mono-10-bg:#eaf1ed; --mono-10-fg:#2b7149;

  --layer-tag-bg:rgba(99,86,165,.09);
  --layer-tag-fg:#6356a5;
  --accent-badge-bg:rgba(125,90,16,.09);
  --accent-badge-fg:#7d5a10;

  --notice-warn-bg:rgba(148,66,14,.07);
  --notice-warn-border:rgba(148,66,14,.26);
  --notice-warn-fg:#6d4a0d;
  --notice-info-bg:rgba(44,95,150,.07);
  --notice-info-border:rgba(44,95,150,.26);
  --notice-info-fg:#1f5486;

  --scrollbar:#cbd2d0;
  --scrollbar-hover:#aeb6b4;

  --shadow-2:0 8px 24px rgba(20,26,26,.10);
  --shadow-3:0 18px 48px rgba(20,26,26,.16);
  --focus-ring:0 0 0 3px rgba(125,90,16,.30);
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:var(--font);
  color:var(--text-1);
  background:var(--bg);
  font-size:15.5px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer}
svg{display:block}
[hidden]{display:none !important}
::selection{background:var(--accent-weak);color:var(--text-1)}

/* 滚动条 */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--scrollbar);border-radius:var(--radius-xs);border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-hover)}

/* ══════════════════ 顶栏 ══════════════════ */
.topbar{
  position:fixed;top:0;left:0;right:0;height:var(--topbar-h);z-index:60;
  display:flex;align-items:center;gap:16px;
  padding:0 16px 0 12px;
  background:var(--topbar-bg);
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--border);
}
.topbar-left{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.icon-btn{
  display:inline-flex;align-items:center;justify-content:center;
  width:34px;height:34px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);
  transition:background .15s,color .15s,border-color .15s;
}
.icon-btn:hover{background:var(--accent-weak);color:var(--accent)}
.icon-btn.sm{width:28px;height:28px;border-radius:var(--radius-xs)}
.menu-btn{color:var(--text-2)}

/* 主题开关。两个图标（太阳 / 月亮）都在 DOM 里，显示哪一个纯由当前主题决定，
   所以脚本还没跑起来时图标也是对的 —— CSS 不问 JavaScript。
   深色显示太阳（点了变浅），浅色显示月亮（点了变深）。
   下面这两条媒体查询与属性选择器与令牌层的那两块同源：属性选择器压过系统偏好。 */
.theme-toggle{color:var(--text-2)}
.theme-ico{display:block}
.theme-ico-moon{display:block}
.theme-ico-sun{display:none}
:root[data-theme="light"] .theme-ico-moon{display:none}
:root[data-theme="light"] .theme-ico-sun{display:block}
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]) .theme-ico-moon{display:none}
  :root:not([data-theme="dark"]) .theme-ico-sun{display:block}
}

.brand{display:flex;align-items:center;gap:9px;padding-right:6px}
.brand-mark{
  display:grid;place-items:center;width:30px;height:30px;border-radius:var(--radius-sm);
  background:var(--accent);color:var(--on-accent);
  font-weight:800;font-size:12.5px;letter-spacing:-.02em;
}
.brand-name{font-weight:800;font-size:17px;letter-spacing:-.02em;color:var(--text-1);white-space:nowrap}
.brand-dot{color:var(--accent)}

.topbar-search{
  flex:1 1 auto;max-width:640px;margin:0 auto;position:relative;
  display:flex;align-items:center;
}
.search-ico{position:absolute;left:13px;color:var(--text-4);pointer-events:none}
.topbar-search input{
  width:100%;height:38px;padding:0 34px 0 39px;
  border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-inset);
  font-size:14px;color:var(--text-1);outline:none;
  transition:border-color .15s,box-shadow .15s,background .15s;
}
.topbar-search input::placeholder{color:var(--text-4)}
.topbar-search input:focus{background:var(--surface-3);border-color:var(--accent-border);box-shadow:var(--focus-ring)}
.search-clear{
  position:absolute;right:8px;width:22px;height:22px;border:0;border-radius:var(--radius-pill);
  background:var(--surface-3);color:var(--text-3);font-size:14px;line-height:1;display:grid;place-items:center;
}
.search-clear:hover{background:var(--border-strong);color:var(--text-1)}

.btn{
  display:inline-flex;align-items:center;gap:7px;
  height:36px;padding:0 14px;border-radius:var(--radius-sm);border:1px solid transparent;
  font-size:14px;font-weight:600;white-space:nowrap;
  transition:background .15s,border-color .15s,color .15s,box-shadow .15s;
}
.btn-primary{background:var(--accent);color:var(--on-accent);font-weight:700}
.btn-primary:hover{background:var(--accent-hover)}
.btn-ghost{background:var(--surface-1);border-color:var(--border);color:var(--text-2)}
.btn-ghost:hover{background:var(--surface-3);border-color:var(--accent-border);color:var(--text-1)}
.btn-sm{height:31px;padding:0 11px;font-size:12.5px;border-radius:var(--radius-xs)}
.btn[disabled]{opacity:.45;cursor:not-allowed}

/* ══════════════════ 骨架 ══════════════════ */
.shell{display:flex;padding-top:var(--topbar-h);min-height:100vh}
.sidebar{
  position:fixed;top:var(--topbar-h);bottom:0;left:0;width:var(--sidebar-w);
  background:var(--sidebar-bg);
  backdrop-filter:blur(10px);
  border-right:1px solid var(--border);
  display:flex;flex-direction:column;z-index:50;transition:transform .2s ease;
}
.nav{padding:12px 10px;overflow-y:auto;flex:1 1 auto}
.nav-item{
  display:flex;align-items:center;gap:11px;
  height:38px;padding:0 10px;margin-bottom:2px;border-radius:var(--radius-sm);
  color:var(--text-2);font-size:14px;font-weight:500;
  transition:background .13s,color .13s;
}
.nav-item svg{width:18px;height:18px;flex:0 0 auto;color:var(--text-4);transition:color .13s}
.nav-item svg [stroke]{stroke:currentColor}
.nav-item svg [fill]:not([fill="none"]){fill:currentColor}
.nav-item:hover{background:var(--accent-weak);color:var(--text-1)}
.nav-item:hover svg{color:var(--text-3)}
/* 当前项：左缘竖线 + 字重。**不**用 alpha 底 —— 所以它不再是
   tools/check_data.js 的 COMPOSITES 里的一条（见该节注释）。 */
.nav-item.is-active{border-radius:0;color:var(--accent);font-weight:700;
  box-shadow:inset 2px 0 0 var(--accent)}
.nav-item.is-active svg{color:var(--accent)}
.nav-count{
  margin-left:auto;font-style:normal;font-size:12.5px;font-weight:600;color:var(--text-4);
  background:var(--surface-3);padding:1px 6px;border-radius:var(--radius-pill);
}
.nav-item.is-active .nav-count{background:transparent;color:var(--accent)}
.nav-sep{height:1px;background:var(--border-2);margin:9px 10px}
.sidebar-foot{padding:12px 14px 16px;border-top:1px solid var(--border-2)}
.src-chip{display:flex;flex-direction:column;gap:2px;font-size:12.5px;color:var(--text-4)}
.src-chip strong{color:var(--text-2);font-size:12.5px}

/* ══════════════════ 联系方式（侧边栏） ══════════════════ */
.side-contact{margin-top:12px;padding-top:12px;border-top:1px solid var(--border-2)}
.contact-t{
  font-size:12.5px;font-weight:750;color:var(--accent);letter-spacing:.085em;
  text-transform:uppercase;margin-bottom:8px;
}
.contact-qr{
  display:flex;align-items:center;gap:9px;width:100%;padding:7px;
  border:1px solid var(--border);background:var(--surface-1);cursor:zoom-in;
  text-align:left;
  transition:border-color .15s,background .15s;
}
.contact-qr:hover{border-color:var(--accent-border);background:var(--surface-3)}
/* 缩略图只占 62px，点击后在看板弹窗里放大到 260px */
.contact-qr-thumb{
  flex:0 0 auto;width:62px;height:62px;padding:3px;border-radius:var(--radius-xs);background:#fff;
  display:grid;place-items:center;overflow:hidden;
}
.contact-qr-thumb img.qr-img{display:block;width:100%;height:100%;object-fit:contain}
.contact-qr-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.contact-qr-text b{font-size:14px;font-weight:750;color:var(--text-1)}
.contact-qr-text span{font-size:12.5px;color:var(--text-4);line-height:1.45}
.contact-qr.is-empty{cursor:default;box-shadow:none;transform:none}
.contact-qr-thumb.is-empty{background:var(--notice-warn-bg);outline:1px dashed var(--conf-medium)}
.contact-qr.is-empty .contact-qr-text span{color:var(--conf-medium)}
.contact-line{display:flex;align-items:center;gap:7px;margin-top:10px;font-size:14px}
.contact-k{color:var(--text-4);flex:0 0 auto}
.contact-v{color:var(--text-1);font-weight:700;letter-spacing:.02em;flex:1 1 auto;white-space:nowrap}
.contact-copy{
  border:1px solid var(--border);background:var(--surface-1);color:var(--text-2);border-radius:var(--radius-xs);
  font-size:12.5px;font-weight:600;padding:3px 8px;flex:0 0 auto;
  transition:border-color .15s,color .15s,background .15s;
}
.contact-copy:hover{border-color:var(--accent-border);color:var(--accent-text);background:var(--accent-weak)}
/* 二维码放大弹窗 */
.qr-modal{text-align:center}
.qr-modal img.qr-img{
  width:260px;height:260px;border-radius:var(--radius);background:#fff;padding:8px;margin:0 auto;
  box-shadow:var(--shadow-2);
}
.qr-modal.is-empty::before{
  content:"二维码待放入 assets/wechat-qr.png";display:grid;place-items:center;height:260px;
  border-radius:var(--radius);background:var(--notice-warn-bg);outline:1px dashed var(--conf-medium);
  color:var(--conf-medium);font-size:14px;
}
.qr-modal-hint{font-size:12.5px;color:var(--text-4);margin-top:12px}
.qr-modal-tel{
  display:flex;align-items:center;justify-content:center;gap:9px;flex-wrap:wrap;
  margin-top:14px;font-size:14px;color:var(--text-3);
}
.qr-modal-tel b{color:var(--text-1);font-weight:700;letter-spacing:.02em}

.main{
  flex:1 1 auto;margin-left:var(--sidebar-w);min-width:0;
  padding:0 26px 56px;
}
body.side-collapsed .sidebar{transform:translateX(-100%)}
body.side-collapsed .main{margin-left:0}

/* ══════════════════ 来源条 ══════════════════ */
.creator-bar{
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:16px 0 6px;flex-wrap:wrap;
}
.creator-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.creator-right{display:flex;align-items:center;gap:6px}
.muted-sm{font-size:14px;color:var(--text-4)}

/* ══════════════════ 页头 ══════════════════ */
.page-head{padding:12px 0 0}
.ph-title{font-size:29px;font-weight:800;letter-spacing:-.02em;margin:0;line-height:1.25}
.ph-meta{display:flex;gap:16px;flex-wrap:wrap;margin-top:12px}
.ph-meta span{font-size:14px;color:var(--text-3);display:inline-flex;align-items:center;gap:6px}
.ph-meta b{color:var(--text-1);font-weight:700}

/* KPI —— 一条带：竖细线分格，无圆角、无投影、无「查看 →」箭头。
   分格线做法：格子之间留 1px gap，露出容器的 --border-2 底；单元格用自己的
   --surface-2 盖住。折行时同一套 gap 自然给出横线，窄屏单列也成立。
   min(150px,100%) 防止 320px 屏上 150px 的轨道撑破页面（同 .grid-2 / .seg-grid）。 */
.kpi-band{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr));
  gap:1px;margin:16px 0 4px;
  background:var(--border-2);border:1px solid var(--border);
}
.kpi{
  background:var(--surface-2);
  padding:13px 15px;
}
.kpi-v{font-size:23px;font-weight:800;letter-spacing:-.02em;line-height:1.15;color:var(--text-1)}
.kpi-l{font-size:14px;color:var(--text-3);margin-top:3px}
.kpi-n{font-size:12.5px;color:var(--text-4);margin-top:5px}

/* ══════════════════ 视图切换 ══════════════════ */
.view-tabs{
  display:flex;align-items:center;gap:4px;
  margin:16px 0 0;border-bottom:1px solid var(--border);position:sticky;top:var(--topbar-h);
  background:var(--topbar-bg);backdrop-filter:blur(10px);
  z-index:30;padding-top:4px;
}
.view-tab{
  display:inline-flex;align-items:center;gap:8px;
  padding:11px 12px 13px;border:0;background:transparent;
  color:var(--text-3);font-size:14px;font-weight:700;letter-spacing:.01em;
  border-bottom:2.5px solid transparent;margin-bottom:-1px;
  transition:color .15s,border-color .15s;
  white-space:nowrap;   /* 标签不许从中间断开（窄屏曾折成「全景视 / 图」） */
}
.view-tab svg{color:var(--text-4)}
.view-tab:hover{color:var(--text-2)}
.view-tab.is-active{color:var(--accent);border-bottom-color:var(--accent)}
.view-tab.is-active svg{color:var(--accent)}
.tab-en{font-size:12.5px;font-weight:700;color:var(--text-4);letter-spacing:.09em}
.view-tab.is-active .tab-en{color:var(--accent);opacity:.75}

/* ══════════════════ 提示条 ══════════════════ */
.notice{
  display:flex;align-items:flex-start;gap:11px;
  background:var(--notice-warn-bg);border:1px solid var(--notice-warn-border);border-left:3px solid var(--conf-medium);
  border-radius:var(--radius-sm);padding:11px 14px;margin:14px 0 0;
  font-size:14px;color:var(--notice-warn-fg);line-height:1.65;
}
.notice.info{background:var(--notice-info-bg);border-color:var(--notice-info-border);border-left-color:var(--accent);color:var(--notice-info-fg)}
.notice svg{flex:0 0 auto;margin-top:2px}
.notice b{font-weight:700;color:var(--text-1)}
.notice code{
  font-family:var(--mono);font-size:12.5px;background:var(--surface-3);
  padding:1px 5px;border-radius:var(--radius-xs);
}

/* ══════════════════ 筛选条 ══════════════════ */
.filterbar{
  background:var(--surface-1);border:1px solid var(--border);
  padding:12px 14px;margin:14px 0 0;
}
.filterbar-head{
  display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
}
.filter-hint{font-size:14px;color:var(--text-2);display:flex;align-items:center;gap:8px}
.filter-hint b{font-weight:700;color:var(--accent)}
.filter-hint .sep{color:var(--text-4)}
.filter-actions{display:flex;gap:8px;flex-wrap:wrap}
.filters{display:flex;flex-wrap:wrap;gap:9px;margin-top:12px;padding-top:12px;border-top:1px dashed var(--border)}
.filters[hidden]{display:none}
.fgroup{display:flex;flex-direction:column;gap:4px;min-width:132px;max-width:190px}
.fgroup>label{font-size:12.5px;font-weight:700;color:var(--text-4);letter-spacing:.07em;text-transform:uppercase}
.fgroup select{
  height:32px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--surface-inset);
  font-size:14px;color:var(--text-1);padding:0 8px;outline:none;font-family:inherit;
}
.fgroup select:focus{border-color:var(--accent-border);box-shadow:var(--focus-ring)}
.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:12px}
.chips:empty{display:none}
.chip{
  display:inline-flex;align-items:center;gap:6px;
  background:var(--accent-weak);color:var(--accent-text);border:1px solid var(--accent-border);
  border-radius:var(--radius-pill);padding:3px 6px 3px 10px;font-size:12.5px;font-weight:600;
}
.chip button{border:0;background:var(--accent-weak);color:var(--accent-text);width:16px;height:16px;
  border-radius:var(--radius-pill);font-size:12.5px;line-height:1;display:grid;place-items:center;padding:0}
.chip button:hover{background:var(--accent-border)}

/* ══════════════════ 列表工具条 ══════════════════ */
.list-toolbar{
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  flex-wrap:wrap;margin:16px 0 10px;
}
.showing{font-size:14px;color:var(--text-2)}
.showing b{font-weight:750;color:var(--accent)}
.showing .sub{color:var(--text-4);font-size:14px;margin-left:6px}
.toolbar-right{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.seg-pager{display:flex;align-items:center;gap:3px;background:var(--surface-1);border:1px solid var(--border);
  border-radius:var(--radius-sm);padding:3px}
.seg-pager button{
  border:0;background:transparent;border-radius:var(--radius-xs);height:25px;padding:0 9px;
  font-size:12.5px;font-weight:600;color:var(--text-3)}
.seg-pager button.is-active{background:var(--accent-weak);color:var(--accent)}
.seg-pager button:hover:not(.is-active){background:var(--surface-3);color:var(--text-2)}

/* ══════════════════ 表格 ══════════════════ */
.table-wrap{
  background:var(--surface-1);border:1px solid var(--border);
  overflow:auto;max-height:calc(100vh - 232px);
}
table.grid{border-collapse:separate;border-spacing:0;width:100%;font-size:14px}
table.grid thead th{
  position:sticky;top:0;z-index:5;background:var(--surface-2);
  border-bottom:1px solid var(--border);
  padding:9px 12px;text-align:left;vertical-align:bottom;
  font-size:12.5px;font-weight:750;color:var(--text-3);
  letter-spacing:.075em;text-transform:uppercase;white-space:nowrap;
  cursor:pointer;user-select:none;
}
table.grid thead th:hover{color:var(--text-1);background:var(--surface-3)}
table.grid thead th .th-in{display:flex;align-items:center;gap:5px}
table.grid thead th .sort-ind{font-size:11px;color:var(--accent);opacity:0;transition:opacity .1s}
table.grid thead th.sorted .sort-ind{opacity:1}
table.grid thead th.sorted{color:var(--accent)}
table.grid thead th.num .th-in{justify-content:flex-end}
th .col-zh{
  display:block;font-size:12.5px;font-weight:600;color:var(--text-4);
  letter-spacing:0;text-transform:none;margin-top:2px;
}
th.sticky-col,td.sticky-col{
  position:sticky;left:0;z-index:6;background:var(--surface-1);
  box-shadow:1px 0 0 var(--border-2);
}
table.grid thead th.sticky-col{z-index:8;background:var(--surface-2)}
table.grid tbody tr{border-bottom:1px solid var(--border-2)}
table.grid tbody tr:hover td{background:var(--surface-3)}
table.grid tbody tr:hover td.sticky-col{background:var(--surface-3)}
table.grid tbody tr.is-open td{background:var(--surface-3);box-shadow:inset 2px 0 0 var(--accent)}
table.grid tbody tr.is-open td.sticky-col{background:var(--surface-3)}
table.grid td{
  padding:9px 12px;vertical-align:top;border-bottom:1px solid var(--border-2);
  color:var(--text-2);font-size:14px;line-height:1.5;
}
table.grid td.num{text-align:right;font-variant-numeric:tabular-nums}
td .cell-name{
  display:block;font-weight:700;font-size:14px;color:var(--text-1);line-height:1.35;
  cursor:pointer;
}
td .cell-name:hover{color:var(--accent-text);text-decoration:underline;text-underline-offset:2px}
td .cell-sub{
  display:block;color:var(--text-4);font-size:12.5px;margin-top:2px;
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.clamp-1{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.miss{color:var(--text-4);font-style:normal;letter-spacing:.05em}
.miss-note{color:var(--conf-medium);font-size:12.5px;display:block;margin-top:2px;font-weight:600}
.mono{font-family:var(--mono);font-size:12.5px}

/* ── 企业 logo ──────────────────────────────────────────────
   logo 是构建期抓取的本地图标，落在 assets/logos/；抓不到的公司用
   同尺寸的「字母字标」占位。两者共用一个盒子，所以列表行高与基线
   在任何公司上都不会跳动。深色主题下给 logo 盒子一个暗色托底。 */
.clogo{
  flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  object-fit:contain;overflow:hidden;
  background:var(--surface-3);border-radius:var(--radius-xs);box-shadow:inset 0 0 0 1px var(--border);
}
.clogo-mono{font-weight:800;letter-spacing:0;line-height:1;user-select:none}

.cell-co{display:flex;align-items:center;gap:9px}
.cell-co-t{min-width:0;flex:1 1 auto}
.cell-co .clogo{width:30px;height:30px;font-size:14px}
.cell-co .cell-name{display:block}

.cell-co-inline{display:inline-flex;align-items:center;gap:5px;vertical-align:middle}
.cell-co-inline .clogo{width:18px;height:18px;font-size:12.5px}
.rep-sep{color:var(--text-4);margin:0 3px;font-weight:700}

.clogo-chip{
  flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  object-fit:contain;overflow:hidden;width:18px;height:18px;font-size:12.5px;
  background:var(--surface-3);border-radius:var(--radius-xs);box-shadow:inset 0 0 0 1px var(--border);
}
.clogo-chip-sm{width:16px;height:16px;font-size:12.5px;border-radius:var(--radius-xs)}
.clogo-chip-mono{font-weight:800;line-height:1;letter-spacing:0;user-select:none}

/* 抽屉标题：logo 与公司名同排，副标题仍挂在名字下方 */
.drawer-title .dt-head{display:flex;align-items:flex-start;gap:11px}
.drawer-title .dt-head>.clogo{width:40px;height:40px;font-size:17px;border-radius:var(--radius-sm)}
.drawer-title .dt-main{min-width:0;flex:1 1 auto}

/* 标签 */
.tag{
  display:inline-block;background:var(--surface-3);color:var(--text-2);border-radius:var(--radius-xs);
  padding:2px 7px;font-size:12.5px;font-weight:600;line-height:1.5;white-space:nowrap;
}
.tag-seg{background:var(--accent-weak);color:var(--accent-text)}
.tag-layer{background:var(--layer-tag-bg);color:var(--layer-tag-fg)}
.tag-tech{background:var(--surface-3);color:var(--text-2)}
.tag-more{background:var(--surface-1);color:var(--text-4)}
.tags{display:flex;flex-wrap:wrap;gap:4px}

/* 「数据来源集」徽标一族（`.src-tag` / `.src-wpnew` / `.src-rescan` / `.src-bci`
   与名称列那条定位规则）已于 UI-005 拆除。见 specs/UI-005-source-vocabulary-removal.md。 */
/* 结果上方的并入口径提示条（`.src-note`）已于 UI-003 拆除，四条规则一并删。
   见 specs/UI-003-source-note-removal.md「4.1 删除范围」。 */

/* 状态点 */
.st{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:650;white-space:nowrap}
.st i{width:7px;height:7px;border-radius:var(--radius-pill);flex:0 0 auto;background:currentColor}
.st-活跃{color:var(--st-active)} .st-活跃 i{background:var(--st-active)}
.st-已上市{color:var(--st-listed)} .st-已上市 i{background:var(--st-listed)}
.st-被收购{color:var(--st-acquired)} .st-被收购 i{background:var(--st-acquired)}
.st-已关闭{color:var(--st-closed)} .st-已关闭 i{background:var(--st-closed)}
.st-未披露{color:var(--st-undisclosed)} .st-未披露 i{background:var(--st-undisclosed)}

/* 置信度条（信号条）：色与宽度双重编码，配色与环形图 CONF_COLOR 保持一致（绿/琥珀/红） */
.conf{display:flex;align-items:center;gap:7px;min-width:96px}
.conf-bar{flex:1 1 auto;height:6px;border-radius:var(--radius-xs);background:var(--surface-inset);overflow:hidden;min-width:44px}
.conf-bar i{display:block;height:100%;border-radius:var(--radius-xs)}
.conf-high .conf-bar i{width:100%;background:var(--conf-high)}
.conf-medium .conf-bar i{width:58%;background:var(--conf-medium)}
.conf-low .conf-bar i{width:26%;background:var(--conf-low)}
.conf-val{font-size:12.5px;font-weight:700;color:var(--text-3);font-variant-numeric:tabular-nums}
.conf-high .conf-val{color:var(--conf-high)}
.conf-medium .conf-val{color:var(--conf-medium)}
.conf-low .conf-val{color:var(--conf-low)}

/* 分页 */
.pager{display:flex;align-items:center;gap:9px;justify-content:center;padding:16px 0 0;flex-wrap:wrap}
.pager button{
  min-width:32px;height:32px;padding:0 9px;border:1px solid var(--border);background:var(--surface-1);
  border-radius:var(--radius-xs);font-size:14px;font-weight:600;color:var(--text-2)}
.pager button:hover:not([disabled]):not(.is-active){background:var(--surface-3);border-color:var(--accent-border)}
.pager button.is-active{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.pager button[disabled]{opacity:.4;cursor:not-allowed}
.pager .pg-info{font-size:14px;color:var(--text-3)}
.pager .pg-gap{font-size:14px;color:var(--text-4);padding:0 2px;align-self:center}
.empty{padding:56px 20px;text-align:center;color:var(--text-3)}
.empty h4{margin:0 0 6px;font-size:15.5px;color:var(--text-2)}
.empty p{margin:0;font-size:14px}

/* ══════════════════ 卡片通用 ══════════════════ */
.card{
  background:var(--surface-2);
  border:1px solid var(--border);
  padding:16px;
}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.card-h h3{margin:0;font-size:15.5px;font-weight:750;letter-spacing:-.01em;color:var(--text-1)}
.card-h .hint{font-size:12.5px;color:var(--text-4)}
/* min(340px,100%)：320px 屏幕上 340px 的轨道放不下，会让整页横向溢出 16px */
.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:14px}
.grid-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.section-title{
  display:flex;align-items:baseline;gap:10px;margin:26px 0 12px;
}
.section-title h2{margin:0;font-size:17px;font-weight:800;letter-spacing:-.015em;color:var(--text-1)}
.section-title span{font-size:14px;color:var(--text-4)}
.section-title .rule{flex:1 1 auto;height:1px;background:var(--border)}

/* ══════════════════ 四层结构 ══════════════════ */
/* 4 条带，单列自上而下 —— 一条一条读，不再是一张 2×2 的卡阵 */
.layer-stack{display:grid;grid-template-columns:1fr;gap:10px}
/* 层级去色相：顶条改单调色阶，阶梯是
   --border → --border-strong → --text-4 → --text-2。
   **「深」= 靠近底色**：两套主题下第 1 层都离底最近、第 4 层最远，
   所以同一序列在两套主题下都成立（深色里序列变亮，浅色里变暗）。
   规格 §4.3 建议的 `--border-2` 起手经实测不可用：压 --surface-2 只有 1.04:1（深）
   / 1.20:1（浅），顶条实际上看不见。详见 UI-002 §8 的偏离记录。
   色阶**不取自 --cat-\*** —— 那七色是数据色，层级是结构。 */
.layer-card{
  position:relative;background:var(--surface-2);border:1px solid var(--border);
  padding:15px;
  border-top:3px solid var(--border);cursor:pointer;
  transition:background .15s;
}
/* 悬停只换底色 —— 不投影、不位移（「面，不是卡片」）。
   也不改 border-color：那会连顶上那道色阶一起抹掉。 */
.layer-card:hover{background:var(--surface-3)}
.layer-card.l0{border-top-color:var(--border)}
.layer-card.l1{border-top-color:var(--border-strong)}
.layer-card.l2{border-top-color:var(--text-4)}
.layer-card.l3{border-top-color:var(--text-2)}
.layer-n{font-size:12.5px;font-weight:700;color:var(--text-4);letter-spacing:.07em}
.layer-t{font-size:15.5px;font-weight:800;margin:3px 0 8px;letter-spacing:-.01em;color:var(--text-1)}
.layer-big{font-size:29px;font-weight:800;letter-spacing:-.03em;line-height:1;color:var(--text-1)}
.layer-big small{font-size:14px;font-weight:600;color:var(--text-4);margin-left:4px;letter-spacing:0}
.layer-meta{font-size:12.5px;color:var(--text-3);margin:7px 0 10px}
.lb-active{background:var(--st-active)}.lb-listed{background:var(--st-listed)}
.lb-acquired{background:var(--st-acquired)}.lb-closed{background:var(--st-closed)}
.layer-segs{display:flex;flex-wrap:wrap;gap:4px}
.legend{display:flex;flex-wrap:wrap;gap:13px;font-size:12.5px;color:var(--text-3);margin-top:10px}
.legend i{display:inline-block;width:8px;height:8px;border-radius:var(--radius-xs);margin-right:5px;vertical-align:0}

/* ══════════════════ 赛道卡片 ══════════════════ */
/* 同上：322px 的轨道在 320px 屏幕上是整页横向溢出的来源 */
.seg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(322px,100%),1fr));gap:13px}
.seg-card{
  background:var(--surface-2);border:1px solid var(--border);
  padding:15px;display:flex;flex-direction:column;gap:10px;
  transition:background .15s,border-color .15s;
}
.seg-card:hover{background:var(--surface-3);border-color:var(--accent-border)}
.seg-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.seg-name{font-size:15.5px;font-weight:750;letter-spacing:-.01em;line-height:1.35;cursor:pointer;color:var(--text-1)}
.seg-name:hover{color:var(--accent-text)}
.seg-count{font-size:12.5px;font-weight:700;color:var(--text-3);background:var(--surface-3);
  border-radius:var(--radius-pill);padding:2px 9px;white-space:nowrap;flex:0 0 auto}
.seg-tags{display:flex;flex-wrap:wrap;gap:5px}
.badge{
  display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:700;
  border-radius:var(--radius-xs);padding:2px 7px;line-height:1.5;
}
.badge-mat{background:var(--st-active-weak);color:var(--st-active)}
.badge-trl{background:var(--surface-3);color:var(--text-2);font-family:var(--mono);font-size:12.5px}
.seg-def{font-size:14px;color:var(--text-3);line-height:1.62;margin:0;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.seg-bar{display:flex;height:6px;border-radius:var(--radius-xs);overflow:hidden;background:var(--surface-inset)}
.seg-bar i{display:block;height:100%}
.seg-stats{display:flex;gap:12px;font-size:12.5px;color:var(--text-3);flex-wrap:wrap}
.seg-stats b{color:var(--text-1);font-weight:700}
.seg-reps{display:flex;flex-wrap:wrap;gap:4px}
.rep{
  font-size:12.5px;background:var(--surface-1);border:1px solid var(--border-2);border-radius:var(--radius-xs);
  padding:2px 6px;color:var(--text-2);cursor:pointer;white-space:nowrap;
  max-width:190px;overflow:hidden;text-overflow:ellipsis;
}
.rep:hover{background:var(--accent-weak);border-color:var(--accent-border);color:var(--accent-text)}
.seg-foot{margin-top:auto;display:flex;gap:7px;padding-top:4px}

/* ══════════════════ 条形图 / 图表 ══════════════════ */
.bars{display:flex;flex-direction:column;gap:7px}
.bar-row{display:grid;grid-template-columns:minmax(96px,158px) 1fr auto;gap:10px;align-items:center;
  font-size:14px;cursor:pointer}
.bar-row:hover .bar-lbl{color:var(--accent-text)}
.bar-lbl{color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-track{height:9px;background:var(--surface-inset);border-radius:var(--radius-xs);overflow:hidden}
.bar-fill{display:block;height:100%;border-radius:var(--radius-xs);background:var(--chart-bar);
  transition:width .3s ease}
.bar-val{font-variant-numeric:tabular-nums;font-weight:700;color:var(--text-3);font-size:12.5px;min-width:38px;text-align:right}

.donut-wrap{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.donut{flex:0 0 auto;position:relative}
.donut-center{
  position:absolute;inset:0;display:grid;place-items:center;text-align:center;pointer-events:none;
}
.donut-center b{display:block;font-size:19px;font-weight:800;letter-spacing:-.02em;color:var(--text-1)}
.donut-center span{font-size:12.5px;color:var(--text-4)}
.donut-legend{display:flex;flex-direction:column;gap:5px;font-size:14px;min-width:130px;flex:1 1 auto}
.dl-row{display:flex;align-items:center;gap:8px;cursor:pointer;padding:1px 0;color:var(--text-2)}
.dl-row:hover{color:var(--accent-text)}
.dl-row i{width:9px;height:9px;border-radius:var(--radius-xs);flex:0 0 auto}
.dl-row .dl-v{margin-left:auto;font-weight:700;color:var(--text-3);font-variant-numeric:tabular-nums;font-size:12.5px}

/* ══════════════════ 抽屉 ══════════════════ */
.drawer-scrim{position:fixed;inset:0;background:var(--scrim);z-index:90;
  backdrop-filter:blur(2px);
  animation:fade .18s ease}
@keyframes fade{from{opacity:0}to{opacity:1}}
.drawer{
  position:fixed;top:0;right:0;bottom:0;width:min(620px,94vw);
  background:var(--surface-1);
  border-left:1px solid var(--border);
  z-index:100;box-shadow:var(--shadow-3);
  display:flex;flex-direction:column;
  animation:slidein .22s cubic-bezier(.2,.7,.3,1);
}
/* 只做位移，不做透明度过渡：避免动画未跑完时抽屉呈半透明、内容穿透 */
@keyframes slidein{from{transform:translateX(28px)}to{transform:none}}
.drawer-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
  padding:18px 20px 14px;border-bottom:1px solid var(--border);flex:0 0 auto;
  background:var(--surface-2);
}
.drawer-title{font-size:19px;font-weight:800;letter-spacing:-.02em;line-height:1.3;color:var(--text-1)}
.drawer-title .dt-sub{display:block;font-size:14px;font-weight:500;color:var(--text-3);
  letter-spacing:0;margin-top:5px;line-height:1.5}
.drawer-body{padding:18px 20px 34px;overflow-y:auto;flex:1 1 auto}
.dsec{margin-bottom:22px}
.dsec:last-child{margin-bottom:0}
.dsec-t{
  font-size:12.5px;font-weight:750;color:var(--accent);letter-spacing:.085em;
  text-transform:uppercase;margin:0 0 10px;padding-bottom:7px;border-bottom:1px solid var(--border-2);
  display:flex;align-items:center;gap:8px;
}
.dsec-t .cnt{font-weight:600;letter-spacing:0;text-transform:none;color:var(--text-4);font-size:12.5px}
.kv{display:grid;grid-template-columns:118px 1fr;gap:4px 12px;font-size:14px}
.kv dt{color:var(--text-4);font-weight:600;padding:4px 0}
.kv dd{margin:0;padding:4px 0;color:var(--text-2);word-break:break-word;line-height:1.6}
.kv dd.empty-v{color:var(--text-4)}
.kv dd .miss-note{color:var(--conf-medium);font-size:12.5px;font-weight:600}
/* 策展补全子块（TICKETS-007）：审计留痕 —— 逐字段「原值 → 新值」对照 + 依据来源 */
.enrich-block{margin-top:12px;padding-top:10px;border-top:1px dashed var(--border)}
.enrich-t{font-size:12.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--text-4);margin:2px 0 7px}
.enrich-t .cnt{font-weight:600;letter-spacing:0;text-transform:none}
.enrich-table th{font-size:12.5px}
.enrich-table td{font-size:12.5px;vertical-align:top}
.enrich-from{color:var(--text-4)}
.enrich-srcs{margin:2px 0 0;padding-left:16px;font-size:14px;line-height:1.7;color:var(--text-2)}
.enrich-srcs li{margin-bottom:4px;word-break:break-word}
.dtext{font-size:14px;color:var(--text-2);line-height:1.75;margin:0;white-space:pre-wrap;
  word-break:break-word}
.dtext.long{font-size:12.5px;color:var(--text-3);line-height:1.7}
.dlist{margin:0;padding-left:17px;font-size:14px;color:var(--text-2);line-height:1.7}
.dlist li{margin-bottom:4px}
.link-out{color:var(--accent-text);font-weight:600;word-break:break-all}
.link-out:hover{text-decoration:underline}

/* ══════════════════ 弹窗 ══════════════════ */
.modal-scrim{position:fixed;inset:0;background:var(--scrim);z-index:110;animation:fade .18s ease;
  backdrop-filter:blur(3px)}
.modal{
  position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);
  width:min(920px,94vw);max-height:88vh;
  background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius);
  z-index:120;box-shadow:var(--shadow-3);
  display:flex;flex-direction:column;
  animation:pop .2s cubic-bezier(.2,.8,.3,1);
}
@keyframes pop{from{transform:translate(-50%,-46%) scale(.985)}to{transform:translate(-50%,-50%) scale(1)}}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:17px 20px;border-bottom:1px solid var(--border);flex:0 0 auto}
.modal-head h3{margin:0;font-size:17px;font-weight:800;letter-spacing:-.015em;color:var(--text-1)}
.modal-body{padding:18px 20px 26px;overflow-y:auto;flex:1 1 auto}

/* 列选择器 */
.col-group{margin-bottom:18px}
.col-group h4{
  margin:0 0 9px;font-size:12.5px;font-weight:750;color:var(--accent);
  letter-spacing:.085em;text-transform:uppercase;
}
.col-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:5px}
.col-item{
  display:flex;align-items:flex-start;gap:9px;padding:7px 9px;border:1px solid var(--border);
  border-radius:var(--radius-xs);cursor:pointer;background:transparent;font-size:14px;
  transition:border-color .13s,background .13s;
}
.col-item:hover{border-color:var(--accent-border);background:var(--surface-1)}
.col-item input{margin:2px 0 0;accent-color:var(--accent);flex:0 0 auto}
.col-item .ci-t{font-weight:600;color:var(--text-2)}
.col-item .ci-en{display:block;font-size:12.5px;color:var(--text-4);font-family:var(--mono);margin-top:1px}

/* 表格样式的小表（用于弹窗内数据表） */
table.mini{border-collapse:collapse;width:100%;font-size:14px}
table.mini th{
  text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);
  font-size:12.5px;font-weight:750;color:var(--text-3);letter-spacing:.07em;text-transform:uppercase;
  background:var(--surface-2);position:sticky;top:0;
}
table.mini td{padding:8px 10px;border-bottom:1px solid var(--border-2);color:var(--text-2);
  vertical-align:top;line-height:1.6}
table.mini tr:hover td{background:var(--surface-3)}
table.mini td.num{text-align:right;font-variant-numeric:tabular-nums}
.breakdown{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--text-3)}
.breakdown b{color:var(--text-1)}

/* Toast */
.toast{
  position:fixed;left:50%;bottom:28px;transform:translateX(-50%);
  background:var(--surface-2);color:var(--text-1);font-size:14px;font-weight:600;
  border:1px solid var(--border);
  padding:9px 16px;border-radius:var(--radius-sm);z-index:200;
  box-shadow:var(--shadow-2);
  animation:pop2 .2s ease;
}
@keyframes pop2{from{transform:translate(-50%,8px);opacity:0}to{transform:translate(-50%,0);opacity:1}}

/* ══════════════════════════════════════════════════════════════════════════
   以下为交互增强部分：可点击元素反馈、键盘可访问性、新增控件
   ══════════════════════════════════════════════════════════════════════════ */

/* 跳到主内容 */
.skip-link{
  position:absolute;left:-9999px;top:0;z-index:300;background:var(--accent);color:var(--on-accent);
  padding:9px 16px;border-radius:0 0 var(--radius-sm) 0;font-weight:700;font-size:14px;
}
.skip-link:focus{left:0}

/* 统一键盘焦点样式（鼠标点击不显示） */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-xs);
  box-shadow:var(--focus-ring)}
.bar-row:focus-visible,.dl-row:focus-visible,.layer-card:focus-visible,
.seg-card:focus-visible,.seg-name:focus-visible,.cell-link:focus-visible,
.rep:focus-visible,table.mini th[data-action]:focus-visible{outline-offset:1px}

/* 内联“链接式”按钮与可点击文本 */
.link-btn{
  border:0;background:transparent;color:var(--accent-text);font-size:12.5px;font-weight:700;
  padding:0;text-decoration:underline;text-underline-offset:2px;cursor:pointer;
}
.link-btn:hover{color:var(--accent-hover)}

/* 合规与权利声明（侧边栏入口 + 弹窗排版） */
.side-legal{display:block;margin-top:10px}
.legal-sec{margin:0 0 14px}
.legal-sec h4{font-size:14px;font-weight:750;color:var(--accent);margin:0 0 6px;letter-spacing:.03em}
.legal-sec p{margin:0 0 7px;font-size:14px;line-height:1.75;color:var(--text-3)}
.legal-sec p:last-child{margin-bottom:0}
.legal-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin-top:4px;padding-top:12px;border-top:1px solid var(--border-2)}
.cell-link{color:var(--accent-text);font-weight:600;cursor:pointer}
.cell-link:hover{text-decoration:underline;text-underline-offset:2px}
.rep[role="button"]{cursor:pointer}
.seg-stat-link{cursor:pointer;border-bottom:1px dashed transparent}
.seg-stat-link:hover{color:var(--accent-text);border-bottom-color:currentColor}
.seg-stat-link:hover b{color:var(--accent-text)}

/* KPI 带里的格子可点击：悬停只换底色，不带浮起（带里容不下位移）。
   原来的「查看 →」箭头连同 .kpi-go 规则一并删除 —— 带里的格子不再长出多余一行。 */
.kpi-act{
  display:block;width:100%;text-align:left;font-family:inherit;cursor:pointer;
  transition:background .15s;
}
.kpi-act:hover{background:var(--surface-3)}

/* 图表可点击反馈 */
.bar-row.is-on .bar-lbl{color:var(--accent-text);font-weight:700}
.bar-row.is-on .bar-track{box-shadow:inset 0 0 0 1px var(--accent-border)}
.donut-seg{cursor:pointer;transition:opacity .15s}
.donut-seg:hover{opacity:.78}
.donut svg{overflow:visible}

/* 表格行整行可点 */
table.grid tbody tr{cursor:pointer}
table.grid tbody tr.is-flash td{background:var(--st-acquired-weak) !important;transition:background .3s}
@keyframes rowflash{from{background:rgba(244,114,182,.28)}to{background:rgba(244,114,182,.14)}}
table.grid tbody tr.is-flash td{animation:rowflash .5s ease}

/* 页内搜索条（大厂页 / 名单页） */
.mini-search{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:14px 0 12px}
.mini-search input{
  flex:1 1 260px;max-width:520px;height:36px;padding:0 12px;border:1px solid var(--border);
  border-radius:var(--radius-sm);background:var(--surface-inset);font-size:14px;color:var(--text-1);outline:none;font-family:inherit;
}
.mini-search input:focus{border-color:var(--accent-border);box-shadow:var(--focus-ring)}

/* 报告口径核对表的两支差异标记（`.m-same` / `.m-diff`）随该表于 UI-005 拆除。 */

.stage-quick{display:flex;gap:7px;flex-wrap:wrap;margin-top:14px}

/* 小表表头可排序 */
table.mini th[data-action]{cursor:pointer;user-select:none}
table.mini th[data-action]:hover{color:var(--text-1);background:var(--surface-3)}
table.mini th .sort-ind{font-size:11px;color:var(--accent);opacity:0;margin-left:4px}
table.mini th.sorted .sort-ind{opacity:1}
table.mini th.sorted{color:var(--accent)}

/* 抽屉工具条与底部导航 */
.drawer-tools{display:flex;align-items:center;gap:2px;flex:0 0 auto}
.drawer-foot{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  padding:11px 16px;border-top:1px solid var(--border);background:var(--surface-2);flex:0 0 auto;
}
.drawer-idx{margin-left:auto;margin-right:auto;font-size:12.5px;color:var(--text-3)}
.drawer-idx b{color:var(--accent);font-weight:750}

/* 覆盖层打开时锁定背景滚动 */
body.is-locked{overflow:hidden}

/* 回到顶部 */
.back-top{
  position:fixed;right:20px;bottom:22px;z-index:80;
  width:38px;height:38px;border:1px solid var(--border);border-radius:var(--radius-pill);
  background:var(--surface-1);color:var(--text-2);font-size:17px;font-weight:700;
  box-shadow:var(--shadow-2);display:grid;place-items:center;
  transition:background .15s,color .15s,transform .15s,box-shadow .15s;
}
.back-top:hover{background:var(--accent);color:var(--on-accent);border-color:var(--accent);transform:translateY(-2px);
  box-shadow:var(--shadow-2)}

/* 长表格横向滚动提示 */
.table-wrap{scrollbar-gutter:stable}

/* 页脚：ICP 备案号（工信部要求，见 deploy/README-DEPLOY.md 第 6.5 节） */
.site-legal{
  padding:22px 0 6px;text-align:center;
  font-size:12.5px;line-height:1.9;color:var(--text-4);
}
.site-legal a{color:inherit;text-decoration:none}
.site-legal a:hover{color:var(--text-2);text-decoration:underline}

/* ══════════════════ 响应式 ══════════════════ */
@media (max-width:1180px){
  .sidebar{transform:translateX(-100%)}
  .main{margin-left:0}
  body.side-open .sidebar{transform:none;box-shadow:var(--shadow-3)}
}
@media (max-width:820px){
  .main{padding:0 14px 44px}
  .topbar-search{max-width:none}
  .brand-name{display:none}
  .table-wrap{max-height:none}
  .ph-title{font-size:23px}
  .kv{grid-template-columns:1fr;gap:0}
  .kv dt{padding-bottom:0}
  .drawer{width:100vw}
  .drawer-foot{gap:6px}
  .back-top{right:12px;bottom:14px}
  /* 窄屏去掉英文小字：留着两个标签在 390px 放不下，中文标签会被压着换行 */
  .tab-en{display:none}
}

/* ══════════════════ 减少动态效果 ══════════════════ */
/* 系统开了「减少动态效果」时，全站不再有动画与过渡。
   CSS 的 scroll-behavior 管不到 app.js 里的 behavior:'smooth' ——
   那 5 处由 prefersReducedMotion() 助手判（specs/TICKETS-008.md §4.2）。
   本块用 !important，压过任何按选择器写的动画与过渡。 */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;scroll-behavior:auto !important;
  }
}

@media print{
  /* 打印一律走浅色令牌：白底深字。
     只改 body 的颜色不够 —— 令牌驱动的规则不认 body 上的覆盖，
     病根在令牌本身，所以这里把令牌重绑一遍。
     这是 :root[data-theme="light"] 那份令牌的第三份副本（另两份见文件上方）。
     三份必须同步：改浅色配色时三处一起改，否则打印会与浅色主题悄悄漂开。
     源序在 @media (prefers-color-scheme) 与 [data-theme="light"] 两块之后，
     故这里的重绑压过那两块（tools/check_data.js 的主题检查守这三份逐字相同）。 */
  :root{
    color-scheme:light;

    /* 表面：页面浅灰、面板与卡片纯白、悬停与标签再深一档 */
    --bg:#f4f6f4;
    --surface-1:#ffffff;
    --surface-2:#ffffff;
    --surface-3:#eaeeec;
    --surface-inset:#eaeeec;
    --topbar-bg:rgba(255,255,255,.86);
    --sidebar-bg:rgba(255,255,255,.94);
    --scrim:rgba(20,26,26,.34);

    /* 文字（四档全部 ≥4.5:1，最暗一档 --text-4 压在最深的 --surface-3 上为 4.94）*/
    --text-1:#141a1a;
    --text-2:#3c4747;
    --text-3:#4f5b5a;
    --text-4:#5c6867;

    --border:#dde3e1;
    --border-2:#e7ebe9;
    --border-strong:#b4bdbb;

    --accent:#7d5a10;
    --accent-hover:#6b4d0f;
    --accent-weak:rgba(125,90,16,.10);
    --accent-border:rgba(125,90,16,.38);
    --accent-text:#7d5a10;
    --on-accent:#ffffff;

    --st-active:#2b7149;
    --st-listed:#2c5f96;
    --st-acquired:#93386f;
    --st-closed:#a2432f;
    --st-undisclosed:#5c6867;
    --st-active-weak:rgba(43,113,73,.12);
    --st-acquired-weak:rgba(147,56,111,.10);

    --conf-high:#2b7149;
    --conf-medium:#94420e;
    --conf-low:#a2432f;

    --cat-1:#2c5f96;
    --cat-2:#93386f;
    --cat-3:#6356a5;
    --cat-4:#2a6f6a;
    --cat-5:#2b7149;
    --cat-6:#a2432f;
    --cat-7:#5c6867;

    --chart-track:#eaeeec;

    --mono-1-bg:#eaeff5;  --mono-1-fg:#2c5f96;
    --mono-2-bg:#eaf1ed;  --mono-2-fg:#2b7149;
    --mono-3-bg:#f4ece7;  --mono-3-fg:#94420e;
    --mono-4-bg:#f4ebf1;  --mono-4-fg:#93386f;
    --mono-5-bg:#eaeff5;  --mono-5-fg:#2c5f96;
    --mono-6-bg:#efeef6;  --mono-6-fg:#6356a5;
    --mono-7-bg:#f4ece7;  --mono-7-fg:#94420e;
    --mono-8-bg:#eaf1f0;  --mono-8-fg:#2a6f6a;
    --mono-9-bg:#f6ecea;  --mono-9-fg:#a2432f;
    --mono-10-bg:#eaf1ed; --mono-10-fg:#2b7149;

    --layer-tag-bg:rgba(99,86,165,.09);
    --layer-tag-fg:#6356a5;
    --accent-badge-bg:rgba(125,90,16,.09);
    --accent-badge-fg:#7d5a10;

    --notice-warn-bg:rgba(148,66,14,.07);
    --notice-warn-border:rgba(148,66,14,.26);
    --notice-warn-fg:#6d4a0d;
    --notice-info-bg:rgba(44,95,150,.07);
    --notice-info-border:rgba(44,95,150,.26);
    --notice-info-fg:#1f5486;

    --scrollbar:#cbd2d0;
    --scrollbar-hover:#aeb6b4;

    --shadow-2:0 8px 24px rgba(20,26,26,.10);
    --shadow-3:0 18px 48px rgba(20,26,26,.16);
    --focus-ring:0 0 0 3px rgba(125,90,16,.30);
  }
  .topbar,.sidebar,.view-tabs,.filterbar,.list-toolbar,.pager,.back-top,
  .drawer-scrim,.modal-scrim,.drawer-foot,.mini-search,.creator-right,.skip-link{display:none !important}
  .main{margin:0;padding:0}
  .table-wrap{max-height:none;border:0;box-shadow:none}
  .drawer{position:static;width:auto;box-shadow:none;animation:none}
  .card,.kpi,.layer-card,.seg-card{box-shadow:none;break-inside:avoid}
  body{background:#fff;color:#101828}
}
