
/* ══════════════════════════════════════════════════════════════════
   基础层：hex fallback
   —— 不支持 oklch/color-mix 的浏览器停在**这一层**：颜色正常（只是没有
   oklch 的感知均匀与派生色）。这是**必需**的：若整个色板只写 oklch，
   老浏览器会解析失败 → 页面无颜色（不是不好看，是没法看）。
   ══════════════════════════════════════════════════════════════════ */
:root{
  --bg:#fbfcfd; --surface:#ffffff; --sunken:#f5f6f8;
  --fg:#0e1217; --muted:#6a6f76;   --border:#e2e5e8;
  --accent:#006bd9; --accent-fg:#ffffff;
  --ok:#18794e; --warn:#915930; --rumor:#6f42c1; --danger:#b8272c;
  --geo-us:#2266a4; --geo-cn:#b33830; --geo-cn-r:#8c352d;
  --geo-eu:#7652ac; --geo-jp:#a4406d; --geo-kr:#5c5db1;
  --geo-sea:#007071; --geo-global:#1f744f; --geo-unknown:#66635d;
  /* 派生色在不支持 color-mix 时给近似值（见@supports 的精确版）*/
  --accent-soft:#e0ecf9; --accent-ink:#05498f;
  --fg-soft:rgba(14,18,23,.06); --line-strong:#c3c6ca;
}

/* ══════════════════════════════════════════════════════════════════
   现代层：oklch + color-mix（支持则整体覆写基础层）
   —— 派生色全部 color-mix，换主题自动跟随，这是基础层做不到的。
   ══════════════════════════════════════════════════════════════════ */
@supports (color: oklch(0% 0 0)){
:root{
  /* ── 基础层：主题切换时只改这一层（与门户 shared.css 同值）── */
  --bg:        oklch(99% 0.002 240);
  --surface:   oklch(100% 0 0);
  --sunken:    oklch(97.3% 0.003 250);
  --fg:        oklch(18% 0.012 250);
  --muted:     oklch(54% 0.012 250);
  --border:    oklch(92% 0.005 250);
  /* accent / 语义色明度按最严目标 --sunken 反解，实测 ≥4.5:1
     （hex 真值：accent #006BD9 / ok #18794E / warn #915930 /
      rumor #6F42C1 / danger #B8272C）*/
  --accent:    oklch(54% 0.19 255);
  /* accent 作**填充**时其上的文字色：亮色底暗故用白；暗色底亮故用深色（见 [data-theme=dark]）*/
  --accent-fg: #ffffff;

  /* ── 派生层：一律 color-mix，换主题自动跟随 ── */
  --accent-soft: color-mix(in oklch, var(--accent) 12%, transparent);
  --accent-ink:  color-mix(in oklch, var(--accent) 62%, var(--fg));
  --fg-soft:     color-mix(in oklch, var(--fg) 6%, transparent);
  --line-strong: color-mix(in oklch, var(--fg) 20%, var(--border));

  /* ── 语义色：全站含义唯一（可信度/状态）── */
  --ok:     oklch(51% 0.11 158);
  --warn:   oklch(52% 0.093 55);
  --rumor:  oklch(50% 0.188 295);
  --danger: oklch(51% 0.181 25);

  /* ── 地区色：同色相族；geo-cn / geo-cn-r 同族不同明度（语义：同属中国境内）── */
  --geo-us:      oklch(50% 0.12 250);
  --geo-cn:      oklch(52% 0.16 28);
  --geo-cn-r:    oklch(45% 0.12 28);
  --geo-eu:      oklch(52% 0.14 300);
  --geo-jp:      oklch(52% 0.14 355);
  --geo-kr:      oklch(52% 0.13 280);
  --geo-sea:     oklch(48% 0.11 195);
  --geo-global:  oklch(50% 0.10 160);
  --geo-unknown: oklch(50% 0.01 80);
}
}

/* ══ 暗色：同一套令牌的几何变换 ══
   只覆写**基础层**；派生色在 :root 里靠 color-mix 自动跟随，**不再重写**
   （重写就等于又回到"两套设计"）。暗色要单独校验对比度 ——
   亮色达标不代表暗色达标（原型就把 muted 从 70% 提到 78% 修过）。
   中性色色相本轮从 286/107 收敛到 250 族，与亮色同族。 */
[data-theme="dark"],[data-theme="dark"] body{
  --bg:#1b1b1f; --surface:#202127; --sunken:#161618;
  --fg:#e2e5e8; --muted:#95999d;   --border:#35383c;
  --accent:#53a0ff; --accent-fg:#142234;
  --ok:#3dd68c; --warn:#f9b44e; --rumor:#c8abfa; --danger:#f66f81;
  --geo-us:#6da9e7; --geo-cn:#e47d70; --geo-cn-r:#e6958a;
  --geo-eu:#b093e5; --geo-jp:#df84a8; --geo-kr:#979de8;
  --geo-sea:#49b8b8; --geo-global:#6ab08b; --geo-unknown:#9c9792;
  --accent-soft:rgba(83,160,255,.14); --accent-ink:#bdd4f5;
  --fg-soft:rgba(226,229,232,.09); --line-strong:#5d6064;
}
@supports (color: oklch(0% 0 0)){
[data-theme="dark"]{
  --bg:      oklch(22.4% 0.008 286);
  --surface: oklch(25% 0.011 278);
  --sunken:  oklch(20% 0.004 286);
  --fg:      oklch(92% 0.006 250);
  /* muted 在最亮暗底 --surface 上仍有 6.3:1（hex 真算） */
  --muted:   oklch(68% 0.008 250);
  --border:  oklch(34% 0.008 250);
  --accent:  oklch(70% 0.16 255);
  /* 暗色 accent 是亮底 → 其上的文字必须用深色：白字只有约 2.7:1（实测）*/
  --accent-fg: oklch(25% 0.04 255);
  --ok:     oklch(78% 0.166 157);
  --warn:   oklch(81.7% 0.141 74);
  --rumor:  oklch(79.5% 0.114 301);
  --danger: oklch(71% 0.166 14);
  /* 地区色整体上抬到≥4.5:1，同时保持同族明度关系 */
  --geo-us:      oklch(72% 0.11 250);
  --geo-cn:      oklch(70% 0.13 28);
  --geo-cn-r:    oklch(75% 0.10 28);
  --geo-eu:      oklch(72% 0.12 300);
  --geo-jp:      oklch(72% 0.12 355);
  --geo-kr:      oklch(72% 0.11 280);
  --geo-sea:     oklch(72% 0.10 195);
  --geo-global:  oklch(70% 0.09 160);
  --geo-unknown: oklch(68% 0.01 75);
}
}

