/* TradSig Public —— 沿用 V1 首页设计稿的视觉语言。
   首页与 /legal/ 三页共用。Internal 页的样式在 quant/base.html 自身 <style> 内，互不影响。 */
:root{
  --paper:#F2F5FA; --card:#FFFFFF; --card-2:#F7F9FC;
  --ink:#0D1B33; --ink-2:#5A6B87; --ink-3:#8C9BB4;
  --line:#DCE3EF; --line-soft:#E9EEF6;
  --brand:#3154C8; --brand-deep:#1E357F; --brand-wash:#E8EDFA; --on-brand:#FFFFFF;
  --accent:#B5710A; --accent-wash:#FAF1DE;
  --bar-bg:#0D1B33; --bar-fg:#F2F5FA;
  --sans:"IBM Plex Sans SC","IBM Plex Sans","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --cond:"IBM Plex Sans Condensed","IBM Plex Sans SC",system-ui,sans-serif;
  --mono:"IBM Plex Mono",Consolas,Menlo,monospace;
  --shadow:0 1px 2px rgba(13,27,51,.05),0 10px 30px rgba(13,27,51,.06);
  --maxw:1140px;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --paper:#070F1C; --card:#0F1D31; --card-2:#132540;
    --ink:#E6EDFA; --ink-2:#93A6C4; --ink-3:#6D7F9C;
    --line:#22354F; --line-soft:#1A2B42;
    --brand:#8FA8F9; --brand-deep:#C3D0FF; --brand-wash:rgba(143,168,249,.13); --on-brand:#0A1526;
    --accent:#E5A83A; --accent-wash:rgba(229,168,58,.14);
    --bar-bg:#132540; --bar-fg:#93A6C4;
    --shadow:0 1px 2px rgba(0,0,0,.4),0 12px 34px rgba(0,0,0,.34);
  }
}
:root[data-theme="dark"]{
  --paper:#070F1C; --card:#0F1D31; --card-2:#132540;
  --ink:#E6EDFA; --ink-2:#93A6C4; --ink-3:#6D7F9C;
  --line:#22354F; --line-soft:#1A2B42;
  --brand:#8FA8F9; --brand-deep:#C3D0FF; --brand-wash:rgba(143,168,249,.13); --on-brand:#0A1526;
  --accent:#E5A83A; --accent-wash:rgba(229,168,58,.14);
  --bar-bg:#132540; --bar-fg:#93A6C4;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 12px 34px rgba(0,0,0,.34);
}

*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);
  font:400 16px/1.75 var(--sans);-webkit-font-smoothing:antialiased}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}
:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:4px}
/* 标题复位只对自绘组件生效。不要写成裸 h1,h2,h3：margin:0 会让 markdown 生成的
   标题贴着正文——下批四个 Public 子页（数据下载页的 Dataset Card 大概率走 markdown）
   正是触发条件。本规则在各组件规则之前，同特异度下后者的 margin 仍然胜出。 */
.hero h1,.sechead h2,.step h3,.card h3,.disclaim h3,.pagehead h1,.block>h2,
.box h3,.fgroup>h3,.echo h3,.legal h1,.legal h2,.legal h3{text-wrap:balance;margin:0}
/* 列表复位只对首页那两处自绘列表生效。不要写成裸 ol,ul：
   markdown 生成的正文列表会被 list-style:none 悄悄吃掉项目符号。 */
.tl,.rules{margin:0;padding:0;list-style:none}
.shell{max-width:var(--maxw);margin:0 auto;padding:0 28px}
.eyebrow{font:500 11.5px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3)}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:.94em}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}

.mockbar{background:var(--bar-bg);color:var(--bar-fg);font:500 12.5px/1 var(--mono);letter-spacing:.06em}
.mockbar .shell{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;
  padding-top:9px;padding-bottom:9px}
.mockbar b{font-weight:600}

