/* ============ 设计令牌 ============ */
:root{
  --bg:#0e1116;
  --bg-elev:#151a22;
  --bg-elev-2:#1b212b;
  --line:#252d3a;
  --line-soft:#1e2530;
  --txt:#e6ebf2;
  --txt-2:#9aa7b8;
  --txt-3:#6b7889;
  --accent:#4c8dff;
  --accent-soft:rgba(76,141,255,.14);
  /* A 股习惯：涨红跌绿 */
  --up:#f2495c;
  --down:#2fbf71;
  --flat:#8b97a8;
  --warn:#f0a92e;
  --radius:10px;
  --radius-sm:6px;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--txt);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",sans-serif;
  font-size:13.5px;line-height:1.55;-webkit-font-smoothing:antialiased;
  overflow-anchor:none;   /* 禁用浏览器滚动锚定：与 load 的手动锚点恢复打架（2026-10-26） */
}
a{color:inherit;text-decoration:none}

.macro-sentiment{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;padding:10px 14px;margin:0 0 12px;background:var(--bg-elev-2);border:1px solid var(--line);border-radius:var(--radius)}
.macro-open{cursor:pointer}
.macro-open:hover{filter:brightness(1.15)}

/* ---------- 消息面详情 Modal（复用 .modal-mask / .modal 容器） ---------- */
.macro-detail-head{display:flex;justify-content:space-between;align-items:center;margin:0 0 12px}
.macro-detail-head h3{margin:0;font-size:15px}
.macro-detail-close{background:var(--bg-elev-2);border:1px solid var(--line);color:var(--txt-3);font-size:13px;cursor:pointer;line-height:1;padding:4px 10px;border-radius:var(--radius-sm)}
.macro-detail-close:hover{background:var(--bg-elev);color:var(--txt)}
.macro-summary{font-size:13px;color:var(--txt-2);margin-bottom:10px}
.macro-event{font-size:12.5px;color:var(--txt-2);margin-bottom:10px}
.macro-sectors,.macro-news{margin-top:10px}
.macro-seasonal{margin-top:10px;padding-top:10px;border-top:1px solid var(--line-soft)}
.macro-seasonal .ms-title{color:var(--warn)}
.seas-stats{font-size:12px;color:var(--txt-2);line-height:1.6}
.seas-note{margin-top:4px;font-size:12.5px;color:var(--txt-2);line-height:1.5}
.seas-advice{margin-top:4px;font-size:12.5px;color:var(--txt);font-weight:600}
.ms-title{font-size:12px;font-weight:600;color:var(--txt-3);margin-bottom:6px}
.lp-details{margin-bottom:10px}
.lp-details summary{font-size:12px;font-weight:600;color:var(--txt-3);cursor:pointer;padding:6px 8px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg-elev-2);user-select:none}
.lp-details summary:hover{color:var(--txt-2,#c9d2de)}
.lp-details[open] summary{margin-bottom:6px}
/* 展开时仅表体滚动，summary 标题条恒定可见 */
.lp-details[open] .lp-scroll{max-height:32vh;overflow-y:auto}
/* 涨停板池弹窗：标题与底部提示固定，仅列表区域滚动（负 margin 抵消 .modal 的 padding） */
.lp-wrap{display:flex;flex-direction:column;max-height:calc(86vh - 40px);margin:-18px -20px -14px;padding:18px 20px 14px;box-sizing:border-box}
.lp-wrap .macro-detail-head,.lp-wrap > .hint{flex-shrink:0}
.lp-wrap > .macro-summary,.lp-wrap > .macro-event,.lp-wrap > .alert,.lp-wrap > .macro-sectors{flex-shrink:0}
.lp-wrap .lp-body{flex:1 1 auto;overflow-y:auto;min-height:0;padding-right:4px}
.ms-chips{display:flex;flex-wrap:wrap;gap:6px}
.ms-chip{font-size:11px;padding:1px 8px;border-radius:9px;border:1px solid transparent}
.ms-chip.up{color:var(--up);border-color:rgba(242,73,92,.4)}
.ms-chip.down{color:var(--down);border-color:rgba(47,191,113,.4)}
.news-item{border-top:1px solid var(--line-soft);padding:9px 0}
.ni-head{display:flex;justify-content:space-between;font-size:11px;font-variant-numeric:tabular-nums}
.ni-score.up{color:var(--up);font-weight:600}
.ni-score.down{color:var(--down);font-weight:600}
.ni-title{margin-top:3px;font-size:13px;color:var(--txt)}
.ni-sum{margin-top:3px;font-size:12px;color:var(--txt-2);line-height:1.5}
.macro-sentiment .hint{width:100%;margin:0}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}

.app{display:flex;height:100vh;overflow:hidden}

/* ============ 侧栏 ============ */
.sidebar{
  width:214px;flex-shrink:0;background:var(--bg-elev);
  border-right:1px solid var(--line);display:flex;flex-direction:column;padding:16px 12px;
}
.brand{display:flex;gap:10px;align-items:center;padding:4px 6px 18px}
.brand-mark{
  width:32px;height:32px;border-radius:8px;flex-shrink:0;
  background:linear-gradient(135deg,#4c8dff,#7b5cff);
  display:grid;place-items:center;font-weight:700;font-size:12px;letter-spacing:.5px;
}
.brand-text{display:flex;flex-direction:column;line-height:1.3;min-width:0}
.brand-text strong{font-size:13px}

.nav{display:flex;flex-direction:column;gap:2px;flex:1}
.nav-item{
  display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:var(--radius-sm);
  color:var(--txt-2);cursor:pointer;user-select:none;transition:.15s;font-size:13px;
}
.nav-item:hover{background:var(--bg-elev-2);color:var(--txt)}
.nav-item.active{background:var(--accent-soft);color:#fff;font-weight:600}
.ni{font-size:14px;width:16px;text-align:center}

.sidebar-foot{padding:10px 6px 0;border-top:1px solid var(--line-soft)}
.token-chip{
  display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--txt-2);
  background:var(--bg-elev-2);padding:6px 9px;border-radius:var(--radius-sm);
}
.dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.dot-on{background:var(--down);box-shadow:0 0 0 3px rgba(47,191,113,.15)}
.dot-off{background:var(--warn);box-shadow:0 0 0 3px rgba(240,169,46,.15)}
.ds-health{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--txt-2);
  background:var(--bg-elev-2);padding:6px 9px;border-radius:var(--radius-sm);margin-top:6px;
}
.ds-src{display:inline-flex;align-items:center;gap:5px;cursor:default}
.disclaimer{font-size:10.5px;color:var(--txt-3);margin:10px 2px 0;line-height:1.5}

/* ============ 主区 ============ */
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{
  height:44px;flex-shrink:0;border-bottom:1px solid var(--line);background:var(--bg-elev);
  display:flex;align-items:center;padding:0 12px;gap:8px;
}
.index-strip{display:flex;gap:16px;overflow-x:auto;flex:1;scrollbar-width:none}
.index-strip::-webkit-scrollbar{display:none}
.idx{display:flex;align-items:baseline;gap:6px;white-space:nowrap;font-size:12px}
.idx b{font-weight:500;color:var(--txt-2)}
.idx .v{font-family:var(--mono);font-weight:600}
.idx .c{font-family:var(--mono);font-size:11.5px}

.view{flex:1;overflow-y:auto;padding:18px 20px 40px}

/* ============ 通用组件 ============ */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:16px;flex-wrap:wrap}
.page-head h1{font-size:18px;margin:0 0 3px}
.page-head p{margin:0;color:var(--txt-3);font-size:12px}
/* 数据状态块：第一行=市场状态+刷新时间+交易日，其下两行=两个独立数据维度 */
.status-box{margin-top:7px;display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--txt-3);font-variant-numeric:tabular-nums}
.status-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.status-row .src-badge{font-size:12px}   /* 徽标与同行文字统一 12px（2026-10-23 用户反馈字号不齐） */
.status-head{font-size:12px}
.status-text{color:var(--txt-3)}
.status-text b{color:var(--txt-2);font-weight:600}
.dim-label{flex:0 0 auto;min-width:56px;color:var(--txt-3);font-weight:600}
.dim-extra{color:var(--txt-3)}
/* 数据来源徽标：盘中实时（绿·呼吸）/ 收盘数据（灰·静态）/ 等待态（琥珀） */
/* ═══ src-badge 语义分组（2026-10-23 全局治理）═══
 * ① 涨跌类（A 股语义，只用于市场方向）：is-bull=红 / is-bear=绿 / .up/.down
 * ② 信息类（中性状态）：is-info=蓝（交易时段、盘中实时）
 * ③ 系统类（数据源健康）：is-live=绿脉冲（正常）/ is-err=红（故障）
 * ④ 过渡类：is-wait=黄（进行中/待确认）/ is-close=灰（结束/收市）
 * 全局字号统一 12px（与正文一致），🔴 红绿只表达涨跌，状态信息走蓝黄灰。 */
