/* StockPilot · 2026-11-07 · theme: OPS Terminal（全量重设计落地）
 * 功能驱动的暗色终端体系，双主题：深色默认，浅色经 html.theme-light 启用；
 * 自动规则（07:00-19:00 浅色）与手动覆盖见 00-head.js 主题管理器。
 * 语义不变：红涨绿跌；周期五态色 主升红/修复琥珀/分歧灰/退潮绿/冰点蓝。
 * 令牌系统：全部颜色经 --token 引用，组件禁止写死主题色。 */

:root {
  --fs: 1;              /* 全局字号缩放旋钮：紧凑=.95 / 标准=1 / 舒适=1.12 */
  --rail-w: 58px;
  --top-h: 44px;
  --radius-xs: 5px; --radius-sm: 7px; --radius-md: 10px;
  --dur: .15s;
  --ease: cubic-bezier(.4, 0, .2, 1);
  --font-dis: "Inter", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  --font-body: "Inter", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  --font-mono: "JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace;
}

/* ---------- 主题令牌（深色默认 / 浅色覆盖） ---------- */

:root, :root.theme-dark {
  color-scheme: dark;
  --bg: #0c0f15; --bg2: #0f131b;
  --pn: #141924; --pn2: #1a2130; --pn3: #212a3b;
  --line: rgba(255,255,255,.065); --line2: rgba(255,255,255,.13);
  --ink: #e8edf5; --ink2: #b9c3d2; --mut: #8391a5; --dim: #5a6678;
  --up: #ff5f5f; --upw: rgba(255,95,95,.13); --upl: rgba(255,95,95,.38);
  --dn: #31c48d; --dnw: rgba(49,196,141,.12); --dnl: rgba(49,196,141,.35);
  --amb: #f2a93b; --ambw: rgba(242,169,59,.12); --ambl: rgba(242,169,59,.4);
  --blu: #5aa2f7; --bluw: rgba(90,162,247,.12); --blul: rgba(90,162,247,.4);
  --vio: #a78bfa; --viow: rgba(167,139,250,.13);
  --up-1: rgba(255,95,95,.06); --up-2: rgba(255,95,95,.13); --up-3: rgba(255,95,95,.22);
  --dn-1: rgba(49,196,141,.05); --dn-2: rgba(49,196,141,.11); --dn-3: rgba(49,196,141,.2);
  --up-b1: rgba(255,95,95,.2); --up-b2: rgba(255,95,95,.5);
  --dn-b1: rgba(49,196,141,.16); --dn-b2: rgba(49,196,141,.5);
  --amb-soft: rgba(242,169,59,.05);
  --bg-glow: radial-gradient(60vw 40vh at 80% -10%, rgba(90,162,247,.05), transparent 60%);
  --shadow-pnl: none;
  --scrim: rgba(4, 6, 10, .66);
  --tip-bg: rgba(23,29,41,.96); --tip-line: rgba(128,142,164,.38);
}
:root.theme-light {
  color-scheme: light;
  --bg: #eef1f6; --bg2: #e6eaf1;
  --pn: #ffffff; --pn2: #f3f5f9; --pn3: #e9edf4;
  --line: rgba(18,26,42,.08); --line2: rgba(18,26,42,.17);
  --ink: #182234; --ink2: #3d4b61; --mut: #66748a; --dim: #8a97a9;
  --up: #d43d4d; --upw: rgba(212,61,77,.1); --upl: rgba(212,61,77,.42);
  --dn: #0d9c6c; --dnw: rgba(13,156,108,.1); --dnl: rgba(13,156,108,.4);
  --amb: #b06d05; --ambw: rgba(176,109,5,.1); --ambl: rgba(176,109,5,.42);
  --blu: #2f6fd1; --bluw: rgba(47,111,209,.1); --blul: rgba(47,111,209,.42);
  --vio: #7451ee; --viow: rgba(116,81,238,.1);
  --up-1: rgba(212,61,77,.06); --up-2: rgba(212,61,77,.13); --up-3: rgba(212,61,77,.24);
  --dn-1: rgba(13,156,108,.06); --dn-2: rgba(13,156,108,.13); --dn-3: rgba(13,156,108,.24);
  --up-b1: rgba(212,61,77,.18); --up-b2: rgba(212,61,77,.45);
  --dn-b1: rgba(13,156,108,.16); --dn-b2: rgba(13,156,108,.45);
  --amb-soft: rgba(176,109,5,.06);
  --bg-glow: radial-gradient(60vw 40vh at 80% -10%, rgba(47,111,209,.06), transparent 60%);
  --shadow-pnl: 0 1px 2px rgba(18,26,42,.05);
  --scrim: rgba(18, 26, 42, .5);
  --tip-bg: rgba(23,29,41,.96); --tip-line: rgba(128,142,164,.38);
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; overflow-x: clip; }
body {
  min-height: 100%;
  color: var(--ink);
  font: 400 calc(13px * var(--fs))/1.55 var(--font-body);
  background: var(--bg-glow), var(--bg);
  -webkit-font-smoothing: antialiased;
  font-synthesis: none;
  transition: background-color .2s var(--ease);
}
::selection { background: rgba(90,162,247,.3); }
:focus-visible { outline: 2px solid var(--blu); outline-offset: 1px; }
*::-webkit-scrollbar { width: 9px; height: 9px; }
*::-webkit-scrollbar-thumb { background: var(--line2); border-radius: 5px; border: 2px solid transparent; background-clip: content-box; }
*::-webkit-scrollbar-track { background: transparent; }
#app { min-height: 100vh; min-height: 100dvh; }
.boot { padding: 80px; text-align: center; color: var(--mut); }
h1, h2, h3 { font-family: var(--font-dis); font-weight: 600; line-height: 1.2; letter-spacing: -.01em; }
b, strong { font-weight: 600; }
a { color: var(--blu); text-decoration: none; cursor: pointer; }
a:hover { text-decoration: underline; }
.link { color: var(--blu); cursor: pointer; }
.link:hover { text-decoration: underline; }
.muted, .mu { color: var(--mut); }
.up { color: var(--up); } .down, .dn { color: var(--dn); }
.am { color: var(--amb); }
.glow-up { color: var(--up); font-weight: 700; }
.glow-down { color: var(--dn); font-weight: 700; }
.flex1 { flex: 1; }
.clickable { cursor: pointer; }
.mono, .num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
hr.hr { height: 1px; background: var(--line); border: 0; }
.vsep { width: 1px; align-self: stretch; background: var(--line); }

/* ---------- 壳：左轨 + 顶栏 + 页面 + 手机底栏 ---------- */

.shell { display: grid; grid-template-columns: var(--rail-w) minmax(0, 1fr); grid-template-rows: var(--top-h) minmax(0, 1fr); height: 100vh; height: 100dvh; max-width: none; }
.rail {
  grid-row: 1 / -1;
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: 12px 0 10px;
  background: var(--bg2); border-right: 1px solid var(--line);
}
.ritem { position: relative; width: 46px; padding: 7px 0 5px; display: grid; justify-items: center; gap: 3px; border: 0; border-radius: 9px; background: transparent; color: var(--mut); font: 500 calc(8.5px * var(--fs))/1 var(--font-body); letter-spacing: .04em; cursor: pointer; transition: color var(--dur) var(--ease), background-color var(--dur) var(--ease); }
.ritem .ic, .ritem .lucide { width: 17px; height: 17px; }
.ritem:hover { color: var(--ink); background: var(--pn2); }
.ritem.on { color: var(--amb); background: var(--ambw); }
.rled { position: absolute; top: 6px; right: 8px; width: 6px; height: 6px; border-radius: 50%; background: var(--dn); box-shadow: 0 0 6px var(--dnl); }
.rled.busy { background: var(--amb); box-shadow: 0 0 6px var(--ambl); animation: blink 1.2s steps(2) infinite; }
@keyframes blink { 50% { opacity: .35; } }
.rail-foot { margin-top: auto; display: grid; gap: 4px; justify-items: center; padding-top: 10px; }
.rail-led { width: 8px; height: 8px; border-radius: 50%; background: var(--dn); box-shadow: 0 0 8px var(--dnl); }
.rail-led.bad { background: var(--up); box-shadow: 0 0 8px var(--upl); animation: blink 1.2s steps(2) infinite; }