.topbar{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line-soft)}
.topbar .shell{display:flex;align-items:center;gap:28px;height:66px}
.wordmark{display:flex;align-items:center;gap:11px;color:var(--ink);min-height:44px}
.wordmark:hover{text-decoration:none}
.glyph{width:38px;height:38px;flex:none}
/* 字标：Trad 用正文墨色（深色主题自动转浅），Sig 用蓝色渐变 */
.wm{font:700 26px/1 var(--sans);letter-spacing:-.035em}
.wm-trad{color:var(--ink)}
.wm-sig{color:#2563EB}
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  .wm-sig{background:linear-gradient(135deg,#4DA2FF 0%,#2563EB 46%,#1440C8 100%);
    -webkit-background-clip:text;background-clip:text;color:transparent}
}
.toplinks{display:flex;gap:22px;margin-left:auto;font-size:14.5px;color:var(--ink-2)}
.toplinks a{color:inherit}
.toplinks a:hover,.toplinks a.on{color:var(--brand)}
.toplinks a.on{font-weight:600}
/* 「内部入口」：灰色次要文字链接，不做成彩色按钮。
   触控区不小于 44×44px（使用者含长辈，手指点击精度差），用 padding 撑开而非只靠字号。 */
.entry{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;min-width:44px;padding:0 14px;font-size:14.5px;color:var(--ink-3);
  border-radius:6px;transition:color .16s,background .16s}
.entry:hover,.entry:focus-visible{color:var(--ink-2);background:var(--card-2);text-decoration:none}
/* 触控区 >=44x44：使用者含长辈，手指点击精度差。用 min-height 而非 height，
   文字换行时按钮跟着长高而不是溢出。 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:44px;min-width:44px;padding:9px 18px;border-radius:6px;cursor:pointer;
  font:500 14.5px/1 var(--sans);border:1px solid transparent;transition:background .16s,border-color .16s,color .16s}
.btn.solid{background:var(--brand);color:var(--on-brand)}
.btn.solid:hover{background:var(--brand-deep);text-decoration:none}
.btn.ghost{border-color:var(--line);color:var(--ink);background:transparent}
.btn.ghost:hover{border-color:var(--brand);color:var(--brand);text-decoration:none}
.btn.sm{min-height:44px;padding:7px 13px;font-size:13.5px}
.btn[disabled]{opacity:.55;cursor:not-allowed}

/* ---- Hero ---- */
header.hero{position:relative;overflow:hidden;border-bottom:1px solid var(--line-soft)}
header.hero .shell{position:relative;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);
  gap:64px;align-items:center;padding-top:84px;padding-bottom:88px}
/* hero 专用，不要写成裸 h1：任何其他页面的 h1 都会被这个尺寸接管 */
.hero h1{font:600 clamp(34px,4.6vw,56px)/1.22 var(--sans);letter-spacing:-.03em;margin:20px 0 0}
.hero h1 .hl{color:var(--brand)}
.lede{margin:22px 0 0;max-width:34em;font-size:17px;line-height:1.85;color:var(--ink-2)}
.cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}
.legalnote{margin:20px 0 0;font-size:13px;color:var(--ink-3)}

/* ---- 今日数据状态卡 ---- */
.panel{background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.panel .head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  padding:16px 20px;border-bottom:1px solid var(--line-soft)}
.panel .head .t{font:600 14.5px/1 var(--sans)}
.panel .head .d{font:400 12.5px/1 var(--mono);color:var(--ink-3)}
.rows{padding:6px 20px 14px}
.row{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:11px 0;border-bottom:1px dashed var(--line-soft);font-size:14px}
.row:last-child{border-bottom:0}
.row .k{color:var(--ink-2)}
.row .v{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:13.5px}
.panel .foot{padding:11px 20px;border-top:1px solid var(--line-soft);background:var(--card-2);
  font:400 12px/1.6 var(--mono);color:var(--ink-3)}
/* .busy = 非 normal（更新中/校验中/更新异常）：换成琥珀色，不做成红色告警——
   公开页展示的是运维状态，不是故障播报 */
.pill.busy{color:var(--accent);background:var(--accent-wash)}
.pill{display:inline-block;padding:1px 8px;border-radius:4px;font:500 12px/1.7 var(--mono);
  color:var(--brand);background:var(--brand-wash)}

