/* ============================================================
   贯穿 · 设计系统
   主色 #3478C8（沿用 wazwell research 站 penetration-treemap.js 的色值，保持站点视觉一致）
   手机优先（贯穿是"被叫醒"的产品，手机是第一现场）
   ============================================================ */

:root {
  --primary: #3478c8;
  --primary-soft: #eaf1fb;
  --primary-dim: #6b93d4;

  --bg: #f5f7fa;
  --surface: #ffffff;
  --surface-2: #fafbfd;
  --border: #e3e8ef;
  --border-strong: #ccd4e0;

  --text: #1a2233;
  --text-2: #5b6678;
  --text-3: #8b95a6;

  /* ⭐⭐⭐ 涨跌色（**语义化**：--up = 涨的颜色，--down = 跌的颜色）
     ⭐ 默认【美股风格：绿涨红跌】（2026-11-01 用户拍板）
     ⭐ 中国风格（红涨绿跌）→ html[data-updown="cn"] 覆盖 */
  /* ⭐⭐⭐ 四大维度标识色（资产类别/行业/主题/市场）—— 与涨跌色无关，语义独立 */
  --dim-ac: #2f6fbd; --dim-ac-soft: #c2d9f4; --dim-ac-on: #1f5595;
  --dim-in: #6f4bc4; --dim-in-soft: #d8cdf7; --dim-in-on: #553a9c;
  --dim-th: #b37300; --dim-th-soft: #f4ddb4; --dim-th-on: #8a5800;
  --dim-mk: #0d7f74; --dim-mk-soft: #b6e2dd; --dim-mk-on: #0a635b;

  --up: #2a9d6e;          /* 涨 = 绿 */
  --down: #d94f4f;        /* 跌 = 红 */
  /* ⭐ 相关性配色（负相关=红 / 正相关=绿）—— 与涨跌风格无关，独立一组 */
  --corr-neg: #d94f4f;
  --corr-pos: #2a9d6e;
  --warn: #d98324;
  --ok: #2a9d6e;
  --bad: #d94f4f;

  --radius: 10px;
  --radius-sm: 6px;
  --shadow: 0 1px 2px rgba(20, 30, 50, .06), 0 4px 16px rgba(20, 30, 50, .04);
  --shadow-lg: 0 4px 24px rgba(20, 30, 50, .10);

  --chip-h: 30px;
  --font: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
          "Microsoft YaHei", "Segoe UI", Roboto, sans-serif;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #10151f;
    --surface: #171d29;
    --surface-2: #1c2330;
    --border: #262f3e;
    --border-strong: #35404f;
    --text: #e6ebf3;
    --text-2: #9aa5b6;
    --text-3: #6b7688;
    --primary-soft: #1c2a42;
    --corr-neg: #e06060;
    --corr-pos: #35b883;
    --warn: #e8a04a;
    /* ⭐ 四大维度标识色（暗色版）*/
    --dim-ac: #5fa4f0; --dim-ac-soft: #24466e; --dim-ac-on: #9cc8f7;
    --dim-in: #a288ee; --dim-in-soft: #3a2f5c; --dim-in-on: #c9b6f7;
    --dim-th: #eaa93c; --dim-th-soft: #4a3a1c; --dim-th-on: #f2ca7e;
    --dim-mk: #2fbcae; --dim-mk-soft: #1d4441; --dim-mk-on: #7fd8ce;
    --shadow: 0 1px 2px rgba(0,0,0,.3), 0 4px 16px rgba(0,0,0,.2);
    --shadow-lg: 0 4px 24px rgba(0,0,0,.4);
  }
}

/* ⭐⭐⭐ 中国风格：红涨绿跌（设置页可切） */
html[data-updown="cn"] {
  --up: #d94f4f;
  --down: #2a9d6e;
}

* { box-sizing: border-box; }

html, body {
  margin: 0; padding: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font);
  font-size: 14px;
  line-height: 1.5;
  -webkit-text-size-adjust: 100%;
}

a { color: var(--primary); text-decoration: none; }

/* ───────────── 布局 ───────────── */
/* ⭐⭐ 内容容器与 header 容器【左右不留白、同样宽】
   （.wrap 与 .topbar-in 同步改 → 两者的内容左边界完全一致） */
.wrap { max-width: 1280px; margin: 0 auto; padding: 0 0 64px; }

/* ───────────── 顶栏 ───────────── */
.topbar {
  position: sticky; top: 0; z-index: 30;
  background: color-mix(in srgb, var(--surface) 88%, transparent);
  backdrop-filter: saturate(1.4) blur(10px);
  border-bottom: 1px solid var(--border);
}
.topbar-in {
  max-width: 1280px; margin: 0 auto; padding: 10px 0;
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
}
.brand { display: flex; align-items: baseline; gap: 8px; font-weight: 700; font-size: 16px; }
.brand .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--primary); }
.brand small { font-weight: 400; color: var(--text-3); font-size: 12px; }
.topbar-meta { margin-left: auto; display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
               font-size: 12px; color: var(--text-2); }

/* ───────────── 状态灯 ───────────── */
.lamp { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.lamp i { width: 7px; height: 7px; border-radius: 50%; background: var(--text-3); flex: none; }
.lamp.ok i    { background: var(--ok);   box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 18%, transparent); }
.lamp.warn i  { background: var(--warn); }
.lamp.bad i   { background: var(--bad); }
.lamp.bad i, .lamp.warn i { animation: pulse 1.6s ease-in-out infinite; }
@keyframes pulse { 0%,100% { opacity: 1 } 50% { opacity: .35 } }

/* ───────────── 分组 chip ───────────── */
.groups { display: flex; gap: 8px; overflow-x: auto; padding: 12px 0 4px; scrollbar-width: none; }
.groups::-webkit-scrollbar { display: none; }
.group-chip {
  flex: none; height: var(--chip-h); padding: 0 14px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface); color: var(--text-2);
  font-size: 13px; cursor: pointer; white-space: nowrap;
  transition: background .12s, color .12s, border-color .12s;
}
.group-chip:hover { border-color: var(--border-strong); }
.group-chip.active { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 600; }
.group-chip .cnt { opacity: .6; margin-left: 5px; font-variant-numeric: tabular-nums; }

/* ───────────── ⭐ 四大维度标识色（2026-11-02）─────────────────
   资产类别=蓝 · 行业=紫 · 主题=琥珀 · 市场=青
   · 常驻：边框用该维度的淡色，文字用该维度的深色 → 一眼看出归属
   · 点选：整个 chip 用该维度的实色填充
   ⚠️ 只作用于 .dim-chip（大类资产页），宏观页的 group-chip 不受影响 */
