/* 版式：一套看板。左边一条导航，右边一次只看一块板：总览、持仓、决策、新闻、业绩、系统。
   冷色的底、白色的卡片、等宽的数字。颜色只有三处有含义：账户的三种颜色、涨跌的蓝和红、提醒的黄。 */
:root {
  color-scheme: light;
  --bg: #f2f4f6; --surface: #ffffff;
  --ink: #0f1419; --ink-2: #47525d; --muted: #7b8691;
  --rule: #e3e7eb; --axis: #c3cbd2; --border: rgba(15, 20, 25, .09);
  --series-1: #2a78d6; --series-2: #eb6834; --series-3: #1baf7a;
  --pos: #2a78d6; --neg: #e34948; --zero: #eceff2;
  --forward: rgba(15, 20, 25, .05);
  --warn-bg: #fff4d6; --warn-ink: #5a4200; --caution: #b7791f;
  --font-ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", system-ui, sans-serif;
  --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;
  --radius: 14px;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    --bg: #0b0e11; --surface: #13171b;
    --ink: #e9edf0; --ink-2: #b4bdc6; --muted: #7b8691;
    --rule: #222930; --axis: #343d46; --border: rgba(255, 255, 255, .09);
    --series-1: #3987e5; --series-2: #d95926; --series-3: #199e70;
    --pos: #3987e5; --neg: #e66767; --zero: #262d34;
    --forward: rgba(255, 255, 255, .06);
    --warn-bg: #2e2610; --warn-ink: #f3dfa6; --caution: #dfb04f;
  }
}
:root[data-theme="dark"] {
  color-scheme: dark;
  --bg: #0b0e11; --surface: #13171b;
  --ink: #e9edf0; --ink-2: #b4bdc6; --muted: #7b8691;
  --rule: #222930; --axis: #343d46; --border: rgba(255, 255, 255, .09);
  --series-1: #3987e5; --series-2: #d95926; --series-3: #199e70;
  --pos: #3987e5; --neg: #e66767; --zero: #262d34;
  --forward: rgba(255, 255, 255, .06);
  --warn-bg: #2e2610; --warn-ink: #f3dfa6; --caution: #dfb04f;
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; background: var(--bg); color: var(--ink); font: 14.5px/1.6 var(--font-ui); -webkit-font-smoothing: antialiased; }
h1, h2, h3, p, dl, dd, ul, figure { margin: 0; }
button { font: inherit; color: inherit; }
:focus-visible { outline: 2px solid var(--series-1); outline-offset: 2px; border-radius: 6px; }
.mono { font-family: var(--font-mono); }
/* 手机端才有的东西（导航行、底栏、弹层、手机版的列表）：这里一律藏着，760 宽以下由 mobile.css 打开 */
.m-nav, .m-tabbar, .m-only, .m-sheet-layer { display: none; }

/* ---- 外壳：导航和顶栏 ---- */
.app { display: grid; grid-template-columns: 212px minmax(0, 1fr); min-height: 100vh; }
.rail { position: sticky; top: 0; height: 100vh; display: flex; flex-direction: column; gap: 24px; padding: 20px 12px 18px; border-right: 1px solid var(--rule); }
.brand { display: flex; align-items: center; gap: 10px; color: var(--ink); text-decoration: none; padding: 0 8px; }
.brand img { width: 28px; height: 28px; flex: none; display: block; }
.brand span { display: flex; flex-direction: column; line-height: 1.25; }
.brand b { font-size: 16.5px; font-weight: 700; letter-spacing: -.02em; }
.brand small { color: var(--muted); font-size: 12px; }
.rail-nav { display: flex; flex-direction: column; gap: 2px; }
.nav-item { display: flex; align-items: center; gap: 11px; padding: 9px 10px; border-radius: 10px; color: var(--ink-2); text-decoration: none; font-size: 14px; }
.nav-item svg, .tab svg { width: 18px; height: 18px; flex: none; }
.nav-item:hover { background: var(--rule); color: var(--ink); }
.nav-item[aria-current="page"] { background: var(--surface); color: var(--ink); font-weight: 650; box-shadow: 0 0 0 1px var(--border); }
.rail-foot { margin-top: auto; padding: 0 8px; display: flex; flex-direction: column; gap: 5px; font-size: 12px; color: var(--muted); }
.rail-foot b { color: var(--ink-2); font-weight: 600; font-family: var(--font-mono); font-size: 11.5px; }
.main { min-width: 0; display: flex; flex-direction: column; }
/* 内容这一列有最大宽度；屏幕更宽时在导航右边那块地方里居中，两边留白一样多 */
.topbar { display: flex; align-items: center; gap: 10px 20px; flex-wrap: wrap; padding: 20px 28px 0; max-width: 1296px; width: 100%; margin-inline: auto; }
.topbar .brand.compact { display: none; padding: 0; }
.where { min-width: 0; }
.where h1 { font-size: 22px; font-weight: 700; letter-spacing: -.02em; line-height: 1.3; }
.topbar .tools { margin-left: auto; }
.tabs { display: none; }
.views { padding: 22px 28px 36px; max-width: 1296px; width: 100%; margin-inline: auto; }
.view { display: flex; flex-direction: column; gap: 30px; }
#footer { padding: 0 28px 28px; font-size: 12px; color: var(--muted); max-width: 1296px; width: 100%; margin-inline: auto; }
@media (max-width: 880px) {
  .app { grid-template-columns: minmax(0, 1fr); }
  .rail { display: none; }
  .topbar { padding: 14px max(16px, env(safe-area-inset-right, 0px)) 0 max(16px, env(safe-area-inset-left, 0px)); }
  .topbar .brand.compact { display: flex; }
  .where h1 { font-size: 20px; }
  .tabs { display: flex; gap: 6px; overflow-x: auto; position: sticky; top: 0; z-index: 6; background: var(--bg); padding: 10px max(16px, env(safe-area-inset-right, 0px)) 10px max(16px, env(safe-area-inset-left, 0px)); border-bottom: 1px solid var(--rule); scrollbar-width: none; }
  .tabs::-webkit-scrollbar { display: none; }
  .tab { display: inline-flex; align-items: center; gap: 7px; padding: 7px 13px; border-radius: 999px; color: var(--ink-2); text-decoration: none; font-size: 13.5px; white-space: nowrap; border: 1px solid transparent; }
  .tab[aria-current="page"] { background: var(--surface); color: var(--ink); font-weight: 650; border-color: var(--border); }
  .views { padding: 18px max(16px, env(safe-area-inset-right, 0px)) 28px max(16px, env(safe-area-inset-left, 0px)); }
  .view { gap: 26px; }
  #footer { padding: 0 max(16px, env(safe-area-inset-right, 0px)) 24px max(16px, env(safe-area-inset-left, 0px)); }
}
.tools { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 11px; border: 1px solid var(--border); border-radius: 999px; font-size: 12.5px; color: var(--ink-2); background: var(--surface); white-space: nowrap; }
.chip.warn { background: var(--warn-bg); color: var(--warn-ink); border-color: transparent; font-weight: 600; }
.chip svg { width: 14px; height: 14px; flex: none; }

/* ---- 开篇：模拟盘第几天 ---- */
.hero { display: flex; flex-direction: column; gap: 22px; }
.hero-top { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 16px 56px; align-items: end; }
.eyebrow { font-size: 12px; letter-spacing: .14em; color: var(--muted); font-weight: 600; }
.count { display: flex; align-items: baseline; gap: 10px; font-weight: 700; line-height: .9; margin-top: 6px; }
.count small { font-size: clamp(18px, 2.4vw, 24px); font-weight: 600; color: var(--ink-2); }
.count b { font-size: clamp(60px, 8vw, 92px); letter-spacing: -.05em; font-weight: 700; }
.lede { max-width: 58ch; color: var(--ink-2); font-size: 15px; padding-bottom: 8px; }
.lede strong { color: var(--ink); font-weight: 600; }
.lede p + p { margin-top: 8px; font-size: 13px; color: var(--muted); }
/* 2026-11-14：大字和两段话压成一行（.perf-days），标尺更矮，整块放进一张卡 */
.perf-top { display: flex; flex-direction: column; gap: 8px; padding: 14px 20px 12px; }
.perf-days { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 0; font-size: 13px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.perf-days > span + span::before { content: "·"; margin: 0 9px; color: var(--axis); }
.perf-days-n { color: var(--ink); font-size: 14px; font-weight: 600; }
.perf-days-n b { font-size: 20px; font-weight: 700; letter-spacing: -.02em; margin: 0 1px; }
.perf-empty { font-size: 13px; color: var(--ink-2); }
.perf-kind { margin-left: 4px; font: 11.5px var(--font-ui); color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 8px; white-space: nowrap; }
.perf-kind.live { background: var(--ink); color: var(--surface); border-color: var(--ink); }
.perf-tag { font-size: 12px; color: var(--muted); }
.ruler svg { display: block; width: 100%; overflow: visible; }
.ruler text { font: 11px var(--font-mono); fill: var(--muted); }
.ruler text.flag { fill: var(--ink); font: 600 12px var(--font-ui); }
.ruler text.span { font: 12px var(--font-ui); }

/* ---- 小节标题 ---- */
.section { display: flex; flex-direction: column; gap: 14px; }
.section > header { display: flex; align-items: baseline; gap: 6px 14px; flex-wrap: wrap; }
.section h2 { font-size: 19px; font-weight: 700; letter-spacing: -.01em; }
.section > header p { color: var(--muted); font-size: 13px; }
.section > header .more { margin-left: auto; font-size: 13px; color: var(--ink-2); text-decoration: none; white-space: nowrap; }
.section > header .more:hover { color: var(--ink); text-decoration: underline; }
.section > header .ranges { margin-left: auto; }
.duo { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 26px 20px; align-items: start; }
@media (max-width: 1040px) { .duo { grid-template-columns: minmax(0, 1fr); } }
.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }

