/* v1.1 七页的版面（网站 PRD-043 / ADR-0026）：排法照设计稿画板（宽版面、几块并排、时间轴、深色横幅），颜色字体沿用 styles.css。
   只对 #app.wide 生效（app.js 在 v1.1 开关开着时登录后每页都挂上，只有读全文的三种页不挂，Daniel 2026-10-16）；顶栏在 v1.1 开关开着时每页都是这个宽度。
   颜色只许用 styles.css 顶上的变量（tests/test_prd043_shell.py 扫这个文件）；窄于 820 像素一律回一栏。 */

/* ---------- 外壳：内容 1200 宽，顶栏同宽、左边对齐 ---------- */
/* v1.1 开关开着时顶栏每一页都是这个宽度（Daniel 2026-10-13：登录后各页顶栏统一成“我的组合”那一版）；内容也是（10-16），读全文的三种页内容照旧 960；
   开关关着（.topbar 没有 .has-sub）顶栏照旧跟 960 内容同宽 */
#app { --wide-maxw: 1244px; }                      /* 1200 内容 + 左右各 22 内边距 */
#app.wide .wrap, #app .topbar.has-sub > .wrap { max-width: var(--wide-maxw); }

/* ---------- 共用：并排的几块 ---------- */
.v11-cols { display: grid; gap: 14px; grid-template-columns: repeat(var(--n, 2), minmax(0, 1fr)); align-items: start; margin-bottom: 14px; }
.v11-cols > .pf-card { margin-bottom: 0; }
.v11-cols.wide-left { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); }

@media (max-width: 820px) {   /* 手机顶栏换两行全站一套：styles.css 的 .topbar.stacked（app.js fitTopbar），这里不再另写 */
  .v11-cols, .v11-cols.wide-left { grid-template-columns: minmax(0, 1fr); }
}

/* ---------- “今天”页（R-02，画板 1）：只对 #/today 的 .today-page / .today-body 生效；个股“详情”的“今天”一块不在这里面 ---------- */
/* 页头：页面标题左、搜索框右（同一条深墨蓝底线）；搜出来的卡片整宽出在下面 */
.today-page { display: grid; grid-template-columns: minmax(0, 1fr) auto; }
.today-page > .page-head { grid-column: 1; grid-row: 1; }
.today-page > .search-box { display: contents; }
.today-page > .search-box > .pf-inline { grid-column: 2; grid-row: 1; align-self: stretch; align-items: flex-end; flex-wrap: nowrap;
  margin: 0 0 20px; padding: 0 0 14px 16px; border-bottom: 2px solid var(--ink); }
.today-page > .search-box > .pf-inline > * { height: 40px; }
.today-page .search-input { width: 280px; max-width: none; }
.today-page > .search-box > .search-out { grid-column: 1 / -1; grid-row: 2; }
.today-page > .search-box > .search-out > .search-card { margin: 0 0 18px; }
.today-page > .today-body { grid-column: 1 / -1; grid-row: 3; min-width: 0; }
/* 版次一行小字 → 前半句大标题（涨跌数字砖红）→ 后半句一行小字 → 三个数一行（不画格子） */
.today-body .today-edition { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; margin: 0 0 4px; }
.today-body .today-edition h2 { font-family: var(--sans); font-size: 13px; font-weight: 600; color: var(--ink-2); margin: 0; }
.today-body .today-edition p { margin: 0; padding: 0 8px; background: var(--surface-2); border: var(--line); font-size: 12px; color: var(--ink-2); }
.today-body .today-sum { margin: 0 0 16px; }
.today-body .today-big { font-family: var(--serif); font-size: 30px; line-height: 1.35; font-weight: 700; color: var(--ink); margin: 0 0 6px; }
.today-body .today-hot { color: var(--ink); font-family: var(--mono); }
.today-body .today-hot.down, .today-body .today-row b.num.down { color: var(--accent); }     /* 跌的砖红、涨的深墨蓝（画板跌橙涨蓝） */
.today-body .today-sub { font-size: 13px; color: var(--muted); margin: 0; }
.today-body .today-counts { margin: 0 0 22px; padding-bottom: 18px; border-bottom: var(--line); }     /* 页头和下面各块之间一条细线（画板 1） */
.today-body .today-counts .stat-strip { display: flex; flex-wrap: wrap; gap: 8px 48px; background: transparent; border: 0; margin: 0; }
.today-body .today-counts .stat { border: 0; padding: 0; }
.today-body .today-counts .stat .v { font-size: 17px; }

