/* ============================================================
   看盘助手 · 终端主题 v2（QuantLab 风格）
   ------------------------------------------------------------
   引入顺序：app.css → theme-v2.css（本文件在后，负责覆盖与新增）

   设计原则：
   1) 只做「变量覆盖 + 新增组件类」，不改动既有类名的语义
      —— 现有页面不破，只是"换肤"。
   2) 响应式：≥1024px 走桌面终端布局（左侧栏 + 多列 + 全宽）；
      <1024px 保持移动端单列（顶部横滑导航）。
   3) 涨跌沿用 A 股习惯：红涨 / 绿跌。
   ============================================================ */

:root{
  /* 底色：更深、偏蓝黑（对标专业终端） */
  --bg:#0a0d14;
  --bg2:#11161f;          /* 卡片 */
  --bg3:#151b26;          /* 卡片内层 / 次级块 */
  --bg4:#1a2130;          /* hover / 选中 */
  --fg:#e8eaed;
  --fg2:#9aa4b2;
  --fg3:#6b7684;
  --line:rgba(255,255,255,.07);
  --line2:rgba(255,255,255,.13);

  /* 语义色（覆盖 app.css 的旧值：涨跌对比度更高） */
  --up:#ef4444;           /* 涨 = 红 */
  --down:#22c55e;         /* 跌 = 绿 */
  --blue:#3b82f6;         /* 主色（原来是 #4a90d9，改得更"终端"） */
  --gold:#f59e0b;
  --purple:#7c3aed;
  --brand:#3b82f6;

  --sb-w:214px;           /* 侧边栏宽度 */
  --card-r:9px;           /* 卡片圆角（终端风偏小） */
  --card-pad:12px;
}

/* ------------------------------------------------------------
   卡片：终端风（描边 + 小圆角 + 紧凑内边距）
   ------------------------------------------------------------ */
.card{
  border-radius:var(--card-r);
  padding:var(--card-pad);
  background:var(--bg2);
  border:1px solid var(--line);
}
.card-title{
  font-size:13px; font-weight:600; letter-spacing:.2px;
  margin-bottom:9px; display:flex; align-items:center; gap:6px;
}
.card-title::before{
  content:''; width:3px; height:12px; border-radius:2px;
  background:var(--brand); flex:0 0 3px;
}
.card-title .card-sub{ font-size:11px; color:var(--fg3); font-weight:400; }

/* 卡片头：左标题 + 右操作（终端常见） */
.card-hd{
  display:flex; align-items:center; justify-content:space-between;
  gap:8px; margin-bottom:9px;
}
.card-hd h3{
  margin:0; font-size:13px; font-weight:600; color:var(--fg);
  display:flex; align-items:center; gap:5px;
}
.card-hd .hd-r{ font-size:11px; color:var(--fg3); display:flex; gap:8px; align-items:center; }
.card-ico{
  width:13px; height:13px; border-radius:50%; flex:0 0 13px;
  border:1px solid var(--line2); color:var(--fg3);
  display:inline-flex; align-items:center; justify-content:center;
  font-size:9px; font-style:normal; cursor:help;
}

/* ------------------------------------------------------------
   侧边栏（仅桌面端显示）
   ------------------------------------------------------------ */
.sidebar{ display:none; }