section{padding:82px 0;border-bottom:1px solid var(--line-soft)}
.sechead{max-width:40em}
.sechead h2{font:600 clamp(24px,2.6vw,32px)/1.35 var(--sans);letter-spacing:-.02em;margin:14px 0 0}
.sechead p{margin:14px 0 0;color:var(--ink-2);font-size:15.5px}

.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;margin-top:40px;
  background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.metric{background:var(--card);padding:28px 26px 24px}
.metric .lbl{font:500 11.5px/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3)}
.metric .big{margin-top:14px;font-family:var(--cond);font-weight:700;font-size:44px;line-height:1;
  letter-spacing:-.015em;font-variant-numeric:tabular-nums}
.metric .big small{font-size:20px;font-weight:600;margin-left:2px}
.metric .cap{margin:12px 0 0;font-size:13.5px;line-height:1.7;color:var(--ink-2)}
.metric .src{margin:10px 0 0;font:400 12px/1.6 var(--mono);color:var(--ink-3)}

.tl{margin-top:44px;display:grid;grid-template-columns:repeat(6,1fr)}
.step{position:relative;padding:0 18px 0 0}
.step .clock{font:600 13px/1 var(--mono);color:var(--brand);letter-spacing:.02em}
.step .bar{position:relative;height:1px;background:var(--line);margin:14px 0 18px}
.step .bar::before{content:"";position:absolute;left:0;top:-3.5px;width:8px;height:8px;border-radius:50%;
  background:var(--paper);border:2px solid var(--brand)}
.step.fill .bar::before{background:var(--brand)}
.step h3{font:600 15.5px/1.5 var(--sans)}
.step p{margin:8px 0 0;font-size:13.5px;line-height:1.75;color:var(--ink-2)}

.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:40px}
.card{display:block;background:var(--card);border:1px solid var(--line);border-radius:11px;padding:24px 22px 22px;
  color:var(--ink);transition:border-color .18s,transform .18s}
.card:hover{border-color:var(--brand);transform:translateY(-2px);text-decoration:none}
.card .rt{font:500 12px/1 var(--mono);color:var(--brand);letter-spacing:.04em}
.card h3{margin-top:13px;font:600 16.5px/1.4 var(--sans)}
.card p{margin:9px 0 0;font-size:14px;line-height:1.75;color:var(--ink-2)}
/* 未开放的模块卡：不可点，去掉 hover 上浮与描边强调，视觉上明确"还不能用" */
.card.soon{cursor:default;opacity:.72}
.card.soon:hover{border-color:var(--line);transform:none}
.card.soon .rt{color:var(--ink-3)}

.disc{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:56px;align-items:start}
.rules{border-top:1px solid var(--line)}
.rules li{display:grid;grid-template-columns:132px 1fr;gap:22px;padding:17px 0;border-bottom:1px solid var(--line-soft)}
.rules .rk{font:500 12.5px/1.7 var(--mono);color:var(--ink-3);letter-spacing:.03em}
.rules .rv{font-size:14.5px;line-height:1.8}
.rules .rv em{font-style:normal;font-family:var(--mono);font-size:13.5px;color:var(--brand)}

.disclaim{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--accent);
  border-radius:0 10px 10px 0;padding:24px 26px;margin-top:36px}
.disclaim h3{font:600 15px/1.5 var(--sans)}
.disclaim p{margin:11px 0 0;font-size:14px;line-height:1.85;color:var(--ink-2)}

footer{padding:52px 0 64px}
.fgrid{display:flex;flex-wrap:wrap;gap:26px;align-items:baseline;justify-content:space-between}
.fgrid .lk{display:flex;flex-wrap:wrap;gap:8px;font-size:14px;color:var(--ink-2)}
/* 页脚法务链接：padding 撑出 >=44px 触控区，右负 margin 抵消视觉上的额外留白 */
.fgrid .lk a{color:inherit;display:inline-flex;align-items:center;
  min-height:44px;padding:0 12px;margin:0 -12px 0 0;border-radius:6px}
.fgrid .lk a:hover{background:var(--card-2);text-decoration:none}
.fmeta{margin:26px 0 0;font:400 12.5px/1.9 var(--mono);color:var(--ink-3)}
/* 备案号是句子中的行内链接。padding 把命中盒撑到 44px 高，等量负 margin 把
   margin box 缩回原尺寸，行盒不增高、页脚排版不动。 */
