/* ============================================================
   跨境雷达 CrossBorder Radar — 样式层
   主题：浅色 / 响应式（桌面端 + 移动端）
   ============================================================ */

:root {
  --bg: #f5f6f8;
  --surface: #ffffff;
  --surface-2: #fafbfc;
  --border: #e7e9ee;
  --border-strong: #d7dae2;
  --text: #16181d;
  --text-2: #5a6172;
  --text-3: #8d94a3;
  --primary: #2b5cff;
  --primary-soft: #eef2ff;
  --primary-dark: #1e46d0;
  /* 日历悬停：比 primary-soft 更实一档，避免整格被冲成白色 */
  --cal-hover-bg: #e0e8ff;
  --accent: #ff6b35;
  /* 报名按钮（浅色：实心蓝底白字） */
  --reg-bg: #2b5cff; --reg-bg-h: #1e46d0; --reg-fg: #ffffff;
  --reg-done-bg: #fafbfc; --reg-done-fg: #5a6172; --reg-done-bd: #d7dae2;
  --amber: #f59e0b;
  --green: #10b981;
  --red: #ef4444;
  --radius: 12px;
  --radius-sm: 8px;
  --shadow-sm: 0 1px 2px rgba(16, 24, 40, 0.04);
  --shadow: 0 2px 8px rgba(16, 24, 40, 0.06);
  --shadow-lg: 0 8px 28px rgba(16, 24, 40, 0.1);
  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
  --header-h: 60px;
  /* 主题化色板（浅色） */
  --header-bg: rgba(255, 255, 255, 0.92);
  --chart-track: #eef0f4;
  --chart-axis: #e7e9ee;
  --reason-bg-1: #fff8f2;
  --reason-bg-2: #fffdfb;
  --reason-fg: #7a4a2a;
  /* 三方面影响（对卖家 / 对海外仓 / 对货代物流） */
  --imp-bg: #fbfcfe; --imp-bd: #e7e9ee; --imp-label-fg: #5a6172;
  --imp-good-bg: #e8f7ef; --imp-good-fg: #0a7d5a;
  --imp-flat-bg: #f1f2f5; --imp-flat-fg: #5a6172;
  --imp-bad-bg: #fdecec; --imp-bad-fg: #b42318;
  --tag-market-bg: #f0f4ff; --tag-market-fg: #2b4bbf;
  --tag-platform-bg: #f4f5f7; --tag-platform-fg: #3a4050;
  --tag-topic-bg: #f0faf6; --tag-topic-fg: #0a7d5a;
  --mark-bg: #fff3bf;
  --event-date-1: #f7f9ff; --event-date-2: #eef2ff;
  --ok-bg: #e8f7ef; --ok-fg: #0a7d5a;
  --soon-bg: #fff3e6; --soon-fg: #b45309;
  --done-bg: #f1f2f5; --done-fg: #8d94a3;
  --act-bg: #fff8e1; --act-bd: #f0c000; --act-fg: #b45309;
  --ov1: #eef2ff; --ov2: #e8f7ef; --ov3: #fff3e6; --ov4: #fdeef4;
  /* 概览卡图标前景色（与 ov1—ov4 底色成对，对比度均 ≥ 4.5:1） */
  --ov1-fg: #2b5cff; --ov2-fg: #0a7d5a; --ov3-fg: #b45309; --ov4-fg: #be185d;
  --ins-orange: #e8590c; --ins-green: #0a7d5a; --ins-blue: #2b5cff;
  /* 市场色板 */
  --m-us: #2563eb; --m-ca: #dc2626; --m-uk: #7c3aed; --m-de: #0f766e;
  --m-it: #16a34a; --m-es: #ea580c; --m-eu: #4f46e5; --m-global: #64748b;
  /* 平台色板 */
  --p-amazon: #ff9900; --p-tiktok: #111827; --p-temu: #fb7701;
  --p-dtc: #5a31f4; --p-warehouse: #0891b2;
  /* 主题色板 */
  --t-policy: #e11d48; --t-logistics: #0891b2; --t-compliance: #9333ea;
  --t-market: #059669; --t-operation: #d97706; --t-data: #475569;
  --scroll-thumb: #d5d9e0;
  --scroll-thumb-h: #bcc2cc;
}

/* ---------------- 深色主题 ---------------- */
:root[data-theme="dark"] {
  --bg: #0e1116;
  --surface: #161a20;
  --surface-2: #1c212a;
  --border: #252b35;
  --border-strong: #343b47;
  --text: #e9ecf1;
  --text-2: #a4acba;
  --text-3: #717a89;
  --primary: #5b84ff;
  --primary-soft: #1a2440;
  --primary-dark: #92adff;
  --cal-hover-bg: #26355c;
  --accent: #ff8552;
  /* 报名按钮（深色：亮蓝底 + 深色字，保证对比度） */
  --reg-bg: #5b84ff; --reg-bg-h: #7d9dff; --reg-fg: #0b0e13;
  --reg-done-bg: #1c212a; --reg-done-fg: #a4acba; --reg-done-bd: #343b47;
  --header-bg: rgba(14, 17, 22, 0.9);
  --chart-track: #262c36;
  --chart-axis: #2c333e;
  --reason-bg-1: #251e18;
  --reason-bg-2: #1e1a16;
  --reason-fg: #f0b48a;
  --imp-bg: #171b22; --imp-bd: #252b35; --imp-label-fg: #a4acba;
  --imp-good-bg: #16271f; --imp-good-fg: #5fd39c;
  --imp-flat-bg: #1f242c; --imp-flat-fg: #a4acba;
  --imp-bad-bg: #2c1a1c; --imp-bad-fg: #ff8a8a;
  --tag-market-bg: #1b2540; --tag-market-fg: #9db4ff;
  --tag-platform-bg: #21262f; --tag-platform-fg: #c3cad7;
  --tag-topic-bg: #16271f; --tag-topic-fg: #6fd8ab;
  --mark-bg: #4d3d13;
  --event-date-1: #1b2237; --event-date-2: #161a20;
  --ok-bg: #152a20; --ok-fg: #5fd39c;
  --soon-bg: #2e2312; --soon-fg: #f0b354;
  --done-bg: #1f242c; --done-fg: #78818f;
  --act-bg: #2e2612; --act-bd: #8a6d1a; --act-fg: #f0c464;
  --ov1: #1a2440; --ov2: #152a20; --ov3: #2e2312; --ov4: #2b1a24;
  --ov1-fg: #8fa8ff; --ov2-fg: #4ade80; --ov3-fg: #fbbf24; --ov4-fg: #f472b6;
  --ins-orange: #ff9a5c; --ins-green: #5fd39c; --ins-blue: #8aa7ff;
  /* 深色下提亮，保证在深色背景上可读 */
  --m-us: #5b8cff; --m-ca: #ff6b6b; --m-uk: #a78bfa; --m-de: #2dd4bf;
  --m-it: #4ade80; --m-es: #fb923c; --m-eu: #818cf8; --m-global: #94a3b8;
  --p-amazon: #ffb340; --p-tiktok: #e5e7eb; --p-temu: #ff9433;
  --p-dtc: #8b7cff; --p-warehouse: #22b8d6;
  --t-policy: #fb7185; --t-logistics: #22b8d6; --t-compliance: #c084fc;
  --t-market: #34d399; --t-operation: #fbbf24; --t-data: #94a3b8;
  --scroll-thumb: #2c333e;
  --scroll-thumb-h: #3a424f;
  color-scheme: dark;
}

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

html { scroll-behavior: smooth; }

body {
  font-family: var(--font);
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  padding-bottom: 40px;
}

a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; }
input { font-family: inherit; }

/* ---------------- Header ---------------- */
.header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--header-bg);
  backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid var(--border);
}
.header-inner {
  max-width: 1360px;
  margin: 0 auto;
  height: var(--header-h);
  padding: 0 20px;
  display: flex;
  align-items: center;
  gap: 20px;
}
.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}
.brand-mark {
  width: 34px; height: 34px;
  border-radius: 9px;
  background: linear-gradient(135deg, #2b5cff, #1a8cff 55%, #00c2c7);
  display: grid; place-items: center;
  color: #fff; font-weight: 800; font-size: 16px;
  box-shadow: 0 3px 10px rgba(43, 92, 255, 0.3);
}
.brand-text { display: flex; flex-direction: column; line-height: 1.15; }
.brand-name { font-size: 16px; font-weight: 800; letter-spacing: -0.2px; }
.brand-sub { font-size: 10.5px; color: var(--text-3); font-weight: 500; letter-spacing: 0.4px; }

.nav { display: flex; gap: 4px; margin-left: 8px; }
.nav-item {
  padding: 8px 14px;
  border-radius: 9px;
  font-size: 14px;
  font-weight: 600;
  color: var(--text-2);
  transition: all 0.16s;
  white-space: nowrap;
}
.nav-item:hover { background: var(--surface-2); color: var(--text); }
.nav-item.active { background: var(--primary); color: #fff; box-shadow: 0 3px 10px rgba(43, 92, 255, 0.28); }
.nav-item .nav-count {
  font-size: 11px; opacity: 0.75; margin-left: 4px; font-weight: 700;
}

.header-right { margin-left: auto; display: flex; align-items: center; gap: 12px; }

.search-box {
  position: relative;
  display: flex; align-items: center;
}
.search-box svg { position: absolute; left: 11px; width: 15px; height: 15px; color: var(--text-3); pointer-events: none; }
.search-input {
  width: 240px;
  height: 38px;
  padding: 0 32px 0 34px;
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  background: var(--surface);
  font-size: 13.5px;
  color: var(--text);
  transition: all 0.16s;
}
.search-input::placeholder { color: var(--text-3); }
.search-input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-soft); }
.search-clear {
  position: absolute; right: 8px; width: 20px; height: 20px;
  border-radius: 50%; display: none; place-items: center;
  color: var(--text-3); font-size: 15px; line-height: 1;
}
.search-clear:hover { background: var(--surface-2); color: var(--text); }
.search-box.has-value .search-clear { display: grid; }

.menu-toggle {
  display: none;
  width: 38px; height: 38px;
  border-radius: 9px;
  border: 1px solid var(--border-strong);
  align-items: center; justify-content: center;
}
.menu-toggle svg { width: 18px; height: 18px; }