/* ══ 字体 / 字号 / 间距 / 圆角（与门户 shared.css 同值同义）══ */
:root{
  --font-display:-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans SC', system-ui, sans-serif;
  --font-body:   -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans SC', system-ui, sans-serif;
  --font-mono:   'JetBrains Mono', 'IBM Plex Mono', ui-monospace, Menlo, Consolas, monospace;

  /* 字号：与门户同名同义。门户的 --fs-h1（clamp 48–80px）是营销 hero，
     雷达的 h1 是**页面标题**，故取 h2 档（门户 --fs-h2 = clamp(32,4vw,48)），
     再按仪表盘收敛一档。 */
  --fs-h1: clamp(30px, 3.2vw, 40px);
  --fs-h2: 22px;
  --fs-h3: 17px;
  --fs-body: 16px;
  --fs-meta: 13px;
  --fs-lead: 19px;
  /* 仪表盘补两档：门户的 6 档是给散文的；数据界面在正文之下还需要
     一档「微字」（tag/徽标），在正文之上还需要一档「KPI 数字」。 */
  --fs-stat: 26px;
  --fs-micro: 11.5px;

  /* 间距 / 容器 / 圆角 */
  --gap-xs: 8px;  --gap-sm: 12px; --gap-md: 20px;
  --gap-lg: 32px; --gap-xl: 56px;
  --container: 1180px; --gutter: 32px;
  /* 顶栏总高（含 1px 下边框）。筛选条等 sticky 元素一律用它定位 ——
     不要再写 top:52px 这类字面量：顶栏一改高就静默错位（2026-10-12 踩过，
     顶栏变成两行后筛选条被压住 70px）。见 components.py 的 .filterbar。 */
  --topbar-h: 66px;
  --r: 10px;  --r-lg: 16px;
}

/* ══ 基础重置与全局排版（全站共用，页面不再各自写）══ */
*,*::before,*::after{ box-sizing:border-box; }
body{
  margin:0; background:var(--bg); color:var(--fg);
  font-family:var(--font-body); font-size:var(--fs-body);
  line-height:1.6; -webkit-font-smoothing:antialiased;
  transition:background .18s ease, color .18s ease;
}
a{ color:inherit; }
h1{ font-size:var(--fs-h1); margin:0; font-family:var(--font-display);
    letter-spacing:-.02em; line-height:1.2; }
h2{ font-size:var(--fs-h2); margin:0; }
h3{ font-size:var(--fs-h3); margin:0; }

/* 布局骨架：全站统一容器与栅格 */
.container{ max-width:var(--container); margin:0 auto; padding:0 var(--gutter); }
.grid-2{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--gap-md); }
.grid-3{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--gap-md); }
/* 主栏更宽。minmax(0,. ) 不可省 —— 1fr 会被长内容撑破 */
.grid-2-1{ display:grid; grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);
           gap:var(--gap-md); align-items:start; }

/* 响应式：两个断点即可，断点越多越难维护 */
@media (max-width:1040px){
  .grid-3{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .statrow{ grid-template-columns:repeat(3,minmax(0,1fr)); }
}
@media (max-width:920px){
  :root{ --gutter:20px; }
  .grid-2,.grid-3,.grid-2-1{ grid-template-columns:minmax(0,1fr); }
}

/* 通用工具类（省掉每个页面重复写）*/
.meta{ font-size:var(--fs-meta); color:var(--muted); }
.mono{ font-family:var(--font-mono); font-variant-numeric:tabular-nums; }
.empty{ padding:28px 20px; text-align:center; color:var(--muted);
        border:1px dashed var(--border); border-radius:var(--r-lg); }
.panel{ background:var(--surface); border:1px solid var(--border);
        border-radius:var(--r-lg); }
.chip{ display:inline-block; padding:5px 11px; border:1px solid var(--border);
       border-radius:999px; font-size:var(--fs-micro); color:var(--muted);
       background:var(--surface); min-height:28px; }
.chip.on{ background:var(--accent-soft); border-color:var(--accent);
          color:var(--accent-ink); font-weight:600; }
a.link{ color:var(--accent); text-decoration:none; }
a.link:hover{ text-decoration:underline; }


/* ══ 排版基元（字体分工是原型最讲究的一处）══ */
html{ -webkit-text-size-adjust:100%; }
img,svg{ display:block; max-width:100%; }
button,input,select{ font:inherit; color:inherit; }
button{ cursor:pointer; background:none; border:0; }
p{ margin:0; text-wrap:pretty; }
h1,h2,h3{ margin:0; text-wrap:balance; }
:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }
::selection{ background:var(--accent-soft); }

/* 等宽 = 机器字段（数字/日期/锚点/标签）；无衬线 = 人读内容 */
.mono,.num,.meta,.eyebrow,.tl-when,.tl-src,.dchip,.tag,.src,.chip.on,
.flabel,.score,.tile .v,.tile .k,.caveats h3,.note b,.conf,.ready,.rowlink,
.ent em,.prov code,.evidence{ font-family:var(--font-mono); }
.num{ font-variant-numeric:tabular-nums; }
.eyebrow{ font-size:var(--fs-micro); letter-spacing:.09em; text-transform:uppercase; color:var(--muted); }
.meta{ font-size:var(--fs-meta); color:var(--muted); }
.lead{ color:var(--muted); max-width:74ch; }
.h1{ font-size:var(--fs-h1); font-family:var(--font-display); font-weight:680;
  letter-spacing:-.02em; line-height:1.2; }

/* ══ 顶栏（与门户 .topnav 同语法：sticky + 毛玻璃 + 1px 下边框 + 14px 导航）══
   单行是硬要求：门户顶栏就是「logo + 一行导航」。所以这里 **nowrap**，
   并把唯一的可变长度元素（副标题）设成可收缩 + 省略号 —— 让它去吸收宽度
   差，而不是让操作区掉到第二行。窄屏（≤1040）直接减内容：副标题与搜索
   输入框收起；≤920 才允许换行（此时筛选条已 static，不存在偏移错位）。 */
.topbar{ position:sticky; top:0; z-index:30;
  background:color-mix(in oklch, var(--bg) 92%, transparent);
  backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px);
  border-bottom:1px solid var(--border); }
.topbar-in{ display:flex; align-items:center; gap:var(--gap-md);
  flex-wrap:nowrap; padding-block:14px;
  min-height:calc(var(--topbar-h) - 1px); }
/* 品牌区 = 门户 .topnav .logo 的排版 + 本站板块名 */
.brand-wrap{ display:inline-flex; align-items:baseline; gap:10px; flex-shrink:0; }
.brand{ font-family:var(--font-display); font-size:19px; font-weight:600;
  letter-spacing:-.01em; color:var(--fg); text-decoration:none; }
.brand:hover{ color:var(--accent); }
.brand-sec{ font-size:var(--fs-meta); color:var(--muted); }
.brand-sec::before{ content:"/"; margin-right:10px; color:var(--line-strong); }

/* 导航**不可收缩**：它是固定文案，被挤只会折行、把顶栏撑高。
   宽度差一律由 .tb-sub 吸收（见下）。 */