.src-badge{display:inline-flex;align-items:center;padding:1px 7px;border-radius:10px;font-size:12px;font-weight:600;line-height:1.6;border:1px solid transparent}
.src-badge.is-live{color:#2fbf71;background:rgba(47,191,113,.12);border-color:rgba(47,191,113,.35);animation:srcPulse 2s ease-in-out infinite}
.src-badge.is-close{color:var(--txt-3);background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.12)}
.src-badge.is-wait{color:#f0a92e;background:rgba(240,169,46,.12);border-color:rgba(240,169,46,.35)}
.src-badge.is-err{color:#f2495c;background:rgba(242,73,92,.12);border-color:rgba(242,73,92,.35)}
.src-badge.is-bull{color:#f2495c;background:rgba(242,73,92,.12);border-color:rgba(242,73,92,.35)}
.src-badge.is-bear{color:#2fbf71;background:rgba(47,191,113,.12);border-color:rgba(47,191,113,.35)}
/* 中性状态信息（交易时段「连续竞价/集合竞价」、盘中实时等）——蓝色，🔴 不占红绿 */
.src-badge.is-info{color:#378add;background:rgba(55,138,221,.12);border-color:rgba(55,138,221,.35)}
@keyframes srcPulse{0%,100%{opacity:1}50%{opacity:.55}}
@media (prefers-reduced-motion:reduce){.src-badge.is-live{animation:none}}

.card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-bottom:14px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.card-head h2{font-size:14px;margin:0;font-weight:600}
.card-head .sub{font-size:11.5px;color:var(--txt-3)}

/* 首页区块分组（板块分析 / 板块明细折叠） */
.block{margin-bottom:14px}
.block-head{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.block-head h2{font-size:14px;margin:0;font-weight:600}
.block-head .sub{font-size:11.5px;color:var(--txt-3)}
.block.collapsible .block-head{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;margin-bottom:0;cursor:pointer;user-select:none;transition:.15s}
.block.collapsible .block-head:hover{border-color:#3a465a;background:#222a36}
.collapse-caret{margin-left:auto;font-size:12px;color:var(--txt-3);transition:transform .2s}
.block.collapsed .collapse-caret{transform:rotate(-90deg)}
.block.collapsed .block-body{display:none}
.block-body .card:last-child{margin-bottom:0}

.grid{display:grid;gap:12px}
.grid-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.grid-3{grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.grid-4{grid-template-columns:repeat(auto-fit,minmax(165px,1fr))}
/* 指标四图：强制两列、横向更宽 */
.grid-cols-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid-cols-2 .chart-sm{height:240px}

/* 大盘态势卡 */
.ov-idx{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:12px}
.ov-idx .ix{background:var(--bg-elev-2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:10px 12px}
.ov-idx .ix .nm{font-size:12px;color:var(--txt-2)}
.ov-idx .ix .pr{font-size:18px;font-weight:600;font-family:var(--mono);margin-top:2px}
.ov-idx .ix .pc{font-size:12px;font-weight:600;font-family:var(--mono)}
.ov-cap{font-size:12px;color:var(--txt-3);margin-bottom:6px;min-height:16px}

/* 大盘定调（一句话结论） */
/* 定调胶囊：紧跟「当日大盘态势」标题 */
.ovv-slot{margin-left:10px;vertical-align:2px}
.ovv-tag{font-size:13px;font-weight:700;padding:3px 11px;border-radius:20px;white-space:nowrap}
.ovv-tag.v-strong{background:rgba(242,73,92,.16);color:#ff7a8a}
.ovv-tag.v-weak{background:rgba(47,191,113,.16);color:#5fd99a}
.ovv-tag.v-mid{background:rgba(240,169,46,.16);color:#f0c046}

/* 板块涨跌热力图（领涨 / 领跌 分组） */
.heat-wrap{display:block}
.heat-group{margin-bottom:14px}
.heat-group:last-child{margin-bottom:0}
.heat-glabel{font-size:12px;color:var(--txt-3);margin-bottom:8px;font-weight:600}
.heatmap-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(116px,1fr));gap:8px}
.heat-tile{border-radius:var(--radius-sm);padding:9px 7px;text-align:center;cursor:pointer;transition:.15s;border:1px solid transparent;color:#fff}
.heat-tile:hover{border-color:rgba(255,255,255,.4);transform:translateY(-1px)}
.heat-tile .hn{font-size:12px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.heat-tile .hv{font-size:14px;font-weight:600;font-family:var(--mono);margin-top:2px}

.stat{background:var(--bg-elev-2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:10px 12px}
.stat .k{font-size:11px;color:var(--txt-3);margin-bottom:4px}
.stat .v{font-size:17px;font-weight:600;font-family:var(--mono)}
.stat .x{font-size:11px;color:var(--txt-3);margin-top:2px}
.lim-badge{font-size:11px;font-weight:500;font-family:var(--mono);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:2px 6px;margin-left:6px;vertical-align:2px;white-space:nowrap}
.lim-badge b{font-weight:600}

.btn{
  border:1px solid var(--line);background:var(--bg-elev-2);color:var(--txt);
  padding:6px 13px;border-radius:var(--radius-sm);cursor:pointer;transition:.15s;white-space:nowrap;
}
.btn:hover:not(:disabled){border-color:#3a465a;background:#222a36}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.btn-primary:hover:not(:disabled){background:#3d7cf0;border-color:#3d7cf0}
.btn-danger{color:#ff8a95;border-color:#48242a}
.btn-danger:hover:not(:disabled){background:#2a171b;border-color:#6b3038}
/* 已自选态（个股页 ★ 按钮）——琥珀金描边，与未加入的灰描边形成区分（收藏星标语义） */
.btn-star{color:#f0a92e;border-color:rgba(240,169,46,.5);background:rgba(240,169,46,.08)}
.btn-star:hover:not(:disabled){background:rgba(240,169,46,.16);border-color:#f0a92e}
/* 持仓自动列入态（个股页「★ 持仓中」）——蓝色信息态（is-info 同源），区别于自选的金 */
.btn-held{color:#378add;border-color:rgba(55,138,221,.5);background:rgba(55,138,221,.08)}
.btn-held:disabled{color:#378add;border-color:rgba(55,138,221,.5);background:rgba(55,138,221,.08);opacity:1}
/* 站点页脚：ICP 备案号（合规要求——备案号挂页脚并链接工信部） */
.site-footer{display:flex;gap:14px;justify-content:center;padding:22px 0 30px;font-size:12px;color:var(--txt-3)}
.site-footer a{color:var(--txt-3);text-decoration:none}
.site-footer a:hover{color:var(--txt-2);text-decoration:underline}

/* 密码框小眼睛（明文切换）——input 右侧内嵌按钮（改密表单三框共用） */
.pwd-wrap{position:relative;display:block}
.pwd-wrap input{width:100%;padding-right:34px}
.pwd-eye{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:2px;line-height:1;opacity:.6;color:var(--txt-2);display:inline-flex}
.pwd-eye:hover{opacity:1}
.pwd-eye svg{display:block}
.btn-ghost{background:transparent}
.btn-sm{padding:3px 9px;font-size:12px}
.btn-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

label.field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--txt-2)}
input[type=text],input[type=password],input[type=number],input[type=date],select,textarea{
  background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:7px 10px;outline:none;transition:.15s;width:100%;
}
input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
input::placeholder{color:var(--txt-3);font-style:italic}
input.filled{background:var(--accent-soft);border-color:var(--accent)}
label.field.filled>span{color:var(--accent);font-weight:600}
.cond-count{font-size:11.5px;color:var(--txt-3);margin-left:8px}
.cond-count.has{color:var(--accent);font-weight:600}
.hint{font-size:11px;color:var(--txt-3)}

.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius-sm);max-height:560px}
/* expand：取消纵向滚动窗口，表格向下平铺（滚动交给外层 .view）；保留 overflow 以维持横向滚动 */
.table-wrap.expand{max-height:none}
table{width:100%;border-collapse:collapse;font-size:12.5px}
th{
  position:sticky;top:0;background:var(--bg-elev-2);text-align:right;padding:8px 10px;
  font-weight:600;color:var(--txt-2);border-bottom:1px solid var(--line);white-space:nowrap;z-index:2;font-size:11.5px;
}
th:first-child,td:first-child{text-align:left}
th.l,td.l{text-align:left}
td{padding:7px 10px;text-align:right;border-bottom:1px solid var(--line-soft);font-family:var(--mono);white-space:nowrap}
td.l{font-family:inherit}
tbody tr:hover{background:rgba(255,255,255,.025)}
tbody tr.clickable{cursor:pointer}
/* 表头点击排序 */
th.sortable{cursor:pointer;user-select:none}
th.sortable:hover{background:rgba(255,255,255,.06)}
th.sortable::after{content:'\21C5';opacity:.3;margin-left:5px;font-size:10px;font-weight:400}
th.sort-asc::after{content:'\25B2';opacity:.95}
th.sort-desc::after{content:'\25BC';opacity:.95}
.table-tools{display:flex;justify-content:flex-end;margin:2px 2px 6px}
.reset-sort{padding:2px 9px;font-size:11px;color:var(--txt-2);background:transparent;border:1px solid var(--line);border-radius:6px;cursor:pointer}
.reset-sort:hover{color:var(--txt-1);border-color:var(--line-strong);background:rgba(255,255,255,.04)}
.up{color:var(--up)}
.down{color:var(--down)}
.flat{color:var(--flat)}
.muted{color:var(--txt-3)}

.tag{display:inline-block;padding:1.5px 8px;border-radius:20px;font-size:11px;font-weight:600;letter-spacing:.2px;border:1px solid var(--line);color:var(--txt-2);background:var(--bg-elev-2)}
.tag-up{color:#ff6b7d;border-color:rgba(242,73,92,.45);background:rgba(242,73,92,.14)}
.tag-down{color:#3ad188;border-color:rgba(47,191,113,.45);background:rgba(47,191,113,.14)}
.tag-flat{color:var(--txt-2);border-color:var(--line);background:var(--bg-elev-2)}
.tag-hold{color:#7cb2fb;border-color:rgba(124,178,251,.45);background:rgba(124,178,251,.14)}
.tag-warn{color:#ffc25c;border-color:rgba(240,169,46,.45);background:rgba(240,169,46,.14)}
.tag-yellow{color:#e8c86a;border-color:rgba(232,200,106,.42);background:rgba(232,200,106,.13)}
/* 清仓：最决绝的一档。深色底上「描边+暗色字」会糊成一团，故改用实心块 + 白字 + 加粗，
   视觉权重明显高于其余三档（描边浅色），一眼可辨；绿色系保持 A 股「卖出=绿」语义。 */
.tag-out{color:#fff;background:#17a04f;border-color:#1fb85e;font-weight:700;padding:1.5px 9px;box-shadow:0 0 0 2px rgba(23,160,79,.18)}
.tag-out::before{content:'×';margin-right:3px;font-weight:700}

/* 上市板块标签：刻意避开红绿，避免与涨跌语义混淆 */
.tag-board{font-variant-numeric:tabular-nums;white-space:nowrap}
.b-main{color:#9fb0c7;border-color:rgba(159,176,199,.32);background:rgba(159,176,199,.10)}
.b-gem{color:#f0bf6a;border-color:rgba(240,169,46,.38);background:rgba(240,169,46,.12)}
.b-star{color:#c79bff;border-color:rgba(192,123,255,.38);background:rgba(192,123,255,.12)}
.b-bj{color:#7fb0ff;border-color:rgba(76,141,255,.38);background:rgba(76,141,255,.12)}
.b-b{color:#63d3c6;border-color:rgba(47,209,193,.35);background:rgba(47,209,193,.10)}
.b-other{color:var(--txt-3);border-color:var(--line);background:var(--bg-elev-2)}

/* 板块过滤 chips（个股列表上方） */
.bd-filter{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0 0 10px}
.bd-chip{cursor:pointer;user-select:none;padding:2px 10px;border-radius:20px;font-size:11px;
  border:1px solid var(--line);color:var(--txt-2);background:var(--bg-elev-2);transition:all .15s}
.bd-chip:hover{border-color:var(--accent);color:var(--txt-1)}
.bd-chip.on{border-color:var(--accent);color:#cfe0ff;background:var(--accent-soft)}

.chart{width:100%;height:420px}
.chart-sm{width:100%;height:220px}

.empty{padding:44px 20px;text-align:center;color:var(--txt-3);font-size:13px}
.loading{padding:34px;text-align:center;color:var(--txt-3);font-size:12.5px}
.spinner{
  width:18px;height:18px;border:2px solid var(--line);border-top-color:var(--accent);
  border-radius:50%;animation:spin .7s linear infinite;margin:0 auto 10px;
}
@keyframes spin{to{transform:rotate(360deg)}}

.alert{padding:10px 13px;border-radius:var(--radius-sm);font-size:12.5px;margin-bottom:12px;border:1px solid}
.alert-warn{background:rgba(240,169,46,.08);border-color:rgba(240,169,46,.3);color:#f5c465}
.alert-info{background:var(--accent-soft);border-color:rgba(76,141,255,.3);color:#9dc0ff}
.alert-err{background:rgba(242,73,92,.08);border-color:rgba(242,73,92,.3);color:#ff9aa5}

/* 搜索下拉 */
.search-box{position:relative}
.suggest{
  position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;max-height:300px;overflow-y:auto;
  background:var(--bg-elev-2);border:1px solid var(--line);border-radius:var(--radius-sm);
  box-shadow:0 10px 30px rgba(0,0,0,.45);
}
.suggest-item{padding:7px 11px;cursor:pointer;display:flex;justify-content:space-between;gap:10px;font-size:12.5px}
.suggest-item:hover,.suggest-item.hl{background:var(--accent-soft)}
.suggest-item .code{font-family:var(--mono);color:var(--txt-3);font-size:11.5px}
.suggest-item .stk-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.suggest-item .bd-tag{flex:none;font-size:10.5px;color:var(--txt-3);border:1px solid var(--line);border-radius:20px;padding:0 6px}

/* 信号面板 */
.signal-list{display:flex;flex-direction:column;gap:7px}
.signal{display:flex;align-items:flex-start;gap:9px;padding:8px 10px;background:var(--bg-elev-2);border-radius:var(--radius-sm);border-left:2px solid var(--line)}
.signal.bull{border-left-color:var(--up)}
.signal.bear{border-left-color:var(--down)}
.signal .s-name{font-weight:600;font-size:12.5px;min-width:96px}
.signal .s-desc{font-size:11.5px;color:var(--txt-2);flex:1}

.score-ring{display:flex;align-items:center;gap:14px}
.score-num{font-size:32px;font-weight:700;font-family:var(--mono);line-height:1}

/* Toast */
.toast-wrap{position:fixed;top:14px;right:14px;z-index:200;display:flex;flex-direction:column;gap:8px}
.toast{
  padding:9px 14px;border-radius:var(--radius-sm);background:var(--bg-elev-2);
  border:1px solid var(--line);box-shadow:0 8px 24px rgba(0,0,0,.4);font-size:12.5px;max-width:380px;
  animation:slidein .2s ease;
}
.toast.err{border-color:rgba(242,73,92,.45);color:#ff9aa5}
.toast.ok{border-color:rgba(47,191,113,.45);color:#7fe0ab}
@keyframes slidein{from{transform:translateX(20px);opacity:0}}

/* Modal */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:150;display:grid;place-items:center;padding:20px}
.modal-mask.hidden{display:none}
.modal{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;width:min(520px,100%);max-height:86vh;overflow-y:auto}
.modal h3{margin:0 0 14px;font-size:15px}
.tag-err{color:#ff6b7d;border-color:rgba(242,73,92,.45);background:rgba(242,73,92,.14)}
.modal-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.modal-card .modal-head{margin:0 0 6px}
.modal-card .modal-head h3{margin:0;font-size:15px}
.modal-card .field{margin-top:10px}

/* 操作日志 */
.audit-list{display:flex;flex-direction:column;gap:0;max-height:260px;overflow:auto}
.audit-row{display:flex;gap:12px;font-size:12.5px;line-height:1.7;padding:5px 2px;border-bottom:1px solid var(--line)}
.audit-row:last-child{border-bottom:none}
.audit-time{color:var(--txt-3);flex-shrink:0;font-variant-numeric:tabular-nums}
.audit-text{color:var(--txt-2)}

.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.form-grid .full{grid-column:1/-1}

::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#2b3441;border-radius:5px;border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:#3a4655}

@media (max-width:900px){
  .sidebar{width:60px;padding:14px 8px}
  .brand-text,.sidebar-foot{display:none}
  .nav-item{justify-content:center;font-size:0}
  .nav-item .ni{font-size:15px}
  .form-grid{grid-template-columns:1fr}
}

/* ============ 板块资金象限 ============ */
.quad-grid{display:grid;grid-template-columns:1.55fr 1fr;gap:16px;margin-bottom:16px}
.qchart-card{display:flex;flex-direction:column}
.qchart{height:540px;width:100%}
.qdetail{margin-top:10px;padding:10px 12px;border:1px solid var(--line-soft);border-radius:10px;
  background:var(--bg-elev);font-size:12.5px;line-height:1.6;color:var(--text-soft);min-height:42px}
.qside{display:flex;flex-direction:column;gap:6px}
.qh{font-size:13.5px;margin:14px 0 6px;display:flex;align-items:center;gap:8px}
.qh:first-child{margin-top:0}
.qh .sub{font-size:11px;color:var(--muted);font-weight:400}
.qh-ru{color:#f2495c}.qh-rd{color:#4c8dff}
.qlist{display:flex;flex-direction:column;gap:4px}
.qrow{display:flex;justify-content:space-between;align-items:center;padding:7px 10px;border-radius:8px;
  background:var(--bg-elev);border:1px solid var(--line-soft);cursor:pointer;transition:.15s}
.qrow:hover{border-color:var(--accent);background:#1a2230}
.qname{font-weight:600;font-size:13px}
.qval{display:flex;flex-direction:column;align-items:flex-end;font-size:12.5px;line-height:1.35}
.qval .sub{font-size:11px;color:var(--muted)}
.qnote{margin-top:14px;border-top:1px solid var(--line-soft);padding-top:12px}
.qcounts{display:flex;flex-wrap:wrap;gap:6px}
.pill{font-size:11.5px;padding:3px 9px;border-radius:20px;border:1px solid transparent;font-weight:600}
.q-ru{background:rgba(242,73,92,.14);color:#ff8a96;border-color:rgba(242,73,92,.35)!important}
.q-rd{background:rgba(76,141,255,.14);color:#7fabff;border-color:rgba(76,141,255,.35)!important}
.q-lu{background:rgba(240,169,46,.14);color:#f0bf6a;border-color:rgba(240,169,46,.35)!important}
.q-ld{background:rgba(47,191,113,.14);color:#5fd99a;border-color:rgba(47,191,113,.35)!important}
.qtag{display:inline-flex;align-items:center;font-size:11px;padding:1px 7px;border-radius:5px;font-weight:600;vertical-align:middle}
.qtag.RU{background:rgba(242,73,92,.16);color:#ff8a96}
.qtag.RD{background:rgba(76,141,255,.16);color:#7fabff}
.qtag.LU{background:rgba(240,169,46,.16);color:#f0bf6a}
.qtag.LD{background:rgba(47,191,113,.16);color:#5fd99a}

/* 板块下钻二级页面 */
.hidden{display:none !important}
.sd-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px 18px;padding:4px 2px}
.sd-stat{display:flex;flex-direction:column;gap:3px;padding:8px 12px;background:var(--bg-2,#161b24);border:1px solid var(--bd,#26303d);border-radius:8px}
.sd-stat .lbl{font-size:11.5px;color:var(--txt-3,#9aa7b8)}
.sd-stat b{font-size:17px;font-weight:700}
@media (max-width:980px){.quad-grid{grid-template-columns:1fr}.qchart{height:420px}}

/* 持仓页：智能盯盘「操作建议」单元格 */
.sig-cell{min-width:160px;line-height:1.3}
.sig-cell .tag{display:inline-block}
.sig-reason{font-size:11px;color:var(--txt-3,#9aa7b8);margin-top:4px}
/* 多空强度（0~100 标度，非概率）：持仓页操作建议列与自选股页共用（替代原 .prob「上涨概率」） */
.sig-strength{display:inline-block;margin-left:6px;font-size:11px;color:var(--txt-3,#9aa7b8);cursor:help}
.sig-strength.up{color:var(--up,#f2495c)}
.sig-strength.down{color:var(--down,#2fbf71)}
.sig-pos{font-size:11px;font-weight:600;margin-top:3px}
.sig-chip{font-size:11px;margin-top:3px;color:var(--txt-3)}
.sig-pos.pos-up{color:#ff6b7d}
.sig-pos.pos-down{color:#3ad188}
.sig-pos.pos-flat{color:var(--txt-3,#9aa7b8)}
.sig-stop{font-size:11px;font-weight:600;margin-top:3px;color:var(--up,#f2495c)}
.sig-dd{font-size:10.5px;color:var(--txt-3,#9aa7b8);margin-top:2px;opacity:.85}

/* ============ 登录 / 账号 ============ */
body.auth-gate .sidebar{display:none}
body.auth-gate .topbar{display:none}
body.auth-gate .main{padding:0}
body.auth-gate .view{
  display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px;
}
.auth-card{
  width:100%;max-width:340px;background:var(--bg-elev);border:1px solid var(--line);
  border-radius:var(--radius);padding:24px 22px;box-shadow:0 10px 40px rgba(0,0,0,.4);
}
.auth-card h2{margin:0 0 4px;font-size:18px}
.auth-card .muted{margin:0 0 16px;font-size:12.5px}
.auth-form{display:flex;flex-direction:column;gap:12px}
.auth-form label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--txt-2)}
.auth-form input{
  background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);
  color:var(--txt);font-size:13.5px;padding:9px 10px;outline:none;
}
.auth-form input:focus{border-color:var(--accent)}
.auth-form .btn-primary{margin-top:4px}
.auth-err{
  background:rgba(242,73,92,.12);border:1px solid rgba(242,73,92,.4);color:#ff8a96;
  font-size:12.5px;padding:8px 10px;border-radius:var(--radius-sm);margin-bottom:12px;
}
.user-box{font-size:12px;color:var(--txt-2);margin-top:6px}
.side-links{display:flex;gap:10px;margin-top:8px}
.side-link{background:none;border:none;color:var(--accent);font-size:12px;cursor:pointer;padding:0}
.side-link:hover{text-decoration:underline}