@media (min-width:1024px){
  .sidebar{
    display:flex; flex-direction:column;
    position:fixed; left:0; top:0; bottom:0; width:var(--sb-w);
    background:#0d1119; border-right:1px solid var(--line);
    z-index:60; overflow-y:auto;
  }
  .sb-brand{
    display:flex; align-items:center; gap:9px;
    padding:14px 14px 12px; border-bottom:1px solid var(--line);
  }
  .sb-logo{
    width:26px; height:26px; border-radius:7px; flex:0 0 26px;
    background:linear-gradient(135deg,var(--brand),var(--purple));
    display:flex; align-items:center; justify-content:center;
    font-size:13px; font-weight:800; color:#fff;
  }
  .sb-name{ font-size:13.5px; font-weight:700; color:var(--fg); line-height:1.2; }
  .sb-sub{ font-size:9.5px; color:var(--fg3); letter-spacing:.6px; text-transform:uppercase; }

  .sb-nav{ padding:10px 8px; flex:1; }
  .sb-group{
    font-size:10px; color:var(--fg3); letter-spacing:.8px;
    padding:10px 7px 5px; text-transform:uppercase;
  }
  .sb-nav a{
    display:flex; align-items:center; gap:8px;
    padding:7px 9px; margin-bottom:2px; border-radius:6px;
    font-size:13px; color:var(--fg2); text-decoration:none;
    transition:background .12s, color .12s;
  }
  .sb-nav a:hover{ background:rgba(255,255,255,.04); color:var(--fg); }
  .sb-nav a.on{
    background:rgba(59,130,246,.13); color:#8ab4ff; font-weight:600;
    box-shadow:inset 0 0 0 1px rgba(59,130,246,.22);
  }
  .sb-nav a i{ font-style:normal; width:15px; text-align:center; opacity:.85; font-size:13px; }
  .sb-badge{
    margin-left:auto; min-width:17px; height:16px; padding:0 5px;
    border-radius:8px; background:var(--up); color:#fff;
    font-size:10px; font-weight:700; line-height:16px; text-align:center;
  }

  /* 侧栏底部：运行状态（对标终端左下角） */
  .sb-status{
    border-top:1px solid var(--line); padding:10px 13px 13px;
    font-size:11px; color:var(--fg3);
  }
  .sb-status-hd{
    font-size:10px; letter-spacing:.8px; text-transform:uppercase;
    color:var(--fg3); margin-bottom:7px;
  }
  .sb-st{ display:flex; justify-content:space-between; padding:2.5px 0; }
  .sb-st b{ font-weight:600; color:var(--fg2); }
  .sb-st b.ok{ color:var(--down); }
  .sb-st b.warn{ color:var(--gold); }

  /* 桌面端：主区让位 */
  body{ padding-left:var(--sb-w); }
  .topbar{ max-width:none; }
  .wrap{ max-width:none; padding:14px 20px 40px; }
  .foot{ max-width:none; padding:14px 20px 26px; }
}

/* ------------------------------------------------------------
   顶栏（桌面端：全宽工具条）
   ------------------------------------------------------------ */
@media (min-width:1024px){
  .topbar-inner{
    max-width:none; padding:9px 20px 0;
    display:flex; align-items:center; gap:14px;
  }
  .topbar-inner .brand{ display:none; }      /* 品牌已在侧栏 */
  .topbar-inner .nav{ display:none; }        /* 导航已在侧栏，避免重复 */
  .nav a{ font-size:13px; padding:7px 11px; }
  .nav a.on{ border-bottom-color:var(--brand); }
}

/* 顶栏右侧状态位（桌面显示） */
.topbar-meta{ display:none; }
@media (min-width:1024px){
  .topbar-meta{
    display:flex; align-items:center; gap:10px;
    font-size:11.5px; color:var(--fg3); white-space:nowrap;
  }
  .tm-dot{
    display:inline-flex; align-items:center; gap:5px;
    padding:3px 9px; border-radius:20px;
    background:rgba(34,197,94,.1); border:1px solid rgba(34,197,94,.25);
    color:#4ade80; font-weight:600;
  }
  .tm-dot::before{
    content:''; width:6px; height:6px; border-radius:50%;
    background:#22c55e; box-shadow:0 0 6px #22c55e;
  }
}

/* ------------------------------------------------------------
   终端级组件
   ------------------------------------------------------------ */