.nav{ display:flex; gap:var(--gap-md); align-items:center; flex-shrink:0; }
.nav a{ padding:6px 0; font-size:14px; color:var(--muted); text-decoration:none;
  white-space:nowrap; }
.nav a:hover{ color:var(--fg); }
/* 当前页：加粗 + 2px accent 下划线（不用色块，与门户的安静导航一致） */
.nav a[aria-current="page"]{ color:var(--fg); font-weight:600;
  box-shadow:inset 0 -2px 0 var(--accent); }

.tb-right{ margin-left:auto; display:flex; align-items:center; gap:var(--gap-sm); flex-wrap:nowrap; min-width:0; }
/* 顶栏副标题（调用方传入的日期 / 板块名）—— **唯一可收缩元素**：
   宽度不够时它先截断，而不是把操作区挤到第二行。窄屏（≤1040）整体收起。
   用 block（不是 inline-flex）：text-overflow 的省略号只在**块容器**上生效，
   套 inline-flex 会让内层文字换行、把顶栏撑高。 */
.tb-sub{ display:block; min-width:0; max-width:26ch;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  font-family:var(--font-mono); font-size:var(--fs-meta); color:var(--muted); }
.tb-btn{ display:inline-flex; align-items:center; gap:6px; padding:6px 11px;
  white-space:nowrap; flex-shrink:0;
  border:1px solid var(--border); border-radius:var(--r); font-size:var(--fs-meta);
  color:var(--muted); min-height:34px; text-decoration:none; background:none; }
.tb-btn:hover{ color:var(--fg); border-color:var(--line-strong); }
/* 图标按钮：与 .tb-btn 同高同边框，只占 34×34 */
.tb-btn-ico{ display:inline-flex; align-items:center; justify-content:center;
  width:34px; height:34px; padding:0; flex-shrink:0; cursor:pointer;
  border:1px solid var(--border); border-radius:var(--r);
  color:var(--muted); background:none; }
.tb-btn-ico:hover{ color:var(--fg); border-color:var(--line-strong); }
.tb-btn-ico svg{ width:15px; height:15px; }
.tb-search{ display:inline-flex; align-items:center; gap:6px; margin-right:2px; }
.tb-search input{ width:150px; padding:6px 12px; border-radius:999px;
  border:1px solid var(--border); background:var(--surface); color:var(--fg);
  font-size:var(--fs-meta); }
.tb-search input::placeholder{ color:var(--muted); }
/* 有意**不写** outline:0 —— 全局 :focus-visible 的 2px accent 环要靠它生效。
   只改边框色在 1px 上是看不清的（且 --accent-soft 作环对亮底只有 ~1.1:1）。 */
.tb-search input:focus-visible{ border-color:var(--accent); }
.tb-search button{ display:inline-flex; align-items:center; justify-content:center;
  width:30px; height:30px; border-radius:999px; border:1px solid var(--border);
  color:var(--muted); flex-shrink:0; }
.tb-search button:hover{ color:var(--fg); border-color:var(--line-strong); }
.tb-search button svg{ width:14px; height:14px; }

/* ══ sn-drop 兄弟站下拉（统一导航，母版风格，零 JS） ══ */
.sn-drop{ position:relative; flex-shrink:0; }
.sn-drop>summary{ list-style:none; cursor:pointer; font-size:14px; color:var(--muted);
  padding:6px 10px; border:1px solid transparent; border-radius:var(--r); }
.sn-drop>summary::-webkit-details-marker{ display:none; }
.sn-drop>summary::after{ content:""; display:inline-block; width:7px; height:7px; margin-left:7px;
  border-right:1.5px solid currentColor; border-bottom:1.5px solid currentColor;
  transform:rotate(45deg) translateY(-2px); }
.sn-drop[open]>summary{ color:var(--fg); border-color:var(--border); background:var(--surface); }
.sn-menu{ position:absolute; top:calc(100% + 8px); right:0; min-width:230px; z-index:40;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r);
  padding:6px; box-shadow:0 10px 30px rgba(0,0,0,.25); }
.sn-menu a{ display:flex; align-items:baseline; gap:10px; padding:8px 10px;
  border-radius:var(--r); font-size:var(--fs-meta); text-decoration:none; color:inherit; }
.sn-menu a:hover{ background:var(--fg-soft); }
.sn-menu .name{ font-weight:500; }
.sn-menu .desc{ font-family:var(--font-mono); font-size:var(--fs-micro); color:var(--muted); }
.sn-menu .badge{ font-family:var(--font-mono); font-size:var(--fs-micro); color:var(--muted);
  border:1px solid var(--border); border-radius:4px; padding:0 4px; margin-left:auto; }
/* 当前所在站：不可点、标出"你在这里" */
.sn-menu .here{ display:flex; align-items:baseline; gap:10px; padding:8px 10px;
  border-radius:var(--r); font-size:var(--fs-meta);
  background:var(--accent-soft); color:var(--accent-ink); font-weight:600; }

/* ══ 日期条 ══ */
.datebar{ border-bottom:1px solid var(--border); background:var(--sunken); }
.datebar-in{ display:flex; align-items:center; gap:var(--gap-xs); min-height:48px;
  flex-wrap:wrap; padding-block:8px; }
.dchip{ font-size:var(--fs-meta); padding:6px 11px; border:1px solid var(--border);
  border-radius:var(--r); color:var(--muted); background:var(--surface);
  white-space:nowrap; flex-shrink:0;
  text-decoration:none; }
.dchip:hover{ color:var(--fg); border-color:var(--line-strong); }
.dchip[aria-pressed="true"]{ color:var(--fg); border-color:var(--line-strong);
  box-shadow:inset 0 -2px 0 var(--accent); font-weight:600; }
/* 日期条里的「更早→」与 dchip 等高（rowlink 默认 padding 偏小会矮一截） */
.datebar-in .rowlink{ padding:6px 11px; }

/* ══ 筛选条（sticky 半透明毛玻璃；偏移量取令牌，不写字面量）══ */
.filterbar{ position:sticky; top:var(--topbar-h); z-index:20;
  background:color-mix(in oklch, var(--bg) 92%, transparent);
  backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid var(--border); }
.filterbar-in{ display:flex; align-items:center; gap:var(--gap-sm); flex-wrap:wrap; padding-block:10px; }
.fgroup{ display:flex; align-items:center; gap:var(--gap-xs); flex-wrap:wrap; }
.flabel{ font-size:var(--fs-micro); color:var(--muted); letter-spacing:.04em; }
.chip{ padding:5px 11px; border:1px solid var(--border); border-radius:999px;
  white-space:nowrap; flex-shrink:0;
  font-size:var(--fs-micro); color:var(--muted); background:var(--surface);
  min-height:28px; text-decoration:none; }
.chip:hover{ color:var(--fg); border-color:var(--line-strong); }
.chip[aria-pressed="true"]{ background:var(--accent-soft); border-color:var(--accent);
  color:var(--accent-ink); font-weight:600; }
