/* 手机端（760 宽以下）。index.html 用 media="(max-width: 760px)" 引这一份：电脑和平板上它不生效（浏览器照样会把文件下载下来，只是不套用），所以这里的规则不用再包媒体查询。
   不是把电脑版挤窄：顶上一条钉住的导航行，底下五格底栏，正文按一列排；表格换成列表或卡片，按钮组换成分段控件，
   能点的地方热区至少 44。颜色沿用 app.css 的令牌（涨蓝跌红、三个账户三种颜色、提醒是黄）；外壳自己的选中态只用正文色和灰，
   不借账户色和涨跌色，免得和数据的颜色混在一起。 */

/* ---- 手机才用的几个令牌：填充、发丝线、半透明栏、投影、弹层 ---- */
:root {
  --m-fill: rgba(15, 20, 25, .065); --m-fill-2: rgba(15, 20, 25, .035); --m-sep: rgba(15, 20, 25, .1);
  --m-line: #e6e9ed; --m-bar: rgba(244, 246, 248, .98); --m-thumb: #ffffff;
  --m-thumb-shadow: 0 1px 3px rgba(15, 20, 25, .13), 0 0 0 .5px rgba(15, 20, 25, .06);
  --m-shadow: 0 1px 2px rgba(15, 20, 25, .04), 0 10px 26px -18px rgba(15, 20, 25, .22);
  --m-lift: 0 -10px 36px rgba(15, 20, 25, .16); --m-scrim: rgba(9, 12, 16, .42); --m-sheet: #ffffff;
  --m-chev: #b6bec6; --m-press: rgba(15, 20, 25, .05);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --m-fill: rgba(255, 255, 255, .085); --m-fill-2: rgba(255, 255, 255, .045); --m-sep: rgba(255, 255, 255, .085);
    --m-line: #20262c; --m-bar: rgba(11, 14, 17, .98); --m-thumb: #2b3239;
    --m-thumb-shadow: 0 1px 2px rgba(0, 0, 0, .35);
    --m-shadow: inset 0 1px 0 rgba(255, 255, 255, .035);
    --m-lift: 0 -12px 40px rgba(0, 0, 0, .5); --m-scrim: rgba(0, 0, 0, .6); --m-sheet: #171c21;
    --m-chev: #4b555f; --m-press: rgba(255, 255, 255, .06);
  }
}
:root[data-theme="dark"] {
  --m-fill: rgba(255, 255, 255, .085); --m-fill-2: rgba(255, 255, 255, .045); --m-sep: rgba(255, 255, 255, .085);
  --m-line: #20262c; --m-bar: rgba(11, 14, 17, .98); --m-thumb: #2b3239;
  --m-thumb-shadow: 0 1px 2px rgba(0, 0, 0, .35);
  --m-shadow: inset 0 1px 0 rgba(255, 255, 255, .035);
  --m-lift: 0 -12px 40px rgba(0, 0, 0, .5); --m-scrim: rgba(0, 0, 0, .6); --m-sheet: #171c21;
  --m-chev: #4b555f; --m-press: rgba(255, 255, 255, .06);
}

/* ---- 底子 ---- */
body { font-size: 15px; -webkit-tap-highlight-color: transparent; }
.app { min-height: 100vh; min-height: 100dvh; }
.m-only { display: block; }
.m-hide { display: none !important; }
/* 电脑的顶栏（品牌、板名、说明、状态钮、外观钮、账号块）和横滑标签条：手机上换成导航行和底栏。数据状态弹层和“更多”读的是 status.js 那一份 */
.topbar, .tabs { display: none; }
.main { padding-bottom: calc(62px + env(safe-area-inset-bottom, 0px)); }
.views { padding: 6px max(16px, env(safe-area-inset-right, 0px)) 28px max(16px, env(safe-area-inset-left, 0px)); }
.view { gap: 24px; }
#footer { padding: 16px max(16px, env(safe-area-inset-right, 0px)) 18px max(16px, env(safe-area-inset-left, 0px)); line-height: 1.6; }
/* 手机上点到输入框不让页面放大：iOS 在字号小于 16 时会放大 */
input, select, textarea { font-size: 16px !important; }

/* ---- 导航行：钉在顶上，44 高，让出刘海；滑过去一点换实底加发丝线 ---- */
.m-nav { display: block; position: sticky; top: 0; z-index: 20; padding-top: env(safe-area-inset-top, 0px); background: var(--bg); transition: background-color .2s, box-shadow .2s; }
.m-nav.is-solid { background: var(--m-bar); -webkit-backdrop-filter: saturate(180%) blur(18px); backdrop-filter: saturate(180%) blur(18px); box-shadow: inset 0 -.5px 0 var(--m-sep); }
.m-nav-row { display: flex; align-items: center; height: 44px; padding: 0 max(6px, env(safe-area-inset-right, 0px)) 0 max(16px, env(safe-area-inset-left, 0px)); }
.m-nav.has-back .m-nav-row { padding-left: max(4px, env(safe-area-inset-left, 0px)); }
.m-back, .m-icon { flex: none; display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; border: 0; border-radius: 22px; background: none; color: var(--ink); padding: 0; cursor: pointer; }
.m-back svg { width: 24px; height: 24px; }
.m-icon { position: relative; color: var(--ink-2); }
.m-icon svg { width: 23px; height: 23px; }
.m-back:active, .m-icon:active { background: var(--m-fill); }
.m-title { flex: 1 1 auto; min-width: 0; font-size: 19px; font-weight: 700; letter-spacing: -.015em; line-height: 24px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 数据有要人留意的（行情落后、盘中行情没取成、交易日历不可用）：“说明”钮上一个黄点 */
.m-dot { position: absolute; top: 10px; right: 10px; width: 8px; height: 8px; border-radius: 50%; background: var(--caution); box-shadow: 0 0 0 2px var(--bg); }

/* ---- 底栏：五格，半透明加模糊，让出底部的横条 ---- */
.m-tabbar { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); position: fixed; left: 0; right: 0; bottom: 0; z-index: 20;
  padding: 5px max(6px, env(safe-area-inset-right, 0px)) max(4px, env(safe-area-inset-bottom, 0px)) max(6px, env(safe-area-inset-left, 0px));
  background: var(--m-bar); -webkit-backdrop-filter: saturate(180%) blur(18px); backdrop-filter: saturate(180%) blur(18px); box-shadow: inset 0 .5px 0 var(--m-sep); }
.m-tab { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; height: 52px; color: var(--muted); text-decoration: none; font-size: 10.5px; font-weight: 500; line-height: 13px; }
.m-tab-ic { display: flex; align-items: center; justify-content: center; width: 54px; height: 30px; border-radius: 15px; transition: background-color .2s; }
.m-tab-ic svg { width: 21px; height: 21px; }
/* 选中：正文色、加粗，图标底下垫一块中性的圆角块（不用颜色区分，读屏另有 aria-current） */
.m-tab[aria-current="page"] { color: var(--ink); font-weight: 700; }
.m-tab[aria-current="page"] .m-tab-ic { background: var(--m-fill); }
.m-tab[aria-current="page"] .m-tab-ic svg { stroke-width: 2; }
.m-tab:active .m-tab-ic { background: var(--m-fill); }

/* ---- 底部弹层：遮罩、抓手、圆角顶 ---- */
.m-sheet-layer { display: block; position: fixed; inset: 0; z-index: 40; }
.m-sheet-scrim { position: absolute; inset: 0; background: var(--m-scrim); opacity: 0; transition: opacity .2s linear; }
.m-sheet { position: absolute; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; max-height: 88vh; max-height: 88dvh;
  padding-bottom: env(safe-area-inset-bottom, 0px); background: var(--m-sheet); border-radius: 24px 24px 0 0; box-shadow: var(--m-lift); outline: none;
  transform: translateY(100%); transition: transform .32s cubic-bezier(.32, .72, 0, 1); }