.fmeta a{display:inline-block;padding:10px 2px;margin:-10px 0}

/* ---- 内页 ---- */
main.page{max-width:var(--maxw);margin:0 auto;padding:36px 28px 64px}
.pagehead{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;justify-content:space-between;
  padding-bottom:20px;border-bottom:1px solid var(--line)}
.pagehead h1{font:600 30px/1.25 var(--sans);letter-spacing:-.02em;margin:10px 0 0}
.pagehead .meta{font:400 12.5px/1.8 var(--mono);color:var(--ink-3);text-align:right}
.block{margin-top:40px}
.block>h2{font:600 19px/1.4 var(--sans);letter-spacing:-.01em}
.block>.hint{margin:8px 0 0;font-size:14px;color:var(--ink-2);max-width:56em}

.grid2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:18px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:18px}
.box{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:20px 22px}
.box h3{font:600 15px/1.5 var(--sans)}
.box p{margin:9px 0 0;font-size:14px;color:var(--ink-2)}
/* 数据下载页两个并排框（.grid2 默认 align-items:stretch）等高对齐是免费的，
   不用额外写；这里只管框内部呈现。.dl.compact 只给这三行摘要用，不动全站 .dl
   的行距——那份 15px 上下留白是给字段字典/因子方法论那类长列表用的，这里三行
   短摘要按同样间距会显得松散。*/
.box .dl.compact li{padding:6px 0}
/* 交易日列表固定只露 5 行，多的进内部滚动条——数据本身仍是全量可下，
   收敛的只是这个列表可见高度，不随 250 天积累把整个框撑高（见模板注释）。 */
.box .tblwrap.fixed5{max-height:270px;overflow-y:auto}
/* 「最近 5 个交易日」逐日 CSV/AI 导出：两个按钮复用既有 .btn.sm（min-height:44px
   全局生效，不分桌面移动），不新造一个更小的按钮类——那样会破坏"任何可点按钮
   都不低于 44px"这条全站已有的约定。 */
.explist{margin-top:14px;border-top:1px solid var(--line-soft)}
.explist li{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;
  row-gap:8px;column-gap:12px;padding:10px 0;border-bottom:1px solid var(--line-soft)}
.explist li:last-child{border-bottom:0}
.explist .expacts{display:flex;gap:10px}

/* 数据表样式全部限定在 .tblwrap 内。裸 th,td{white-space:nowrap} 曾全局命中
   /legal/ 的散文表格，390px 下把页面撑出横向滚动（见下方 .legal 段）。 */
.tblwrap{margin-top:16px;overflow-x:auto;background:var(--card);border:1px solid var(--line);border-radius:11px}
.tblwrap table{width:100%;border-collapse:collapse;font-size:14px}
.tblwrap th,.tblwrap td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--line-soft);white-space:nowrap}
.tblwrap th{font:500 12.5px/1.6 var(--mono);color:var(--ink-3);letter-spacing:.04em;background:var(--card-2)}
.tblwrap tbody tr:last-child td{border-bottom:0}
.tblwrap tbody tr:hover{background:var(--card-2)}
.tblwrap td.n,.tblwrap th.n{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}
/* .mono 是通用工具类，.94em 是给正文里内联小一号代码风格用的；.tblwrap 的 td 已经把
   字号钉死在 14px，套 .mono 会在这基础上再乘 .94 变成 13.16px——同一行里 mono 列比
   非 mono 列明显小一号，字段字典这种每行都混排 mono/非 mono 列的表格里尤其扎眼
   （2026-08-26 手机端实测发现，字段字典的字段名列比含义列小）。screener.html /
   stock.html 的表格同样受影响，这里统一按 .tblwrap 内 14px 的表格字号钉死，不留相对值。 */