.search{ display:flex; align-items:center; gap:var(--gap-xs); border:1px solid var(--border);
  border-radius:var(--r); background:var(--surface); padding:6px 11px;
  min-height:34px; min-width:240px; flex:0 1 320px; }
.search:focus-within{ border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft); }
.search input{ border:0; outline:0; background:none; width:100%; font-size:var(--fs-meta); }
.search input::placeholder{ color:var(--muted); }
.count{ font-size:var(--fs-meta); color:var(--muted); }
select.sel{ border:1px solid var(--border); border-radius:var(--r);
  background:var(--surface); padding:6px 9px; font-size:var(--fs-meta); min-height:32px; }
/* 仅供读屏的标签（可见文案已由 placeholder 承担，但 placeholder 不是 label，
   a11y 检查会判为无标签输入框） */
.sr-only{ position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }

/* ══ 事件卡 ══ */
.evlist{ display:grid; gap:var(--gap-sm); }
.evcard{ position:relative; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r); padding:15px 17px 14px;
  transition:background .14s ease, border-color .14s ease; }
/* hover 改底色而非位移 —— 信息密集界面里位移会引发布局抖动 */
.evcard:hover,.evcard:focus-within{
  background:color-mix(in oklch, var(--accent) 4%, var(--surface));
  border-color:var(--line-strong); }
.ev-row{ display:flex; align-items:center; gap:var(--gap-xs); flex-wrap:wrap; margin-bottom:8px; }
.ev-title{ font-size:var(--fs-h3); font-weight:600; line-height:1.4;
  letter-spacing:-.005em; }
.ev-title a{ text-decoration:none; color:inherit; }
.ev-title a:hover{ text-decoration:underline; text-underline-offset:3px; }
.ev-so{ margin-top:7px; color:var(--fg); font-size:var(--fs-body); line-height:1.55; }
/* TIME-BAR 语法：等宽小标签 + 正文，是原型的招牌手法 */
.ev-so .k{ font-size:var(--fs-micro); letter-spacing:.06em; text-transform:uppercase;
  color:var(--accent-ink); background:var(--accent-soft); border-radius:4px;
  padding:1px 6px; margin-right:8px; }
.ev-sub{ margin-top:7px; color:var(--muted); font-size:var(--fs-meta); }
.ev-toggle{ margin-top:10px; font-size:var(--fs-meta); color:var(--muted);
  display:inline-flex; align-items:center; gap:6px; padding:3px 0; min-height:24px; }
.ev-toggle:hover{ color:var(--fg); }
.ev-toggle::after{ content:"▾"; transition:transform .16s ease; }
.ev-toggle[aria-expanded="true"]::after{ transform:rotate(180deg); }
.ev-more{ display:none; margin-top:12px; padding-top:12px;
  border-top:1px dashed var(--border); gap:var(--gap-sm); }
.evcard.open .ev-more{ display:grid; }
.ev-more dt{ font-size:var(--fs-micro); letter-spacing:.06em; text-transform:uppercase;
  color:var(--muted); margin-bottom:4px; }
.ev-more dd{ margin:0; font-size:var(--fs-meta); color:var(--fg); line-height:1.6; }
.kv{ display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:var(--gap-sm); }

/* 2px meter 条：极细横条替代文字进度标签 */
.meter{ height:2px; background:var(--fg-soft); border-radius:2px;
  overflow:hidden; margin-bottom:10px; }
.meter i{ display:block; height:100%; background:var(--accent); border-radius:2px; }
.score{ font-size:var(--fs-body); font-weight:600; }
.score::after{ content:"/10"; font-size:var(--fs-micro); color:var(--muted); font-weight:400; margin-left:1px; }

/* ══ 标签：★ 数据属性驱动样式（照搬原型最关键的手法）══
   .tag[data-geo="us"]{...} —— 加一个地区色只需加一条 CSS 规则，
   HTML 侧写 data-geo 即可，不必既加类又改 CSS。 */
.tag{ display:inline-flex; align-items:center; gap:5px; padding:3px 9px;
  border:1px solid var(--border); border-radius:var(--r); font-size:var(--fs-micro);
  letter-spacing:.03em; color:var(--muted); background:var(--surface);
  text-decoration:none; }
.tag.geo{ color:var(--geo-unknown);
  border-color:color-mix(in oklch, var(--geo-unknown) 40%, var(--border)); }
.tag[data-geo="us"]{ color:var(--geo-us);
  border-color:color-mix(in oklch, var(--geo-us) 42%, var(--border)); }
.tag[data-geo="cn"]{ color:var(--geo-cn);
  border-color:color-mix(in oklch, var(--geo-cn) 42%, var(--border)); }
.tag[data-geo="cn-r"]{ color:var(--geo-cn-r);
  border-color:color-mix(in oklch, var(--geo-cn-r) 42%, var(--border)); }
.tag[data-geo="eu"]{ color:var(--geo-eu);
  border-color:color-mix(in oklch, var(--geo-eu) 42%, var(--border)); }
.tag[data-geo="jp"]{ color:var(--geo-jp);
  border-color:color-mix(in oklch, var(--geo-jp) 42%, var(--border)); }
.tag[data-geo="kr"]{ color:var(--geo-kr);
  border-color:color-mix(in oklch, var(--geo-kr) 42%, var(--border)); }
.tag[data-geo="sea"]{ color:var(--geo-sea);
  border-color:color-mix(in oklch, var(--geo-sea) 42%, var(--border)); }
.tag[data-geo="global"]{ color:var(--geo-global);
  border-color:color-mix(in oklch, var(--geo-global) 42%, var(--border)); }
.tag.src{ color:var(--accent-ink);
  border-color:color-mix(in oklch, var(--accent) 45%, var(--border));
  background:var(--accent-soft); font-weight:600; }
.tag.rumor{ color:var(--rumor);
  border-color:color-mix(in oklch, var(--rumor) 45%, var(--border));
  background:color-mix(in oklch, var(--rumor) 6%, var(--surface)); font-weight:600; }
.tag.type{ color:var(--fg); }
.src{ display:inline-flex; align-items:center; gap:6px; padding:4px 10px;
  border:1px solid var(--border); border-radius:var(--r); font-size:var(--fs-meta);
  color:var(--muted); background:var(--surface); text-decoration:none; }
.src:hover{ color:var(--fg); border-color:var(--line-strong); }
.src b{ font-weight:600; color:var(--fg); font-size:var(--fs-meta); }
.src time{ font-size:var(--fs-meta); }
.srclist{ display:flex; flex-wrap:wrap; gap:6px; }

/* ══ 分区 / 面板 / KPI ══ */
.section{ padding-block:var(--gap-lg); }
.section + .section{ border-top:1px solid var(--border); }
.sec-head{ display:flex; align-items:baseline; gap:var(--gap-sm); flex-wrap:wrap; margin-bottom:18px; }
.sec-head h2{ font-size:var(--fs-h2); font-family:var(--font-display);
  font-weight:650; letter-spacing:-.015em; }