@media (max-width: 820px) {
  .today-page { display: block; }
  .today-page > .search-box { display: block; }
  .today-page > .search-box > .pf-inline { margin: 0 0 14px; padding: 0; border-bottom: 0; }
  .today-page .search-input { width: auto; flex: 1; }
  .today-body .today-big { font-size: 22px; }
}

/* 要重新看一眼：整宽砖红细框大卡片，四栏（代码 · 涨跌 · 金额 · 权重 · 异动 / 为什么动 / 对您重不重要 / 要做什么）；栏名下一条细线（画板 1） */
.today-body .today-row.review { display: grid; grid-template-columns: minmax(0, 12em) minmax(0, 1.25fr) minmax(0, 1.5fr) minmax(0, 1fr);
  gap: 0 24px; align-items: start; border: 1px solid var(--accent); background: var(--surface); padding: 16px 20px; margin-bottom: 12px; }
.today-body .today-row.review .today-head { gap: 2px 8px; margin: 0; }          /* 代码 公司 / 涨跌（单独一行）/ 金额 权重 异动 */
.today-body .today-row.review .today-head > b.num { flex-basis: 100%; }
.today-body .today-row.review .today-head::before,
.today-body .today-row.review .today-qa > span.muted:first-child { content: ""; display: block; flex-basis: 100%; box-sizing: border-box; height: 28px;
  font-size: 12.5px; line-height: 20px; padding-bottom: 7px; border-bottom: var(--line); margin-bottom: 10px; }
.today-body .today-row.review .today-head a.mono, .today-body .today-row.review .today-head b.num { font-size: 17px; }
.today-body .today-row b.num { color: var(--ink); }
.today-body .today-row.review .today-qa { display: block; padding: 0; }
.today-body .today-go { width: 100%; white-space: normal; text-align: center; }
/* 没事的票（和还没有当天数据的票）：一只一行——代码 + 涨跌（下面一行小字：金额、权重、异动标、关注价）/ 为什么动 / 最右边灰底“无” */
.today-body .today-row:not(.review) { display: grid; grid-template-columns: minmax(0, 20em) minmax(0, 1fr) auto; gap: 0 24px; align-items: center;
  border: 0; border-top: var(--line); background: transparent; padding: 9px 4px; margin: 0; }
.today-body .today-row:not(.review) .today-head { margin: 0; gap: 0 10px; font-size: 12.5px; line-height: 1.5; color: var(--muted); }
.today-body .today-row:not(.review) .today-head > * { order: 5; }
.today-body .today-row:not(.review) .today-head > a.mono { order: 1; font-size: 14px; }
.today-body .today-row:not(.review) .today-head > b.num { order: 2; font-size: 14px; }
.today-body .today-row:not(.review) .today-head > a.mono + span.muted { order: 3; }                    /* 公司名跟在代码、涨跌后面 */
.today-body .today-row:not(.review) .today-head::after { content: ""; order: 4; flex-basis: 100%; }   /* 换行：下面一行小字是金额、权重、异动标、关注价 */
.today-body .today-row:not(.review) .today-qa { display: block; padding: 0; }
.today-body .today-row:not(.review) .today-qa > span.muted:first-child,
.today-body .today-row:not(.review) .qa-matters { display: none; }
.today-body .today-row:not(.review) > p { margin: 0; font-size: 13px; }
.today-body .today-none { display: inline-block; min-width: 5em; padding: 1px 12px; background: var(--surface-2); color: var(--ink-2); font-size: 12.5px; text-align: center; }
.today-body .pf-card > .tiny.muted:last-child { margin: 0; padding-top: 10px; border-top: var(--line); }   /* 「无」的意思是……那句 */