/* ---------------- Overview strip ---------------- */
.overview {
  max-width: 1360px;
  margin: 18px auto 0;
  padding: 0 20px;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
}
.ov-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 14px 16px;
  box-shadow: var(--shadow-sm);
  display: flex; align-items: center; gap: 13px;
  cursor: pointer; transition: all 0.16s;
}
.ov-card:hover {
  border-color: var(--primary);
  box-shadow: 0 6px 18px rgba(43, 92, 255, 0.14);
  transform: translateY(-2px);
}
.ov-card:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.ov-go {
  margin-left: auto; font-size: 15px; font-weight: 800; color: var(--text-3);
  opacity: 0; transform: translateX(-5px); transition: all 0.16s;
}
.ov-card:hover .ov-go { opacity: 1; transform: translateX(0); color: var(--primary); }
.ov-icon {
  width: 42px; height: 42px; border-radius: 12px;
  display: grid; place-items: center; flex-shrink: 0;
  border: 1px solid transparent;
  transition: transform 0.16s;
}
.ov-icon svg { width: 21px; height: 21px; display: block; }
/* 统一形状与尺寸，仅以色相区分语义 */
.ov-tint-blue  { background: var(--ov1); color: var(--ov1-fg); }
.ov-tint-green { background: var(--ov2); color: var(--ov2-fg); }
.ov-tint-amber { background: var(--ov3); color: var(--ov3-fg); }
.ov-tint-pink  { background: var(--ov4); color: var(--ov4-fg); }
.ov-card:hover .ov-icon { transform: scale(1.06); }
.ov-body { min-width: 0; }
.ov-num {
  font-size: 22px; font-weight: 800; letter-spacing: -0.6px; line-height: 1.1;
  font-variant-numeric: tabular-nums;
}
.ov-unit { font-size: 12px; font-weight: 600; color: var(--text-3); margin-left: 3px; letter-spacing: 0; }
.ov-label { font-size: 12px; color: var(--text-2); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ---------------- Layout ---------------- */
.layout {
  max-width: 1360px;
  margin: 18px auto 0;
  padding: 0 20px;
  display: grid;
  grid-template-columns: 250px minmax(0, 1fr);
  gap: 22px;
  align-items: start;
}

/* ---------------- Sidebar ---------------- */
.sidebar {
  position: sticky;
  top: calc(var(--header-h) + 18px);
  display: flex; flex-direction: column; gap: 14px;
  max-height: calc(100vh - var(--header-h) - 34px);
  overflow-y: auto;
  padding-right: 4px;
}
.sidebar::-webkit-scrollbar { width: 6px; }
.sidebar::-webkit-scrollbar-thumb { background: #dfe2e9; border-radius: 3px; }

.filter-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 14px;
  box-shadow: var(--shadow-sm);
}
.filter-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 11px;
}
.filter-title {
  font-size: 12px; font-weight: 700; color: var(--text-3);
  text-transform: uppercase; letter-spacing: 0.7px;
}
.filter-reset {
  font-size: 12px; color: var(--primary); font-weight: 600;
}
.filter-reset:hover { text-decoration: underline; }

.chip-group { display: flex; flex-wrap: wrap; gap: 6px; }
.chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 5px 10px;
  border-radius: 999px;
  border: 1px solid var(--border-strong);
  background: var(--surface);
  font-size: 12.5px; font-weight: 600;
  color: var(--text-2);
  transition: all 0.14s;
  white-space: nowrap;
}
.chip:hover { border-color: var(--text-3); color: var(--text); }
.chip.active {
  background: var(--primary); border-color: var(--primary); color: #fff;
}
.chip .dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
.chip.active .dot { box-shadow: 0 0 0 2px rgba(255,255,255,0.35); }