.sec-note{ color:var(--muted); font-size:var(--fs-meta); }
.secmark{ display:inline-flex; align-items:center; gap:7px; }
.secmark::before{ content:""; width:6px; height:6px; border-radius:50%; background:var(--accent); }
.panel{ background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); }
.panel-head{ display:flex; align-items:center; gap:var(--gap-sm); padding:13px 16px;
  border-bottom:1px solid var(--border); }
.panel-head h3{ font-size:var(--fs-h3); font-weight:650; }
/* 区块头（h2 版）：比 .panel-head 更轻、无下边框，用于仪表盘页的一级区块 */
.panel-h{ display:flex; align-items:baseline; gap:var(--gap-xs); padding:11px 14px 0; }
.panel-h h2{ font-size:14px; font-weight:650; margin:0; }
.panel-h .hint{ font-size:var(--fs-meta); color:var(--muted); }
.panel-body{ padding:16px; }
.tile{ background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r); padding:14px 16px; }
.tile .v{ font-size:var(--fs-stat); font-weight:600; letter-spacing:-.02em; }
.tile .k{ font-size:var(--fs-micro); letter-spacing:.07em; text-transform:uppercase; color:var(--muted); }
.tile .s{ margin-top:6px; font-size:var(--fs-meta); color:var(--muted); }
.statrow{ display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:var(--gap-sm); }
/* 卡片数不足 5 时按实际数量铺满（3 卡占 3 列，不留 2/5 黑空） */
.statrow.n1{ grid-template-columns:minmax(0,1fr); }
.statrow.n2{ grid-template-columns:repeat(2,minmax(0,1fr)); }
.statrow.n3{ grid-template-columns:repeat(3,minmax(0,1fr)); }
.statrow.n4{ grid-template-columns:repeat(4,minmax(0,1fr)); }

/* ══ 表格（无斑马纹，hover 才提示）══ */
.tw{ overflow-x:auto; }
table.ds{ width:100%; border-collapse:collapse; font-size:var(--fs-meta); }
table.ds th,table.ds td{ padding:9px 11px; text-align:left;
  border-bottom:1px solid var(--border); vertical-align:middle; }
table.ds th{ font-size:var(--fs-micro); letter-spacing:.06em; text-transform:uppercase;
  color:var(--muted); font-weight:500; white-space:nowrap; }
table.ds tbody tr:hover{ background:var(--fg-soft); }
table.ds td.n{ font-variant-numeric:tabular-nums; text-align:right; white-space:nowrap; }
table.ds td.mid{ text-align:center; }
.bar{ display:flex; align-items:center; gap:var(--gap-xs); min-width:120px; }
.bar u{ flex:1 1 auto; height:6px; background:var(--fg-soft); border-radius:3px;
  overflow:hidden; text-decoration:none; }
.bar u i{ display:block; height:100%; background:var(--geo-cn); }
.bar span{ font-size:var(--fs-meta); color:var(--muted); width:44px; text-align:right;
  font-variant-numeric:tabular-nums; }
.rowlink{ display:inline-flex; align-items:center; gap:5px; font-size:var(--fs-meta);
  color:var(--muted); border:1px solid var(--border); border-radius:var(--r);
  padding:4px 10px; min-height:28px; text-decoration:none; }
.rowlink:hover{ color:var(--fg); border-color:var(--line-strong); }

/* ══ 洞察：置信度 / 结论 / 口径声明 ══ */
.conf{ display:inline-flex; align-items:center; gap:5px; font-size:var(--fs-meta);
  letter-spacing:.05em; white-space:nowrap; flex-shrink:0; }
.conf::before{ content:""; width:7px; height:7px; border-radius:50%;
  background:var(--muted); }
.conf.high::before{ background:var(--ok); }
.conf.mid::before{ background:var(--warn); }
.conf.low::before{ background:var(--muted); }
.findings{ list-style:none; margin:0; padding:0; display:grid; gap:var(--gap-xs); }
.findings li{ display:flex; gap:var(--gap-sm); align-items:flex-start; padding:10px 12px;
  border:1px solid var(--border); border-radius:var(--r); background:var(--sunken); }
.findings li p{ font-size:var(--fs-body); }
.evidence{ font-size:var(--fs-meta); color:var(--muted); }
/* 口径声明强制展示 —— 情报工具的结论必须带"这是怎么算的" */
.caveats{ border:1px solid var(--border); border-radius:var(--r);
  padding:12px 14px; background:var(--sunken); }
.caveats h3{ margin:0 0 6px; font-size:var(--fs-micro); letter-spacing:.07em;
  text-transform:uppercase; color:var(--warn); }
.caveats ul{ margin:0; padding-left:18px; }
.caveats li{ font-size:var(--fs-meta); color:var(--muted); line-height:1.6; }
.ready{ display:inline-flex; align-items:center; gap:5px; font-size:var(--fs-micro);
  letter-spacing:.05em; text-transform:uppercase; padding:3px 9px;
  border-radius:var(--r); border:1px solid; }
.ready[data-ok="1"]{ color:var(--ok);
  border-color:color-mix(in oklch, var(--ok) 45%, var(--border));
  background:color-mix(in oklch, var(--ok) 6%, var(--surface)); }
.ready[data-ok="0"]{ color:var(--warn);
  border-color:color-mix(in oklch, var(--warn) 45%, var(--border));
  background:color-mix(in oklch, var(--warn) 6%, var(--surface)); }
.summary{ font-size:var(--fs-body); line-height:1.6; }
.note{ border:1px solid var(--border); border-radius:var(--r);
  background:var(--sunken); padding:10px 12px; font-size:var(--fs-meta);
  color:var(--muted); display:flex; gap:var(--gap-xs); }
.note b{ font-size:var(--fs-micro); letter-spacing:.06em; text-transform:uppercase;
  color:var(--warn); }

/* ══ 时间线（故事线）══ */
.tl{ position:relative; margin:4px 0 0; padding-left:20px; }
.tl::before{ content:""; position:absolute; left:4px; top:6px; bottom:6px;
  width:1px; background:var(--border); }
.tl-item{ position:relative; padding-bottom:var(--gap-md); }
.tl-item::before{ content:""; position:absolute; left:-20px; top:5px; width:7px;
  height:7px; border-radius:50%; background:var(--surface);
  border:1px solid var(--line-strong); }