@media (max-width: 820px) {
  .today-body .today-row.review, .today-body .today-row:not(.review) { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .today-body .today-row.review .today-head::before { display: none; }
}

/* 这周替您做了的事：整宽深墨蓝横幅（画板 1）——顶上一行小字（标题左、服务状态右）→ 结论大字 → 一排小格子（名字 + 数） */
.today-body .today-week { background: var(--ink); color: var(--surface); padding: 20px 26px 24px; margin: 0 0 14px; }
.today-body .today-week-top { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 4px 16px; margin: 0 0 10px; }
.today-body .today-week h2 { font-family: var(--sans); font-size: 12.5px; font-weight: 600; letter-spacing: .5px; color: var(--muted-2); margin: 0; }
.today-body .today-week-top p { margin: 0; font-size: 12.5px; color: var(--muted-2); }
.today-body .today-verdict { font-family: var(--serif); font-size: 24px; line-height: 1.4; font-weight: 700; color: var(--surface); margin: 0 0 18px; }
.today-body .today-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; }
.today-body .today-tile { display: flex; flex-direction: column; gap: 2px; border: 1px solid var(--ink-2); padding: 10px 14px; min-width: 0; }
.today-body .today-tile .k { font-size: 12.5px; color: var(--muted-2); }
.today-body .today-tile .v { font-family: var(--mono); font-size: 17px; color: var(--surface); }

@media (max-width: 820px) {
  .today-body .today-week { padding: 16px 16px 18px; }
  .today-body .today-verdict { font-size: 19px; }
}

/* 周报：两块并排、顶端对齐——左宽（标题“周报”、六节两列编号排、打开上一份 / 最近几份），右窄（两个下拉并排、整宽“现在就要一份”、还能要几份） */
.today-body .wk-card { margin: 0 0 14px; }
.today-body .wk-grid { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 14px; align-items: stretch; }
.today-body .wk-grid > div { background: var(--surface); border: var(--line); padding: 16px 18px; min-width: 0; }
.today-body .wk-left > h2 { font-size: 16px; margin: 0 0 10px; }
.today-body .wk-left .wk-heads { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px 28px; list-style-position: inside;
  padding: 0 0 12px; margin: 0 0 12px; border-bottom: var(--line); }
.today-body .wk-grid > div:nth-child(2) { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 12px; align-content: start; }
.today-body .wk-grid > div:nth-child(2) > :not(label) { grid-column: 1 / -1; }
html[lang="en"] .today-body .wk-grid > div:nth-child(2) { grid-template-columns: minmax(0, 1fr); }   /* 英文的选项字长，两个下拉上下排，不被裁掉 */
.today-body .wk-now .btn { width: 100%; padding: 10px 20px; font-size: 14.5px; }
/* 搜索卡（有档案的那种）：三块并排三栏；代码行、“截至 …，本周新版还没出”、三个按钮各占整行（画板 1 最下面那张） */
#app.wide .sc-ready { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 14px; }
#app.wide .sc-ready > :not(.stock-block) { grid-column: 1 / -1; }

@media (max-width: 820px) {
  .today-body .wk-grid, #app.wide .sc-ready, .today-body .wk-left .wk-heads,
  .today-body .wk-grid > div:nth-child(2) { grid-template-columns: minmax(0, 1fr); }
}

/* ---------- 个股页三个标签共用的页头（R-03，画板 2 / 3 / 5）：只对 .stock-page 生效 ---------- */
/* 左边代码大字 + 公司名（研报标签下面一行研报日期），右边三个小数据（小标题 + 值，顶端对齐），两边底部对齐；
   没持有也没关注时两个按钮排在三项下面（第二行，靠右）；整个页头下面一条细线 */
.stock-page .stock-hd { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 10px 32px; padding: 2px 0 16px; border-bottom: var(--line); }
.stock-page .stock-hd-left { grid-column: 1; grid-row: 1; align-self: end; }
.stock-page .stock-hd-name { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 14px; }
.stock-page .stock-hd h1 { font-size: 34px; line-height: 1.15; margin: 0; }
.stock-page .stock-co { font-size: 17px; color: var(--ink-2); }
.stock-page .stock-hd-sub { margin: 4px 0 0; }
.stock-page .stock-hd-sub:empty { display: none; }
.stock-page .stock-hd-right { display: contents; }
.stock-page .stock-hd-items { grid-column: 2; grid-row: 1; align-self: end; display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: flex-start;
  gap: 8px 32px; min-width: 0; }