/* ---- 账户的色条、小标签、涨跌、小走势、占比条（总览和各板共用） ---- */
.key { display: inline-block; width: 18px; height: 3px; border-radius: 2px; background: var(--c); flex: none; }
.key.hollow { background: none; height: 7px; width: 16px; border: 1.5px solid var(--c); border-radius: 4px; }
.tag { margin-left: auto; font-size: 11.5px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.delta { display: inline-flex; align-items: center; gap: 4px; }
.delta svg { width: 9px; height: 9px; }
.spark { position: relative; margin-right: 5px; }
.spark svg { display: block; width: 100%; }
.spark i { position: absolute; width: 9px; height: 9px; border-radius: 50%; background: var(--c); border: 2px solid var(--surface); transform: translate(-50%, -50%); left: 100%; }
.meter { height: 6px; border-radius: 3px; background: color-mix(in oklab, var(--c) 18%, var(--surface)); overflow: hidden; }
.meter i { display: block; height: 100%; background: var(--c); border-radius: 3px 0 0 3px; }

/* ---- 业绩 ---- */
.ranges { display: inline-flex; gap: 2px; padding: 3px; background: var(--rule); border-radius: 10px; align-self: flex-start; flex-wrap: wrap; }
.ranges button { border: 0; background: none; padding: 5px 14px; border-radius: 7px; font-size: 13px; color: var(--ink-2); cursor: pointer; display: inline-flex; align-items: center; gap: 7px; }
.ranges button:hover:not(:disabled) { color: var(--ink); }
.ranges button[aria-pressed="true"] { background: var(--surface); color: var(--ink); font-weight: 650; box-shadow: 0 0 0 1px var(--border); }
.ranges button:disabled { color: var(--muted); opacity: .6; cursor: not-allowed; }
.perf-head { padding: 16px 20px 6px; border-bottom: 1px solid var(--rule); }
.perf-chart { padding: 18px 20px 10px; min-width: 0; }
.perf-note { padding: 0 20px 16px; }
.plot { position: relative; }
.plot svg { display: block; width: 100%; outline: none; cursor: crosshair; }
.plot svg:focus-visible { outline: 2px solid var(--series-1); outline-offset: 4px; border-radius: 6px; }
.plot text { font: 11.5px var(--font-ui); fill: var(--muted); font-variant-numeric: tabular-nums; }
.plot text.title { fill: var(--ink-2); font-size: 12px; }
.plot text.end { fill: var(--ink-2); font-size: 12px; }
.plot text.zone { font-size: 12px; }
.plot text.zone.live { fill: var(--ink); font-weight: 650; }
.tip { position: absolute; top: 0; left: 0; pointer-events: none; visibility: hidden; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 9px 12px; font-size: 12.5px; box-shadow: 0 6px 22px rgba(0, 0, 0, .14); white-space: nowrap; z-index: 2; }
.tip .when { display: flex; align-items: center; gap: 8px; color: var(--ink-2); margin-bottom: 4px; font-family: var(--font-mono); font-size: 12px; }
.tip .when em { font: normal 11.5px var(--font-ui); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; }
.tip .when em.live { background: var(--ink); color: var(--surface); border-color: var(--ink); }
.tip .row { display: grid; grid-template-columns: 18px 44px 1fr auto; align-items: center; gap: 8px; }
.tip .row b { font-weight: 650; font-variant-numeric: tabular-nums; }
.tip .row span { color: var(--ink-2); }
.tip .row u { text-decoration: none; color: var(--muted); font-variant-numeric: tabular-nums; }
.window { font: 12px var(--font-mono); color: var(--muted); line-height: 1.5; }
.fine { font-size: 12px; color: var(--muted); }

/* ---- 表格 ---- */
.scroll { overflow-x: auto; }
table { border-collapse: collapse; width: 100%; }
th, td { padding: 9px 12px; text-align: left; white-space: nowrap; border-bottom: 1px solid var(--rule); }
th { font-size: 12px; font-weight: 500; color: var(--muted); }
tbody tr:last-child td, tfoot tr:last-child td { border-bottom: 0; }
tfoot td { border-top: 1px solid var(--rule); color: var(--ink-2); }
td.r, th.r { text-align: right; font-variant-numeric: tabular-nums; }
.metrics td, .metrics th { padding: 9px 0 9px 24px; border-bottom: 0; }
.metrics td:first-child, .metrics th:first-child { padding-left: 0; }
.metrics thead th { padding-bottom: 2px; }
.metrics td.r { font-size: 18px; font-weight: 650; letter-spacing: -.01em; }
.metrics td .who { font-weight: 600; }
.wide th, .wide td { padding-left: 10px; padding-right: 10px; }
.wide th:first-child, .wide td:first-child { padding-left: 20px; }
.wide th:last-child, .wide td:last-child { padding-right: 20px; }
.ticker { display: flex; align-items: baseline; gap: 8px; }
.ticker b { font: 600 13.5px var(--font-mono); letter-spacing: .02em; }
.ticker span { color: var(--ink-2); }
.ticker small { font-size: 11.5px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; }
svg.mini { display: block; }
.gap { display: flex; align-items: center; gap: 10px; }
.gap-track { position: relative; width: 84px; height: 16px; flex: none; }
.gap-track::before { content: ""; position: absolute; left: 50%; top: 0; bottom: 0; width: 1px; background: var(--axis); }
.gap-track i { position: absolute; top: 5px; height: 6px; background: var(--ink-2); }
.gap-track i.up { left: 50%; border-radius: 0 3px 3px 0; }
.gap-track i.down { right: 50%; border-radius: 3px 0 0 3px; }
.gap b { font-weight: 600; font-variant-numeric: tabular-nums; min-width: 52px; }
.signal { display: inline-flex; align-items: center; gap: 6px; padding: 2px 10px 2px 8px; border-radius: 999px; font-size: 12.5px; border: 1px solid var(--axis); color: var(--ink-2); }
.signal.on { background: var(--ink); border-color: var(--ink); color: var(--surface); font-weight: 600; }
.signal svg { width: 9px; height: 9px; }
.weight { display: flex; align-items: center; gap: 8px; justify-content: flex-end; }
.weight-track { width: 52px; height: 6px; border-radius: 3px; background: var(--rule); flex: none; }
.weight-track i { display: block; height: 100%; border-radius: 3px; background: var(--c); }
.weight b { font-weight: 600; font-variant-numeric: tabular-nums; min-width: 46px; text-align: right; }
.side { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; padding: 1px 9px; border-radius: 999px; border: 1px solid var(--axis); }
.side.buy { background: var(--ink); color: var(--surface); border-color: var(--ink); }
.who { display: inline-flex; align-items: center; gap: 7px; }

/* ---- 逐月收益 ---- */
.months-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px 24px; flex-wrap: wrap; }
.scale { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); }
.scale i { display: block; width: 22px; height: 12px; }
.scale div { display: flex; gap: 2px; }
.scale div i:first-child { border-radius: 3px 0 0 3px; }
.scale div i:last-child { border-radius: 0 3px 3px 0; }
.heat { border-collapse: separate; border-spacing: 2px; margin-top: 14px; }
.heat th, .heat td { border: 0; padding: 0; text-align: center; font-variant-numeric: tabular-nums; }
.heat th { height: 26px; font-weight: 500; }
.heat td { height: 30px; min-width: 50px; font-size: 12.5px; border-radius: 4px; }
.heat td.year, .heat th.year { text-align: left; padding: 0 12px 0 0; font: 12.5px var(--font-mono); color: var(--ink-2); min-width: 0; }
.heat td.total, .heat th.total { text-align: right; padding: 0 0 0 14px; font-weight: 650; min-width: 68px; }
.heat .z, .scale .z { background: var(--zero); }
.heat .p1, .scale .p1 { background: color-mix(in oklab, var(--pos) 24%, var(--zero)); }
.heat .p2, .scale .p2 { background: color-mix(in oklab, var(--pos) 48%, var(--zero)); }
.heat .p3, .scale .p3 { background: color-mix(in oklab, var(--pos) 74%, var(--zero)); }
.heat .p4, .scale .p4 { background: var(--pos); }
.heat .n1, .scale .n1 { background: color-mix(in oklab, var(--neg) 24%, var(--zero)); }
.heat .n2, .scale .n2 { background: color-mix(in oklab, var(--neg) 48%, var(--zero)); }
.heat .n3, .scale .n3 { background: color-mix(in oklab, var(--neg) 74%, var(--zero)); }
.heat .n4, .scale .n4 { background: var(--neg); }
.heat .p3, .heat .p4, .heat .n3, .heat .n4 { color: #fff; font-weight: 500; }
.heat td.mark { box-shadow: inset 0 0 0 2px var(--ink); }
.pad { padding: 18px 20px; }

/* ---- 流水与方法 ---- */
.facts { display: flex; flex-wrap: wrap; gap: 6px 28px; font-size: 13px; color: var(--ink-2); }
.facts span { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.facts b { color: var(--ink); font-weight: 600; font-variant-numeric: tabular-nums; }
details.method { padding: 4px 20px; }
details.method summary { cursor: pointer; padding: 12px 0; font-weight: 650; font-size: 14px; }
details.method ul { padding: 0 0 14px 18px; color: var(--ink-2); font-size: 13.5px; max-width: 86ch; }
details.method li { margin: 5px 0; }
footer { color: var(--muted); font-size: 12px; border-top: 1px solid var(--rule); padding-top: 16px; }

@media (max-width: 640px) {
  .page { gap: 34px; }
  .hero-top { grid-template-columns: minmax(0, 1fr); }
  .perf-head, .perf-chart, .perf-note, .pad, .decisions { padding-left: 14px; padding-right: 14px; }
  .metrics td.r { font-size: 16px; }
}
@media (prefers-reduced-motion: no-preference) {
  .ranges button, .chip { transition: background-color .15s, color .15s, border-color .15s; }
}

/* ---- 模型分工 ---- */
/* 不用表格：窄屏上每一行改成上下叠放，不需要横向滚动才能看到状态 */
.routes { padding: 2px 20px; }
.route { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 4fr) minmax(0, 3fr); gap: 6px 28px; padding: 14px 0; border-bottom: 1px solid var(--rule); align-items: start; }
.route.provider { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr) minmax(0, 5fr) minmax(0, 3fr); }
.routes > :last-child { border-bottom: 0; }
.route.head { padding: 10px 0 8px; font-size: 12px; color: var(--muted); }
.route .r { text-align: right; font-variant-numeric: tabular-nums; }
.route b { font-weight: 650; }
.route .line { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 8px; }
.route .sub { display: block; margin-top: 3px; font-size: 12.5px; color: var(--ink-2); overflow-wrap: anywhere; }
.route .names { display: flex; flex-wrap: wrap; gap: 6px 16px; }
.route .names span { display: inline-flex; align-items: center; gap: 6px; font: 12.5px var(--font-mono); color: var(--ink-2); }
.route .names span.used { color: var(--ink); font-weight: 600; }
.route .names small, .route .from { font: 11.5px var(--font-ui); color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; white-space: nowrap; }
.route-hint { padding: 12px 0 14px; font-size: 12.5px; color: var(--ink-2); }
.route-hint code { font: 12px var(--font-mono); background: var(--bg); border-radius: 5px; padding: 1px 5px; overflow-wrap: anywhere; }
@media (max-width: 640px) {
  .routes { padding-left: 14px; padding-right: 14px; }
  .route, .route.provider { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .route.head { display: none; }
  .route .r { text-align: left; }
  .route [data-label]::before { content: attr(data-label); display: block; font-size: 12px; color: var(--muted); margin-bottom: 3px; }
}

/* 系统板 2026-11-14：一张紧凑的表（div 排的格子，一行约 40 高），每一项一个状态点；长表收进折叠（kit.js 的 fold） */
.sys-sum { font-size: 13px; color: var(--ink-2); font-weight: 600; }
.sys-sum.warn { color: var(--caution); }
.sys-sum:empty { display: none; }
.sys-table { display: flex; flex-direction: column; min-width: 0; }
.card.sys-table { overflow: hidden; }
.sys-tr { display: grid; align-items: center; gap: 2px 18px; padding: 8px 18px; min-height: 40px; font-size: 13px; color: var(--ink-2); min-width: 0; }
.sys-tr + .sys-tr { border-top: 1px solid var(--rule); }
.sys-th { min-height: 0; padding-top: 7px; padding-bottom: 7px; font-size: 12px; color: var(--muted); background: color-mix(in oklab, var(--bg) 55%, var(--surface)); }
.sys-tr .r { text-align: right; }
.sys-steps .sys-tr { grid-template-columns: minmax(96px, .9fr) minmax(0, 1.7fr) minmax(96px, .8fr) 128px; }
.sys-keys .sys-tr { grid-template-columns: minmax(84px, .6fr) minmax(0, 1.1fr) minmax(0, 2fr) 180px; }
.sys-sources .sys-tr { grid-template-columns: minmax(0, 1.3fr) minmax(0, 1.9fr) 104px 104px; min-height: 36px; padding-top: 6px; padding-bottom: 6px; }
.sys-pushes .sys-tr { grid-template-columns: minmax(0, 2fr) 52px minmax(0, 1.5fr) 160px; min-height: 36px; padding-top: 6px; padding-bottom: 6px; }
.fold-body > .sys-table { margin: 0 -18px -14px; }
.fold-body:has(> .sys-table) { padding-top: 0; }
.sys-name { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.sys-name b { color: var(--ink); font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sys-name small { font-size: 12px; color: var(--muted); white-space: nowrap; }
.sys-model { display: flex; align-items: baseline; flex-wrap: wrap; gap: 2px 8px; min-width: 0; }
.sys-model b { color: var(--ink); font-weight: 600; font-size: 12.5px; }
.sys-model small { font-size: 12px; color: var(--muted); }
.sys-env { font-style: normal; font: 11px var(--font-ui); color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; white-space: nowrap; }
.sys-state { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 2px 7px; min-width: 0; color: var(--ink); font-weight: 600; }
.sys-state small { font-size: 12px; color: var(--muted); font-weight: 400; }
.sys-state.off { color: var(--ink-2); font-weight: 500; }
.sys-state.warn { color: var(--caution); }
.sys-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ink-2); flex: none; }
.sys-dot.off { background: none; box-shadow: inset 0 0 0 1.5px var(--muted); }
.sys-dot.warn { background: var(--caution); box-shadow: 0 0 0 3px color-mix(in oklab, var(--caution) 22%, transparent); }
.sys-calls { font-variant-numeric: tabular-nums; white-space: nowrap; color: var(--ink); }
.sys-ok { font-size: 12px; white-space: nowrap; }
.sys-why { grid-column: 1 / -1; font-size: 12.5px; color: var(--warn-ink); background: var(--warn-bg); border-radius: 7px; padding: 4px 10px; margin: 2px 0 2px; overflow-wrap: anywhere; }
.sys-names { display: flex; flex-wrap: wrap; gap: 4px 14px; min-width: 0; }
.sys-names span { display: inline-flex; align-items: center; gap: 6px; font: 12.5px var(--font-mono); color: var(--ink-2); }
.sys-names span.used { color: var(--ink); font-weight: 600; }
.sys-names small { font: 11.5px var(--font-ui); color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; white-space: nowrap; }
.sys-stack { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.sys-line { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px; padding: 10px 18px; min-height: 44px; font-size: 13px; }
.sys-line-sep { width: 1px; height: 14px; background: var(--rule); }
.sys-warn { color: var(--caution); font-weight: 600; }
.sys-empty { padding: 0 4px; }
.sys-data .statline-item b { font-size: 14px; }
.method-list { margin: 0; padding: 4px 0 2px 18px; color: var(--ink-2); font-size: 13.5px; max-width: 86ch; }
.method-list li { margin: 5px 0; }
@media (max-width: 1040px) {
  .sys-keys .sys-tr { grid-template-columns: minmax(84px, .6fr) minmax(0, 1.2fr) minmax(0, 1.6fr) 150px; }
}

/* ---- 事后评估 ---- */
.hindsight { padding: 0 0 14px; display: flex; flex-direction: column; gap: 12px; font-size: 13.5px; color: var(--ink-2); }
.hindsight table { width: auto; min-width: 420px; }
.hindsight th, .hindsight td { padding: 7px 14px 7px 0; }
.hindsight td.r, .hindsight th.r { padding: 7px 0 7px 14px; }
.hindsight td b { color: var(--ink); font-weight: 600; }
.hindsight .thin { color: var(--muted); }
.hq { border-top: 1px solid var(--rule); padding-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.hq-title { color: var(--ink); font-weight: 600; }
.hq-cells { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px 20px; }
.hq-cell { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.hq-cell b { font-size: 17px; font-weight: 650; color: var(--ink); font-variant-numeric: tabular-nums; }
.hq-cell.thin b { color: var(--muted); }
.after { border-top: 1px solid var(--rule); padding-top: 10px; display: flex; flex-direction: column; gap: 6px; }
.after table { width: auto; min-width: 320px; }
.after th, .after td { padding: 5px 12px 5px 0; font-size: 13px; }
.after td.r, .after th.r { padding: 5px 0 5px 12px; }

p.trouble { padding: 10px 14px; border-radius: 8px; background: var(--warn-bg); color: var(--warn-ink); font-size: 13.5px; }

/* ---- 信息 ---- */
.news { padding: 4px 20px; }
.news .empty { padding: 18px 0; color: var(--ink-2); font-size: 13.5px; display: flex; flex-direction: column; gap: 6px; }
.news .empty b { color: var(--ink); font-size: 15px; font-weight: 650; }
.news-item { display: grid; grid-template-columns: 92px minmax(0, 1fr); gap: 4px 16px; padding: 11px 0; border-bottom: 1px solid var(--rule); }
.news-item:last-of-type { border-bottom: 0; }
.news-item time { font: 12px var(--font-mono); color: var(--muted); padding-top: 2px; white-space: nowrap; }
.news-item .what { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.news-item a { color: var(--ink); text-decoration: none; overflow-wrap: anywhere; }
.news-item a:hover { text-decoration: underline; }
.news-item .fact { font-weight: 600; }
.news-item .origin { font-size: 12.5px; color: var(--ink-2); }
.news-item.major .fact::before { content: "重大"; font-size: 11.5px; font-weight: 600; background: var(--ink); color: var(--surface); border-radius: 999px; padding: 1px 8px; margin-right: 8px; vertical-align: 1px; }
.news-item .meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 12px; color: var(--muted); }
.news-item .meta b { font: 600 11.5px var(--font-mono); color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; }
.news-item .same { margin-top: 3px; font-size: 12.5px; }
.news-item .same > summary { cursor: pointer; color: var(--ink-2); width: fit-content; }
.news-item .other { display: flex; flex-direction: column; gap: 2px; padding: 7px 0 7px 12px; margin-top: 6px; border-left: 2px solid var(--rule); color: var(--ink-2); }
.news-item .other .src { font-size: 12px; color: var(--muted); }
.news-more { padding: 10px 0 14px; font-size: 12px; color: var(--muted); }
.news-rest { border-top: 1px solid var(--rule); }
.news-rest > summary { cursor: pointer; padding: 11px 0; font-size: 13px; color: var(--ink-2); }
.news-rest[open] > summary { border-bottom: 1px solid var(--rule); }
details.method .routes { padding: 0 0 6px; }
@media (max-width: 640px) {
  .news { padding-left: 14px; padding-right: 14px; }
  .news-item { grid-template-columns: minmax(0, 1fr); }
}

/* ---- AI 决策日志 ---- */
.decisions { padding: 4px 20px; }
.decisions .trouble { margin: 14px 0 4px; padding: 10px 14px; border-radius: 8px; background: var(--warn-bg); color: var(--warn-ink); font-size: 13.5px; }
.decisions .empty { padding: 18px 0; color: var(--ink-2); font-size: 13.5px; display: flex; flex-direction: column; gap: 6px; }
.decisions .empty b { color: var(--ink); font-size: 15px; font-weight: 650; }
.decision { border-bottom: 1px solid var(--rule); }
.decision:last-child { border-bottom: 0; }
.decision > summary { display: flex; align-items: center; gap: 8px 14px; flex-wrap: wrap; padding: 12px 0; cursor: pointer; font-size: 13.5px; }
.decision > summary .outcome { flex: 1 1 220px; min-width: 0; color: var(--ink); font-variant-numeric: tabular-nums; }
.state { font-size: 12.5px; padding: 1px 10px; border-radius: 999px; border: 1px solid var(--axis); color: var(--ink-2); white-space: nowrap; }
.state.on { background: var(--ink); border-color: var(--ink); color: var(--surface); font-weight: 600; }
.decision-body { padding: 0 0 16px; display: flex; flex-direction: column; gap: 10px; max-width: 86ch; }
.decision-body .rationale { font-size: 14.5px; line-height: 1.7; }
.dec-why-head { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); margin-bottom: -4px; }
.dec-why-head .made { font-size: 11px; font-weight: 600; color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; white-space: nowrap; }
.decision-body table { width: auto; min-width: 320px; }
.decision-body ul { padding-left: 18px; }
.review { border: 1px solid var(--rule); border-radius: 10px; padding: 10px 14px; display: flex; flex-direction: column; gap: 6px; }
.review.no { border-color: var(--axis); background: var(--bg); }
.review-head { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; font-size: 13px; }
.review-head .mono { font-size: 12.5px; color: var(--ink-2); }
.review p { font-size: 14px; line-height: 1.65; }
.review p.fine { font-size: 12px; }
.raw summary { cursor: pointer; font-size: 12.5px; color: var(--ink-2); }
.seen-item { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 4px 12px; align-items: start; padding: 8px 0; border-bottom: 1px solid var(--rule); font-size: 13.5px; }
.seen-item:last-child { border-bottom: 0; }
.seen-item .state { text-align: center; padding: 1px 0; }
.seen-item .fine { display: block; margin-top: 2px; }
.raw.seen > p { margin-top: 8px; }
.raw pre { margin: 8px 0 0; padding: 12px 14px; background: var(--bg); border-radius: 8px; font: 12px/1.55 var(--font-mono); overflow-x: auto; max-height: 360px; }

/* ---- 读取中和读取失败 ---- */

/* ---- 看板上的一排数字 ---- */
.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(148px, 1fr)); gap: 12px; }
.kpi { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 14px 16px 13px; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.kpi .label { font-size: 12.5px; color: var(--muted); }
.kpi .value { font-size: 25px; font-weight: 700; letter-spacing: -.025em; line-height: 1.2; }
.kpi .sub { font-size: 12.5px; color: var(--ink-2); }
.kpi .sub span { display: inline-flex; align-items: center; gap: 5px; }

/* ---- 持仓 ---- */
.split { display: grid; grid-template-columns: minmax(0, 1fr) 316px; gap: 20px; align-items: start; }
@media (max-width: 1120px) { .split { grid-template-columns: minmax(0, 1fr); } }
.stack { display: flex; flex-direction: column; gap: 14px; padding-top: 43px; }
@media (max-width: 1120px) { .stack { padding-top: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); } }
.stack .card { padding: 16px 18px; display: flex; flex-direction: column; gap: 12px; }
.stack h3 { font-size: 14px; font-weight: 650; }
.quiet { font-size: 12.5px; color: var(--muted); }
.big-figure { font-size: 25px; font-weight: 700; letter-spacing: -.025em; line-height: 1.2; }
.track { position: relative; height: 8px; border-radius: 4px; background: color-mix(in oklab, var(--c) 16%, var(--surface)); }
.track i { position: absolute; inset: 0 auto 0 0; border-radius: 4px; background: var(--c); min-width: 2px; }
.track u { position: absolute; top: -4px; bottom: -4px; width: 2px; margin-left: -1px; border-radius: 1px; background: var(--ink); }
.moves { list-style: none; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.moves li { display: grid; grid-template-columns: 52px 1fr auto; align-items: center; gap: 8px; font-variant-numeric: tabular-nums; }
.meter-row { display: grid; grid-template-columns: 1fr auto; gap: 6px 12px; font-size: 13px; }
.meter-row span { color: var(--ink-2); }
.meter-row b { font-weight: 600; font-variant-numeric: tabular-nums; }
.meter-row .track { grid-column: 1 / -1; }

/* ---- 新闻 ---- */
.toolbar { display: flex; flex-direction: column; gap: 10px; }
.toolbar .row2 { display: flex; gap: 10px 16px; flex-wrap: wrap; align-items: center; justify-content: space-between; }
.pills { display: flex; gap: 6px; flex-wrap: wrap; }
.pill { border: 1px solid var(--border); background: var(--surface); border-radius: 999px; padding: 5px 13px; font-size: 13px; color: var(--ink-2); cursor: pointer; display: inline-flex; gap: 7px; align-items: center; white-space: nowrap; }
.pill:hover { color: var(--ink); border-color: var(--axis); }
.pill em { font-style: normal; font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.pill[aria-pressed="true"] { background: var(--ink); color: var(--surface); border-color: var(--ink); font-weight: 600; }
.pill[aria-pressed="true"] em { color: inherit; opacity: .7; }
.imp { font-size: 11.5px; border-radius: 999px; padding: 1px 9px; border: 1px solid var(--axis); color: var(--ink-2); white-space: nowrap; flex: none; }
.imp.l3 { background: var(--ink); color: var(--surface); border-color: var(--ink); font-weight: 600; }
.imp.l1 { border-color: transparent; color: var(--muted); padding-right: 0; }
.syms { display: inline-flex; gap: 4px; flex-wrap: wrap; }
.syms b { font: 600 11.5px var(--font-mono); color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; }
.feed { display: flex; flex-direction: column; }
.day { position: sticky; top: 0; z-index: 3; background: var(--bg); padding: 12px 0 6px; display: flex; align-items: baseline; gap: 10px; font-size: 12.5px; color: var(--muted); }
.day b { font-size: 15px; color: var(--ink); font-weight: 650; }
.event { display: grid; grid-template-columns: 44px 17px minmax(0, 1fr); gap: 0 10px; }
.event > time { font: 12px var(--font-mono); color: var(--muted); padding-top: 19px; text-align: right; }
.event .line { position: relative; }
.event .line::before { content: ""; position: absolute; left: 8px; top: 0; bottom: 0; width: 1px; background: var(--rule); }
.event .line i { position: absolute; left: 3px; top: 21px; width: 11px; height: 11px; border-radius: 50%; background: var(--axis); border: 2px solid var(--bg); }
.event.major .line i { background: var(--ink); }
.event .body { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 12px 16px 13px; margin: 5px 0; display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.event .head { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); min-width: 0; }
.event .head .cat { color: var(--ink-2); font-weight: 600; white-space: nowrap; }
.event .head .cat + span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.event .head .imp { margin-left: auto; }
.event .head time.inline { display: none; font-family: var(--font-mono); }
.event .fact { font-weight: 600; font-size: 14.5px; line-height: 1.5; }
.origin { font-size: 12.5px; color: var(--ink-2); text-decoration: none; overflow-wrap: anywhere; }
.origin.solo { font-size: 14px; color: var(--ink); }
a.origin:hover { text-decoration: underline; }
.event .meta { display: flex; flex-wrap: wrap; gap: 5px 10px; align-items: center; font-size: 12px; color: var(--muted); margin-top: 2px; }
.same { font-size: 12.5px; flex-basis: 100%; }
.syms + .same { flex-basis: auto; }
.same[open] { flex-basis: 100%; }
.same > summary { cursor: pointer; color: var(--ink-2); width: fit-content; }
.same .other { display: flex; flex-direction: column; gap: 2px; padding: 7px 0 7px 12px; margin-top: 6px; border-left: 2px solid var(--rule); color: var(--ink-2); }
.same .other .src { font-size: 12px; color: var(--muted); }
.more-rows { align-self: center; margin-top: 12px; }
.feed-end { text-align: center; font-size: 12.5px; color: var(--muted); padding: 14px 0 0; }
.empty-card { padding: 22px 20px; display: flex; flex-direction: column; gap: 6px; color: var(--ink-2); font-size: 13.5px; }
.empty-card b { color: var(--ink); font-size: 15px; font-weight: 650; }
.empty-line { padding: 16px 20px; color: var(--ink-2); font-size: 13.5px; }
#news-state:empty { display: none; }
#news-state { display: flex; flex-direction: column; gap: 8px; }
.toplist { list-style: none; padding: 0; margin: 0; }
.toplist li { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; gap: 4px 12px; align-items: start; padding: 11px 18px; border-bottom: 1px solid var(--rule); }
.toplist li:last-child { border-bottom: 0; }
.toplist .rank { font: 700 15px/1.5 var(--font-mono); color: var(--muted); }
.toplist li:nth-child(-n+3) .rank { color: var(--ink); }
.toplist .what { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.toplist .fact { font-weight: 600; }
.toplist .meta { display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: center; font-size: 12px; color: var(--muted); }
.toplist .imp { margin-top: 2px; }
/* 新闻板 2026-11-14：顶上一条数字条；英文原标题弱化成一行；最近两天展开，更早的按天折叠 */
.news-stats:empty { display: none; }
#news-feed .event .origin:not(.solo) { color: var(--muted); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#news-feed details.news-day { background: none; border: 0; border-radius: 0; border-top: 1px solid var(--rule); margin-top: 6px; }
#news-feed details.news-day + details.news-day { margin-top: 0; }
#news-feed .news-day > summary { padding: 11px 2px; border-radius: 0; border-bottom: 0; font-size: 15px; }
#news-feed .news-day > summary .fold-count { background: none; border: 0; padding: 0; font-weight: 400; font-size: 12.5px; color: var(--muted); }
#news-feed .news-day > .fold-body { padding: 0 0 8px; }
#news-detail .head .made { font-size: 11px; font-weight: 600; color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; white-space: nowrap; }
@media (max-width: 880px) { .day { top: 53px; } }
@media (max-width: 640px) {
  .event { grid-template-columns: minmax(0, 1fr); }
  .event > time, .event .line { display: none; }
  .event .head time.inline { display: inline; }
  .toplist li { padding-left: 14px; padding-right: 14px; }
}

/* ---- 总览里的几张卡 ---- */
.ov-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ov-head b { font-size: 15px; }
.ov-head .model { margin-left: auto; font: 12px var(--font-mono); color: var(--muted); }
.clamp { display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; color: var(--ink-2); font-size: 13.5px; }
.steps3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.steps3 div { border: 1px solid var(--rule); border-radius: 10px; padding: 9px 11px; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.steps3 span { font-size: 12px; color: var(--muted); }
.steps3 b { font-size: 13px; font-weight: 600; overflow-wrap: anywhere; }
.mini-rows { display: flex; flex-direction: column; gap: 12px; }
.mini-row { display: grid; grid-template-columns: 132px minmax(0, 1fr) 50px; gap: 12px; align-items: center; font-variant-numeric: tabular-nums; }
.mini-row .who { display: flex; flex-direction: column; line-height: 1.3; }
.mini-row .who span { font-size: 12px; color: var(--muted); }
.mini-row .num { text-align: right; font-weight: 600; }
.sys-rows > div { display: grid; grid-template-columns: 92px minmax(0, 1fr) auto; gap: 10px; padding: 9px 18px; border-bottom: 1px solid var(--rule); align-items: center; font-size: 13.5px; }
.sys-rows > div:last-child { border-bottom: 0; }
.sys-rows .label { color: var(--muted); font-size: 12.5px; }
.sys-rows > div > span:nth-child(2) { overflow-wrap: anywhere; }
@media (max-width: 640px) { .steps3 { grid-template-columns: minmax(0, 1fr); } }

/* ---- 新闻：点进去的详情 ---- */
.view-body { display: flex; flex-direction: column; gap: 30px; }
.event a.open { display: flex; flex-direction: column; gap: 5px; color: inherit; text-decoration: none; }
.event a.open:hover .fact, .event a.open:hover .origin.solo { text-decoration: underline; }
.toplist li { display: block; padding: 0; }
.toplist a.row { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; gap: 4px 12px; align-items: start; padding: 11px 18px; color: inherit; text-decoration: none; }
.toplist a.row:hover { background: color-mix(in oklab, var(--ink) 4%, transparent); }
.toplist a.row:hover .fact { text-decoration: underline; }
.detail { display: flex; flex-direction: column; gap: 14px; max-width: 760px; width: 100%; margin-inline: auto; }
.detail .back { align-self: flex-start; font-size: 13px; color: var(--ink-2); text-decoration: none; padding: 5px 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); }
.detail .back:hover { color: var(--ink); border-color: var(--axis); }
.detail .head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12.5px; margin-top: 6px; }
.detail .head .cat { color: var(--ink-2); font-weight: 600; }
.detail .headline { font-size: 22px; line-height: 1.45; font-weight: 700; letter-spacing: -.01em; overflow-wrap: anywhere; }
.detail .when { font-size: 12.5px; color: var(--muted); }
.detail h3 { font-size: 14px; font-weight: 650; margin-top: 10px; }
.detail .brief { font-size: 15px; line-height: 1.75; color: var(--ink); }
.report { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 14px 18px 16px; display: flex; flex-direction: column; gap: 10px; }
.report .src { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; font-size: 12.5px; color: var(--muted); }
.report .src b { color: var(--ink); font-size: 13.5px; font-weight: 650; }
.report .src .tag { margin-left: 0; }
.report .zh { font-weight: 600; font-size: 14.5px; }
.source-text { display: flex; flex-direction: column; gap: 3px; }
.source-text .label { font-size: 12px; color: var(--muted); }
.source-text p { color: var(--ink-2); overflow-wrap: anywhere; }
.source-text .title { color: var(--ink); }
.report .go { align-self: flex-start; font-size: 13px; font-weight: 600; color: var(--surface); background: var(--ink); border-radius: 999px; padding: 6px 15px; text-decoration: none; }
.report .go:hover { opacity: .86; }
.detail .note { font-size: 12.5px; color: var(--muted); }
@media (max-width: 640px) { .toplist a.row { padding-left: 14px; padding-right: 14px; } .detail .headline { font-size: 19px; } }

.report .brief.small { font-size: 13.5px; line-height: 1.7; color: var(--ink-2); }

/* ---- 持仓：整个账户分在哪几样上，每笔持仓一张卡 ---- */
.alloc { padding: 15px 18px 14px; display: flex; flex-direction: column; gap: 11px; }
.alloc-bar { display: flex; gap: 2px; height: 14px; }
.alloc-bar i { display: block; flex-basis: 0; min-width: 4px; border-radius: 2px; }
.alloc-bar i:first-child { border-top-left-radius: 7px; border-bottom-left-radius: 7px; }
.alloc-bar i:last-child { border-top-right-radius: 7px; border-bottom-right-radius: 7px; }
.alloc-legend { display: flex; flex-wrap: wrap; gap: 6px 22px; font-size: 13px; }
.alloc-legend .item { display: inline-flex; align-items: center; gap: 7px; color: var(--ink-2); text-decoration: none; }
.alloc-legend .item i { width: 10px; height: 10px; border-radius: 3px; flex: none; }
.alloc-legend .item b { color: var(--ink); font-weight: 650; }
.alloc-legend .item b.mono { font-size: 12.5px; }
.alloc-legend .item em { font-style: normal; font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums; }
.alloc-legend a.item:hover b { text-decoration: underline; }
.holds { display: flex; flex-direction: column; gap: 12px; }
.hold { display: flex; flex-direction: column; gap: 13px; padding: 16px 18px 13px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); color: inherit; text-decoration: none; min-width: 0; }
a.hold:hover { border-color: var(--axis); }
a.hold:hover .hold-more { color: var(--ink); text-decoration: underline; }
.hold-top { display: grid; grid-template-columns: minmax(0, 1fr) minmax(150px, 220px); gap: 10px 28px; align-items: start; }
.hold-id { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.hold-name { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.hold-name b { font-size: 20px; font-weight: 700; line-height: 1.2; }
.hold-name span { font-size: 15px; font-weight: 600; }
.hold-name em { font-style: normal; font-size: 11.5px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 8px; white-space: nowrap; }
.hold-what { font-size: 13px; color: var(--ink-2); line-height: 1.55; max-width: 64ch; }
.hold-weight { display: flex; flex-direction: column; gap: 7px; }
.hold-weight b { font-size: 22px; font-weight: 700; letter-spacing: -.02em; line-height: 1.15; font-variant-numeric: tabular-nums; text-align: right; }
.hold-weight small { font-size: 12px; color: var(--muted); text-align: right; }
.hold-nums { display: grid; grid-template-columns: repeat(auto-fit, minmax(112px, 1fr)); gap: 12px 16px; padding-top: 13px; border-top: 1px solid var(--rule); }
.hold-nums > div { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.hold-nums > div > span { font-size: 12px; color: var(--muted); }
.hold-nums b { font-size: 15.5px; font-weight: 650; font-variant-numeric: tabular-nums; white-space: nowrap; }
.hold-nums small { font-size: 12px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.hold-nums small span { display: inline-flex; align-items: center; gap: 4px; }
.hold-why { display: flex; flex-direction: column; gap: 6px; padding-top: 12px; border-top: 1px solid var(--rule); }
.why-head { display: flex; flex-wrap: wrap; align-items: center; gap: 5px 10px; color: var(--muted); font-size: 12.5px; }
.why-head .tag { margin-left: 0; color: var(--ink-2); font-weight: 600; }
.hold-why p { font-size: 13.5px; color: var(--ink-2); line-height: 1.65; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.hold-more { font-size: 12.5px; color: var(--muted); align-self: flex-end; }
.hold.cash { padding-bottom: 16px; }
.hold.cash .hold-name b { font-size: 16px; }
@media (max-width: 640px) {
  .hold-top { grid-template-columns: minmax(0, 1fr); }
  .hold-weight b, .hold-weight small { text-align: left; }
  .hold, .alloc { padding-left: 14px; padding-right: 14px; }
}
a.ticker, .sym-link, .mini-row.link { color: inherit; text-decoration: none; }
a.ticker:hover b, .sym-link:hover, .mini-row.link:hover .who b { text-decoration: underline; }
.sym-link { font-weight: 600; }

/* ---- 能交易的市场，和还没接进来的 ----
   2026-11-14 界面重做：原来那一节四张“在交易”的卡和两张虚线卡拿掉了。在交易的就是“四个品种”表那四行；
   还没接入的在表下面一行名字（.hold-notyet），原因进“说明”面板 */
.hold-notyet { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px; margin-top: -4px; padding: 0 2px; font-size: 12.5px; color: var(--muted); }
.hold-notyet b { font-weight: 600; color: var(--ink-2); }
.hold-notyet span { border: 1px dashed var(--axis); border-radius: 999px; padding: 0 8px; font-size: 11.5px; }

/* ---- 持仓板 2026-11-14 重排：标题旁的收盘限定语、卡片收紧、侧栏、四个品种那张表（1440 / 1100 都不裁） ---- */
.hold-basis { font-size: 12px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 9px; white-space: nowrap; align-self: center; }
#view-holdings .split .stack { padding-top: 40px; }
@media (max-width: 1120px) { #view-holdings .split .stack { padding-top: 0; align-items: start; } }
#hold-board .hold { gap: 11px; padding: 14px 18px 12px; }
#hold-board .hold-what { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
#hold-board .hold-nums { padding-top: 11px; }
#hold-board .hold-why { padding-top: 10px; gap: 4px; }
#hold-board .why-head .made, #hold-detail .report .made { font-size: 11px; font-weight: 600; color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; white-space: nowrap; }
#hold-board .hold.cash { padding: 12px 18px; }
#hold-board .hold.cash .hold-top { align-items: center; }
#hold-board .hold.cash .hold-weight { flex-direction: row; align-items: center; gap: 12px; }
#hold-board .hold.cash .hold-weight b { order: 2; font-size: 18px; min-width: 64px; }
#hold-board .hold.cash .hold-weight .track { order: 1; flex: 1; }
.hold-cash-sum { font-size: 13.5px; font-weight: 600; color: var(--ink-2) !important; font-variant-numeric: tabular-nums; }
#hold-side .meter-row .big-figure { font-size: 22px; }
/* 四个品种：8 列。窄于 1000 时“近 120 日”那一列不摆（平板 820 也放得下） */
#assets th small { display: block; font-size: 11px; color: var(--muted); font-weight: 400; }
#assets th, #assets td { padding-left: 8px; padding-right: 8px; vertical-align: middle; }
#assets th:first-child, #assets td:first-child { padding-left: 18px; }
#assets th:last-child, #assets td:last-child { padding-right: 18px; }
#assets tbody td { padding-top: 10px; padding-bottom: 10px; }
#assets .ticker { flex-wrap: wrap; column-gap: 7px; row-gap: 0; max-width: 168px; }
#assets svg.mini { width: 96px; height: 30px; }
#assets .hold-c-price .quote.cell { flex-direction: row; flex-wrap: wrap; justify-content: flex-end; align-items: baseline; column-gap: 6px; }
#assets .hold-c-price .quote.cell small { flex-basis: 100%; text-align: right; font-size: 11px; }
.hold-close { display: block; margin-top: 2px; font-size: 11.5px; color: var(--ink-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
#assets .hold-c-signal .signal { white-space: nowrap; }
.hold-gap { display: block; margin-top: 4px; padding-left: 2px; font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
#assets th.hold-c-book .who { flex-direction: column; align-items: flex-end; gap: 3px; white-space: nowrap; }
#assets .hold-c-book { width: 1%; }
.hold-w { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; min-width: 62px; }
.hold-w b { font-weight: 650; font-variant-numeric: tabular-nums; font-size: 13.5px; }
.hold-w-track { width: 62px; height: 4px; border-radius: 2px; background: var(--rule); overflow: hidden; }
.hold-w-track i { display: block; height: 100%; border-radius: 2px; background: var(--c); }
#assets tfoot td { padding-top: 9px; padding-bottom: 9px; }
@media (max-width: 1000px) { #assets .hold-c-spark { display: none; } }

/* ---- 持仓：点进去的详情 ---- */
.detail.holding { max-width: 920px; }
/* 持仓详情一节一个 section（给“说明”面板分组、挂小 ⓘ），排版上不占一层 */
#hold-detail .hd-sec { display: contents; }
@media (min-width: 1000px) { #hold-detail .hd-kpis { grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); gap: 10px; } }
#hold-detail .hd-kpis .kpi .value, #hold-detail .hd-kpis .quote.tile b { font-size: 21px; }
#hold-detail .hd-signal { margin-left: auto; color: var(--ink); font-weight: 600; font-variant-numeric: tabular-nums; }
#hold-detail .report .src .made { margin-left: auto; }
.detail.holding .headline b { font-size: 26px; margin-right: 4px; }
.detail .head .tag { margin-left: 0; }
.about { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 10px 22px; padding: 16px 18px; margin: 0; }
.about dt { font-size: 12.5px; color: var(--muted); white-space: nowrap; padding-top: 2px; }
.about dd { margin: 0; font-size: 14px; line-height: 1.65; }
@media (max-width: 560px) { .about { grid-template-columns: minmax(0, 1fr); gap: 2px; } .about dd { margin-bottom: 9px; } }
.who-title { display: flex; align-items: center; gap: 9px; }
.kpi .sub span.wide { display: block; margin-top: 8px; }
.chart-card { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.plot-legend { display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: 12.5px; color: var(--ink-2); }
.plot-legend span { display: inline-flex; align-items: center; gap: 7px; }
.plot-legend .ln { width: 20px; height: 0; border-top: 2px solid var(--ink); }
.plot-legend .ln.dash { border-top: 2px dashed var(--muted); }
.plot-legend .pt { width: 11px; height: 11px; border-radius: 50%; background: var(--c); }
.plot-legend .pt.hollow { background: none; border: 2px solid var(--c); }
.tip > .when { display: block; }
.tip .pair { display: flex; justify-content: space-between; gap: 18px; }
.tip .pair span { color: var(--ink-2); }
.tip .pair b { font-weight: 650; font-variant-numeric: tabular-nums; }
.report .facts { font-size: 12.5px; gap: 4px 22px; }
.report .rationale { font-size: 14.5px; line-height: 1.75; }
.more-link { align-self: flex-start; font-size: 13px; color: var(--ink-2); }
.more-link:hover { color: var(--ink); }
.toplist.plain a.row { grid-template-columns: minmax(0, 1fr) auto; }
.mini-row .who.line { flex-direction: row; align-items: center; gap: 8px; }
.mini-row .who.line b { font-weight: 600; }

/* ---- 盘中行情：一个价格、涨跌、它是几点的 ---- */
.quote { display: flex; flex-direction: column; gap: 1px; min-width: 0; font-variant-numeric: tabular-nums; }
.quote b { font-size: 15.5px; font-weight: 650; white-space: nowrap; }
.quote .delta { font-size: 12px; color: var(--ink-2); }
.quote small { font-size: 11.5px; color: var(--muted); line-height: 1.4; }
.quote .none { color: var(--muted); }
.quote.tile b { font-size: 25px; font-weight: 700; letter-spacing: -.025em; line-height: 1.2; }
.quote.tile .delta, .quote.tile small { font-size: 12.5px; }
.quote.cell { align-items: flex-end; }
.quote.cell b { font-size: 14.5px; font-weight: 600; }
.quote.cell small { white-space: nowrap; }
.hold-nums > div > .quote { color: var(--ink); font-size: inherit; }

/* ---- 候选 ---- */
#cand-state:empty { display: none; }
.rule-about { color: var(--ink-2); font-size: 14px; margin-bottom: 14px; }
.rule-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 36px; }
@media (max-width: 880px) { .rule-cols { grid-template-columns: minmax(0, 1fr); } }
.rule-cols h3 { font-size: 13px; font-weight: 650; margin-bottom: 10px; }
.rule-list { list-style: none; padding: 0; display: flex; flex-direction: column; gap: 9px; font-size: 13.5px; }
.rule-list li { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; }
.rule-list em { font-style: normal; font-size: 12.5px; color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.rule-weights { display: flex; flex-direction: column; gap: 11px; }
.cand td { vertical-align: middle; }
.cand td.rank { font: 700 15px var(--font-mono); color: var(--muted); width: 44px; }
.cand tbody tr:nth-child(-n+3) td.rank { color: var(--ink); }
.who2 { display: flex; flex-direction: column; line-height: 1.35; }
.who2 > div { display: flex; align-items: baseline; gap: 8px; }
.who2 b { font-size: 14px; }
.who2 small { font-size: 11.5px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; }
.who2 span { font-size: 12px; color: var(--muted); max-width: 22ch; overflow: hidden; text-overflow: ellipsis; }
.scorebar { display: grid; grid-template-columns: 72px 40px; align-items: center; gap: 8px; font-variant-numeric: tabular-nums; }
.scorebar b { font-weight: 650; text-align: right; }
.out-rows > div { grid-template-columns: 64px minmax(0, 1fr) minmax(0, 2fr); }
.stack-plain { display: flex; flex-direction: column; gap: 10px; }
.stack-plain:empty { display: none; }
/* 界面重做：顶上一条数字条（前四格是一条漏斗，格子之间是箭头）、规则一句话 + 折起来的细则、名单标题旁的限定语、没参与的折起来 */
#view-candidates { gap: 22px; }
#cand-stats:empty { display: none; }
.cand-stats .statline-item { padding-left: 14px; padding-right: 14px; }
.cand-stats .statline-item.step + .statline-item.step { position: relative; padding-left: 30px; box-shadow: none; }
.cand-stats .statline-item.step + .statline-item.step::before { content: ""; position: absolute; left: 11px; top: 50%; width: 8px; height: 8px; margin-top: -4px;
  border-top: 1.6px solid var(--axis); border-right: 1.6px solid var(--axis); transform: rotate(45deg); }
.cand-rules > header, #view-candidates .section > header { align-items: center; min-height: 34px; }
.cand-rule-fold .fold-title { font-weight: 500; color: var(--ink); min-width: 0; }
.cand-rule-fold .fold-note { flex: none; }
.cand-rule-fold .fold-body { padding-top: 16px; }
.cand-qual { display: inline-flex; flex-wrap: wrap; gap: 4px 6px; }
.cand-qual span { font-size: 12px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 9px; line-height: 1.7; white-space: nowrap; }
.cand-qual span.warn { background: var(--warn-bg); color: var(--warn-ink); border-color: transparent; font-weight: 600; }
.cand-fold .fold-body { padding: 0; }
.cand-fold .fold-body > .fine { padding: 12px 18px 4px; }

/* ---- 个股页和搜索框 ---- */
.cand-top { display: flex; align-items: center; justify-content: space-between; gap: 12px 20px; flex-wrap: wrap; }
.back-link { font-size: 13px; color: var(--ink-2); text-decoration: none; padding: 5px 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); }
.back-link:hover { color: var(--ink); border-color: var(--axis); }
.search { position: relative; width: min(340px, 100%); }
#cand-search, #stock-search { flex: 1 1 240px; display: flex; justify-content: flex-end; min-width: 0; }
.search-input { width: 100%; font: inherit; font-size: 14px; color: var(--ink); background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 8px 12px; }
.search-input::placeholder { color: var(--muted); }
.search-list { position: absolute; z-index: 8; top: calc(100% + 6px); left: 0; right: 0; list-style: none; margin: 0; padding: 4px; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 8px 28px rgba(0, 0, 0, .18); }
.search-list li { display: grid; grid-template-columns: 92px minmax(0, 1fr) auto; gap: 10px; align-items: baseline; padding: 7px 10px; border-radius: 8px; cursor: pointer; font-size: 13.5px; }
.search-list li.on, .search-list li:hover { background: color-mix(in oklab, var(--ink) 7%, transparent); }
.search-list li span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.search-list li small { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.search-list li.none { display: block; color: var(--muted); cursor: default; }
a.who2 { color: inherit; text-decoration: none; }
a.who2:hover b { text-decoration: underline; }
.ind { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px 40px; }
@media (max-width: 720px) { .ind { grid-template-columns: minmax(0, 1fr); } }
.ind-row { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; padding: 8px 0; border-bottom: 1px solid var(--rule); }
.ind-col .ind-row:last-child { border-bottom: 0; }
.ind-row .what { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ind-row .what b { font-size: 13.5px; font-weight: 600; }
.ind-row .what small { font-size: 12px; color: var(--muted); }
.ind-row .val { font-weight: 650; font-variant-numeric: tabular-nums; white-space: nowrap; }
.screen-card { display: flex; flex-direction: column; gap: 12px; }
.plot-legend .ln.thin { border-top: 1.5px solid var(--muted); }
.plot-legend .candle { width: 8px; height: 13px; border: 1px solid var(--ink); border-radius: 1px; }
/* 个股页（界面重做）：电脑上两栏，左 7/12（价格图、AI 读数、筛选规则下、各项数字），右 5/12（关键数字、逐项核对、技术指标、估值）。
   每一块是一张卡，标题一行在卡里，标题旁的小标签是限定语；1100 宽以下退成一列（顺序和手机一样） */
.detail.stock-page { max-width: none; gap: 16px; }
.stk-head { display: flex; flex-direction: column; gap: 8px; }
.stk-head .head { margin-top: 0; }
.stk-head .headline b { font-size: 26px; margin-right: 4px; }
.stk-head .inbox-actions { row-gap: 6px; }
.inbox-quota { font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums; margin-left: 4px; }
.stock-page > .stk-state { margin: -4px 0 0; }
.stk-grid { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 16px; align-items: start; }
.stk-grid.solo { grid-template-columns: minmax(0, 1fr); }
.stk-main, .stk-side { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.stk-card { padding: 14px 18px 16px; display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.stk-card > header { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 10px; min-height: 26px; }
.stk-card > header h2 { font-size: 15px; font-weight: 650; letter-spacing: 0; }
.stk-tag { font-size: 12px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 9px; line-height: 1.7; white-space: nowrap; font-variant-numeric: tabular-nums; }
.stk-tag.model { color: var(--ink-2); }
/* 关键数字：收盘价占一整行，下面两两并排；估值三格一行 */
.stk-keys-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin: 0 -18px -16px; }
.stk-key { display: flex; flex-direction: column; gap: 1px; padding: 10px 18px 12px; min-width: 0; border-top: 1px solid var(--rule); }
.stk-key.wide { grid-column: 1 / -1; }
.stk-keys .stk-key:not(.wide):nth-child(odd), .stk-val-grid .stk-key + .stk-key { box-shadow: inset 1px 0 0 var(--rule); }
.stk-key .label { font-size: 12.5px; color: var(--muted); }
.stk-key b { font-size: 21px; font-weight: 700; letter-spacing: -.02em; line-height: 1.25; font-variant-numeric: tabular-nums; }
.stk-key.wide b { font-size: 30px; letter-spacing: -.03em; }
.stk-key small { font-size: 12.5px; color: var(--ink-2); font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.stk-key small > span { display: inline-flex; align-items: center; gap: 5px; }
.stk-val-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.stk-val-body { display: flex; flex-direction: column; gap: 10px; }
.stk-val-body > p { margin-top: 18px; }
.stk-val-body > .stk-val-grid + p { margin-top: 26px; }
.stk-pe { display: inline-flex; align-items: center; gap: 6px; }
.stk-pe .spark { width: 56px; flex: none; }
/* 逐项核对、技术指标、各项数字：一行一项 */
.stk-checks-list .ind-row, .stk-ind-list .ind-row, .stk-factors-grid .ind-row { padding: 7px 0; }
.stk-checks-list .ind-row:last-child, .stk-ind-list .ind-row:last-child { border-bottom: 0; }
.stk-checks-list .ind-row .what b { font-weight: 500; }
details.stk-ind .fold-body { padding: 2px 18px 10px; }
details.stk-ind > summary { padding-top: 13px; padding-bottom: 13px; font-size: 15px; }
.stk-avg { padding-bottom: 4px; border-bottom: 1px solid var(--rule); }
.stk-avg-row { display: grid; grid-template-columns: minmax(0, 1fr) auto 7.5em; gap: 14px; align-items: baseline; padding: 6px 0; font-size: 13.5px; font-variant-numeric: tabular-nums; }
.stk-avg-row .what { font-weight: 600; }
.stk-avg-row b { font-weight: 650; text-align: right; }
.stk-avg-row small { font-size: 12px; color: var(--muted); text-align: right; white-space: nowrap; }
.stk-factors-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 32px; padding-top: 4px; }
.stk-factors-grid .ind-row .what b { font-weight: 500; }
/* 筛选规则下：两条规则并排 */
.stk-screens-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 28px; }
.stk-screen { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
/* AI 读数：卡里不再套卡；三段排成“小标题 | 正文”两列，读起来是一行一行往下 */
h2.with-tag { display: flex; align-items: center; gap: 10px; }
.stk-ai-head .report-dates { margin-left: auto; }
.stk-ai .report { border: 0; padding: 0; background: none; border-radius: 0; box-shadow: none; gap: 14px; }
.stk-ai .report-none { border: 1px dashed var(--axis); padding: 16px 18px; }
.stk-ai .report-summary { font-size: 17px; max-width: none; }
.stk-ai .report-cols { grid-template-columns: minmax(0, 1fr); gap: 12px; }
.stk-ai .report-cols > div, .stk-ai .report-watch { display: grid; grid-template-columns: 6.5em minmax(0, 1fr); gap: 16px; align-items: baseline; }
.stk-ai .report-cols b, .stk-ai .report-watch > b { margin: 0; }
.stk-ai .report-md { padding-top: 14px; }
.stk-past { display: none; }
@media (max-width: 1180px) {
  /* 窄一些的电脑：一列，顺序和手机一样（关键数字、AI 读数、图……） */
  .stk-grid { display: flex; flex-direction: column; align-items: stretch; }
  .stk-main, .stk-side { display: contents; }
  .stk-keys { order: 1; } .stk-ai { order: 2; } .stk-chart { order: 3; } .stk-checks { order: 4; } .stk-ind { order: 5; }
  .stk-val { order: 6; } .stk-screens { order: 7; } .stk-factors { order: 8; }
  .stk-keys .stk-keys-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .stk-keys .stk-key.wide { grid-column: auto; }
  .stk-keys .stk-key.wide b { font-size: 21px; }
  .stk-keys .stk-key small { white-space: normal; }
  .stk-keys .stk-key + .stk-key, .stk-keys .stk-key:not(.wide):nth-child(odd) { box-shadow: inset 1px 0 0 var(--rule); }
}
.stk-factors-grid .ind-row:nth-last-child(-n+2) { border-bottom: 0; }

/* ---- 市场板：每个股票池最近一个定下来的交易日（recap.js） ---- */
#recap-body > p.note { font-size: 13px; color: var(--ink-2); }
.recap-kpis .value .big-delta { display: inline-flex; align-items: center; gap: 6px; }
.recap-kpis .value .big-delta svg { width: 12px; height: 12px; }
.updown { display: flex; gap: 2px; height: 8px; border-radius: 4px; overflow: hidden; background: var(--zero); }
.updown i { display: block; flex-basis: 0; min-width: 2px; }
.updown i.up { background: var(--pos); }
.updown i.flat { background: var(--muted); }
.updown i.down { background: var(--neg); }
.split-note { display: block; margin-top: 6px; }
.plot-legend .sq { width: 10px; height: 10px; border-radius: 2px; }
.plot-legend .sq + .sq { margin-left: -4px; }
.plot-legend .sq.pos { background: var(--pos); }
.plot-legend .sq.neg { background: var(--neg); }
.plot-legend .sq.flat { background: var(--muted); }
.plot text.count { fill: var(--ink-2); font-size: 11.5px; }
.plot text.flat { fill: var(--ink-2); }
.recap-charts { align-items: stretch; }
.recap-charts .chart-card { height: 100%; }
.sectors { padding: 4px 0; }
.sector-row { display: grid; grid-template-columns: 76px minmax(0, 1fr) 76px 132px; gap: 6px 14px; align-items: center; padding: 8px 18px; border-bottom: 1px solid var(--rule); font-size: 13.5px; }
.sector-row:last-child { border-bottom: 0; }
.sector-row .name { font-weight: 600; white-space: nowrap; }
.sector-row .val { text-align: right; font-weight: 650; font-variant-numeric: tabular-nums; }
.sector-row .val .delta { justify-content: flex-end; }
.sector-row .cnt { font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.diverge { position: relative; height: 10px; }
.diverge::before { content: ""; position: absolute; left: 50%; top: -3px; bottom: -3px; width: 1px; background: var(--axis); }
.diverge i { position: absolute; top: 0; bottom: 0; min-width: 2px; }
.diverge i.pos { left: 50%; background: var(--pos); border-radius: 0 4px 4px 0; }
.diverge i.neg { right: 50%; background: var(--neg); border-radius: 4px 0 0 4px; }
.movers td { vertical-align: middle; }
.movers td.rank { font: 600 13px var(--font-mono); color: var(--muted); width: 36px; }
.movers .who2 span { max-width: 26ch; }
.movers .delta { justify-content: flex-end; }
tr.link-row { cursor: pointer; }
tr.link-row:hover td { background: color-mix(in oklab, var(--ink) 4%, transparent); }
tr.link-row:hover .who2 b { text-decoration: underline; }
.recap-out > div { grid-template-columns: 128px minmax(0, 2fr) minmax(0, 3fr); align-items: start; }
.recap-out .label b { color: var(--ink); font-weight: 650; margin-left: 4px; }
.lack-rows > div { grid-template-columns: 132px minmax(0, 1fr); }
.lack-rows .label { color: var(--ink); font-weight: 600; font-size: 13.5px; }
/* 指数：池子那块板最上面一排，指数本身的点位（和下面成分股的等权统计分开） */
.index-block { display: flex; flex-direction: column; gap: 8px; }
.index-kpis { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }  /* auto-fill：只有一两个指数时不把块拉满整行 */
@media (max-width: 640px) { .index-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.index-kpi .label { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 0 8px; }
.index-kpi .label span:first-child { color: var(--ink-2); font-weight: 600; }
.index-kpi .when { font-size: 11.5px; color: var(--muted); }
.index-kpi .when.off { color: var(--caution); font-weight: 600; }
.index-kpi .value { font-size: 22px; font-variant-numeric: tabular-nums; }
.index-kpi .sub { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; font-variant-numeric: tabular-nums; }
.index-kpi .sub .pts { color: var(--muted); }
.index-kpi .spark { margin-top: 6px; }
.index-block > p.note { font-size: 13px; color: var(--ink-2); }
.other-index-rows > div > span:last-child { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 6px; font-variant-numeric: tabular-nums; }
@media (max-width: 640px) {
  .sector-row { grid-template-columns: 64px minmax(0, 1fr) 70px; padding: 8px 14px; }
  .sector-row .cnt { grid-column: 2 / -1; margin-top: -4px; }
  .movers th, .movers td { padding-left: 6px; padding-right: 6px; }
  .movers th:first-child, .movers td:first-child { padding-left: 14px; width: 30px; }
  .movers th:last-child, .movers td:last-child { padding-right: 14px; }
  .movers .who2 span { max-width: 14ch; }
  .recap-out > div, .lack-rows > div { grid-template-columns: minmax(0, 1fr); gap: 3px; padding-left: 14px; padding-right: 14px; }
}
/* 界面重做：最上面一条数字条；“指数”“成分股等权”两个小标题把两种数分开；标题旁的小标签是限定语（点位、等权、复权、日子）；
   涨跌幅前 10 每只一行；没算进来的折起来。说明性质的话是 x-note，进“说明”面板 */
#view-recap { gap: 18px; }
#recap-body { gap: 24px; }
#recap-body > p.trouble, #recap-body > p.note { margin-top: -10px; }
.recap-tag { font-size: 12px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 9px; line-height: 1.7; white-space: nowrap; font-variant-numeric: tabular-nums; }
#recap-body .section > header { align-items: center; gap: 6px 10px; }
#recap-body .section h2 { font-size: 17px; }
.recap-group { gap: 10px; }
.recap-group > header h2 { font-size: 14px; font-weight: 650; color: var(--ink-2); letter-spacing: .02em; }
@media (max-width: 1040px) { .recap-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.recap-kpis .value .of { display: inline-flex; align-items: baseline; flex-wrap: wrap; gap: 0 8px; }
.recap-kpis .value .of small { font-size: 13px; font-weight: 600; color: var(--muted); letter-spacing: 0; }
.recap-charts .section > header, .recap-movers .section > header { min-height: 26px; }
.movers .who2 > div { min-width: 0; }
.movers .who2 > div span { min-width: 0; }
.movers td, .movers th { padding-top: 8px; padding-bottom: 8px; }
.recap-movers .recap-flip { display: none; }
.recap-out-fold .fold-body { padding: 0; }
.recap-out-fold .recap-out > div { padding-left: 18px; padding-right: 18px; }
/* 个股页：模型写的读数报告，和代码对出来的逐项核对 */
h3.with-tag { display: flex; align-items: center; gap: 10px; }
h3.with-tag .tag { margin-left: 0; font-weight: 400; }
.report { display: flex; flex-direction: column; gap: 16px; }
.report-head { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px; font-size: 12.5px; color: var(--muted); }
.report-head .chip { margin-left: auto; }
.report-summary { font-size: 17px; line-height: 1.6; font-weight: 600; letter-spacing: -.005em; max-width: 60ch; text-wrap: pretty; }
.report-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px 28px; padding-top: 16px; border-top: 1px solid var(--rule); }
.report-cols b, .report-watch b { display: block; font-size: 12px; font-weight: 600; color: var(--muted); letter-spacing: .04em; margin-bottom: 4px; }
.report-cols p { font-size: 13.5px; color: var(--ink-2); line-height: 1.7; }
.report-watch { padding-top: 16px; border-top: 1px solid var(--rule); }
.report-cautions { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 6px; }
.report-cautions li { position: relative; padding-left: 16px; font-size: 13.5px; color: var(--ink-2); }
.report-cautions li::before { content: ""; position: absolute; left: 2px; top: .65em; width: 6px; height: 6px; border-radius: 50%; background: var(--caution); }
.report-none { border-style: dashed; border-color: var(--axis); background: none; }
@media (max-width: 900px) { .report-cols { grid-template-columns: minmax(0, 1fr); } .report-head .chip { margin-left: 0; } }
.yn { flex: none; min-width: 30px; text-align: center; padding: 1px 9px; border-radius: 999px; font-size: 12.5px; border: 1px solid var(--axis); color: var(--muted); }
.yn.yes { background: var(--ink); border-color: var(--ink); color: var(--surface); font-weight: 600; }
.yn.no { color: var(--ink-2); }

/* ---- 报告板（reports.js），和个股页上以前的报告、Markdown（stock.js） ---- */
.rep-day > header h2 { font-size: 17px; }
.rep-counts { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: 13px; color: var(--muted); }
.rep-counts b { color: var(--ink); font-weight: 650; font-variant-numeric: tabular-nums; }
.rep-pools { display: flex; flex-wrap: wrap; gap: 6px; }
.rep-pools .chip { padding: 2px 10px; font-size: 12px; }
.rep-list { overflow: hidden; }
.rep-row { display: grid; grid-template-columns: minmax(0, 15rem) minmax(0, 1fr) auto; gap: 4px 20px; align-items: baseline; padding: 12px 18px; color: inherit; text-decoration: none; }
.rep-row + .rep-row { border-top: 1px solid var(--rule); }
.rep-row:hover { background: color-mix(in oklab, var(--ink) 4%, transparent); }
.rep-row:hover .rep-who b { text-decoration: underline; }
.rep-who { display: flex; align-items: baseline; flex-wrap: wrap; gap: 2px 8px; min-width: 0; }
.rep-who b { font-size: 14px; }
.rep-who .name { font-size: 12.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.rep-who .tag { margin-left: 0; }
.rep-summary { font-size: 14px; line-height: 1.6; overflow-wrap: anywhere; }
.rep-meta { font: 12px var(--font-mono); color: var(--muted); white-space: nowrap; }
.rep-miss { border-top: 1px solid var(--rule); background: color-mix(in oklab, var(--ink) 2.5%, transparent); padding: 10px 18px 12px; display: flex; flex-direction: column; gap: 8px; }
.rep-miss-head { font-size: 12px; color: var(--muted); }
.rep-miss-row { display: grid; grid-template-columns: 4.5rem minmax(0, 15rem) minmax(0, 1fr); gap: 4px 12px; align-items: baseline; font-size: 13px; }
.rep-miss-row .chip { justify-self: start; padding: 1px 9px; font-size: 11.5px; }
.rep-foot { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.rep-foot button { cursor: pointer; }
.rep-foot button:disabled { opacity: .6; cursor: default; }
@media (max-width: 720px) {
  .rep-row { grid-template-columns: minmax(0, 1fr); padding: 12px 14px; }
  .rep-meta { white-space: normal; }
  .rep-miss { padding-left: 14px; padding-right: 14px; }
  .rep-miss-row { grid-template-columns: auto minmax(0, 1fr); }
  .rep-miss-row > .quiet { grid-column: 1 / -1; }
}
/* 界面重做：顶上一条数字条；每天的标题一行（日子、该写 · 写成、各池子、模型写的）；每份一行：代码名字市场 | 排名 | 一句话 | 模型和时间 */
#reports-body { gap: 26px; }
.rep-day { gap: 10px; }
.rep-day > header { align-items: center; gap: 6px 14px; }
.rep-day .rep-counts { gap: 0; font-size: 13px; }
.rep-day .rep-counts > span + span::before { content: "·"; margin: 0 7px; color: var(--axis); }
.rep-day > header .rep-pools { gap: 5px; }
.rep-model { margin-left: auto; font-size: 12px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 9px; line-height: 1.7; white-space: nowrap; }
.rep-row { grid-template-columns: minmax(0, 16rem) minmax(0, 1fr) auto; gap: 4px 20px; padding: 10px 18px; align-items: baseline; }
.rep-row .rep-who { flex-wrap: nowrap; min-width: 0; }
.rep-row .rep-who b, .rep-row .rep-who .tag { flex: none; }
.rep-row .rep-who .name { min-width: 0; }
.rep-row .rep-summary { line-height: 1.55; }
/* 排名标签放在一句话的最前面 */
.rep-summary > .rep-rank { display: inline-block; margin: 0 8px 0 0; padding: 0 7px; font-size: 11.5px; line-height: 1.55; white-space: nowrap; vertical-align: 1px; }
.rep-meta { display: flex; gap: 0; }
.rep-meta > span + span::before { content: "·"; margin: 0 6px; }
.report-slot { display: flex; flex-direction: column; gap: 14px; }
.report-place { display: flex; flex-direction: column; }
.report-dates { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; }
.report-dates .label { color: var(--muted); font-size: 12.5px; }
.report-dates .ranges button { padding: 4px 11px; font-variant-numeric: tabular-nums; }
.report-select { font: inherit; font-size: 13px; color: var(--ink); background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 5px 10px; max-width: 100%; }
.report-md { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 10px; padding-top: 16px; border-top: 1px solid var(--rule); }
.md-btn { font-size: 13px; line-height: 1.5; color: var(--ink-2); text-decoration: none; padding: 5px 13px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); cursor: pointer; }
.md-btn:hover { color: var(--ink); border-color: var(--axis); }
.md-status { font-size: 12.5px; color: var(--muted); }
.md-text { flex-basis: 100%; width: 100%; min-height: 180px; resize: vertical; font: 12px/1.55 var(--font-mono); color: var(--ink); background: var(--bg); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; }

/* ---- 自选板（watchlist.js），个股页上的两个动作和请求进度（stock.js、inbox.js） ---- */
.act { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; line-height: 1.5; padding: 5px 14px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface); color: var(--ink-2); cursor: pointer; white-space: nowrap; text-decoration: none; }
.act:hover:not(:disabled) { color: var(--ink); border-color: var(--axis); }
.act.primary { background: var(--ink); border-color: var(--ink); color: var(--surface); font-weight: 600; }
.act.primary:hover:not(:disabled) { color: var(--surface); border-color: var(--ink); opacity: .86; }
.act.small { padding: 2px 11px; font-size: 12.5px; }
.act:disabled { opacity: .45; cursor: not-allowed; }
.inbox-bar { display: flex; flex-direction: column; gap: 8px; }
.inbox-bar:empty { display: none; }
.inbox-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
.inbox-why { font-size: 12.5px; color: var(--muted); max-width: 80ch; }
.inbox-error { font-size: 12.5px; color: var(--warn-ink); background: var(--warn-bg); border-radius: 8px; padding: 6px 10px; align-self: flex-start; max-width: 100%; overflow-wrap: anywhere; }
span.inbox-error { padding: 2px 9px; }
.inbox-confirm { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px 8px; font-size: 13px; padding: 3px 4px 3px 12px; border-radius: 999px; background: var(--warn-bg); color: var(--warn-ink); max-width: 100%; }
.req { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px; font-size: 13px; color: var(--ink-2); }
.req .more-link { font-size: 12.5px; }
.req-chip { display: inline-flex; align-items: center; gap: 6px; padding: 1px 9px; border-radius: 999px; font-size: 12px; line-height: 1.6; border: 1px solid var(--border); color: var(--ink-2); background: var(--surface); white-space: nowrap; }
.req-chip.live::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--series-3); flex: none; }
.req-chip.done { background: var(--ink); border-color: var(--ink); color: var(--surface); font-weight: 600; }
.req-chip.warn { background: var(--warn-bg); color: var(--warn-ink); border-color: transparent; font-weight: 600; }
.req-chip.wait { border-style: dashed; border-color: var(--axis); }
@media (prefers-reduced-motion: no-preference) {
  .req-chip.live::before { animation: inbox-pulse 1.4s ease-in-out infinite; }
  @keyframes inbox-pulse { 50% { opacity: .25; } }
}
#watchlist-top { justify-content: flex-start; }
.wl-search { flex: 0 1 340px; min-width: 0; display: flex; }
.wl-search .search { width: 100%; }
.wl-note { padding: 10px 14px; border-radius: 8px; background: var(--surface); border: 1px solid var(--border); color: var(--ink-2); font-size: 13.5px; }
.wl-list { overflow: hidden; }
.wl-row { display: grid; grid-template-columns: minmax(0, 12rem) 8.5rem minmax(0, 1fr) minmax(0, 7.5rem) auto; gap: 6px 18px; align-items: center; padding: 12px 18px; }
.wl-row + .wl-row { border-top: 1px solid var(--rule); }
.wl-who { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.wl-who a { display: flex; align-items: baseline; gap: 8px; min-width: 0; color: inherit; text-decoration: none; }
.wl-who a:hover b { text-decoration: underline; }
.wl-who b { font-size: 14px; }
.wl-who .name { font-size: 12.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.wl-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.wl-tags .tag { margin-left: 0; }
.wl-price { display: flex; flex-direction: column; gap: 1px; font-variant-numeric: tabular-nums; min-width: 0; }
.wl-price b { font-size: 14.5px; font-weight: 650; }
.wl-change { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 2px 8px; font-size: 12.5px; color: var(--ink-2); }
.wl-change small { color: var(--muted); font-size: 11.5px; }
.wl-report { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.wl-summary { font-size: 13.5px; line-height: 1.55; color: var(--ink); text-decoration: none; overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.wl-summary:hover { text-decoration: underline; }
.wl-report small { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; font-size: 12px; color: var(--muted); }
.wl-report .chip { padding: 0 8px; font-size: 11.5px; }
.wl-req { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; min-width: 0; }
.wl-act { justify-self: end; display: flex; justify-content: flex-end; min-width: 0; }
.req-list { overflow: hidden; }
.req-row { display: grid; grid-template-columns: minmax(0, 7rem) auto minmax(0, 1fr) auto; gap: 4px 14px; align-items: baseline; padding: 10px 18px; font-size: 13px; color: var(--ink-2); }
.req-row + .req-row { border-top: 1px solid var(--rule); }
.req-row .req-who a { color: var(--ink); font-weight: 650; text-decoration: none; }
.req-row .req-who a:hover { text-decoration: underline; }
.req-row .text { min-width: 0; overflow-wrap: anywhere; }
.req-row .when { font: 12px var(--font-mono); color: var(--muted); white-space: nowrap; }
.paste { display: flex; flex-direction: column; gap: 14px; }
.paste-head { display: flex; flex-direction: column; gap: 2px; }
.paste-head b { font-size: 15px; font-weight: 650; }
.paste textarea { width: 100%; min-height: 120px; resize: vertical; font: 13.5px/1.6 var(--font-mono); color: var(--ink); background: var(--bg); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; }
.paste textarea::placeholder { color: var(--muted); }
.paste-groups { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px 24px; padding-top: 14px; border-top: 1px solid var(--rule); }
.paste-group { display: flex; flex-direction: column; min-width: 0; }
.paste-group h4 { margin: 0 0 6px; font-size: 12.5px; font-weight: 650; color: var(--muted); letter-spacing: .02em; }
.paste-hit { display: flex; align-items: baseline; gap: 8px; padding: 6px 0; border-bottom: 1px solid var(--rule); font-size: 13.5px; cursor: pointer; min-width: 0; }
.paste-hit input { accent-color: var(--ink); margin: 0; align-self: center; flex: none; }
.paste-hit .name { flex: 1; min-width: 0; color: var(--muted); font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.paste-hit small { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.paste-pick { display: flex; flex-direction: column; gap: 4px; padding: 7px 0; border-bottom: 1px solid var(--rule); min-width: 0; }
.paste-pick select { font: inherit; font-size: 13px; color: var(--ink); background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 4px 8px; max-width: 100%; }
.paste-miss { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 6px; }
.paste-miss span { font: 12.5px var(--font-mono); padding: 1px 8px; border-radius: 6px; background: var(--zero); color: var(--ink-2); overflow-wrap: anywhere; max-width: 100%; }
.paste-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.paste > .paste-foot:last-child { padding-top: 14px; border-top: 1px solid var(--rule); }
@media (max-width: 900px) {
  .wl-row { grid-template-columns: minmax(0, 1fr) auto; }
  .wl-price { align-items: flex-end; text-align: right; }
  .wl-change { justify-content: flex-end; }
  .wl-report { grid-column: 1 / -1; }
  .wl-req { grid-column: 1; }
  .paste-groups { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 720px) {
  .wl-row, .req-row { padding-left: 14px; padding-right: 14px; }
  .req-row { grid-template-columns: auto auto minmax(0, 1fr); }
  .req-row .text { grid-column: 1 / -1; order: 4; }
  .req-row .when { justify-self: end; }
  .wl-search { flex-basis: 100%; }
}
.wl-part { display: contents; }
/* 界面重做：顶上一条数字条；小节标题旁写条数；各段的说明进“说明”面板 */
#view-watchlist .view-body { gap: 24px; }
#view-watchlist .section > header { align-items: center; }
.wl-count { font-size: 12px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 9px; line-height: 1.7; font-variant-numeric: tabular-nums; }

/* ---- 导入的持仓（ownholdings.js）：持仓板上账户那一排后面的几个按钮、导入的账户自己的板、导入的面板 ---- */
.own-sep { width: 1px; align-self: stretch; margin: 5px 4px; background: var(--axis); }
.ranges button.own-tab { gap: 7px; }
.own-dot { width: 8px; height: 8px; border-radius: 50%; border: 1.5px solid var(--ink-2); flex: none; }
.ranges button.own-add { color: var(--ink-2); }
.ranges button.own-add.off { color: var(--muted); opacity: .65; }
.own-board { display: flex; flex-direction: column; gap: 22px; min-width: 0; }
.own-head { display: flex; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; gap: 10px 18px; }
.own-title { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1 1 22rem; }
.own-title h2 { font-size: 19px; font-weight: 700; letter-spacing: -.01em; }
.own-title p { color: var(--muted); font-size: 13px; max-width: 80ch; }
.own-actions { display: flex; flex-wrap: wrap; gap: 8px; max-width: 100%; }
/* 2026-11-14：标题下只留“建于 · 小标签”；限定语（真实持仓、只按收盘价、不复权）是小标签，说明进“说明”面板 */
.own-title p.own-sub { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 12.5px; color: var(--muted); }
.own-tag { font-size: 11.5px; color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 8px; white-space: nowrap; font-weight: 500; }
.own-board .section > header .own-tag { align-self: center; }
#own-board .kpis { grid-template-columns: repeat(auto-fill, minmax(176px, 1fr)); gap: 10px; }
#own-board .kpi .value { font-size: 21px; overflow-wrap: anywhere; }
.own-board p.note { font-size: 13px; color: var(--ink-2); }
.own-board .kpi .value { overflow-wrap: anywhere; }
.own-table td, .own-table th { vertical-align: baseline; }
.own-table .own-name { max-width: 16rem; overflow: hidden; text-overflow: ellipsis; color: var(--ink-2); }
.own-table td .delta { margin-left: 2px; font-size: 12.5px; color: var(--ink-2); }
.own-table .chip { padding: 1px 9px; font-size: 11.5px; }
.own-table tr.own-left-out td { color: var(--muted); }
.own-table tr.own-left-out .sym-link { color: var(--ink-2); }
.own-table tfoot td { font-weight: 600; color: var(--ink); }
.own-table tfoot td.quiet { font-weight: 400; }
.own-stale { color: var(--caution); font-size: 11.5px; }
.own-notes { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--ink-2); }
.own-notes li { display: flex; gap: 10px; align-items: baseline; padding: 8px 12px; border-radius: 8px; background: var(--surface); border: 1px solid var(--border); overflow-wrap: anywhere; }
.own-notes li.warn { background: var(--warn-bg); color: var(--warn-ink); border-color: transparent; }
.own-notes li b { flex: none; }
.own-curves { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr)); gap: 16px; }
.own-curves h3 { font-size: 14px; font-weight: 650; }
.own-curve-sum { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 4px; font-size: 13px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.own-off { overflow: hidden; }
.own-off-row { display: grid; grid-template-columns: minmax(0, 14rem) auto minmax(0, 1fr); gap: 4px 18px; align-items: baseline; padding: 11px 18px; }
.own-off-row + .own-off-row { border-top: 1px solid var(--rule); }
.own-off-who { display: flex; align-items: baseline; gap: 8px; min-width: 0; overflow-wrap: anywhere; }
.own-off-who span:not(.tag) { color: var(--muted); font-size: 12.5px; }
.own-off-who .tag { margin-left: 0; }
.own-off-num { font-size: 13px; color: var(--ink-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.own-rules { margin: 0; padding-left: 1.2em; display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--ink-2); max-width: 90ch; }
.own-import .paste-foot label.act { position: relative; cursor: pointer; }
.own-file { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.own-import .paste-foot label.act:focus-within { outline: 2px solid var(--series-1); outline-offset: 2px; }
.own-preview { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.own-cols { display: flex; flex-direction: column; gap: 12px; }
.own-cols-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.own-cols-head b { font-size: 14px; font-weight: 650; }
.own-check { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ink-2); cursor: pointer; margin-left: auto; }
.own-check input { accent-color: var(--ink); margin: 0; }
.own-cols-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.own-col { display: flex; flex-direction: column; gap: 4px; padding: 8px 10px; border-radius: 10px; border: 1px solid var(--border); background: var(--bg); min-width: 0; max-width: 100%; }
.own-col.on { border-color: var(--axis); background: var(--surface); }
.own-col-title { font-size: 12px; color: var(--muted); }
.own-col small { font-size: 11.5px; color: var(--ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.own-col select, .own-what select { font: inherit; font-size: 13px; color: var(--ink); background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 3px 6px; max-width: 100%; }
.own-edit td { vertical-align: top; }
.own-edit .own-src { color: var(--muted); font-size: 12.5px; max-width: 18rem; overflow: hidden; text-overflow: ellipsis; }
.own-edit .own-what { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; white-space: normal; min-width: 14rem; max-width: 26rem; font-size: 13px; }
.own-edit .own-what span:not(.chip):not(.inbox-error) { color: var(--ink-2); }
.own-edit .own-what .chip { padding: 0 8px; font-size: 11.5px; }
.own-edit .own-what .inbox-error { padding: 1px 8px; }
.own-input { font: 13px var(--font-mono); color: var(--ink); background: var(--bg); border: 1px solid var(--border); border-radius: 7px; padding: 3px 7px; min-width: 0; }
.own-input:disabled { opacity: .5; }
.own-row-act { display: flex; gap: 6px; }
.own-edit tr.own-off-line td:not(.own-act-cell) { opacity: .55; }
.own-confirm { padding-top: 4px; }
@media (max-width: 720px) {
  .own-board .kpi .value { font-size: 21px; }
  .own-off-row { grid-template-columns: minmax(0, 1fr) auto; padding-left: 14px; padding-right: 14px; }
  .own-off-row .quiet { grid-column: 1 / -1; }
  .own-check { margin-left: 0; }
}

/* ---- 顶栏右边（电脑和平板）：状态钮、外观钮、账号块，和它们的浮层（topbar.js）。手机上整条顶栏藏着 ----
   壳子自己只用正文色和灰；要人留意的才用提醒的黄。不借账户色和涨跌色 */
.topbar .tools { align-self: flex-start; flex-wrap: nowrap; gap: 8px; }
.tb-item { position: relative; flex: none; }
.tb-status, .tb-icon, .tb-account { height: 36px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--ink-2); cursor: pointer; font: inherit; }
.tb-status:hover, .tb-icon:hover, .tb-account:hover, .tb-item.is-open > button { color: var(--ink); border-color: var(--axis); }
.tb-status { display: inline-flex; align-items: center; gap: 8px; padding: 0 14px 0 12px; font-size: 13px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.tb-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--muted); flex: none; }
.tb-status.warn { background: var(--warn-bg); color: var(--warn-ink); border-color: transparent; font-weight: 600; }
.tb-status.warn .tb-dot { background: var(--caution); box-shadow: 0 0 0 3px color-mix(in oklab, var(--caution) 24%, transparent); }
.tb-icon { width: 36px; display: inline-flex; align-items: center; justify-content: center; padding: 0; }
.tb-icon svg { width: 18px; height: 18px; }
.tb-account { display: inline-flex; align-items: center; gap: 9px; max-width: 230px; padding: 0 11px 0 3px; color: var(--ink); }
.tb-account > svg { width: 12px; height: 12px; flex: none; color: var(--muted); }
.tb-avatar { flex: none; width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--ink); color: var(--surface); font-size: 13px; font-weight: 700; }
.tb-avatar.host { background: var(--rule); color: var(--ink); }
.tb-avatar svg { width: 16px; height: 16px; }
.tb-avatar.big { width: 38px; height: 38px; font-size: 16px; }
.tb-avatar.big svg { width: 20px; height: 20px; }
.tb-who { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; text-align: left; }
.tb-who b { font-size: 13px; font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-who small { font-size: 11px; color: var(--muted); }
.tb-pop { position: absolute; right: 0; top: calc(100% + 8px); z-index: 30; min-width: 200px; padding: 6px; background: var(--surface); border: 1px solid var(--border); border-radius: 14px;
  box-shadow: 0 2px 6px rgba(15, 20, 25, .06), 0 16px 40px -14px rgba(15, 20, 25, .3); }
.tb-pop-status { width: 316px; padding: 8px 4px 4px; }
.tb-pop-title { padding: 2px 12px 8px; font-size: 12px; font-weight: 600; color: var(--muted); }
.tb-kv { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 9px 12px; border-top: 1px solid var(--rule); }
.tb-kv-key { flex: none; font-size: 13px; color: var(--ink-2); }
.tb-kv-val { min-width: 0; display: flex; flex-direction: column; align-items: flex-end; gap: 1px; text-align: right; }
.tb-kv-val b { font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.tb-kv-val small { font-size: 11.5px; line-height: 1.45; color: var(--muted); }
.tb-kv.warn .tb-kv-val small { color: var(--caution); font-weight: 600; }
.tb-kv.warn .tb-kv-key::after { content: ""; display: inline-block; width: 7px; height: 7px; margin-left: 7px; border-radius: 50%; background: var(--caution); vertical-align: 1px; }
.tb-menu-row { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 0; border-radius: 9px; background: none; color: var(--ink); font: inherit; font-size: 13.5px; text-align: left; text-decoration: none; cursor: pointer; white-space: nowrap; }
.tb-menu-row:hover, .tb-menu-row:focus-visible { background: var(--rule); outline: none; }
.tb-menu-row:disabled { color: var(--muted); cursor: default; }
.tb-menu-row svg { width: 17px; height: 17px; flex: none; color: var(--ink-2); }
.tb-menu-theme { width: 176px; }
.tb-menu-theme .tb-menu-row svg:last-child { margin-left: auto; width: 15px; height: 15px; color: var(--ink); visibility: hidden; }
.tb-menu-theme .tb-menu-row[aria-checked="true"] { font-weight: 650; }
.tb-menu-theme .tb-menu-row[aria-checked="true"] svg:last-child { visibility: visible; }
.tb-menu-account { width: 248px; }
.tb-menu-head { display: flex; align-items: center; gap: 11px; padding: 8px 10px 12px; margin-bottom: 4px; border-bottom: 1px solid var(--rule); }
.tb-menu-head .tb-who b { font-size: 14px; }
.tb-menu-head .tb-who small { font-size: 12px; white-space: normal; line-height: 1.45; }
.tb-menu-sep { display: block; height: 1px; margin: 4px 4px; background: var(--rule); }
.tb-menu-row.out { color: var(--ink-2); }
.tb-menu-note { padding: 6px 10px 8px; font-size: 12.5px; line-height: 1.5; color: var(--muted); }
@media (prefers-reduced-motion: no-preference) { .tb-status, .tb-icon, .tb-account { transition: border-color .15s, color .15s, background-color .15s; } }
@media (max-width: 1040px) {
  .tb-account { max-width: 168px; }
}

/* ---- 数字条（kit.js 的 statline）：一行排开的“标签 + 数”，细竖线分开，高约 44；放不下换行，手机上两列（mobile.css）。
   替换各板顶上那排“次要的大数字卡”用；数字本身是主角的（持仓板顶上、市场板的广度）仍然用 .kpis */
.statline { display: flex; flex-wrap: wrap; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; }
.statline:empty { display: none; }
.statline-item { display: flex; align-items: baseline; gap: 8px; padding: 9px 16px; min-height: 42px; box-shadow: -1px 0 0 var(--rule); }
.statline-item small { font-size: 12.5px; color: var(--muted); white-space: nowrap; }
.statline-item b { font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; display: inline-flex; align-items: center; gap: 5px; }
.statline-item em { font-style: normal; font-size: 12px; color: var(--muted); white-space: nowrap; }
.statline-item.warn b { color: var(--caution); }

/* ---- 折叠小节（kit.js 的 fold）：<details class="fold">，标题一行：名字 + 条数 + 小箭头，默认收起 ---- */
details.fold { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); min-width: 0; }
.fold > summary { display: flex; align-items: center; gap: 10px; padding: 12px 18px; cursor: pointer; list-style: none; font-size: 14px; font-weight: 650; border-radius: var(--radius); }
.fold > summary::-webkit-details-marker { display: none; }
.fold > summary:hover .fold-chev { border-color: var(--ink); }
.fold-count { font-style: normal; font-size: 12px; font-weight: 600; color: var(--ink-2); font-variant-numeric: tabular-nums; border: 1px solid var(--border); border-radius: 999px; padding: 0 8px; background: var(--bg); }
.fold-note { font-size: 12.5px; font-weight: 400; color: var(--muted); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fold-chev { flex: none; margin-left: auto; width: 7px; height: 7px; border-right: 1.6px solid var(--muted); border-bottom: 1.6px solid var(--muted); transform: translateY(-2px) rotate(45deg); }
.fold[open] > summary .fold-chev { transform: translateY(2px) rotate(-135deg); }
.fold[open] > summary { border-bottom: 1px solid var(--rule); border-radius: var(--radius) var(--radius) 0 0; }
.fold-body { padding: 4px 18px 14px; min-width: 0; }

/* ---- 账号板（accounts.js） ---- */
.acct-part { display: flex; flex-direction: column; gap: 26px; min-width: 0; }
.acct-part:empty { display: none; }
.acct-id { padding: 18px 20px; }
.acct-id-main { display: flex; align-items: center; gap: 14px; min-width: 0; }
.acct-id-text { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.acct-id-name { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; min-width: 0; }
.acct-id-name b { font-size: 20px; font-weight: 700; letter-spacing: -.015em; overflow-wrap: anywhere; }
.acct-id-text p { font-size: 13.5px; color: var(--ink-2); }
.acct-avatar { flex: none; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--ink); color: var(--surface); font-size: 13px; font-weight: 700; }
.acct-avatar.big { width: 48px; height: 48px; font-size: 20px; }
.acct-avatar.host { background: var(--rule); color: var(--ink); }
.acct-avatar svg { width: 24px; height: 24px; }
.acct-role { display: inline-flex; align-items: center; gap: 6px; padding: 1px 10px; border-radius: 999px; border: 1px solid var(--border); background: var(--bg); color: var(--ink); font-size: 12px; font-weight: 600; white-space: nowrap; }
.acct-role::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--muted); }
.acct-role.admin::before { background: var(--ink); }
.acct-role.member::before { background: var(--ink-2); }
.acct-role.reset::before { background: var(--caution); }
.acct-duo { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 26px 20px; align-items: start; }
@media (max-width: 1040px) { .acct-duo { grid-template-columns: minmax(0, 1fr); } }
.acct-form { display: flex; flex-direction: column; gap: 14px; }
.acct-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.acct-label { font-size: 12.5px; font-weight: 600; color: var(--ink-2); }
.acct-input { width: 100%; height: 40px; padding: 0 12px; font: inherit; font-size: 14px; color: var(--ink); background: var(--bg); border: 1px solid var(--border); border-radius: 10px; }
.acct-input:hover { border-color: var(--axis); }
.acct-input:focus { outline: none; border-color: var(--series-1); background: var(--surface); box-shadow: 0 0 0 3px color-mix(in oklab, var(--series-1) 20%, transparent); }
.acct-input::placeholder { color: var(--muted); }
.acct-hidden { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.acct-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.acct-said { font-size: 13px; color: var(--ink-2); }
.acct-said:empty { display: none; }
.acct-said.ok { color: var(--ink); font-weight: 600; }
.acct-said.bad { padding: 8px 12px; border-radius: 8px; background: var(--warn-bg); color: var(--warn-ink); }
.acct-list { overflow: hidden; }
.acct-li { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px 16px; padding: 12px 18px; }
.acct-li + .acct-li { border-top: 1px solid var(--rule); }
.acct-li-main { flex: 1 1 15rem; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.acct-li-head { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; min-width: 0; }
.acct-li-head b { font-size: 14px; font-weight: 650; overflow-wrap: anywhere; }
.acct-li-main small, .acct-who small { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.acct-li-act { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; max-width: 100%; }
.acct-li-act:empty { display: none; }
.acct-note-text { font-weight: 600; color: var(--ink); }
.acct-tag { padding: 0 8px; border-radius: 999px; border: 1px solid var(--border); font-size: 11.5px; line-height: 1.6; color: var(--muted); white-space: nowrap; }
.acct-tag.on { background: var(--ink); border-color: var(--ink); color: var(--surface); font-weight: 600; }
.acct-state { display: inline-block; padding: 0 9px; border-radius: 999px; font-size: 12px; line-height: 1.7; white-space: nowrap; border: 1px solid var(--border); color: var(--ink-2); }
.acct-state.off, .acct-state.bad { background: var(--warn-bg); color: var(--warn-ink); border-color: transparent; font-weight: 600; }
.act.danger:hover:not(:disabled) { color: var(--warn-ink); border-color: var(--caution); }
.acct-empty { padding: 14px 18px; font-size: 13px; color: var(--muted); }
.acct-sub { display: flex; flex-direction: column; gap: 8px; }
.acct-sub h3, .acct-fold summary { font-size: 13px; font-weight: 650; color: var(--ink-2); }
.acct-fold summary { cursor: pointer; padding: 2px 0; }
.acct-fold[open] summary { margin-bottom: 8px; }

/* 管账号：标题和一条数字条 */
.acct-admin-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px 20px; padding-top: 26px; border-top: 1px solid var(--rule); }
.acct-admin-head h2 { font-size: 21px; font-weight: 700; letter-spacing: -.015em; }
/* 从“管账号”进来会滚到这一段。平板上顶上粘着一排导航标签，让开它（手机的在 mobile.css） */
@media (max-width: 880px) { #accounts-admin { scroll-margin-top: 58px; } }

/* 成员、最近登录：一张紧凑的表（div 排的格子，窄了换成每人一张小卡） */
.acct-table { overflow: hidden; }
.acct-tr { display: grid; align-items: center; gap: 8px 16px; padding: 10px 18px; min-width: 0; }
.acct-tr + .acct-tr { border-top: 1px solid var(--rule); }
.acct-th { padding-top: 8px; padding-bottom: 8px; font-size: 12px; color: var(--muted); background: color-mix(in oklab, var(--bg) 55%, var(--surface)); }
.acct-th .r, .acct-tr .r { text-align: right; }
.acct-members .acct-tr { grid-template-columns: minmax(11rem, 1.4fr) auto 4.2rem 7.6rem 3.6rem minmax(10.5rem, auto); }
.acct-member { font-size: 13px; color: var(--ink-2); }
.acct-member > .acct-link { grid-column: 1 / -1; }
.acct-who { display: flex; align-items: center; gap: 10px; min-width: 0; }
.acct-who-text { display: flex; flex-direction: column; min-width: 0; }
.acct-who b { color: var(--ink); }
.acct-member.off .acct-who b { color: var(--muted); }
.acct-cell-last, .acct-cell-count { font-variant-numeric: tabular-nums; white-space: nowrap; }
.acct-cell-act { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; min-width: 0; }
.acct-seg { align-self: center; }
.acct-seg button { padding: 3px 11px; font-size: 12.5px; }
.acct-logins .acct-tr { grid-template-columns: 7.6rem minmax(0, 1fr) minmax(0, 10rem) 9rem; }
.acct-login { font-size: 13px; color: var(--ink-2); }
.acct-cell-name { color: var(--ink); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.acct-cell-when, .acct-cell-ip { font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 1180px) {
  .acct-members .acct-th { display: none; }
  .acct-members .acct-tr { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "who state" "role act" "last count"; padding-top: 12px; padding-bottom: 12px; }
  .acct-members .acct-who { grid-area: who; }
  .acct-members .acct-cell-state { grid-area: state; justify-self: end; }
  .acct-members .acct-cell-role { grid-area: role; justify-self: start; }
  .acct-members .acct-cell-act { grid-area: act; }
  .acct-members .acct-cell-last { grid-area: last; font-size: 12px; color: var(--muted); }
  .acct-members .acct-cell-count { grid-area: count; font-size: 12px; color: var(--muted); }
  .acct-members .acct-cell-last::before, .acct-members .acct-cell-count::before { content: attr(data-label) " "; }
}
@media (max-width: 900px) {
  .acct-logins .acct-th { display: none; }
  .acct-logins .acct-tr { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name result" "when ip"; gap: 2px 12px; }
  .acct-logins .acct-cell-name { grid-area: name; }
  .acct-logins .acct-cell-result { grid-area: result; justify-self: end; }
  .acct-logins .acct-cell-when { grid-area: when; color: var(--muted); }
  .acct-logins .acct-cell-ip { grid-area: ip; justify-self: end; color: var(--muted); }
}

/* 邀请：一行表单，生成的链接只显示这一次 */
.acct-invite { display: grid; grid-template-columns: auto minmax(10rem, 1fr) auto auto; align-items: end; gap: 14px 18px; }
.acct-invite > .acct-said { grid-column: 1 / -1; }
@media (max-width: 1180px) { .acct-invite { grid-template-columns: auto minmax(0, 1fr); } .acct-invite > .acct-row { grid-column: 1 / -1; } }
.acct-link { display: flex; flex-direction: column; gap: 8px; padding: 14px 16px; border-radius: 12px; background: var(--bg); border: 1px dashed var(--axis); min-width: 0; }
.acct-link-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 4px 12px; }
.acct-link-head b { font-size: 13.5px; color: var(--ink); overflow-wrap: anywhere; }
.acct-link-row { display: flex; gap: 8px; min-width: 0; }
.acct-link-row .acct-input { flex: 1 1 auto; min-width: 0; height: 36px; font-size: 12.5px; background: var(--surface); }
.acct-link-row .act { flex: none; }
.acct-link-note { font-size: 12.5px; color: var(--ink-2); }
.acct-link .quiet:empty { display: none; }
/* 自选：每一行是谁加的；成员看到的自己的份额 */
.wl-by { font-size: 11.5px; color: var(--muted); white-space: nowrap; align-self: center; }
.wl-by.mine { color: var(--ink-2); font-weight: 600; }
.wl-quota b { color: var(--ink); font-weight: 650; }
.wl-quota small { color: var(--muted); font-size: 12px; margin-left: 4px; }
.own-only { align-self: center; padding: 0 10px; font-size: 12.5px; color: var(--muted); white-space: nowrap; }

/* ================= 说明面板（notes.js）================= */
/* 说明性质的话：正文里一律不显示，收进“说明”面板。只认这个类名，别的规则不碰（各板的状态字照常显示） */
.x-note { display: none !important; }
/* 小节标题旁的小 ⓘ：点它打开面板并滚到这一节 */
.note-i { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; margin: -3px 0 -3px 5px; padding: 0; border: 0; border-radius: 50%;
  background: none; color: var(--muted); cursor: pointer; vertical-align: middle; }
.note-i svg { width: 16px; height: 16px; }
.note-i:hover { color: var(--ink); background: var(--rule); }
/* 电脑和平板：右侧抽屉，宽 380 */
.note-layer { position: fixed; inset: 0; z-index: 50; }
.note-scrim { position: absolute; inset: 0; background: rgba(9, 12, 16, .3); opacity: 0; transition: opacity .2s linear; }
.note-drawer { position: absolute; top: 0; right: 0; bottom: 0; width: min(380px, calc(100vw - 40px)); display: flex; flex-direction: column; background: var(--surface);
  border-left: 1px solid var(--border); box-shadow: -24px 0 60px -28px rgba(15, 20, 25, .35); outline: none; transform: translateX(100%); transition: transform .26s cubic-bezier(.32, .72, 0, 1); }
.note-layer.is-in .note-scrim { opacity: 1; }
.note-layer.is-in .note-drawer { transform: none; }
.note-head { flex: none; display: flex; align-items: flex-start; gap: 12px; padding: 18px 14px 14px 22px; border-bottom: 1px solid var(--rule); }
.note-head-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.note-head-text small { font-size: 12px; font-weight: 600; color: var(--muted); letter-spacing: .04em; }
.note-head-text h2 { font-size: 19px; font-weight: 700; letter-spacing: -.01em; }
.note-close { flex: none; width: 34px; height: 34px; display: inline-flex; align-items: center; justify-content: center; padding: 0; border: 0; border-radius: 50%; background: none; color: var(--ink-2); cursor: pointer; }
.note-close:hover { background: var(--rule); color: var(--ink); }
.note-close svg { width: 18px; height: 18px; }
.note-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 18px 22px 32px; display: flex; flex-direction: column; gap: 10px; }
.note-lede { font-size: 14.5px; line-height: 1.75; color: var(--ink); padding-bottom: 6px; }
.note-group { display: flex; flex-direction: column; gap: 6px; margin: 0 -12px; padding: 12px; border-radius: 12px; transition: background-color .5s; }
.note-group-title { font-size: 13px; font-weight: 650; color: var(--ink); }
.note-item { font-size: 13.5px; line-height: 1.7; color: var(--ink-2); overflow-wrap: anywhere; }
.note-item > * { display: block; margin: 0; padding: 0; font: inherit; color: inherit; background: none; border: 0; max-width: none; }
.note-item > ul, .note-item > ol { padding-left: 1.2em; }
.note-item code { font: 12.5px var(--font-mono); background: var(--bg); border-radius: 5px; padding: 1px 5px; }
.note-group.is-target { background: var(--bg); }
html.note-locked { overflow: hidden; }
@media (prefers-reduced-motion: reduce) { .note-drawer { transition: none; } }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .note-drawer { box-shadow: -24px 0 60px -24px rgba(0, 0, 0, .7); } :root:not([data-theme="light"]) .note-scrim { background: rgba(0, 0, 0, .5); } }
:root[data-theme="dark"] .note-drawer { box-shadow: -24px 0 60px -24px rgba(0, 0, 0, .7); }
:root[data-theme="dark"] .note-scrim { background: rgba(0, 0, 0, .5); }

/* ================= 外壳：左栏底部的两地时钟、页脚、平板的时钟 ================= */
.rail-foot { gap: 6px; padding: 0 10px; }
.rail-clock { display: flex; align-items: baseline; gap: 8px; font-size: 12px; color: var(--muted); }
.rail-clock > span { width: 26px; flex: none; }
.rail-clock b { font: 600 13.5px var(--font-mono); color: var(--ink); letter-spacing: -.01em; }
.rail-clock em { font-style: normal; font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.rail-clock em.on { color: var(--ink); font-weight: 600; }
.rail-next { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-top: 4px; padding-top: 9px; border-top: 1px solid var(--rule); font-size: 12px; color: var(--muted); }
.rail-next b { font-size: 12.5px; }
/* 页脚一行小字：数据读取时间 · 没有连接券商 · 不是投资建议（全站只在这里说一次） */
#footer { display: flex; flex-wrap: wrap; align-items: center; row-gap: 2px; padding-top: 14px; padding-bottom: 22px; }
#footer span:not(:last-child)::after { content: "·"; margin: 0 8px; color: var(--axis); }
/* 平板没有左栏：时钟在状态钮的浮层最上面；电脑上藏着 */
.tb-clocks { display: none; }
@media (max-width: 880px) {
  .tb-clocks { display: flex; gap: 22px; padding: 4px 12px 10px; }
  .tb-clock { display: flex; align-items: baseline; gap: 6px; }
  .tb-clock small { font-size: 12px; color: var(--muted); }
  .tb-clock b { font-size: 16px; font-weight: 650; }
}
.tip .row.short { grid-template-columns: 18px 44px auto; }

/* ================= 总览（overview.js） ================= */
#view-overview { gap: 18px; }
.ov-top { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 18px; align-items: stretch; }
.ov-card { padding: 16px 20px 18px; gap: 12px; min-width: 0; }
.ov-card > header { align-items: center; min-height: 28px; }
.ov-card > header h2 { font-size: 15px; font-weight: 650; letter-spacing: 0; }
.ov-card > header .ranges button { padding: 4px 11px; font-size: 12.5px; }
/* 时钟带：一张卡分左右两半，台北｜纽约。等宽大字，秒小一号；纽约那一半带美股开没开和下一个交易日 */
.ov-clocks { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: hidden; }
.ov-clocks:empty { display: none; }
.ov-clock { position: relative; display: flex; align-items: flex-end; justify-content: space-between; gap: 8px 16px; padding: 12px 22px 13px; min-width: 0; }
.ov-clock + .ov-clock { border-left: 1px solid var(--rule); }
.ov-clock-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ov-clock-head { display: flex; align-items: center; flex-wrap: wrap; gap: 2px 9px; font-size: 12.5px; color: var(--muted); }
.ov-clock-head .city { font-size: 14px; font-weight: 650; color: var(--ink); }
.ov-clock-head .abbr { font-family: var(--font-mono); font-size: 11px; border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; }
.ov-clock-head .abbr:empty { display: none; }
.ov-clock-time { display: flex; align-items: baseline; line-height: 1; font-variant-numeric: tabular-nums; }
.ov-clock-time b { font-size: 40px; font-weight: 700; letter-spacing: -.03em; }
.ov-clock-time .sec { font-size: 20px; font-weight: 600; color: var(--muted); margin-left: 1px; }
.ov-clock-side { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; font-size: 13px; color: var(--ink-2); text-align: right; padding-bottom: 2px; min-width: 0; }
.ov-clock-side .state { font-size: 12px; }
.ov-clock-market { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 4px 10px; }
.ov-clock-next { font-size: 12px; color: var(--muted); white-space: nowrap; }
.ov-clock-next b { color: var(--ink-2); font-weight: 600; font-size: 12px; }
@media (max-width: 1040px) { .ov-clock { padding-left: 18px; padding-right: 18px; } .ov-clock-time b { font-size: 36px; } }
/* AI 主卡 */
.ov-ai { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 18px 22px 18px; display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.ov-ai-label { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); }
.ov-ai-label b { font-size: 14px; font-weight: 650; color: var(--ink); }
.ov-ai-label .tag { margin-left: auto; }
.ov-ai-num { font-size: clamp(36px, 3.6vw, 48px); font-weight: 700; letter-spacing: -.04em; line-height: 1.02; font-variant-numeric: tabular-nums; margin-top: -2px; }
.ov-ai-num.muted { font-size: 26px; color: var(--muted); letter-spacing: -.01em; }
.ov-ai-line { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 16px; font-size: 13.5px; color: var(--ink-2); font-variant-numeric: tabular-nums; margin-top: -4px; }
.ov-ai-line span { display: inline-flex; align-items: center; gap: 6px; }
.ov-ai-line b, .ov-ai-line .delta { color: var(--ink); font-weight: 650; }
.ov-ai-alloc { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; font-size: 12.5px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.ov-ai-alloc .meter { height: 7px; border-radius: 4px; }
.ov-vs { display: flex; flex-direction: column; gap: 6px; padding-top: 12px; border-top: 1px solid var(--rule); }
.ov-vs-head { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.ov-vs-cells { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.ov-vs-cells > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ov-vs-cells span { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ov-vs-cells .key { width: 12px; }
.ov-vs-cells b { font-size: 17px; font-weight: 700; letter-spacing: -.01em; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ov-ai-next { display: flex; align-items: baseline; gap: 10px; padding-top: 12px; border-top: 1px solid var(--rule); font-size: 13px; }
.ov-ai-next span { flex: none; color: var(--muted); font-size: 12.5px; }
.ov-ai-next b { font-weight: 600; color: var(--ink); }
.ov-ai-next.warn b { color: var(--caution); }
.ov-ai-state { font-size: 13.5px; color: var(--ink-2); }
.ov-ai-days { margin-top: auto; font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.ov-ai .trouble { font-size: 13px; padding: 8px 12px; }
/* 净值曲线 */
.ov-curve { gap: 8px; }
.ov-legend { gap: 4px 16px; }
.ov-legend .off { color: var(--muted); }
.ov-legend small { font-size: 11.5px; color: var(--muted); margin-left: 2px; }
.ov-curve .plot { margin: 0 -6px 0 -8px; }
/* 账户对照：div 排的表，一个账户一行（a），点一行进业绩 */
.ov-accts-card { padding-bottom: 6px; gap: 6px; }
.ov-accts { display: flex; flex-direction: column; margin: 0 -20px; }
.ov-acct { display: grid; grid-template-columns: minmax(150px, 1.35fr) minmax(96px, 1fr) minmax(70px, .7fr) minmax(84px, .85fr) minmax(92px, .9fr) 112px minmax(118px, 1fr) minmax(96px, 1.1fr) 10px;
  gap: 14px; align-items: center; padding: 11px 20px; border-top: 1px solid var(--rule); color: inherit; text-decoration: none; min-width: 0; font-variant-numeric: tabular-nums; }
.ov-acct .c-nums, .ov-acct .c-foot { display: contents; }
.ov-acct .c { min-width: 0; }
.ov-acct-head { padding-top: 7px; padding-bottom: 7px; font-size: 12px; color: var(--muted); }
.ov-acct-head .c-eq, .ov-acct-head .c-day, .ov-acct-head .c-fwd, .ov-acct-head .c-all, .ov-acct .c-eq, .ov-acct .c-day, .ov-acct .c-fwd, .ov-acct .c-all { text-align: right; }
.ov-acct .c-day .delta { justify-content: flex-end; }
a.ov-acct:hover { background: color-mix(in oklab, var(--ink) 3.5%, transparent); }
a.ov-acct:hover .ov-acct-who b { text-decoration: underline; }
.ov-acct-who { display: flex; align-items: center; gap: 8px; min-width: 0; }
.ov-acct-who b { font-size: 14px; font-weight: 650; white-space: nowrap; }
.ov-acct-who .tag { margin-left: 0; font-size: 11px; padding: 0 7px; }
.ov-acct .c small { display: block; font-size: 11.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ov-acct .c-name small { padding-left: 26px; }
.ov-acct .c b { font-weight: 650; }
.ov-acct .c-eq b { font-size: 16px; letter-spacing: -.01em; }
.ov-acct .dim { color: var(--muted); font-weight: 500 !important; }
.ov-acct .c-pend { font-size: 12.5px; color: var(--muted); }
.ov-acct .c-pend.on { color: var(--ink); font-weight: 600; }
.ov-acct > .m-chev { width: 7px; height: 7px; border-top: 1.6px solid var(--axis); border-right: 1.6px solid var(--axis); transform: rotate(45deg); }
a.ov-acct:hover > .m-chev { border-color: var(--ink-2); }
.ov-acct.dormant .c-pend { grid-column: 3 / -1; color: var(--ink-2); white-space: normal; }
.ov-spark { position: relative; height: 28px; }
.ov-spark svg { display: block; width: 100%; height: 28px; }
.ov-spark i { position: absolute; right: 0; width: 7px; height: 7px; border-radius: 50%; background: var(--c); border: 1.5px solid var(--surface); transform: translate(50%, -50%); }
.ov-alloc { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 8px; }
.ov-alloc b { font-size: 13px; min-width: 44px; text-align: right; }
/* 决策｜持仓｜新闻 */
.ov-trio { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr) minmax(0, 1.1fr); gap: 18px; align-items: stretch; }
.ov-body { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.ov-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ov-head b { font-size: 14px; }
.ov-why { display: flex; flex-direction: column; gap: 5px; }
.ov-why-head { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); min-width: 0; }
.ov-why-head .made { font-size: 11px; font-weight: 600; color: var(--ink-2); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; white-space: nowrap; }
.ov-why-head .mono { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-why .clamp { -webkit-line-clamp: 3; line-height: 1.65; }
.ov-why .clamp.open { display: block; -webkit-line-clamp: unset; overflow: visible; }
.ov-more { margin-left: auto; flex: none; padding: 0; border: 0; background: none; font-size: 12.5px; color: var(--ink-2); cursor: pointer; text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--axis); }
.ov-more:hover { color: var(--ink); }
.ov-body .steps3 { grid-template-columns: minmax(0, 1fr); gap: 0; border: 1px solid var(--rule); border-radius: 10px; }
.ov-body .steps3 div { flex-direction: row; justify-content: space-between; align-items: baseline; gap: 12px; border: 0; border-radius: 0; padding: 8px 12px; }
.ov-body .steps3 div + div { border-top: 1px solid var(--rule); }
.ov-body .steps3 span { flex: none; font-size: 12.5px; }
.ov-body .steps3 b { text-align: right; font-size: 13px; }
.ov-body .quiet { font-size: 12px; }
.ov-body .mini-row { grid-template-columns: minmax(0, 118px) minmax(0, 1fr) 48px; }
.ov-body .mini-row .who { align-items: flex-start; }
.ov-spark.few { display: flex; align-items: center; justify-content: flex-end; }
.ov-spark.few small { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.ov-legend-line { font-size: 12px; color: var(--muted); }
/* 离风控限额：三行，名字 + 现在 / 上限 + 细条；到了九成变黄 */
.ov-risk { display: flex; flex-direction: column; gap: 8px; padding-top: 12px; border-top: 1px solid var(--rule); }
.ov-risk-title { font-size: 12px; font-weight: 600; color: var(--muted); }
.ov-risk-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: baseline; gap: 4px 10px; font-size: 12.5px; color: var(--ink-2); }
.ov-risk-row b { font-weight: 650; color: var(--ink); font-variant-numeric: tabular-nums; white-space: nowrap; }
.ov-risk-row b small { font-size: 11.5px; font-weight: 500; color: var(--muted); }
.ov-risk-track { grid-column: 1 / -1; height: 4px; border-radius: 2px; background: var(--rule); overflow: hidden; }
.ov-risk-track i { display: block; height: 100%; min-width: 2px; border-radius: 2px; background: var(--ink-2); }
.ov-risk-row.warn b { color: var(--caution); }
.ov-risk-row.warn .ov-risk-track i { background: var(--caution); }
.ov-empty { font-size: 13.5px; color: var(--ink-2); }
.ov-news-card { padding-bottom: 4px; }
.ov-news { margin: 0 -20px; }
.ov-news .toplist a.row { padding: 10px 20px; }
.ov-news .toplist li { border-top: 1px solid var(--rule); border-bottom: 0; }
.ov-news .toplist .fact { font-size: 13.5px; line-height: 1.5; }
.ov-news .empty-line { padding: 10px 20px 14px; }
/* 系统一行：每一项一个点，有问题的黄 */
.ov-sys { display: flex; align-items: center; gap: 10px 18px; padding: 12px 20px; color: inherit; text-decoration: none; font-size: 13px; }
.ov-sys:hover { border-color: var(--axis); }
.ov-sys:hover .ov-sys-go { color: var(--ink); }
.ov-sys-items { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 22px; min-width: 0; flex: 1; }
.ov-sys-item { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; color: var(--muted); font-variant-numeric: tabular-nums; }
.ov-sys-item b { font-weight: 600; color: var(--ink); }
.ov-sys-item .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ink-2); flex: none; }
.ov-sys-item.off .dot { background: none; box-shadow: inset 0 0 0 1.5px var(--muted); }
.ov-sys-item.off b { color: var(--ink-2); font-weight: 500; }
.ov-sys-item.warn .dot { background: var(--caution); box-shadow: 0 0 0 3px color-mix(in oklab, var(--caution) 22%, transparent); }
.ov-sys-item.warn b { color: var(--caution); }
.ov-sys-go { flex: none; display: inline-flex; align-items: center; gap: 6px; color: var(--ink-2); font-size: 13px; }
.ov-sys-go::after { content: ""; width: 6px; height: 6px; border-top: 1.6px solid currentColor; border-right: 1.6px solid currentColor; transform: rotate(45deg); }
/* 窄一些的电脑（和 1100 宽）：小线那一列不摆，待执行有内容才另起一行；三栏变成决策占一行、持仓和新闻并排 */
@media (max-width: 1240px) {
  .ov-acct { grid-template-columns: minmax(140px, 1.35fr) minmax(92px, 1fr) minmax(68px, .7fr) minmax(82px, .85fr) minmax(88px, .9fr) minmax(112px, 1fr) 10px; row-gap: 4px; }
  .ov-acct .c-spark, .ov-acct-head .c-pend { display: none; }
  .ov-acct .c-pend { grid-column: 1 / -2; grid-row: 2; padding-left: 26px; }
  .ov-acct .c-pend:not(.on) { display: none; }
  .ov-acct .c-pend.on::before { content: "待执行 "; color: var(--muted); font-weight: 400; }
  .ov-acct > .m-chev { grid-column: -2; grid-row: 1; }
  .ov-trio { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ov-trio > :first-child { grid-column: 1 / -1; }
}
@media (max-width: 1040px) and (min-width: 761px) {
  .ov-top { grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr); }
}