.date-list { display: flex; flex-direction: column; gap: 2px; max-height: 300px; overflow-y: auto; }
.date-item {
  display: flex; align-items: center; justify-content: space-between;
  padding: 7px 10px; border-radius: var(--radius-sm);
  font-size: 13px; font-weight: 600; color: var(--text-2);
  transition: all 0.14s; text-align: left; width: 100%;
}
.date-item:hover { background: var(--surface-2); color: var(--text); }
.date-item.active { background: var(--primary-soft); color: var(--primary-dark); }
.date-item .cnt {
  font-size: 11px; font-weight: 700; color: var(--text-3);
  background: var(--surface-2); padding: 1px 7px; border-radius: 999px;
}
.date-item.active .cnt { background: var(--primary); color: #fff; }
.date-item .dlabel { display: flex; align-items: center; gap: 7px; }
.date-item .today-tag {
  font-size: 10px; font-weight: 700; color: #fff; background: var(--accent);
  padding: 1px 6px; border-radius: 4px;
}

/* ---------------- Content ---------------- */
.content { min-width: 0; }

.toolbar {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; margin-bottom: 14px; flex-wrap: wrap;
}
.result-info { font-size: 13px; color: var(--text-2); }
.result-info b { color: var(--text); font-weight: 700; }
.sort-group { display: flex; gap: 4px; background: var(--surface); border: 1px solid var(--border); border-radius: 9px; padding: 3px; }
.sort-btn {
  padding: 5px 11px; border-radius: 6px; font-size: 12.5px; font-weight: 600; color: var(--text-2);
  transition: all 0.14s; white-space: nowrap;
}
.sort-btn:hover { color: var(--text); }
.sort-btn.active { background: var(--primary-soft); color: var(--primary-dark); }

/* toolbar action buttons */
.toolbar-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tbtn {
  display: inline-flex; align-items: center; gap: 6px;
  height: 34px; padding: 0 12px; border-radius: 9px;
  border: 1px solid var(--border-strong); background: var(--surface);
  font-size: 12.5px; font-weight: 700; color: var(--text-2);
  transition: all 0.14s; white-space: nowrap;
}
.tbtn:hover { border-color: var(--text-3); color: var(--text); background: var(--surface-2); }
.tbtn.active { background: var(--act-bg); border-color: var(--act-bd); color: var(--act-fg); }
.tbtn svg { width: 14px; height: 14px; }
.tbtn-cnt {
  font-size: 11px; font-weight: 800; padding: 1px 6px; border-radius: 999px;
  background: var(--surface-2); color: var(--text-2); border: 1px solid var(--border);
}
.tbtn.active .tbtn-cnt { background: var(--act-bd); color: #fff; border-color: var(--act-bd); }

/* 收藏星标 */
.fav-btn {
  width: 28px; height: 28px; border-radius: 8px; flex-shrink: 0;
  display: grid; place-items: center; color: var(--text-3);
  border: 1px solid transparent; transition: all 0.14s;
}
.fav-btn:hover { background: var(--surface-2); border-color: var(--border); color: #f0a500; }
.fav-btn.on { color: #f0a500; }
.fav-btn svg { width: 16px; height: 16px; }

/* 搜索关键词高亮 */
mark { background: var(--mark-bg); color: inherit; padding: 0 2px; border-radius: 3px; }

/* 主题切换按钮 */
.icon-btn {
  width: 38px; height: 38px; border-radius: 9px; flex-shrink: 0;
  border: 1px solid var(--border-strong); background: var(--surface);
  display: grid; place-items: center; color: var(--text-2);
  transition: all 0.16s;
}
.icon-btn:hover { border-color: var(--text-3); color: var(--text); background: var(--surface-2); }
.icon-btn svg { width: 17px; height: 17px; }
.icon-btn .ico-moon { display: none; }
:root[data-theme="dark"] .icon-btn .ico-sun { display: none; }
:root[data-theme="dark"] .icon-btn .ico-moon { display: block; }

/* NEW 徽章 */
.new-badge {
  display: inline-flex; align-items: center;
  font-size: 10px; font-weight: 800; letter-spacing: 0.5px;
  color: #fff; background: var(--accent);
  padding: 1.5px 6px; border-radius: 4px;
}

/* 通用柔和按钮 */
.btn-soft {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  height: 34px; border-radius: 9px; width: 100%;
  border: 1px solid var(--border-strong); background: var(--surface);
  font-size: 12.5px; font-weight: 700; color: var(--text-2);
  transition: all 0.14s;
}
.btn-soft:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }

.active-filters { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; }
.active-filters:empty { display: none; }
.af-tag {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 8px 4px 11px; border-radius: 999px;
  background: var(--primary-soft); color: var(--primary-dark);
  font-size: 12px; font-weight: 600;
}
.af-tag button { color: var(--primary-dark); opacity: 0.6; font-size: 14px; line-height: 1; }
.af-tag button:hover { opacity: 1; }

/* ---------------- News timeline ---------------- */
.date-section { margin-bottom: 26px; }
.date-heading {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 12px; padding-bottom: 8px;
  border-bottom: 1px solid var(--border);
}
.date-heading h2 { font-size: 16px; font-weight: 800; letter-spacing: -0.2px; }
.date-heading .weekday { font-size: 13px; color: var(--text-3); font-weight: 600; }
.date-heading .count-pill {
  margin-left: auto; font-size: 12px; font-weight: 700; color: var(--text-2);
  background: var(--surface); border: 1px solid var(--border);
  padding: 2px 10px; border-radius: 999px;
}

.card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 18px;
  margin-bottom: 12px;
  box-shadow: var(--shadow-sm);
  transition: all 0.16s;
  position: relative;
  overflow: hidden;
}
.card:hover { border-color: var(--border-strong); box-shadow: var(--shadow); transform: translateY(-1px); }
.card-top {
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
  margin-bottom: 8px;
}
.card-time {
  font-size: 12px; font-weight: 700; color: var(--text-3);
  font-variant-numeric: tabular-nums;
}
.card-source {
  font-size: 12px; color: var(--text-2); font-weight: 600;
  display: inline-flex; align-items: center; gap: 5px;
}
.card-source::before {
  content: ''; width: 5px; height: 5px; border-radius: 50%; background: var(--text-3);
}
.score-badge {
  margin-left: auto;
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11.5px; font-weight: 700; color: var(--text-2);
  background: var(--surface-2); border: 1px solid var(--border);
  padding: 3px 9px; border-radius: 999px;
}
.score-ring {
  width: 22px; height: 22px; border-radius: 50%;
  display: grid; place-items: center; font-size: 9px; font-weight: 800; color: #fff;
}
.card-title {
  font-size: 16.5px; font-weight: 750; line-height: 1.42;
  letter-spacing: -0.2px; margin-bottom: 8px; color: var(--text);
}
.card-title a:hover { color: var(--primary); }
.card-summary { font-size: 13.5px; color: var(--text-2); line-height: 1.66; margin-bottom: 11px; }
.card-reason {
  display: flex; gap: 8px;
  background: linear-gradient(90deg, var(--reason-bg-1), var(--reason-bg-2));
  border-left: 3px solid var(--accent);
  border-radius: 0 8px 8px 0;
  padding: 9px 12px; margin-bottom: 11px;
  font-size: 13px; color: var(--reason-fg); line-height: 1.6;
}
.card-reason .rlabel { font-weight: 800; color: var(--accent); flex-shrink: 0; }

/* 三方面影响：对卖家 / 对海外仓 / 对货代物流（利好 · 中性 · 利空） */
.card-impacts {
  display: grid; gap: 5px;
  background: var(--imp-bg);
  border: 1px solid var(--imp-bd);
  border-radius: 8px;
  padding: 9px 11px; margin-bottom: 11px;
}
.imp-row { display: flex; align-items: baseline; gap: 7px; font-size: 12.5px; line-height: 1.55; }
.imp-label { flex-shrink: 0; width: 92px; font-weight: 800; color: var(--imp-label-fg); }
.imp-pol {
  flex-shrink: 0; min-width: 34px; text-align: center;
  padding: 1px 7px; border-radius: 5px;
  font-size: 11px; font-weight: 800; letter-spacing: 0.2px;
}
.imp-pol.imp-good { background: var(--imp-good-bg); color: var(--imp-good-fg); }
.imp-pol.imp-flat { background: var(--imp-flat-bg); color: var(--imp-flat-fg); }
.imp-pol.imp-bad { background: var(--imp-bad-bg); color: var(--imp-bad-fg); }
.imp-text { color: var(--text-2); }

.card-foot { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tag {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 9px; border-radius: 6px;
  font-size: 11.5px; font-weight: 700;
  border: 1px solid transparent;
}
.tag-market { background: var(--tag-market-bg); color: var(--tag-market-fg); }
.tag-platform { background: var(--tag-platform-bg); color: var(--tag-platform-fg); }
.tag-topic { background: var(--tag-topic-bg); color: var(--tag-topic-fg); }

.related-src {
  font-size: 12px; color: var(--text-3); margin-top: 9px;
  padding-top: 9px; border-top: 1px dashed var(--border);
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
}
.related-src b { color: var(--text-2); font-weight: 700; }
.related-src .rs {
  padding: 1px 7px; border-radius: 5px; background: var(--surface-2);
  border: 1px solid var(--border); color: var(--text-2); font-weight: 600;
}
.related-src .rs-drill, .card-foot .rs-drill {
  cursor: pointer; transition: all 0.14s; border-color: var(--accent); color: var(--accent);
}
.related-src .rs-drill:hover, .card-foot .rs-drill:hover {
  background: var(--accent); color: #fff; border-color: var(--accent);
}

/* ---------------- Event cards ---------------- */
.event-card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 0; margin-bottom: 12px;
  box-shadow: var(--shadow-sm); transition: all 0.16s; overflow: hidden;
  display: grid; grid-template-columns: 92px minmax(0, 1fr);
}
.event-card:hover { border-color: var(--border-strong); box-shadow: var(--shadow); transform: translateY(-1px); }
.event-date {
  background: linear-gradient(160deg, var(--event-date-1), var(--event-date-2));
  border-right: 1px solid var(--border);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 14px 6px; text-align: center;
}
.event-date .m { font-size: 11.5px; font-weight: 700; color: var(--primary); letter-spacing: 0.5px; }
.event-date .d { font-size: 27px; font-weight: 800; color: var(--primary-dark); line-height: 1.05; letter-spacing: -1px; }
.event-date .dur { font-size: 10.5px; color: var(--text-3); font-weight: 600; margin-top: 3px; }
.event-body { padding: 14px 18px; min-width: 0; }
.event-head { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 8px; }
.event-name { font-size: 16px; font-weight: 750; line-height: 1.4; letter-spacing: -0.2px; flex: 1; }
.status-badge {
  font-size: 11px; font-weight: 700; padding: 3px 9px; border-radius: 999px; white-space: nowrap; flex-shrink: 0;
}
.status-open { background: var(--ok-bg); color: var(--ok-fg); }
.status-soon { background: var(--soon-bg); color: var(--soon-fg); }
.status-done { background: var(--done-bg); color: var(--done-fg); }
.countdown {
  font-size: 11px; font-weight: 800; padding: 3px 8px; border-radius: 999px;
  background: var(--primary-soft); color: var(--primary-dark); white-space: nowrap;
}

.event-meta { display: flex; flex-wrap: wrap; gap: 6px 18px; margin-bottom: 10px; }
.meta-item { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--text-2); }
.meta-item svg { width: 14px; height: 14px; color: var(--text-3); flex-shrink: 0; }
.meta-item b { color: var(--text); font-weight: 700; }
.event-desc { font-size: 13.5px; color: var(--text-2); line-height: 1.66; margin-bottom: 11px; }

/* ---------------- 报名 / 详情 CTA ---------------- */
.reg-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 14px; border-radius: 999px;
  background: var(--reg-bg); color: var(--reg-fg);
  border: 1px solid var(--reg-bg);
  font-size: 12.5px; font-weight: 700; line-height: 1;
  text-decoration: none; white-space: nowrap;
  transition: background 0.15s, border-color 0.15s, transform 0.15s, box-shadow 0.15s;
}
.reg-btn:hover {
  background: var(--reg-bg-h); border-color: var(--reg-bg-h);
  transform: translateY(-1px); box-shadow: var(--shadow);
}
.reg-btn:active { transform: translateY(0); }
.reg-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.reg-arrow { font-weight: 800; font-size: 13px; transition: transform 0.15s; }
.reg-btn:hover .reg-arrow { transform: translateX(2px); }
/* 卡片底部：按钮靠右，与左侧标签拉开距离 */
.reg-btn-card { margin-left: auto; }
/* 已结束的活动：弱化为描边按钮 */
.reg-btn.is-done { background: var(--reg-done-bg); color: var(--reg-done-fg); border-color: var(--reg-done-bd); }
.reg-btn.is-done:hover { background: var(--surface); color: var(--reg-bg); border-color: var(--reg-bg); }
.reg-btn.is-done:hover .reg-arrow { transform: none; }
/* 列表视图内的行内报名链接 */
.list-reg { color: var(--primary); font-weight: 700; text-decoration: none; white-space: nowrap; flex-shrink: 0; }
.list-reg:hover { text-decoration: underline; }
/* 详情弹窗底部的报名区 */
.modal-cta-sec { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.modal-cta-sec .cta-hint { font-size: 12px; color: var(--text-3); }
.reg-btn-modal { padding: 9px 20px; font-size: 13.5px; }

/* ---------------- Case cards ---------------- */
.case-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.case-card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 16px 17px;
  box-shadow: var(--shadow-sm); transition: all 0.16s;
  display: flex; flex-direction: column;
}
.case-card:hover { border-color: var(--border-strong); box-shadow: var(--shadow); transform: translateY(-1px); }
.case-head { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
.case-rank {
  width: 30px; height: 30px; border-radius: 9px; flex-shrink: 0;
  display: grid; place-items: center; font-size: 14px; font-weight: 800; color: #fff;
  background: linear-gradient(135deg, #9aa3b2, #6b7484);
}
.case-rank.r1 { background: linear-gradient(135deg, #ffb020, #ff7a00); }
.case-rank.r2 { background: linear-gradient(135deg, #b8c0cc, #8b95a5); }
.case-rank.r3 { background: linear-gradient(135deg, #e0a878, #c07840); }
.case-title { font-size: 15.5px; font-weight: 750; line-height: 1.4; letter-spacing: -0.2px; }
.case-cat { font-size: 12px; color: var(--text-3); font-weight: 600; margin-top: 2px; }

.case-stats {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 11px;
}
.stat-box {
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 8px 10px;
}
.stat-box .k { font-size: 10.5px; color: var(--text-3); font-weight: 700; letter-spacing: 0.4px; text-transform: uppercase; }
.stat-box .v { font-size: 13px; font-weight: 750; color: var(--text); line-height: 1.4; margin-top: 2px; }
.stat-box .v.hl { color: #d9480f; }
.stat-box .v.green { color: #0a7d5a; }

.case-desc { font-size: 13px; color: var(--text-2); line-height: 1.64; margin-bottom: 11px; flex: 1; }

/* ---------------- Dashboard ---------------- */
.dash-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}
.chart-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 18px 18px;
  box-shadow: var(--shadow-sm);
}
.chart-card.wide { grid-column: 1 / -1; }
.chart-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 14px; }
.chart-title { font-size: 14.5px; font-weight: 750; letter-spacing: -0.2px; }
.chart-sub { font-size: 12px; color: var(--text-3); }

.bar-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.bar-row:last-child { margin-bottom: 0; }
.bar-label { width: 66px; flex-shrink: 0; font-size: 12.5px; font-weight: 700; color: var(--text-2); }
.bar-track { flex: 1; height: 22px; background: var(--surface-2); border-radius: 6px; overflow: hidden; position: relative; }
.bar-fill {
  height: 100%; border-radius: 6px; display: flex; align-items: center;
  padding-left: 8px; min-width: 26px;
  font-size: 11.5px; font-weight: 800; color: #fff;
  transition: width 0.5s cubic-bezier(.4,0,.2,1);
}
.bar-val { width: 40px; flex-shrink: 0; text-align: right; font-size: 12.5px; font-weight: 800; color: var(--text); font-variant-numeric: tabular-nums; }

/* 图表下钻交互 */
.bar-row.drillable { border-radius: 6px; transition: background 0.14s; cursor: pointer; }
.bar-row.drillable:hover { background: var(--surface-2); }
.bar-row.drillable:hover .bar-fill { filter: brightness(1.1); }
.legend-item.drillable { border-radius: 7px; transition: background 0.14s; cursor: pointer; }
.legend-item.drillable:hover { background: var(--surface-2); }
.heat-cell.drillable { cursor: pointer; }
.heat-cell.drillable:hover { outline: 2px solid var(--text-3); outline-offset: -2px; }
.trend-bar.drillable:hover rect { filter: brightness(1.12); }
.donut-wrap svg circle[data-drill]:hover { filter: brightness(1.12); }

.donut-wrap { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.donut-legend { display: flex; flex-direction: column; gap: 8px; flex: 1; min-width: 140px; }
.legend-item { display: flex; align-items: center; gap: 8px; font-size: 12.5px; }
.legend-dot { width: 10px; height: 10px; border-radius: 3px; flex-shrink: 0; }
.legend-name { color: var(--text-2); font-weight: 600; flex: 1; }
.legend-val { font-weight: 800; color: var(--text); font-variant-numeric: tabular-nums; }
.legend-pct { color: var(--text-3); font-size: 11.5px; font-weight: 600; width: 40px; text-align: right; }

.trend-svg { width: 100%; height: auto; display: block; overflow: visible; }
.trend-labels { display: flex; justify-content: space-between; margin-top: 6px; }
.trend-labels span { font-size: 10.5px; color: var(--text-3); font-weight: 600; }

.insight-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
.insight {
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 11px 13px;
}
.insight .ik { font-size: 11px; font-weight: 700; color: var(--text-3); letter-spacing: 0.4px; }
.insight .iv { font-size: 16px; font-weight: 800; margin-top: 3px; letter-spacing: -0.3px; }
.insight .id { font-size: 11.5px; color: var(--text-2); margin-top: 2px; line-height: 1.5; }
.insight-go { cursor: pointer; transition: all 0.16s; position: relative; }
.insight-go:hover { border-color: var(--primary); background: var(--primary-soft); transform: translateY(-1px); }
.insight-go:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.insight-go::after {
  content: '→'; position: absolute; top: 9px; right: 11px;
  font-size: 12px; font-weight: 800; color: var(--primary);
  opacity: 0; transition: opacity 0.16s;
}
.insight-go:hover::after { opacity: 1; }

/* ---------------- 网站使用统计（看板 · 本机口径） ---------------- */
.stat-kpis {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(126px, 1fr));
  gap: 9px; margin-bottom: 16px;
}
.stat-kpi {
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 10px; padding: 10px 12px; min-width: 0;
}
.stat-kpi .sk-k { font-size: 11px; font-weight: 700; color: var(--text-2); letter-spacing: 0.4px; white-space: nowrap; }
.stat-kpi .sk-v { font-size: 17px; font-weight: 800; margin-top: 3px; letter-spacing: -0.3px; line-height: 1.25; }
.stat-kpi .sk-u { font-size: 11.5px; font-weight: 700; color: var(--text-3); margin-left: 3px; }
.stat-kpi .sk-d { font-size: 11px; color: var(--text-2); margin-top: 3px; line-height: 1.45; }

.stat-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-bottom: 16px; }
.stat-sub-title {
  font-size: 12.5px; font-weight: 750; margin-bottom: 10px;
  display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap;
}
.stat-sub-note { font-size: 11.5px; font-weight: 600; color: var(--text-3); }

.stat-brief-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.stat-brief-row:last-child { margin-bottom: 0; }
.stat-brief-label { width: 38px; flex-shrink: 0; font-size: 12.5px; font-weight: 700; color: var(--text-2); }
.stat-brief-meta { flex-shrink: 0; font-size: 11px; font-weight: 600; color: var(--text-2); min-width: 88px; text-align: right; }

.stat-empty { font-size: 12px; color: var(--text-3); padding: 16px 0; text-align: center; }

/* 统计趋势图的轴标签：等宽居中 + 与 SVG padX 同比例的内边距，使标签与柱子中心对齐 */
.stat-trend-labels { justify-content: flex-start; padding: 0 3.9%; }
.stat-trend-labels span { flex: 1; text-align: center; }

.stat-note {
  margin-top: 16px; padding: 10px 12px; border-radius: 9px;
  background: var(--surface-2); border: 1px solid var(--border);
  font-size: 11.5px; line-height: 1.7; color: var(--text-2);
}
.stat-note b { color: var(--text); }
.stat-note code {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 11px; background: var(--bg); padding: 1px 5px;
  border-radius: 4px; border: 1px solid var(--border); color: var(--text);
}

.stat-clear {
  margin-left: auto; align-self: center; flex-shrink: 0;
  font-size: 11.5px; font-weight: 650; font-family: inherit;
  color: var(--text-2); background: none;
  border: 1px solid var(--border); border-radius: 7px;
  padding: 3px 10px; cursor: pointer; transition: all 0.15s;
}
.stat-clear:hover { color: var(--imp-bad-fg); border-color: var(--imp-bad-fg); background: var(--imp-bad-bg); }
.stat-clear:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* ---------------- 关键词关注 ---------------- */
.kw-input-row { display: flex; gap: 6px; }
.kw-input {
  flex: 1; min-width: 0; height: 32px; padding: 0 10px;
  border: 1px solid var(--border-strong); border-radius: 8px;
  background: var(--surface); font-size: 12.5px; color: var(--text);
  transition: all 0.14s;
}
.kw-input::placeholder { color: var(--text-3); }
.kw-input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-soft); }
.kw-add {
  width: 32px; height: 32px; border-radius: 8px; flex-shrink: 0;
  border: 1px solid var(--border-strong); background: var(--surface);
  color: var(--text-2); font-size: 17px; font-weight: 700; line-height: 1;
  display: grid; place-items: center; transition: all 0.14s;
}
.kw-add:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
.kw-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px; }
.kw-list:empty::after { content: '暂无关注词，输入后回车即可添加'; font-size: 12px; color: var(--text-3); }
.kw-chip {
  display: inline-flex; align-items: center;
  border: 1px solid var(--border-strong); border-radius: 999px;
  background: var(--surface); overflow: hidden; transition: all 0.14s;
}
.kw-chip:hover { border-color: var(--text-3); }
.kw-chip.active { background: var(--primary); border-color: var(--primary); }
.kw-name {
  padding: 4px 3px 4px 10px; font-size: 12.5px; font-weight: 600;
  color: var(--text-2); display: inline-flex; align-items: center; gap: 5px;
}
.kw-chip.active .kw-name { color: #fff; }
.kw-name b {
  font-size: 10.5px; font-weight: 800; padding: 0 5px; border-radius: 999px;
  background: var(--surface-2); color: var(--text-3); font-variant-numeric: tabular-nums;
}
.kw-chip.active .kw-name b { background: rgba(255, 255, 255, 0.28); color: #fff; }
.kw-del { padding: 4px 8px 4px 2px; font-size: 13px; line-height: 1; color: var(--text-3); }
.kw-del:hover { color: var(--red); }
.kw-chip.active .kw-del { color: rgba(255, 255, 255, 0.75); }
.kw-chip.active .kw-del:hover { color: #fff; }

/* ---------------- 详情弹窗 ---------------- */
.modal-mask {
  position: fixed; inset: 0; z-index: 300;
  background: rgba(16, 24, 40, 0.5);
  backdrop-filter: blur(3px);
  display: none; align-items: flex-start; justify-content: center;
  padding: 44px 20px; overflow-y: auto;
}
.modal-mask.show { display: flex; }
.modal {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 16px; width: 100%; max-width: 760px;
  box-shadow: var(--shadow-lg); overflow: hidden;
  animation: modalIn 0.22s cubic-bezier(.4, 0, .2, 1);
}
@keyframes modalIn {
  from { opacity: 0; transform: translateY(14px) scale(.99); }
  to { opacity: 1; transform: none; }
}
.modal-head {
  display: flex; align-items: center; gap: 10px;
  padding: 14px 20px; border-bottom: 1px solid var(--border);
  position: sticky; top: 0; background: var(--surface); z-index: 2;
}
.modal-kind {
  font-size: 11.5px; font-weight: 800; letter-spacing: .5px;
  color: var(--primary-dark); background: var(--primary-soft);
  padding: 3px 9px; border-radius: 6px;
}
.modal-head .card-time { font-size: 12.5px; }
.modal-actions { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.modal-close {
  width: 32px; height: 32px; border-radius: 9px;
  display: grid; place-items: center; color: var(--text-3);
  border: 1px solid var(--border); background: var(--surface);
  font-size: 15px; transition: all .14s;
}
.modal-close:hover { color: var(--text); background: var(--surface-2); border-color: var(--text-3); }

.modal-body { padding: 18px 20px 8px; }
.modal-title {
  font-size: 20px; font-weight: 800; line-height: 1.42;
  letter-spacing: -.3px; margin-bottom: 12px;
}
.modal-meta { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-bottom: 14px; }
.modal-sec { margin-bottom: 16px; }
.modal-sec-label {
  font-size: 11.5px; font-weight: 800; color: var(--text-3);
  letter-spacing: .6px; text-transform: uppercase; margin-bottom: 7px;
}
.modal-text { font-size: 14px; color: var(--text-2); line-height: 1.75; }

.modal-related { border-top: 1px solid var(--border); padding: 16px 20px 20px; }
.rel-list { display: flex; flex-direction: column; gap: 8px; }
.rel-item {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 10px 12px; border-radius: 10px; text-align: left; width: 100%;
  border: 1px solid var(--border); background: var(--surface-2);
  transition: all .14s;
}
.rel-item:hover { border-color: var(--primary); background: var(--primary-soft); }
.rel-score {
  flex-shrink: 0; width: 30px; height: 30px; border-radius: 8px;
  display: grid; place-items: center; font-size: 11.5px; font-weight: 800; color: #fff;
}
.rel-main { min-width: 0; flex: 1; display: block; }
.rel-title { display: block; font-size: 13.5px; font-weight: 700; color: var(--text); line-height: 1.45; }
.rel-sub { display: block; font-size: 11.5px; color: var(--text-3); margin-top: 3px; }
.rel-arrow { color: var(--text-3); flex-shrink: 0; align-self: center; font-size: 14px; }

/* 卡片可点击提示 */
.card[data-detail], .event-card[data-detail], .case-card[data-detail] { cursor: pointer; }
.card[data-detail]:hover .card-title { color: var(--primary); }

/* ---------------- 视图切换 ---------------- */
.view-group {
  display: flex; gap: 3px; background: var(--surface);
  border: 1px solid var(--border); border-radius: 9px; padding: 3px;
}
.view-btn {
  padding: 5px 11px; border-radius: 6px; font-size: 12.5px; font-weight: 600;
  color: var(--text-2); white-space: nowrap; transition: all 0.14s;
  display: inline-flex; align-items: center; gap: 5px;
}
.view-btn:hover { color: var(--text); }
.view-btn.active { background: var(--primary-soft); color: var(--primary-dark); }
.view-btn svg { width: 13px; height: 13px; }

/* ---------------- 紧凑列表 ---------------- */
.list {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow-sm);
}
.list-head, .list-row {
  display: grid; grid-template-columns: 44px minmax(0, 1fr) 156px 74px;
  align-items: center; gap: 12px; padding: 0 14px;
}
.list-head {
  height: 36px; background: var(--surface-2); border-bottom: 1px solid var(--border);
  font-size: 11px; font-weight: 700; color: var(--text-3); letter-spacing: 0.6px;
}
.list-row {
  min-height: 54px; padding-top: 7px; padding-bottom: 7px;
  border-bottom: 1px solid var(--border); cursor: pointer; transition: background 0.12s;
}
.list-row:last-child { border-bottom: none; }
.list-row:hover { background: var(--surface-2); }
.list-row.is-read { opacity: 0.62; }
.list-row.is-read:hover { opacity: 1; }
.list-badge {
  width: 30px; height: 30px; border-radius: 8px;
  display: grid; place-items: center; font-size: 11.5px; font-weight: 800;
  color: #fff; font-variant-numeric: tabular-nums;
}
.list-main { min-width: 0; display: block; }
.list-title {
  display: block; font-size: 13.5px; font-weight: 700; color: var(--text);
  line-height: 1.42; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.list-sub {
  display: flex; align-items: center; gap: 6px; min-width: 0;
  font-size: 11.5px; color: var(--text-3); margin-top: 2px;
}
/* 元信息可省略号截断，但右侧报名链接始终完整可见 */
.list-sub .ls-meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.list-tags { display: flex; gap: 4px; overflow: hidden; }
.list-tags .tag { font-size: 10.5px; padding: 2px 7px; }
.list-actions { display: flex; gap: 2px; justify-content: flex-end; }
.list-empty { padding: 24px; text-align: center; color: var(--text-3); font-size: 13px; }

/* ---------------- 市场 × 平台 矩阵 ---------------- */
.heat { display: flex; flex-direction: column; gap: 5px; }
.heat-row { display: grid; grid-template-columns: 58px repeat(5, minmax(0, 1fr)); gap: 5px; }
.heat-cell {
  height: 34px; border-radius: 7px; display: grid; place-items: center;
  font-size: 12.5px; font-weight: 700; font-variant-numeric: tabular-nums;
}
.heat-label { background: transparent; color: var(--text-2); font-size: 11.5px; font-weight: 700; }
.heat-head .heat-cell { height: 20px; font-size: 10.5px; color: var(--text-3); font-weight: 700; }
.heat-legend {
  display: flex; align-items: center; gap: 7px; margin-top: 12px;
  font-size: 11px; color: var(--text-3); font-weight: 600;
}
.heat-scale { display: flex; gap: 3px; }
.heat-scale i {
  width: 20px; height: 11px; border-radius: 3px; display: block;
}

/* ---------------- 监控简报（可打印） ---------------- */
.report-mask {
  position: fixed; inset: 0; z-index: 320;
  background: rgba(16, 24, 40, 0.5); backdrop-filter: blur(3px);
  display: none; align-items: flex-start; justify-content: center;
  padding: 36px 20px; overflow-y: auto;
}
.report-mask.show { display: flex; }
.report-wrap {
  background: #ffffff; color: #16181d;
  border-radius: 14px; width: 100%; max-width: 830px;
  box-shadow: var(--shadow-lg); overflow: hidden;
  animation: modalIn 0.22s cubic-bezier(.4, 0, .2, 1);
}
.report-bar {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 20px; border-bottom: 1px solid #e7e9ee;
  position: sticky; top: 0; background: #ffffff; z-index: 2;
}
.report-bar .rb-title { font-size: 13.5px; font-weight: 800; }
.report-bar .rb-actions { margin-left: auto; display: flex; gap: 8px; }
.report-bar button {
  height: 32px; padding: 0 13px; border-radius: 8px;
  border: 1px solid #d7dae2; background: #fff; color: #5a6172;
  font-size: 12.5px; font-weight: 700; transition: all .14s;
  display: inline-flex; align-items: center; gap: 6px;
}
.report-bar button:hover { border-color: #2b5cff; color: #2b5cff; background: #eef2ff; }
.report-bar button.primary { background: #2b5cff; border-color: #2b5cff; color: #fff; }
.report-bar button.primary:hover { background: #1e46d0; }
.report-bar button svg { width: 14px; height: 14px; }
.report { padding: 26px 30px 34px; }

.rp-head { border-bottom: 2px solid #16181d; padding-bottom: 14px; margin-bottom: 20px; }
.rp-title { font-size: 23px; font-weight: 800; letter-spacing: -.4px; }
.rp-sub { font-size: 12.5px; color: #5a6172; margin-top: 5px; }
.rp-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 22px; }
.rp-kpi { border: 1px solid #e7e9ee; border-radius: 9px; padding: 10px 12px; }
.rp-kpi .k { font-size: 10.5px; color: #8d94a3; font-weight: 700; letter-spacing: .4px; }
.rp-kpi .v { font-size: 20px; font-weight: 800; margin-top: 2px; letter-spacing: -.4px; }
.rp-sec { margin-bottom: 22px; }
.rp-sec-title {
  font-size: 14px; font-weight: 800; margin-bottom: 11px;
  padding-left: 9px; border-left: 3px solid #2b5cff; line-height: 1.3;
}
.rp-sec-note { font-size: 11.5px; color: #8d94a3; font-weight: 600; margin-left: 8px; }
.rp-list { display: flex; flex-direction: column; gap: 11px; }
.rp-item { display: flex; gap: 10px; }
.rp-num {
  flex-shrink: 0; width: 22px; height: 22px; border-radius: 6px;
  background: #16181d; color: #fff; display: grid; place-items: center;
  font-size: 11px; font-weight: 800;
}
.rp-item-main { min-width: 0; flex: 1; }
.rp-item-title { font-size: 13.5px; font-weight: 700; line-height: 1.45; }
.rp-item-meta { font-size: 11.5px; color: #8d94a3; margin-top: 3px; }
.rp-tags { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 5px; }
.rp-tag {
  font-size: 10.5px; font-weight: 700; padding: 2px 7px;
  border-radius: 5px; background: #f4f5f7; color: #3a4050;
}
.rp-tag.hot { background: #fff3e6; color: #b45309; }
.rp-kw { display: flex; flex-wrap: wrap; gap: 8px; }
.rp-kw-item {
  border: 1px solid #e7e9ee; border-radius: 8px; padding: 7px 12px;
  font-size: 12.5px; font-weight: 600; color: #5a6172;
}
.rp-kw-item b { font-size: 15px; font-weight: 800; color: #16181d; margin-left: 6px; }
.rp-empty { font-size: 12.5px; color: #8d94a3; }
.rp-foot {
  border-top: 1px solid #e7e9ee; padding-top: 12px; margin-top: 6px;
  font-size: 11px; color: #8d94a3; line-height: 1.75;
}

/* ---------------- 跨境简报：侧栏入口卡 ---------------- */
.brief-entry .filter-title { display: flex; align-items: center; gap: 7px; }
.brief-tag {
  font-size: 10px; font-weight: 800; letter-spacing: .3px;
  padding: 2px 7px; border-radius: 20px;
  background: linear-gradient(135deg, #2b5cff, #5b7cff); color: #fff;
}
.brief-note { font-size: 11.5px; color: var(--text-3); line-height: 1.6; margin: 2px 0 10px; }
.brief-btns { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; }
.brief-btn {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  padding: 9px 4px; border-radius: 10px; cursor: pointer;
  border: 1px solid var(--border); background: var(--surface);
  transition: all .14s;
}
.brief-btn b { font-size: 13px; font-weight: 800; color: var(--text-1); }
.brief-btn span { font-size: 10px; color: var(--text-3); font-weight: 600; }
.brief-btn:hover {
  border-color: #2b5cff; background: #eef2ff; transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(43, 92, 255, .16);
}
.brief-btn:hover b { color: #2b5cff; }

/* ---------------- 跨境简报：弹窗 ---------------- */
.brief-mask {
  position: fixed; inset: 0; z-index: 340;
  background: rgba(16, 24, 40, 0.55); backdrop-filter: blur(4px);
  display: none; align-items: flex-start; justify-content: center;
  padding: 30px 18px 50px; overflow-y: auto;
}
.brief-mask.show { display: flex; }
.brief-wrap {
  width: 100%; max-width: 760px;
  animation: modalIn 0.22s cubic-bezier(.4, 0, .2, 1);
}
.brief-bar {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  margin-bottom: 14px;
}
.brief-bar .bb-title { font-size: 15px; font-weight: 800; color: #fff; }
.brief-tabs {
  display: inline-flex; padding: 3px; border-radius: 10px;
  background: rgba(255, 255, 255, 0.16);
}
.brief-tab {
  padding: 5px 15px; border-radius: 8px; border: 0; cursor: pointer;
  background: transparent; color: rgba(255, 255, 255, 0.82);
  font-size: 12.5px; font-weight: 700; transition: all .14s;
}
.brief-tab:hover { color: #fff; }
.brief-tab.active { background: #fff; color: #2b5cff; }

/* 排版风格切换：单独占一行，小胶囊按钮 + 色卡预览 */
.brief-bar .brief-styles {
  order: 5; flex: 1 0 100%; margin-top: 2px;
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
}
.bs-label {
  font-size: 11px; font-weight: 700; letter-spacing: .5px;
  color: rgba(255, 255, 255, .62); margin-right: 2px;
}
.brief-style {
  display: inline-flex; align-items: center; gap: 6px;
  height: 30px; padding: 0 11px; border-radius: 9px; cursor: pointer;
  border: 1px solid rgba(255, 255, 255, .24); background: rgba(255, 255, 255, .12);
  color: rgba(255, 255, 255, .86); font-size: 12px; font-weight: 700;
  transition: all .14s; white-space: nowrap;
}
.brief-style:hover { background: rgba(255, 255, 255, .24); color: #fff; }
.brief-style.active {
  background: #fff; border-color: #fff; color: #2b5cff;
  box-shadow: 0 2px 10px rgba(0, 0, 0, .22);
}
.bs-swatch {
  width: 13px; height: 13px; border-radius: 4px; flex-shrink: 0;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .1);
}
.bs-classic { background: linear-gradient(135deg, #2b5cff 0%, #5b7cff 100%); }
.bs-editorial { background: linear-gradient(135deg, #1f2937 0%, #0f172a 100%); }
.bs-minimal { background: #ffffff; }
.bs-dark { background: #101319; }

/* ---------- 朋友圈文案生成框（弹窗内，位于分享卡片上方） ---------- */
.share-copy {
  margin-bottom: 14px; padding: 14px 16px 12px;
  border-radius: 16px;
  background: rgba(255, 255, 255, .1);
  border: 1px solid rgba(255, 255, 255, .18);
  backdrop-filter: blur(6px);
}
.sc-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.sc-title {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; font-weight: 800; color: #fff;
}
.sc-title svg { width: 15px; height: 15px; color: #9fb6ff; flex-shrink: 0; }
.sc-tag {
  font-size: 11px; font-weight: 700; padding: 3px 10px; border-radius: 999px;
  background: rgba(122, 162, 255, .22); color: #c7d6ff;
  border: 1px solid rgba(122, 162, 255, .32); white-space: nowrap;
}
.sc-actions { margin-left: auto; display: flex; gap: 8px; }
.sc-btn {
  height: 32px; padding: 0 13px; border-radius: 9px; cursor: pointer;
  border: 1px solid rgba(255, 255, 255, .3); background: rgba(255, 255, 255, .14);
  color: #fff; font-size: 12.5px; font-weight: 700; transition: all .14s;
  display: inline-flex; align-items: center; gap: 6px; white-space: nowrap;
}
.sc-btn:hover { background: rgba(255, 255, 255, .26); }
.sc-btn.primary { background: #fff; border-color: #fff; color: #2b5cff; }
.sc-btn.primary:hover { background: #eef2ff; }
.sc-btn svg { width: 14px; height: 14px; flex-shrink: 0; }
.sc-text {
  font-size: 13.5px; line-height: 1.9; color: rgba(255, 255, 255, .95);
  white-space: pre-wrap; word-break: break-word; user-select: text;
  background: rgba(0, 0, 0, .18); border-radius: 11px;
  padding: 13px 14px;
}
.sc-foot {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  flex-wrap: wrap; margin-top: 9px;
  font-size: 10.5px; color: rgba(255, 255, 255, .58);
}
@media (max-width: 640px) {
  .share-copy { padding: 12px 13px 10px; border-radius: 14px; }
  .sc-actions { margin-left: 0; width: 100%; }
  .sc-btn { flex: 1; justify-content: center; }
  .sc-text { font-size: 13px; line-height: 1.85; padding: 12px; }
}
.brief-bar .bb-actions { margin-left: auto; display: flex; gap: 8px; }
.bb-btn {
  height: 34px; padding: 0 14px; border-radius: 9px; cursor: pointer;
  border: 1px solid rgba(255, 255, 255, 0.3); background: rgba(255, 255, 255, 0.14);
  color: #fff; font-size: 12.5px; font-weight: 700; transition: all .14s;
  display: inline-flex; align-items: center; gap: 6px;
}
.bb-btn:hover { background: rgba(255, 255, 255, 0.26); }
.bb-btn.primary { background: #fff; border-color: #fff; color: #2b5cff; }
.bb-btn.primary:hover { background: #eef2ff; }
.bb-btn svg { width: 14px; height: 14px; }
.brief-stage { border-radius: 18px; overflow: hidden; box-shadow: 0 24px 70px rgba(0, 0, 0, .38); }
.brief-hint { text-align: center; font-size: 11.5px; color: rgba(255, 255, 255, .78); margin-top: 12px; }

/* ---------------- 跨境简报：分享卡片 ----------------
   固定配色（不跟随站点深浅色），保证导出 PNG 与预览一致。
   4 套排版由 .brief-card[data-style] 提供配色变量，
   由 [data-head] / [data-kpi] / [data-num] / [data-sec] / [data-div] 控制版式开关。 */
.brief-card {
  /* 默认 = 经典蓝 */
  --bc-bg: #ffffff; --bc-fg: #1a2036; --bc-rule: #eceff5; --bc-accent: #2b5cff;
  --bc-title: #1a2036; --bc-desc: #5f6672; --bc-meta: #9aa3b2;
  --bc-head-from: #2b5cff; --bc-head-to: #5b7cff;
  --bc-head-fg: #ffffff; --bc-head-sub: rgba(255, 255, 255, .9); --bc-head-blob: rgba(255, 255, 255, .1);
  --bc-mark-bg: rgba(255, 255, 255, .2); --bc-mark-fg: #ffffff; --bc-eyebrow: #ffffff;
  --bc-kpi-bg: #f5f7fb; --bc-kpi-val: #2b5cff; --bc-kpi-key: #6b7280;
  --bc-chip-bg: #eef2ff; --bc-chip-fg: #2b5cff;
  --bc-rank-bg: #2b5cff; --bc-rank-fg: #ffffff;
  --bc-good-bg: #e8f7ef; --bc-good-fg: #0a7d5a;
  --bc-flat-bg: #f1f2f5; --bc-flat-fg: #5a6172;
  --bc-bad-bg: #fdecec; --bc-bad-fg: #b42318;
  background: var(--bc-bg); color: var(--bc-fg);
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, sans-serif;
}
/* —— 财经杂志 —— */
.brief-card[data-style="editorial"] {
  --bc-bg: #ffffff; --bc-fg: #111827; --bc-rule: #e5e7eb; --bc-accent: #b91c1c;
  --bc-title: #111827; --bc-desc: #4b5563; --bc-meta: #9ca3af;
  --bc-head-from: #1f2937; --bc-head-to: #0f172a;
  --bc-head-fg: #ffffff; --bc-head-sub: rgba(255, 255, 255, .72); --bc-head-blob: rgba(255, 255, 255, .05);
  --bc-mark-bg: rgba(255, 255, 255, .14); --bc-mark-fg: #ffffff; --bc-eyebrow: #f87171;
  --bc-kpi-bg: transparent; --bc-kpi-val: #111827; --bc-kpi-key: #6b7280;
  --bc-chip-bg: #ffffff; --bc-chip-fg: #374151;
  --bc-rank-bg: transparent; --bc-rank-fg: #b91c1c;
  --bc-good-bg: #e8f7ef; --bc-good-fg: #0a7d5a;
  --bc-flat-bg: #f4f5f8; --bc-flat-fg: #4b5563;
  --bc-bad-bg: #fdecec; --bc-bad-fg: #b91c1c;
}
/* —— 极简白 —— */
.brief-card[data-style="minimal"] {
  --bc-bg: #ffffff; --bc-fg: #0b1220; --bc-rule: #eef1f6; --bc-accent: #2b5cff;
  --bc-title: #0b1220; --bc-desc: #6b7280; --bc-meta: #9aa3b2;
  --bc-head-from: #ffffff; --bc-head-to: #ffffff;
  --bc-head-fg: #0b1220; --bc-head-sub: #8b93a3; --bc-head-blob: transparent;
  --bc-mark-bg: #2b5cff; --bc-mark-fg: #ffffff; --bc-eyebrow: #2b5cff;
  --bc-kpi-bg: transparent; --bc-kpi-val: #0b1220; --bc-kpi-key: #9aa3b2;
  --bc-chip-bg: #f4f6fa; --bc-chip-fg: #4b5563;
  --bc-rank-bg: transparent; --bc-rank-fg: #8b93a3;
  --bc-good-bg: #eef8f3; --bc-good-fg: #0a7d5a;
  --bc-flat-bg: #f5f6f9; --bc-flat-fg: #6b7280;
  --bc-bad-bg: #fdeeee; --bc-bad-fg: #b42318;
}
/* —— 深色 —— */
.brief-card[data-style="dark"] {
  --bc-bg: #101319; --bc-fg: #e6e9ef; --bc-rule: #232833; --bc-accent: #7aa2ff;
  --bc-title: #f8fafc; --bc-desc: #a5adbb; --bc-meta: #8b93a3;
  --bc-head-from: #1c2740; --bc-head-to: #101319;
  --bc-head-fg: #f8fafc; --bc-head-sub: rgba(226, 232, 240, .72); --bc-head-blob: rgba(122, 162, 255, .1);
  --bc-mark-bg: rgba(122, 162, 255, .22); --bc-mark-fg: #c7d6ff; --bc-eyebrow: #7aa2ff;
  --bc-kpi-bg: #171b23; --bc-kpi-val: #7aa2ff; --bc-kpi-key: #8b93a3;
  --bc-chip-bg: rgba(122, 162, 255, .14); --bc-chip-fg: #a8c0ff;
  --bc-rank-bg: #7aa2ff; --bc-rank-fg: #0b0e13;
  --bc-good-bg: #16271f; --bc-good-fg: #5fd39c;
  --bc-flat-bg: #1f242c; --bc-flat-fg: #a4acba;
  --bc-bad-bg: #2c1a1c; --bc-bad-fg: #ff8a8a;
}

/* ---------- 页眉 ---------- */
.bc-head {
  position: relative; padding: 26px 30px 24px; overflow: hidden;
  background: linear-gradient(135deg, var(--bc-head-from) 0%, var(--bc-head-to) 100%);
  color: var(--bc-head-fg);
}
.bc-head::after {
  content: ''; position: absolute; right: -40px; top: -50px;
  width: 180px; height: 180px; border-radius: 50%;
  background: var(--bc-head-blob);
}
.bc-brand { position: relative; display: flex; align-items: center; gap: 11px; margin-bottom: 20px; }
.bc-mark {
  width: 42px; height: 42px; border-radius: 12px; flex-shrink: 0;
  background: var(--bc-mark-bg); color: var(--bc-mark-fg);
  display: grid; place-items: center; font-size: 23px; font-weight: 800;
}
.bc-brand-text { display: flex; flex-direction: column; line-height: 1.25; }
.bc-brand-text b { font-size: 15px; font-weight: 800; letter-spacing: .3px; color: var(--bc-head-fg); }
.bc-brand-text i { font-size: 10px; font-style: normal; letter-spacing: 1.6px; color: var(--bc-head-sub); }
.bc-eyebrow {
  position: relative; margin-bottom: 7px;
  font-size: 10.5px; font-weight: 800; letter-spacing: 2.2px;
  color: var(--bc-eyebrow);
}
.bc-brand + .bc-eyebrow { margin-top: -7px; }   /* 20px 外边距塌陷后 = 13px，不依赖 :has() */
.bc-head-title { position: relative; font-size: 30px; font-weight: 800; letter-spacing: -.5px; color: var(--bc-head-fg); }
.bc-head-sub { position: relative; font-size: 13px; color: var(--bc-head-sub); margin-top: 7px; }

/* 白底页眉（极简白） */
.brief-card[data-head="plain"] .bc-head { border-bottom: 1px solid var(--bc-rule); }
.brief-card[data-head="plain"] .bc-head::after { display: none; }

/* ---------- 数据概览 ---------- */
.bc-kpis {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
  padding: 20px 30px 4px;
}
.bc-kpi { background: var(--bc-kpi-bg); border-radius: 12px; padding: 13px 6px; text-align: center; }
.bc-kpi-v { font-size: 26px; font-weight: 800; color: var(--bc-kpi-val); letter-spacing: -.5px; font-variant-numeric: tabular-nums; }
.bc-kpi-k { font-size: 11.5px; color: var(--bc-kpi-key); font-weight: 600; margin-top: 3px; }
/* 竖线分隔（财经杂志） */
.brief-card[data-kpi="rule"] .bc-kpis { gap: 0; }
.brief-card[data-kpi="rule"] .bc-kpi { background: transparent; border-radius: 0; border-left: 1px solid var(--bc-rule); }
.brief-card[data-kpi="rule"] .bc-kpi:first-child { border-left: 0; }
/* 纯留白（极简白） */
.brief-card[data-kpi="plain"] .bc-kpis { border-bottom: 1px solid var(--bc-rule); padding-bottom: 18px; }
.brief-card[data-kpi="plain"] .bc-kpi { background: transparent; }

/* ---------- 正文 ---------- */
.bc-body { padding: 8px 30px 6px; }
.bc-sec-title {
  display: flex; align-items: center; gap: 8px;
  font-size: 15px; font-weight: 800; color: var(--bc-title);
  margin: 20px 0 12px;
}
.bc-sec-title em { font-size: 11px; font-style: normal; font-weight: 600; color: var(--bc-meta); margin-left: auto; }
.bc-dot { width: 5px; height: 16px; border-radius: 3px; background: var(--bc-accent); flex-shrink: 0; }
/* 小标签 + 横线（财经杂志 / 极简白） */
.brief-card[data-sec="rule"] .bc-sec-title { border-bottom: 1px solid var(--bc-rule); padding-bottom: 9px; }
.brief-card[data-sec="rule"] .bc-dot { width: 11px; height: 11px; border-radius: 3px; }

.bc-points { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; }
.bc-point { display: flex; gap: 12px; }
.bc-rank {
  flex-shrink: 0; width: 26px; height: 26px; border-radius: 8px;
  background: var(--bc-rank-bg); color: var(--bc-rank-fg);
  display: grid; place-items: center; font-size: 13px; font-weight: 800;
}
/* 序号式排名：不占方块，与标题基线对齐 */
.brief-card[data-num="index"] .bc-rank,
.brief-card[data-num="hash"] .bc-rank {
  width: auto; min-width: 26px; height: 21px; border-radius: 0;
  background: transparent; display: block; text-align: left;
  font-size: 16px; line-height: 21px; letter-spacing: .4px;
}
.brief-card[data-num="hash"] .bc-rank { font-size: 15px; }
.bc-point-main { min-width: 0; flex: 1; }
.bc-point-title { font-size: 14px; font-weight: 700; line-height: 1.5; color: var(--bc-title); }
.bc-point-desc { font-size: 12.5px; color: var(--bc-desc); line-height: 1.6; margin-top: 4px; }
/* 「对谁利好/利空」标注行 —— 让读卡片的人一眼知道影响落在谁身上 */
.bc-point-stance {
  font-size: 12.5px; line-height: 1.6; margin-top: 5px;
  padding: 5px 9px; border-radius: 7px;
  background: var(--bc-stance-bg); color: var(--bc-stance-fg);
}
.bc-point-stance b { font-weight: 700; margin-right: 5px; }
.bc-point-stance.pol-good { --bc-stance-bg: var(--bc-good-bg); --bc-stance-fg: var(--bc-good-fg); }
.bc-point-stance.pol-flat { --bc-stance-bg: var(--bc-flat-bg); --bc-stance-fg: var(--bc-flat-fg); }
.bc-point-stance.pol-bad { --bc-stance-bg: var(--bc-bad-bg); --bc-stance-fg: var(--bc-bad-fg); }
.bc-point-meta { font-size: 11px; color: var(--bc-meta); margin-top: 5px; }
/* 条目之间加细分隔线（财经杂志） */
.brief-card[data-div="1"] .bc-point:not(:last-child) { border-bottom: 1px solid var(--bc-rule); padding-bottom: 14px; }

.bc-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.bc-chip {
  font-size: 12px; font-weight: 700; color: var(--bc-chip-fg);
  background: var(--bc-chip-bg); border: 1px solid var(--bc-rule);
  border-radius: 9px; padding: 6px 12px;
}
.bc-chip b { margin-left: 6px; font-size: 13px; color: var(--bc-accent); }

/* ---------- 页脚 ---------- */
.bc-foot {
  margin: 22px 30px 0; padding: 15px 0 22px;
  border-top: 1px solid var(--bc-rule);
  font-size: 11px; color: var(--bc-meta);
}
.bc-foot-row { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
.bc-foot-brand { font-weight: 600; }
.bc-foot-scope { margin-top: 7px; font-size: 10px; line-height: 1.55; }

/* ---------------- 轻量提示 toast ---------------- */
.toast {
  position: fixed; left: 50%; bottom: 34px; transform: translate(-50%, 16px);
  background: #16181d; color: #fff; font-size: 13px; font-weight: 600;
  padding: 10px 18px; border-radius: 10px; z-index: 400;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .3);
  opacity: 0; pointer-events: none; transition: all .22s;
}
.toast.show { opacity: 1; transform: translate(-50%, 0); }


/* 打印：只保留简报内容 */
@media print {
  body.report-open { background: #fff; }
  body.report-open .header,
  body.report-open .overview,
  body.report-open .layout,
  body.report-open .footer,
  body.report-open .drawer-mask,
  body.report-open .modal-mask,
  body.report-open .report-bar { display: none !important; }
  body.report-open .report-mask {
    position: static; display: block; background: none;
    backdrop-filter: none; padding: 0; overflow: visible;
  }
  body.report-open .report-wrap {
    box-shadow: none; border-radius: 0; max-width: none;
  }
  body.report-open .report { padding: 0; }
  .rp-sec, .rp-item, .rp-kpis { break-inside: avoid; }

  /* 跨境简报打印：只输出卡片本身 */
  body.brief-open { background: #fff; }
  body.brief-open .header,
  body.brief-open .overview,
  body.brief-open .layout,
  body.brief-open .footer,
  body.brief-open .drawer-mask,
  body.brief-open .modal-mask,
  body.brief-open .report-mask,
  body.brief-open .brief-bar,
  body.brief-open .share-copy,
  body.brief-open .brief-hint { display: none !important; }
  body.brief-open .brief-mask {
    position: static; display: block; background: none;
    backdrop-filter: none; padding: 0; overflow: visible;
  }
  body.brief-open .brief-stage { box-shadow: none; border-radius: 0; }
  body.brief-open .brief-card { break-inside: avoid; }
}

/* ---------------- 数据新鲜度告警 ---------------- */
.health-banner {
  display: none;
  max-width: 1360px;
  margin: 14px auto 0;
  padding: 0 20px;
}
.health-banner.show { display: block; }
.health-inner {
  display: flex; align-items: flex-start; gap: 10px;
  background: var(--soon-bg); color: var(--soon-fg);
  border: 1px solid var(--act-bd);
  border-radius: var(--radius); padding: 11px 15px;
  font-size: 13px; font-weight: 600; line-height: 1.6;
}
.health-inner .hi-ico { flex-shrink: 0; font-size: 15px; line-height: 1.4; }
.health-inner b { font-weight: 800; }
.health-inner .hi-hint { font-weight: 500; opacity: 0.9; }

/* ---------------- 跨模块搜索提示 ---------------- */
.xmod-hint {
  display: flex; align-items: center; justify-content: center;
  flex-wrap: wrap; gap: 8px; margin-top: -34px; padding: 0 0 30px;
}
.xh-label { font-size: 13px; color: var(--text-2); font-weight: 600; }
.xh-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 13px; border-radius: 999px;
  border: 1px solid var(--primary); background: var(--primary-soft);
  color: var(--primary-dark); font-size: 13px; font-weight: 700;
  transition: all 0.14s;
}
.xh-btn:hover { background: var(--primary); color: #fff; }
.xh-btn b { font-weight: 800; }

/* ---------------- 展会日历视图 ---------------- */
.cal {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 16px; box-shadow: var(--shadow-sm);
}
.cal-head { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.cal-title { font-size: 15.5px; font-weight: 800; letter-spacing: -.2px; }
.cal-sub { font-size: 12px; color: var(--text-3); font-weight: 600; }
.cal-nav { margin-left: auto; display: flex; gap: 6px; }
.cal-nav button {
  height: 30px; min-width: 30px; padding: 0 9px; border-radius: 8px;
  border: 1px solid var(--border-strong); background: var(--surface);
  color: var(--text-2); font-size: 12.5px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center;
  transition: all .14s;
}
.cal-nav button:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 5px; }
.cal-wd {
  text-align: center; font-size: 11px; font-weight: 700;
  color: var(--text-3); padding-bottom: 6px; letter-spacing: .3px;
}
.cal-day {
  min-height: 68px; border-radius: 8px; border: 1px solid var(--border);
  padding: 5px 6px; display: flex; flex-direction: column; gap: 3px;
  background: var(--surface); text-align: left; transition: all .14s;
  overflow: hidden;
}
.cal-day.blank { border: none; background: transparent; }
.cal-day.has { cursor: pointer; border-color: var(--border-strong); background: var(--surface-2); }
.cal-day.today { border-color: var(--primary); }
.cal-day .dn { font-size: 11.5px; font-weight: 700; color: var(--text-3); }
.cal-day.has .dn { color: var(--text); }
.cal-ev {
  font-size: 10px; font-weight: 700; line-height: 1.3;
  padding: 2px 4px; border-radius: 4px;
  background: var(--primary-soft); color: var(--primary-dark);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cal-more { font-size: 9.5px; font-weight: 700; color: var(--text-3); padding-left: 3px; }

/* 悬停（未选中）：用更实一档的淡蓝 + 实底事件条，避免整格与事件条一起被冲成白色 */
.cal-day.has:hover {
  border-color: var(--primary);
  background: var(--cal-hover-bg);
  box-shadow: var(--shadow);
}
.cal-day.has:hover .dn { color: var(--primary-dark); }
.cal-day.has:hover .cal-ev { background: var(--surface); }

/* 选中态：必须放在悬停规则之后；悬停时保持蓝底白字，不再被冲成白底白字 */
.cal-day.sel,
.cal-day.sel:hover { background: var(--primary); border-color: var(--primary); }
.cal-day.sel:hover {
  border-color: var(--primary-dark);
  transform: translateY(-1px);
  box-shadow: var(--shadow-lg);
}
.cal-day.sel .dn,
.cal-day.sel:hover .dn { color: #fff; }
.cal-day.sel .cal-ev,
.cal-day.sel:hover .cal-ev { background: rgba(255, 255, 255, 0.3); color: #fff; }
.cal-day.sel .cal-more,
.cal-day.sel:hover .cal-more { color: rgba(255, 255, 255, 0.85); }
.cal-daylist { margin-top: 18px; }
.cal-daylist-head {
  font-size: 13.5px; font-weight: 800; margin-bottom: 11px;
  padding-left: 9px; border-left: 3px solid var(--primary);
}
.cal-empty { font-size: 12.5px; color: var(--text-3); padding: 10px 0; }

/* ---------------- 可聚焦标题（键盘可打开详情） ---------------- */
.tlink {
  background: none; border: none; padding: 0; margin: 0;
  font: inherit; color: inherit; text-align: left; cursor: pointer;
  display: block; width: 100%; white-space: normal;
}
.tlink:hover { color: var(--primary); }
/* 列表行内保持 inline 且不占满宽度，让 NEW 徽章与标题同行，由父级负责截断 */
.list-title .tlink { display: inline; width: auto; max-width: none; white-space: nowrap; }
.card-title .tlink, .event-name .tlink, .case-title .tlink { line-height: inherit; }

/* ---------------- 键盘焦点可见 ---------------- */
button:focus-visible,
.cal-day:focus-visible,
.heat-cell:focus-visible,
.legend-item:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.modal-close:focus,
.report-bar button:focus {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}

/* ---------------- Empty ---------------- */
.empty {
  text-align: center; padding: 70px 20px; color: var(--text-3);
}
.empty .eicon { font-size: 42px; margin-bottom: 12px; opacity: 0.5; }
.empty h3 { font-size: 16px; font-weight: 700; color: var(--text-2); margin-bottom: 6px; }
.empty p { font-size: 13px; }

/* ---------------- Footer ---------------- */
.footer {
  max-width: 1360px; margin: 40px auto 0; padding: 24px 20px 0;
  border-top: 1px solid var(--border);
  font-size: 12px; color: var(--text-3); line-height: 1.8;
}
.footer b { color: var(--text-2); }

/* ---------------- Mobile drawer ---------------- */
.drawer-mask {
  display: none; position: fixed; inset: 0; background: rgba(16,24,40,0.4);
  z-index: 200; opacity: 0; transition: opacity 0.2s;
}
.drawer-mask.show { display: block; opacity: 1; }

/* ---------------- Responsive ---------------- */
@media (max-width: 1080px) {
  .search-input { width: 180px; }
  .case-grid { grid-template-columns: 1fr; }
}

@media (max-width: 900px) {
  /* minmax(0,1fr) 而非 1fr：否则 .ov-label 的 nowrap 会按 min-content 撑宽整列，导致两列不等宽 */
  .overview { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .layout { grid-template-columns: 1fr; gap: 14px; }
  .dash-grid { grid-template-columns: 1fr; }
  .stat-cols { grid-template-columns: 1fr; gap: 16px; }
  .stat-brief-meta { min-width: 0; }
  .menu-toggle { display: flex; }
  .nav { display: none; }
  .search-input { width: 150px; }

  .sidebar {
    position: fixed; top: 0; left: 0; bottom: 0;
    width: 290px; max-width: 86vw; max-height: none;
    background: var(--bg); z-index: 210;
    padding: 16px; overflow-y: auto;
    transform: translateX(-102%); transition: transform 0.26s cubic-bezier(.4,0,.2,1);
    box-shadow: var(--shadow-lg);
  }
  .sidebar.open { transform: translateX(0); }
  .drawer-close {
    display: flex; flex-direction: column; gap: 10px;
    margin-bottom: 14px;
  }
  .drawer-top {
    display: flex; align-items: center; justify-content: space-between;
  }
  .drawer-top .dt-title { font-size: 15px; font-weight: 800; }
  .drawer-top button#drawerClose {
    width: 32px; height: 32px; border-radius: 8px;
    background: var(--surface); border: 1px solid var(--border);
    display: grid; place-items: center; font-size: 16px; color: var(--text-2);
  }
  .drawer-nav {
    display: flex; gap: 3px;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: 11px; padding: 3px;
  }
  .drawer-nav-item {
    flex: 1; padding: 8px 3px; border-radius: 8px;
    font-size: 11.5px; font-weight: 700; color: var(--text-2);
    white-space: nowrap; transition: all 0.14s;
  }
  .drawer-nav-item.active { background: var(--primary); color: #fff; }
}

@media (min-width: 901px) { .drawer-close { display: none; } }

@media (max-width: 640px) {
  body { font-size: 13.5px; }
  .header-inner { padding: 0 14px; gap: 10px; }
  .brand-sub { display: none; }
  .overview { padding: 0 14px; gap: 9px; margin-top: 14px; }
  .ov-card { padding: 11px 12px; gap: 10px; }
  .ov-icon { width: 36px; height: 36px; border-radius: 10px; }
  .ov-icon svg { width: 18px; height: 18px; }
  .ov-num { font-size: 18px; }
  .ov-label { font-size: 11px; }
  .layout { padding: 0 14px; }
  .footer { padding: 20px 14px 0; }

  .search-input { width: 100%; }
  .search-box { flex: 1; min-width: 0; }
  .header-right { flex: 1; }

  .card { padding: 14px; }
  .card-title { font-size: 15.5px; }
  .card-reason { font-size: 12.5px; }
  .card-impacts { padding: 8px 10px; gap: 6px; }
  .imp-row { flex-wrap: wrap; gap: 5px; font-size: 12px; }
  .imp-label { width: auto; }

  .event-card { grid-template-columns: 72px minmax(0, 1fr); }
  .event-date .d { font-size: 22px; }
  .event-body { padding: 12px 14px; }
  .event-name { font-size: 15px; }
  .event-head { flex-direction: column; gap: 6px; }
  .status-badge { align-self: flex-start; }

  .case-stats { grid-template-columns: 1fr 1fr; }
  .toolbar-actions { width: 100%; }
  .toolbar-actions .tbtn { flex: 1; justify-content: center; padding: 0 8px; min-width: 0; }
  .toolbar-actions .tbtn span:not(.tbtn-cnt) { overflow: hidden; text-overflow: ellipsis; }
  .sort-group { flex: 1.15; min-width: 116px; }
  .sort-btn { flex: 1; text-align: center; padding: 5px 6px; font-size: 12px; }
  .fav-btn { width: 26px; height: 26px; }
  .read-btn { width: 26px; height: 26px; }

  /* 移动端弹窗转为全屏面板 */
  .modal-mask { padding: 0; align-items: stretch; }
  .modal { max-width: none; border-radius: 0; border: none; min-height: 100%; }
  .modal-body { padding: 16px 16px 6px; }
  .modal-head { padding: 12px 16px; }
  .modal-title { font-size: 17.5px; }
  .modal-related { padding: 14px 16px 20px; }
  .modal-text { font-size: 13.5px; }

  /* 紧凑列表：移动端收起标签列 */
  .list-head, .list-row { grid-template-columns: 36px minmax(0, 1fr) 62px; gap: 9px; padding: 0 11px; }
  .list-tags, .list-head > :nth-child(3) { display: none; }
  .list-badge { width: 27px; height: 27px; font-size: 10.5px; }
  .list-title { font-size: 13px; }
  .view-btn span { display: none; }

  /* 市场 × 平台矩阵 */
  .heat-row { grid-template-columns: 38px repeat(5, minmax(0, 1fr)); gap: 3px; }
  .heat-cell { height: 30px; font-size: 11px; border-radius: 6px; }
  .heat-label { font-size: 10.5px; }
  .heat-scale i { width: 15px; }

  /* 展会日历：移动端以圆点代替活动名 */
  .cal { padding: 12px; }
  .cal-title { font-size: 14.5px; }
  .cal-grid { gap: 3px; }
  .cal-day {
    min-height: 42px; padding: 3px; border-radius: 7px;
    align-items: center; justify-content: center;
  }
  .cal-ev, .cal-more { display: none; }
  .cal-day.has .dn { color: var(--primary-dark); font-weight: 800; }
  .cal-day.sel .dn { color: #fff; }
  .cal-day.has::after {
    content: ''; width: 5px; height: 5px; border-radius: 50%;
    background: var(--primary); margin-top: 2px;
  }
  .cal-day.sel.has::after { background: #fff; }
  .cal-wd { font-size: 10.5px; padding-bottom: 4px; }
}

/* ============================================================
   信源监控模块
   ============================================================ */
.src-summary {
  display: flex; flex-wrap: wrap; gap: 10px 18px; align-items: center;
  padding: 14px 16px; margin-bottom: 18px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 14px;
}
.src-summary-item { font-size: 13px; color: var(--text-2); }
.src-summary-item b { color: var(--text-1); font-size: 15px; margin: 0 2px; }
.src-summary-note {
  flex-basis: 100%; font-size: 12px; color: var(--text-3); line-height: 1.7;
  border-top: 1px dashed var(--border); padding-top: 8px;
}

.src-group { margin-bottom: 22px; }
.src-group-head { display: flex; align-items: center; gap: 10px; margin: 0 2px 12px; }
.src-group-head h2 { font-size: 16px; margin: 0; color: var(--text-1); }
.src-group-head .count-pill {
  font-size: 12px; font-weight: 700; color: var(--primary);
  background: var(--primary-soft); padding: 2px 9px; border-radius: 999px;
}

.src-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 14px; }

.src-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: 14px;
  padding: 15px 16px; display: flex; flex-direction: column; gap: 9px;
  transition: box-shadow .18s, transform .18s, border-color .18s;
}
.src-card:hover { border-color: var(--primary); box-shadow: 0 6px 20px rgba(43, 92, 255, .10); transform: translateY(-2px); }
.src-prio-card { border-color: var(--primary); background: linear-gradient(180deg, var(--primary-soft), var(--surface) 62%); }

.src-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.src-region { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; }
.src-region-cn { color: #1a7f4b; background: rgba(26, 127, 75, .12); }
.src-region-global { color: #9a5b00; background: rgba(154, 91, 0, .14); }
.src-prio { font-size: 11px; font-weight: 700; color: #b8860b; background: rgba(184, 134, 11, .16); padding: 2px 8px; border-radius: 999px; }
.src-link { margin-left: auto; font-size: 12px; color: var(--text-3); text-decoration: none; font-weight: 600; }
.src-link:hover { color: var(--primary); text-decoration: underline; }

.src-name { font-size: 16.5px; margin: 0; }
.src-name-link { color: var(--text-1); text-decoration: none; font-weight: 800; }
.src-name-link:hover { color: var(--primary); }
.src-realtime { font-size: 12.5px; color: var(--text-2); }
.src-realtime .src-rlabel { color: var(--text-3); margin-right: 6px; }
.src-realtime b { color: var(--ins-orange); }
.src-feature { font-size: 13px; line-height: 1.7; color: var(--text-2); margin: 0; }
.src-use {
  font-size: 12.5px; line-height: 1.6; color: var(--text-2);
  background: var(--surface-2); border-radius: 10px; padding: 8px 10px;
}
.src-use .src-ulabel { color: var(--text-3); margin-right: 6px; font-weight: 700; }
.src-hits { font-size: 12px; color: var(--ins-green); font-weight: 600; }
.src-hits b { font-size: 14px; }
.src-hits-0 { color: var(--text-3); font-weight: 500; }
.src-cov {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: 12px; padding: 6px 0; border-top: 1px dashed var(--border);
}
.src-cov.is-ok { color: var(--ins-green); }
.src-cov.is-wait { color: var(--amber); }
.src-cov-badge {
  font-size: 11px; font-weight: 800; padding: 2px 8px; border-radius: 999px;
  white-space: nowrap;
}
.src-cov-badge.ok { background: rgba(10, 125, 90, .12); color: var(--ins-green); }
.src-cov-badge.wait { background: rgba(245, 158, 11, .16); color: var(--amber); }
.src-cov-text { font-weight: 500; }
.src-cov b { color: inherit; font-size: 13px; margin: 0 1px; }
.src-cov.is-wait .src-cov-text { color: var(--text-2); }
.src-news-btn {
  align-self: flex-start; margin-top: 2px;
  background: var(--primary-soft); color: var(--primary);
  border: 1px solid transparent; padding: 6px 11px; border-radius: 8px;
  font-size: 12px; font-weight: 700; cursor: pointer; font-family: inherit;
  transition: background .15s, border-color .15s, color .15s;
}
.src-news-btn:hover { border-color: var(--primary); background: #fff; color: var(--primary-dark); }

/* 侧栏选择建议 */
.src-advice {
  margin-top: 12px; font-size: 12px; color: var(--text-2); line-height: 1.95;
  border-top: 1px dashed var(--border); padding-top: 10px;
}
.src-advice b { color: var(--primary); }

/* scrollbar polish */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--scroll-thumb); border-radius: 5px; border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: var(--scroll-thumb-h); }