.tblwrap .mono{font-size:1em}
/* .tblwrap 默认按数据表设计：短值、逐列 nowrap、宽了就整表横向滚动（screener/stock
   的结果表就是这样，符号/数字都不该换行）。Dataset Card 的字段字典/缺失原因码/因子
   清单这三张表根本不是这类表——是"两三个短列 + 一列长中文说明"的散文表，跟 /legal/
   的表格是同一种形状。套用 nowrap+auto 布局时，短列按内容宽度取值、长说明列还想按
   内容撑宽，三列自然宽度加起来早就超出手机屏幕，尽管说明列本身允许换行（wrapcell），
   表格作为整体还是会被撑宽——手机端实看发现的就是这个：字段名列被挤出屏幕外，
   含义列每行只显示半句。.legal table 早就踩过同一个坑并修好了（table-layout:fixed
   把宽度按比例分配、overflow-wrap:anywhere 保证长英文/表达式也能在窄列里换行），
   这里直接复用同一套，不再发明第二套。*/
.tblwrap.prose table{table-layout:fixed}
.tblwrap.prose td,.tblwrap.prose th{white-space:normal;overflow-wrap:anywhere}
.tblnote{margin:12px 0 0;font-size:13.5px;line-height:1.85;color:var(--ink-2)}

.chart{margin-top:16px;height:380px;background:var(--card);border:1px solid var(--line);border-radius:11px}
.chart.short{height:300px}

/* 因子暴露卡（中性呈现：不着色、不打标签） */
.fgroup{margin-top:22px}
.fgroup>h3{font:600 14px/1.6 var(--sans);color:var(--ink-2);
  padding-bottom:8px;border-bottom:1px solid var(--line)}
.flist{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:14px}
.fcard{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px 18px 14px}
.fcard .fn{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.fcard .fn b{font:600 14.5px/1.5 var(--sans)}
.fcard .fv{margin-top:8px;font-family:var(--cond);font-weight:700;font-size:28px;line-height:1;
  font-variant-numeric:tabular-nums}
.fcard .fv small{font-size:14px;font-weight:600;color:var(--ink-3);margin-left:3px}
.fcard .fq{margin-top:12px;display:grid;gap:8px}
.qline{display:grid;grid-template-columns:76px 1fr 44px;gap:9px;align-items:center;
  font:400 12px/1.6 var(--mono);color:var(--ink-3)}
.qbar{height:5px;border-radius:3px;background:var(--line-soft);overflow:hidden}
.qbar i{display:block;height:100%;background:var(--ink-3);border-radius:3px}
.qline b{text-align:right;font-weight:500;color:var(--ink-2);font-variant-numeric:tabular-nums}
details.what{margin-top:11px;border-top:1px dashed var(--line-soft);padding-top:9px}
details.what summary{cursor:pointer;font:400 12.5px/1.6 var(--mono);color:var(--brand);list-style:none}
details.what summary::-webkit-details-marker{display:none}
details.what summary::before{content:"? ";font-weight:600}
details.what p{margin:8px 0 0;font-size:13px;line-height:1.8;color:var(--ink-2)}

/* 表单 */
.form{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:20px 22px;margin-top:18px}
.condrow{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:10px}
select,input[type=text],input[type=number]{font:400 14px/1.5 var(--sans);color:var(--ink);
  background:var(--paper);border:1px solid var(--line);border-radius:6px;padding:7px 10px}
select:focus,input:focus{border-color:var(--brand);outline:none}
.condrow select.field{min-width:230px}
.condrow input{width:120px;font-family:var(--mono)}
.condrow .unit{font:400 12.5px/1 var(--mono);color:var(--ink-3);min-width:46px}
.formact{display:flex;gap:10px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line-soft)}
.echo{margin-top:18px;background:var(--card-2);border:1px solid var(--line);border-left:3px solid var(--brand);
  border-radius:0 10px 10px 0;padding:16px 20px}
.echo h3{font:600 14px/1.5 var(--sans)}
/* 序号只由模板的 forloop.counter 出，关掉 ol 自带 marker，否则渲染成「1. 1. ……」。
   不反过来删模板里的序号：display:grid 的 ol 各浏览器要不要画 marker 并不一致，
   留一个确定的来源比依赖 marker 稳。 */