.stock-page .stock-hd-item { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.stock-page .stock-hd-item .k { font-size: 12.5px; color: var(--muted); }
.stock-page .stock-hd-item .v { font-size: 15px; font-weight: 600; line-height: 1.5; color: var(--ink); }
.stock-page .stock-hd-item .v a { font-weight: 600; }
.stock-page .stock-hd-right > .pf-inline { grid-column: 2; grid-row: 2; justify-self: end; margin: 0; }
/* 详情 / 研报 / 档案：页头下面靠左一排文字标签，当前那个一条深墨蓝粗线（画板 2），整排下面一条细线 */
.stock-page .stock-tabs { gap: 30px; border-bottom: var(--line); margin: 0 0 18px; }
.stock-page .stock-tabs a { padding: 12px 2px 9px; border: 0; border-bottom: 3px solid transparent; margin-bottom: -1px; background: transparent;
  color: var(--muted); font-size: 15px; }
.stock-page .stock-tabs a.on { background: transparent; color: var(--ink); font-weight: 700; border-bottom-color: var(--ink); }
.stock-page .stock-tabs a:hover { color: var(--ink); }
.stock-page .stock-file { margin: 0 0 12px; }

@media (max-width: 820px) {
  .stock-page .stock-hd { grid-template-columns: minmax(0, 1fr); }
  .stock-page .stock-hd h1 { font-size: 28px; }
  .stock-page .stock-hd-items { grid-column: 1; grid-row: 2; justify-content: flex-start; gap: 8px 24px; }
  .stock-page .stock-hd-right > .pf-inline { grid-column: 1; grid-row: 3; justify-self: start; }
}

/* ---------- 个股“详情”标签（R-04，画板 2）：只对 .stock-detail 生效（“今天”页的行在 .today-body 下面，互不影响） ---------- */
/* 今天一块：三栏并排（为什么动 / 对您重不重要 / 要做什么），涨跌和异动标在第一栏栏名下面；里面不再套一层框。
   要重新看一眼：整块砖红细框，“要做什么”深墨蓝底一块（这只票自己，不链接） */
.stock-detail .stock-block:has(> .today-row.review) { border-color: var(--accent); }
.stock-detail .stock-block > .today-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 32px; align-items: start;
  border: 0; background: transparent; padding: 0; margin: 0; }
.stock-detail .today-row > .today-qa:not(.qa-why) { display: block; padding: 0; }
.stock-detail .today-row > .qa-why { display: contents; }
.stock-detail .today-row .today-qa > span.muted:first-child { display: block; font-size: 12.5px; margin: 0 0 6px; }
.stock-detail .today-row > .qa-why > span.muted:first-child { grid-column: 1; grid-row: 1; }
.stock-detail .today-row > .today-head { grid-column: 1; grid-row: 2; margin: 0 0 4px; }
.stock-detail .today-row > .qa-why > :last-child { grid-column: 1; grid-row: 3; }
.stock-detail .today-row > .qa-matters { grid-column: 2; grid-row: 1 / span 3; }
.stock-detail .today-row > .qa-action { grid-column: 3; grid-row: 1 / span 3; }
.stock-detail .today-row > p { grid-column: 1 / -1; margin: 0; }
.stock-detail .today-head b.num { font-family: var(--mono); font-size: 22px; color: var(--ink); }
.stock-detail .today-head b.num.down { color: var(--accent); }
.stock-detail .today-row.review .qa-action > span:last-child { display: block; padding: 10px 16px; background: var(--ink); color: var(--surface);
  font-weight: 600; text-align: center; }

