:root {
  --bg: #0b1020;
  --bg-soft: #121833;
  --bg-card: #1a2244;
  --fg: #e6ecff;
  --fg-soft: #9aa6cc;
  --accent: #5b8cff;
  --accent-2: #ff7ac6;
  --bull: #2ecc71;
  --bear: #ff5f6d;
  --border: #2b3566;
}

* { box-sizing: border-box; }
html, body {
  margin: 0; padding: 0;
  height: 100dvh;          /* 单屏化的根 */
  overflow: hidden;        /* 整页永不滚动；滚动只在面板内部 */
  background: var(--bg); color: var(--fg);
  font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', sans-serif;
}
body { display: flex; flex-direction: column; }

.topbar {
  height: 48px; flex: 0 0 48px;
  display: grid;
  grid-template-columns: auto 1fr auto auto;
  align-items: center; gap: 16px;
  padding: 0 16px;
  background: linear-gradient(90deg, #0b1020, #131a3d);
  border-bottom: 1px solid var(--border);
  position: relative; z-index: 600;
}
.brand { display: flex; align-items: center; gap: 8px; min-width: 0; }
.brand h1 { font-size: 14px; margin: 0; letter-spacing: 0.4px; white-space: nowrap; }
.brand .dot { width: 8px; height: 8px; background: radial-gradient(circle, #ff7ac6, #5b8cff); border-radius: 50%; box-shadow: 0 0 10px #5b8cff; flex: 0 0 8px; }

.controls { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--fg-soft); }
.controls select, .controls button {
  background: var(--bg-soft); color: var(--fg); border: 1px solid var(--border);
  padding: 4px 8px; border-radius: 6px; cursor: pointer; font-size: 12px;
}
.controls .check { display: flex; align-items: center; gap: 3px; cursor: pointer; }
.controls button:hover { border-color: var(--accent); }

.layout {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  grid-template-columns: 300px minmax(0, 1fr) 340px;
  overflow: hidden;
}
.newslist { grid-column: 1; min-height: 0; }
.main-col { grid-column: 2; min-width: 0; min-height: 0; display: flex; flex-direction: column; }
.sidebar  { grid-column: 3; min-height: 0; display: flex; flex-direction: column; gap: 6px; padding: 6px 8px; overflow: hidden; }

#map { flex: 1 1 auto; min-height: 0; width: 100%; background: #0a1530; }
.potential { flex: 0 0 240px; background: var(--bg-soft); border-top: 1px solid var(--border); display: flex; flex-direction: column; min-height: 0; overflow: hidden; }

.leaflet-container { background: #0a1530 !important; }

.potential-head { padding: 10px 14px 6px 14px; border-bottom: 1px solid var(--border); }
.potential-head h2 { margin: 0 0 6px 0; font-size: 14px; display: flex; align-items: center; gap: 8px; }
.potential-head .seg { display: flex; gap: 4px; margin-bottom: 6px; }
.potential-head .seg button { flex: 1; padding: 4px 8px; font-size: 12px; background: var(--bg); color: var(--fg-soft); border: 1px solid var(--border); border-radius: 6px; cursor: pointer; }
.potential-head .seg button.active { background: rgba(255,122,198,0.18); color: var(--accent-2); border-color: var(--accent-2); }
.potential-head .potential-formula { font-size: 10.5px; color: var(--fg-soft); }
.potential-list { flex: 1; overflow-y: auto; padding: 6px 14px 10px; }

.prow { display: grid; grid-template-columns: 38px 1fr auto; gap: 10px; padding: 8px 0; border-bottom: 1px dashed rgba(91,140,255,0.12); align-items: center; }
.prow:last-child { border-bottom: none; }
.prow .rank { font-size: 13px; font-weight: 600; color: var(--fg-soft); text-align: center; font-feature-settings: 'tnum'; }
.prow .rank.top1 { color: #ffd24a; }
.prow .rank.top2 { color: #c4cdde; }
.prow .rank.top3 { color: #d49a6a; }
.prow .body { min-width: 0; }
.prow .name-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 13px; color: var(--fg); }
.prow .name-row .code { font-size: 11px; color: var(--fg-soft); font-feature-settings: 'tnum'; }
.prow .name-row .sec { font-size: 10px; padding: 1px 5px; border-radius: 99px; border: 1px solid; }
.prow .reason { font-size: 11px; color: var(--fg-soft); margin-top: 3px; line-height: 1.4; }
.prow .factors { display: flex; gap: 6px; margin-top: 4px; font-size: 10px; }
.prow .factors span { padding: 1px 5px; border-radius: 99px; border: 1px solid var(--border); color: var(--fg-soft); }
.prow .factors span.pos { color: var(--bull); border-color: rgba(46,204,113,0.4); }
.prow .factors span.neg { color: var(--bear); border-color: rgba(255,95,109,0.4); }
.prow .score-cell { display: flex; flex-direction: column; align-items: center; gap: 3px; min-width: 56px; }
.prow .score-cell .score { font-size: 20px; font-weight: 600; font-feature-settings: 'tnum'; line-height: 1; }
.prow .score-cell .score.s-hot { color: #ff7ac6; text-shadow: 0 0 8px rgba(255,122,198,0.45); }
.prow .score-cell .score.s-warm { color: #5b8cff; }
.prow .score-cell .score.s-mid { color: #c4cdde; }
.prow .score-cell .score.s-cold { color: #6b7396; }
.prow .score-cell .score-bar { width: 50px; height: 4px; border-radius: 99px; background: rgba(91,140,255,0.14); overflow: hidden; }
.prow .score-cell .score-bar > i { display: block; height: 100%; background: linear-gradient(90deg, #5b8cff, #ff7ac6); }

.prow-sector { cursor: pointer; transition: background 0.15s; border-radius: 4px; padding-left: 4px; padding-right: 4px; margin-left: -4px; margin-right: -4px; }
.prow-sector:hover { background: rgba(91,140,255,0.06); }
.prow-sector.expanded { background: rgba(255,122,198,0.06); }
.expand-hint { font-size: 10px; color: var(--fg-soft); margin-left: auto; padding: 1px 6px; border-radius: 99px; border: 1px dashed var(--border); }
.prow-sector.expanded .expand-hint { color: var(--accent-2); border-color: rgba(255,122,198,0.4); border-style: solid; }

.sector-stocks { padding: 6px 0 12px 38px; border-bottom: 1px solid var(--border); }
.ss-loading, .ss-empty { font-size: 11.5px; color: var(--fg-soft); padding: 6px 0; }
.ss-group { margin-bottom: 8px; }
.ss-head { font-size: 11px; color: var(--fg-soft); margin: 6px 0 4px 0; display: flex; align-items: center; gap: 6px; letter-spacing: 0.5px; }
.ss-head .ss-n { font-size: 10px; padding: 0 5px; border-radius: 99px; background: rgba(91,140,255,0.18); color: var(--accent); border: 1px solid rgba(91,140,255,0.3); }
.ss-list { display: flex; flex-direction: column; gap: 2px; }
.ss-row { display: grid; grid-template-columns: 1fr 56px 56px 80px; gap: 8px; padding: 4px 6px; font-size: 12px; border-radius: 4px; }
.ss-row:hover { background: rgba(91,140,255,0.06); }
.ss-row .ss-name { color: var(--fg); display: flex; align-items: baseline; gap: 6px; }
.ss-row .ss-code { font-size: 10px; color: var(--fg-soft); font-feature-settings: 'tnum'; }
.ss-row .ss-price { text-align: right; color: var(--fg); font-feature-settings: 'tnum'; }
.ss-row .ss-pct { text-align: right; font-feature-settings: 'tnum'; color: var(--fg-soft); }
.ss-row .ss-pct.pos { color: var(--bull); }
.ss-row .ss-pct.neg { color: var(--bear); }
.ss-row .ss-mcap { text-align: right; font-size: 10.5px; color: var(--fg-soft); }

.country-label {
  background: transparent !important;
  border: none !important;
  color: #c9d4ff;
  font-size: 11px;
  font-weight: 500;
  text-shadow: 0 0 4px rgba(0,0,0,0.85), 0 0 2px rgba(0,0,0,0.85);
  letter-spacing: 0.5px;
  pointer-events: none;
  white-space: nowrap;
  transform: translate(-50%, -50%);
}
.country-label > span {
  display: inline-block;
  padding: 1px 4px;
  border-radius: 3px;
  background: rgba(10,21,48,0.35);
}

.newslist { background: var(--bg-soft); border-right: 1px solid var(--border); display: flex; flex-direction: column; min-height: 0; }
.newslist-head { padding: 8px 12px; border-bottom: 1px solid var(--border); flex: 0 0 auto; }
.newslist-head h2 { margin: 0 0 6px 0; font-size: 13px; display: flex; align-items: center; gap: 8px; }
.newslist-head .count { font-size: 11px; padding: 1px 8px; border-radius: 99px; background: rgba(91,140,255,0.18); color: var(--accent); border: 1px solid rgba(91,140,255,0.35); }
.newslist-head input[type=search] { width: 100%; padding: 6px 10px; background: var(--bg); color: var(--fg); border: 1px solid var(--border); border-radius: 6px; font-size: 12px; outline: none; }
.newslist-head input[type=search]:focus { border-color: var(--accent); }
.newslist-head .seg { display: flex; gap: 4px; margin-top: 8px; }
.newslist-head .seg button { flex: 1; padding: 4px 8px; font-size: 12px; background: var(--bg); color: var(--fg-soft); border: 1px solid var(--border); border-radius: 6px; cursor: pointer; }
.newslist-head .seg button.active { background: rgba(91,140,255,0.18); color: var(--accent); border-color: var(--accent); }

.news-items { flex: 1; overflow-y: auto; padding: 4px 0; }
.news-card { padding: 10px 14px; border-bottom: 1px solid var(--border); cursor: pointer; transition: background 0.15s; }
.news-card:hover { background: rgba(91,140,255,0.08); }
.news-card.active { background: rgba(91,140,255,0.15); border-left: 2px solid var(--accent); padding-left: 12px; }
.news-card .meta { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 4px; font-size: 10.5px; }
.news-card .badge { padding: 1px 6px; border-radius: 99px; background: rgba(91,140,255,0.18); color: var(--accent); border: 1px solid rgba(91,140,255,0.3); }
.news-card .badge.bull { background: rgba(46,204,113,0.15); color: var(--bull); border-color: rgba(46,204,113,0.4); }
.news-card .badge.bear { background: rgba(255,95,109,0.15); color: var(--bear); border-color: rgba(255,95,109,0.4); }
.news-card .title { font-size: 13px; line-height: 1.45; color: var(--fg); margin-bottom: 4px; }
.news-card .summary { font-size: 11.5px; color: var(--fg-soft); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.news-card .badge.badge-future { background: rgba(255,200,80,0.14); color: #ffc850; border-color: rgba(255,200,80,0.45); }

.ipo-list { display: flex; flex-direction: column; gap: 6px; }
.ipo-row { display: block; text-decoration: none; color: var(--fg); padding: 8px 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); transition: border-color 0.15s; }
.ipo-row:hover { border-color: var(--accent-2); }
.ipo-line1 { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 4px; }
.ipo-co { font-size: 13px; }
.ipo-status { font-size: 10.5px; padding: 1px 7px; border-radius: 99px; border: 1px solid; }
.ipo-status.ipo-s-filed { color: #ffc850; border-color: rgba(255,200,80,0.5); background: rgba(255,200,80,0.12); }
.ipo-status.ipo-s-approved { color: #2ecc71; border-color: rgba(46,204,113,0.5); background: rgba(46,204,113,0.12); }
.ipo-status.ipo-s-rumor { color: #ff7ac6; border-color: rgba(255,122,198,0.5); background: rgba(255,122,198,0.10); }
.ipo-status.ipo-s-listed { color: #5b8cff; border-color: rgba(91,140,255,0.5); background: rgba(91,140,255,0.12); }
.ipo-status.ipo-s-delayed, .ipo-status.ipo-s-withdrawn { color: var(--fg-soft); border-color: var(--border); background: rgba(154,166,204,0.08); }
.ipo-mkt { font-size: 10px; padding: 1px 5px; border-radius: 99px; background: rgba(91,140,255,0.14); color: var(--accent); border: 1px solid rgba(91,140,255,0.3); }
.ipo-future { font-size: 10px; padding: 1px 5px; border-radius: 99px; background: rgba(255,200,80,0.14); color: #ffc850; border: 1px solid rgba(255,200,80,0.45); }
.ipo-line2 { font-size: 11.5px; color: var(--fg-soft); line-height: 1.45; margin-bottom: 4px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.ipo-line3 { display: flex; flex-wrap: wrap; gap: 6px; font-size: 10.5px; color: var(--fg-soft); }
.ipo-sec { padding: 1px 6px; border-radius: 99px; border: 1px solid; background: rgba(91,140,255,0.10); }
.ipo-amt { color: var(--accent-2); }
.ipo-date { color: var(--fg); }
.ipo-src { margin-left: auto; opacity: 0.7; }
.news-card .foot { display: flex; justify-content: space-between; margin-top: 6px; font-size: 10.5px; color: var(--fg-soft); }
.news-card .foot a { color: var(--accent); text-decoration: none; }
.news-empty { padding: 30px 14px; text-align: center; color: var(--fg-soft); font-size: 12px; }

/* sidebar 内：trend 顶部 + tabbar + 单一激活 pane 占满剩余高度 */
.sidebar .panel {
  background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px;
  display: flex; flex-direction: column;
  min-height: 0;
  overflow: hidden;
}
.sidebar .trend-panel { flex: 0 0 64px; }

/* tabbar：5 个 tab 横排，每个 tab 标题 + 摘要徽标两行 */
.tabbar {
  flex: 0 0 auto;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 0;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
}
.tabbar .tab {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  padding: 6px 4px;
  background: transparent; border: 0;
  border-right: 1px solid var(--border);
  color: var(--fg-soft);
  cursor: pointer; user-select: none;
  font: inherit; line-height: 1.2;
  transition: background 0.15s, color 0.15s;
  min-width: 0;
}
.tabbar .tab:last-child { border-right: 0; }
.tabbar .tab:hover { background: rgba(91,140,255,0.08); color: var(--fg); }
.tabbar .tab.active { background: rgba(91,140,255,0.15); color: var(--fg); box-shadow: inset 0 -2px 0 var(--accent); }
.tabbar .tab .tab-label { font-size: 11.5px; font-weight: 600; }
.tabbar .tab .tab-summary {
  font-size: 10px; color: var(--fg-soft);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  max-width: 100%;
  font-feature-settings: 'tnum';
  display: flex; align-items: center; gap: 3px;
}
.tabbar .tab.active .tab-summary { color: var(--fg); }

/* tab-pane：默认隐藏，激活时撑满剩余高度 */
.tab-pane {
  display: none;
  background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
}
.tab-pane.active {
  display: flex;
  flex: 1 1 0;
}
.pane-head {
  flex: 0 0 auto;
  padding: 6px 10px;
  border-bottom: 1px solid var(--border);
  background: rgba(11,16,32,0.4);
  display: flex; align-items: center; gap: 8px;
  font-size: 11px;
}
.pane-head .ts { margin-left: auto; font-size: 10.5px; color: var(--fg-soft); }
.pane-head .seg { display: flex; gap: 3px; margin-left: auto; }
.pane-head .seg button { padding: 2px 8px; font-size: 11px; background: var(--bg); color: var(--fg-soft); border: 1px solid var(--border); border-radius: 4px; cursor: pointer; }
.pane-head .seg button.active { background: rgba(91,140,255,0.18); color: var(--accent); border-color: var(--accent); }
.pane-body {
  flex: 1 1 auto; min-height: 0;
  overflow-y: auto; overflow-x: hidden;
  padding: 8px 10px;
}
.pane-body::-webkit-scrollbar { width: 6px; }
.pane-body::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.18); border-radius: 3px; }
.pane-body::-webkit-scrollbar-track { background: transparent; }

/* tab-summary 徽标 */
.tab-summary .badge-num { padding: 0 5px; border-radius: 99px; border: 1px solid var(--border); background: rgba(91,140,255,0.08); color: var(--fg); font-weight: 600; font-size: 9.5px; }
.tab-summary .badge-num.bull { color: var(--bull); border-color: rgba(46,204,113,0.4); background: rgba(46,204,113,0.1); }
.tab-summary .badge-num.bear { color: var(--bear); border-color: rgba(255,95,109,0.4); background: rgba(255,95,109,0.1); }
.tab-summary .badge-num.warn { color: #ffc850; border-color: rgba(255,200,80,0.4); background: rgba(255,200,80,0.1); }
.tab-summary .sep { color: var(--border); margin: 0 1px; }
.ai-tag { font-size: 10px; padding: 2px 6px; border-radius: 99px; background: rgba(255,122,198,0.15); color: var(--accent-2); border: 1px solid rgba(255,122,198,0.4); }

.signals { padding-right: 4px; }
.signals .item { padding: 8px 0; border-bottom: 1px dashed var(--border); }
.signals .item:last-child { border-bottom: none; }
.signals .t { font-size: 12.5px; color: var(--fg); margin: 4px 0 3px; font-weight: 600; line-height: 1.4; }
.signals .s { font-size: 11.5px; color: var(--fg-soft); line-height: 1.45; }
.signals::-webkit-scrollbar { width: 6px; }
.signals::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.12); border-radius: 3px; }
.sg-tags { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.sg-bias { font-size: 10px; padding: 1px 6px; border-radius: 99px; border: 1px solid; font-weight: 600; }
.sg-bias.bull { color: #2ecc71; border-color: rgba(46,204,113,0.55); background: rgba(46,204,113,0.16); }
.sg-bias.bear { color: #ff5f6d; border-color: rgba(255,95,109,0.55); background: rgba(255,95,109,0.16); }
.sg-bias.neu  { color: #c4cee8; border-color: rgba(154,166,204,0.45); background: rgba(154,166,204,0.10); }
.sg-tag { font-size: 10px; padding: 1px 6px; border-radius: 99px; border: 1px solid; }
.sg-strength { margin-left: auto; font-size: 10px; color: var(--accent); }

/* 地图 marker：行业彩色徽标 + 文字 */
.m-icon { background: transparent !important; border: none !important; }
.m-pin {
  position: relative;
  display: flex; align-items: center; gap: 5px;
  white-space: nowrap;
}
.m-pin .m-dot {
  width: var(--sz); height: var(--sz);
  background: var(--c);
  border-radius: 50%;
  box-shadow: 0 0 0 2px rgba(11,16,32,0.85), 0 0 10px var(--c);
  display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 10px; font-weight: 700;
  flex-shrink: 0;
}
.m-pin .m-lbl {
  font-size: 10.5px;
  color: #fff;
  background: rgba(11,16,32,0.78);
  border: 1px solid var(--c);
  padding: 1px 5px;
  border-radius: 4px;
  text-shadow: 0 0 4px rgba(0,0,0,0.9);
  letter-spacing: 0.2px;
}
.m-pin.bull .m-dot { box-shadow: 0 0 0 2px rgba(46,204,113,0.9), 0 0 12px var(--c); }
.m-pin.bear .m-dot { box-shadow: 0 0 0 2px rgba(255,95,109,0.9), 0 0 12px var(--c); }
.m-pin.neu  .m-dot { box-shadow: 0 0 0 2px rgba(154,166,204,0.7), 0 0 10px var(--c); }

/* 资金流向 / 股票异动 列表 */
.pane-head .pill { font-size: 10px; padding: 1px 6px; border-radius: 99px; background: rgba(255,122,198,0.18); color: var(--accent-2); border: 1px solid rgba(255,122,198,0.35); }
.market-list { padding-right: 4px; }
.market-list::-webkit-scrollbar { width: 6px; }
.market-list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.12); border-radius: 3px; }
.market-row {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 8px;
  padding: 6px 4px;
  border-bottom: 1px dashed var(--border);
  font-size: 12px;
  align-items: center;
}
.market-row:last-child { border-bottom: none; }
.market-row .name { color: var(--fg); font-weight: 500; }
.market-row .name .code { color: var(--fg-soft); font-size: 10.5px; margin-left: 4px; font-feature-settings: 'tnum'; }
.market-row .name .sec { display: inline-block; font-size: 10px; padding: 0 5px; border-radius: 99px; border: 1px solid; margin-left: 4px; vertical-align: 1px; }
.market-row .pct  { font-feature-settings: 'tnum'; font-size: 12px; min-width: 56px; text-align: right; font-weight: 600; }
.market-row .pct.up { color: var(--bull); }
.market-row .pct.dn { color: var(--bear); }
.market-row .flow { font-feature-settings: 'tnum'; font-size: 11px; min-width: 60px; text-align: right; color: var(--fg-soft); }
.market-row .flow.in { color: var(--bull); }
.market-row .flow.out { color: var(--bear); }
.market-empty { padding: 8px; font-size: 12px; color: var(--fg-soft); text-align: center; }

#sectorBars .row { display: grid; grid-template-columns: 100px 1fr 28px; gap: 6px; align-items: center; margin: 4px 0; font-size: 12px; }
#sectorBars .row .lbl { color: var(--fg-soft); }
#sectorBars .row .bar { height: 6px; background: var(--bg-soft); border-radius: 99px; overflow: hidden; }
#sectorBars .row .bar > i { display: block; height: 100%; background: linear-gradient(90deg, var(--accent), var(--accent-2)); }
#sectorBars .row .n { text-align: right; color: var(--fg); }

.sgroup { margin-bottom: 14px; }
.sgroup:last-child { margin-bottom: 0; }
.sgroup-head { display: flex; justify-content: space-between; align-items: baseline; padding: 4px 0 6px 0; border-bottom: 1px solid var(--border); margin-bottom: 4px; }
.sgroup-head .g-title { font-size: 11.5px; color: var(--accent); font-weight: 600; letter-spacing: 0.5px; }
.sgroup-head .g-count { font-size: 10.5px; color: var(--fg-soft); }

.srow { padding: 7px 6px; border-radius: 6px; transition: background 0.15s; }
.srow.clickable { cursor: pointer; }
.srow.clickable:hover { background: rgba(91,140,255,0.10); }
.srow.empty { opacity: 0.42; padding: 4px 6px; }
.srow.empty .srow-head { margin-bottom: 0; }
.srow.empty .lbl { font-size: 11.5px; }

.grade.empty { color: #6b7396; border-color: rgba(107,115,150,0.4); background: rgba(107,115,150,0.10); }
.srow-head { display: flex; align-items: center; gap: 8px; margin-bottom: 5px; font-size: 12px; }
.srow-head .lbl { flex: 1; color: var(--fg); font-weight: 500; }
.srow-head .n { color: var(--fg-soft); font-size: 11px; min-width: 22px; text-align: right; }
.grade { font-size: 10.5px; padding: 1px 7px; border-radius: 99px; border: 1px solid; }
.grade.bull-2 { color: #2ecc71; border-color: rgba(46,204,113,0.55); background: rgba(46,204,113,0.18); }
.grade.bull-1 { color: #87e3a9; border-color: rgba(46,204,113,0.4); background: rgba(46,204,113,0.10); }
.grade.neutral { color: #9aa6cc; border-color: rgba(154,166,204,0.4); background: rgba(154,166,204,0.10); }
.grade.bear-1 { color: #ffa9b1; border-color: rgba(255,95,109,0.4); background: rgba(255,95,109,0.10); }
.grade.bear-2 { color: #ff5f6d; border-color: rgba(255,95,109,0.55); background: rgba(255,95,109,0.18); }

.sbar { display: flex; height: 8px; background: var(--bg-soft); border-radius: 99px; overflow: hidden; }
.sbar > i { display: block; height: 100%; }
.sbar > i.bull { background: linear-gradient(90deg, #2ecc71, #5dd99b); }
.sbar > i.neu  { background: #4a5680; }
.sbar > i.bear { background: linear-gradient(90deg, #ff7a85, #ff5f6d); }

.srow-pct { display: flex; align-items: center; gap: 10px; margin-top: 5px; font-size: 11px; color: var(--fg-soft); }
.srow-pct .pct.bull { color: #2ecc71; }
.srow-pct .pct.neu  { color: #9aa6cc; }
.srow-pct .pct.bear { color: #ff5f6d; }
.srow-pct .avg { margin-left: auto; color: var(--fg); font-feature-settings: 'tnum'; }

.disclaimer { flex: 0 0 24px; height: 24px; background: rgba(11,16,32,0.92); border-top: 1px solid var(--border); color: var(--fg-soft); font-size: 10.5px; display: flex; align-items: center; justify-content: center; padding: 0 12px; text-align: center; }
.disclaimer b { color: var(--accent-2); }

.popup-card { font-size: 12px; line-height: 1.55; max-width: 300px; }
.popup-card .ph { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; flex-wrap: wrap; }
.popup-card .ph .badge { font-size: 10px; padding: 1px 6px; border-radius: 99px; background: rgba(91,140,255,0.18); color: var(--accent); border: 1px solid rgba(91,140,255,0.35); }
.popup-card .bull { color: var(--bull); }
.popup-card .bear { color: var(--bear); }
.popup-card a { color: var(--accent); text-decoration: none; }
.popup-card .ai-note { margin-top: 6px; font-size: 10.5px; color: var(--fg-soft); }

/* ========== V2 新增 · 视图切换 ========== */
.views { display: flex; gap: 4px; padding: 3px; background: rgba(11,16,32,0.5); border: 1px solid var(--border); border-radius: 99px; }
.views button { padding: 4px 14px; font-size: 12px; background: transparent; color: var(--fg-soft); border: none; border-radius: 99px; cursor: pointer; transition: all 0.15s; font-weight: 500; }
.views button:hover { color: var(--fg); }
.views button.active { background: linear-gradient(90deg, rgba(91,140,255,0.3), rgba(255,122,198,0.3)); color: var(--fg); box-shadow: 0 0 8px rgba(91,140,255,0.25); }

/* ========== KPI 紧凑条（嵌在 topbar 中央） ========== */
.kpi-strip {
  display: flex; align-items: center; gap: 14px;
  padding: 4px 14px;
  background: rgba(11,16,32,0.5);
  border: 1px solid var(--border);
  border-radius: 99px;
  height: 34px;
  justify-self: center;
  font-feature-settings: 'tnum';
}
.kpi-mini { display: flex; align-items: baseline; gap: 5px; white-space: nowrap; }
.kpi-mini .km-label { font-size: 10.5px; color: var(--fg-soft); letter-spacing: 0.3px; }
.kpi-mini .km-num { font-size: 16px; font-weight: 700; color: var(--fg); line-height: 1; }
.kpi-mini .km-num.up { color: var(--bull); }
.kpi-mini .km-num.down { color: var(--bear); }
.kpi-mini .km-num.warn { color: #ffc850; }
.kpi-mini .km-sub { font-size: 10.5px; color: var(--fg-soft); }
.kpi-mini .km-sub .pill-mini { font-size: 9.5px; padding: 0 5px; border-radius: 99px; border: 1px solid var(--border); margin-left: 3px; }
.kpi-mini .km-sub .pill-mini.bull { color: var(--bull); border-color: rgba(46,204,113,0.4); }
.kpi-mini .km-sub .pill-mini.bear { color: var(--bear); border-color: rgba(255,95,109,0.4); }
.kpi-divider { width: 1px; height: 18px; background: var(--border); }

/* ========== 7 日脉搏条（sidebar 顶部紧凑形态） ========== */
.trend-panel { padding: 4px 8px; }
.trend-head { display: flex; justify-content: space-between; align-items: center; padding: 0 2px 2px; }
.trend-title { font-size: 10.5px; color: var(--fg-soft); letter-spacing: 0.3px; }
.trend-legend { font-size: 9.5px; color: var(--fg-soft); }
.trend-canvas { display: flex; align-items: stretch; gap: 4px; flex: 1; min-height: 0; }
.trend-day {
  flex: 1; display: grid; grid-template-rows: 10px 1fr 10px;
  gap: 0; cursor: default; position: relative;
  border-radius: 2px;
}
.trend-day:hover { background: rgba(91,140,255,0.1); }
.trend-day .marks-top { display: flex; justify-content: center; align-items: flex-end; font-size: 8px; line-height: 1; color: #ffd24a; }
.trend-day .bar-cell { display: flex; align-items: flex-end; justify-content: center; padding: 0 1px; }
.trend-day .bar { width: 100%; min-height: 2px; border-radius: 2px 2px 0 0; transition: filter 0.15s; }
.trend-day:hover .bar { filter: brightness(1.3); }
.trend-day .marks-bot { display: flex; justify-content: center; align-items: flex-start; font-size: 8px; line-height: 1; color: var(--accent-2); }
.trend-day .label { display: none; }
.trend-day.today { box-shadow: inset 0 -2px 0 var(--accent); }
.trend-day .tip {
  position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
  background: var(--bg); border: 1px solid var(--border); border-radius: 6px;
  padding: 6px 10px; font-size: 11px; white-space: nowrap; color: var(--fg);
  pointer-events: none; opacity: 0; transition: opacity 0.15s; z-index: 700;
  box-shadow: 0 4px 12px rgba(0,0,0,0.4); margin-top: 4px;
}
.trend-day:hover .tip { opacity: 1; }

/* ========== 信号面板强信号高亮 ========== */
.signals .item { transition: all 0.15s; border-left: 3px solid transparent; padding-left: 8px; }
.signals .item.strong {
  border-left-color: #ffd24a;
  background: linear-gradient(90deg, rgba(255,210,74,0.08), transparent 60%);
  box-shadow: 0 0 0 1px rgba(255,210,74,0.25), inset 0 0 16px rgba(255,210,74,0.06);
  border-radius: 6px;
}
.signals .item .sg-bias.bull::before { content: '↑ '; }
.signals .item .sg-bias.bear::before { content: '↓ '; }
.signals .item .sg-bias.neu::before { content: '→ '; }

/* ========== V2 新增 · 视图切换的面板可见性 ========== */
/* ========== 视图切换 ========== */
/* 极简视图：只留地图 + 信号面板 + 趋势 */
body[data-view="minimal"] .newslist,
body[data-view="minimal"] .tab[data-tab="flows"],
body[data-view="minimal"] .tab[data-tab="movers"],
body[data-view="minimal"] .tab[data-tab="ipos"],
body[data-view="minimal"] .tab[data-tab="industry"],
body[data-view="minimal"] .tab-pane[data-pane="flows"],
body[data-view="minimal"] .tab-pane[data-pane="movers"],
body[data-view="minimal"] .tab-pane[data-pane="ipos"],
body[data-view="minimal"] .tab-pane[data-pane="industry"] {
  display: none !important;
}
body[data-view="minimal"] .tabbar { grid-template-columns: 1fr; }
body[data-view="minimal"] .layout {
  grid-template-columns: minmax(0, 1fr) 340px;
}
body[data-view="minimal"] .newslist { display: none; }
body[data-view="minimal"] .main-col { grid-column: 1; }
body[data-view="minimal"] .sidebar { grid-column: 2; }
body[data-view="minimal"] .main-col .potential { display: none; }

/* 投资视图：隐藏产业链 tab */
body[data-view="investor"] .tab[data-tab="industry"],
body[data-view="investor"] .tab-pane[data-pane="industry"] { display: none !important; }
body[data-view="investor"] .tabbar { grid-template-columns: repeat(4, 1fr); }

/* 产业视图：地图缩小为浮窗，潜力榜放大占主区，隐藏资金/异动 tab */
body[data-view="industry"] .tab[data-tab="flows"],
body[data-view="industry"] .tab[data-tab="movers"],
body[data-view="industry"] .tab-pane[data-pane="flows"],
body[data-view="industry"] .tab-pane[data-pane="movers"] { display: none !important; }
body[data-view="industry"] .tabbar { grid-template-columns: repeat(3, 1fr); }
body[data-view="industry"] .main-col { position: relative; }
body[data-view="industry"] #map {
  position: absolute; top: 8px; right: 8px;
  width: 220px; height: 140px;
  flex: none;
  z-index: 500; border-radius: 8px;
  border: 1px solid var(--accent);
  box-shadow: 0 6px 20px rgba(0,0,0,0.5);
}
body[data-view="industry"] .potential {
  flex: 1 1 auto;
  border-top: none;
}

/* ========== 响应式：狭窄屏 ========== */
@media (max-width: 1280px) {
  .layout { grid-template-columns: 260px minmax(0, 1fr) 300px; }
  .kpi-strip { gap: 10px; padding: 4px 10px; }
  .kpi-mini .km-num { font-size: 14px; }
}
@media (max-width: 1024px) {
  .controls label:not(.check) { display: none; }
  .views button { padding: 4px 10px; font-size: 11px; }
  .kpi-mini .km-sub { display: none; }
}
@media (max-width: 900px) {
  body::before {
    content: '建议在 ≥1100px 宽度的屏幕查看，当前布局已被压缩';
    position: fixed; top: 8px; left: 50%; transform: translateX(-50%);
    background: rgba(255,200,80,0.18); color: #ffc850;
    border: 1px solid rgba(255,200,80,0.5); border-radius: 99px;
    padding: 4px 12px; font-size: 11px; z-index: 9999;
  }
}

/* ========== 今日简报横条（topbar 下方一行） ========== */
.brief-bar {
  display: flex; align-items: center; gap: 12px;
  padding: 7px 14px;
  background: linear-gradient(90deg, rgba(91,140,255,0.10), rgba(255,209,102,0.06));
  border-bottom: 1px solid var(--border);
  cursor: pointer;
  font-size: 12px;
  color: var(--fg);
  flex: 0 0 auto;
  outline: none;
  transition: background 0.18s;
}
.brief-bar:hover, .brief-bar:focus { background: linear-gradient(90deg, rgba(91,140,255,0.18), rgba(255,209,102,0.10)); }
.brief-bar .bb-tag {
  font-size: 10px; letter-spacing: 0.5px; color: var(--accent-2);
  background: rgba(255,209,102,0.12);
  border: 1px solid rgba(255,209,102,0.35);
  padding: 1px 7px; border-radius: 99px; flex: 0 0 auto;
}
.brief-bar .bb-headline { font-weight: 600; color: var(--fg); flex: 0 0 auto; }
.brief-bar .bb-oneliner { color: var(--fg-soft); flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.brief-bar .bb-meta { display: flex; align-items: center; gap: 6px; flex: 0 0 auto; }
.brief-bar .bb-badge {
  font-size: 10.5px; padding: 1px 7px; border-radius: 99px;
  border: 1px solid var(--border); color: var(--fg-soft); background: rgba(255,255,255,0.04);
}
.brief-bar .bb-badge.bb-op { color: var(--bull); border-color: rgba(46,204,113,0.35); }
.brief-bar .bb-badge.bb-rk { color: var(--bear); border-color: rgba(255,95,109,0.35); }
.brief-bar .bb-date { font-size: 10.5px; color: var(--fg-soft); margin-left: 4px; font-feature-settings: 'tnum'; }
.brief-bar .bb-caret { color: var(--fg-soft); margin-left: 4px; font-size: 14px; }

.brief-modal {
  position: fixed; inset: 0; background: rgba(4,8,18,0.72);
  display: flex; align-items: flex-start; justify-content: center;
  z-index: 8000; padding: 4vh 16px; overflow-y: auto;
  backdrop-filter: blur(2px);
}
.brief-modal[hidden] { display: none; }
.brief-modal .bm-card {
  width: min(960px, 100%); background: var(--bg);
  border: 1px solid var(--border); border-radius: 14px;
  box-shadow: 0 24px 60px rgba(0,0,0,0.55);
  display: flex; flex-direction: column; max-height: 92vh;
}
.brief-modal .bm-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  padding: 18px 22px 12px; border-bottom: 1px solid var(--border);
}
.brief-modal .bm-head h2 { margin: 0; font-size: 18px; }
.brief-modal .bm-sub { color: var(--fg-soft); font-size: 11.5px; margin-top: 4px; font-feature-settings: 'tnum'; }
.brief-modal .bm-close {
  background: transparent; border: 1px solid var(--border); color: var(--fg);
  width: 30px; height: 30px; border-radius: 8px; cursor: pointer; font-size: 18px; line-height: 1;
}
.brief-modal .bm-close:hover { background: rgba(255,255,255,0.06); }
.brief-modal .bm-body { padding: 12px 22px 18px; overflow-y: auto; }
.brief-modal .bm-sect { margin: 14px 0; }
.brief-modal .bm-sect h3 { margin: 0 0 8px; font-size: 12px; color: var(--fg-soft); letter-spacing: 0.4px; text-transform: uppercase; font-weight: 600; }
.brief-modal .bm-oneliner { font-size: 14px; line-height: 1.55; color: var(--fg); margin: 0; }
.brief-modal .bm-sectors { display: grid; gap: 6px; }
.brief-modal .bm-sectors .row { display: grid; grid-template-columns: 130px 56px 1fr; gap: 10px; align-items: baseline; padding: 6px 8px; border: 1px solid var(--border); border-radius: 8px; background: rgba(255,255,255,0.02); }
.brief-modal .bm-sectors .row .sec { font-weight: 600; }
.brief-modal .bm-sectors .row .tone { font-size: 11px; color: var(--fg-soft); padding: 1px 7px; border-radius: 99px; border: 1px solid var(--border); text-align: center; }
.brief-modal .bm-sectors .row .tone.up { color: var(--bull); border-color: rgba(46,204,113,0.4); }
.brief-modal .bm-sectors .row .tone.down { color: var(--bear); border-color: rgba(255,95,109,0.4); }
.brief-modal .bm-sectors .row .cmt { color: var(--fg-soft); font-size: 12.5px; line-height: 1.45; }
.brief-modal .bm-opps { display: grid; gap: 8px; }
.brief-modal .bm-opps .opp { padding: 10px 12px; border: 1px solid var(--border); border-left: 3px solid var(--bull); border-radius: 8px; background: rgba(46,204,113,0.06); }
.brief-modal .bm-opps .opp .h { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.brief-modal .bm-opps .opp .h .ttl { font-weight: 600; }
.brief-modal .bm-opps .opp .h .horizon { font-size: 10.5px; color: var(--fg-soft); padding: 1px 6px; border-radius: 99px; border: 1px solid var(--border); }
.brief-modal .bm-opps .opp .h .conf { font-size: 10.5px; color: var(--fg-soft); margin-left: auto; font-feature-settings: 'tnum'; }
.brief-modal .bm-opps .opp .thesis { font-size: 12.5px; color: var(--fg-soft); line-height: 1.5; }
.brief-modal .bm-opps .opp .tickers { margin-top: 6px; display: flex; gap: 4px; flex-wrap: wrap; }
.brief-modal .bm-opps .opp .tickers .tk { font-size: 11px; padding: 1px 7px; border-radius: 99px; border: 1px solid var(--border); color: var(--fg); background: rgba(91,140,255,0.08); }
.brief-modal .bm-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.brief-modal .bm-risks .risk { padding: 8px 10px; border: 1px solid var(--border); border-left: 3px solid var(--bear); border-radius: 6px; margin-bottom: 6px; background: rgba(255,95,109,0.05); font-size: 12.5px; }
.brief-modal .bm-risks .risk b { font-weight: 600; }
.brief-modal .bm-watch { display: flex; flex-wrap: wrap; gap: 6px; }
.brief-modal .bm-watch .wt { font-size: 12px; padding: 3px 9px; border: 1px solid var(--border); border-radius: 99px; color: var(--fg); background: rgba(255,255,255,0.03); }
.brief-modal .bm-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border); }
.brief-modal .bm-refresh { background: transparent; border: 1px solid var(--border); color: var(--fg); padding: 6px 14px; border-radius: 8px; cursor: pointer; font-size: 12px; }
.brief-modal .bm-refresh:hover { background: rgba(91,140,255,0.12); }
.brief-modal .bm-disc { font-size: 10.5px; color: var(--fg-soft); flex: 1 1 auto; text-align: right; }

@media (max-width: 900px) {
  .brief-modal .bm-cols { grid-template-columns: 1fr; }
  .brief-bar .bb-oneliner { display: none; }
}

/* ========== 论文 tab + 产业链论文依赖区 ========== */
.paper-list { display: flex; flex-direction: column; gap: 6px; padding: 6px 4px; }
.paper-list .paper-card {
  padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: rgba(255,255,255,0.02);
}
.paper-list .paper-card .pmeta { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 4px; font-size: 11px; }
.paper-list .paper-card .pmeta .org { font-weight: 600; color: var(--accent-2); }
.paper-list .paper-card .pmeta .city { color: var(--fg-soft); }
.paper-list .paper-card .pmeta .cat { font-size: 10.5px; padding: 0 6px; border: 1px solid var(--border); border-radius: 99px; color: var(--fg-soft); }
.paper-list .paper-card .pmeta .pub { color: var(--fg-soft); margin-left: auto; font-feature-settings: 'tnum'; }
.paper-list .paper-card .ttl { font-size: 12.5px; line-height: 1.4; color: var(--fg); margin-bottom: 4px; }
.paper-list .paper-card .ttl a { color: var(--fg); text-decoration: none; }
.paper-list .paper-card .ttl a:hover { color: var(--accent); text-decoration: underline; }
.paper-list .paper-card .deps { display: flex; flex-wrap: wrap; gap: 4px; }
.paper-list .paper-card .deps .dep { font-size: 10.5px; padding: 1px 7px; border-radius: 99px; border: 1px solid var(--border); }
.paper-list .paper-card .deps .dep.cn { background: rgba(255,95,109,0.10); border-color: rgba(255,95,109,0.4); color: #ff8a8a; }
.paper-list .paper-card .deps .dep.us { background: rgba(91,140,255,0.10); border-color: rgba(91,140,255,0.4); color: #9bb6ff; }
.paper-list .paper-card .deps .dep.ds { color: var(--fg-soft); }
.paper-list .paper-card .deps .dep.fw { color: #ffd24a; border-color: rgba(255,210,74,0.3); }
.paper-list .paper-card .summ { font-size: 11.5px; color: var(--fg-soft); line-height: 1.45; margin-top: 4px; }
.paper-empty { color: var(--fg-soft); padding: 12px; text-align: center; font-size: 12px; }

.paper-deps { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); }
.paper-deps .pd-title { font-size: 11.5px; color: var(--fg-soft); margin: 0 0 6px; letter-spacing: 0.3px; }
.paper-deps .pd-row { display: grid; grid-template-columns: 80px 1fr 30px; gap: 6px; align-items: center; margin: 3px 0; font-size: 11.5px; }
.paper-deps .pd-row .pd-name { color: var(--fg); }
.paper-deps .pd-row .pd-name.cn { color: #ff8a8a; }
.paper-deps .pd-row .pd-name.us { color: #9bb6ff; }
.paper-deps .pd-row .pd-bar { height: 5px; background: var(--bg-soft); border-radius: 99px; overflow: hidden; }
.paper-deps .pd-row .pd-bar > i { display: block; height: 100%; background: var(--accent); }
.paper-deps .pd-row .pd-bar > i.cn { background: var(--bear); }
.paper-deps .pd-row .pd-bar > i.us { background: var(--accent); }
.paper-deps .pd-row .pd-n { text-align: right; color: var(--fg-soft); font-feature-settings: 'tnum'; }