.echo ol{margin-top:10px;display:grid;gap:6px;list-style:none;padding-left:0}
.echo li{font:400 13.5px/1.7 var(--mono);color:var(--ink-2)}
.echo .none{margin-top:8px;font-size:13.5px;color:var(--ink-2)}
.warn{margin-top:12px;font-size:13.5px;color:var(--accent);background:var(--accent-wash);
  border-radius:6px;padding:8px 12px}

.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.chip{display:inline-flex;align-items:center;padding:5px 12px;border-radius:6px;font:400 13px/1.5 var(--sans);
  border:1px solid var(--line);color:var(--ink-2);background:var(--card)}
.chip:hover{border-color:var(--brand);color:var(--brand);text-decoration:none}
.chip.on{background:var(--brand-wash);border-color:var(--brand);color:var(--brand);font-weight:600}
.chipgroup{display:flex;flex-wrap:wrap;gap:14px;align-items:baseline;margin-top:14px}
.chipgroup .cl{font:500 12px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}

.dl{border-top:1px solid var(--line)}
.dl li{display:grid;grid-template-columns:190px 1fr;gap:22px;padding:15px 0;border-bottom:1px solid var(--line-soft)}
.dl .dk{font:500 13px/1.7 var(--sans);color:var(--ink-2)}
.dl .dv{font-size:14px;line-height:1.8;color:var(--ink-2)}
.limits li{position:relative;padding:9px 0 9px 22px;font-size:14.5px;line-height:1.8;color:var(--ink-2);
  border-bottom:1px solid var(--line-soft)}
.limits li::before{content:"—";position:absolute;left:0;color:var(--ink-3)}