/* 故事天平：左边结论句放大在上、横条和“看多 58 | 42 看空”在下；右边一条竖线隔开，放过去 6 个季度的小折线 */
.stock-detail .balance-row { grid-template-columns: minmax(0, 7fr) minmax(0, 3fr); gap: 0; align-items: stretch; }
.stock-detail .balance-main { min-width: 0; padding-right: 28px; }
.stock-detail .balance-verdict { font-family: var(--serif); font-size: 20px; line-height: 1.5; font-weight: 700; color: var(--ink); margin: 0 0 14px; }
.stock-detail .balance-main .stock-lead { font-size: 13.5px; color: var(--ink-2); margin: 0 0 6px; }
.stock-detail .balance-side { min-width: 0; padding-left: 24px; border-left: var(--line); }

/* 证据：碰到论点的每条一行三列——左日期、中间标题 + 下面小字、右边论点标签；行与行之间一条细线（组合 / 关注页的新材料同一套，多一列代码，见 .pt-news） */
.stock-detail .ev-card, .pt-news .ev-card { display: grid; grid-template-columns: 4.5em minmax(0, 1fr) auto; gap: 0 20px; align-items: start;
  border: 0; border-top: var(--line); padding: 12px 0; margin: 0; }
.stock-detail .ev-card .ev-date, .pt-news .ev-card .ev-date { font-size: 13px; color: var(--ink-2); line-height: 1.6; }
.stock-detail .ev-main b, .pt-news .ev-main b { display: block; margin: 0; font-size: 14.5px; }
.stock-detail .ev-main p, .pt-news .ev-main p { margin: 2px 0 0; }
.stock-detail .ev-main .ev-impact, .pt-news .ev-main .ev-impact { font-size: 13px; color: var(--ink-2); }
.stock-detail .ev-tags, .pt-news .ev-tags { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; max-width: 18em; }
.stock-detail .ev-tag, .pt-news .ev-tag { padding: 1px 10px; background: var(--surface-2); color: var(--ink); font-size: 12.5px; font-weight: 600;
  white-space: nowrap; }

/* 下次检验 + 本季翻转：两块并排、一样高，下次检验深墨蓝底白字（画板 2 左下角）；财报前清单出了时整宽接在下面 */
.stock-detail .stock-nf { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-areas: "next flips" "list list"; gap: 0 14px;
  margin-bottom: 14px; }
.stock-detail .stock-nf > .stock-nc { display: contents; }
.stock-detail .stock-nf > .stock-block:last-child { grid-area: flips; margin: 0; }
.stock-detail .stock-nf > .stock-block:first-child,
.stock-detail .stock-nc > .stock-block:first-child { grid-area: next; margin: 0; background: var(--ink); border-color: var(--ink); color: var(--surface); }
.stock-detail .stock-nf > .stock-block:first-child h2,
.stock-detail .stock-nc > .stock-block:first-child h2 { color: var(--surface); }
.stock-detail .stock-nf > .stock-block:first-child .muted { color: var(--muted-2); }
.stock-detail .stock-nc > .stock-checklist { grid-area: list; margin: 14px 0 0; }

