:root {
  --bg: #0b0f14;
  --panel: #0e141b;
  --border: #1b2430;
  --text: #d7dee6;
  --muted: #7f8b99;
  --accent: #3d7eff;
  --up: #e0524a;   /* 红涨 */
  --down: #2aa876; /* 绿跌 */
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  background: var(--bg);
  color: var(--text);
  font: 14px/1.55 -apple-system, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
}

/* ---------- 顶栏 ---------- */
header {
  display: flex; align-items: center; gap: 16px;
  padding: 10px 18px;
  background: var(--panel);
  border-bottom: 1px solid var(--border);
  position: sticky; top: 0; z-index: 40;
}
.brand { font-size: 17px; font-weight: 700; letter-spacing: .5px; white-space: nowrap; color: inherit; text-decoration: none; display: inline-flex; align-items: baseline; }
.brand:hover { color: #3d7eff; }
.brand span { font-weight: 400; font-size: 12px; color: var(--muted); margin-left: 8px; }
.home-btn { display: inline-flex; align-items: center; gap: 4px; padding: 5px 10px; border: 1px solid #232f3d; background: #131a23; color: var(--muted); border-radius: 8px; font-size: 12px; text-decoration: none; white-space: nowrap; }
.home-btn:hover { border-color: #35506e; color: #dbe4ee; }

/* ---- 头部用户区（登录/账号状态） ---- */
.userbox { display: inline-flex; align-items: center; gap: 8px; margin-left: 6px; white-space: nowrap; }
.u-chip { font-size: 12px; color: #dbe4ee; background: #12233c; border: 1px solid #24405f; border-radius: 999px; padding: 3px 10px; }
.u-sync { font-size: 11px; color: var(--muted); }
.u-sync.busy-s { color: #e8a33d; }
.u-sync.off { color: #e06c75; }
.ub-login { border-color: #2d4a6b !important; color: #8fb8ff !important; }
.ub-login:hover { border-color: #3d7eff !important; color: #cfe0ff !important; }
.ub-out { color: var(--muted) !important; }
.ub-out:hover { color: #e06c75 !important; border-color: #5c2a30 !important; }

/* ---- 登录 / 注册弹窗 ---- */
.auth-mask { position: fixed; inset: 0; background: rgba(4, 8, 13, .72); backdrop-filter: blur(3px); z-index: 200; display: flex; align-items: center; justify-content: center; }
.auth-card { width: min(360px, calc(100vw - 40px)); background: #101822; border: 1px solid #243247; border-radius: 14px; box-shadow: 0 18px 60px rgba(0, 0, 0, .55); overflow: hidden; }
.auth-tabs { display: flex; align-items: center; border-bottom: 1px solid #1d2937; padding: 0 6px; }
.auth-tab { flex: none; background: none; border: none; color: var(--muted); font-size: 14px; padding: 13px 14px; cursor: pointer; border-bottom: 2px solid transparent; }
.auth-tab.active { color: #dbe4ee; border-bottom-color: #3d7eff; }
.auth-x { margin-left: auto; background: none; border: none; color: var(--muted); font-size: 20px; line-height: 1; padding: 6px 12px; cursor: pointer; border-radius: 6px; }
.auth-x:hover { color: #dbe4ee; background: #1a2533; }
.auth-body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 12px; }
.auth-body label { display: flex; flex-direction: column; gap: 5px; font-size: 12px; color: var(--muted); }
.auth-body input { background: #0b111a; border: 1px solid #243247; border-radius: 8px; color: #e6edf3; font-size: 14px; padding: 9px 11px; outline: none; }
.auth-body input:focus { border-color: #3d7eff; }
.auth-err { background: #2a1518; border: 1px solid #5c2a30; color: #ff9da6; border-radius: 8px; font-size: 12px; padding: 8px 10px; }
.auth-go { background: #1d4ed8; border: none; color: #fff; font-size: 14px; font-weight: 600; padding: 10px; border-radius: 8px; cursor: pointer; }
.auth-go:hover { background: #2a5cf0; }
.auth-go:disabled { opacity: .6; cursor: wait; }
.auth-hint { font-size: 11px; color: var(--muted); line-height: 1.6; }
.searchbox { position: relative; flex: 0 1 400px; }
#q {
  width: 100%; padding: 8px 12px;
  background: #131a23; border: 1px solid #232f3d; color: inherit;
  border-radius: 8px; outline: none; font-size: 13px;
}
#q:focus { border-color: #35506e; }
.q-drop {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0;
  background: #10161f; border: 1px solid #26313e; border-radius: 8px;
  z-index: 50; max-height: 330px; overflow: auto; box-shadow: 0 10px 30px rgba(0,0,0,.5);
}
.q-item { padding: 8px 12px; display: flex; gap: 10px; cursor: pointer; align-items: baseline; }
.q-item:hover, .q-item.sel { background: #17202b; }
.q-item b { min-width: 92px; font-family: Consolas, monospace; font-size: 13px; }
.q-item span { color: var(--muted); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.q-item i { color: #55616e; font-size: 11px; font-style: normal; }
.busy { color: #6fa8ff; font-size: 12px; white-space: nowrap; }

/* ---------- 布局 ---------- */
main {
  display: grid; grid-template-columns: 252px 1fr; gap: 14px;
  padding: 14px 18px; max-width: 1440px; margin: 0 auto;
}
.panel {
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 10px; padding: 12px; margin-bottom: 14px;
}
.panel-h {
  display: flex; justify-content: space-between; align-items: center;
  font-size: 12px; color: var(--muted); margin-bottom: 10px;
}
.mini {
  background: #131c26; border: 1px solid #243140; color: #cfdae4;
  border-radius: 6px; padding: 3px 9px; font-size: 12px; cursor: pointer;
}
.mini:hover { border-color: #35506e; }
.hint { font-size: 11px; color: #55616e; margin-top: 8px; }
.cmp-add { display: flex; gap: 6px; margin-bottom: 8px; }
.cmp-add input {
  flex: 1; min-width: 0; padding: 5px 9px;
  background: #131a23; border: 1px solid #232f3d; color: inherit;
  border-radius: 6px; outline: none; font-size: 12px; font-family: Consolas, monospace;
}

/* ---------- chips ---------- */
.chips { display: flex; flex-wrap: wrap; gap: 6px; }
.chip {
  background: #131c26; border: 1px solid #243140; color: #cfdae4;
  border-radius: 999px; padding: 4px 10px; font-size: 12px; cursor: pointer;
  display: inline-flex; gap: 7px; align-items: center; user-select: none;
}
.chip:hover { border-color: #35506e; }
.chip.active { border-color: var(--accent); color: #fff; background: #14233a; }
.chip .cs { font-family: Consolas, monospace; }
.chip .cn { color: var(--muted); max-width: 108px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chip .cx { color: #61707f; padding: 0 1px; font-style: normal; }
.chip .cx:hover { color: #ff6b6b; }

/* ---------- 主列 ---------- */
.symhead { display: flex; justify-content: space-between; align-items: flex-end; flex-wrap: wrap; gap: 10px; }
.sym-title { font-size: 20px; font-weight: 700; }
.sym-sub { color: var(--muted); font-size: 12px; margin-top: 3px; }
.ranges { display: flex; gap: 4px; flex-wrap: wrap; }
.r-btn {
  background: #131a23; border: 1px solid #232f3d; color: #aab6c2;
  border-radius: 6px; padding: 4px 10px; font-size: 12px; cursor: pointer;
}
.r-btn:hover { border-color: #35506e; }
.r-btn.active { border-color: var(--accent); color: #fff; background: #14233a; }
.ivl { display: flex; gap: 4px; margin: 10px 0 8px; align-items: center; }
.ivl .lbl { font-size: 12px; color: var(--muted); margin-right: 4px; }
.errbar {
  background: #2a1416; border: 1px solid #5c2626; color: #ff9c9c;
  padding: 8px 12px; border-radius: 8px; margin: 8px 0; font-size: 13px;
}

/* ---------- 图表 ---------- */
.chart {
  position: relative; background: var(--panel); border: 1px solid var(--border);
  border-radius: 10px; padding: 8px 4px 4px; overflow: hidden;
}
.chart svg { display: block; margin: 0 auto; }
.chart svg text { font-size: 11px; font-family: Consolas, "Courier New", monospace; }
.chart .empty { padding: 60px 0; text-align: center; color: var(--muted); }
.tip {
  position: absolute; top: 12px; z-index: 20; pointer-events: none;
  background: rgba(13,18,25,.96); border: 1px solid #263140; border-radius: 8px;
  padding: 8px 10px; font-size: 12px; min-width: 200px;
  box-shadow: 0 6px 20px rgba(0,0,0,.45);
}
.tip .tt-d { color: #9fb0c0; margin-bottom: 5px; font-family: Consolas, monospace; }
.tip table { border-collapse: collapse; }
.tip td { padding: 1px 10px 1px 0; }
.tip td:last-child { text-align: right; font-family: Consolas, monospace; }
.tip td:first-child { color: var(--muted); }
.legend { display: flex; gap: 16px; flex-wrap: wrap; padding: 8px 14px 4px; font-size: 12px; }
.legend .li { display: inline-flex; align-items: center; gap: 6px; }
.legend .dot { width: 9px; height: 9px; border-radius: 2px; display: inline-block; }
.legend .ret { font-family: Consolas, monospace; }

/* ---------- 统计 ---------- */
.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 8px; margin-top: 12px; }
.stat { background: var(--panel); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; }
.stat .k { font-size: 12px; color: var(--muted); }
.stat .v { font-size: 16px; font-weight: 600; font-family: Consolas, monospace; margin-top: 3px; }
.stat .v.up { color: var(--up); }
.stat .v.dn { color: var(--down); }
.stat .v.mut { color: var(--muted); font-size: 13px; }
.cmp-table { width: 100%; border-collapse: collapse; margin-top: 12px; background: var(--panel); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.cmp-table th, .cmp-table td { padding: 8px 12px; text-align: right; border-bottom: 1px solid var(--border); font-size: 13px; }
.cmp-table th { color: var(--muted); font-size: 12px; font-weight: 400; background: #0c1219; }
.cmp-table th:first-child, .cmp-table td:first-child { text-align: left; }
.cmp-table tr:last-child td { border-bottom: none; }
.cmp-table .s { font-family: Consolas, monospace; }

footer { text-align: center; color: #5c6773; font-size: 12px; padding: 20px 12px; }

/* ---------- 我的组合（左侧边栏紧凑列表） ---------- */
.pf-upload { display: block; width: 100%; padding: 6px 0; margin-top: 2px; }
.pf-side { margin-top: 8px; max-height: 62vh; overflow-y: auto; }
.pf-cur {
  display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap;
  font-size: 11px; color: var(--muted); padding: 7px 2px 3px;
}
.pf-cur b { color: #cfe0f5; font-size: 12px; }
.pf-row {
  padding: 7px 9px; border: 1px solid #16202b; background: #0c1219;
  border-radius: 8px; margin-bottom: 6px;
}
.pf-row.clickable { cursor: pointer; }
.pf-row.clickable:hover { border-color: #35506e; background: #131c26; }
.pf-row .l1 { display: flex; gap: 7px; align-items: baseline; }
.pf-row .l1 b { font-family: Consolas, monospace; font-size: 13px; }
.pf-row .live { color: #4fd6a4; font-style: normal; font-size: 9px; vertical-align: super; margin-left: 2px; }
.pf-row .l1 .pr { margin-left: auto; font-family: Consolas, monospace; font-size: 12.5px; }
.pf-row .l1 .chg { font-family: Consolas, monospace; font-size: 11.5px; min-width: 52px; text-align: right; }
.pf-row .l2 { display: flex; justify-content: space-between; gap: 8px; font-size: 11px; margin-top: 3px; }
.pf-row .l2 span { font-family: Consolas, monospace; color: var(--muted); }
.pf-row .l2 span.up { color: var(--up); }
.pf-row .l2 span.dn { color: var(--down); }
.pf-row .l2 span.mut { color: var(--muted); }
.pf-cur span.up { color: var(--up); }
.pf-cur span.dn { color: var(--down); }

/* ---------- AI 深度解读 ---------- */
.insight, .news { margin-top: 12px; background: var(--panel); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; }
.ai-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 10px; }
.ai-badge {
  font-size: 11px; color: #b8a7e8; background: #1a1728; border: 1px solid #332b52;
  border-radius: 999px; padding: 2px 10px; white-space: nowrap;
}
.ai-sum {
  font-size: 14px; font-weight: 600; line-height: 1.55;
  background: #0c1219; border: 1px solid #1b2430; border-left: 3px solid #6f5bd6;
  border-radius: 8px; padding: 10px 12px; margin-bottom: 10px;
}
.ai-body p { margin: 0 0 10px; font-size: 13.5px; line-height: 1.7; color: #c9d3dd; }
.ai-body p:last-child { margin-bottom: 0; }
.ai-risk { color: #e8c07a; font-size: 13px; margin-top: 10px; }

/* ---------- 相关新闻 ---------- */
.nw-sub { color: var(--muted); font-size: 12px; margin: 4px 0 10px; }
.nw-list { display: flex; flex-direction: column; gap: 6px; }
.nw-item {
  display: flex; flex-direction: column; gap: 2px; text-decoration: none;
  background: #0c1219; border: 1px solid #1b2430; border-radius: 8px; padding: 8px 11px;
}
.nw-item:hover { border-color: #35506e; }
.nw-t { color: #c9d3dd; font-size: 13px; line-height: 1.45; }
.nw-m { color: #55616e; font-size: 11px; }


/* ---------- 智能分析 ---------- */
.analysis { margin-top: 12px; background: var(--panel); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; }
.an-note { color: var(--muted); padding: 8px 2px; font-size: 13px; }
.an-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 12px; }
.an-title { font-size: 15px; font-weight: 700; }
.an-sub2 { color: var(--muted); font-size: 12px; margin-top: 3px; }
.an-sub2 .up { color: var(--up); }
.an-sub2 .dn { color: var(--down); }
.an-verdict { font-size: 16px; font-weight: 700; white-space: nowrap; padding: 6px 14px; border-radius: 8px; display: flex; align-items: center; gap: 8px; }
.an-verdict b { font-family: Consolas, monospace; font-size: 13px; font-weight: 600; opacity: .85; }
.an-verdict.bull { color: var(--up); background: #2a1416; border: 1px solid #5c2626; }
.an-verdict.bear { color: var(--down); background: #12241d; border: 1px solid #235038; }
.an-verdict.neutral { color: #c8d2dd; background: #18212b; border: 1px solid #2b3946; }
.an-grid { display: grid; grid-template-columns: 1.15fr 1fr; gap: 14px; }
.an-sub { font-size: 12px; color: var(--muted); margin-bottom: 8px; }
.sig { display: flex; gap: 8px; align-items: flex-start; padding: 5px 0; border-bottom: 1px dashed #1b2430; font-size: 13px; }
.sig:last-child { border-bottom: none; }
.sig .tag { min-width: 22px; text-align: center; border-radius: 5px; font-size: 11px; line-height: 18px; font-weight: 600; flex: none; }
.sig .tag.up { color: var(--up); background: #2a1416; }
.sig .tag.dn { color: var(--down); background: #12241d; }
.sig .tag.mut { color: #8b97a5; background: #18212b; }
.sig .st { color: #c9d3dd; }
.an-inds { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.ic { background: #0c1219; border: 1px solid #1b2430; border-radius: 7px; padding: 7px 9px; }
.ic-k { font-size: 11px; color: var(--muted); }
.ic-v { font-family: Consolas, monospace; font-size: 13px; margin-top: 2px; }
.ic-v.up { color: var(--up); }
.ic-v.dn { color: var(--down); }
.an-advice { margin-top: 14px; background: #0c1219; border: 1px solid #1b2430; border-radius: 8px; padding: 12px 14px; }
.an-op { font-size: 14px; line-height: 1.6; }
.an-risk { color: #e8c07a; font-size: 13px; margin-top: 6px; }
.an-note2 { color: var(--muted); font-size: 12px; margin-top: 6px; font-family: Consolas, monospace; }
.an-disc { color: #55616e; font-size: 11px; margin-top: 10px; }

/* ---- K 线形态 · 量能 ---- */
.an-candle { margin-top: 14px; background: #0c1219; border: 1px solid #1b2430; border-radius: 8px; padding: 12px 14px; }.cd-last { margin-top: 4px; }
.cd-k { font-family: Consolas, monospace; font-size: 13px; }
.cd-k.up { color: var(--up); }
.cd-k.dn { color: var(--down); }
.cd-sum { color: #c9d3dd; font-size: 13px; line-height: 1.65; margin: 6px 0 10px; }
.cd-grid { display: grid; grid-template-columns: 1.15fr 1fr; gap: 14px; }
.vol-row { display: flex; justify-content: space-between; font-size: 12px; color: var(--muted); padding: 3px 0; }
.vol-v { font-family: Consolas, monospace; color: #c9d3dd; }
.vol-bar { height: 6px; border-radius: 3px; background: #18212b; overflow: hidden; margin: 4px 0 8px; }
.vol-bar i { display: block; height: 100%; border-radius: 3px; background: #8b97a5; }
.vol-bar i.up { background: var(--up); }
.vol-bar i.dn { background: var(--down); }

/* ---- 更多指标折叠区 / 关键价位 / RS / 问ChatGPT ---- */
.an-ext { margin-top: 14px; background: #0c1219; border: 1px solid #1b2430; border-radius: 8px; padding: 0 14px; }
/* Lightweight Charts 容器 */
#lwChart { position: relative; }
#lwChart table { border: none; }
#lwChart .tv-lightweight-charts { font-family: Consolas, monospace; }
.fund-box { margin-top: 10px; }
.fund-box .an-sub { margin-bottom: 6px; }
.an-ext summary { cursor: pointer; padding: 11px 0; font-size: 13px; color: #c9d3dd; font-weight: 600; user-select: none; list-style: none; }
.an-ext summary::-webkit-details-marker { display: none; }
.an-ext .ext-arrow { float: right; color: var(--muted); font-size: 11px; font-weight: 400; }
.an-ext[open] .ext-arrow { content: '收起 ▴'; }
.an-ext[open] .ext-arrow::after { content: ''; }
.an-ext summary::after { content: ''; display: block; clear: both; }
.an-ext[open] { padding-bottom: 12px; }
.an-ext .an-inds { margin-top: 2px; }
.lv-sub { margin-top: 10px; }
.lv-box { background: #0a0f16; border: 1px solid #1b2430; border-radius: 7px; padding: 8px 10px; margin-top: 4px; }
.lv-row { display: flex; gap: 10px; padding: 4px 0; font-size: 12px; align-items: baseline; }
.lv-k { color: var(--muted); flex: none; width: 58px; }
.lv-v { color: #c9d3dd; font-family: Consolas, monospace; line-height: 1.7; }
.lv-v b { font-weight: 600; }
.lv-v b.dn { color: var(--down); }
.lv-v b.up { color: var(--up); }
.lv-v i { color: #55616e; font-style: normal; font-size: 11px; margin-left: 3px; }
.rs-box { margin-top: 10px; background: #0a0f16; border: 1px solid #1b2430; border-radius: 7px; padding: 8px 10px; }
.rs-head { display: flex; justify-content: space-between; align-items: baseline; }
.rs-latest { font-family: Consolas, monospace; font-size: 13px; font-weight: 600; }
.rs-latest.up { color: var(--up); }
.rs-latest.dn { color: var(--down); }
.rs-svg { display: block; width: 100%; height: 56px; margin: 6px 0 2px; color: #8b97a5; }
.rs-line.up { stroke: var(--up); }
.rs-line.dn { stroke: var(--down); }
.rs-perf { font-size: 11px; color: var(--muted); font-family: Consolas, monospace; }
.rs-perf .up { color: var(--up); }
.rs-perf .dn { color: var(--down); }
.ask-row { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.ask-gpt { display: inline-flex; align-items: center; gap: 4px; margin-top: 0; padding: 5px 12px; border-radius: 6px; border: 1px solid #2a3542; background: #131a24; color: #c9d3dd; font-size: 12px; text-decoration: none; font-weight: 600; cursor: pointer; font-family: inherit; }
.ask-gpt:hover { border-color: #3d4a5a; background: #18212b; color: #fff; }
.ask-gpt.ask-ds { border-color: #35305a; background: #141226; color: #b6b0e8; }
.ask-gpt.ask-ds:hover { border-color: #4d46a0; background: #1a1738; color: #dcd8ff; }

/* ---- 顶部视图切换 ---- */
.viewtabs { display: flex; gap: 4px; background: #0c1219; border: 1px solid #1b2430; border-radius: 8px; padding: 3px; }
.vt { border: none; background: transparent; color: var(--muted); font-size: 12px; padding: 5px 12px; border-radius: 6px; cursor: pointer; font-family: inherit; }
.vt.active { background: #1b2430; color: #dbe4ee; font-weight: 600; }

/* ---- 组合仪表盘 ---- */
.dash-sum-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
.sum-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; }
.sum-card { background: #0c1219; border: 1px solid #1b2430; border-radius: 8px; padding: 11px 13px; }
.sc-k { font-size: 11px; color: var(--muted); }
.sc-v { font-family: Consolas, monospace; font-size: 19px; margin-top: 4px; font-weight: 600; }
.sc-v.up { color: var(--up); }
.sc-v.dn { color: var(--down); }
.sc-s { font-size: 11px; color: #55616e; margin-top: 4px; }
.sc-small { font-size: 12px; font-weight: 400; }
.dash-warn { margin-top: 8px; color: #e8c07a; font-size: 12px; }
.dash-row { display: grid; grid-template-columns: 1.15fr 1fr; gap: 10px; margin-top: 10px; }
.dash-card { background: #0c1219; border: 1px solid #1b2430; border-radius: 8px; padding: 11px 13px; margin-top: 10px; }
.dash-row .dash-card { margin-top: 0; }
.dc-h { display: flex; align-items: center; gap: 10px; font-size: 13px; font-weight: 600; color: #dbe4ee; margin-bottom: 8px; }
.dc-h .mini { margin-left: auto; }
.dc-sub { font-size: 11px; color: var(--muted); font-weight: 400; }
.dc-tabs { margin-left: auto; display: flex; gap: 4px; }
.dc-tab { border: 1px solid #1b2430; background: #0a0f16; color: var(--muted); font-size: 11px; padding: 3px 9px; border-radius: 6px; cursor: pointer; font-family: inherit; }
.dc-tab.active { background: #1b2430; color: #dbe4ee; border-color: #2a3542; }
#baseCcy { background: #0a0f16; color: #c9d3dd; border: 1px solid #1b2430; border-radius: 5px; font-size: 11px; padding: 2px 4px; font-family: inherit; }

.donut-flex { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; }
.donut { width: 168px; height: 168px; flex: none; }
.dn-t1 { fill: #dbe4ee; font-size: 17px; font-family: Consolas, monospace; font-weight: 600; }
.dn-t2 { fill: #55616e; font-size: 10px; }
.donut-legend { flex: 1; min-width: 200px; }
.dg-row { display: flex; align-items: center; gap: 7px; font-size: 12px; padding: 3px 0; border-bottom: 1px dashed #161f29; }
.dg-row:last-child { border-bottom: none; }
.dg-row i { width: 9px; height: 9px; border-radius: 2px; flex: none; }
.dg-l { flex: 1; color: #c9d3dd; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dg-v { font-family: Consolas, monospace; color: #9fb0c2; }
.dg-p { color: var(--muted); width: 46px; text-align: right; font-family: Consolas, monospace; }

.mv-flex { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.mv-h { font-size: 11px; color: var(--muted); margin-bottom: 4px; }
.mv-row { display: flex; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px dashed #161f29; font-size: 12px; }
.mv-row:last-child { border-bottom: none; }
.mv-row.clickable { cursor: pointer; }
.mv-row.clickable:hover { background: #101822; }
.mv-n { flex: 1; color: #dbe4ee; font-weight: 600; display: flex; flex-direction: column; }
.mv-n i { color: #55616e; font-style: normal; font-size: 10px; font-weight: 400; }
.mv-c { font-family: Consolas, monospace; }
.mv-c.up { color: var(--up); }
.mv-c.dn { color: var(--down); }
.mv-v { font-family: Consolas, monospace; color: #9fb0c2; text-align: right; min-width: 92px; }
.mv-v .up { color: var(--up); }
.mv-v .dn { color: var(--down); }

.tbl-wrap { overflow-x: auto; }
.pf-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.pf-table th { text-align: left; color: var(--muted); font-weight: 500; font-size: 11px; padding: 7px 8px; border-bottom: 1px solid #1b2430; white-space: nowrap; }
.pf-table th.sortable { cursor: pointer; user-select: none; }
.pf-table th.sortable:hover { color: #dbe4ee; background: #101822; }
.pf-table th.sortable.on { color: #dbe4ee; }
.pf-table th.num { text-align: right; }

/* 市场标注：美股 / 港股 / 加拿大 TSX / A股 */
.mkb { display: inline-block; font-size: 9px; font-weight: 700; line-height: 14px; padding: 0 4px; border-radius: 3px; margin-right: 5px; letter-spacing: .3px; vertical-align: 1px; }
.mkb.mk-us { color: #5b9dff; background: #12233c; }
.mkb.mk-hk { color: #e8a33d; background: #33260f; }
.mkb.mk-tsx { color: #3fbf7f; background: #0f2a1e; }
.mkb.mk-cn { color: #b48cff; background: #231a3a; }
.pf-table tr.mk-us td.td-tk { box-shadow: inset 3px 0 0 #5b9dff; }
.pf-table tr.mk-hk td.td-tk { box-shadow: inset 3px 0 0 #e8a33d; }
.pf-table tr.mk-tsx td.td-tk { box-shadow: inset 3px 0 0 #3fbf7f; }
.pf-table tr.mk-cn td.td-tk { box-shadow: inset 3px 0 0 #b48cff; }
.mk-legend { margin-left: 10px; }
.mk-legend .mkb { margin-left: 6px; }
.pf-table td { padding: 5px 8px; border-bottom: 1px dashed #161f29; vertical-align: middle; }
.pf-table td.num { font-family: Consolas, monospace; text-align: right; white-space: nowrap; }
.pf-table td.up { color: var(--up); }
.pf-table td.dn { color: var(--down); }
.pf-table tr:hover { background: #101822; }
.td-tk { min-width: 150px; }
.tk-link { color: #7fb2ff; text-decoration: none; font-weight: 600; }
.tk-link:hover { text-decoration: underline; }
.td-nm { display: block; color: #55616e; font-style: normal; font-size: 10px; }
.td-type { color: var(--muted); font-size: 11px; white-space: nowrap; }
.cell-in { width: 86px; background: #0a0f16; border: 1px solid #1b2430; border-radius: 5px; color: #dbe4ee; font-family: Consolas, monospace; font-size: 12px; padding: 4px 6px; text-align: right; }
.cell-in:focus { outline: none; border-color: #3d7eff; background: #0e1720; }
.cell-in::-webkit-outer-spin-button, .cell-in::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.row-del { border: none; background: transparent; color: #55616e; cursor: pointer; font-size: 15px; line-height: 1; padding: 0 4px; }
.row-del:hover { color: var(--up); }
.tbl-foot { margin-top: 8px; font-size: 11px; color: var(--muted); }

@media (max-width: 900px) {
  .dash-row { grid-template-columns: 1fr; }
  .viewtabs { order: 4; }
}

@media (max-width: 900px) {
  .an-grid { grid-template-columns: 1fr; }
  .cd-grid { grid-template-columns: 1fr; }
}

@media (max-width: 900px) {
  main { grid-template-columns: 1fr; padding: 10px; }
  header { flex-wrap: wrap; }
  .searchbox { flex: 1 1 100%; order: 3; }
  aside { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  aside .panel { margin-bottom: 0; }
  .sym-title { font-size: 17px; }
}
@media (max-width: 620px) {
  aside { grid-template-columns: 1fr; }
}