@media (max-width:1000px){
  .cards{grid-template-columns:1fr 1fr}
  .flist{grid-template-columns:1fr 1fr}
  .grid3{grid-template-columns:1fr}
}
@media (max-width:900px){
  header.hero .shell{grid-template-columns:1fr;gap:44px;padding-top:56px;padding-bottom:60px}
  .metrics{grid-template-columns:1fr}
  .tl{grid-template-columns:1fr 1fr 1fr;row-gap:28px}
  .disc{grid-template-columns:1fr;gap:32px}
  .grid2{grid-template-columns:1fr}
  .toplinks{display:none}
}
@media (max-width:600px){
  .shell{padding:0 20px}
  main.page{padding:24px 20px 48px}
  .tl,.cards,.flist{grid-template-columns:1fr}
  .rules li,.dl li{grid-template-columns:1fr;gap:5px}
  section{padding:56px 0}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---- 小工具类：避免在模板里写内联样式 ---- */
.subcode{font-family:var(--mono);font-size:.6em;color:var(--ink-3);font-weight:400}
.fkey{font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.statnum{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:26px;color:var(--ink)}
.dim{color:var(--ink-3)}
.flabel{font-size:14px;color:var(--ink-2)}
.wrapcell{white-space:normal}
h3.sub{margin-top:30px;font:600 15px/1.6 var(--sans)}
.box .dl{margin-top:14px}
.box.spaced{margin-top:22px}
.dlbtn-note{font-family:var(--mono);font-size:12px;color:var(--ink-3);align-self:center}

/* logo 明暗两版切换（生产站用 body.dark 类，这里跟随 prefers-color-scheme / data-theme） */
.glyph{border-radius:7px;display:block}
.logo-dark{display:none}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .logo-light{display:none}
  :root:not([data-theme="light"]) .logo-dark{display:block}
}
:root[data-theme="dark"] .logo-light{display:none}
:root[data-theme="dark"] .logo-dark{display:block}

/* ---- /legal/ 三页：公开法律文本 ----
   原先继承 Internal base，左侧挂着「榜单筛选/策略介绍/历史回测/拟真记录」导航，
   与正文「不向公众展示榜单、策略、历史回测净值及拟真记录」矛盾，且会被搜索引擎收录。
   现改为继承 Public base，正文一字未动。 */
.legal{padding:56px 0 88px}
.legal .shell{max-width:860px}
.legal .eyebrow{display:block;margin-bottom:14px}
.legal h1{font:700 clamp(28px,4.4vw,38px)/1.24 var(--sans);letter-spacing:-.02em;margin:0 0 34px}
.legal h2{font:700 19px/1.5 var(--sans);margin:38px 0 14px;padding-left:13px;
  border-left:3px solid var(--brand)}
.legal h3{font:600 16px/1.6 var(--sans);margin:26px 0 10px}
.legal p{margin:12px 0;color:var(--ink-2)}
.legal strong{color:var(--ink);font-weight:600}
/* 缩进走 padding 而非 margin：裸 ol,ul 复位收进 .tl,.rules 之后，
   列表会拿到 UA 默认的 padding-inline-start:40px，与 margin 叠加会双重缩进。 */
.legal ul,.legal ol{margin:12px 0;padding-left:26px;color:var(--ink-2);list-style:revert}
.legal li{margin:6px 0}
.legal hr{border:0;border-top:1px solid var(--line);margin:34px 0}
.legal a{text-decoration:underline}
.legal code{font-family:var(--mono);font-size:.9em;background:var(--card-2);
  padding:1px 6px;border-radius:4px}
/* 三页各 1 张表、最多 3 列中文，普通表格布局窄屏会自己换行，够用。
   不要加 display:block + overflow-x:auto——那会让表格脱离表格盒模型，
   按 max-content 撑宽，桌面端凭空多出一条横向滚动条。 */
.legal table{border-collapse:collapse;width:100%;margin:18px 0;font-size:14px;
  table-layout:fixed}
/* white-space 必须显式写回 normal：上面第 188 行的裸选择器 th,td{...white-space:nowrap}
   是给 Preview 数据表写的，会全局命中 legal 的散文表格，390px 下把页面撑出横向滚动。 */
.legal th,.legal td{border:1px solid var(--line);padding:9px 12px;text-align:left;
  vertical-align:top;white-space:normal;overflow-wrap:anywhere}
.legal th{background:var(--card-2);font-weight:600;color:var(--ink)}
.legal td{color:var(--ink-2)}

/* ---------------------------------------------------------------------------
   个股因子数据页（/stock/）
   合规基调：**中性呈现**。因子取值与分位一律用同一套中性色，绝不按数值高低变色，
   也不加「优/良/差」一类标签——颜色本身就是判断，红绿标优劣等于给出倾向性结论。
   唯一用到涨红跌绿的是「当日涨跌幅」与 K 线：那是价格涨跌的行情惯例，不是评价。
   --------------------------------------------------------------------------- */
.stockpage{padding:40px 0 64px}
.stockpage h1{font-size:30px;letter-spacing:-.01em;margin:6px 0 10px}
.stockpage .lede{color:var(--ink-2);max-width:62ch;line-height:1.75;margin-bottom:22px}
.ssearch{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 26px}
.ssearch input{flex:1 1 320px;min-width:0;font:inherit;color:var(--ink);
  padding:11px 14px;border:1px solid var(--line);border-radius:9px;background:var(--surface)}
/* 聚焦只留边框这一圈（--brand，与全站 :focus-visible、首页 .btn.ghost:hover 同色）。
   原先 outline 2px + offset 1px 会在边框外再套一圈，视觉上是粗细两圈，去掉外圈。
   原先颜色用 --accent（#B5710A 橙）是本页孤例，站内没有第二处这么用 */
.ssearch input:focus{outline:none;border-color:var(--brand)}
.snote{color:var(--ink-2);font-size:14px;line-height:1.75;margin:0 0 16px}
.snote.neutral{background:var(--surface-2,rgba(127,127,127,.06));border:1px solid var(--line);
  border-radius:9px;padding:12px 14px}

.shead{margin:6px 0 14px}
.sname{font-size:24px;font-weight:700;letter-spacing:-.01em}
.stag{font-size:12px;font-weight:600;padding:1px 7px;border-radius:5px;
  border:1px solid var(--line);color:var(--ink-2);vertical-align:3px}
.smeta{color:var(--ink-2);font-size:14px;margin-top:4px}
.smeta .dot{margin:0 8px;opacity:.5}
.sstrip{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  border:1px solid var(--line);border-radius:11px;overflow:hidden;margin-bottom:30px}
.sstrip .cell{padding:14px 16px;border-right:1px solid var(--line)}
.sstrip .cell:last-child{border-right:0}
.sstrip .k{font-size:12.5px;color:var(--ink-2)}
.sstrip .v{font-size:21px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.sstrip .v.up{color:#E5484D}          /* 行情惯例，仅用于价格涨跌 */
.sstrip .v.dn{color:#2A9D6F}
.sech{font-size:19px;margin:30px 0 8px}
.kchart{height:340px;border:1px solid var(--line);border-radius:11px;padding:8px;margin-bottom:8px}

.fgroup{margin:22px 0 0}
.fgroup>h3{font-size:15px;color:var(--ink-2);font-weight:600;margin:0 0 10px;
  padding-bottom:6px;border-bottom:1px solid var(--line)}
.fcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.fcard{border:1px solid var(--line);border-radius:11px;padding:14px 15px;background:var(--surface)}
.fhead{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.fname{font-weight:600;font-size:14.5px}
.fwhat{font-size:12px;color:var(--ink-2)}
.fwhat summary{cursor:pointer;list-style:none;white-space:nowrap;
  padding:6px 2px;margin:-6px 0}      /* 触控区靠 padding 撑开，行盒不变高 */
.fwhat summary::-webkit-details-marker{display:none}
.fwhat summary:hover{color:var(--accent)}
.fwhat p{margin:8px 0 0;line-height:1.7;color:var(--ink-2)}
.fval{font-size:22px;font-weight:700;margin:8px 0 10px;font-variant-numeric:tabular-nums}
.fval.na{color:var(--ink-2);font-weight:500}
.freason{font-size:12.5px;color:var(--ink-2);line-height:1.6}
.fpct{margin:0;font-size:12.5px;color:var(--ink-2)}
.fpct>div{display:flex;align-items:center;gap:8px;margin-top:6px}
.fpct dt{flex:0 0 72px}
.fpct dd{margin:0;flex:1;display:flex;align-items:center;gap:8px;min-width:0}
.fpct .pv{font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink);
  flex:0 0 40px;text-align:right}
/* 分位条：**固定中性色，不随数值变化**。做成渐变或高分变绿就是在给判断 */
.fpct .bar{flex:1;height:5px;border-radius:3px;background:var(--line);
  overflow:hidden;min-width:40px}
.fpct .bar i{display:block;height:100%;background:var(--ink-2);opacity:.55}
.warnsmall{flex:0 0 auto;font-size:11.5px;color:var(--ink-2);
  border:1px solid var(--line);border-radius:5px;padding:0 6px;white-space:nowrap}

.fnote{margin:30px 0 0;padding:16px 18px;border:1px solid var(--line);border-radius:11px}
.fnote p{margin:0 0 10px;font-size:13px;line-height:1.8;color:var(--ink-2)}
.fnote p:last-child{margin-bottom:0}
.fnote .disc{padding-top:10px;border-top:1px solid var(--line)}

@media (max-width:768px), (pointer:coarse){
  .ssearch input{min-height:44px}
  .fwhat summary{min-height:44px;display:flex;align-items:center}
  .fcards{grid-template-columns:1fr}
  .kchart{height:280px}
  .condrow select,.condrow input{min-height:44px}
  /* 因子研究页的选择器（因子/窗口/分组数），默认 32px 高在触屏上点不准 */
  .chip{min-height:44px}
}

/* K 线缩放按钮。右端固定在最新交易日，见模板里的 kZoom */
.kwrap{position:relative}
.kwrap .zoom-bar{position:absolute;right:14px;top:10px;z-index:5;display:flex;gap:4px}
.kwrap .zoom-bar button{cursor:pointer;width:28px;height:28px;line-height:1;
  font:16px/1 var(--mono,monospace);border:1px solid var(--line);border-radius:6px;
  background:var(--surface);color:var(--ink-2);display:flex;align-items:center;justify-content:center}
.kwrap .zoom-bar button:hover{color:var(--accent);border-color:var(--accent)}
@media (max-width:768px), (pointer:coarse){
  .kwrap .zoom-bar button{width:44px;height:44px;font-size:18px}
}