@media (max-width: 820px) {
  .stock-detail .stock-block > .today-row { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .stock-detail .today-row > .qa-matters, .stock-detail .today-row > .qa-action { grid-column: 1; grid-row: auto; margin-top: 12px; }
  .stock-detail .balance-row { grid-template-columns: minmax(0, 1fr); }
  .stock-detail .balance-main { padding-right: 0; }
  .stock-detail .balance-side { padding: 12px 0 0; margin-top: 12px; border-left: 0; border-top: var(--line); }
  .stock-detail .ev-card { grid-template-columns: 4em minmax(0, 1fr); }
  .stock-detail .ev-tags { grid-column: 2; justify-content: flex-start; margin-top: 6px; }
  .stock-detail .stock-nf { grid-template-columns: minmax(0, 1fr); grid-template-areas: "next" "flips" "list"; }
  .stock-detail .stock-nf > .stock-block:first-child, .stock-detail .stock-nc > .stock-block:first-child { margin-bottom: 14px; }
}

/* ---------- 组合 / 关注（R-07，画板 6、7）：只对 .pt-page 生效 ---------- */
/* 页头：左边一行小字（页名 + 说明）→ 大字“我的组合　关注”（当前深墨蓝、另一个浅灰）→ 一句状态；右边三个数一行（不画格子）；下面一条细线 */
.pt-page .pt-hd { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px 40px; align-items: end; padding: 2px 0 16px;
  border-bottom: var(--line); margin: 0 0 16px; }
.pt-page .pt-kicker { margin: 0 0 6px; font-size: 12.5px; color: var(--muted); }
.pt-page .pt-kicker b { color: var(--ink-2); margin-right: 12px; }
.pt-page .pt-switch { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 26px; font-size: 32px; line-height: 1.25; margin: 0 0 6px; }
.pt-page .pt-switch a { color: var(--muted); text-decoration: none; }
.pt-page .pt-switch a.on { color: var(--ink); }
.pt-page .pt-switch a:hover { color: var(--ink); }
.pt-page .pt-hd-sub p { margin: 0; font-size: 13px; color: var(--ink-2); }
.pt-page .pt-hd-right .stat-strip { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px 40px; background: transparent; border: 0; margin: 0; }
.pt-page .pt-hd-right .stat { border: 0; padding: 0; }
.pt-page .pt-hd-right .stat .v { font-size: 17px; }
/* 搜索框（左）和账户筛选（右）同一行；搜出来的卡片整宽出在这一行下面 */
.pt-page .pt-tools { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 0 16px; margin: 0 0 16px; }
.pt-page .pt-tools > .search-box { display: contents; }
.pt-page .pt-tools > .search-box > .pf-inline { grid-column: 1; grid-row: 1; margin: 0; }
.pt-page .pt-tools > .pf-filter { grid-column: 2; grid-row: 1; margin: 0; }
/* 网站 PRD-044 R-03 / R-04：工具行最右边「记一笔交易」/「加关注」（交易记录标签没有搜索框，按钮照样靠右） */
.pt-page .pt-tools > .pt-add { grid-column: 3; grid-row: 1; justify-self: end; }
.pt-page .pt-tools > .search-box > .search-out { grid-column: 1 / -1; grid-row: 2; }
.pt-page .pt-tools > .search-box > .search-out > .search-card { margin: 14px 0 0; }
/* 主线表：整宽，天平那一栏约占一半、条拉满那一栏；代码下面一行小字写公司名 */
.pt-page .pt-rows th:nth-child(3) { width: 42%; }
.pt-page .pt-rows .pt-balance .balance-mini { height: 12px; }
.pt-page .pt-rows td:first-child > a.mono { font-weight: 700; white-space: nowrap; }
.pt-page .pt-rows td:first-child > span.tiny, .pt-page .pt-rows td:first-child > p { display: block; white-space: nowrap; }
/* 新材料：计数一行左、筛选右；碰到论点的每条一行四列（日期 / 代码 / 标题和小字 / 论点标签）；没碰到的照旧收起成一行 */
.pt-page .pt-news-bar { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 6px 16px; margin: 0 0 8px; }
.pt-page .pt-news-bar > * { margin: 0; }
.pt-news .ev-card { grid-template-columns: 4.5em 4.5em minmax(0, 1fr) auto; }
.pt-news .ev-card .ev-tk { font-size: 14px; line-height: 1.6; }
.pt-news .ev-others { margin: 0; padding: 10px 0 0; border-top: var(--line); }
.pt-news .ev-others + .ev-others { margin-top: 10px; }
/* 对手：每只一张小卡片一行排开，一行最多 5 张（每张至少一行的五分之一宽），多了换行；没有对手数据的那张只有一句，不拉成和有图的一样高 */
.pt-page .pc-grid { grid-template-columns: repeat(auto-fill, minmax(max(180px, calc((100% - 56px) / 5)), 1fr)); align-items: start; }
/* 押的变量 + 30 天日历：两块左右并排、一样高；变量表一格一个小格子——押的深墨蓝实心（里面白点），不押的浅色空格；行间不画线 */
.pt-page .pt-pair { align-items: stretch; }
.pt-page .pt-vars th, .pt-page .pt-vars td { padding: 5px 6px; border-bottom: 0; }
.pt-page .pt-vars thead th { padding-bottom: 8px; }
.pt-page .pt-vars tbody tr:first-child td { padding-top: 10px; }
.pt-page .pt-vars th:not(:first-child):not(:last-child) { text-align: center; }
.pt-page .pt-vars td:first-child { white-space: nowrap; }
.pt-page .pt-mark { padding-left: 3px; padding-right: 3px; }
.pt-page .pt-cell { display: block; min-width: 56px; height: 24px; line-height: 24px; background: var(--surface-2); color: var(--surface);
  font-size: 10px; text-align: center; }
.pt-page .pt-cell.on { background: var(--ink); }
.pt-page .pt-vars .pt-sum { min-width: 130px; padding-left: 14px; }
/* 本周钱亏 / 赚在哪：整宽一条加粗的条，两段的名字和数写在条上（白字）；写不下的那段字在条下面（深色字） */
.pt-page .mm-bar { display: block; overflow: visible; margin: 2px 0 12px; }
.pt-page .mm-label { font-family: var(--sans); font-size: 13px; font-weight: 600; fill: var(--surface); dominant-baseline: central; }
.pt-page .mm-label.out { fill: var(--ink-2); }

@media (max-width: 820px) {
  .pt-page .pt-hd { grid-template-columns: minmax(0, 1fr); }
  .pt-page .pt-switch { font-size: 26px; }
  .pt-page .pt-hd-right .stat-strip { justify-content: flex-start; gap: 8px 24px; }
  .pt-page .pt-tools { grid-template-columns: minmax(0, 1fr) auto; gap: 10px; }
  .pt-page .pt-tools > .search-box > .pf-inline { grid-column: 1 / -1; }
  .pt-page .pt-tools > .pf-filter { grid-column: 1; grid-row: 2; justify-self: start; }
  .pt-page .pt-tools > .pt-add { grid-column: 2; grid-row: 2; }
  .pt-page .pt-tools > .search-box > .search-out { grid-row: 3; }
  .pt-page .pt-rows { min-width: 640px; }             /* 手机上主线表在自己的框里左右滑（页面不出横向滚动条），不把字挤成一字一行 */
  .pt-page .pt-rows th:nth-child(3) { width: 30%; }
  .pt-page .pt-cell { min-width: 34px; }
  .pt-news .ev-card { grid-template-columns: 4em minmax(0, 1fr); }
  .pt-news .ev-card .ev-date { grid-column: 1; grid-row: 1; }
  .pt-news .ev-card .ev-tk { grid-column: 1; grid-row: 2; }
  .pt-news .ev-card .ev-main { grid-column: 2; grid-row: 1 / span 2; }
  .pt-news .ev-tags { grid-column: 2; grid-row: 3; justify-content: flex-start; margin-top: 6px; }
}

/* ---------- 持仓管理（R-08，画板 4）：只对 #/holdings 生效（.pf-entry 只有持仓页用） ---------- */
/* 上面只剩“记一笔交易”一块，占整宽（ADR-0025 删掉了右边的“快速加 / 粘贴多行”）；四张表各占整宽，日期、公司名、持有时长不折行 */
#app.wide .pf-entry > .pf-card { margin-bottom: 0; }
#app.wide .pf-body td.pf-nw { white-space: nowrap; }

@media (max-width: 820px) {
  #app.wide .pf-body .scroll-x > table.tbl { width: max-content; min-width: 100%; }   /* 手机上表格在自己的框里左右滑，字不挤成一字一行 */
}

/* ---------- 研报一页版（R-05，画板 3）：只对 .stock-report 生效 ---------- */
/* 主线判断整宽：判断那句放大（比块标题大），“决定胜负的那一个数”照旧在下面那条浅底横条里 */
.stock-report > .stock-block:first-child > .stock-lead { font-family: var(--serif); font-size: 21px; line-height: 1.55; font-weight: 700; color: var(--ink);
  margin: 0 0 14px; }
/* 现价算进了什么 / 钱从哪来 / 下一次检验一行（几块就几栏、等宽、顶端对齐、一样高——画板 3 一行的几张卡底边齐），体检 / 华尔街怎么说一行 */
.stock-report > .rep-cols { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 14px; align-items: stretch; margin-bottom: 14px; }
.stock-report > .rep-cols > .stock-block { margin: 0; min-width: 0; }
/* 在对手里站在哪：引擎的两张图左右并排，只有一张时占整宽 */
.stock-report .stock-charts { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 20px; align-items: start; }
.stock-report .stock-charts > .stock-chart { width: 100%; }

@media (max-width: 820px) {
  .stock-report > .stock-block:first-child > .stock-lead { font-size: 18px; }
  .stock-report > .rep-cols, .stock-report .stock-charts { grid-auto-flow: row; grid-template-columns: minmax(0, 1fr); }
}

/* ---------- 档案（R-06，画板 5）：所有检验周期放在一块里，一个周期一行四栏，行与行之间一条细线 ---------- */
/* ① 日期 + 下面“当前”小标签 + 几版；② 主线判断（加粗）+ 下面小字；③ 这一季变了什么 / 检验结果；④ 最右边打开全文 + 查看每一版 */
.stock-page .stock-archive { background: var(--surface); border: var(--line); padding: 0 22px; }
.stock-page .stock-archive .stock-group { background: transparent; border: 0; border-top: var(--line); padding: 16px 0; margin: 0; }
.stock-page .stock-archive .stock-group:first-child { border-top: 0; }
.stock-page .stock-archive .stock-row { grid-template-columns: minmax(0, 14em) minmax(0, 2fr) minmax(0, 1.25fr) auto; gap: 0 28px; align-items: start; }
.stock-page .stock-archive .stock-row p { margin: 3px 0 0; }
.stock-page .stock-archive .c1 > b { display: block; font-size: 14px; line-height: 1.5; word-break: keep-all; overflow-wrap: anywhere; }   /* 折行折在空格处，不把“财报”拆开 */
.stock-page .stock-archive .c1 > .badge { margin: 6px 0 0; }
.stock-page .stock-archive .c2 > b { display: block; font-size: 15.5px; line-height: 1.5; color: var(--ink); }
.stock-page .stock-archive .c3 > p.tiny.muted:first-child { margin: 0; }
.stock-page .stock-archive .c4 { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
.stock-page .stock-archive .c4 > a { font-weight: 700; line-height: 1.5; }
.stock-page .stock-archive .stock-versions { margin-top: 14px; }

@media (max-width: 820px) {
  .stock-page .stock-archive { padding: 0 16px; }
  .stock-page .stock-archive .stock-row { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .stock-page .stock-archive .c4 { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
}

/* ---------- 时间轴（共用件 views/timeline.js，R-04 第 4 条 / R-07 第 5 条）：横线、点、标签；窄于 820 像素整条不画，只留下面的列表 ---------- */
.timeline { margin: 6px 0 12px; padding: 0 10px; }
.timeline .tl-svg { display: block; width: 100%; overflow: visible; }
.timeline .tl-axis { stroke: var(--rule-strong); stroke-width: 1.5; }
.timeline .tl-tick { stroke: var(--ink); stroke-width: 2; }
.timeline .tl-stem { stroke: var(--rule-strong); stroke-width: 1; }
.timeline .tl-pt { fill: var(--ink); stroke: var(--ink); stroke-width: 2; }
.timeline .tl-pt.busy { fill: var(--accent); stroke: var(--accent); }            /* 同一天两件以上：大、砖红 */
.timeline .tl-pt.est { fill: var(--surface); stroke: var(--ink); }              /* 日期是预计：空心 */
.timeline .tl-pt.busy.est { fill: var(--surface); stroke: var(--accent); }
.timeline text { font-family: var(--sans); font-size: 12.5px; fill: var(--ink-2); }
.timeline .tl-d { font-family: var(--mono); font-weight: 700; fill: var(--ink); }
.timeline .tl-label.busy, .timeline .tl-label.busy .tl-d, .timeline .tl-note { fill: var(--accent); }
.timeline .tl-label.busy { font-weight: 600; }
.timeline .tl-today { fill: var(--ink); font-weight: 600; }
.timeline .tl-start { text-anchor: start; }
.timeline .tl-middle { text-anchor: middle; }
.timeline .tl-end { text-anchor: end; }

@media (max-width: 820px) {
  .timeline { display: none; }
}