.top {
  grid-column: 2;
  display: flex; align-items: center; gap: 12px 14px;
  min-height: var(--top-h); padding: 0 16px;
  background: var(--bg2); border-bottom: 1px solid var(--line);
  position: relative; z-index: 40;
}
.gsearch { position: relative; display: flex; align-items: center; gap: 8px; width: 240px; min-height: 28px; padding: 0 10px; border: 1px solid var(--line2); border-radius: 8px; background: var(--pn); color: var(--dim); font-size: calc(12px * var(--fs)); cursor: text; flex: none; transition: border-color var(--dur) var(--ease); }
.gsearch:focus-within { border-color: var(--ambl); }
.gsearch input { border: 0; background: transparent; padding: 0; min-height: 0; color: var(--ink); font: 400 calc(12px * var(--fs))/1.5 var(--font-body); outline: none; width: 100%; }
.gsearch .kbd { margin-left: auto; font: 500 10px/1 var(--font-mono); color: var(--dim); border: 1px solid var(--line2); border-radius: 4px; padding: 2px 5px; flex: none; }
.gs-drop { position: absolute; top: calc(100% + 5px); left: 0; right: 0; background: var(--pn); border: 1px solid var(--line2); border-radius: 8px; box-shadow: 0 14px 34px -14px rgba(0,0,0,.55); overflow: hidden; z-index: 60; }
.gs-item { display: flex; gap: 8px; align-items: baseline; padding: 7px 11px; cursor: pointer; font-size: calc(12px * var(--fs)); color: var(--ink2); }
.gs-item:hover { background: var(--pn2); }
.gs-item .mono { font-size: calc(11px * var(--fs)); color: var(--mut); }
.gs-empty { padding: 8px 11px; font-size: calc(11.5px * var(--fs)); color: var(--mut); }
.ticker { display: flex; align-items: center; gap: 13px; margin: 0 auto; font-size: calc(12px * var(--fs)); white-space: nowrap; overflow: hidden; min-width: 0; }
.ticker .ti { display: inline-flex; align-items: baseline; gap: 5px; color: var(--mut); }
.ticker .ti i { font-style: normal; font-family: var(--font-mono); font-variant-numeric: tabular-nums; color: var(--ink2); }
.ticker .ti i.pct { font-weight: 600; }
.ticker .tsep { width: 1px; height: 13px; background: var(--line2); flex: none; }
.session { display: inline-flex; align-items: center; gap: 5px; padding: 2.5px 9px; border-radius: 999px; background: var(--dnw); color: var(--dn); font: 600 10px/1.6 var(--font-body); letter-spacing: .06em; flex: none; }
.session.off { background: var(--pn3); color: var(--mut); }
.session .sdot { width: 6px; height: 6px; border-radius: 50%; background: var(--dn); }
.session.off .sdot { background: var(--mut); }
.clockbox { display: inline-flex; align-items: center; font-family: var(--font-mono); font-size: calc(11.5px * var(--fs)); color: var(--mut); font-variant-numeric: tabular-nums; flex: none; }
.llmled { display: inline-flex; align-items: center; gap: 5px; font-size: 10.5px; color: var(--mut); flex: none; }
.llmled i { width: 7px; height: 7px; border-radius: 50%; background: var(--dn); box-shadow: 0 0 6px var(--dnl); }
.llmled i.bad { background: var(--up); box-shadow: 0 0 6px var(--upl); }
.llmled i.probe { background: var(--amb); animation: blink 1.2s steps(2) infinite; }
.theme-btn { flex: none; }