/* 首节点= 最早报道，用强调色点出 */
.tl-item:first-child::before{ background:var(--accent); border-color:var(--accent); }
.tl-when{ font-size:var(--fs-micro); color:var(--muted); }
.tl-title{ font-size:var(--fs-body); line-height:1.5; margin-top:2px; }
.tl-sum{ font-size:var(--fs-meta); color:var(--muted); margin-top:4px; line-height:1.6; }
.tl-src{ font-size:var(--fs-micro); color:var(--muted); margin-top:5px; }
.entchips{ display:flex; flex-wrap:wrap; gap:6px; }
.ent{ display:inline-flex; align-items:center; gap:6px; padding:4px 10px;
  border:1px solid var(--border); border-radius:var(--r); font-size:var(--fs-meta); }
.ent em{ font-style:normal; font-size:var(--fs-micro); color:var(--muted); letter-spacing:.04em; }
/* 「+n」折叠计数：与 .ent 同形但无类型后缀，用虚线边框区分「这不是一个实体」 */
.ent.ent-more{ border-style:dashed; color:var(--muted); font-variant-numeric:tabular-nums; }

/* ══ 页脚（与门户 .pagefoot 同语法：1px 上边框 + 大留白 + 13px 灰字）══ */
.foot{ border-top:1px solid var(--border); padding-block:var(--gap-xl);
  color:var(--muted); font-size:var(--fs-meta); }
.foot-in{ display:flex; align-items:baseline; justify-content:space-between;
  flex-wrap:wrap; gap:var(--gap-md); }
.foot-sys a{ color:var(--muted); }
.foot-sys a:hover{ color:var(--fg); }
.foot b{ font-size:var(--fs-micro); letter-spacing:.05em; text-transform:uppercase; }
.foot-home{ color:var(--accent); text-decoration:none; }
.foot-home:hover{ text-decoration:underline; }
/* 顶栏“更多”下拉（桌面端常驻，与移动端 .nav-more 同样式语言） */
.nav-more-d{ position:relative; flex-shrink:0; }
.nav-more-d>summary{ list-style:none; cursor:pointer; font-size:14px; color:var(--muted);
  padding:6px 0; border:1px solid transparent; border-radius:var(--r); }
.nav-more-d>summary::-webkit-details-marker{ display:none; }
.nav-more-d>summary::after{ content:""; display:inline-block; width:7px; height:7px; margin-left:7px;
  border-right:1.5px solid currentColor; border-bottom:1.5px solid currentColor;
  transform:rotate(45deg) translateY(-2px); }
.nav-more-d[open]>summary{ color:var(--fg); }
.nav-more-d .nav-more-list{ position:absolute; top:calc(100% + 8px); left:0; z-index:40;
  display:flex; flex-direction:column; gap:2px; min-width:190px;
  padding:6px; background:var(--surface);
  border:1px solid var(--border); border-radius:var(--r);
  box-shadow:0 10px 30px rgba(0,0,0,.25); }
.nav-more-d .nav-more-list a{ padding:8px 10px; border-radius:var(--r); font-size:var(--fs-meta);
  color:var(--muted); text-decoration:none; }
.nav-more-d .nav-more-list a:hover{ color:var(--fg); background:var(--fg-soft); }
.prov{ margin-top:var(--gap-sm); font-size:var(--fs-meta); color:var(--muted); line-height:1.7; }
.prov code{ font-size:var(--fs-meta); background:var(--fg-soft); padding:1px 5px; border-radius:4px; }

/* ══ 首页主栏/侧栏布局 ══ */
.grid-home{ display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr); gap:var(--gap-md); }
.grid-home .section{ min-width:0; }
/* 侧栏洞察：强制单列竖排（侧栏约 1/3 宽，grid-3 会挤烂标题） */
.grid-home-side .grid-3{ display:grid; grid-template-columns:minmax(0,1fr); gap:var(--gap-xs); }
/* 侧栏面板标题防窄栏硬折行（长词/英文数字包不住时允许断开） */
.grid-home-side .panel-head{ flex-wrap:wrap; }
.grid-home-side .panel-head h3{ overflow-wrap:anywhere; }