.m-sheet-layer.is-in .m-sheet-scrim { opacity: 1; }
.m-sheet-layer.is-in .m-sheet { transform: none; }
.m-sheet.is-dragging { transition: none; }
.m-sheet-grab { flex: none; width: 36px; height: 5px; margin: 8px auto 0; border-radius: 3px; background: var(--axis); touch-action: none; }
.m-sheet-head { flex: none; display: flex; align-items: center; gap: 8px; height: 52px; padding: 0 6px 0 20px; touch-action: none; }
.m-sheet-head h2 { flex: 1; min-width: 0; font-size: 18px; font-weight: 700; letter-spacing: -.01em; }
.m-sheet-done { min-width: 52px; height: 44px; padding: 0 14px; border: 0; border-radius: 22px; background: none; font-size: 16px; font-weight: 650; color: var(--ink); cursor: pointer; }
.m-sheet-done:active { background: var(--m-fill); }
.m-sheet-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 2px 16px 22px; display: flex; flex-direction: column; gap: 22px; }
.m-sheet-lede { font-size: 15px; line-height: 1.7; color: var(--ink-2); padding: 0 4px; }
.m-sheet .m-list { background: var(--bg); box-shadow: none; }
html.m-locked, html.m-locked body { overflow: hidden; }
@media (prefers-reduced-motion: reduce) {
  .m-sheet { transform: none; opacity: 0; transition: opacity .16s linear; }
  .m-sheet-layer.is-in .m-sheet { opacity: 1; }
}