.group-chip.dim-chip { font-weight: 500; }
.dim-chip.dim-ac { border-color: var(--dim-ac-soft); color: var(--dim-ac-on); }
.dim-chip.dim-in { border-color: var(--dim-in-soft); color: var(--dim-in-on); }
.dim-chip.dim-th { border-color: var(--dim-th-soft); color: var(--dim-th-on); }
.dim-chip.dim-mk { border-color: var(--dim-mk-soft); color: var(--dim-mk-on); }
.dim-chip.dim-ac:hover { border-color: var(--dim-ac); background: var(--dim-ac-soft); }
.dim-chip.dim-in:hover { border-color: var(--dim-in); background: var(--dim-in-soft); }
.dim-chip.dim-th:hover { border-color: var(--dim-th); background: var(--dim-th-soft); }
.dim-chip.dim-mk:hover { border-color: var(--dim-mk); background: var(--dim-mk-soft); }
.dim-chip.dim-ac.active { background: var(--dim-ac); border-color: var(--dim-ac); color: #fff; }
.dim-chip.dim-in.active { background: var(--dim-in); border-color: var(--dim-in); color: #fff; }
.dim-chip.dim-th.active { background: var(--dim-th); border-color: var(--dim-th); color: #fff; }
.dim-chip.dim-mk.active { background: var(--dim-mk); border-color: var(--dim-mk); color: #fff; }
.dim-chip.active .cnt { opacity: .8; }

/* 维度标签：色点 + 竖线分隔，让四组一眼分得开 */
.groups .chip-label.dim-lab { display: inline-flex; align-items: center; gap: 5px;
        margin-left: 16px; padding-left: 14px; border-left: 1px solid var(--border);
        font-weight: 600; }
.groups .chip-label.dim-lab:first-child { margin-left: 0; padding-left: 0; border-left: 0; }
.groups .chip-label.dim-lab::before { content: ''; width: 7px; height: 7px; border-radius: 2px;
        flex: none; }
.chip-label.dim-lab.dim-ac { color: var(--dim-ac-on); }
.chip-label.dim-lab.dim-ac::before { background: var(--dim-ac); }
.chip-label.dim-lab.dim-in { color: var(--dim-in-on); }
.chip-label.dim-lab.dim-in::before { background: var(--dim-in); }
.chip-label.dim-lab.dim-th { color: var(--dim-th-on); }
.chip-label.dim-lab.dim-th::before { background: var(--dim-th); }
.chip-label.dim-lab.dim-mk { color: var(--dim-mk-on); }
.chip-label.dim-lab.dim-mk::before { background: var(--dim-mk); }

/* ───────────── 卡片 ───────────── */
.card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); box-shadow: var(--shadow);
}
.panel { padding: 14px; margin-bottom: 14px; }

.panel-head {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px;
}
.panel-head h2 { margin: 0; font-size: 14px; font-weight: 650; }
.panel-head .sub { font-size: 12px; color: var(--text-3); }
.spacer { margin-left: auto; }

/* ───────────── 周期 chip（复用 period-filter.js 的 DOM 类名） ───────────── */
.period-filter { display: inline-flex; gap: 2px; background: var(--surface-2);
                 border: 1px solid var(--border); border-radius: 999px; padding: 2px; }
.period-btn {
  border: 0; background: transparent; color: var(--text-2); cursor: pointer;
  height: calc(var(--chip-h) - 8px); padding: 0 11px; border-radius: 999px;
  font-size: 12px; font-weight: 600; font-family: var(--font);
  font-variant-numeric: tabular-nums; transition: background .12s, color .12s;
}
.period-btn:hover { color: var(--text); }
.period-btn.active { background: var(--primary); color: #fff; }

.chip-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.chip-label { font-size: 12px; color: var(--text-3); white-space: nowrap; }

/* ───────────── 图表 ───────────── */
.chart-host { width: 100%; min-height: 340px; position: relative; }
.chart-host svg { width: 100%; height: auto; display: block; }
.chart-legend { display: flex; flex-wrap: wrap; gap: 10px 14px; margin-top: 10px;
                font-size: 12px; color: var(--text-2); }
.chart-legend span { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; }
.chart-legend i { width: 9px; height: 9px; border-radius: 2px; display: inline-block; }
.chart-legend span.off { opacity: .35; text-decoration: line-through; }

/* ───────────── 指标卡 ───────────── */
.grid { display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.icard { padding: 12px 13px; background: var(--surface); border: 1px solid var(--border);
         border-radius: var(--radius); box-shadow: var(--shadow); }
.icard-top { display: flex; align-items: baseline; gap: 8px; }
.icard-name { font-size: 13px; font-weight: 600; line-height: 1.35; }
.icard-freq { font-size: 10px; color: var(--text-3); border: 1px solid var(--border);
              border-radius: 4px; padding: 0 4px; flex: none; }
.icard-val { font-family: var(--mono); font-size: 22px; font-weight: 600; margin: 6px 0 2px;
             font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
.icard-unit { font-size: 12px; color: var(--text-3); font-weight: 400; margin-left: 3px; }
.icard-chg { font-family: var(--mono); font-size: 12px; font-variant-numeric: tabular-nums; }
.chg-up { color: var(--up); } .chg-down { color: var(--down); } .chg-flat { color: var(--text-3); }
/* ⭐⭐⭐ 通用涨跌色（2026-11-01）—— 之前只有 .last-price 下的 .chg.up/.chg.down 有颜色，
   标池页 / 日历页的涨跌数字一直继承文字色（既有问题），
   现在 --up/--down 语义化后统一走这里 → 风格切换对所有页面生效 */
.chg.up{color:var(--up)} .chg.down{color:var(--down)} .chg.flat{color:var(--text-3)}

/* 分位条 */
.pct-row { display: flex; align-items: center; gap: 8px; margin-top: 9px; }
.pct-bar { flex: 1; height: 6px; border-radius: 3px; background: var(--surface-2);
           border: 1px solid var(--border); position: relative; overflow: hidden; }
.pct-fill { position: absolute; inset: 0 auto 0 0; border-radius: 3px; background: var(--primary); }
.pct-fill.hi { background: var(--warn); }
.pct-fill.lo { background: var(--primary-dim); }
.pct-num { font-family: var(--mono); font-size: 12px; font-weight: 600; min-width: 46px;
           text-align: right; font-variant-numeric: tabular-nums; }
.pct-na { font-size: 11px; color: var(--text-3); }
/* ⭐ 分位条左侧的口径标签（分位 ≠ 涨跌幅） */
.pct-cap { font-size: 10.5px; color: var(--text-3); flex: none; }

/* ⭐ 诚实标注 */
.icard-note { font-size: 11px; color: var(--text-3); margin-top: 7px; line-height: 1.45;
              border-top: 1px dashed var(--border); padding-top: 6px; }
.icard-note b { color: var(--warn); font-weight: 600; }

/* ───────────── 空态 / 加载 ───────────── */
.empty { text-align: center; padding: 48px 16px; color: var(--text-3); }
.empty .big { font-size: 30px; margin-bottom: 8px; opacity: .5; }
.skeleton { background: linear-gradient(90deg, var(--surface-2) 25%, var(--border) 37%, var(--surface-2) 63%);
            background-size: 400% 100%; animation: sk 1.3s ease infinite; border-radius: var(--radius-sm); }
@keyframes sk { 0% { background-position: 100% 50% } 100% { background-position: 0 50% } }

/* ───────────── 提示条 ───────────── */
.note-bar { display: flex; gap: 8px; align-items: flex-start; padding: 9px 11px; border-radius: var(--radius-sm);
            background: var(--primary-soft); color: var(--text-2); font-size: 12px; line-height: 1.5;
            border: 1px solid color-mix(in srgb, var(--primary) 22%, transparent); }
.note-bar b { color: var(--primary); }
.note-bar .ic { flex: none; }
/* ⭐⭐ 告警变体（上游停更等真问题）—— 与 note-bar 同结构，只换色 */
.note-bar.warn { background: color-mix(in srgb, var(--warn) 10%, var(--surface));
                 border-color: color-mix(in srgb, var(--warn) 38%, transparent); }
.note-bar.warn b { color: var(--warn); }

/* ───────────── 底部状态 ───────────── */
.foot { margin-top: 18px; font-size: 11px; color: var(--text-3); display: flex; gap: 14px; flex-wrap: wrap; }
.foot code { font-family: var(--mono); background: var(--surface-2); padding: 1px 5px; border-radius: 4px;
             border: 1px solid var(--border); }

/* ───────────── 手机端 ───────────── */
@media (max-width: 640px) {
  .wrap { padding: 0 0 48px; }   /* ⭐ 手机端页面级左右留白归零（内容全宽）*/
  .topbar-in { padding: 8px 10px; gap: 8px; }
  .brand { font-size: 15px; }
  .topbar-meta { font-size: 11px; gap: 8px; width: 100%; margin-left: 0; }
  .panel { padding: 11px; }
  .grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
  .icard-val { font-size: 19px; }
  .chart-host { min-height: 260px; }
  .panel-head { gap: 6px; }
}

/* ⭐ 图例口径说明（组件是 research 上游资产，% 的口径随归一化状态变化 → 必须写清楚） */
.legend-note { margin-top: 8px; font-size: 11px; line-height: 1.5; color: var(--text-3); }
.legend-note b { color: var(--warn); font-weight: 600; }

/* ───────────── 桶页面 ───────────── */
.bsum{display:grid;grid-template-columns:180px 1fr;gap:18px;align-items:start}
@media(max-width:700px){.bsum{grid-template-columns:1fr;gap:14px}}
.bsum-lab{font-size:12px;color:var(--text-3);margin-bottom:2px}
.bsum-big{font-family:var(--mono);font-size:40px;font-weight:600;line-height:1.1;
          color:var(--primary);letter-spacing:-.02em}
.bsum-rule-label{font-size:11.5px;color:var(--text-3);margin:0 0 3px}
.bsum-rule{font-size:12.5px;color:var(--text-2);line-height:1.5;margin-bottom:12px;
           border-left:2px solid var(--primary);padding-left:9px}
.bsum-macros{display:flex;flex-wrap:wrap;gap:6px}
.bmacro{font-size:11.5px;background:var(--surface-2);border:1px solid var(--border);
        border-radius:6px;padding:3px 8px;color:var(--text-2);white-space:nowrap}
.bmacro b{font-family:var(--mono);color:var(--text);font-weight:600;margin-left:2px}
.bmacro i{color:var(--text-3);font-style:normal;margin-left:2px}
.bmacro em{font-style:normal;color:var(--text-3);margin-left:4px;font-size:10.5px}

.btbl{width:100%;border-collapse:collapse;font-size:12.5px}
.btbl th{text-align:left;font-weight:600;color:var(--text-3);font-size:11.5px;
         padding:7px 8px;border-bottom:1px solid var(--border);white-space:nowrap}
.btbl td{padding:8px;border-bottom:1px solid var(--border);vertical-align:middle}
.btbl tbody tr:hover{background:var(--surface-2)}
.btbl td.num{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.btbl td.num.small{font-size:11.5px;color:var(--text-3)}
.btbl td:first-child{color:var(--text-3);width:30px}
.mtag{display:block;font-size:10.5px;color:var(--text-3);margin-top:1px}
.pct-inline{display:flex;align-items:center;gap:7px;min-width:120px}
.pct-inline .pct-bar{flex:1;min-width:50px}
/* ⭐ 表格在窄屏【自己横向滚】，不让整页溢出（实测手机端 overflow=True）*/
.tbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -4px;padding:0 4px}
.tbl-scroll .btbl{min-width:460px}
@media(max-width:640px){
  .btbl{font-size:11.5px}
  .btbl th,.btbl td{padding:6px 4px}
  .btbl .pct-inline{min-width:70px}
  .pct-inline .pct-num{min-width:38px;font-size:11px}
}

/* ═══════════ 顶栏：两行结构（2026-10-31 用户要求）═══════════
   第一行 = 品牌「全视观」 + 右侧齿轮（设置）
   第二行 = 导航 chip（放大、等宽均匀铺满；窄屏横向滚动）
   ⚠️ 之前导航和品牌在同一行 → chip 位置随品牌宽度浮动，不固定。 */
/* ⭐ 父容器 .topbar-in 是 flex+wrap → 这里必须 flex:1 0 100% 才能【独占一行】
   （否则品牌行和导航会并排，齿轮被挤到中间、导航跑到品牌左边） */
.topbar-row1{display:flex;align-items:center;gap:10px;flex:1 0 100%}
.gz-gear{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;
         width:30px;height:30px;border-radius:8px;border:1px solid var(--border);
         background:var(--surface-2);color:var(--text-2);text-decoration:none;
         transition:color .12s,border-color .12s,background .12s}
.gz-gear:hover{color:var(--primary);border-color:var(--primary);background:var(--primary-soft)}
.gz-gear svg{width:16px;height:16px;display:block}

/* 导航 chip */
.gz-nav{display:flex;gap:6px;margin-top:9px;padding-bottom:1px;flex:1 0 100%}
.gz-nav a{flex:1 1 0;min-width:0;height:36px;padding:0 10px;border-radius:9px;
          font-size:14px;font-weight:600;color:var(--text-2);display:inline-flex;
          align-items:center;justify-content:center;text-decoration:none;
          border:1px solid var(--border);background:var(--surface-2);
          transition:background .12s,color .12s,border-color .12s;white-space:nowrap}
.gz-nav a:hover{color:var(--text);border-color:var(--border-strong)}
.gz-nav a.active{background:var(--primary);border-color:var(--primary);color:#fff}
/* ⭐ 窄屏：5 个四字 chip 必须【一行放下】（不能靠横向滚动藏起来）
   实测：14px + padding 15px 时每个 chip 88px → 5 个 = 472px → 390px 屏溢出 94px
   → 压到 12px + padding 7px + gap 4px → 每个 62px → 5 个 = 326px → 360px 屏也放得下
   横向滚动只作为「更窄屏/更大字号」时的兜底，正常情况不出现滚动条 */
@media(max-width:720px){
  .gz-nav{gap:4px;overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;
          scrollbar-width:none;margin-left:-2px;margin-right:-2px;padding-left:2px;padding-right:2px}
  .gz-nav::-webkit-scrollbar{display:none}
  .gz-nav a{flex:1 1 0;min-width:0;height:34px;padding:0 7px;font-size:12px;
            border-radius:8px;overflow:hidden;text-overflow:ellipsis}
}
/* ⭐ 极窄屏（≤340px，iPhone SE 一代等）：再压一档，保证四个字不被截断 */
@media(max-width:340px){
  .gz-nav{gap:3px}
  .gz-nav a{font-size:11px;padding:0 4px}
}

/* ═══════════ 要闻日历 ═══════════ */
/* ⭐⭐ 三个板块并排、等高安置 */
.cal-ctl{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:2px 0 12px}
.cal-ctl .grp{display:flex;gap:6px;align-items:center}
.cal-ctl label{font-size:12px;color:var(--text-3);white-space:nowrap}
.cal-ctl .grow{flex:1 1 auto}
.cal-grid{display:grid;gap:14px;grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch}
/* ⭐ grid 子项默认 min-width:auto → 里面那张宽表格会把列撑开 → 整页横向溢出。
   必须显式 min-width:0，让表格在自己的 .tbl-scroll 里横向滚动。 */
.cal-grid > *{min-width:0}
.cal-panel{display:flex;flex-direction:column;margin-bottom:0}
/* ⭐ 滚动区撑满面板剩余高度 → 三个面板等高 */
.cal-panel > div:last-child{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.nw-scroll,.cal-scroll{flex:1 1 auto;min-height:0}
@media(max-width:1100px){.cal-grid{grid-template-columns:1fr}}
/* ⭐⭐ grid 子项默认 min-width:auto → 里面那张宽表格会把列撑开 → 整页横向溢出。
   必须显式 min-width:0，让表格在自己的 .tbl-scroll 里横向滚动。 */
.cal-grid > *{min-width:0}
.cal-scroll{min-width:0;max-width:100%}
@media(max-width:920px){.cal-grid{grid-template-columns:1fr}}
/* ⭐ 要闻条目：单行（时间 + 标题 + 标签）→ 8 条能塞进和表格栏一样的高度 */
.nw-item{padding:6px 12px;border-bottom:1px solid var(--border)}
.nw-item.macro{background:var(--primary-soft)}
.nw-item:last-child{border-bottom:0}
.nw-top{display:flex;gap:9px;align-items:center}
.nw-time{font-family:var(--mono);font-size:11px;color:var(--text-3);flex:0 0 auto}
.nw-title{font-size:12.5px;line-height:1.4;color:var(--text);flex:1 1 auto;min-width:0;
          white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nw-tags{display:flex;gap:4px;flex:0 0 auto}
.nw-tag{font-size:10.5px;padding:1px 7px;border-radius:999px;white-space:nowrap;
        border:1px solid var(--primary);color:var(--primary);background:var(--surface)}
.nw-src{font-size:11px;color:var(--text-3);margin-top:4px}
.nw-src a{color:var(--text-3);text-decoration:underline}
/* ⭐ 折叠提示：做成滚动区内的 sticky 底条 → 始终可见，又不占面板高度（三栏等高不受影响） */
.nw-more{position:sticky;bottom:0;font-size:11px;color:var(--text-3);padding:5px 12px;
         text-align:center;background:var(--surface);border-top:1px solid var(--border)}

.cal-h3{font-size:13px;font-weight:650;margin:4px 0 8px}
.cal-date{font-family:var(--mono);font-size:11.5px;color:var(--text-3);margin:10px 0 4px}
/* ⭐ 三栏并排时每栏只有 ~417px → 表格必须【一行一条】（不折行），
   行高压到 ~30px，与要闻条目同高 → 三个栏目各 8 条 / 8 行，正好等高 */
/* ⭐⭐ table-layout:fixed + colgroup → 列宽【严格可控】，表格永远等于栏宽，
   不会把容器撑宽（auto 布局下 td 的 max-width 会被忽略，表格按内容 min-content 撑开）*/
.cal-tbl{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed}
.cal-tbl td{padding:5px 7px;border-bottom:1px solid var(--border);vertical-align:middle;
            white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-tbl tr:last-child td{border-bottom:0}
.cal-tbl td.tm{font-family:var(--mono);color:var(--text-3);white-space:nowrap;width:1%}
.cal-tbl td.ct{color:var(--text-3);white-space:nowrap}
.cal-tbl td.ev{color:var(--text)}
.cal-tbl tr.hi td.ev{font-weight:650;color:var(--warn)}
/* ⭐⭐⭐ 可展开的事件名 → 虚线下划线（替代会被截断的 ⌄ 提示符，零宽度） */
.cal-tbl td.ev.ev-toggle{
  text-decoration:underline;text-decoration-style:dotted;
  text-decoration-color:var(--border-strong);text-underline-offset:3px}
.cal-tbl td.ev.ev-toggle:hover{color:var(--primary);
  text-decoration-color:var(--primary)}
.cal-tbl td.num{font-family:var(--mono);text-align:right;white-space:nowrap;width:1%;
                font-variant-numeric:tabular-nums;padding-left:4px;padding-right:4px}
.cal-tbl td.prev{color:var(--text-3)}
.cal-tbl td.sym{font-family:var(--mono);white-space:nowrap}
/* ⭐ symbol 作为名称列前缀（等宽小字） */
.cal-tbl td.sym{font-family:var(--mono);font-size:10.5px;color:var(--text-3);
            text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* ⭐⭐ 财报事件表的列宽（2026-11-01）
   口径：table-layout:fixed 下 col 的 width 是【内容 + padding 的总宽】
   → 「11/2」等宽 12px 需 30px + padding 14px = 44px（给 38 会被裁）
   → 「前」徽标 10.5px 字 + 自身 padding 12 + border 2 = 24.5px + padding 14 = 38.5px → 42px
   → ticker 4 字符等宽 10.5px ≈ 25px + padding 14 = 39px → 40px
   → EPS 值「$1.98」等宽 12px ≈ 43px + padding 14 = 57px；表头「预期 EPS」≈ 53px → 58px
   ⭐ 手机端（≤640px）：名称列固定 150px（截断更早），EPS 列吃剩余 → 两边都完整 */
/* ⭐⭐ 2026-11-01 重排（用户意见）：
   · 日期 / 时段 —— 按内容紧贴，不浪费横向空间
   · 代码 —— **定规矩：最多 6 个字母或数字，超出截断** → 6 字符等宽 ≈ 38px + padding 14 = 52px
   · EPS  —— 列宽保持
   · 名称 —— 【吃剩余】，一行截断（nowrap + ellipsis），不再被压窄
   ⚠️ inline style 作兜底（CSS 没更新时也定得住）；媒体查询用 !important 覆盖 inline */
.cal-tbl col.c-dt{width:44px}
.cal-tbl col.c-ph{width:42px}
.cal-tbl col.c-sym{width:52px}
.cal-tbl col.c-nm{width:auto}     /* 吃剩余空间 */
.cal-tbl col.c-num{width:58px}
/* ⭐ 表头对齐必须跟数据列一致 ——
   否则代码列表头左对齐、ticker 右对齐 → 两者在视觉上能差出一整个列宽 */
.cal-tbl thead th.c-sym{text-align:right}
@media(max-width:640px){
  /* ⭐ 手机端：只有名称列吃剩余；EPS 保持 58px（写 auto 会和名称平分剩余 → 两边都被压窄）*/
  .cal-tbl col.c-nm{width:auto !important}
}

/* ⭐ 表头（财报事件）：让「预期 EPS」这列有明确归属 —— 之前整张表没表头 */
.cal-tbl thead th{font-size:10.5px;font-weight:600;color:var(--text-3);text-align:left;
  padding:0 7px 5px;border-bottom:1px solid var(--border);white-space:nowrap;
  /* ⭐⭐⭐ 背景必须用【已定义】的 --surface（原来写 --surface-1 —— 该变量不存在，
     var() 解析失败 → 背景透明 → 滚动的数据行直接穿透表头，看起来是「重叠」）。
     z-index 提到 3 并加 isolation，确保 sticky 表头永远盖在 tbody 行之上。 */
  position:sticky;top:0;background:var(--surface);z-index:3;
  box-shadow:0 1px 0 var(--border)}
/* ⭐⭐⭐ sticky 表头与滚动行的层叠隔离：thead 自成层叠上下文，tbody 行永远在其下 */
.cal-tbl thead{isolation:isolate;position:relative;z-index:3}
.cal-tbl tbody{position:relative;z-index:1}
.cal-tbl thead th.num{text-align:right}
.cal-tbl thead tr:first-child th:first-child{padding-top:0}
.cal-tbl td.nm2{color:var(--text-2)}
.cal-sw{display:inline-flex;align-items:center;gap:5px;margin-left:10px;
       font-size:11.5px;font-weight:400;color:var(--text-3);cursor:pointer}
.cal-sw input{width:13px;height:13px;accent-color:var(--primary);cursor:pointer}
.cal-cnt{font-weight:400;font-size:11.5px;color:var(--text-3);margin-left:6px}
.cal-tbl tr.ours{background:var(--primary-soft)}
.cal-tbl tr.ours td.nm2{font-weight:650;color:var(--text)}
.cal-tbl tr.ours td.sym{color:var(--primary);font-weight:650}
.cal-ours{font-family:var(--font);font-size:11px;color:var(--primary);font-weight:400}
.cal-flag{font-size:10px;padding:1px 6px;border-radius:999px;
         border:1px solid var(--warn);color:var(--warn)}
.cal-empty{font-size:12px;color:var(--text-3);padding:10px 0}
.cal-tbl .dt{font-family:var(--mono);color:var(--text-3);white-space:nowrap;width:1%}

/* ───────────── 个股详情页 ───────────── */
.shead{display:flex;align-items:flex-start;gap:14px;margin-bottom:12px;flex-wrap:wrap}
.sname{font-size:19px;font-weight:650;line-height:1.3}
.ssub{font-size:12px;color:var(--text-3);margin-top:2px}
.sprice{margin-left:auto;text-align:right}
.sprice .sp{font-family:var(--mono);font-size:26px;font-weight:600;letter-spacing:-.02em}
.sprice .spd{font-size:11.5px;color:var(--text-3)}
.skpi{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}
@media(max-width:560px){.skpi{grid-template-columns:repeat(2,1fr)}}
.sk{background:var(--surface-2);border:1px solid var(--border);border-radius:8px;padding:8px 10px}
.skl{font-size:11px;color:var(--text-3)}
.skv{font-family:var(--mono);font-size:16px;font-weight:600;margin-top:1px;font-variant-numeric:tabular-nums}

/* ⭐ 相关性条（正负向） */
.corr-bar{position:relative;height:8px;width:110px;background:var(--surface-2);
          border:1px solid var(--border);border-radius:4px;margin-top:4px;overflow:hidden}
.corr-bar i{position:absolute;top:0;bottom:0;background:var(--primary);border-radius:3px}

/* ⭐⭐ 相关性矩阵 */
.mx-group{margin-bottom:16px}
.mx-group h3{font-size:13px;font-weight:650;margin-bottom:8px}
.mx-group h3 span{font-weight:400;color:var(--text-3);font-size:11.5px}
.mx-tbl td,.mx-tbl th{padding:0;text-align:center}
.mx-tbl th.mx-rowlab,.mx-rowlab{background:var(--surface-2);font-size:10.5px;color:var(--text-2);
  font-weight:500;padding:5px 7px;text-align:left;position:sticky;left:0;white-space:nowrap}
.mx-tbl thead th{font-size:10.5px;color:var(--text-3);font-weight:500;padding:5px 4px;
  white-space:nowrap;max-width:52px;overflow:hidden;text-overflow:ellipsis}
.mx-cell{font-family:var(--mono);font-size:11px;font-variant-numeric:tabular-nums;
  min-width:44px;height:28px;border:1px solid var(--surface)}
.mx-cell.na{background:var(--surface-2);color:var(--text-3)}

/* ⭐ 成员一致性条（负相关 / 中性 / 正相关） */
.split-bar{display:flex;height:7px;width:120px;border-radius:4px;overflow:hidden;
            margin-top:4px;border:1px solid var(--border);background:var(--surface-2)}
.split-bar i{display:block;height:100%}
.split-bar i.neg{background:var(--corr-neg)}
.split-bar i.mid{background:var(--border-strong)}
.split-bar i.pos{background:var(--corr-pos)}

/* ── 图例整体可折叠（2026-10-31 · 贯穿增强，research 原版无此样式）── */
.mc-legend-box { margin-top: 10px; }
.mc-legend-toggle {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; color: var(--text-3);
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 4px 10px; cursor: pointer;
  font-family: inherit; transition: color .15s, border-color .15s;
}
.mc-legend-toggle:hover { color: var(--text); border-color: var(--border-strong); }
.mc-legend-caret { font-size: 10px; line-height: 1; }
.mc-legend-count { font-family: var(--mono); font-size: 11px; opacity: .75; }
.mc-legend-body { margin-top: 8px; }
/* 折叠时收起图例本体（只留标题行） */
.mc-legend-box[data-collapsed="1"] .mc-legend-body { display: none; }

/* ============================================================
   ⭐⭐ 设置层（版本面板 / 刷新动作 / 模块布局）
   ============================================================ */
.set-sec { margin-bottom: 18px; }
.set-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
.set-kv { background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 9px 11px; }
.set-kv .k { font-size: 11px; color: var(--text-3); }
.set-kv .v { font-family: var(--mono); font-size: 14px; font-weight: 600; margin-top: 2px;
             word-break: break-all; font-variant-numeric: tabular-nums; }
.set-kv .v small { font-family: var(--font); font-size: 11px; font-weight: 400; color: var(--text-3); }

.set-act { border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface);
           padding: 12px 13px; display: flex; flex-direction: column; gap: 6px; }
.set-act h3 { font-size: 13.5px; font-weight: 650; margin: 0; }
.set-act .meta { font-size: 11.5px; color: var(--text-3); }
.set-act .note { font-size: 11.5px; color: var(--text-2); line-height: 1.55; }
.set-act .row { display: flex; align-items: center; gap: 8px; margin-top: 2px; }
.set-act button { font-family: var(--font); font-size: 12.5px; padding: 6px 14px; border-radius: var(--radius-sm);
                  border: 1px solid var(--primary); background: var(--primary); color: #fff; cursor: pointer; }
.set-act button:disabled { opacity: .5; cursor: not-allowed; }
.set-act .res { font-size: 11.5px; line-height: 1.5; word-break: break-word; }
.set-act .res.ok { color: var(--ok); }
.set-act .res.err { color: var(--bad); }
.set-act .res.run { color: var(--text-3); }

.set-tabs { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 12px; }
.set-tabs button { font-family: var(--font); font-size: 12.5px; padding: 5px 12px; border-radius: 999px;
                   border: 1px solid var(--border); background: var(--surface); color: var(--text-2); cursor: pointer; }
.set-tabs button.active { background: var(--primary); border-color: var(--primary); color: #fff; }

.set-mod { display: flex; align-items: center; gap: 10px; padding: 9px 11px;
           border: 1px solid var(--border); border-radius: 8px; background: var(--surface); margin-bottom: 7px; }
.set-mod .nm { font-size: 13px; font-weight: 600; }
.set-mod .ds { font-size: 11.5px; color: var(--text-3); margin-top: 1px; }
.set-mod .grow { flex: 1 1 auto; min-width: 0; }
.set-mod .ord { display: flex; gap: 4px; }
.set-mod .ord button { font-size: 11px; padding: 3px 8px; border-radius: 5px; border: 1px solid var(--border);
                       background: var(--surface-2); color: var(--text-2); cursor: pointer; }
.set-mod .ord button:disabled { opacity: .35; cursor: not-allowed; }
.set-mod.off { opacity: .55; }
.set-mod input[type=checkbox] { width: 15px; height: 15px; accent-color: var(--primary); }

.set-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 10px; }
.set-bar .grow { flex: 1 1 auto; }
.btn-primary { font-family: var(--font); font-size: 12.5px; padding: 6px 15px; border-radius: var(--radius-sm);
               border: 1px solid var(--primary); background: var(--primary); color: #fff; cursor: pointer; }
.btn-ghost { font-family: var(--font); font-size: 12.5px; padding: 6px 15px; border-radius: var(--radius-sm);
             border: 1px solid var(--border); background: var(--surface); color: var(--text-2); cursor: pointer; }
.set-bar .tip { font-size: 11.5px; color: var(--text-3); }

/* ============================================================
   ⭐⭐ AI 解释层（共振台解读）
   ============================================================ */
.rz-ai { margin-top: 10px; border-top: 1px dashed var(--border); padding-top: 9px; }
.rz-ai-btn { font-family: var(--font); font-size: 11.5px; padding: 4px 12px; border-radius: 999px;
             border: 1px solid var(--primary); background: var(--primary-soft); color: var(--primary);
             cursor: pointer; }
.rz-ai-btn:disabled { opacity: .55; cursor: not-allowed; }
.rz-ai-btn.ghost { border-color: var(--border); background: var(--surface); color: var(--text-3); }
.rz-ai-box { margin-top: 8px; padding: 10px 12px; background: var(--surface-2);
             border: 1px solid var(--border); border-radius: 8px; font-size: 12.5px; line-height: 1.75; }
.rz-ai-box.err { border-color: var(--bad); color: var(--bad); }
.rz-ai-meta { font-size: 11px; color: var(--text-3); margin-top: 7px; }
.ai-ref { display: inline-block; font-family: var(--mono); font-size: 11px; line-height: 1.6;
          padding: 0 5px; margin: 0 1px; border-radius: 4px;
          border: 1px solid var(--border); background: var(--surface); color: var(--text-2); }
.ai-ref.ok { border-color: var(--ok); color: var(--ok); cursor: pointer; }
.ai-ref.bad { border-color: var(--bad); color: var(--bad); text-decoration: line-through; cursor: help; }
.ai-refs { margin-top: 8px; display: flex; gap: 5px; flex-wrap: wrap; align-items: center; }
.ai-refs .lbl { font-size: 11px; color: var(--text-3); }
@keyframes aiFlash { 0% { box-shadow: 0 0 0 0 rgba(52,120,200,.55); } 100% { box-shadow: 0 0 0 8px rgba(52,120,200,0); } }
.ai-flash { animation: aiFlash 1.1s ease-out; border-radius: 8px; }

/* ⭐ 设置页的表格：第一列是「表名/源名/任务名」这类文字，
   不能沿用 .btbl td:first-child{width:30px}（那是给序号列设计的）→ 会把中文挤成竖排 */
.set-tbl td:first-child { width: auto; color: var(--text); white-space: nowrap; }
.set-tbl th:first-child { white-space: nowrap; }
.set-tbl td:last-child { max-width: 360px; }

/* ⭐ 要闻日历的 panel-head：不换行，副标题过长就省略（否则「刷新」按钮被挤到第二行） */
.cal-head{flex-wrap:nowrap}
.cal-head .sub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.cal-head h2{flex:0 0 auto}
.cal-head button{white-space:nowrap;flex:0 0 auto}
/* ⭐ 窄屏：标题/副标题一行，工具（天数 chip、刷新按钮）另起一行并排 */
@media(max-width:720px){
  .cal-head{flex-wrap:wrap}
  .cal-head .sub{flex:1 1 100%;order:3;margin-bottom:2px}
  .cal-head .spacer{display:none}
  .cal-head .chip-row{order:4;margin-left:0}
  .cal-head button{order:5;margin-left:auto}
}

/* ═══════════ 要闻日历：栏目限高 + 内部滑动 + 盘前/盘后徽标 ═══════════ */
.nw-scroll{overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}
.cal-scroll{overflow-y:auto;-webkit-overflow-scrolling:touch}
.nw-scroll::-webkit-scrollbar,.cal-scroll::-webkit-scrollbar{width:5px;height:5px}
.nw-scroll::-webkit-scrollbar-thumb,.cal-scroll::-webkit-scrollbar-thumb{
  background:var(--border-strong);border-radius:3px}
.nw-scroll::-webkit-scrollbar-track,.cal-scroll::-webkit-scrollbar-track{background:transparent}
/* ⭐ 限高时底部留一点点渐隐，暗示「下面还有」 */
.nw-scroll.capped,.cal-scroll.capped{
  -webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 14px),transparent 100%);
          mask-image:linear-gradient(to bottom,#000 calc(100% - 14px),transparent 100%)}

.cal-phase{font-size:10.5px;padding:1px 6px;border-radius:4px;white-space:nowrap;
           border:1px solid var(--border);color:var(--text-3)}
.cal-phase.pre{border-color:var(--warn);color:var(--warn)}
.cal-phase.post{border-color:var(--primary);color:var(--primary)}
.cal-tbl td.dtm{font-family:var(--mono);color:var(--text-2);white-space:nowrap;width:1%}
.cal-tbl td.ph{width:1%}
.cal-tbl td.ct{font-weight:600;color:var(--text-2);white-space:nowrap}

/* ═══════════ 标的追踪：标池 + 叠加比较 ═══════════ */
.pool-tabs{display:flex;gap:6px;flex-wrap:wrap;padding:10px 0 4px}
.pool-tab{font-family:var(--font);font-size:12px;padding:4px 11px;border-radius:999px;
          border:1px solid var(--border);background:var(--surface);color:var(--text-2);
          cursor:pointer;line-height:1.5}
.pool-tab em{font-style:normal;font-family:var(--mono);font-size:10.5px;color:var(--text-3)}
.pool-tab.active{background:var(--primary);border-color:var(--primary);color:#fff}
.pool-tab.active em{color:rgba(255,255,255,.8)}
.pool-tab.ghost{border-style:dashed;color:var(--text-3)}

.pool-list{max-height:430px;overflow-y:auto;-webkit-overflow-scrolling:touch;margin-top:4px}
.pool-item{display:flex;align-items:center;gap:9px;padding:8px 4px;text-decoration:none;
           color:var(--text);border-bottom:1px solid var(--border)}
.pool-item:last-child{border-bottom:0}
.pool-item:hover{background:var(--surface-2)}
.pool-item .nm{font-size:13px;font-weight:600;flex:0 0 auto;max-width:38%;overflow:hidden;
                text-overflow:ellipsis;white-space:nowrap}
.pool-item .tag{font-family:var(--mono);font-size:10px;color:var(--text-3);
                border:1px solid var(--border);border-radius:4px;padding:0 4px;flex:0 0 auto}
.pool-item .pr{margin-left:auto;font-family:var(--mono);font-size:12.5px;
               font-variant-numeric:tabular-nums;white-space:nowrap;flex:0 0 auto}
.pool-item .pr .chg{margin-left:7px;font-size:11px}
.pool-item .pc{font-family:var(--mono);font-size:10.5px;color:var(--text-3);
               min-width:64px;text-align:right;flex:0 0 auto}
.pool-item .x{margin-left:6px;color:var(--text-3);cursor:pointer;padding:0 3px;font-size:14px}
.pool-item .x:hover{color:var(--bad)}
.pool-more{font-size:11px;color:var(--text-3);text-align:center;padding:7px 0 2px}
.pool-empty{font-size:12.5px;color:var(--text-3);line-height:1.7;padding:16px 4px}
.pool-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 0 2px}
.pool-lbl{font-size:12px;color:var(--text-3)}
.pool-sel{font-family:var(--font);font-size:12px;padding:5px 8px;border-radius:var(--radius-sm);
           border:1px solid var(--border);background:var(--surface);color:var(--text)}

/* 选标的面板 */
.picker-back{position:fixed;inset:0;background:rgba(15,20,30,.45);z-index:60;
             display:flex;align-items:center;justify-content:center;padding:20px}
.picker{background:var(--surface);border-radius:var(--radius);border:1px solid var(--border);
        width:min(560px,100%);max-height:82vh;display:flex;flex-direction:column;overflow:hidden}
.picker-head{display:flex;align-items:center;padding:12px 14px;border-bottom:1px solid var(--border)}
.picker-head b{font-size:14px}
.picker-head .x{margin-left:auto;border:0;background:transparent;font-size:18px;cursor:pointer;
                color:var(--text-3);line-height:1}
.picker-search{margin:10px 12px 4px;padding:7px 10px;font-size:13px;border-radius:var(--radius-sm);
               border:1px solid var(--border);background:var(--surface-2);color:var(--text)}
.picker-list{overflow-y:auto;padding:6px 12px 14px}
.picker-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;
            padding:8px 4px;border:0;border-bottom:1px solid var(--border);background:transparent;
            cursor:pointer;font-family:var(--font);font-size:13px;color:var(--text)}
.picker-row:hover{background:var(--surface-2)}
.picker-row .nm{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.picker-row .tag{font-family:var(--mono);font-size:10px;color:var(--text-3);flex:0 0 auto}

/* 叠加比较 */
.cmp-chips{display:flex;gap:6px;flex-wrap:wrap;align-items:center;padding:8px 0 4px}
.cmp-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:3px 9px;
          border-radius:999px;background:var(--primary-soft);color:var(--primary);border:1px solid transparent}
.cmp-chip i{font-style:normal;cursor:pointer;opacity:.65}
.cmp-chip i:hover{opacity:1}
.cmp-chart{margin-top:6px}
.cmp-chart svg{display:block}
.cmp-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:8px}
.cmp-lg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--text-2)}
.cmp-lg i{width:9px;height:9px;border-radius:2px;display:inline-block}
.cmp-lg b{font-family:var(--mono);font-size:12px}
.cmp-lg b.up{color:var(--up)} .cmp-lg b.down{color:var(--down)}
.cmp-note{font-size:11px;color:var(--text-3);margin-top:6px}

/* 详情页返回标池 */
.backlink{margin:10px 0 8px}
.backlink a{font-size:12px;color:var(--text-3);text-decoration:none}
.backlink a:hover{color:var(--primary)}

.picker-row .added{font-size:10.5px;color:var(--ok);border:1px solid var(--ok);
                   border-radius:4px;padding:0 5px;flex:0 0 auto}
.picker-row.done{opacity:.55;cursor:default}

/* ══════════════ 最近浏览的标的（标池顶部）══════════════ */
.last-card{margin-bottom:14px}
.last-card .panel-head .link-btn{margin-left:auto;background:none;border:none;
  font-family:var(--font);font-size:12px;color:var(--text-3);cursor:pointer;padding:2px 6px}
.last-card .panel-head .link-btn:hover{color:var(--primary)}
.last-body{display:flex;gap:18px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.last-left{flex:1 1 320px;min-width:0}
.last-right{flex:0 0 auto;display:flex;align-items:center;gap:14px}
.last-price{font-size:26px;font-weight:700;line-height:1.15;letter-spacing:-.3px}
.last-price .chg{font-size:14px;margin-left:8px;font-weight:600}
.last-price .chg.up{color:var(--up)}
.last-price .chg.down{color:var(--down)}
.last-meta{display:flex;flex-wrap:wrap;gap:5px 18px;margin-top:9px;font-size:12.5px;color:var(--text-3)}
.last-meta b{color:var(--text);font-weight:600}
.last-meta i{font-style:normal;font-size:11.5px;color:var(--text-3)}
.spark{width:220px;height:56px;display:block}
.last-go{font-family:var(--font);font-size:12.5px;padding:6px 13px;border-radius:var(--radius-sm);
  border:1px solid var(--primary);color:var(--primary);background:var(--primary-soft);white-space:nowrap}
.last-go:hover{background:var(--primary);color:#fff}
@media (max-width:640px){
  .last-body{gap:12px}
  .last-right{width:100%;justify-content:space-between}
  .spark{flex:1 1 auto;width:auto;height:48px;min-width:0}
  .last-price{font-size:23px}
}

/* ══════════════════════════════════════════════════════════
   ⭐⭐ 手机端：模块卡取消左右边线，只留上下框线分隔
   原因：卡片左右边线 + 框内左右内边距 = 宽度被压两层
   做法：≤720px 时 border-left/right: none；靠底线分隔；内边距收窄
   ══════════════════════════════════════════════════════════ */
@media(max-width:720px){
  .card{
    border-left:none;border-right:none;border-top:none;
    border-bottom:1px solid var(--border);
    border-radius:0;
    box-shadow:none;
  }
  .panel{padding:12px 10px;margin-bottom:10px}
  /* ⭐ 页面级左右留白归零 → 卡片内容宽 = 屏宽 - 20px（.panel 内边距）
     顶栏同步留 10px → 顶栏文字与卡片内容左边界仍完全对齐 */
  .wrap{padding-left:0;padding-right:0}
  .topbar-in{padding-left:10px;padding-right:10px}
  /* 卡片内的子块也去掉左右边（保留内层背景色区分） */
  .card .icard{border-left:none;border-right:none}
}

/* ============================================================
   ⭐ 关于 / 版本详情 弹层 + 硬刷新（2026-11-01）
   借鉴 bz 日历的「设置 → 关于 → 硬刷新」；全视观多一步清 SW
   ============================================================ */
.set-about-btn {
  width: 100%;
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 14px; padding: 11px 13px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); cursor: pointer;
  font-family: var(--font); text-align: left;
  transition: border-color .15s, background .15s;
}
.set-about-btn:hover { border-color: var(--primary); background: var(--primary-soft); }
.set-about-btn .ico { display: inline-flex; color: var(--primary); flex: 0 0 auto; }
.set-about-btn .tx { flex: 1 1 auto; min-width: 0; }
.set-about-btn .tx b { display: block; font-size: 13.5px; font-weight: 650; color: var(--text); }
.set-about-btn .tx small { display: block; font-size: 11.5px; color: var(--text-3); margin-top: 2px;
                            overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.set-about-btn .go { color: var(--text-3); font-size: 18px; line-height: 1; flex: 0 0 auto; }

.gz-modal-mask {
  position: fixed; inset: 0; z-index: 9999;
  background: rgba(16, 21, 31, .46);
  display: flex; align-items: center; justify-content: center;
  padding: 18px;
  animation: gzFadeIn .16s ease;
}
@keyframes gzFadeIn { from { opacity: 0 } to { opacity: 1 } }
.gz-modal {
  width: 100%; max-width: 460px; max-height: 86vh; overflow: auto;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); box-shadow: var(--shadow-lg);
  animation: gzPopIn .18s ease;
}
@keyframes gzPopIn { from { opacity: 0; transform: translateY(8px) } to { opacity: 1; transform: none } }
.gz-modal-hd {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 14px 16px 10px; border-bottom: 1px solid var(--border);
}
.gz-modal-title { display: flex; align-items: center; gap: 7px;
                  font-size: 14.5px; font-weight: 650; color: var(--text); }
.gz-modal-title svg { color: var(--primary); }
.gz-modal-x {
  border: none; background: transparent; color: var(--text-3);
  cursor: pointer; padding: 4px; border-radius: var(--radius-sm); line-height: 0;
}
.gz-modal-x:hover { color: var(--text); background: var(--surface-2); }
.gz-modal-bd { padding: 14px 16px; }
.gz-modal-bd .set-grid { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.gz-modal-tip {
  margin-top: 12px; padding: 10px 12px;
  background: var(--primary-soft); border-radius: var(--radius-sm);
  font-size: 11.5px; line-height: 1.65; color: var(--text-2);
}
.gz-modal-ft {
  display: flex; justify-content: flex-end; gap: 8px;
  padding: 12px 16px 14px; border-top: 1px solid var(--border);
}
.gz-modal-ft button { min-width: 76px; }

@media (max-width: 480px) {
  .gz-modal-ft { flex-direction: column-reverse; }
  .gz-modal-ft button { width: 100%; min-width: 0; }
}

/* ══════════ ⭐ 关于 / 版本面板（2026-11-01 v1.5.0）══════════ */
.set-about-group { margin-top: 6px; padding-top: 14px; border-top: 1px solid var(--border); }
.set-about-title { display: flex; align-items: center; gap: 7px;
  font-size: 12px; font-weight: 650; color: var(--text-3); margin-bottom: 8px; }
.set-about-title svg { color: var(--text-3); flex: 0 0 auto; }
.set-about-row { display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 11px 12px; border: 1px solid var(--border); border-radius: 10px;
  background: var(--surface-1); cursor: pointer; text-align: left; }
.set-about-row:hover { border-color: var(--primary); background: var(--primary-soft); }
.set-about-row .tx { flex: 1 1 auto; min-width: 0; }
.set-about-row .tx b { display: block; font-size: 13.5px; font-weight: 650; color: var(--text); }
.set-about-row .tx small { display: block; font-size: 11.5px; color: var(--text-3); margin-top: 2px; }
.set-about-row .go { color: var(--text-3); font-size: 12.5px; flex: 0 0 auto; white-space: nowrap; }
.set-about-note { margin-top: 8px; font-size: 11.5px; color: var(--text-3); line-height: 1.65; }
.set-about-note b { color: var(--text-2); }

/* 弹层内部 */
.gz-ver-hero { text-align: center; padding: 4px 0 16px; }
.gz-ver-num { font-size: 32px; font-weight: 600; letter-spacing: -0.02em; color: var(--text); line-height: 1.1; }
.gz-ver-build { font-size: 12px; color: var(--text-3); margin-top: 5px; }
.gz-modal-grid { margin-bottom: 14px; }
.gz-modal-sec { margin-top: 14px; }
.gz-modal-sec-t { font-size: 12px; font-weight: 650; color: var(--text-2); margin-bottom: 5px; }
.gz-modal-sec-b { font-size: 13px; color: var(--text-2); line-height: 1.65; }
.gz-modal-sec-b b { color: var(--text); font-weight: 650; }
/* 更新说明 */
.gz-cl-ver { display: flex; align-items: baseline; gap: 8px; margin-top: 10px; }
.gz-cl-ver:first-child { margin-top: 0; }
.gz-cl-ver b { font-size: 12.5px; font-weight: 650; color: var(--text); }
.gz-cl-date { font-size: 11px; color: var(--text-3); }
.gz-cl-list { margin: 4px 0 0; padding-left: 18px; }
.gz-cl-list li { font-size: 12.5px; color: var(--text-2); line-height: 1.65; margin-bottom: 2px; }
.gz-cl-empty { font-size: 12.5px; color: var(--text-3); }

/* ⭐⭐ 手机端：居中 modal → 底部 sheet（借鉴日历，Q2=C） */
@media (max-width: 640px) {
  .gz-modal-mask { align-items: flex-end; padding: 0; }
  .gz-modal { width: 100%; max-width: 100%; border-radius: 16px 16px 0 0;
    max-height: 88vh; overflow-y: auto; -webkit-overflow-scrolling: touch; }
  .gz-modal::before { content: ''; display: block; width: 36px; height: 4px; border-radius: 2px;
    background: var(--border); margin: 8px auto 0; }
  .gz-modal-hd { position: sticky; top: 0; z-index: 2; background: var(--surface-1); }
  .gz-modal-ft { position: sticky; bottom: 0; background: var(--surface-1); }
}

/* ⭐⭐⭐ 要闻标题原文链接（2026-11-01）—— 视觉与普通标题一致，hover 才显出可点 */
.nw-title.nw-link {
  color: inherit;
  text-decoration: none;
  cursor: pointer;
}
.nw-title.nw-link:hover {
  text-decoration: underline;
  color: var(--primary);
}

/* ⭐⭐⭐ 标的池：分组小标题 + 组内排序按钮（2026-11-01） */
.pool-grp{display:flex;align-items:center;gap:8px;padding:12px 4px 5px;
          border-top:1px solid var(--border);margin-top:6px}
.pool-grp:first-of-type{border-top:0;margin-top:2px}
.pool-grp b{font-size:12.5px;font-weight:600;color:var(--text)}
.pool-grp span{font-size:11px;color:var(--text-3);font-family:var(--mono)}
.pool-mv{display:inline-flex;flex-direction:column;gap:1px;flex:0 0 auto;
         margin-left:2px;line-height:1}
.pool-mv .mv{width:19px;height:15px;padding:0;border:1px solid var(--border);
             background:var(--surface);color:var(--text-3);cursor:pointer;
             font-size:8px;line-height:1;border-radius:3px;
             display:flex;align-items:center;justify-content:center}
.pool-mv .mv:hover:not(:disabled){color:var(--primary);border-color:var(--primary)}
.pool-mv .mv:disabled{opacity:.28;cursor:default}
.pool-item .pool-mv + .x{margin-left:4px}

/* ⭐⭐⭐ 宏观大事件节点 · 数字列（2026-11-01）
   预期 = 灰色 · 前值 = 黑色 · 均不加粗 · 半角 | 分隔 */
.cal-tbl td.num .cons{color:var(--text-3)}
.cal-tbl td.num .prev{color:var(--text)}        /* ⭐ 覆盖 .cal-tbl td.prev 的灰色 */
.cal-tbl td.num .sep{color:var(--text-3);padding:0 1px}
.cal-tbl td.num b{font-weight:normal}

/* ⭐⭐⭐ 要闻摘要行 + APP 内卡片（2026-11-01） */
.nw-sum{font-size:11.5px;color:var(--text-3);line-height:1.55;margin-top:2px;
        display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nw-card-back{position:fixed;inset:0;background:rgba(15,20,30,.45);z-index:80;
              display:flex;align-items:flex-end;justify-content:center;padding:14px}
.nw-card{background:var(--surface);border-radius:14px;border:1px solid var(--border);
         width:min(560px,100%);max-height:84vh;overflow-y:auto;padding:16px 16px 18px;
         box-shadow:0 12px 40px rgba(0,0,0,.22)}
@media(min-width:720px){.nw-card-back{align-items:center}.nw-card{border-radius:16px}}
.nw-card-head{display:flex;align-items:flex-start;gap:10px;padding-bottom:9px;
              border-bottom:1px solid var(--border)}
.nw-card-head b{flex:1;font-size:15px;line-height:1.45;font-weight:650}
.nw-card-head .x{border:0;background:transparent;font-size:19px;cursor:pointer;
                 color:var(--text-3);line-height:1;padding:0 3px}
.nw-card-meta{font-size:11.5px;color:var(--text-3);margin:9px 0 2px;
              display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.nw-card-sum{font-size:13px;color:var(--text-2);line-height:1.7;margin:8px 0 12px}
.nw-card-ai{border-top:1px dashed var(--border);padding-top:12px}
.nw-points{margin-top:9px}
.nw-point{font-size:12.5px;line-height:1.65;color:var(--text);
         padding:5px 0 5px 10px;border-left:2px solid var(--primary);margin-bottom:5px}
.nw-ai-wait{font-size:12px;color:var(--text-3);padding:5px 0}
.nw-ai-note{font-size:10.5px;color:var(--text-3);margin-top:6px}
.nw-card-link{display:block;text-align:center;font-size:12px;color:var(--primary);
              text-decoration:none;margin-top:13px;padding-top:11px;
              border-top:1px dashed var(--border)}
.nw-card-link:active{opacity:.6}

/* ⭐⭐⭐ 宏观节点：预期 vs 前值的差值 + desc 展开（2026-11-01） */
.cal-tbl td.num .delta{font-size:10.5px;color:var(--text-3);line-height:1.35;
                       font-variant-numeric:tabular-nums;margin-top:1px}
.cal-tbl td.ev.ev-toggle{cursor:pointer}
.cal-tbl td.ev.ev-toggle:hover{color:var(--primary)}
.cal-tbl tr.desc-row td{background:var(--surface-2);white-space:normal;padding:8px 10px;
                        border-bottom:1px solid var(--border)}
.cal-desc{font-size:11.5px;line-height:1.7;color:var(--text-2)}
.cal-desc b{display:block;font-size:10.5px;color:var(--text-3);font-weight:500;margin-bottom:3px}

/* ⭐⭐⭐ 设置页：涨跌色风格选项（2026-11-01） */
.set-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.ud-opt{display:flex;align-items:flex-start;gap:9px;padding:11px 12px;cursor:pointer;
        border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2)}
.ud-opt:hover{border-color:var(--primary)}
.ud-opt input{margin-top:2px;accent-color:var(--primary);width:15px;height:15px}
.ud-opt b{display:block;font-size:13px;font-weight:600;color:var(--text)}
.ud-opt em{display:block;font-style:normal;font-size:11.5px;color:var(--text-3);margin-top:2px}

/* ⭐⭐⭐ 我的大类资产（自建桶管理）2026-11-01 */
.mb-empty{font-size:12.5px;color:var(--text-3);line-height:1.75;padding:12px 4px}
.mb-item{border:1px solid var(--border);border-radius:var(--radius-sm);
        padding:10px 11px;margin-bottom:9px;background:var(--surface-2)}
.mb-head{display:flex;align-items:center;gap:8px}
.mb-head b{font-size:13.5px;font-weight:600;color:var(--text)}
.mb-dim{font-size:10.5px;color:var(--primary);border:1px solid var(--primary);
        border-radius:4px;padding:0 5px}
.mb-cnt{font-size:11px;color:var(--text-3);font-family:var(--mono)}
.mb-del{font-size:11px;padding:2px 8px}

/* ⭐⭐⭐ 系统大类资产分区（2026-11-02）*/
.mb-sec{font-size:12px;font-weight:650;color:var(--text-2);margin:16px 0 8px;
        display:flex;align-items:baseline;gap:8px}
.mb-sec:first-child{margin-top:4px}
.mb-sec .cnt{font-size:11px;font-weight:400;color:var(--text-3);font-family:var(--mono)}
.mb-group{border:1px solid var(--border);border-radius:var(--radius-sm);margin-bottom:8px;
         background:var(--surface-2)}
.mb-group-h{display:flex;align-items:center;gap:8px;padding:9px 11px;cursor:pointer;
            user-select:none;font-size:12.5px;font-weight:600;color:var(--text)}
.mb-group-h:hover{background:var(--surface)}
.mb-group-h .arrow{color:var(--text-3);font-size:9px;display:inline-block;
                   transition:transform .15s ease}
.mb-group.open .mb-group-h .arrow{transform:rotate(90deg)}
.mb-group-h .cnt{font-size:11px;font-weight:400;color:var(--text-3);font-family:var(--mono)}
.mb-group-b{padding:0 11px 4px;display:none}
.mb-group.open .mb-group-b{display:block}
.mb-item.mb-hidden{opacity:.5}
.mb-item.mb-hidden .mb-head b{text-decoration:line-through}
.mb-acts-right{margin-left:auto;display:flex;gap:5px;flex-shrink:0}
.mb-btn{font-size:11px;padding:2px 8px}
.mb-rule{font-size:11.5px;color:var(--text-3);margin-top:5px;line-height:1.6}
.mb-members{margin-top:7px;display:flex;flex-direction:column;gap:3px}
.mb-mem-empty{font-size:11.5px;color:var(--text-3);padding:3px 0}
.mb-mem{display:flex;align-items:center;gap:7px;font-size:12px;padding:3px 0}
.mb-mem .nm{color:var(--text)}
.mb-mem .tag,.mb-cand .tag{font-family:var(--mono);font-size:10px;color:var(--text-3);
        border:1px solid var(--border);border-radius:4px;padding:0 4px}
.mb-mem .x{margin-left:auto;border:0;background:transparent;color:var(--text-3);
        cursor:pointer;font-size:14px;line-height:1;padding:0 3px}
.mb-mem .x:hover{color:var(--bad)}
.mb-acts{margin-top:7px}
.mb-back{position:fixed;inset:0;background:rgba(15,20,30,.45);z-index:90;
         display:flex;align-items:flex-end;justify-content:center;padding:14px}
.mb-modal{background:var(--surface);border-radius:14px;border:1px solid var(--border);
          width:min(520px,100%);max-height:84vh;overflow-y:auto;padding:16px;
          box-shadow:0 12px 40px rgba(0,0,0,.22)}
@media(min-width:720px){.mb-back{align-items:center}.mb-modal{border-radius:16px}}
.mb-modal-h{font-size:14px;font-weight:650;margin-bottom:12px}
.mb-lab{display:block;font-size:12px;color:var(--text-2);margin-bottom:10px}
.mb-lab input,.mb-lab select,.mb-modal input[type=text],#mbSearch{display:block;width:100%;
        margin-top:4px;font-family:var(--font);font-size:13px;padding:7px 9px;
        border-radius:var(--radius-sm);border:1px solid var(--border);
        background:var(--surface-2);color:var(--text)}
#mbSearch{margin-bottom:10px}
.mb-cands{max-height:44vh;overflow-y:auto;display:flex;flex-direction:column;gap:3px}
.mb-cand{display:flex;align-items:center;gap:7px;width:100%;text-align:left;
        font-family:var(--font);font-size:12.5px;padding:7px 9px;cursor:pointer;
        border:1px solid var(--border);border-radius:var(--radius-sm);
        background:var(--surface);color:var(--text)}
.mb-cand:hover{border-color:var(--primary)}
.mb-cand:disabled{opacity:.5;cursor:default}
.mb-cand .k{font-size:10.5px;color:var(--text-3);margin-left:auto}
.mb-modal-f{display:flex;gap:8px;justify-content:flex-end;margin-top:14px;
            padding-top:11px;border-top:1px dashed var(--border)}

/* ============================================================
   个股页增强（2026-11-02 · gz-stock.js + gz-stock-chart.js）
   ⭐⭐⭐ 全部追加在文件末尾，不修改任何已有规则
   ⭐ 涨跌色一律 var(--up) / var(--down) → 自动跟随「绿涨红跌 / 红涨绿跌」开关
      （html[data-updown="cn"] 覆盖的就是这两个变量，图表自动跟着变）
   ============================================================ */

/* ── 估值带配色（GMP v20 同款蓝；暗色模式另给一档） ── */
:root {
  --gz-band-fill: rgba(66,133,244,.12);
  --gz-band-line: rgba(66,133,244,.45);
}
@media (prefers-color-scheme: dark) {
  :root {
    --gz-band-fill: rgba(102,163,255,.16);
    --gz-band-line: rgba(102,163,255,.52);
  }
}

/* ── 图表容器 ── */
.gzc-wrap { position: relative; width: 100%; }
.gz-chart-svg { width: 100%; height: auto; display: block; overflow: visible; }
.gzc-tip {
  position: absolute; z-index: 5; pointer-events: none;
  min-width: 128px; padding: 7px 9px;
  background: var(--surface); border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm); box-shadow: var(--shadow-lg);
  font-size: 11.5px; line-height: 1.55; color: var(--text);
}
.gzc-tip-date {
  font-family: var(--mono); font-size: 11px; color: var(--text-3);
  margin-bottom: 3px; padding-bottom: 3px; border-bottom: 1px solid var(--border);
}
.gzc-tip-row { display: flex; align-items: center; gap: 8px; justify-content: space-between; }
.gzc-tip-row > span { display: inline-flex; align-items: center; gap: 5px; color: var(--text-2); }
.gzc-tip-row i { width: 8px; height: 8px; border-radius: 2px; display: inline-block; flex: none; }
.gzc-tip-row b {
  font-family: var(--mono); font-weight: 600; font-variant-numeric: tabular-nums;
  color: var(--text); white-space: nowrap;
}
.gz-legend { margin-top: 8px; }
.gz-legend .legend-item { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--text-2); }
.gz-legend .legend-item i { width: 9px; height: 9px; border-radius: 2px; display: inline-block; flex: none; }
.gz-legend-val { font-family: var(--mono); font-weight: 600; color: var(--text); margin-left: 2px; }

/* ── ⭐ 蜡烛图：涨/跌色走语义变量（不硬编码红绿） ── */
.gz-candle-up   { fill: var(--up);   stroke: var(--up);   stroke-width: 1; }
.gz-candle-down { fill: var(--down); stroke: var(--down); stroke-width: 1; }
/* 成交量副图：柱色跟随当日涨跌，opacity .55（GMP 同款） */
.gz-vol-up   { fill: var(--up);   opacity: .55; }
.gz-vol-down { fill: var(--down); opacity: .55; }
/* 财务柱状图 */
.gz-bar-up   { fill: var(--up);   opacity: .8; }
.gz-bar-down { fill: var(--down); opacity: .8; }

/* ── MA 线：与涨跌色分开的一套（主色 / 维度紫 / 维度琥珀） ── */
.gz-ma20  { stroke: var(--primary); }
.gz-ma60  { stroke: var(--dim-in); }
.gz-ma120 { stroke: var(--dim-th); }

/* ── 估值带 ── */
.gz-band-fill { fill: var(--gz-band-fill); stroke: none; }
.gz-band-line { stroke: var(--gz-band-line); }
.gz-band-ma   { stroke: var(--primary); }
.gz-band-main { stroke: var(--primary); }
.gz-band-cur  { fill: var(--primary); stroke: var(--surface); stroke-width: 1.2; }

/* ── 相对强弱：个股=主色，基准=中性灰（与涨跌色无关） ── */
.gz-rel-self  { stroke: var(--primary); }
.gz-rel-bench { stroke: var(--text-3); }

/* ── chip 组（图表类型 / 基准 / 财务口径） ── */
.gz-chip-row { margin: 2px 0 10px; }
.gz-tab-chip, .gz-bench-chip { flex: none; font-size: 12.5px; }
.gz-bench-row.hidden { display: none; }
.gz-period-row { margin-top: 6px; }
.gz-period-row .chip-label { margin-right: 2px; }
/* 基准清单接口未就绪时的提示（跟在 chip 行尾，不影响 chip 排版） */
.gz-chip-row .chip-note { font-size: 11px; color: var(--text-3); margin-left: 8px; white-space: normal; }

/* ── 动量条 ── */
.gz-mom { margin-top: 12px; }
.gz-mom-cap { font-size: 11px; color: var(--text-3); margin-bottom: 5px; }
.gz-skpi-mom { margin-top: 0; }
.gz-mom-up   { color: var(--up); }
.gz-mom-down { color: var(--down); }
.gz-mom-na   { color: var(--text-3); font-weight: 500; }
.gz-mom-note { font-size: 11px; color: var(--text-3); margin-top: 6px; line-height: 1.45; }

/* ── 通用正负着色（表格里的同比/负值） ── */
.gz-pos { color: var(--up); }
.gz-neg { color: var(--down); }

/* ── 相对强弱结论条 ── */
.gz-rs-summary {
  margin-top: 10px; padding: 10px 12px;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm);
}
.gz-rs-kpis { display: flex; flex-wrap: wrap; gap: 8px 18px; }
.gz-rs-kpi { display: inline-flex; align-items: baseline; gap: 6px; font-size: 12px; }
.gz-rs-kpi b { color: var(--text-3); font-weight: 500; }
.gz-rs-kpi i {
  font-style: normal; font-family: var(--mono); font-weight: 700;
  font-variant-numeric: tabular-nums; font-size: 13px;
}
.gz-rs-kpi i.up   { color: var(--up); }
.gz-rs-kpi i.down { color: var(--down); }
.gz-rs-kpi i.flat { color: var(--text-2); }
.gz-rs-note { font-size: 11px; color: var(--text-3); margin-top: 7px; line-height: 1.5; }
.gz-rs-sub { color: var(--text-3); opacity: .85; font-family: var(--mono); font-size: 10.5px; }

/* ── 价值分析补充指标条（股息率 / ROE / 毛利率 / 净利率 / PEG） ── */
.gz-val-strip { margin-top: 12px; }
.gz-val-strip-row {
  display: grid; gap: 8px;
  grid-template-columns: repeat(auto-fit, minmax(92px, 1fr));
}
.gz-val-cell {
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 8px; padding: 8px 10px; min-width: 0;
}
.gz-val-lab { font-size: 11px; color: var(--text-3); }
.gz-val-v {
  font-family: var(--mono); font-size: 15px; font-weight: 600; margin-top: 2px;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.gz-val-v.na { color: var(--text-3); font-weight: 500; }

/* ── 同大类资产对比 ── */
.gz-peers { margin-top: 12px; }
.gz-peers-box {
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  padding: 11px 12px; background: var(--surface-2);
}
.gz-peers-head {
  font-size: 12.5px; font-weight: 650; color: var(--text);
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
}
.gz-peers-sub { font-size: 11px; font-weight: 400; color: var(--text-3); }
.gz-peers-grid {
  display: grid; gap: 8px; margin-top: 9px;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
.gz-peers-item {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 8px; padding: 8px 10px; min-width: 0;
}
.gz-peers-lab { font-size: 11px; color: var(--text-3); }
.gz-peers-vals {
  display: flex; align-items: baseline; gap: 6px; margin-top: 3px;
  font-family: var(--mono); font-variant-numeric: tabular-nums;
}
.gz-peers-mine { font-size: 16px; font-weight: 700; color: var(--text); }
.gz-peers-vs { font-size: 10.5px; color: var(--text-3); }
.gz-peers-med { font-size: 13px; color: var(--text-2); }
.gz-peers-rank { font-size: 11px; color: var(--text-2); margin-top: 3px; }
.gz-peers-note { font-size: 11px; color: var(--text-3); margin-top: 9px; line-height: 1.5; }

/* ── 迷你估值带 ── */
.gz-mini-bands { margin-top: 14px; }
.gz-mini-title { font-size: 12.5px; font-weight: 650; margin-bottom: 6px; }
.gz-mini-cell { margin-bottom: 10px; }
.gz-mini-lab { font-size: 11.5px; color: var(--text-3); margin-bottom: 2px; }
.gz-mini-host { min-height: 210px; }
.gz-fin-chart { min-height: 240px; }

/* ── 窄屏：禁止横向溢出 ── */
@media (max-width: 560px) {
  .gz-val-strip-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gz-peers-grid { grid-template-columns: 1fr; }
  .gz-rs-kpis { gap: 6px 12px; }
  .gz-chart-svg text { font-size: 9.5px; }
  .gz-mini-host { min-height: 180px; }
}
