:root {
  --bg: #0f1420;
  --card: #182033;
  --card-hover: #1e2941;
  --border: #2a3550;
  --text: #e8ecf5;
  --muted: #8b96ad;
  --up: #34d399;
  --down: #f87171;
  --accent: #60a5fa;
}

* { box-sizing: border-box; }

body {
  margin: 0 auto;
  max-width: 1100px;
  padding: 20px 16px 60px;
  background: var(--bg);
  color: var(--text);
  font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
  line-height: 1.55;
}

header { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
h1 { font-size: 22px; margin: 0 0 4px; }
h2 { font-size: 17px; margin: 34px 0 12px; }
.muted { color: var(--muted); }
.small { font-size: 12px; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }

/* 全局页面 tab 栏(4 页统一,sticky 贴顶;负边距抵消 body padding 实现全宽) */
.pagenav {
  position: sticky; top: 0; z-index: 100;
  display: flex; gap: 6px; overflow-x: auto;
  margin: -20px -16px 18px; padding: 10px 16px;
  background: var(--bg); border-bottom: 1px solid var(--border);
}
.pagenav a { padding: 6px 14px; border-radius: 8px; color: var(--muted);
  text-decoration: none; font-size: 14px; font-weight: 500; white-space: nowrap; }
.pagenav a:hover { background: var(--card-hover); color: var(--text); text-decoration: none; }
.pagenav a.active { background: var(--accent); color: #0b1020; font-weight: 600; }
.sc-table th.rk-thesis-driven { color: #facc15; }
.rk-grpsel { min-width: 118px; max-width: 190px; font-size: 11px; padding: 4px 6px; }
.rk-exit { width: 152px; max-width: 152px; font-size: 11px; padding: 4px 6px; }
.risk-form input.rk-auto-placeholder::placeholder { color: var(--text); opacity: .45; }

/* 切票卡横排容器(交易台迷你卡沿用) */
.quotes-strip { display: flex; gap: 10px; overflow-x: auto; padding: 14px 0 4px; }
.up { color: var(--up); }
.down { color: var(--down); }

/* 全局股票筛选 */
.ticker-filter { padding: 8px 0 10px; border-bottom: 1px solid var(--border); }
.ticker-filter button { font-size: 12px; padding: 4px 11px; }

/* Tab 导航 */
nav { position: sticky; top: 0; z-index: 5; display: flex; gap: 6px; flex-wrap: wrap;
  padding: 10px 0; background: var(--bg); border-bottom: 1px solid var(--border); }
nav .tab {
  padding: 7px 16px; border-radius: 18px; font-size: 14px; cursor: pointer;
  border: 1px solid var(--border); background: var(--card); color: var(--muted);
}
nav .tab:hover { background: var(--card-hover); color: var(--text); }
nav .tab.active { background: var(--accent); border-color: var(--accent); color: #0b1020; font-weight: 600; }

/* Research topic tabs: related studies stay together, with clear spacing between groups. */
.research-topic-nav { position: static; align-items: stretch; gap: 10px; }
.research-topic-group { display: flex; flex-direction: column; gap: 5px; }
.research-topic-group + .research-topic-group { margin-left: 0; padding-left: 10px; border-left: 1px solid var(--border); }
.research-topic-label { color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .08em; }
.research-topic-tabs { display: flex; gap: 6px; flex-wrap: wrap; }
.research-topic-nav .tab { padding: 6px 10px; font-size: 13px; white-space: nowrap; }

@media (max-width: 760px) {
  .research-topic-nav { gap: 14px 22px; }
  .research-topic-group + .research-topic-group { margin-left: 0; padding-left: 0; border-left: 0; }
}

.tab-panel { display: none; }
.tab-panel.active { display: block; }

/* Five-factor equity return decomposition */
.ff-controls { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ff-controls .tab { position: relative; padding-bottom: 7px; }
.ff-controls .tab.active::after {
  content: "";
  position: absolute;
  left: 6px;
  right: 6px;
  bottom: 1px;
  height: 4px;
  border-radius: 3px;
  background: var(--accent);
}
.ff-formula { margin: 10px 0 6px; color: var(--text); font-family: Georgia, serif; font-size: 15px; }
.ff-table-wrap { overflow-x: auto; }
.ff-table { min-width: 1330px; table-layout: fixed; }
.ff-table th:first-child, .ff-table td:first-child { width: 150px; position: sticky; left: 0; z-index: 1; background: var(--card); }
.ff-table th:not(:first-child) { width: 205px; text-align: center; }
.ff-table th:nth-child(2) { width: 150px; }
.ff-sort-btn {
  width: 100%;
  appearance: none;
  border: 0;
  padding: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  line-height: 1.35;
  cursor: pointer;
}
.ff-sort-btn:hover { color: var(--text); }
.ff-sort-btn i { margin-left: 5px; color: var(--accent); font-style: normal; font-weight: 800; }
.ff-sort-btn:focus-visible { outline: 1px solid var(--accent); outline-offset: 3px; border-radius: 3px; }
.ff-table td { vertical-align: top; }
.ff-factor { text-align: center; font-size: 14px; font-weight: 750; font-variant-numeric: tabular-nums; }
.ff-raw { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.35; text-align: center; white-space: nowrap; font-variant-numeric: tabular-nums; }
.ff-warning { color: #fbbf24; cursor: help; }
.ff-warning.freshness-stale,.ff-warning.freshness-expired{color:#ef4444}
.ff-price { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.35; font-variant-numeric: tabular-nums; }
.ff-missing { color: var(--muted); font-size: 11px; }
.ff-note { margin-top: 8px; line-height: 1.6; }

/* Regime radar */
.regime-controls { display: flex; align-items: end; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.regime-controls label { display: grid; gap: 3px; color: var(--muted); font-size: 11px; }
.regime-controls input, .regime-controls select { min-height: 32px; padding: 5px 8px; border: 1px solid var(--border); border-radius: 6px; background: var(--card-hover); color: var(--text); }
.regime-controls button { min-height: 32px; }
.regime-controls #regime-status { align-self: center; margin-left: auto; }
.regime-layout { display: grid; grid-template-columns: minmax(360px, 620px) minmax(180px, 1fr); gap: 24px; align-items: center; }
.regime-chart { min-width: 0; touch-action: none; user-select: none; }
.regime-chart svg { display: block; width: 100%; max-height: 580px; overflow: visible; }
.regime-ring { fill: none; stroke: var(--border); stroke-width: 1; }
.regime-axis { stroke: var(--border); stroke-width: 1; }
.regime-label { fill: var(--muted); font-size: 13px; dominant-baseline: middle; }
.regime-shape { fill: hsl(210 90% 65% / .22); stroke: var(--accent); stroke-width: 2.5; }
.regime-point { fill: var(--accent); stroke: var(--bg); stroke-width: 3; cursor: grab; }
.regime-point:active { cursor: grabbing; }
.regime-chart.is-frozen .regime-point { cursor: default; opacity: .75; }
.regime-point:focus-visible { outline: none; stroke: #fff; stroke-width: 4; }
.regime-values { display: grid; gap: 7px; }
.regime-values div { display: flex; justify-content: space-between; gap: 20px; padding: 7px 10px; border-bottom: 1px solid var(--border); }
.regime-values span { color: var(--muted); }
.regime-values b { color: var(--accent); font-variant-numeric: tabular-nums; }
@media (max-width: 720px) { .regime-layout { grid-template-columns: 1fr; } .regime-values { grid-template-columns: repeat(2, 1fr); } }
.ff-missing { color: var(--muted); font-size: 11px; }
.ff-note { margin-top: 8px; line-height: 1.6; }
.floating-table-head {
  position: fixed;
  z-index: 90;
  overflow: hidden;
  background: var(--card);
  box-shadow: 0 3px 8px rgba(0, 0, 0, .35), 0 2px 0 var(--border);
  pointer-events: auto;
}
.floating-table-head[hidden] { display: none; }
.floating-table-head table { table-layout: fixed; margin: 0; background: var(--card); }
.floating-table-head th { background: var(--card); }
.floating-table-head th:first-child { position: relative; z-index: 2; background: var(--card); }

/* 卡片和表格 */
.card { background: var(--card); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
/* 13F 卡片:min-width:0 防止宽表格撑破格子压到邻卡(grid blowout);太宽则卡内横向滚动 */
#holdings13f .card { min-width: 0; overflow-x: auto; }
table { width: 100%; border-collapse: collapse; font-size: 14px; }
th, td { text-align: left; padding: 7px 10px; border-bottom: 1px solid var(--border); font-variant-numeric: tabular-nums; }
th { color: var(--muted); font-weight: 500; font-size: 12px; }
tr:last-child td { border-bottom: none; }
.today-row { background: rgba(96, 165, 250, .08); }

/* 分析师评级堆叠条 */
.rec-row { display: flex; align-items: center; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--border); }
.rec-row:last-child { border-bottom: none; }
.rec-sym { width: 60px; font-weight: 700; }
.rec-bar { flex: 1; display: flex; height: 18px; border-radius: 5px; overflow: hidden; min-width: 160px; }
.rec-bar div { height: 100%; }
.rb-sbuy { background: #10b981; } .rb-buy { background: #6ee7b7; }
.rb-hold { background: #94a3b8; } .rb-sell { background: #fca5a5; } .rb-ssell { background: #ef4444; }
.rec-nums { width: 200px; font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }

/* 列表(新闻/信息流) */
.list .item { padding: 11px 0; border-bottom: 1px solid var(--border); }
.list .item:last-child { border-bottom: none; }
.item .meta { font-size: 12px; color: var(--muted); margin-bottom: 2px; }
.item .heat { color: #fbbf24; }
.item .title { font-size: 14.5px; }
.item .summary { font-size: 13px; color: var(--muted); margin-top: 3px; }
.tag { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 11px;
  background: var(--border); color: var(--text); margin-right: 6px; }
.tag.kol { background: #7c3aed; } .tag.youtube { background: #b91c1c; }
.tag.community { background: #0e7490; } .tag.news { background: #374151; }
.tag.senti-pos { background: #065f46; color: #6ee7b7; }
.tag.senti-neg { background: #7f1d1d; color: #fca5a5; }
.tag.senti-neu { background: #374151; color: #cbd5e1; }

/* 个股 / 期权卡片 */
.stock-card, #opt-cards .card { margin-bottom: 14px; }
.stat-row { display: flex; gap: 18px; flex-wrap: wrap; font-size: 13px; padding: 5px 0; color: var(--muted); }
.stat-row b { color: var(--text); }

/* 期权面板 grid 磁贴 */
.opt-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); gap: 8px; margin: 4px 0 10px; }
.opt-tile { background: var(--card-hover); border: 1px solid var(--border); border-radius: 8px; padding: 7px 10px; }
.opt-k { font-size: 11px; color: var(--muted); margin-bottom: 2px; }
.opt-v { font-size: 15px; font-weight: 700; color: var(--text); }
.opt-v.up { color: var(--up); }
.opt-v.down { color: var(--down); }
.opt-sub { font-size: 11px; font-weight: 400; color: var(--muted); }
.prem-bar { display: flex; height: 10px; border-radius: 5px; overflow: hidden; background: var(--down); margin: 8px 0 2px; }
.prem-bar .prem-call { background: var(--up); height: 100%; }
details summary { cursor: pointer; padding: 4px 0; }

/* 分类筛选 chips */
.chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
.chips button {
  padding: 5px 14px; border-radius: 16px; border: 1px solid var(--border);
  background: var(--card); color: var(--muted); font-size: 13px; cursor: pointer;
}
.chips button.active { background: var(--accent); border-color: var(--accent); color: #0b1020; font-weight: 600; }

/* GEX 分页 */
.gex-controls .ctl-row { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; margin-bottom: 10px; }
.gex-controls label { font-size: 13px; color: var(--muted); display: flex; align-items: center; gap: 6px; }
.gex-controls input, .gex-controls select {
  background: var(--bg); color: var(--text); border: 1px solid var(--border);
  border-radius: 8px; padding: 6px 9px; font-size: 13px; color-scheme: dark;
}
.gex-controls input[type="password"] { flex: 1; min-width: 220px; }
.gex-controls button {
  padding: 7px 14px; border-radius: 8px; border: 1px solid var(--border);
  background: var(--card-hover); color: var(--text); font-size: 13px; cursor: pointer;
}
.gex-controls button:hover { border-color: var(--accent); }
#gex-start-btn { background: var(--accent); border-color: var(--accent); color: #0b1020; font-weight: 600; }
.gex-grid { display: grid; gap: 12px; margin-top: 14px; }
.gex-head { display: flex; gap: 14px; align-items: baseline; flex-wrap: wrap; margin-bottom: 8px; }
.gex-head b { font-size: 16px; }
.gex-head .flip { color: #fbbf24; }
.gex-chart { width: 100%; height: auto; display: block; margin-top: 6px; }

footer { margin-top: 50px; text-align: center; }
.empty { color: var(--muted); padding: 8px 0; }

/* ================= 交易台 ================= */
.trading { max-width: 1280px; }
.hdr-right { display: flex; align-items: center; gap: 10px; }
.mini-btn { padding: 5px 12px; border-radius: 8px; border: 1px solid var(--border);
  background: var(--card); color: var(--text); cursor: pointer; font-size: 13px; }
.mini-btn:hover { background: var(--card-hover); }
.tab-link { text-decoration: none; display: inline-flex; align-items: center; }

/* 固定十列 ticker grid；视口不足时横向滚动，不改变列数或卡片尺寸。 */
.ticker-card-toolbar { display: flex; align-items: center; gap: 10px; padding-top: 8px; }
.ticker-card-filter { display: inline-flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.ticker-card-filter label { display: inline-flex; align-items: center; gap: 5px; padding: 4px 9px;
  border: 1px solid var(--border); border-radius: 7px; color: var(--muted); font-size: 12px;
  cursor: pointer; user-select: none; }
.ticker-card-filter label:hover { color: var(--text); background: var(--card-hover); }
.ticker-card-filter label:has(input:checked) { color: var(--text); border-color: var(--accent); background: rgba(96, 165, 250, .12); }
.ticker-card-filter input { margin: 0; accent-color: var(--accent); }
.mini-strip { display: grid; grid-template-columns: repeat(10, 142px); gap: 10px;
  align-items: stretch; justify-content: start; padding: 10px 0 6px;
  overflow-x: auto; overflow-y: hidden; overscroll-behavior-inline: contain; }
#cfg-status { padding: 2px 0 6px; }
#cfg-status:not(:empty) { color: var(--text); }
.mini-card { cursor: pointer; display: flex; align-items: stretch; gap: 8px;
  width: 142px; min-width: 142px; height: 126px; padding: 10px 12px;
  background: var(--card); border: 1px solid var(--border); border-radius: 10px;
  position: relative; overflow: hidden; }
/* 成交量水位:半透明,从卡片底部按 √(ADV) 升起;内容层浮于其上 */
.mc-water { position: absolute; left: 0; right: 0; bottom: 0; pointer-events: none;
  background: rgba(96, 165, 250, .16); border-top: 0; }
.mc-water::before { content: ""; position: absolute; left: 0; right: 0; top: -9px; height: 10px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 10' preserveAspectRatio='none'%3E%3Cpath d='M0 5 C7 1.5 13 1.5 20 5 S33 8.5 40 5 V10 H0Z' fill='rgb(96,165,250)' fill-opacity='.16'/%3E%3Cpath d='M0 5 C7 1.5 13 1.5 20 5 S33 8.5 40 5' fill='none' stroke='rgb(96,165,250)' stroke-opacity='.42' stroke-width='.8'/%3E%3C/svg%3E");
  background-repeat: repeat-x; background-size: 40px 10px; }
.mini-card .mc-main, .mini-card .mc-side { position: relative; z-index: 1; }
.mc-vol { font-size: 12px; color: #93b4e6; margin-top: 3px; font-variant-numeric: tabular-nums; }
.mini-card .sym { color: #f0c75e; font-weight: 700; font-size: 14px; }
.mini-card.neutral .sym { color: var(--text); }
.mini-card .price { font-size: 18px; font-variant-numeric: tabular-nums; }
.mini-card .chg { font-size: 13px; font-variant-numeric: tabular-nums; }
.mini-card:hover { background: var(--card-hover); }
.mini-card.active { border-color: var(--accent); background: rgba(96, 165, 250, .12); }
.mini-card.wl-only { opacity: .62; }
.mini-card.wl-only .price { font-weight: 400; }
.mc-main { min-width: 0; }
.mc-side { display: flex; flex-direction: column; align-items: center; justify-content: flex-start; padding-top: 13px; }
.mc-grp { display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: 7px; overflow: hidden; background: var(--card); }
.mc-grp button { width: 24px; height: 23px; display: grid; place-items: center; border: 0; border-bottom: 1px solid var(--border); background: transparent; color: var(--muted); padding: 4px; cursor: pointer; }
.mc-grp button:last-child { border-bottom: 0; }
.mc-grp button:hover { color: var(--text); background: var(--card-hover); }
.mc-grp button.on { background: var(--text); color: var(--bg); }
.mc-grp button.on[data-act="deep"] { background: var(--up); color: #07130f; }
.mc-grp button.on[data-act="wl"] { background: var(--down); color: #1b0909; }
.mc-grp button.on[data-act="uncertain"] { background: transparent; color: var(--text); }
.mc-grp svg { width: 15px; height: 15px; display: block; pointer-events: none; }
.mc-del { position: absolute; z-index: 2; top: 4px; right: 5px; width: 17px; height: 17px; display: grid; place-items: center; border: 0; border-radius: 4px; padding: 3px; background: transparent; color: var(--muted); cursor: pointer; }
.mc-del:hover { color: var(--down); background: var(--card-hover); }
.mc-del svg { width: 11px; height: 11px; pointer-events: none; }
.mini-card.mc-add { align-items: center; justify-content: center; cursor: default; }
.mc-add input { width: 76px; background: transparent; border: none; color: var(--text); font-size: 13px; text-align: center; outline: none; }

.wb-toolbar { display: flex; align-items: center; gap: 22px; flex-wrap: wrap;
  padding: 10px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
  position: sticky; top: 0; background: var(--bg); z-index: 5; }
.wb-toolbar .chips { margin: 0; }

/* toolbar 分组:标签 + 分段开关(segmented control) */
.tb-group { display: inline-flex; align-items: center; gap: 8px; transition: opacity .15s; }
.tb-label { font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--muted); white-space: nowrap; cursor: default; }
.chips.seg { gap: 0; border: 1px solid var(--border); border-radius: 8px;
  overflow: hidden; background: var(--card); }
.chips.seg button { border: none; border-left: 1px solid var(--border); border-radius: 0;
  padding: 6px 13px; font-size: 12px; white-space: nowrap; }
.chips.seg button:first-child { border-left: none; }
.chips.seg button:hover:not(.active) { background: var(--card-hover); color: var(--text); }
.chips.seg button.active { background: var(--accent); border-color: var(--accent);
  color: #0b1020; font-weight: 600; }
.wb-statbar { padding: 6px 0; }  /* 关键指标独占一行,左对齐(stat-row 默认 justify-content: flex-start) */
#risk-heat .wb-statbar { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
#risk-heat .opt-tile { min-width: 0; overflow-wrap: anywhere; }
#risk-heat #rk-maxheat { background: var(--card-hover); border: 1px solid var(--border); border-radius: 5px; padding: 2px 5px; color: var(--text); font: inherit; }
@media (max-width: 900px) { #risk-heat .wb-statbar { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
#position-sizing-calculator .wb-statbar { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 8px; }
#position-sizing-calculator .portfolio-sizing-inputs { align-items: end; }

.wb-main { display: flex; gap: 10px; margin-top: 12px; }
.wb-chart { flex: 1; min-width: 0; }
.chart-wrap { position: relative; }
#chart { height: 520px; }
#chart-legend {
  position: absolute; display: none; z-index: 6; pointer-events: none;
  background: rgba(15, 20, 32, .92); border: 1px solid var(--border); border-radius: 6px;
  padding: 4px 8px; font-size: 12px; line-height: 1.5; white-space: nowrap;
}
.trade-note-card { position: absolute; z-index: 12; width: min(370px, calc(100% - 16px)); max-height: 410px;
  overflow: auto; background: rgba(15, 20, 32, .98); border: 1px solid var(--accent); border-radius: 10px;
  box-shadow: 0 14px 36px rgba(0,0,0,.48); padding: 10px; color: var(--text); }
.trade-note-card[hidden] { display: none; }
.trade-note-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 8px; }
.trade-note-head b { font-size: 16px; }
.trade-note-head button { border: 0; background: transparent; color: var(--muted); font-size: 22px; line-height: 1; cursor: pointer; }
.trade-account-summary { display: grid; gap: 7px; margin: 0 0 10px; padding: 0; list-style: none; }
.trade-account-summary li { display: grid; gap: 1px; color: var(--muted); font-variant-numeric: tabular-nums; }
.trade-account-summary time { font-size: 10px; color: var(--muted); }
.trade-account-summary span { display: flex; align-items: baseline; gap: 7px; font-size: 12px; color: inherit; }
.trade-account-summary span::before { content: "•"; flex: 0 0 auto; font-size: 14px; line-height: 1; color: currentColor; }
[data-account-tone="hui"] { color: #c084fc !important; }
[data-account-tone="takku"] { color: #7dd3fc !important; }
[data-account-tone="moomoo"] { color: #fb923c !important; }
.trade-note-list { display: grid; gap: 9px; }
.trade-note-list section { border-top: 1px solid var(--border); padding-top: 8px; }
.trade-note-facts { display: flex; flex-direction: column; gap: 2px; margin-bottom: 7px; font-size: 12px; }
.trade-note-facts span { color: var(--muted); font-variant-numeric: tabular-nums; }
.trade-note-list label { display: grid; gap: 4px; color: var(--muted); font-size: 11px; }
.trade-note-list textarea { resize: vertical; min-height: 54px; background: var(--card); border: 1px solid var(--border);
  border-radius: 6px; padding: 7px; color: var(--text); font: inherit; }
.trade-note-actions { display: flex; justify-content: flex-end; align-items: center; gap: 8px; margin-top: 6px; }
.trade-note-actions span { flex: 1; color: var(--muted); font-size: 11px; }
.trade-note-actions button { background: var(--accent); color: #0b1020; border: 0; border-radius: 6px; padding: 5px 9px; font-weight: 600; cursor: pointer; }
.trade-link-group { margin-top: 7px; color: var(--muted); font-size: 11px; }
.trade-link-group summary { cursor: pointer; }
.trade-import-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 8px;
  padding: 8px 10px; background: var(--card); border: 1px solid var(--border); border-radius: 8px; }
.trade-import-bar label { display: inline-flex; align-items: center; gap: 5px; color: var(--muted); font-size: 11px; }
.trade-import-bar input { width: 126px; padding: 5px 7px; color: var(--text); background: var(--bg);
  border: 1px solid var(--border); border-radius: 6px; color-scheme: dark; }
.trade-import-bar select { max-width: 220px; padding: 5px 7px; color: var(--text); background: var(--bg);
  border: 1px solid var(--border); border-radius: 6px; }
.trade-import-bar select[data-account-tone="hui"] { color: #c084fc; }
.trade-import-bar select[data-account-tone="takku"] { color: #7dd3fc; }
.trade-import-bar select[data-account-tone="moomoo"] { color: #fb923c; }
.trade-import-bar button:disabled { opacity: .5; cursor: wait; }
.trade-import-status { flex: 1 1 280px; min-width: 180px; font-variant-numeric: tabular-nums; }
.trade-coverage { padding: 4px 8px; border: 1px solid var(--border); border-radius: 6px;
  background: var(--bg); font-variant-numeric: tabular-nums; white-space: nowrap; }
#gex-sub { height: 110px; }
#macd-sub { height: 120px; }
#ind-sub { height: 120px; }
.sub-title { padding: 6px 0 2px; }
.wb-ladder { width: 260px; flex: 0 0 260px; }
#ladder-box { position: relative; user-select: none; cursor: ns-resize; }  /* 纵向滚轮缩放/拖动平移 */
/* 策略回测页交易表 */
/* 阶梯归因标签:做市商推断 vs 全市场 */
.lad-attr { font-size: 10px; padding: 1px 7px; border-radius: 8px; margin-left: 6px; font-weight: 600; vertical-align: middle; cursor: help; }
.lad-attr.lad-mm { color: #fbbf24; background: hsl(38 92% 50% / .16); }
.lad-attr.lad-mkt { color: var(--muted); background: hsl(220 12% 60% / .16); }
.lad-attr.lad-flow { color: var(--accent); background: hsl(213 94% 68% / .16); }

/* 5Y 走势聚合图例 */
.rt-legend { display: flex; flex-wrap: wrap; gap: 16px; margin: 4px 0 8px; font-size: 12px; }
.rt-leg { display: flex; align-items: center; gap: 6px; color: var(--muted); cursor: pointer; user-select: none; }
.rt-leg.off { opacity: .4; }
.rt-leg.off b { color: var(--muted); }
.rt-sw { width: 14px; height: 3px; border-radius: 2px; display: inline-block; }
.rt-leg b { color: var(--text); font-variant-numeric: tabular-nums; }
/* 账户风险控制 · thesis 管理 + 仓位计算器 */
.risk-form, .risk-bundles { display: flex; flex-wrap: wrap; gap: 12px 16px; align-items: flex-end; }
/* thesis ⋯ 操作菜单 */
.rk-menu-wrap { position: relative; display: inline-block; }
.rk-menu { position: absolute; top: calc(100% + 4px); left: 0; z-index: 20; min-width: 150px;
  background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 4px;
  box-shadow: 0 8px 24px rgba(0,0,0,.35); display: flex; flex-direction: column; gap: 2px; }
.rk-menu[hidden] { display: none; }   /* 让 hidden 属性真正生效(否则上面的 display:flex 盖过默认 [hidden]) */
.rk-menu-item { text-align: left; background: transparent; border: 0; color: var(--text);
  padding: 7px 10px; border-radius: 6px; font-size: 13px; cursor: pointer; white-space: nowrap; }
.rk-menu-item:hover { background: var(--card-hover); }
.rk-menu-item.rk-danger { color: var(--down); }
.rk-menu-item.rk-armed { background: hsl(0 70% 50% / .22); color: var(--down); font-weight: 600; }
.rk-menu-item.rk-armed[data-act="complete"] { background: hsl(152 55% 45% / .22); color: var(--up); }
.risk-bundles { padding-bottom: 10px; border-bottom: 1px solid var(--border); }
.risk-form label, .risk-bundles label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--muted); }
.risk-form input, .risk-form select, .risk-bundles input, .risk-bundles select {
  background: var(--card-hover); border: 1px solid var(--border); border-radius: 6px;
  padding: 5px 8px; color: var(--text); font-size: 13px; font-variant-numeric: tabular-nums; width: 130px;
}
.mini-btn { background: var(--card-hover); border: 1px solid var(--border); border-radius: 6px; padding: 6px 10px; color: var(--text); font-size: 12px; cursor: pointer; }
.mini-btn:hover { border-color: var(--accent); }
/* 悬停读数浮层(lightweight-charts 图通用,与 trading #chart-legend 同风格) */
.chart-hover {
  position: absolute; display: none; z-index: 6; pointer-events: none; top: 8px; left: 8px;
  background: rgba(15, 20, 32, .92); border: 1px solid var(--border); border-radius: 6px;
  padding: 5px 9px; font-size: 12px; line-height: 1.55; white-space: nowrap; font-variant-numeric: tabular-nums;
}

/* Scorecards 热力表 */
#scorecards { margin-top: 14px; }
.sc-head { margin-bottom: 10px; }
.sc-filters { margin: 0 0 10px; }
.sc-filters .tab { padding: 4px 8px 7px; color: var(--muted); border: 0; border-radius: 5px; background: transparent; cursor: pointer; }
.sc-filters .tab:hover, .sc-filters .tab.active { color: var(--text); }
.sc-filters .tab span { margin-left: 3px; font-variant-numeric: tabular-nums; opacity: .7; }
.sc-wrap { overflow-x: auto; }
.sc-table th { text-align: center; }
.sc-table td { text-align: center; }
.sc-table th:first-child, .sc-table td:first-child { text-align: left; }
.sc-heat td.sc-num { text-align: center; min-width: 46px; padding: 6px 6px; border-radius: 3px; white-space: nowrap; cursor: default; }
.sc-heat td.sc-num b { font-weight: 700; }
.sc-heat td.sc-num[title] { cursor: help; }
.sc-heat td.sc-mean { font-weight: 800; border-left: 2px solid var(--accent); }
.sc-flag { font-size: 9px; opacity: .85; margin-left: 1px; vertical-align: super; }
.sc-table .sc-cell { text-align: left; white-space: normal; vertical-align: top; min-width: 170px; max-width: 300px; line-height: 1.35; border-radius: 3px; }
.sc-cell b { font-weight: 700; }
.sc-why { color: var(--muted); font-weight: 400; font-size: 11px; }
.sc-table .sc-tk { position: sticky; left: 0; background: var(--card); width: 1%; white-space: nowrap; padding-right: 12px; }
.sc-table .sc-tk small { display: block; margin-top: 2px; color: var(--muted); font-size: 9px; font-weight: 400; line-height: 1.2; }
.sc-dir { font-size: 11px; padding: 0 7px; border-radius: 8px; }
.sc-dir.up { color: var(--up); background: hsl(152 60% 45% / .18); }
.sc-dir.down { color: var(--down); background: hsl(0 70% 62% / .18); }
.sc-dir.muted { color: var(--muted); background: hsl(220 10% 60% / .16); }
.sc-table .sc-empty { padding: 18px 8px; text-align: center; }
.sc-chk { text-align: left !important; white-space: normal; min-width: 130px; font-size: 11px; }
.sc-split td { border-top: 2px solid var(--accent); }

.bt-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.bt-table th, .bt-table td { text-align: left; padding: 4px 8px; border-bottom: 1px solid var(--border); font-variant-numeric: tabular-nums; }
.bt-table th { color: var(--muted); font-weight: 500; }
.rf-sort-btn { appearance: none; border: 0; background: none; color: inherit; font: inherit; padding: 0; cursor: pointer; white-space: nowrap; }
.rf-sort-btn:hover { color: var(--text); }
.rf-sort-btn span { color: var(--accent); margin-left: 4px; }
.rf-sort-btn:focus-visible { outline: 1px solid var(--accent); outline-offset: 3px; border-radius: 2px; }
.rf-now-table-wrap { overflow-x: auto; margin-bottom: 5px; }
.rf-now-table { min-width: 960px; white-space: nowrap; }
.rf-now-table thead tr:first-child th { text-align: center; border-bottom-color: transparent; }
.rf-now-table thead tr:last-child th { font-size: 11px; }
#ladder { display: block; }
/* Portfolio 饼图 + 图例 */
.pf-donut { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; margin: 12px 0; }
/* 图例:每列最多 8 行,持仓多了自动溢出到新列,不再挤成一长条(高度≈饼图) */
.pf-legend { display: grid; grid-auto-flow: column; grid-template-rows: repeat(8, auto);
  grid-auto-columns: max-content; gap: 4px 16px; align-content: start; font-size: 12px; }
.pf-leg { display: flex; align-items: center; gap: 6px; cursor: pointer; padding: 1px 4px; border-radius: 4px; }
.pf-leg:hover { background: var(--card-hover); }
.pf-leg.sel { background: var(--card-hover); font-weight: 600; }
.pf-sw { width: 10px; height: 10px; border-radius: 2px; display: inline-block; flex: none; }
.pf-slice { cursor: pointer; transition: opacity .12s; }
.pf-txhead { margin: 4px 0 6px; }
.pf-chip { background: var(--accent); color: #0b1220; border: none; border-radius: 12px; padding: 2px 10px; font-size: 12px; cursor: pointer; }
.pf-chip .muted { color: #0b1220; opacity: .6; }
.pf-acctbar { display: flex; align-items: center; gap: 8px; margin: 2px 0 12px; }
.pf-acct { background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 8px; padding: 5px 9px; font-size: 13px; color-scheme: dark; cursor: pointer; }
.pf-pies { display: flex; gap: 28px; flex-wrap: wrap; align-items: flex-start; }
.pf-pie-cap { font-weight: 600; margin: 0 0 2px; }
.pf-cap-tot { color: var(--text); font-weight: 600; margin-left: 6px; }
.pf-pager { display: flex; align-items: center; gap: 12px; margin: 8px 0 2px; }
.pf-pager .mini-btn:disabled { opacity: .4; cursor: default; }
/* 期权流→方向 IC 表 */
.fd-tbl td, .fd-tbl th { text-align: center; padding: 6px 12px; border-radius: 3px; white-space: nowrap; }
.fd-tbl td.fd-name, .fd-tbl th:first-child { text-align: left; white-space: normal; }
/* 月历 */
.pf-cal { margin-top: 14px; }
.pf-cal-stats { margin: 8px 0 12px; }
.pf-cal-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.pf-cal-wrap { overflow-x: auto; }
.pf-cal-tbl { border-collapse: collapse; font-size: 12px; white-space: nowrap; }
.pf-cal-tbl th, .pf-cal-tbl td { padding: 5px 8px; text-align: right; border-radius: 3px; }
.pf-cal-tbl th { color: var(--muted); font-weight: 500; text-align: center; }
.pf-cal-tbl .pf-cal-y { text-align: left; color: var(--muted); font-weight: 600; position: sticky; left: 0; background: var(--card); }
.pf-cal-tbl .pf-cal-tot { font-weight: 700; border-left: 2px solid var(--border); }
.pf-pnl { margin: 12px 0 4px; }
.pf-pnl-bar { display: flex; align-items: center; gap: 12px; margin: 8px 0; flex-wrap: wrap; }
.pf-pnl .chips.seg button[data-pw] { padding: 3px 12px; font-size: 12px; }
.pf-hist { margin-top: 6px; max-width: 520px; }
.pf-extreme { margin-top: 14px; }
.pf-extreme-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 6px; flex-wrap: wrap; }
.pf-extreme-wrap { overflow-x: auto; }
.pf-extreme-tbl { min-width: 640px; white-space: nowrap; }
.pf-extreme-tbl th, .pf-extreme-tbl td { text-align: right; padding: 5px 8px; }
.pf-extreme-tbl th:nth-child(2), .pf-extreme-tbl th:nth-child(3),
.pf-extreme-tbl th:nth-child(6), .pf-extreme-tbl th:nth-child(7),
.pf-extreme-tbl td:nth-child(2), .pf-extreme-tbl td:nth-child(3),
.pf-extreme-tbl td:nth-child(6), .pf-extreme-tbl td:nth-child(7) { text-align: left; }
.pf-extreme-tbl .pf-ext-win { color: var(--up); text-align: center; }
.pf-extreme-tbl .pf-ext-loss { color: var(--down); text-align: center; border-left: 2px solid var(--border); }
.pf-extreme-tbl .pf-ext-rank { color: var(--muted); text-align: center; width: 1%; }
.pf-extreme-tbl .pf-ext-split { border-left: 2px solid var(--border); }
.pf-extreme-tbl td.up { color: var(--up); font-weight: 600; }
.pf-extreme-tbl td.down { color: var(--down); font-weight: 600; }
#gex-exp button.bucket-empty { opacity: .38; text-decoration: line-through; }  /* 该到期桶当前无合约 */
.wb-overlays { gap: 8px; }
.wb-overlays .chips button { font-size: 11px; padding: 3px 9px; }

@media (max-width: 900px) {
  .wb-main { flex-direction: column; }
  .wb-ladder { width: 100%; flex: none; }
  #chart { height: 380px; }
}

.trade-link-editor { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border); }
.trade-link-editor label { margin: 7px 0; }
.trade-link-editor select, .trade-link-editor input { width: 100%; box-sizing: border-box; background: var(--card); color: var(--text); border: 1px solid var(--border); border-radius: 5px; padding: 6px; }
.trade-link-editor p { white-space: normal; overflow-wrap: anywhere; }

/* Trade executions: translucent direction colors deepen on hover and press. */
#trade-marker-layer { position: absolute; left: 0; top: 0; overflow: hidden; pointer-events: none; z-index: 7; }
#trade-candle-highlight { position: absolute; left: 0; top: 0; z-index: 5; width: 12px;
  pointer-events: none; border: 1px solid rgba(255, 255, 255, .9); border-radius: 4px;
  background: rgba(255, 255, 255, .12); box-shadow: 0 0 9px rgba(255, 255, 255, .55);
  transition: opacity 120ms ease, background-color 120ms ease; }
#trade-candle-highlight[hidden] { display: none; }
#trade-volume-highlight { position: absolute; left: 0; top: 0; z-index: 5; min-width: 3px;
  pointer-events: none; border: 1px solid rgba(255, 255, 255, .85); border-radius: 2px;
  background: rgba(255, 255, 255, .16); box-shadow: 0 0 7px rgba(255, 255, 255, .5);
  transition: opacity 120ms ease, background-color 120ms ease; }
#trade-volume-highlight[hidden] { display: none; }
.trade-marker-button { position: absolute; left: 0; top: 0; width: 20px; height: 20px;
  display: grid; place-items: center; padding: 0; margin: 0; box-sizing: border-box;
  --trade-bg: rgba(255, 255, 255, .45); --trade-hover: rgba(190, 190, 190, .55); --trade-pressed: rgba(130, 130, 130, .75); --trade-glow: rgba(255, 255, 255, .92);
  border: 1px solid rgba(255, 255, 255, .75); border-radius: 50%; background-color: var(--trade-bg); color: #111827;
  font: 700 10px/1 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  pointer-events: auto; cursor: pointer; user-select: none; touch-action: none;
  transition: background-color 160ms ease, box-shadow 160ms ease; }
.trade-marker-button[hidden] { display: none; }
.trade-marker-button[data-kind="buy"] { --trade-bg: rgba(134, 239, 172, .38); --trade-hover: rgba(74, 222, 128, .55); --trade-pressed: rgba(34, 197, 94, .72); --trade-glow: rgba(74, 222, 128, .9); border-color: rgba(134, 239, 172, .8); color: #111827; }
.trade-marker-button[data-kind="sell"] { --trade-bg: rgba(252, 165, 165, .38); --trade-hover: rgba(248, 113, 113, .55); --trade-pressed: rgba(239, 68, 68, .72); --trade-glow: rgba(248, 113, 113, .9); border-color: rgba(252, 165, 165, .8); color: #111827; }
.trade-marker-button.has-reason { box-shadow: 0 0 0 2px var(--trade-glow), 0 0 9px 2px var(--trade-glow); }
.trade-marker-button:hover { background-color: var(--trade-hover); }
.trade-marker-button:active { background-color: var(--trade-pressed); }
.trade-marker-button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