/* ---- 列表组：圆角 16，行高至少 52，行间发丝线从文字左缘画起，行尾 › ---- */
.m-group { display: flex; flex-direction: column; gap: 8px; }
.m-group-label { margin: 0 0 0 16px; font-size: 13px; font-weight: 500; color: var(--muted); letter-spacing: .02em; }
.m-list { display: block; background: var(--surface); border-radius: 16px; box-shadow: var(--m-shadow); overflow: hidden; }
.m-list.m-pad { padding: 8px; }
.m-row { position: relative; display: flex; align-items: center; gap: 12px; min-height: 62px; padding: 10px 12px 10px 14px; color: var(--ink); text-decoration: none; }
.m-row + .m-row::before, .m-kv + .m-kv::before, .m-li + .m-li::before { content: ""; position: absolute; top: 0; right: 0; left: var(--m-indent, 16px); height: .5px; background: var(--m-sep); }
.m-row + .m-row::before { left: 60px; }
.m-row:active, a.m-li:active { background: var(--m-press); }
.m-row-ic { flex: none; display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 10px; background: var(--m-fill); color: var(--ink); }
.m-row-ic svg { width: 20px; height: 20px; }
.m-row-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.m-row-main b { font-size: 16px; font-weight: 600; line-height: 1.35; }
.m-row-main small { font-size: 13px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.m-chev { flex: none; width: 8px; height: 8px; margin: 0 6px 0 2px; border-top: 2px solid var(--m-chev); border-right: 2px solid var(--m-chev); border-radius: 1px; transform: rotate(45deg); }
.m-kv { position: relative; display: flex; align-items: baseline; justify-content: space-between; gap: 16px; min-height: 52px; padding: 14px 16px; }
.m-kv-key { flex: none; font-size: 15px; color: var(--ink-2); }
.m-kv-val { min-width: 0; display: flex; flex-direction: column; align-items: flex-end; gap: 2px; text-align: right; }
.m-kv-val b { font-size: 15px; font-weight: 600; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.m-kv-val small { font-size: 12px; color: var(--muted); line-height: 1.45; }
.m-kv.warn .m-kv-val small { color: var(--caution); font-weight: 600; }
.m-kv.warn .m-kv-key::after { content: ""; display: inline-block; width: 7px; height: 7px; margin-left: 7px; border-radius: 50%; background: var(--caution); vertical-align: 2px; }
.m-colophon { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 6px 0 4px; color: var(--muted); font-size: 13px; text-align: center; }
.m-colophon img { width: 30px; height: 30px; display: block; margin-bottom: 2px; }
.m-colophon b { color: var(--ink); font-weight: 700; }
.m-colophon small { font-size: 12px; }

/* ---- 分段控件：底色槽 + 浮起的选中块。放不下就在槽里横滑，边上淡出，不折成第二行 ----
   槽 44 高（按钮 36 + 上下各 4），按钮的热区用 ::after 撑满整个槽高 */
.ranges, .m-seg { display: flex; flex-wrap: nowrap; gap: 2px; align-self: stretch; max-width: 100%; padding: 4px; border-radius: 12px; background: var(--m-fill);
  overflow-x: auto; overscroll-behavior-x: contain; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.ranges::-webkit-scrollbar, .pills::-webkit-scrollbar { display: none; }
.ranges:empty { display: none; }
.ranges button, .m-seg button { position: relative; flex: 1 0 auto; justify-content: center; min-height: 36px; padding: 0 13px; border: 0; border-radius: 9px; background: none;
  font-size: 14px; line-height: 1.2; color: var(--ink-2); white-space: nowrap; cursor: pointer; }
.ranges button::after, .m-seg button::after { content: ""; position: absolute; left: 0; right: 0; top: -4px; bottom: -4px; }
.ranges button[aria-pressed="true"], .m-seg button[aria-pressed="true"] { background: var(--m-thumb); color: var(--ink); font-weight: 650; box-shadow: var(--m-thumb-shadow); }
.m-seg-block button { flex: 1 1 0; }
.section > header .ranges { margin-left: 0; flex: 1 1 100%; }
.m-fade-r { -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 30px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 30px), transparent); }
.m-fade-l { -webkit-mask-image: linear-gradient(to right, transparent, #000 30px); mask-image: linear-gradient(to right, transparent, #000 30px); }
.m-fade-l.m-fade-r { -webkit-mask-image: linear-gradient(to right, transparent, #000 30px, #000 calc(100% - 30px), transparent); mask-image: linear-gradient(to right, transparent, #000 30px, #000 calc(100% - 30px), transparent); }

/* ---- 卡片：圆角 18，浅色不画边、一层很淡的投影；深色靠面色分层 ---- */
.card, .hold, .kpi, .market, .report, .event .body, .wl-note, .own-notes li, .ov-ai .ov-vs { border-color: transparent; box-shadow: var(--m-shadow); }
.card, .hold { border-radius: 18px; }
.market, .report, .event .body { border-radius: 16px; }
.book.dormant, .market.off, .report-none { border-color: var(--axis); box-shadow: none; }
.pad { padding: 16px; }
.empty-card { padding: 20px 18px; }

/* ---- 字和小节 ---- */
.section { gap: 12px; }
.section > header { gap: 4px 12px; padding: 0 2px; }
.section h2 { font-size: 18px; font-weight: 700; }
.section > header p { font-size: 13px; line-height: 1.6; }
.section > header .more { position: relative; display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding-left: 12px; font-size: 14px; color: var(--ink-2); }
.section > header .more::after { content: ""; width: 6px; height: 6px; border-top: 1.6px solid currentColor; border-right: 1.6px solid currentColor; transform: rotate(45deg); }
.section > header .more::before { content: ""; position: absolute; inset: -6px -8px; }
.fine { font-size: 12px; line-height: 1.6; }
p.trouble { font-size: 14px; line-height: 1.6; border-radius: 12px; padding: 11px 14px; }
.quiet { line-height: 1.55; }

/* ---- 一排数字：并进一张卡，格子之间是发丝线；单数个时最后一格占满一行 ---- */
.kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; background: var(--m-line); border-radius: 18px; overflow: hidden; box-shadow: var(--m-shadow); }
.kpis > .kpi { border: 0; border-radius: 0; box-shadow: none; padding: 12px 14px 13px; gap: 2px; }
.kpis > .kpi:last-child:nth-child(odd) { grid-column: 1 / -1; }
.kpi .label { font-size: 12.5px; }
.kpi .value { font-size: 21px; letter-spacing: -.02em; }
.kpi .sub { font-size: 12px; line-height: 1.5; }

/* ---- 按钮、链接、搜索框：热区 44 ---- */
.act { position: relative; min-height: 38px; padding: 8px 16px; font-size: 14px; }
.act.small { min-height: 34px; padding: 6px 13px; font-size: 13px; }
.act::after, .md-btn::after { content: ""; position: absolute; left: 0; right: 0; top: -4px; bottom: -4px; }
.act.small::after { top: -5px; bottom: -5px; }
.md-btn { position: relative; padding: 8px 15px; font-size: 14px; }
.more-link { position: relative; display: inline-flex; align-items: center; min-height: 44px; font-size: 14px; }
.search { width: 100%; }
.search-input { min-height: 44px; padding: 10px 14px; border-radius: 12px; border-color: transparent; box-shadow: var(--m-shadow); }
.search-list { border-radius: 14px; }
.search-list li { grid-template-columns: 76px minmax(0, 1fr); min-height: 44px; align-items: center; padding: 8px 10px; }
.search-list li small { grid-column: 2; margin-top: -6px; }
.cand-top { gap: 10px; }
#cand-search, #stock-search { flex: 1 1 100%; justify-content: stretch; }
.cand-top > .ranges { flex: 1 1 100%; }
/* 手机上返回在导航行左上角：页面里那个“← 回到…”小链接不再出现，免得两个返回 */
.back-link, .detail > a.back { display: none; }
details > summary { -webkit-tap-highlight-color: transparent; }
details.method { padding: 2px 16px; }
details.method summary { display: flex; align-items: center; min-height: 48px; padding: 0; }

/* ---- 图：按手机宽度画；手指横着拖看读数，竖着滑照常滚页面 ---- */
.plot svg { touch-action: pan-y; -webkit-user-select: none; user-select: none; }
.tip { max-width: calc(100vw - 48px); white-space: normal; }
.tip .row { grid-template-columns: 14px 40px minmax(0, 1fr) auto; }
.plot-legend { gap: 6px 14px; font-size: 12px; }
.chart-card { gap: 12px; }

/* ================= 总览（overview.js：电脑那一份节点，在这里排成一列） ================= */
/* 顺序：AI 主卡（大字，不套卡片）→ 同期三格 → 净值曲线 → 账户列表 → 决策 → 持仓 → 新闻 → 系统一行 */
#view-overview { gap: 12px; }
/* 时钟卡：两列，数字 26，下面日期星期；纽约那一列带开市状态（下一个交易日在“说明”弹层的数据几行里） */
.ov-clocks { border-radius: 18px; }
.ov-clock { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "city date" "time time" "market market"; align-items: baseline; align-content: start; gap: 3px 8px; padding: 11px 12px 12px 16px; }
.ov-clock-main, .ov-clock-side, .ov-clock-head { display: contents; }
.ov-clock-head .city { grid-area: city; }
.ov-clock-head .abbr, .ov-clock-head .note { display: none; }
.ov-clock-time { grid-area: time; }
.ov-clock-date { grid-area: date; font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ov-clock-market { grid-area: market; }
.ov-clock + .ov-clock { border-left: 0; }
.ov-clock + .ov-clock::before { content: ""; position: absolute; left: 0; top: 12px; bottom: 12px; width: .5px; background: var(--m-sep); }
.ov-clock-head { gap: 6px; font-size: 12px; }
.ov-clock-head .city { font-size: 13px; font-weight: 600; color: var(--ink-2); }
.ov-clock-head .note { display: none; }
.ov-clock-head .abbr { padding: 0 6px; font-size: 10.5px; }
.ov-clock-time b { font-size: 26px; letter-spacing: -.02em; }
.ov-clock-time .sec { font-size: 14px; }
.ov-clock-side { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 2px 8px; font-size: 12px; color: var(--muted); text-align: left; padding: 0; }
.ov-clock-side .state { font-size: 11px; padding: 0 7px; }
.ov-clock-market { justify-content: flex-start; }
.ov-clock-next { display: none; }
.ov-top { display: flex; flex-direction: column; gap: 12px; }
.ov-ai { background: none; border: 0; box-shadow: none; padding: 4px 2px 0; gap: 5px; }
.ov-ai-label { font-size: 13.5px; color: var(--ink-2); }
.ov-ai-label b { font-weight: 500; color: var(--ink-2); font-size: 13.5px; }
.ov-ai-num { font-size: 44px; line-height: 1.08; margin-top: 0; }
.ov-ai-line { font-size: 14px; margin-top: 0; }
.ov-ai-alloc { order: 4; margin-top: 4px; }
.ov-ai .ov-vs { order: 5; margin-top: 6px; padding: 10px 14px 11px; border: 0; background: var(--surface); border-radius: 18px; gap: 6px; }
.ov-vs-cells { gap: 0; }
.ov-vs-cells > div { position: relative; padding: 2px 10px 0 12px; }
.ov-vs-cells > div:first-child { padding-left: 0; }
.ov-vs-cells > div + div::before { content: ""; position: absolute; left: 0; top: 2px; bottom: 2px; width: .5px; background: var(--m-sep); }
.ov-ai-next { order: 6; border-top: 0; padding-top: 4px; font-size: 13.5px; }
.ov-ai .trouble { order: 7; }
.ov-ai-days { order: 9; margin-top: 2px; font-size: 12.5px; }
.ov-card { padding: 12px 16px 14px; gap: 10px; }
.ov-card > header { padding: 0; }
.ov-card > header { min-height: 24px; }
.ov-card > header h2 { font-size: 16px; }
.ov-card > header .more { font-size: 13.5px; min-height: 28px; }
.ov-curve > header .ranges { flex: 1 1 100%; margin-top: 2px; padding: 3px; }
.ov-curve > header .ranges button { min-height: 32px; font-size: 13.5px; }
.ov-curve .plot { margin: 0 -6px 0 -10px; }
/* 账户：一行一个，名字和权益一行，涨跌三个数和小线一行，持仓和待执行一行小字 */
.ov-accts-card { padding-bottom: 0; }
.ov-accts { margin: 0 -16px; }
/* 一行账户在手机上是三行：名字 | 权益；最近一日、模拟盘以来 | 小线；持仓条 | 含回测全程。用 flex 换行排，行尾 › 钉在右边 */
.ov-acct { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 5px 10px; padding: 9px 30px 9px 16px; border-top: 0; }
.ov-acct .c-nums, .ov-acct .c-foot { display: contents; }
.ov-acct + .ov-acct::before { content: ""; position: absolute; top: 0; left: 16px; right: 0; height: .5px; background: var(--m-sep); }
.ov-acct-head + .ov-acct::before { display: none; }
a.ov-acct:active { background: var(--m-press); }
a.ov-acct:hover { background: none; }
.ov-acct.ov-acct-head { display: none; }
.ov-acct .c-name { order: 1; flex: 1 0 calc(100% - 150px); min-width: 0; }
.ov-acct .c-name small { display: none; }
.ov-acct .c-eq { order: 2; flex: none; }
.ov-acct .c-eq b { font-size: 18px; letter-spacing: -.02em; }
.ov-acct .c-day, .ov-acct .c-fwd, .ov-acct .c-all { display: inline-flex; align-items: center; gap: 4px; text-align: left; white-space: nowrap; font-size: 12.5px; color: var(--muted); }
.ov-acct .c-day::before, .ov-acct .c-fwd::before, .ov-acct .c-all::before { content: attr(data-label); }
.ov-acct .c-day b, .ov-acct .c-fwd b, .ov-acct .c-all b, .ov-acct .c-day .delta { font-weight: 600; color: var(--ink-2); }
.ov-acct .c-day { order: 3; }
.ov-acct .c-fwd { order: 4; }
.ov-acct .c-fwd small { display: none; }
.ov-acct .c-spark { order: 5; display: flex !important; justify-content: flex-end; flex: 1 0 36px; min-width: 36px; }
.ov-acct .c-spark .ov-spark { width: 100%; max-width: 76px; }
.ov-spark, .ov-spark svg { height: 24px; }
.ov-acct .c-alloc { order: 6; display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); flex: 1 1 140px; max-width: 230px; }
.ov-acct .c-alloc::before { content: attr(data-label); flex: none; }
.ov-alloc { flex: 1; }
.ov-alloc b { font-size: 12px; font-weight: 600; color: var(--ink-2); min-width: 0; }
.ov-acct .c-all { order: 7; margin-left: auto; font-size: 12px; }
.ov-acct .c-all small { font-size: 12px; color: var(--muted); }
.ov-acct .c-all b.dim { display: none; }
.ov-acct .c-pend { order: 8; flex: 1 1 100%; display: block !important; grid-column: auto !important; grid-row: auto !important; padding-left: 0 !important; font-size: 12px; }
.ov-acct .c-pend:not(.on) { display: none !important; }
.ov-acct .c-pend.on::before { content: "待执行 "; color: var(--muted); font-weight: 400; }
.ov-acct > .m-chev { position: absolute; right: 12px; top: 50%; margin: -4px 0 0; width: 8px; height: 8px; border-width: 2px; border-color: var(--m-chev); }
.ov-acct.dormant .c-pend { display: block !important; white-space: normal; color: var(--ink-2); }
.ov-trio { display: flex; flex-direction: column; gap: 12px; }
.ov-body { gap: 12px; }
.ov-why .clamp { font-size: 14px; -webkit-line-clamp: 2; }
.ov-more { position: relative; font-size: 13.5px; }
.ov-more::after { content: ""; position: absolute; inset: -12px -8px; }
.ov-body .steps3 { border: 0; background: var(--m-fill-2); border-radius: 12px; }
.ov-body .steps3 div + div { border-top: 0; }
.ov-body .steps3 b { font-size: 13.5px; }
.ov-body .steps3 div { padding: 8px 12px; }
.ov-body .mini-row { grid-template-columns: 112px minmax(0, 1fr) 52px; gap: 10px; min-height: 36px; }
.ov-body .mini-row .who { flex-direction: row; align-items: baseline; gap: 6px; }
.ov-body .mini-rows { gap: 6px; }
.mini-row .who { align-items: flex-start; min-width: 0; }
.mini-row .who span { max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 离风控限额：手机上一行一项（名字 | 细条 | 现在 / 上限） */
.ov-risk { gap: 6px; padding-top: 10px; }
.ov-risk-row { grid-template-columns: 96px minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 26px; }
.ov-risk-row > span { white-space: nowrap; }
.ov-risk-track { grid-column: 2; grid-row: 1; }
.ov-risk-row b { grid-column: 3; grid-row: 1; }
.ov-news { margin: 0 -16px; }
.ov-news .toplist a.row { padding: 10px 16px; grid-template-columns: 20px minmax(0, 1fr) auto; gap: 4px 10px; }
.ov-news .toplist li { border-top: 0; position: relative; }
.ov-news .toplist li + li::before { content: ""; position: absolute; top: 0; left: 46px; right: 0; height: .5px; background: var(--m-sep); }
.ov-news .toplist .fact { font-size: 14px; }
/* 手机上新闻只列前 3 条（电脑 4 条） */
.ov-news .toplist li:nth-child(n+4) { display: none; }
.ov-sys { padding: 12px 12px 12px 16px; align-items: flex-start; border-radius: 18px; }
.ov-sys-items { gap: 6px 14px; }
.ov-sys-item { font-size: 12.5px; gap: 5px; }
.ov-sys-go { font-size: 0; padding-top: 6px; }
.ov-sys-go::after { width: 8px; height: 8px; border-width: 2px; border-color: var(--m-chev); }

/* 别的板也用的几样（新闻板的“此刻最要紧的”、持仓详情的小行、候选和市场的 sys-rows、个股页的 ov-head）：原样留着 */
.ov-head .model { margin-left: 0; flex-basis: 100%; }
.mini-row { grid-template-columns: 104px minmax(0, 1fr) 48px; gap: 10px; min-height: 40px; }
.toplist a.row { padding: 13px 16px; grid-template-columns: 20px minmax(0, 1fr) auto; gap: 4px 10px; }
.toplist .fact { line-height: 1.5; }
.sys-rows > div { grid-template-columns: 72px minmax(0, 1fr) auto; gap: 10px; padding: 11px 16px; min-height: 48px; font-size: 13.5px; }

/* ================= 说明（notes.js 收、mobile.js 摆在底部弹层里） ================= */
.note-i::after { content: ""; position: absolute; inset: -11px; }
.m-notes { display: flex; flex-direction: column; gap: 6px; }
.m-notes .note-lede { font-size: 15px; line-height: 1.7; color: var(--ink-2); padding: 0 4px 8px; }
.m-notes .note-group { margin: 0; padding: 12px 14px 13px; border-radius: 16px; background: var(--bg); gap: 4px; }
.m-notes .note-group.is-target { background: var(--m-fill); }
.m-notes .note-group-title { font-size: 13px; font-weight: 600; color: var(--ink); }
.m-notes .note-item { font-size: 14px; line-height: 1.7; }

/* 折叠小节：标题一行热区 48 */
.fold > summary { min-height: 48px; padding: 10px 16px; font-size: 15px; }
.fold-body { padding: 4px 16px 14px; }
details.fold { border-color: transparent; box-shadow: var(--m-shadow); border-radius: 18px; }
#footer { font-size: 12px; padding-top: 12px; padding-bottom: 12px; }

/* ================= 持仓 ================= */
#hold-kpis .kpi:first-child { grid-column: 1 / -1; padding: 14px 16px; }
#hold-kpis .kpi:first-child .value { font-size: 34px; letter-spacing: -.035em; }
#hold-kpis .kpi:last-child:nth-child(odd) { grid-column: auto; }
.split { gap: 16px; }
.alloc { padding: 14px 16px; }
.alloc-legend { gap: 8px 16px; }
.alloc-legend a.item { min-height: 28px; }
.hold { padding: 15px 16px 12px; gap: 12px; }
.hold-name b { font-size: 19px; }
.hold-top { gap: 10px; }
.hold-weight { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 4px 12px; }
.hold-weight b { font-size: 22px; text-align: left; flex: none; min-width: 72px; }
.hold-weight .track { flex: 1 1 auto; }
.hold-weight small { flex-basis: 100%; text-align: left; }
.hold-nums { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 14px; }
.hold-more { display: inline-flex; align-items: center; min-height: 32px; font-size: 13px; }
.stack { gap: 12px; }
.stack .card { padding: 14px 16px; gap: 10px; }
.facts { gap: 4px 18px; font-size: 13px; }
.hold-notyet { margin-top: -2px; padding: 0 4px; }
.hold-basis { font-size: 11.5px; }

/* 持仓：一笔一行（代码和名字、占比条、市值、浮动盈亏），点一行进详情。电脑上的大卡（.holds）手机上藏着 */
.m-holds .m-hold { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) 92px minmax(0, auto) 12px; align-items: center; gap: 2px 12px; min-height: 60px; padding: 10px 10px 10px 16px; color: inherit; text-decoration: none; }
.m-holds .m-hold + .m-hold::before { content: ""; position: absolute; top: 0; left: 16px; right: 0; height: .5px; background: var(--m-sep); }
.m-holds a.m-hold:active { background: var(--m-press); }
.m-hold-who, .m-hold-end { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.m-hold-who b { font-size: 16px; font-weight: 650; }
.m-hold-who small { font-size: 12.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.m-hold-w { display: flex; flex-direction: column; gap: 5px; }
.m-hold-w b { font-size: 14px; font-weight: 650; font-variant-numeric: tabular-nums; }
.m-hold-w .track { height: 6px; }
.m-hold-w .track u { top: -3px; bottom: -3px; }
.m-hold-end { align-items: flex-end; text-align: right; }
.m-hold-end b { font-size: 15px; font-weight: 650; font-variant-numeric: tabular-nums; }
.m-hold-end small { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--ink-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.m-hold .m-chev { margin: 0; }
.m-hold.cash { min-height: 50px; }
.m-hold.cash .m-hold-who b { font-size: 15px; }
.m-holds .m-empty { display: flex; flex-direction: column; gap: 2px; }
#view-holdings .split .stack { padding-top: 0; }

/* 四个品种：表格的每一行换成一张卡（单元格还是原来那些，格子按网格重排，标签从 data-label 来）
   列：1 品种 2 近 120 日 3 最新价和收盘 4 趋势信号和距均线 5–7 三个账户 */
.card.scroll:has(> #assets), .card.scroll:has(> .movers) { overflow: visible; }
#assets, #assets tbody, #assets tfoot { display: block; }
#assets thead { display: none; }
#assets tr { position: relative; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px 10px; align-items: center; padding: 13px 16px; }
#assets tbody tr + tr::before, #assets tfoot tr::before { content: ""; position: absolute; top: 0; left: 16px; right: 0; height: .5px; background: var(--m-sep); }
#assets td, #assets tbody td, #assets tfoot td, #assets td:first-child, #assets td:last-child { padding: 0; border: 0; white-space: normal; min-width: 0; text-align: left; }
#assets td[data-label]::before { content: attr(data-label); display: block; margin-bottom: 3px; font-size: 12px; color: var(--muted); }
#assets tbody td:nth-child(1) { grid-row: 1; grid-column: 1 / 4; }
#assets tbody td:nth-child(4) { grid-row: 1; grid-column: 4 / 7; justify-self: end; text-align: right; }
#assets tbody td:nth-child(4) .hold-gap { padding: 0; margin-top: 3px; }
#assets tbody td:nth-child(3) { grid-row: 2; grid-column: 1 / -1; }
/* 近 120 日的小图手机上不摆：点进详情有 120 个交易日的大图 */
#assets tbody td:nth-child(2) { display: none; }
#assets td:nth-last-child(-n+3) { grid-column: span 2; grid-row: 3; }
#assets tfoot td:first-child { grid-column: 1 / -1; grid-row: 1; font-weight: 650; color: var(--ink); }
#assets tfoot td:nth-child(2), #assets tfoot td:nth-child(3), #assets tfoot td:nth-child(4) { display: none; }
#assets tfoot td:nth-last-child(-n+3) { grid-row: 2; }
#assets .ticker { flex-wrap: wrap; gap: 2px 8px; max-width: none; }
#assets .ticker b { font-size: 15px; }
/* 最新价那一格在手机上排成三行：标签；价格和涨跌；几点的 · 已收盘和收盘价 */
#assets td.hold-c-price { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 8px; }
#assets td.hold-c-price::before { margin: 0; }
#assets .hold-c-price .quote.cell { display: contents; }
#assets .hold-c-price .quote.cell small, #assets .hold-close { flex-basis: auto; text-align: left; margin-top: 0; }
#assets td.hold-c-book::before { margin-bottom: 1px; font-size: 11.5px; }
/* 资金分布的图例和下面一行一笔重复了：手机上只留那条横杠 */
#hold-board .alloc-legend { display: none; }
#hold-board .alloc { padding: 12px 16px; }
#assets .hold-c-price .quote.cell b { font-size: 15px; }
#assets .hold-c-book { width: auto; }
#assets .hold-w { flex-direction: row-reverse; justify-content: flex-end; align-items: center; gap: 8px; min-width: 0; }
#assets .hold-w-track { flex: 1 1 auto; width: auto; }
#assets svg.mini { width: 120px; max-width: 100%; height: 30px; }

/* 最近成交：手机上是一张列表（holdings.js 另画一份），表格藏起来 */
.m-fills .m-li { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 2px 12px; align-items: center; padding: 12px 16px; position: relative; }
.m-fills .side { grid-row: 1 / 3; align-self: center; }
.m-li-main, .m-li-end { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.m-li-end { align-items: flex-end; text-align: right; }
.m-li-main b, .m-li-end b { font-size: 15px; font-weight: 650; font-variant-numeric: tabular-nums; }
.m-li-main small, .m-li-end small { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.m-li-main a { color: inherit; text-decoration: none; }
.m-empty { padding: 16px; font-size: 14px; color: var(--ink-2); }

/* 持仓详情 */
.detail { gap: 12px; }
.detail .headline { font-size: 21px; line-height: 1.4; }
.detail.holding .headline b { font-size: 24px; }
.detail h3 { font-size: 16px; margin-top: 12px; }
.about { padding: 14px 16px; }
.report { padding: 14px 16px 16px; }
.report .go { display: inline-flex; align-items: center; min-height: 40px; padding: 8px 18px; font-size: 14px; }

/* ================= 市场 ================= */
.index-kpis.kpis { gap: 10px; background: none; box-shadow: none; overflow: visible; border-radius: 0; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.index-kpis > .kpi { border-radius: 16px; box-shadow: var(--m-shadow); padding: 12px 13px 10px; }
.index-kpis > .kpi:last-child:nth-child(odd) { grid-column: auto; }
.index-kpi .value { font-size: 19px; }
.index-kpi .label { flex-direction: column; align-items: flex-start; gap: 0; font-size: 12px; }
.index-kpi .sub { font-size: 11.5px; }
.index-kpi .spark svg { height: 28px; }
.sector-row { grid-template-columns: 72px minmax(0, 1fr) 72px; padding: 10px 16px; gap: 4px 12px; }
.sector-row .cnt { grid-column: 1 / -1; margin-top: -2px; font-size: 12px; }
/* 涨跌幅前 10：一行一只，名次、名字、涨跌，收盘价在涨跌下面 */
.movers, .movers tbody { display: block; }
.movers thead { display: none; }
.movers tr { position: relative; display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; grid-template-rows: auto auto; column-gap: 12px; align-items: center; padding: 10px 16px; min-height: 56px; }
.movers tr + tr::before { content: ""; position: absolute; top: 0; left: 50px; right: 0; height: .5px; background: var(--m-sep); }
.movers td { padding: 0 !important; border: 0; width: auto !important; }
.movers td.rank { grid-row: 1 / 3; font-size: 13px; }
.movers td:nth-child(2) { grid-row: 1 / 3; min-width: 0; }
.movers td:nth-child(3) { grid-column: 3; grid-row: 1; font-weight: 650; font-size: 15px; }
.movers td:nth-child(4) { grid-column: 3; grid-row: 2; font-size: 12px; color: var(--muted); }
.movers .who2 span { max-width: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.recap-out > div, .lack-rows > div { padding: 11px 16px; }
/* 界面重做：数字条三格（第一格占满一行）；指数两列小卡；行业一行一个；涨跌幅前 10 一次看一张（分段控件切换） */
#recap-body { gap: 18px; }
#recap-body > p.trouble, #recap-body > p.note { margin-top: -6px; }
.recap-stats .statline-item:first-child { grid-column: 1 / -1; }
.recap-stats .statline-item:last-child:nth-child(odd) { grid-column: auto; }
.recap-tag { font-size: 11.5px; padding: 0 8px; }
#recap-body .section h2 { font-size: 17px; }
.recap-group > header h2 { font-size: 13.5px; }
.index-kpi .spark svg { height: 24px; }
.sector-row { grid-template-columns: 64px minmax(0, 1fr) 64px; grid-template-rows: auto auto; padding: 7px 16px; gap: 0 12px; min-height: 0; }
.sector-row .name { font-size: 13.5px; }
.sector-row .cnt { grid-column: 1 / -1; margin-top: 0; font-size: 11.5px; line-height: 1.4; }
.recap-movers { gap: 12px; }
.recap-movers .recap-flip { display: flex; flex-wrap: nowrap; }
.recap-movers .recap-flip button { flex: 1 1 0; justify-content: center; }
.recap-movers .section > header { display: none; }
.recap-movers[data-show="up"] > .mv-down, .recap-movers[data-show="down"] > .mv-up { display: none; }
.movers tr { min-height: 50px; padding: 8px 16px; }
.movers .who2 > div { flex-direction: column; align-items: flex-start; gap: 0; }

/* ================= 候选 ================= */
.rule-about { font-size: 14px; }
.rule-list { font-size: 14px; gap: 10px; }
.rule-cols { gap: 18px; }
.m-cands { display: block; }
a.m-cand { position: relative; display: grid; grid-template-columns: 24px minmax(0, 1fr) auto 12px; grid-template-areas: "rank who score chev" ". facts facts facts";
  gap: 3px 10px; align-items: center; padding: 12px 10px 12px 14px; color: inherit; text-decoration: none; }
a.m-cand + a.m-cand::before { content: ""; position: absolute; top: 0; left: 48px; right: 0; height: .5px; background: var(--m-sep); }
a.m-cand:active { background: var(--m-press); }
.m-cand-rank { grid-area: rank; font: 700 15px var(--font-mono); color: var(--muted); text-align: center; }
.m-cand.top .m-cand-rank { color: var(--ink); }
.m-cand-who { grid-area: who; display: flex; flex-direction: column; min-width: 0; line-height: 1.35; }
.m-cand-who > div { display: flex; align-items: baseline; gap: 7px; min-width: 0; }
.m-cand-who b { font: 600 15px var(--font-mono); }
.m-cand-who small { font-size: 11px; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 6px; white-space: nowrap; }
.m-cand-who span { font-size: 12.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.m-cand-score { grid-area: score; display: flex; flex-direction: column; align-items: flex-end; gap: 4px; }
.m-cand-score b { font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; }
.m-cand-score .track { width: 52px; height: 5px; }
.m-cand-facts { grid-area: facts; display: flex; flex-wrap: wrap; gap: 0 9px; font-size: 12px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.m-cand-facts em { font-style: normal; color: var(--muted); margin-right: 3px; }
.m-cand-facts .m-break { flex-basis: 100%; height: 0; }
.m-cand .m-chev { grid-area: chev; margin: 0; }
.out-rows > div { grid-template-columns: 64px minmax(0, 1fr); gap: 2px 10px; }
.out-rows > div > .quiet { grid-column: 1 / -1; }
/* 界面重做：数字条两列（漏斗的箭头不画）；名单前 10 名直接列出，后面的折在卡片最下面一行 */
.cand-stats .statline-item, .cand-stats .statline-item.step + .statline-item.step { flex-wrap: wrap; justify-content: flex-start; align-items: baseline; gap: 0 6px; padding: 8px 14px 9px; box-shadow: -.5px 0 0 var(--m-sep), 0 -.5px 0 var(--m-sep); }
.cand-stats .statline-item small { flex-basis: 100%; }
.cand-stats .statline-item.step + .statline-item.step::before { display: none; }
#view-candidates { gap: 16px; }
#view-candidates .section > header { min-height: 0; }
.cand-rules > header .ranges { margin-left: 0; flex: 1 1 100%; }
.cand-rule-fold > summary { align-items: flex-start; }
.cand-rule-fold .fold-title { font-size: 14.5px; line-height: 1.55; }
.cand-rule-fold .fold-note { display: none; }
.cand-rule-fold .fold-chev { margin-top: 8px; }
.cand-qual span { font-size: 11.5px; padding: 0 8px; }
.m-cand-more > summary { position: relative; display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 48px; list-style: none; font-size: 14px; font-weight: 600; color: var(--ink-2); cursor: pointer; }
.m-cand-more > summary::-webkit-details-marker { display: none; }
.m-cand-more > summary::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: .5px; background: var(--m-sep); }
.m-cand-more > summary .fold-chev { margin-left: 0; }
.m-cand-more[open] > summary .fold-chev { transform: translateY(2px) rotate(-135deg); }
.m-cand-more[open] > summary { color: var(--muted); }
.cand-fold .fold-body > .fine { padding: 10px 16px 2px; }

/* ================= 新闻 ================= */
.pills { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding: 5px 16px; margin: -5px -16px; overscroll-behavior-x: contain; }
.pill { position: relative; min-height: 34px; padding: 6px 14px; font-size: 13.5px; flex: none; }
.pill::after { content: ""; position: absolute; left: 0; right: 0; top: -5px; bottom: -5px; }
.toolbar { gap: 14px; }
.toolbar .row2 { flex-direction: column; flex-wrap: nowrap; align-items: stretch; gap: 14px; }
.toolbar .row2 .ranges { align-self: stretch; }
.pill.more-rows { align-self: stretch; justify-content: center; min-height: 44px; margin-top: 14px; }
.day { top: calc(44px + env(safe-area-inset-top, 0px)); padding: 14px 2px 8px; }
.event .body { padding: 13px 15px 14px; margin: 5px 0; }
.event .fact { font-size: 15px; }
/* 英文原标题手机列表里不显示（详情页里有）；没读过、无关的条目只有它，照常显示 */
#news-feed .event .origin:not(.solo) { display: none; }
#news-feed .news-day > summary { padding: 10px 4px; min-height: 46px; }
#news-feed details.news-day { box-shadow: none; border-radius: 0; border-top: .5px solid var(--m-sep); }
#news-feed .day { padding: 10px 2px 6px; }
#news-feed .event .body { gap: 3px; padding: 11px 14px 11px; margin: 3px 0; }
#news-feed .event .meta { margin-top: 1px; }
#news-feed .event .fact { line-height: 1.45; }
/* 数字条：数不折行，数后面的小字另起一行靠右 */
.event .meta { margin-top: 3px; }
.detail .brief { font-size: 15.5px; line-height: 1.8; }

/* ================= 业绩 ================= */
.perf-top { padding: 11px 16px 8px; gap: 4px; }
.perf-days { font-size: 12.5px; }
.perf-tag { font-size: 12px; }
.hero { gap: 16px; }
.hero-top { gap: 10px; }
.count b { font-size: 60px; }
.count small { font-size: 19px; }
.lede { font-size: 14.5px; padding-bottom: 0; }
.perf-head { padding: 14px 16px 4px; }
.perf-chart { padding: 14px 12px 8px 8px; }
.perf-note { padding: 0 16px 14px; }
.window { font-size: 11.5px; }
/* 指标：每个账户一张小卡，五个数三列排，不用横拖 */
.perf-head .scroll { overflow: visible; }
#metrics, #metrics tbody { display: block; }
#metrics thead { display: none; }
/* 2026-11-14：五个数排成一行，标签只在第一个账户上写一次（短了三分之一以上） */
#metrics tr { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 3px 6px; padding: 8px 0; }
#metrics tr + tr { border-top: .5px solid var(--m-sep); }
#metrics td { padding: 0 !important; white-space: nowrap; text-align: left; }
#metrics td:first-child { grid-column: 1 / -1; font-size: 15px; }
#metrics td[data-label]::before { content: attr(data-label); display: block; font-size: 12px; font-weight: 400; color: var(--muted); letter-spacing: 0; margin-bottom: 1px; }
#metrics td.r { font-size: 13.5px; letter-spacing: -.02em; }
#metrics tr + tr td[data-label]::before { display: none; }
#metrics tr.none td.r { display: none; }
#metrics tr.none td:first-child::after { content: "这个区间开始时它还不存在"; margin-left: 10px; font-size: 12px; font-weight: 400; color: var(--muted); }
#metrics tr.none:first-child td.r { display: block; }
#metrics td:first-child { font-size: 14px !important; }
.m-heat-read.idle { display: none; }
.window { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 0; }
#metrics td[data-label]::before { font-size: 11px; white-space: nowrap; }
.perf-days-n { flex-basis: 100%; }
.perf-days-n + span::before { display: none; }
/* 逐月收益：十二个月塞进一屏宽，格子只上色；点一格（或手指横着拖）在上面读出那个月的数 */
.months-bar { gap: 8px; }
#view-performance .card.pad { padding-top: 12px; padding-bottom: 12px; }
#view-performance .heat { margin-top: 6px; }
.months-bar .ranges { flex: 1 1 100%; }
.scale { width: 100%; justify-content: space-between; font-size: 11.5px; }
.scale i { width: 16px; height: 10px; }
.card.pad .scroll:has(> #heat) { overflow: visible; }
.m-heat-read { display: flex; align-items: baseline; flex-wrap: wrap; gap: 2px 10px; margin-top: 14px; min-height: 44px; padding: 10px 12px; border-radius: 12px; background: var(--m-fill-2); font-size: 13.5px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.m-heat-read b { color: var(--ink); font-size: 16px; font-weight: 700; }
.heat { table-layout: fixed; width: 100%; border-spacing: 2px; margin-top: 10px; touch-action: pan-y; }
.heat th { height: 20px; font-size: 0; }
.heat th::before { content: attr(data-short); font-size: 10.5px; color: var(--muted); }
.heat th.year, .heat th.total { width: 40px; }
.heat th.total { width: 50px; }
.heat td { height: 19px; min-width: 0; font-size: 0; border-radius: 3px; cursor: pointer; }
.heat td.year { font-size: 11px; padding: 0 2px 0 0; }
.heat td.total { font-size: 11.5px; padding: 0; min-width: 0; letter-spacing: -.02em; }
.heat td.on { box-shadow: inset 0 0 0 2px var(--ink), 0 0 0 1px var(--surface); position: relative; z-index: 1; }
.heat td.mark.on { box-shadow: inset 0 0 0 2px var(--ink), 0 0 0 1px var(--surface); }

/* ================= 决策、系统 ================= */
.decisions { padding: 2px 16px; }
.decision > summary { min-height: 52px; padding: 13px 0; gap: 6px 10px; font-size: 14px; }
.decision > summary .outcome { flex-basis: 100%; order: 3; }
.decision > summary .fine { order: 4; }
.decision-body table, .hindsight table, .after table { min-width: 0; width: 100%; }
.decision-body th, .decision-body td, .after th, .after td, .hindsight th, .hindsight td { padding-left: 0; padding-right: 8px; white-space: normal; }
.decision-body td.r, .decision-body th.r, .after td.r, .after th.r { padding-right: 0; padding-left: 8px; }
.hq-cells { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 14px; }
details.method ul { font-size: 14px; }
/* 系统板：一步一行的紧凑列表（两行：名字 | 状态；模型 | 24 小时调用），不再一步一张大卡 */
.sys-th { display: none !important; }
.sys-tr, .sys-steps .sys-tr, .sys-keys .sys-tr, .sys-sources .sys-tr, .sys-pushes .sys-tr { grid-template-columns: minmax(0, 1fr) auto; gap: 3px 12px; padding: 10px 16px; min-height: 52px; position: relative; }
.sys-tr + .sys-tr { border-top: 0; }
.sys-tr + .sys-tr::before { content: ""; position: absolute; top: 0; left: 16px; right: 0; height: .5px; background: var(--m-sep); }
.sys-tr > :nth-child(1) { grid-area: 1 / 1; }
.sys-tr > :nth-child(2) { grid-area: 2 / 1; }
.sys-tr > :nth-child(3) { grid-area: 1 / 2; justify-self: end; }
.sys-tr > :nth-child(4) { grid-area: 2 / 2; justify-self: end; font-size: 12.5px; }
.sys-sources .sys-tr > :nth-child(2) { grid-area: 2 / 1 / 3 / 2; }
.sys-sources .sys-tr > :nth-child(3) { grid-area: 2 / 2; }
.sys-sources .sys-tr > :nth-child(4) { grid-area: 1 / 2; }
.sys-sources .sys-tr { min-height: 48px; padding-top: 8px; padding-bottom: 8px; }
.sys-keys .sys-tr > :nth-child(2) { grid-area: 1 / 2; justify-self: end; }
.sys-keys .sys-tr > :nth-child(3) { grid-area: 2 / 1 / 3 / 3; }
.sys-keys .sys-tr > :nth-child(4) { grid-area: 3 / 1 / 4 / 3; justify-self: start; color: var(--muted); }
.sys-pushes .sys-tr > :nth-child(2) { grid-area: 1 / 2; }
.sys-pushes .sys-tr > :nth-child(3) { grid-area: 2 / 1; }
.sys-pushes .sys-tr > :nth-child(4) { grid-area: 2 / 2; font-size: 11.5px; color: var(--muted); }
.sys-tr .sys-why { grid-area: auto / 1 / auto / 3; }
.sys-name { flex-wrap: wrap; row-gap: 0; }
.sys-name b { font-size: 15px; }
.sys-model b { font-size: 12.5px; }
.sys-state { font-size: 13.5px; }
.sys-sources .sys-state, .sys-keys .sys-state { font-size: 13px; }
.fold-body > .sys-table { margin: 0 -16px -14px; }
.sys-line { padding: 12px 16px; border-radius: 18px; }
.method-list { font-size: 14px; }
/* 数据那一条：一项一行（名字靠左，数和小字靠右） */
.statline.sys-data { grid-template-columns: minmax(0, 1fr); }
.sys-data .statline-item { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; }
.sys-data .statline-item small { flex: 1 0 auto; }
.sys-data .statline-item b, .sys-data .statline-item em { white-space: nowrap; }
.sys-data .statline-item:last-child:nth-child(odd) { grid-column: auto; }
.routes { padding: 2px 16px; }
.route { padding: 13px 0; }
.route-hint code { overflow-wrap: anywhere; }

/* ================= 报告、个股、自选 ================= */
.rep-row { padding: 13px 16px; gap: 4px; }
.rep-summary { font-size: 14.5px; }
/* 报告的一行（界面重做）：代码名字市场 | 时间；一句话（前面是排名标签，最多两行）。模型名和这一天标题上的一样时不再写 */
.rep-row { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "who meta" "sum sum"; gap: 2px 10px; padding: 9px 16px 10px; align-items: baseline; }
.rep-row > .rep-who { grid-area: who; }
.rep-row > .rep-meta { grid-area: meta; font-size: 11.5px; }
.rep-row > .rep-summary { grid-area: sum; font-size: 13.5px; line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.rep-row .rep-who { line-height: 1.3; }
.rep-row .rep-who .name { font-size: 12px; }
.rep-row .rep-who .tag { font-size: 11px; padding: 0 6px; }
.rep-meta-model.same { display: none; }
.rep-meta-model.same + span::before { display: none; }
.rep-summary > .rep-rank { font-size: 11px; padding: 0 6px; margin-right: 6px; }
.rep-day > header { gap: 4px 10px; }
.rep-model { margin-left: 0; }
.report-summary { font-size: 16px; }
.report-dates { gap: 8px; }
.report-dates .ranges { flex: 1 1 100%; }
.report-select { min-height: 44px; border-radius: 12px; padding: 8px 12px; }
.ind { padding: 6px 16px; }
.ind-row { padding: 11px 0; }
/* 个股页（界面重做）：一列，顺序是 标题和按钮 → 关键数字（两列）→ AI 读数 → 图 → 逐项核对 → 技术指标（折叠）→ 估值 → 筛选规则下 → 各项数字 → 以前的报告 */
#stock-body { gap: 12px; }
#stock-body .stk-grid, #stock-body .stk-main, #stock-body .stk-side { display: contents; }
#stock-body .stk-head { order: 1; } #stock-body .stk-state { order: 2; } #stock-body .stk-keys { order: 3; } #stock-body .stk-ai { order: 4; }
#stock-body .stk-chart { order: 5; } #stock-body .stk-checks { order: 6; } #stock-body .stk-ind { order: 7; } #stock-body .stk-val { order: 8; }
#stock-body .stk-screens { order: 9; } #stock-body .stk-factors { order: 10; } #stock-body .stk-past { order: 11; }
.stk-head .headline b { font-size: 23px; }
.stk-head .inbox-actions .act { flex: 1 1 0; justify-content: center; }
.inbox-quota { flex-basis: 100%; margin-left: 0; font-size: 12.5px; display: flex; align-items: center; }
.stk-card { padding: 13px 16px 14px; gap: 10px; border-radius: 18px; }
.stk-keys-grid { margin: 0 -16px -14px; }
.stk-keys .stk-keys-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.stk-keys .stk-key.wide { grid-column: 1 / -1; }
.stk-keys .stk-key + .stk-key { box-shadow: none; }
.stk-keys .stk-key:not(.wide):nth-child(odd) { box-shadow: inset .5px 0 0 var(--m-sep); }
.stk-key { padding: 9px 16px 10px; }
.stk-key b { font-size: 19px; }
.stk-key.wide b { font-size: 26px; }
.stk-key small { font-size: 12px; }
.stk-val-grid .stk-key b { font-size: 17px; }
.stk-val-grid .stk-key { padding-left: 12px; padding-right: 10px; }
.stk-val-grid .stk-key:first-child { padding-left: 16px; }
.stk-ai .report-cols > div, .stk-ai .report-watch { grid-template-columns: minmax(0, 1fr); gap: 2px; }
.stk-ai .report-summary { font-size: 16px; }
.stk-ai-head .report-dates { display: none; }
.stk-ai { scroll-margin-top: calc(56px + env(safe-area-inset-top, 0px)); }
.stk-ai .report { box-shadow: none; }
.stk-checks-list .ind-row, .stk-ind-list .ind-row { padding: 8px 0; }
details.stk-ind { border-radius: 18px; }
details.stk-ind .fold-body { padding: 2px 16px 10px; }
.stk-avg-row { grid-template-columns: minmax(0, 1fr) auto 6.8em; gap: 10px; }
.stk-screens-grid { grid-template-columns: minmax(0, 1fr); gap: 16px; }
.stk-screen + .stk-screen { padding-top: 14px; border-top: .5px solid var(--m-sep); }
.stk-factors-grid { column-gap: 18px; }
.stk-factors-grid .ind-row { flex-direction: column; align-items: flex-start; gap: 0; padding: 7px 0; }
.stk-factors-grid .ind-row .what b { font-size: 12.5px; color: var(--muted); font-weight: 500; }
.stk-past { display: flex; flex-direction: column; gap: 8px; }
.stk-past[hidden] { display: none; }
.stk-past > header { display: flex; align-items: center; gap: 10px; padding: 0 2px; }
.stk-past > header h2 { font-size: 17px; font-weight: 700; }
.stk-past-list { background: var(--surface); border-radius: 16px; box-shadow: var(--m-shadow); overflow: hidden; }
.stk-past-row { position: relative; display: flex; align-items: center; gap: 12px; min-height: 48px; padding: 8px 12px 8px 16px; color: var(--ink); text-decoration: none; font-size: 15px; }
.stk-past-row + .stk-past-row::before { content: ""; position: absolute; top: 0; left: 16px; right: 0; height: .5px; background: var(--m-sep); }
.stk-past-row span:nth-child(2) { flex: 1; font-size: 13px; color: var(--muted); }
.stk-past-row.on { font-weight: 650; }
.stk-past-row:active { background: var(--m-press); }
.wl-search { flex: 1 1 0; }
#watchlist-top { flex-wrap: nowrap; }
#watchlist-top > .act { flex: none; }
.wl-row { padding: 13px 16px; gap: 8px 14px; }
/* 自选的一行（界面重做）：代码名字 | 价格；市场和谁加的 | 涨跌；报告的一句话 | 请求 | 拿掉，三行排完 */
.wl-row { grid-template-columns: minmax(0, 1fr) auto auto; grid-template-areas: "who who price" "rep req act"; gap: 3px 10px; padding: 8px 14px 8px 16px; align-items: center; }
.wl-row .wl-act .act.small { min-height: 32px; padding: 4px 13px; }
.wl-who, .wl-price { gap: 1px; }
.wl-row > .wl-who { grid-area: who; }
.wl-row > .wl-price { grid-area: price; align-self: start; }
.wl-row > .wl-report { grid-area: rep; grid-column: auto; }
.wl-row > .wl-req { grid-area: req; grid-column: auto; }
.wl-row > .wl-act { grid-area: act; }
.wl-req > .quiet { white-space: nowrap; }
.wl-summary { -webkit-line-clamp: 2; }
.wl-row:has(.inbox-confirm) { grid-template-areas: "who who price" "rep rep rep" "act act act"; }
.wl-row:has(.inbox-confirm) > .wl-req { display: none; }
/* 数字条：标签一行，数和它后面的小字一行（小字是状态，比如“还能加 24 只”） */
.wl-stats .statline-item { padding: 7px 14px 8px; }
#view-watchlist, #view-watchlist .view-body { gap: 14px; }
.req-row { padding: 7px 16px; gap: 0 10px; }
#view-watchlist .section { gap: 8px; }
.wl-act .act.small { min-height: 36px; }
.req-row { padding: 12px 16px; }
.paste textarea { min-height: 140px; }
.paste-hit { min-height: 44px; padding: 8px 0; }
.paste-hit input { width: 20px; height: 20px; }
.paste-pick select, .own-col select, .own-what select { min-height: 40px; }
.inbox-confirm { padding: 4px 4px 4px 12px; }

/* ================= 导入的持仓（私有视图才有） ================= */
.own-sep { margin: 8px 4px; }
#own-board .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; }
#own-board .kpi .value { font-size: 19px; }
.own-head { gap: 10px; }
.own-title h2 { font-size: 18px; }
.own-actions .act { flex: 1 1 auto; }
.card.scroll:has(> .own-table), .card.scroll:has(> .own-edit) { overflow: visible; background: none; box-shadow: none; }
/* 导入的持仓：一只一张卡 */
.own-table, .own-table tbody, .own-table tfoot { display: block; }
.own-table thead { display: none; }
.own-table tr { position: relative; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 12px; padding: 14px 16px; margin-bottom: 10px; background: var(--surface); border-radius: 16px; box-shadow: var(--m-shadow); }
.own-table td { padding: 0 !important; border: 0; white-space: normal; text-align: left; min-width: 0; }
.own-table td[data-label]::before { content: attr(data-label); display: block; font-size: 12px; color: var(--muted); margin-bottom: 1px; }
.own-table td:nth-child(1) { grid-column: 1; font-size: 15px; }
.own-table td:nth-child(2) { grid-column: 2; justify-self: end; text-align: right; max-width: none; }
.own-table td:nth-child(8) { grid-column: 1 / -1; }
.own-table td:nth-child(8):empty { display: none; }
.own-table tfoot tr { background: var(--m-fill-2); box-shadow: none; }
.own-table tfoot td:empty { display: none; }
/* 导入预览：一行一张卡，输入框整宽 */
.own-edit, .own-edit tbody { display: block; }
.own-edit thead { display: none; }
.own-edit tr { position: relative; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px 10px; padding: 14px 16px; margin-bottom: 10px; background: var(--surface); border-radius: 16px; box-shadow: var(--m-shadow); }
.own-edit td { padding: 0 !important; border: 0; white-space: normal; min-width: 0; text-align: left; }
.own-edit td[data-label]::before { content: attr(data-label); display: block; font-size: 12px; color: var(--muted); margin-bottom: 3px; }
.own-edit td:nth-child(1) { grid-column: 1; }
.own-edit td:nth-child(1)::before { content: "第 "; }
.own-edit td:nth-child(1)::after { content: " 行"; }
.own-edit td:nth-child(2) { grid-column: 2 / -1; max-width: none; justify-self: end; text-align: right; }
.own-edit td:nth-child(3) { grid-column: 1 / -1; }
.own-edit .own-what { min-width: 0; max-width: none; }
.own-edit td:nth-child(7) { grid-column: 1 / -1; }
.own-input { width: 100%; min-height: 40px; padding: 6px 10px; border-radius: 10px; }
.own-row-act { flex-wrap: wrap; }
.own-cols-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.own-off-row { padding: 12px 16px; }

/* ---- 小链接、小折叠的热区补到 44（量过：elementFromPoint 在中心上下左右 21 处还点得中） ---- */
.alloc-legend .item, #assets a.ticker, .m-li-main a, .movers a.who2 { position: relative; }
.alloc-legend a.item { z-index: 1; }
.alloc-legend .item::after { content: ""; position: absolute; left: -4px; right: -4px; top: -8px; bottom: -8px; }
#assets a.ticker::after { content: ""; position: absolute; left: 0; right: 0; top: -10px; bottom: -10px; }
.m-li-main a::after { content: ""; position: absolute; left: -10px; right: -16px; top: -13px; bottom: -13px; }
.movers a.who2::after { content: ""; position: absolute; left: 0; right: 0; top: -6px; bottom: -6px; }
.same > summary, .raw > summary { display: flex; align-items: center; min-height: 48px; }
.same > summary { width: auto; }
.report .go { min-height: 44px; }

/* ---- “更多”里的账号一组：头像、名字和角色，下面是我的账号、管账号、退出 ---- */
.m-avatar { flex: none; width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--ink); color: var(--surface); font-size: 17px; font-weight: 700; }
.m-avatar.host { background: var(--m-fill); color: var(--ink); }
.m-avatar svg { width: 22px; height: 22px; }
.m-me { min-height: 68px; }
.m-me .m-row-main b { font-size: 17px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.m-row-plain { min-height: 52px; padding-left: 16px; }
.m-row + .m-row-plain::before { left: 16px; }
button.m-row { width: 100%; border: 0; background: none; font: inherit; text-align: left; cursor: pointer; }
button.m-row:active { background: var(--m-press); }
.m-out .m-row-main b { font-weight: 500; color: var(--ink-2); }

/* ---- 账号板在手机上：一列；成员、登录记录、设备都是一行一张的列表 ---- */
.acct-id { padding: 16px; }
.acct-avatar.big { width: 52px; height: 52px; }
.acct-li { padding: 12px 14px; }
.acct-li-act:has(.inbox-confirm) { width: 100%; justify-content: flex-start; }
.acct-li-act .inbox-confirm { width: 100%; }
.acct-input { height: 44px; }
.acct-link-row .acct-input { height: 40px; }
.acct-admin-head { padding-top: 22px; }
/* 从“管账号”进来会滚到这一段：让开粘在顶上的导航行，标题不被压住 */
#accounts-admin { scroll-margin-top: calc(44px + env(safe-area-inset-top, 0px)); }
.statline { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
/* 一格里标签占一行，数和它后面的小字排第二行：左右撑开的话，数后面一带小字就会把数挤断行 */
.statline-item { flex-wrap: wrap; justify-content: flex-start; align-items: baseline; gap: 0 6px; padding: 8px 14px 9px; box-shadow: -.5px 0 0 var(--m-sep), 0 -.5px 0 var(--m-sep); }
.statline-item small { flex-basis: 100%; }
.statline-item b { white-space: nowrap; }
.statline-item:last-child:nth-child(odd) { grid-column: 1 / -1; }
.acct-members .acct-tr { grid-template-areas: "who state" "last count" "role role" "act act"; padding: 12px 14px; }
.acct-members .acct-cell-count { justify-self: end; }
.acct-members .acct-cell-act { justify-content: flex-start; }
.acct-members .acct-cell-role { width: 100%; }
.acct-seg button { flex: 1 1 0; font-size: 14px; }
.acct-logins .acct-tr { padding: 10px 14px; }
.acct-invite { grid-template-columns: minmax(0, 1fr); }
.acct-invite .ranges { width: 100%; }
.acct-invite .ranges button { flex: 1 1 0; }
.acct-invite .act.primary { width: 100%; justify-content: center; }