/* KPI 条：一行多个指标卡 */
.kpi-row{
  display:grid; gap:9px; margin-bottom:11px;
  grid-template-columns:repeat(2,minmax(0,1fr));
}
@media (min-width:640px){ .kpi-row{ grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media (min-width:1024px){ .kpi-row{ grid-template-columns:repeat(5,minmax(0,1fr)); } }
@media (min-width:1440px){ .kpi-row.k6{ grid-template-columns:repeat(6,minmax(0,1fr)); } }

.kpi{
  background:var(--bg2); border:1px solid var(--line);
  border-radius:var(--card-r); padding:9px 10px; min-width:0;
}
.kpi-k{
  font-size:10.5px; color:var(--fg3); margin-bottom:4px;
  display:flex; align-items:center; gap:4px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.kpi-v{
  font-size:19px; font-weight:800; color:var(--fg); line-height:1.15;
  font-variant-numeric:tabular-nums; letter-spacing:-.2px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.kpi-v.sm{ font-size:16px; }
.kpi-d{
  font-size:10.5px; color:var(--fg3); margin-top:3px;
  display:flex; align-items:center; gap:4px;
  font-variant-numeric:tabular-nums;
}
.kpi-d.up{ color:var(--up); } .kpi-d.down{ color:var(--down); }
.kpi-spark{ margin-top:5px; height:22px; width:100%; display:block; }

/* 网格：桌面多列 */
.grid-2{ display:grid; gap:11px; grid-template-columns:1fr; }
.grid-3{ display:grid; gap:11px; grid-template-columns:1fr; }
@media (min-width:1024px){
  .grid-2{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .grid-2.asym{ grid-template-columns:1.6fr 1fr; }
  .grid-3{ grid-template-columns:repeat(3,minmax(0,1fr)); }
}
@media (min-width:1440px){
  .grid-2.asym{ grid-template-columns:1.75fr 1fr; }
}

/* 紧凑数据表 */
.tbl-wrap{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
.tbl{ width:100%; border-collapse:collapse; font-size:12px; }
.tbl th{
  text-align:left; font-weight:500; color:var(--fg3);
  font-size:10.5px; letter-spacing:.3px;
  padding:6px 8px; border-bottom:1px solid var(--line); white-space:nowrap;
}
.tbl td{
  padding:7px 8px; border-bottom:1px solid rgba(255,255,255,.045);
  color:var(--fg); font-variant-numeric:tabular-nums; white-space:nowrap;
}
.tbl tr:last-child td{ border-bottom:0; }
.tbl tr:hover td{ background:rgba(255,255,255,.022); }
.tbl .num{ text-align:right; }
.tbl .mini{ height:20px; width:64px; display:block; }

/* 状态徽标 */
.pill{
  display:inline-flex; align-items:center; gap:4px;
  padding:1.5px 7px; border-radius:20px;
  font-size:10px; font-weight:600; letter-spacing:.2px;
  border:1px solid transparent;
}
.pill.ok   { background:rgba(34,197,94,.12);  color:#4ade80; border-color:rgba(34,197,94,.25); }
.pill.warn { background:rgba(245,158,11,.12); color:#fbbf24; border-color:rgba(245,158,11,.25); }
.pill.bad  { background:rgba(239,68,68,.12);  color:#f87171; border-color:rgba(239,68,68,.25); }
.pill.info { background:rgba(59,130,246,.12); color:#8ab4ff; border-color:rgba(59,130,246,.25); }
.pill.flat { background:rgba(255,255,255,.06); color:var(--fg3); border-color:var(--line2); }

/* 分段控件（终端风：细分隔线） */
.seg{ background:var(--bg3); border:1px solid var(--line); border-radius:7px; padding:2px; }
.seg button{ font-size:12px; padding:5px 11px; border-radius:5px; }
.seg button.on{ background:var(--brand); }

/* 数值强调 */
.mono{ font-variant-numeric:tabular-nums; letter-spacing:-.1px; }
.big{ font-size:22px; font-weight:800; letter-spacing:-.4px; }
.dim{ color:var(--fg3); }
.dim2{ color:var(--fg2); }

/* 分隔线 */
.hr{ height:1px; background:var(--line); margin:11px 0; border:0; }

/* 图表容器（固定比例，避免抖动） */
.chart-box{ width:100%; display:block; }
.chart-box.h140{ height:140px; }
.chart-box.h180{ height:180px; }
.chart-box.h220{ height:220px; }

/* 进度条 / 占比条 */
.bar{ height:5px; border-radius:3px; background:rgba(255,255,255,.07); overflow:hidden; }
.bar > i{ display:block; height:100%; border-radius:3px; background:var(--brand); }
.bar > i.up{ background:var(--up); } .bar > i.down{ background:var(--down); }

/* ------------------------------------------------------------
   页头（各页通用，终端风）
   ------------------------------------------------------------ */
.pg-hd{ display:flex; align-items:flex-start; justify-content:space-between; gap:14px; margin:0 0 12px; flex-wrap:wrap; }
.pg-hd h1{ font-size:19px; font-weight:800; letter-spacing:-.3px; margin:0; color:var(--fg); }
.pg-hd .pg-sub{ font-size:12px; color:var(--fg3); margin:5px 0 0; }
.pg-hd .pg-r{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }

/* ------------------------------------------------------------
   主图区网格（首页/监控页）
   ------------------------------------------------------------ */
.mkt-grid{ display:grid; gap:11px; grid-template-columns:1fr; margin-bottom:11px; }
@media (min-width:1024px){
  .mkt-grid{ grid-template-columns:minmax(0,1.85fr) minmax(0,.82fr) minmax(0,.95fr); }
  .mkt-grid.cols-2{ grid-template-columns:minmax(0,2.4fr) minmax(0,1fr); }
}
.mkt-row4{ display:grid; gap:11px; grid-template-columns:1fr; }
@media (min-width:1024px){ .mkt-row4{ grid-template-columns:repeat(4,minmax(0,1fr)); } }

/* ------------------------------------------------------------
   数据小格（盘口 / 详情 3 列）
   ------------------------------------------------------------ */
.kv-grid{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:1px;
  background:var(--line); border:1px solid var(--line); border-radius:7px; overflow:hidden; }
.kv-grid > div{ background:var(--bg2); padding:8px 10px; }
.kv-grid .k{ font-size:10.5px; color:var(--fg3); margin-bottom:3px; }
.kv-grid .v{ font-size:15px; font-weight:800; letter-spacing:-.3px; font-variant-numeric:tabular-nums; }
.kv-grid .v.up{ color:var(--up); } .kv-grid .v.down{ color:var(--down); }

/* 徽标补充：红/绿（A股语义） */
.pill.red   { background:rgba(239,68,68,.12);  color:#f87171; border-color:rgba(239,68,68,.25); }
.pill.green { background:rgba(34,197,94,.12);  color:#4ade80; border-color:rgba(34,197,94,.25); }

/* 双向标尺（净信号等） */
.net-scale{ position:relative; height:8px; border-radius:4px; margin-top:10px;
  background:linear-gradient(90deg,var(--down),#64748b 50%,var(--up)); }
.net-scale > i{ position:absolute; top:-3.5px; width:15px; height:15px; border-radius:50%;
  background:#fff; border:2px solid var(--brand); transform:translateX(-50%); transition:left .35s ease;
  box-shadow:0 1px 5px rgba(0,0,0,.5); }
.net-cap{ display:flex; justify-content:space-between; font-size:10px; color:var(--fg3); margin-top:5px; }

/* 固定列宽表格（自选监控等窄屏易溢出的表） */
.tbl.fixed{ table-layout:fixed; }
.tbl.fixed td{ overflow:hidden; text-overflow:ellipsis; }

/* 窄屏隐藏纯说明性小字 */
@media (max-width:1023px){ .hide-m{ display:none !important; } }

/* ------------------------------------------------------------
   连板梯队（div 柱状，首页 / 涨停板页共用）
   ------------------------------------------------------------ */
.ladder{ display:flex; align-items:flex-end; gap:5px; height:112px; padding-top:4px; }
.ld-col{ flex:1; display:flex; flex-direction:column; align-items:center; gap:5px; height:100%; justify-content:flex-end; min-width:0; }
.ld-bar{ width:100%; max-width:34px; border-radius:4px 4px 0 0; background:linear-gradient(180deg,#f87171,#b83535); min-height:4px; transition:height .4s ease; }
.ld-bar.high{ background:linear-gradient(180deg,#ef4444,#991b1b); box-shadow:0 0 10px rgba(239,68,68,.35); }
.ld-n{ font-size:11.5px; font-weight:800; color:var(--fg); font-variant-numeric:tabular-nums; }
.ld-c{ font-size:9.5px; color:var(--fg3); white-space:nowrap; }

/* 反向侧栏网格（左窄右宽，选股页等） */
@media (min-width:1024px){ .mkt-grid.cols-2r{ grid-template-columns:minmax(0,1fr) minmax(0,2.4fr); } }

/* 方案卡片（选股方案 / 因子库风格） */
.sc-list{ display:flex; flex-direction:column; gap:7px; }
.sc-card{ display:flex; gap:9px; padding:9px 10px; border:1px solid var(--line); border-radius:8px;
  cursor:pointer; transition:all .15s; background:var(--bg3); }
.sc-card:hover{ border-color:var(--line2); background:var(--bg4); }
.sc-card.on{ border-color:var(--brand); background:rgba(59,130,246,.09); }
.sc-ico{ width:30px; height:30px; border-radius:7px; background:rgba(59,130,246,.14); color:#8ab4ff;
  display:flex; align-items:center; justify-content:center; font-weight:800; font-size:13px; flex:0 0 30px; }
.sc-nm{ font-size:12.5px; font-weight:700; color:var(--fg); }
.sc-ds{ font-size:10.5px; color:var(--fg3); line-height:1.5; margin-top:2px; }

/* 题材分布条纹 */
.hb-row{ display:flex; align-items:center; gap:8px; padding:4.5px 0; }
.hb-nm{ flex:0 0 74px; font-size:11.5px; color:var(--fg2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hb-bar{ flex:1; height:7px; border-radius:4px; background:rgba(255,255,255,.06); overflow:hidden; }
.hb-bar > i{ display:block; height:100%; border-radius:4px; background:linear-gradient(90deg,#7c3aed,#3b82f6); }
.hb-n{ flex:0 0 26px; text-align:right; font-size:12px; font-weight:800; color:var(--up); font-variant-numeric:tabular-nums; }

/* 排名徽章（选股 / 回测对比共用） */
.rank{ display:inline-flex; width:18px; height:18px; border-radius:5px; align-items:center; justify-content:center;
  font-size:10px; font-weight:800; background:var(--bg3); color:var(--fg3); margin-right:2px; }
.rank.top3{ background:linear-gradient(135deg,#ef4444,#b91c1c); color:#fff; }