.page { grid-column: 2; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 16px 18px 44px; }
.pinner { max-width: 1720px; margin: 0 auto; }
.vbody { display: grid; gap: 12px; }
.ph { display: flex; align-items: flex-end; gap: 10px 12px; flex-wrap: wrap; }
.ph h1 { font-size: calc(17px * var(--fs)); color: var(--ink); }
.ph .sub { font-size: calc(11.5px * var(--fs)); color: var(--mut); }
.ops { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ph .ops { margin-left: auto; display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.footnote { font-size: calc(10.5px * var(--fs)); color: var(--dim); display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }
.demo { display: inline-flex; padding: 2px 9px; border-radius: 999px; border: 1px dashed var(--line2); color: var(--dim); font-size: 9.5px; letter-spacing: .08em; }

.bnav { display: none; }

/* ---------- 通用元件 ---------- */

.pnl { background: var(--pn); border: 1px solid var(--line); border-radius: var(--radius-md); padding: 12px 14px; min-width: 0; box-shadow: var(--shadow-pnl); transition: background-color .2s var(--ease), border-color .2s var(--ease); }
.pnl-h { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.pnl-h .ops { margin-left: auto; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.tt { font: 600 calc(10px * var(--fs))/1.4 var(--font-mono); letter-spacing: .14em; text-transform: uppercase; color: var(--mut); }
.tt i { font-style: normal; color: var(--dim); letter-spacing: .04em; text-transform: none; }

.btn {
  appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 28px; padding: 0 11px; border: 1px solid var(--line2); border-radius: var(--radius-sm);
  background: var(--pn2); color: var(--ink2); font: 500 calc(12px * var(--fs))/1 var(--font-body); cursor: pointer;
  white-space: nowrap; text-decoration: none;
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.btn:hover { background: var(--pn3); border-color: rgba(128,142,164,.45); color: var(--ink); text-decoration: none; }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.btn.p { background: var(--amb); border-color: var(--amb); color: #191204; font-weight: 600; }
.btn.p:hover { background: #f7b95c; border-color: #f7b95c; color: #191204; }
.btn.g { background: transparent; border-color: transparent; }
.btn.g:hover { background: var(--pn2); border-color: transparent; }
.btn.dg { background: transparent; border-color: var(--upl); color: var(--up); }
.btn.dg:hover { background: var(--upw); }
.btn.sm { min-height: 24px; padding: 0 8px; font-size: calc(11px * var(--fs)); }
.btn .lucide, .btn .ic { width: 13px; height: 13px; }

.tag { display: inline-flex; align-items: center; gap: 4px; padding: 1.5px 8px; border-radius: 5px; font: 500 calc(10.5px * var(--fs))/1.7 var(--font-body); background: var(--pn3); color: var(--ink2); white-space: nowrap; }
.tag.a { background: var(--ambw); color: var(--amb); }
.tag.u { background: var(--upw); color: var(--up); }
.tag.d { background: var(--dnw); color: var(--dn); }
.tag.b { background: var(--bluw); color: var(--blu); }
.tag.v { background: var(--viow); color: var(--vio); }
.tag.click { cursor: pointer; user-select: none; transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), color var(--dur) var(--ease); border: 1px solid transparent; }
.tag.click:hover { border-color: var(--line2); color: var(--ink); }
.tag.on { background: var(--ambw); color: var(--amb); border-color: var(--ambl); }
.tag.dim { opacity: .55; }
.chip { display: inline-flex; align-items: center; gap: 4px; padding: 1.5px 8px; border-radius: 5px; font-size: calc(11px * var(--fs)); background: var(--pn3); color: var(--ink2); white-space: nowrap; }
.chip.amber-chip { background: var(--ambw); color: var(--amb); }
.badge { display: inline-flex; align-items: center; padding: 2px 9px; border-radius: 5px; font: 600 calc(11px * var(--fs))/1.7 var(--font-body); border: 1px solid transparent; white-space: nowrap; }
.badge.big { font-size: calc(13px * var(--fs)); padding: 3px 12px; }
.badge.buy { background: var(--upw); color: var(--up); border-color: var(--upl); }
.badge.sell { background: var(--dnw); color: var(--dn); border-color: var(--dnl); }
.badge.gray { background: var(--pn3); color: var(--mut); border-color: var(--line2); }
.badge.green { background: var(--dnw); color: var(--dn); border-color: var(--dnl); }
.badge.gold { background: var(--ambw); color: var(--amb); border-color: var(--ambl); }
.badge.red { background: var(--upw); color: var(--up); border-color: var(--upl); }
.bdg { display: inline-flex; align-items: center; padding: 2px 9px; border-radius: 5px; font: 600 calc(11px * var(--fs))/1.7 var(--font-body); border: 1px solid transparent; white-space: nowrap; }
.bdg.buy { background: var(--upw); color: var(--up); border-color: var(--upl); }
.bdg.hold { background: var(--pn3); color: var(--ink2); border-color: var(--line2); }
.bdg.cut { background: var(--dnw); color: var(--dn); border-color: var(--dnl); }
.led { width: 7px; height: 7px; border-radius: 50%; flex: none; display: inline-block; }
.led.g { background: var(--dn); box-shadow: 0 0 7px var(--dnl); }
.led.a { background: var(--amb); box-shadow: 0 0 7px var(--ambl); animation: blink 1.2s steps(2) infinite; }
.led.r { background: var(--up); box-shadow: 0 0 7px var(--upl); }
.led.off { background: var(--dim); }
.stat { display: grid; gap: 1px; min-width: 0; }
.stat small { font-size: calc(10px * var(--fs)); color: var(--mut); letter-spacing: .05em; }
.stat b { font: 500 calc(15px * var(--fs))/1.25 var(--font-mono); font-variant-numeric: tabular-nums; color: var(--ink); }
.stat b i { font-style: normal; font-size: calc(10px * var(--fs)); color: var(--mut); margin-left: 4px; font-family: var(--font-body); font-weight: 400; }
.mbar { height: 5px; border-radius: 3px; background: var(--pn3); overflow: hidden; min-width: 40px; }
.mbar i { display: block; height: 100%; border-radius: 3px; }
.kgrid { display: grid; gap: 9px; }
.k2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.k3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.k4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.k6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.g2 { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; align-items: start; }
.g3 { display: grid; grid-template-columns: 300px minmax(0, 1fr) 330px; gap: 12px; align-items: start; }
.col { display: grid; gap: 12px; min-width: 0; }
.sw2 { display: inline-flex; align-items: center; gap: 7px; font-size: calc(11.5px * var(--fs)); color: var(--ink2); cursor: pointer; user-select: none; }
.sw2 i { width: 28px; height: 16px; border-radius: 999px; background: var(--pn3); border: 1px solid var(--line2); position: relative; transition: background-color var(--dur) var(--ease); flex: none; }
.sw2 i::after { content: ""; position: absolute; top: 2px; left: 2px; width: 10px; height: 10px; border-radius: 50%; background: var(--mut); transition: transform var(--dur) var(--ease); }
.sw2.on i { background: var(--amb); border-color: var(--amb); }
.sw2.on i::after { transform: translateX(12px); background: #1a1206; }
.switch-label { display: inline-flex; align-items: center; gap: 7px; font-size: calc(12px * var(--fs)); color: var(--ink2); cursor: pointer; }

/* ---------- 表格（账本式） ---------- */

.tw { border: 1px solid var(--line); border-radius: var(--radius-md); background: var(--pn); overflow: hidden; }
.row-del { width: 26px; height: 26px; display: grid; place-items: center; border: 0; border-radius: 6px; background: transparent; color: var(--mut); cursor: pointer; transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease); }
.row-del:hover { background: var(--upw); color: var(--up); }
.row-del .lucide { width: 14px; height: 14px; }
.table-scroll, .tw { overflow-x: auto; }
table.tbt { width: 100%; border-collapse: collapse; font-size: calc(12px * var(--fs)); }
.tbt thead th { text-align: left; font: 600 calc(9.5px * var(--fs))/1.4 var(--font-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--mut); padding: 7px 11px; background: var(--pn2); border-bottom: 1px solid var(--line2); white-space: nowrap; position: sticky; top: 0; }
.tbt thead th.r, .tbt td.r { text-align: right; }
.tbt thead th.s { cursor: pointer; user-select: none; }
.tbt thead th.s:hover { color: var(--ink); }
.tbt thead th .ar { color: var(--amb); }
.tbt td { padding: 7px 11px; border-bottom: 1px solid var(--line); font-variant-numeric: tabular-nums; vertical-align: middle; }
.tbt tbody tr:last-child td { border-bottom: 0; }
.tbt tbody tr { cursor: pointer; transition: background-color .12s var(--ease); }
.tbt tbody tr:hover { background: var(--pn2); }
.tbt td.nm { font-weight: 600; color: var(--ink); font-family: var(--font-body); }
.tbt td .cd { font-family: var(--font-mono); font-size: calc(10.5px * var(--fs)); color: var(--dim); margin-left: 6px; }

/* ---------- 表单 ---------- */

input, select, textarea {
  min-height: 30px; background: var(--bg2); color: var(--ink); border: 1px solid var(--line2);
  border-radius: var(--radius-sm); padding: 5px 10px; font: 400 calc(12.5px * var(--fs))/1.5 var(--font-body); outline: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
input:hover, select:hover, textarea:hover { border-color: rgba(128,142,164,.45); }
input:focus, select:focus, textarea:focus { border-color: var(--amb); box-shadow: 0 0 0 3px rgba(242,169,59,.13); }
input[type="checkbox"] { width: 15px; height: 15px; min-height: 0; accent-color: var(--amb); cursor: pointer; }
textarea { resize: vertical; }
select { appearance: none; -webkit-appearance: none; cursor: pointer; padding-right: 26px;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%238391a5' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 9px center; background-size: 10px 6px; }
.add-row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.add-row .w-code { width: 180px; }
.add-row .w-note { flex: 1; min-width: 150px; }

/* ---------- 弹窗 / 提示 ---------- */

.modal-mask { position: fixed; inset: 0; z-index: 90; background: var(--scrim); display: flex; align-items: center; justify-content: center; padding: 16px; backdrop-filter: blur(3px); }
.modal-card { width: min(560px, 94vw); max-height: 88vh; overflow: auto; background: var(--pn); border: 1px solid var(--line2); border-radius: 12px; padding: 16px 18px; box-shadow: 0 30px 80px -30px rgba(0,0,0,.6); }
.modal-card.edge-modal { width: min(930px, 94vw); }
.card-title { font: 600 calc(11px * var(--fs))/1.4 var(--font-body); letter-spacing: .1em; text-transform: uppercase; color: var(--mut); margin-bottom: 10px; }
.card-title-row { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; flex-wrap: wrap; }
.card-title-row .card-title { margin-bottom: 0; }
.toasts { position: fixed; left: 50%; transform: translateX(-50%); bottom: 26px; z-index: 120; display: grid; gap: 8px; width: min(480px, calc(100vw - 24px)); }
.toast { padding: 10px 14px; border-radius: 9px; font-size: calc(12.5px * var(--fs)); background: var(--pn2); border: 1px solid var(--line2); color: var(--ink); box-shadow: 0 16px 44px -18px rgba(0,0,0,.6); }
.toast.success { border-color: var(--dnl); background: rgba(49,196,141,.1); }
.toast.error { border-color: var(--upl); background: rgba(255,95,95,.1); }
.toast.info { border-color: var(--ambl); background: var(--ambw); }
.toast-enter-active, .toast-leave-active { transition: all .22s var(--ease); }
.toast-enter-from, .toast-leave-to { opacity: 0; transform: translateY(8px); }
.pw-hint { font-size: calc(12px * var(--fs)); color: var(--mut); margin: 4px 0 10px; }
.pw-row input { width: 100%; }
.pw-error { color: var(--up); font-size: calc(12px * var(--fs)); margin: 6px 0; }
.pw-actions { margin-top: 12px; }
.row-gap { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.empty { padding: 26px 14px; text-align: center; color: var(--mut); font-size: calc(12.5px * var(--fs)); display: grid; gap: 10px; justify-items: center; }
.err-text { color: var(--up); font-size: calc(11.5px * var(--fs)); }

/* ---------- 顶栏字号弹层（保留既有 a11y 功能） ---------- */

.top .btn.tool-on { color: var(--amb); background: var(--ambw); border-color: transparent; }
.fs-menu { position: relative; flex: none; }
.fs-pop { position: absolute; right: 0; top: calc(100% + 6px); background: var(--pn); border: 1px solid var(--line2); border-radius: 9px; padding: 6px; display: grid; gap: 2px; min-width: 132px; box-shadow: 0 14px 34px -14px rgba(0,0,0,.55); z-index: 70; }
.fs-pop > b { font-size: calc(10.5px * var(--fs)); color: var(--mut); padding: 4px 8px 2px; }
.fs-opt { display: flex; align-items: center; gap: 8px; border: 0; background: transparent; color: var(--ink2); font: 500 calc(12px * var(--fs))/1 var(--font-body); padding: 7px 9px; border-radius: 6px; cursor: pointer; }
.fs-opt:hover { background: var(--pn2); }
.fs-opt.active { color: var(--amb); background: var(--ambw); }
.fs-dots { display: inline-flex; gap: 2px; }
.fs-dots i { width: 4px; height: 4px; border-radius: 50%; background: currentColor; opacity: .6; }

/* ---------- 盘面 ---------- */

.bgrid { display: grid; grid-template-columns: 300px minmax(0, 1fr) 330px; gap: 12px; align-items: start; }
.ring { position: relative; width: 74px; height: 62px; flex: none; }
.ring svg { width: 100%; height: 100%; display: block; }
.ring path { fill: none; stroke-width: 7; stroke-linecap: round; }
.ring .tr { stroke: var(--line2); }
.ring b { position: absolute; inset: auto 0 5px 0; text-align: center; font: 600 calc(15px * var(--fs))/1 var(--font-mono); color: var(--ink); }
.ring b i { font: 400 calc(9px * var(--fs))/1 var(--font-body); color: var(--mut); font-style: normal; }
.rg-ice .ring .vl { stroke: var(--blu); } .rg-ice .ring b { color: var(--blu); }
.rg-fix .ring .vl { stroke: var(--amb); } .rg-fix .ring b { color: var(--amb); }
.rg-up .ring .vl { stroke: var(--up); } .rg-up .ring b { color: var(--up); }
.rg-peak .ring .vl { stroke: #ff8a8a; } .rg-peak .ring b { color: #ff8a8a; }
.rg-eb .ring .vl { stroke: var(--dn); } .rg-eb .ring b { color: var(--dn); }
.rg-name { font: 600 calc(13px * var(--fs))/1 var(--font-body); color: #fff; padding: 5px 10px; border-radius: 6px; letter-spacing: .08em; }
.rg-ice .rg-name { background: var(--blu); } .rg-fix .rg-name { background: var(--amb); }
.rg-up .rg-name { background: var(--up); } .rg-peak .rg-name { background: #c23a42; } .rg-eb .rg-name { background: var(--dn); }
.dec-wrap { display: flex; gap: 6px; flex-wrap: wrap; }
.dec { background: var(--pn2); border: 1px solid var(--line); border-radius: 8px; padding: 5px 10px; display: grid; gap: 0; }
.dec small { font-size: calc(9.5px * var(--fs)); color: var(--mut); }
.dec b { font-size: calc(12.5px * var(--fs)); color: var(--ink); }
.drow { display: grid; grid-template-columns: 46px minmax(0, 1fr) 38px; gap: 8px; align-items: center; }
.drow .l { font: 400 calc(10px * var(--fs))/1 var(--font-mono); color: var(--mut); text-align: right; font-variant-numeric: tabular-nums; }
.drow .t { height: 7px; border-radius: 4px; background: var(--pn3); overflow: hidden; }
.drow .t i { display: block; height: 100%; }
.drow .n { font: 500 calc(10.5px * var(--fs))/1 var(--font-mono); color: var(--ink2); text-align: right; font-variant-numeric: tabular-nums; }
.evline { display: grid; gap: 4px; font: 400 calc(10.5px * var(--fs))/1.7 var(--font-mono); color: var(--mut); font-variant-numeric: tabular-nums; }
.plan-sec { padding: 9px 0; border-bottom: 1px dashed var(--line); }
.plan-sec:last-child { border-bottom: 0; }
.plan-sec h4 { display: flex; align-items: center; gap: 7px; font: 600 calc(12.5px * var(--fs))/1.4 var(--font-body); color: var(--ink); margin-bottom: 4px; }
.plan-sec h4 .bar { width: 3px; height: 12px; border-radius: 2px; background: var(--blu); flex: none; }
.plan-sec.risk h4 .bar { background: var(--up); }
.plan-sec.risk h4 { color: var(--up); }
.plan-sec.todo h4 .bar { background: var(--amb); }
.plan-sec p { font-size: calc(12.5px * var(--fs)); line-height: 1.75; color: var(--ink2); }
.plan-sec p + p { margin-top: 5px; }
.todo-n { display: inline-flex; width: 18px; height: 18px; margin-right: 8px; border-radius: 5px; background: var(--pn3); color: var(--amb); font: 600 calc(10px * var(--fs))/18px var(--font-mono); text-align: center; }
.plan-foot { font-size: calc(10.5px * var(--fs)); color: var(--dim); }
.plan-tabs { display: flex; gap: 4px; flex-wrap: wrap; }
.plan-chip { border: 0; background: transparent; color: var(--mut); font: 500 calc(10.5px * var(--fs))/1 var(--font-mono); padding: 5px 9px; border-radius: 6px; cursor: pointer; transition: all var(--dur) var(--ease); }
.plan-chip:hover { color: var(--ink); background: var(--pn2); }
.plan-chip.on { background: var(--pn3); color: var(--amb); }
.plan-chip.stale:not(.on) { opacity: .55; }
.plan-run { display: flex; align-items: center; gap: 9px; padding: 8px 12px; border-radius: var(--radius-sm); border: 1px solid var(--ambl); background: var(--ambw); color: var(--amb); font-size: calc(12px * var(--fs)); }
.plan-run .spin { width: 11px; height: 11px; flex: none; border-radius: 50%; border: 2px solid rgba(242,169,59,.25); border-top-color: var(--amb); animation: pspin .9s linear infinite; }
@keyframes pspin { to { transform: rotate(360deg); } }
.lane { border-radius: 8px; padding: 8px 10px; border: 1px solid var(--line); background: var(--pn2); }
.lane + .lane { margin-top: 7px; }
.lane-h { display: flex; align-items: center; gap: 7px; font: 600 calc(11px * var(--fs))/1 var(--font-body); margin-bottom: 6px; }
.lane-h i { width: 7px; height: 7px; border-radius: 2px; flex: none; }
.lane-h small { margin-left: auto; font: 400 calc(10px * var(--fs))/1 var(--font-mono); color: var(--dim); }
.lane .chips { display: flex; flex-wrap: wrap; gap: 5px; }
.lane .tk { display: inline-flex; align-items: baseline; gap: 6px; background: var(--pn); border: 1px solid var(--line2); border-radius: 6px; padding: 3px 9px; font-size: calc(11.5px * var(--fs)); max-width: 100%; }
.lane .tk .sc { font-family: var(--font-mono); font-size: calc(10px * var(--fs)); color: var(--mut); }
.lane .tk .sc.hot { color: var(--amb); }
.lane.l-up { background: var(--up-1); border-color: var(--upl); } .lane.l-up .lane-h { color: var(--up); } .lane.l-up .lane-h i { background: var(--up); }
.lane.l-amb { background: var(--amb-soft); border-color: var(--ambl); } .lane.l-amb .lane-h { color: var(--amb); } .lane.l-amb .lane-h i { background: var(--amb); }
.lane.l-gry { background: var(--pn2); } .lane.l-gry .lane-h { color: var(--mut); } .lane.l-gry .lane-h i { background: var(--mut); }
.lane.l-dn { background: var(--dn-1); border-color: var(--dnl); } .lane.l-dn .lane-h { color: var(--dn); } .lane.l-dn .lane-h i { background: var(--dn); }
.pyr { display: grid; gap: 1px; }
.pyr-r { display: flex; align-items: center; gap: 8px; width: 100%; cursor: pointer; padding: 2px 0; }
.pyr-lab { flex: none; width: 46px; font: 600 calc(10.5px * var(--fs))/1.4 var(--font-mono); color: var(--ink2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pyr-lab b { color: var(--ink); font-weight: 600; }
.pyr-item:hover .pyr-lab { color: var(--amb); }
.pyr-track { flex: 1; min-width: 0; height: 13px; display: flex; align-items: center; }
.pyr-b { display: block; height: 11px; border-radius: 3px; background: linear-gradient(90deg, rgba(242,169,59,.5), rgba(242,169,59,.95)); transition: width .3s var(--ease); }
.pyr-b.gap { background: linear-gradient(90deg, rgba(255,95,95,.5), rgba(255,95,95,.95)); }
.pyr-item:hover .pyr-b { filter: brightness(1.12); }
.pyr-caret { flex: none; width: 7px; height: 7px; border-right: 1px solid var(--dim); border-bottom: 1px solid var(--dim); transform: rotate(-45deg); transition: transform var(--dur) var(--ease); }
.pyr-caret.open { transform: rotate(45deg); }
.pyr-miss { display: flex; align-items: center; gap: 8px; padding: 2px 0; }
.pyr-miss .pyr-lab { color: var(--dim); font-weight: 400; }
.pyr-miss .pyr-track i { display: block; width: 26%; height: 0; border-top: 1.5px dashed var(--rule2); }
.pyr-miss.is-gap .pyr-track i { border-color: var(--upl); }
.lad-list { display: grid; gap: 0; margin-top: 5px; width: 100%; padding-left: 54px; }
.lad-row { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; padding: 2.5px 1px; border-bottom: 1px dashed var(--line); font-size: calc(10.5px * var(--fs)); min-width: 0; cursor: pointer; }
.lad-row:hover .l b { color: var(--amb); }
.lad-row .l { display: inline-flex; gap: 5px; align-items: baseline; min-width: 0; }
.lad-row .l b { font-weight: 600; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 92px; transition: color var(--dur) var(--ease); }
.lad-row .l .num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: calc(10px * var(--fs)); }
.lad-row .r { display: inline-flex; gap: 5px; color: var(--dim); font: 400 calc(9.5px * var(--fs))/1.4 var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pyr-note { font-size: calc(10.5px * var(--fs)); color: var(--mut); text-align: center; margin-top: 6px; }
.heat { display: grid; grid-template-columns: repeat(auto-fill, minmax(86px, 1fr)); gap: 5px; }
.ht { border-radius: 7px; padding: 6px 8px; display: grid; gap: 0; cursor: pointer; min-width: 0; }
.ht b { font-size: calc(11px * var(--fs)); font-weight: 500; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ht span { font: 500 calc(10px * var(--fs))/1.5 var(--font-mono); font-variant-numeric: tabular-nums; }
.ht.h1 { background: var(--up-3); } .ht.h1 span { color: var(--up); }
.ht.h2 { background: var(--up-2); } .ht.h2 span { color: var(--up); }
.ht.h3 { background: var(--up-1); } .ht.h3 span { color: var(--up); }
.ht.g1 { background: var(--dn-3); } .ht.g1 span { color: var(--dn); }
.ht.g2 { background: var(--dn-2); } .ht.g2 span { color: var(--dn); }
.ht.g3 { background: var(--dn-1); } .ht.g3 span { color: var(--dn); }
.trend-box { height: 170px; min-width: 0; }

/* ---------- 雷达 ---------- */

.feed { display: grid; gap: 9px; max-width: 980px; }
.ev { border: 1px solid var(--line); border-radius: var(--radius-md); background: var(--pn); padding: 11px 13px; border-left: 2px solid var(--line2); }
.ev.hot { border-left-color: var(--up); }
.ev.warm { border-left-color: var(--amb); }
.ev.cold { border-left-color: var(--dnl); }
.ev-h { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.ev-t { font: 500 calc(10.5px * var(--fs))/1 var(--font-mono); color: var(--dim); font-variant-numeric: tabular-nums; }
.ev-n { font: 600 calc(13.5px * var(--fs))/1.3 var(--font-body); color: var(--ink); }
.ev-c { font: 400 calc(10.5px * var(--fs))/1 var(--font-mono); color: var(--dim); }
.ev-p { font: 600 calc(13px * var(--fs))/1 var(--font-mono); font-variant-numeric: tabular-nums; }
.ev-sum { margin-top: 6px; font-size: calc(12px * var(--fs)); line-height: 1.7; color: var(--ink2); }
.ev-sum b { color: var(--ink); }
.ev-ops { margin-left: auto; display: flex; gap: 6px; }
.ev-sub { margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--line); font-size: calc(10.5px * var(--fs)); color: var(--mut); display: flex; gap: 10px; flex-wrap: wrap; }
.cnt-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* ---------- 右侧拐点 ---------- */

.warnbar { display: flex; gap: 9px; align-items: center; flex-wrap: wrap; padding: 10px 14px; border-radius: var(--radius-md); border: 1px solid var(--ambl); background: var(--amb-soft); font-size: calc(12px * var(--fs)); color: var(--ink2); }
.warnbar.safe { border-color: var(--dnl); background: var(--dn-1); }
.warnbar b { color: var(--ink); }
.picks { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 9px; }
.pick { border: 1px solid var(--line); border-radius: var(--radius-md); background: var(--pn2); padding: 10px 12px; display: grid; gap: 6px; cursor: pointer; transition: border-color var(--dur) var(--ease); }
.pick:hover { border-color: var(--ambl); }
.pick-h { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.pick-s { margin-left: auto; font: 600 calc(16px * var(--fs))/1 var(--font-mono); color: var(--amb); }
.pick-s i { font: 400 calc(9px * var(--fs))/1 var(--font-mono); color: var(--dim); font-style: normal; }
.spark { width: 100%; height: 30px; display: block; }
.spark polyline { fill: none; stroke-width: 1.6; }
.spark .zero { stroke: var(--line2); stroke-width: .6; stroke-dasharray: 3 3; }
.pick-m { font: 400 calc(10.5px * var(--fs))/1.6 var(--font-mono); color: var(--mut); display: flex; gap: 9px; flex-wrap: wrap; font-variant-numeric: tabular-nums; }
.gtabs { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.gtab { display: inline-flex; align-items: center; gap: 7px; padding: 5px 12px; border-radius: 8px; border: 1px solid var(--line2); background: var(--pn); font: 500 calc(12px * var(--fs))/1.5 var(--font-body); color: var(--mut); cursor: pointer; transition: all var(--dur) var(--ease); }
.gtab b { font: 600 calc(10.5px * var(--fs))/1 var(--font-mono); color: var(--ink2); }
.gtab:hover { color: var(--ink); }
.gtab.on { background: var(--pn3); border-color: rgba(128,142,164,.45); color: var(--ink); }
.gtab.on b { color: var(--amb); }

/* ---------- 自选池 ---------- */

.fbar { display: flex; gap: 7px; flex-wrap: wrap; align-items: center; }
.bs-line { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 9px 14px; border: 1px solid var(--dnl); border-radius: var(--radius-md); background: var(--dn-1); font-size: calc(12px * var(--fs)); color: var(--ink2); }
.bs-line b { color: var(--dn); }
.bs-line .num { font-size: calc(11.5px * var(--fs)); }

/* ---------- 个股深析 ---------- */

.quote-band { display: flex; align-items: center; gap: 10px 16px; flex-wrap: wrap; }
.qb-name { font: 600 calc(19px * var(--fs))/1.2 var(--font-dis); color: var(--ink); }
.qb-name .cd { font: 400 calc(12px * var(--fs))/1 var(--font-mono); color: var(--dim); margin-left: 6px; }
.qb-price { font: 600 calc(24px * var(--fs))/1 var(--font-mono); font-variant-numeric: tabular-nums; }
.qb-pct { font: 600 calc(14px * var(--fs))/1 var(--font-mono); font-variant-numeric: tabular-nums; }
.qb-meta { font: 400 calc(10.5px * var(--fs))/1.6 var(--font-mono); color: var(--mut); font-variant-numeric: tabular-nums; }
.kline-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ktabs { display: flex; gap: 3px; }
.ktab { border: 0; background: transparent; color: var(--mut); font: 500 calc(10.5px * var(--fs))/1 var(--font-mono); padding: 5px 9px; border-radius: 5px; cursor: pointer; transition: all var(--dur) var(--ease); }
.ktab:hover { color: var(--ink); }
.ktab.on { background: var(--pn3); color: var(--amb); }
.kline-box { height: 300px; min-width: 0; }
.kline-box.big { height: 340px; }
.kline-loading { text-align: center; font-size: calc(11.5px * var(--fs)); padding: 5px 0 0; color: var(--mut); }
.vtabs { display: flex; gap: 4px; padding: 3px; border: 1px solid var(--line); border-radius: 8px; background: var(--pn2); }
.vtab { flex: 1; border: 0; background: transparent; color: var(--mut); font: 500 calc(11.5px * var(--fs))/1 var(--font-body); padding: 6px 0; border-radius: 6px; cursor: pointer; transition: all var(--dur) var(--ease); }
.vtab:hover { color: var(--ink); }
.vtab.on { background: var(--pn3); color: var(--ink); }
.vpane[hidden] { display: none; }
.fac { display: grid; grid-template-columns: 64px minmax(0, 1fr) 30px; gap: 8px; align-items: center; margin-bottom: 6px; }
.fac .n { font-size: calc(11px * var(--fs)); color: var(--ink2); }
.fac .t { height: 6px; border-radius: 3px; background: var(--pn3); overflow: hidden; }
.fac .t i { display: block; height: 100%; border-radius: 3px; background: linear-gradient(90deg, var(--ambl), var(--amb)); }
.fac .t i.risk { background: linear-gradient(90deg, var(--dnl), var(--dn)); }
.fac .v { font: 600 calc(11.5px * var(--fs))/1 var(--font-mono); text-align: right; color: var(--ink); }
.sig-nums { display: grid; grid-template-columns: repeat(auto-fill, minmax(108px, 1fr)); gap: 8px; }
.sn { background: var(--pn2); border-radius: var(--radius-sm); padding: 7px 9px; display: grid; gap: 1px; min-width: 0; }
.sn .lbl { font-size: calc(10px * var(--fs)); color: var(--mut); }
.sn b { font: 500 calc(13.5px * var(--fs))/1.3 var(--font-mono); font-variant-numeric: tabular-nums; color: var(--ink); }
.sn b i { font-style: normal; font-size: calc(10px * var(--fs)); color: var(--mut); margin-left: 3px; font-family: var(--font-body); font-weight: 400; }
.sig-dims { display: flex; gap: 5px; flex-wrap: wrap; }
.engine-radar { width: 100%; height: 195px; }
.deep-progress { display: flex; align-items: center; gap: 9px; padding: 10px 14px; font-size: calc(12.5px * var(--fs)); flex-wrap: wrap; }
.deep-progress.err { border-color: var(--upl); background: var(--upw); }
.recent-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: calc(11.5px * var(--fs)); color: var(--mut); }
.plan-rows { display: grid; gap: 7px; }
.plan-row { display: flex; gap: 8px; align-items: center; padding: 7px 10px; border: 1px solid var(--line); border-radius: 8px; font-size: calc(12px * var(--fs)); color: var(--ink2); flex-wrap: wrap; }
.plan-row .k { font: 600 calc(10px * var(--fs))/1.4 var(--font-mono); letter-spacing: .1em; color: var(--mut); width: 44px; flex: none; text-transform: uppercase; }
.plan-row.stop { border-color: var(--dnl); background: var(--dn-1); }
.plan-row.target { border-color: var(--upl); background: var(--up-1); }
.plan-row .num { font-size: calc(12px * var(--fs)); font-weight: 600; }
.hist-row { display: flex; gap: 9px; align-items: center; flex-wrap: wrap; padding: 7px 0; border-bottom: 1px solid var(--line); font-size: calc(11.5px * var(--fs)); }
.hist-row:last-child { border-bottom: 0; }
.hist-row .dt { font: 400 calc(10.5px * var(--fs))/1 var(--font-mono); color: var(--dim); }
.hist-row .sum { color: var(--mut); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.edge-grid { display: flex; gap: 13px; flex-wrap: wrap; margin-top: 6px; }
.edge-cell { min-width: 96px; }
.edge-cell .lbl { font-size: calc(11px * var(--fs)); color: var(--mut); }
.edge-cell b { font: 500 calc(15px * var(--fs))/1.4 var(--font-mono); font-variant-numeric: tabular-nums; }
.edge-modal { width: min(930px, 94vw); }
.edge-charts { width: 100%; }
.edge-warn { padding: 10px 14px; margin-bottom: 6px; border-radius: var(--radius-sm); font-size: calc(12.5px * var(--fs)); background: var(--ambw); border: 1px solid var(--ambl); color: var(--amb); line-height: 1.6; }
.drop, .search-drop { position: absolute; top: calc(100% + 4px); left: 0; min-width: 180px; max-height: 240px; overflow: auto; background: var(--pn); border: 1px solid var(--line2); border-radius: 8px; box-shadow: 0 14px 34px -14px rgba(0,0,0,.55); z-index: 60; }
.drop-item, .search-drop > div { padding: 7px 10px; font-size: calc(12px * var(--fs)); cursor: pointer; color: var(--ink2); display: flex; gap: 8px; align-items: baseline; }
.drop-item:hover, .search-drop > div:hover { background: var(--pn2); color: var(--ink); }
.drop-empty { padding: 8px 10px; color: var(--mut); font-size: calc(11.5px * var(--fs)); }
.catal-list { display: flex; flex-direction: column; gap: 6px; }
.catal-row { display: flex; align-items: center; gap: 9px; font-size: calc(12px * var(--fs)); }
.catal-row .mono { flex: none; width: 39px; font-size: calc(10.5px * var(--fs)); color: var(--dim); }
.catal-row .tag { flex: none; min-width: 52px; justify-content: center; }
.catal-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink2); }
.stock-switcher { display: inline-flex; align-items: center; gap: 7px; }
.stock-switch-pos { font: 500 calc(11px * var(--fs))/1 var(--font-mono); color: var(--mut); font-variant-numeric: tabular-nums; }

/* ---------- AI 深析报告（DeepReport 组件，类名保持兼容） ---------- */

.deep-report { display: grid; gap: 10px; }
.dr-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dr-head .conf { font-size: calc(11.5px * var(--fs)); color: var(--mut); }
.dr-head .conf b { color: var(--ink); }
.dr-why { font-size: calc(12px * var(--fs)); color: var(--ink2); background: var(--pn2); border-radius: var(--radius-sm); padding: 8px 10px; }
.dr-section { display: grid; gap: 6px; }
.dr-section .lbl, .deep-report .lbl { font: 600 calc(10px * var(--fs))/1.4 var(--font-mono); letter-spacing: .12em; text-transform: uppercase; color: var(--mut); }
.dr-entries { display: grid; gap: 5px; }
.dr-entry { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; font-size: calc(12px * var(--fs)); color: var(--ink2); }
.dr-entry b { color: var(--ink); font-family: var(--font-mono); }
.plan-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 8px; }
.plan-cell { background: var(--pn2); border-radius: var(--radius-sm); padding: 8px 10px; display: grid; gap: 2px; }
.plan-cell.stop-cell { border: 1px solid var(--dnl); }
.plan-cell.target-cell { border: 1px solid var(--upl); }
.plan-cell .val { font: 600 calc(14px * var(--fs))/1.3 var(--font-mono); font-variant-numeric: tabular-nums; }
.plan-cell .val.up { color: var(--up); }
.plan-cell .val.down { color: var(--dn); }
.dr-levels { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.dr-col { display: grid; gap: 4px; font-size: calc(12px * var(--fs)); color: var(--ink2); }
.dr-col > b { font-size: calc(11px * var(--fs)); }
.dr-col b.mono { font-weight: 600; color: var(--ink); }
.dr-scenarios { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 8px; }
.dr-scenario { background: var(--pn2); border-radius: var(--radius-sm); padding: 8px 10px; font-size: calc(12px * var(--fs)); color: var(--ink2); display: grid; gap: 3px; }
.dr-scenario b { color: var(--ink); }
.scores { display: grid; gap: 6px; }
.score-row { display: grid; grid-template-columns: 74px minmax(0, 1fr) 30px; gap: 8px; align-items: center; }
.score-name { font-size: calc(11px * var(--fs)); color: var(--ink2); }
.score-bar { height: 6px; border-radius: 3px; background: var(--pn3); overflow: hidden; }
.score-fill { display: block; height: 100%; border-radius: 3px; background: linear-gradient(90deg, var(--ambl), var(--amb)); }
.score-fill.risk { background: linear-gradient(90deg, var(--dnl), var(--dn)); }
.score-val { font: 600 calc(11.5px * var(--fs))/1 var(--font-mono); text-align: right; color: var(--ink); }
.trc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 8px; }
.trc-card { background: var(--pn2); border-radius: var(--radius-sm); padding: 9px 11px; display: grid; gap: 5px; font-size: calc(12px * var(--fs)); color: var(--ink2); }
.trc-card ul { padding-left: 16px; display: grid; gap: 3px; }
.trc-card.th { border-left: 2px solid var(--blu); }
.trc-card.ri { border-left: 2px solid var(--up); }
.trc-card.ca { border-left: 2px solid var(--amb); }
.dr-inval { font-size: calc(12px * var(--fs)); color: var(--ink2); display: grid; gap: 4px; }
.dr-inval ul { padding-left: 16px; display: grid; gap: 3px; }
.dr-edge { font-size: calc(12px * var(--fs)); color: var(--ink2); }
.dr-edge .tag { margin-right: 6px; }
.dr-summary { font-size: calc(12.5px * var(--fs)); line-height: 1.75; color: var(--ink); background: var(--pn2); border-radius: var(--radius-sm); padding: 9px 11px; }
.dr-detail .dr-detail-body { font-size: calc(12px * var(--fs)); line-height: 1.8; color: var(--ink2); white-space: pre-wrap; background: var(--pn2); border-radius: var(--radius-sm); padding: 9px 11px; }

/* ---------- 运行进度（ProgressPanel 组件，类名保持兼容） ---------- */

.run-progress { padding: 12px 14px; }
.progress-head { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; flex-wrap: wrap; }
.stage-chip.error { color: var(--up); border-color: var(--upl); background: var(--upw); }
.stage-chip.done { color: var(--dn); border-color: var(--dnl); background: var(--dnw); }
.rp-title { font-size: calc(13px * var(--fs)); font-weight: 600; }
.rp-runid { max-width: 18ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pbar { height: 6px; border-radius: 999px; background: var(--pn3); overflow: hidden; margin-bottom: 12px; }
.pfill { height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--blu), #8fb8f9); transition: width .4s var(--ease); }
.pfill.error { background: var(--up); }
.pfill.done { background: var(--dn); }
.rp-body { display: flex; align-items: center; justify-content: space-between; gap: 10px 18px; flex-wrap: wrap; background: var(--pn2); border-radius: var(--radius-sm); padding: 11px 13px; margin-bottom: 10px; }
.rp-steps { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; list-style: none; }
.rp-step { display: flex; align-items: center; gap: 7px; font-size: calc(12px * var(--fs)); color: var(--mut); white-space: nowrap; }
.rp-step:not(:last-child)::after { content: ""; display: inline-block; width: 15px; height: 1px; background: var(--line2); margin-left: 8px; }
.rp-dot { width: 9px; height: 9px; flex: none; border-radius: 50%; border: 1px solid var(--line2); }
.rp-step.active { color: var(--ink); font-weight: 600; }
.rp-step.active .rp-dot { background: var(--blu); border-color: var(--blu); animation: pulse 1.7s var(--ease) infinite; }
@keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(90,162,247,.35); } 70% { box-shadow: 0 0 0 7px rgba(90,162,247,0); } 100% { box-shadow: 0 0 0 0 rgba(90,162,247,0); } }
.rp-step.done { color: var(--ink2); }
.rp-step.done .rp-dot { background: var(--mut); border-color: var(--mut); }
.rp-step.done .rp-name { text-decoration: line-through; text-decoration-color: var(--dim); }
.rp-step.fail { color: var(--up); font-weight: 600; }
.rp-step.fail .rp-dot { background: var(--up); border-color: var(--up); animation: none; }
.rp-count { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
.rp-count b { font: 300 calc(26px * var(--fs))/1 var(--font-dis); font-variant-numeric: tabular-nums; }
.rp-count b i { font-style: normal; font-size: calc(12px * var(--fs)); color: var(--mut); margin-left: 2px; }
.rp-sub { font-size: calc(11.5px * var(--fs)); color: var(--mut); font-variant-numeric: tabular-nums; }
.rp-logs-toggle { display: inline-flex; align-items: center; gap: 6px; border: 0; background: none; padding: 0; cursor: pointer; font: inherit; font-size: calc(11.5px * var(--fs)); color: var(--mut); }
.rp-logs-toggle:hover { color: var(--ink); }
.rp-caret { width: 7px; height: 7px; flex: none; border-right: 1px solid currentColor; border-bottom: 1px solid currentColor; transform: rotate(-45deg) translateY(-1px); transition: transform var(--dur) var(--ease); }
.rp-caret.open { transform: rotate(45deg) translateY(-2px); }
.logs {
  background: #0a0d13; border: 1px solid var(--line); border-radius: var(--radius-sm); color: #c9d2df;
  padding: 10px 11px; max-height: 175px; overflow-y: auto;
  font-family: var(--font-mono); font-size: calc(11.5px * var(--fs)); line-height: 1.7; font-variant-numeric: tabular-nums;
}
.log-line { white-space: pre-wrap; overflow-wrap: break-word; }

/* ---------- 形态扫描 / 数据管理 / 设置 ---------- */

.prow { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.hbanner { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: var(--radius-md); border: 1px solid var(--dnl); background: var(--dn-1); font-size: calc(12.5px * var(--fs)); color: var(--ink2); flex-wrap: wrap; }
.hbanner.warn { border-color: var(--ambl); background: var(--amb-soft); }
.hbanner b { color: var(--ink); }
.hbanner .ops { margin-left: auto; }
.int-item { display: flex; align-items: center; gap: 9px; padding: 8px 4px; border-bottom: 1px solid var(--line); font-size: calc(12px * var(--fs)); color: var(--ink2); flex-wrap: wrap; }
.int-item:last-child { border-bottom: 0; }
.int-item .ic { width: 8px; height: 8px; border-radius: 50%; flex: none; background: var(--mut); }
.int-item.bad .ic { background: var(--up); box-shadow: 0 0 6px var(--upl); }
.int-item.note .ic { background: var(--dim); }
.int-item .ops { margin-left: auto; display: flex; gap: 6px; }
.int-ok { color: var(--dn); font-size: calc(12.5px * var(--fs)); padding: 6px 0; }
.busy-note { display: flex; align-items: center; gap: 8px; margin-top: 10px; font-size: calc(12px * var(--fs)); color: var(--amb); }
.busy-note .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--amb); animation: blink 1.2s steps(2) infinite; }
.op-hint { margin-top: 9px; font-size: calc(10.5px * var(--fs)); color: var(--dim); line-height: 1.7; }
.gapchips { display: flex; gap: 5px; flex-wrap: wrap; align-items: center; margin-top: 8px; font-size: calc(11px * var(--fs)); color: var(--mut); }
.snav { display: grid; gap: 3px; position: sticky; top: 0; }
.snav button { display: flex; align-items: center; gap: 9px; min-height: 34px; padding: 0 11px; border: 0; border-radius: 8px; background: transparent; color: var(--mut); font: 500 calc(12.5px * var(--fs))/1 var(--font-body); cursor: pointer; text-align: left; transition: all var(--dur) var(--ease); }
.snav button:hover { color: var(--ink); background: var(--pn2); }
.snav button.on { background: var(--pn2); color: var(--ink); box-shadow: inset 2px 0 0 var(--amb); }
.frow { display: grid; grid-template-columns: 130px minmax(0, 1fr); gap: 8px 12px; align-items: center; margin-bottom: 9px; }
.frow > label { font-size: calc(11.5px * var(--fs)); color: var(--mut); }
.frow .wide { grid-column: 1 / -1; }
.slot { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 6px; font: 700 calc(11px * var(--fs))/1 var(--font-mono); flex: none; }
.slot.a { background: var(--pn3); color: var(--ink); border: 1px solid var(--line2); }
.slot.b { background: var(--ambw); color: var(--amb); border: 1px solid var(--ambl); }
.savebar { position: sticky; bottom: 0; display: flex; gap: 8px; align-items: center; padding: 12px 0 2px; background: linear-gradient(transparent, var(--bg) 32%); z-index: 10; }
.assign-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px 18px; }
.assign-grid label { display: flex; flex-direction: column; gap: 4px; font-size: calc(11.5px * var(--fs)); color: var(--mut); }
.join { display: inline-flex; }
.join > .btn { border-radius: var(--radius-sm) 0 0 var(--radius-sm); }
.join > select { border-radius: 0 var(--radius-sm) var(--radius-sm) 0; border-left: 0; }

/* ---------- 手机底栏与窄屏 ---------- */

@media (max-width: 1180px) {
  .bgrid { grid-template-columns: 1fr; }
  .g2 { grid-template-columns: 1fr; }
  .g3 { grid-template-columns: 1fr; }
  .ticker { display: none; }
}

.cycle-pnl .rg-row { display: flex; align-items: center; gap: 14px; }
.cycle-pnl .dec-wrap { margin-top: 10px; }
.cycle-pnl .dist { display: grid; gap: 5px; margin-top: 12px; }
.cycle-pnl .udline { display: flex; justify-content: space-between; margin-top: 6px; font-size: 10.5px; }
@media (max-width: 700px) {
  .cycle-pnl .sec { padding: 6px 9px; }
  .cycle-pnl .rg-row { gap: 10px; }
  .cycle-pnl .ring { width: 50px; height: 42px; }
  .cycle-pnl .ring b { font-size: 12px; bottom: 3px; }
  .cycle-pnl .dec-wrap { margin-top: 5px; }
  .cycle-pnl .dist { gap: 3px; margin-top: 7px; }
  .cycle-pnl .udline { margin-top: 3px; }
  .cycle-pnl .drow { gap: 4px; }
@media (max-width: 700px) {
  .picks { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .pick { padding: 8px 9px; }
  .pick .spark { height: 24px; }
  .shell { grid-template-columns: minmax(0, 1fr); grid-template-rows: var(--top-h) minmax(0, 1fr) auto; }
  .rail { display: none; }
  .top { grid-column: 1; gap: 8px; padding: 0 10px; }
  .gsearch { flex: 1; min-width: 0; width: auto; }
  .gsearch .kbd, .llmled { display: none; }
  .clockbox { font-size: calc(10.5px * var(--fs)); }
  .page { grid-column: 1; padding: 12px 10px 28px; }
  .bnav { display: flex; grid-column: 1; align-items: stretch; gap: 2px; border-top: 1px solid var(--line); background: var(--bg2); padding: 5px 6px calc(5px + env(safe-area-inset-bottom)); }
  .bnav-item { flex: 1; display: grid; justify-items: center; gap: 3px; padding: 5px 0; border: 0; border-radius: 8px; background: transparent; color: var(--mut); font: 500 calc(9px * var(--fs))/1 var(--font-body); cursor: pointer; }
  .bnav-item .lucide, .bnav-item .ic { width: 17px; height: 17px; }
  .bnav-item.on { color: var(--amb); background: var(--ambw); }
  .tbt { min-width: 640px; }
  .k3, .k4, .k6 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pick-s { font-size: calc(14px * var(--fs)); }
  .ph .ops .btn { min-height: 30px; }
  .toasts { bottom: calc(64px + env(safe-area-inset-bottom)); }
  input, select, textarea { font-size: 16px; }
  .frow { grid-template-columns: 1fr; }
  .modal-mask { padding: 10px; }
}

/* ---------- 实现期补遗 ---------- */

.confirm-msg { font-size: calc(13px * var(--fs)); line-height: 1.75; color: var(--ink2); white-space: pre-wrap; }
.setgrid { display: grid; grid-template-columns: 200px minmax(0, 1fr); gap: 12px; align-items: start; }
.plan-sec details summary { cursor: pointer; list-style: none; }
.plan-sec details summary::-webkit-details-marker { display: none; }
.plan-sec details[open] summary { margin-bottom: 4px; }
.plan-sec summary h4 { color: var(--amb); }
.tbt td.mono { font-family: var(--font-mono); font-size: calc(11px * var(--fs)); color: var(--mut); }
.gsearch .lucide { width: 13px; height: 13px; color: var(--dim); }
@media (max-width: 700px) {
  .setgrid { grid-template-columns: 1fr; }
  .snav { position: static; display: grid; grid-template-columns: repeat(3, 1fr); }
}

/* ---------- 面板内小节（合并卡片后的列内分隔） ---------- */
.sec { padding: 2px 0 10px; }
.sec + .sec { border-top: 1px solid var(--line); margin-top: 2px; padding-top: 11px; }
.sec:last-child { padding-bottom: 2px; }
.sec .pnl-h { margin-bottom: 9px; }