/* ══ 响应式（两个断点，照搬原型）══ */
@media (max-width:1040px){
  .statrow{ grid-template-columns:repeat(3,minmax(0,1fr)); }
  .grid-3{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .grid-2-1{ grid-template-columns:minmax(0,1fr); }
  .grid-home{ grid-template-columns:minmax(0,1fr); gap:0; }
  .grid-home .section{ margin-bottom:var(--gap-md); }
  /* 顶栏保单行：先减内容，再谈换行。
     副标题（日期/板块名）与搜索输入框在这里收起 —— 前者正文里已有，
     后者点图标即进 /search（该页自带搜索框）。 */
  .tb-sub{ display:none; }
  .tb-search input{ display:none; }
}
@media (max-width:920px){
  :root{ --gutter:20px; }
  .grid-2,.grid-3,.grid-2-1{ grid-template-columns:minmax(0,1fr); }
  .statrow{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .nav{ display:none; }        /* 窄屏收起导航，避免挤压内容 */
  .filterbar{ position:static; }
  .filterbar-in{ padding-block:12px; }
  .search{ flex:1 1 100%; }
  /* 顶栏在窄屏才允许换行（品牌+更多 / 操作区）—— 此时筛选条已 static，
     不存在偏移错位问题，换行换取可点面积。 */
  .topbar-in{ flex-wrap:wrap; }
}

/* ══ 移动端导航溢出（加法块：不动既有类语义）══
   桌面 display:none；仅 ≤920px 露出 details 披露。
   颜色只用 --surface/--border/--fg-soft（悬停改底色，不位移）。 */
.nav-more{ display:none; }
@media (max-width:920px){
  .nav-more{ display:block; position:relative; }
  .nav-more summary{ list-style:none; cursor:pointer; }
  .nav-more summary::-webkit-details-marker{ display:none; }
  .nav-more .nav-more-list{ position:fixed; left:12px; right:12px;
    top:calc(var(--topbar-h) + 6px); z-index:40;
    display:flex; flex-wrap:wrap; gap:6px; min-width:0; max-width:none;
    padding:12px; background:var(--surface);
    border:1px solid var(--border); border-radius:var(--r);
    box-shadow:0 10px 30px rgba(0,0,0,.25); }
  .nav-more .chip:hover{ background:var(--fg-soft); }
}


/* 赛道色相族（4 组，不是 13 色）：同 .tag[data-geo] 的 42% color-mix 公式，
   同 4 token（硬件=geo-us 蓝 / AI 模型应用=rumor 橙 / 基建=geo-sea 青 / 其他=muted 灰） */
.tag[data-track="blue"]{ color:var(--geo-us);
  border-color:color-mix(in oklch, var(--geo-us) 42%, var(--border)); }
.tag[data-track="amber"]{ color:var(--rumor);
  border-color:color-mix(in oklch, var(--rumor) 42%, var(--border)); }
.tag[data-track="teal"]{ color:var(--geo-sea);
  border-color:color-mix(in oklch, var(--geo-sea) 42%, var(--border)); }
.tag[data-track="slate"]{ color:var(--muted);
  border-color:color-mix(in oklch, var(--muted) 42%, var(--border)); }
/* 故事线时间线预览与卡片的间距（只调布局，颜色走全局 .tl/.rowlink） */
.evcard .tl{ margin-top:10px; }
/* 本周趋势一句话（KPI 下方，链接到周报环比） */
.trend-line{ margin:10px 0 0; font-size:12px; color:var(--muted); }
.trend-line a{ color:var(--accent-ink); }
/* 品类轴跳转（事件列表下方） */
.track-jump{ display:flex; flex-wrap:wrap; gap:6px; margin:0 0 12px; }
.track-jump .chip{ text-decoration:none; font-size:12px; }
/* 事件/实体双栏（2026-10-13）→ 2026-10-14 方案D：双栏下沉到 .grid-home，
   左 事件列表 / 右 今日摘要 + 实体聚焦；今日研判改通栏。 */
/* ══ 时间分组（2026-10-14 方案D）══
   事件列表按 first_seen 分「今天 / 昨天 / 更早」。#evlist 本身是 grid+gap，
   分组后每组成为一个 grid item，所以组内要自带同款 grid+gap，行距才不会塌。
   .hl-row:first-child 的 1px 上边框在组内首行照常生效 —— 正好当组间分隔。 */
.time-group-header{ font-size:13px; font-weight:700; color:var(--muted);
  padding:6px 0 8px; display:flex; align-items:center; gap:8px; }
.time-group-header::before{ content:""; width:6px; height:6px; border-radius:50%;
  background:var(--accent); display:inline-block; }
.time-group + .time-group{ margin-top:var(--gap-sm); }
.hl-list{ display:grid; gap:var(--gap-sm); }

/* ══ 今日摘要（2026-10-14 方案D）：右栏面板 ══ */
.summary-panel .summary-item{ font-size:13.5px; color:var(--muted); line-height:1.6;
  margin-top:8px; padding-left:12px; border-left:2px solid var(--accent-soft); }
.summary-panel .summary-item strong{ color:var(--fg); font-weight:600; }

/* KPI 行收窄（2026-10-14）：三格若按 1fr 铺满 1116px 通栏会各占约 360px，
   比它上面三句话的行宽还宽。取「三格 240px」定宽，与 hero 的视觉分量一致。 */
.kpi-wrap{ max-width:calc(3 * 240px + 2 * var(--gap-sm)); }
@media (max-width:920px){
  .kpi-wrap{ max-width:none; }
}
/* 右栏（.grid-home-side）内面板标题防窄栏硬折行，与既有侧栏规则同一口径 */
.grid-home-side .sec-head{ flex-wrap:wrap; }
/* ══ 实体聚焦：放量主体行（2026-10-14 重做）══
   旧行是一串等重灰字，六行长得一样；现在 ① 主体名+类型/赛道 与
   ② 事件数·倍数（等宽右对齐）分成两端，③ 下方通栏量条编码事件量。
   量条通栏是刻意的：只有所有行共用同一轨道，长短才可比。 */
.spike-list{ display:flex; flex-direction:column; gap:2px; }
.spike-row{ display:block; padding:9px 10px 10px; border-radius:var(--r);
  text-decoration:none; color:inherit; transition:background .14s ease; }
/* hover 用 --fg-soft（随主题走）；旧版写 var(--hover, rgba(127,127,127,.08))
   —— --hover 从未定义，一直吃的是那个硬编码灰，暗色下与底色几乎同色。 */
.spike-row:hover{ background:var(--fg-soft); }
.spike-row:focus-visible{ outline:2px solid var(--accent); outline-offset:1px; }
.sp-head{ display:flex; align-items:baseline; gap:8px; min-width:0; }
.spike-name{ font-weight:600; font-size:14px; color:var(--fg); }
.sp-kind{ font-size:var(--fs-micro); color:var(--muted);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.spike-meta{ margin-left:auto; font-size:12px; color:var(--fg);
  white-space:nowrap; font-variant-numeric:tabular-nums; }
.sp-bar{ display:block; margin-top:6px; height:4px; border-radius:2px;
  background:var(--fg-soft); overflow:hidden; }
.sp-bar i{ display:block; height:100%; border-radius:2px; background:var(--accent); }
.sp-legend{ margin:10px 0 0; font-size:var(--fs-micro); line-height:1.6;
  color:var(--muted); }
.story-more{ margin-top:8px; }
/* ══ 今日研判：三句话（2026-10-14 重做）══
   .tldr 是两列网格，.tldr-line 用 display:contents 让角色标签与正文
   各自成为网格项 —— 三行正文因此共用同一条左边缘（旧版「1. 2. 3.」
   宽度随序号变化，正文起始 x 每行都不一样）。 */
.tldr{ display:grid; grid-template-columns:3.6em minmax(0,1fr);
  column-gap:10px; row-gap:4px; margin:2px 0 14px; }
.tldr-line{ display:contents; }
.tldr-line b{ grid-column:1; padding-top:5px; font-size:var(--fs-micro);
  font-weight:700; letter-spacing:.06em; color:var(--accent-ink); }
.tldr-text{ grid-column:2; font-size:var(--fs-body); line-height:1.62; }
/* 依据链接：三句话是 LLM 研判，给可点依据让读者自己核 */
.tldr-src{ grid-column:2; font-size:var(--fs-micro); color:var(--muted);
  text-decoration:none; margin-bottom:6px; }
.tldr-src:hover{ color:var(--accent-ink); text-decoration:underline;
  text-underline-offset:2px; }
.tldr-src:focus-visible{ outline:2px solid var(--accent); outline-offset:2px;
  border-radius:3px; }
/* ══ L1 标题流（2026-10-14 重排：标题优先）══
   旧版把标签排在标题前面，flex-wrap 让每行标题的起始 x 都不同 —— 扫读时
   眼睛找不到一条竖线；本版把标题提到最前（全部左对齐同一 x），元信息压到
   标题下方一行微字。行内只写布局与层级，颜色一律走令牌。 */
.hl-row{ position:relative; display:block;
  padding:13px 14px 13px 15px;
  border-bottom:1px solid var(--border);
  transition:background .14s ease; }
.hl-row:first-child{ border-top:1px solid var(--border); }
/* hover 改底色而非位移（信息密集界面里位移会引发布局抖动）；
   文字颜色不动 —— 状态变化绝不允许降低对比度。 */
.hl-row:hover,.hl-row:focus-within{
  background:color-mix(in oklch, var(--accent) 4%, var(--bg)); }
/* ① 标题：每行第一视觉元素，字号/字重最高 */
.hl-title-row{ display:flex; align-items:baseline; gap:9px; flex-wrap:wrap; }
.hl-title{ font-size:16px; font-weight:600; line-height:1.45;
  letter-spacing:-.005em; margin:0; }
.hl-title a{ color:var(--fg); text-decoration:none; }
.hl-title a:hover{ text-decoration:underline; text-underline-offset:3px; }
.hl-title a:focus-visible{ outline:2px solid var(--accent); outline-offset:2px;
  border-radius:3px; }
/* ★ 必看落在标题行尾：不推挤标题起点，故不影响左对齐。
   放在 <h3> **之外**（2026-10-14）：原先嵌在标题里，标题的可访问名会变成
   「…新品 ★ 必看」，读屏把徽标念成标题的一部分。 */
.hl-pin{ font-size:11.5px; font-weight:700;
  color:var(--accent); white-space:nowrap; }
/* ② 意义句：第二层级，独立成行，最多两行 */
.hl-so{ margin:4px 0 0; font-size:13.5px; line-height:1.6; color:var(--muted);
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden; }
/* ③ 元信息行：第三层级，微字 + 点分隔，不再与标题争抢位置 */
.hl-meta{ display:flex; flex-wrap:wrap; align-items:center;
  gap:2px 9px; margin-top:6px; font-size:11.5px; line-height:1.5;
  color:var(--muted); }
.hl-meta > *{ white-space:nowrap; }
/* 分隔点由 CSS 生成（HTML 侧不写「·」）：增删指标不会漏掉或多出一个点 */
.hl-meta > *:not(:first-child)::before{ content:"·"; margin-right:9px;
  color:var(--line-strong); }
/* 元信息里的标签「去药丸化」：保留各自语义色，去掉边框/底色/内边距 ——
   让它成为一行安静的元数据，而不是一排与标题争抢注意力的药丸。 */
.hl-meta .tag{ border:0; background:none; padding:0; font-size:11.5px;
  letter-spacing:.02em; }
.hl-meta .tag.fresh{ color:var(--ok); }
.hl-meta .tag.follow{ color:var(--warn); }
.hl-meta .tag.date{ color:var(--warn); }
.hl-meta .tag.rumor{ color:var(--rumor); }
.hl-meta .tag.src{ color:var(--accent-ink); }
.hl-meta .tag.price{ color:var(--accent-ink); }
.hl-meta .tag.time{ font-family:var(--font-mono); }
.hl-meta .tag.geo{ font-weight:600; }
.hl-score{ color:var(--fg); font-weight:600; font-family:var(--font-mono); }
/* 已读：只把标题降到 --muted（在 --bg 上仍 ≥4.5:1）。
   不用 opacity —— 那会把对比度一起压低。 */
.hl-row.read .hl-title a{ color:var(--muted); }

/* 乙方案分组折叠已退役（2026-10-13 列表+筛选）：组 summary 改 h4 平铺 + chips 过滤 */
/* 列表+筛选（2026-10-13）：类别 chips，active 态高亮 */
.filter-row{ display:flex; flex-wrap:wrap; gap:8px; margin:2px 0 10px; }
.fchip{ border:1px solid var(--border); border-radius:999px; padding:4px 12px;
  font-size:13px; color:var(--fg); background:transparent; cursor:pointer; }
.fchip.on{ color:var(--accent); border-color:var(--accent); font-weight:700; }
.filter-row.sub{ margin-top:-4px; }
.filter-row.sub .fchip{ font-size:12px; padding:3px 10px; }
/* 子品类行不适用时置灰 + 写明条件（2026-10-14）：rowMatch 要求 theme 与 track
   同时命中，选「政策」后再点「手机/平板」会得到 0 条而页面不给任何解释。
   disabled 是唯一允许降低对比度的状态，故这里压到 .5 是合规的。 */
.filter-row.sub.off .fchip{ opacity:.5; cursor:not-allowed; }
.filter-note{ display:none; font-size:12px; color:var(--muted); align-self:center; }
.filter-row.sub.off .filter-note{ display:inline; }
.hl-sentinel{ text-align:center; color:var(--muted); font-size:12.5px; padding:12px 0; }
/* 折叠附录区（2026-10-13 GTM 全貌） */
/* 旧更多折叠区退役（2026-10-13 混排）：相关规则同步清理 */
/* 时间三件套徽标（2026-10-13）：语义色全部来自设计令牌 */
.tag.fresh{ color:var(--ok); border-color:color-mix(in oklch, var(--ok) 45%, var(--border)); }
.tag.follow{ color:var(--warn); border-color:color-mix(in oklch, var(--warn) 45%, var(--border)); }
.tag.time{ color:var(--muted); font-family:var(--font-mono); }
.tag.date{ color:var(--warn); border-color:color-mix(in oklch, var(--warn) 45%, var(--border)); }
.nodes-line{ font-size:13.5px; margin:6px 0 0; }
.cutoff-line{ font-size:12px; color:var(--muted); margin:6px 0 0; }
/* 04 已砍（2026-10-13）：组 summary 本身就是导航 */
/* _theme_panel_html 已删：theme-list/theme-item 规则同步清理 */
.rel-list{ margin:4px 0 0; padding-left:18px; font-size:12.5px; color:var(--muted); }
/* 已读卡样式：变灰，折叠态 */
.evcard.read{ opacity:.55; }
.evcard.read:hover{ opacity:.75; }
.evcard.read .ev-title a{ color:var(--muted); }
.evcard.read .ev-title a:hover{ text-decoration:none; }
/* 已读按钮行 */
.read-all-row{ text-align:right; margin-top:10px; }
.btn-read-all{ font-size:12px; color:var(--muted); background:none; border:1px solid var(--border); border-radius:3px; padding:3px 10px; cursor:pointer; }
.btn-read-all:hover{ color:var(--fg); border-color:var(--line-strong); }

/* ══ 首页三区结构（2026-10-12 重梳）—— 只写布局，颜色一律走令牌 ══ */

/* 00 结论带：与下方信号区拉开层级 */
.page-home .hero{ padding-block:32px 28px; }
.page-home .hero .h1{ font-size:clamp(26px,2.6vw,34px); }
.page-home .hero .lead{ font-size:15.5px; max-width:78ch; }
/* KPI 行在 hero 内（2026-10-14 移回日期正下方）：承担与上方小字、下方研判的间距 */
.page-home .hero .kpi-wrap{ margin-top:20px; }
.page-home .hero .tile{ padding:14px 16px; }
.page-home .hero .tile .v{ font-size:26px; }

/* 单格 KPI 宽度下限规则 2026-10-14 退役：KPI 改为恒定 3 格渲染
   （零值不再被过滤），.statrow.n1 在首页不再产生，故该规则一并删除。 */

/* 结论带与信号区之间的分隔线（颜色走 --border 令牌） */
.page-home .grid-home{ border-top:1px solid var(--border);
  padding-top:26px; gap:22px; }

/* 侧栏 2026-10-13 删除、2026-10-14 方案D 恢复（今日摘要 + 实体聚焦）——
   组件层 .grid-home 的两列定义一直在，删侧栏时只删了消费者，
   于是列表右侧空出一条 365px 的无主预留列（本次修掉）。 */

/* 04 底稿区已砍（2026-10-13）：section-archive 规则同步清理 */
