/* A股审核雷达 样式 v022 —— IPO 子导航 + 表格列丰富 + 紧凑风格
   v022：行首 ▸（单行展开 8 节点日期带）与「全部展开 = 表格加 7 列（含终止日）」双模式共存；
         expand-all 下 ▸ 列与行内日期带隐藏，避免与新列重复；
         高级搜索日期控件包进 .dc-box 组（节点×区间绑定为一条条件，缺项提示 .dc-state）。
   v021：在审进展分布图为纯展示（无点击筛选 / 无浮起数字 / 段等高）；
         「在审进展」筛选栏仅阶段=在审/全部 时显示。 */
* { box-sizing: border-box; margin: 0; padding: 0; }
:root {
  --bg: #f4f6fa; --card: #fff; --line: #e4e9f2; --text: #24303f;
  --mut: #7a8699; --blue: #2f6fed; --blue-bg: #e8f0ff;
  --green: #16a34a; --green-bg: #e6f6ec; --gray: #8b96a8; --gray-bg: #eef1f5;
  --amber: #d97706; --amber-bg: #fdf1df; --red: #dc2626; --red-bg: #fdeaea;
}
body { background: var(--bg); color: var(--text);
  font: 13px/1.5 -apple-system, "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; }
.wrap { max-width: 1280px; margin: 0 auto; padding: 0 16px; }

/* 顶栏 */
.topbar { background: linear-gradient(120deg, #16325c, #1f4e96); color: #fff; }
.topbar-inner { display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px; flex-wrap: wrap; gap: 8px; }
.brand h1 { font-size: 20px; letter-spacing: 1px; }
.badge { font-size: 11px; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4);
  border-radius: 4px; padding: 1px 7px; margin-left: 6px; vertical-align: 3px; }
.sub { font-size: 11px; opacity: .82; margin-top: 2px; }
.meta { font-size: 11px; text-align: right; opacity: .92; line-height: 1.65; }
.meta b { font-size: 13px; }

/* 卡片 */
.card { background: var(--card); border: 1px solid var(--line); border-radius: 10px;
  padding: 12px 14px; margin: 12px 0; box-shadow: 0 1px 3px rgba(20,40,80,.05); }
.card-head { display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 10px; flex-wrap: wrap; gap: 8px; }
.card-head h2 { font-size: 15px; }
.count { color: var(--mut); font-weight: 400; font-size: 12px; margin-left: 4px; }
.head-actions { display: inline-flex; gap: 6px; }

/* v013 一级标签：业务类型（原“板块”，放大为一级） */
.tabs-type { display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  padding: 10px 14px; margin: 12px 0 0; border-radius: 12px; }
.tabs-type .k { font-size: 14px; color: var(--blue); font-weight: 700;
  border-left: 3px solid var(--blue); padding-left: 8px; margin-right: 2px; flex-shrink: 0; }
.tabs-type button { border: 1px solid var(--line); background: #fff; color: var(--text);
  border-radius: 9px; padding: 8px 24px; font-size: 16px; cursor: pointer; transition: all .12s; }
.tabs-type button:hover { border-color: var(--blue); color: var(--blue); }
.tabs-type button.on { background: var(--blue); border-color: var(--blue); color: #fff;
  font-weight: 600; box-shadow: 0 2px 6px rgba(47,111,237,.25); }
.tabs-type button.all { color: var(--mut); }
.tabs-type button.all.on { color: #fff; }
/* v050：「辅导备案」外链入口 —— 青绿异色区分本站类型按钮，新窗口打开 */
.tabs-type a.biz-ext { border: 1px dashed #0d9488; background: #f0fdfa;
  color: #0d9488; border-radius: 9px; padding: 8px 24px; font-size: 16px;
  text-decoration: none; cursor: pointer; transition: all .12s; }
.tabs-type a.biz-ext:hover { background: #0d9488; border-color: #0d9488; color: #fff; }

/* ===== v013：维度筛选标签（交易所多选/板块多选/阶段单选）+ 大盘 + 横条 ===== */
.dims-card { padding: 10px 14px 12px; margin-top: 0; border-radius: 12px; }
.dims { display: flex; flex-direction: column; gap: 2px; padding: 2px 2px 8px;
  border-bottom: 1px dashed var(--line); }
.dim { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; padding: 3px 0; }
.dim .dk { font-size: 12px; color: var(--mut); font-weight: 600; width: 64px; flex-shrink: 0; }
.tags { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.tch { display: inline-flex; align-items: baseline; gap: 3px; border: 1px solid var(--line);
  background: #fff; border-radius: 14px; padding: 3px 12px; font-size: 12.5px; color: #40506b;
  cursor: pointer; transition: all .1s; line-height: 1.5; font-family: inherit; }
.tch .n { font-size: 10.5px; color: var(--mut); font-weight: 400; font-variant-numeric: tabular-nums; }
.tch:hover { border-color: var(--blue); color: var(--blue); }
.tch:hover .n { color: var(--blue); }
.tch.on { background: var(--blue); border-color: var(--blue); color: #fff; font-weight: 600; }
.tch.on .n { color: rgba(255,255,255,.85); }
.tch.all { color: var(--mut); }
.tch.all.on { background: #24303f; border-color: #24303f; color: #fff; font-weight: 600; }
/* 阶段标签语义色（已上市/已注册=绿、已终止/终止=灰、中止=琥珀） */
#stTags .tch[data-v="已上市"].on,
#stTags .tch[data-v="已注册"].on { background: var(--green); border-color: var(--green); }
#stTags .tch[data-v="已终止"].on,
#stTags .tch[data-v="终止"].on { background: #8b96a8; border-color: #8b96a8; }
#stTags .tch[data-v="中止"].on { background: var(--amber); border-color: var(--amber); }

/* v021：在审进展分布横向图（#progBarWrap 由 renderProgBar 渲染） —— 纯展示控件。
   段 = 等高纯色条（无浮起数字、无点击筛选），仅作为视觉分布；
   数字/百分比全部集中到下方图例，方便阅读。 */
#progBarWrap { margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--line); }
.pb-title { font-size: 13px; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.pb-title .muted { font-weight: 400; color: var(--mut); font-size: 11px; margin-left: 4px; }
.pb-track { display: flex; align-items: stretch; height: 16px; border-radius: 6px;
  overflow: hidden; border: 1px solid var(--line); background: #f1f4f9; }
.pb-col { display: block; min-width: 1px; cursor: default; transition: filter .12s; }
.pb-col:first-child { border-radius: 5px 0 0 5px; }
.pb-col:last-child { border-radius: 0 5px 5px 0; }
.pb-col:only-child { border-radius: 5px; }
.pb-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 7px;
  font-size: 11.5px; color: var(--mut); line-height: 1.5; }
.pb-legend span { white-space: nowrap; cursor: default; display: inline-flex; align-items: baseline; gap: 3px; }
.pb-legend i { display: inline-block; width: 9px; height: 9px; border-radius: 2px;
  margin-right: 4px; flex-shrink: 0; }
.pb-legend b { color: var(--text); font-variant-numeric: tabular-nums; font-weight: 600; }
.pb-legend em { font-style: normal; color: var(--mut); font-variant-numeric: tabular-nums;
  font-size: 10.5px; }
.pb-legend em.legend-pause { color: var(--amber); }

/* 无在审提示 */
.pb-empty { color: var(--mut); font-size: 12px; padding: 8px 0; }

/* IPO 子导航（次级 tab） */
.subnav { display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  padding: 6px 14px 8px 14px; margin: -4px 0 0 0; }
.subnav .k { font-size: 12px; color: var(--blue); font-weight: 600;
  border-left: 3px solid var(--blue); padding-left: 8px; margin-right: 2px; flex-shrink: 0; }
.subnav button { border: 1px solid transparent; background: transparent; color: var(--mut);
  border-radius: 6px; padding: 4px 12px; font-size: 13px; cursor: pointer; }
.subnav button:hover { background: var(--blue-bg); color: var(--blue); }
.subnav button.on { background: var(--blue-bg); color: var(--blue); font-weight: 600; }

/* 大盘（v014：IPO 3 卡 / 非 IPO 4 卡 + 交易所×阶段 wide；v017 紧凑优化；
   v019：删除大盘统计卡（数据已整合进档位 chips）） */
.dash { display: grid; gap: 8px; margin-top: 10px; }
.dash-3 { grid-template-columns: repeat(3, 1fr); }
.dash-4 { grid-template-columns: repeat(4, 1fr); }
.dash-5 { grid-template-columns: repeat(4, 1fr) 1.9fr; }
.stat { background: var(--card); border: 1px solid var(--line); border-radius: 10px;
  padding: 8px 12px; display: flex; align-items: baseline; gap: 8px; min-height: 48px; }
.stat .num { font-size: 19px; font-weight: 700; line-height: 1.2;
  font-variant-numeric: tabular-nums; flex-shrink: 0; }
.stat .lab { font-size: 12px; color: var(--mut); line-height: 1.3; }
.stat .sub { display: block; font-size: 10.5px; color: var(--mut); margin-top: 1px; }
.stat.s-in  { border-top: 3px solid var(--blue); }  .stat.s-in .num { color: var(--blue); }
.stat.s-done{ border-top: 3px solid var(--green); } .stat.s-done .num { color: var(--green); }
.stat.s-fail{ border-top: 3px solid var(--gray); }  .stat.s-fail .num { color: var(--gray); }
.stat.s-pause{ border-top: 3px solid var(--amber); } .stat.s-pause .num { color: var(--amber); }
/* v020：在审进展标签行 = 普通 .tch chips（同交易所/阶段行样式，选中统一蓝。
   v019 的 .prog5-chip 卡片（分布图塞进标签）已废除，分布图拆回下方 renderProgBar；
   里程碑语义色由 表格行 chip / 横条图例 表达，此处不逐档配色。 */
.tch.inert { opacity: .45; }
.tch.inert:hover { opacity: .75; }
/* v017：表格中批文到期终止醒目样式（红底） */
.term-expired { background: var(--red-bg); color: var(--red); font-weight: 600;
  padding: 1px 6px; border-radius: 4px; font-size: 12px; }
/* v020：券商标签维度（第 4 行）：无记录灰置不可点 / 第 6 位可点击弹窗单选 */
.sp-off { opacity: .45; cursor: not-allowed; color: var(--mut); }
/* v019：第 6 位可点击（弹出弹窗选择其他券商），去掉 dashed，改成可点选样式 */
.sp-more-click { color: var(--mut); border-style: dashed; cursor: pointer; }
.sp-more-click:hover { color: var(--blue); border-color: var(--blue); border-style: solid; }
.sp-more-click.on { background: #24303f; border-color: #24303f; color: #fff; font-weight: 600; }
/* v019：其他券商弹窗 */
.sp-modal { position: fixed; inset: 0; background: rgba(36, 48, 63, .42);
  display: flex; align-items: center; justify-content: center; z-index: 1000; }
.sp-modal .sp-card { background: #fff; border-radius: 10px; padding: 16px 18px;
  width: 540px; max-width: 92vw; max-height: 78vh; box-shadow: 0 12px 40px rgba(20,40,80,.18);
  display: flex; flex-direction: column; }
.sp-modal .sp-card h3 { font-size: 14px; margin-bottom: 10px; color: var(--text); }
.sp-modal .sp-hint { font-size: 11px; color: var(--mut); font-weight: 400; margin-left: 6px; }
.sp-modal .sp-search { width: 100%; padding: 5px 10px; border: 1px solid var(--line);
  border-radius: 6px; font-size: 12px; margin-bottom: 8px; outline: none; }
.sp-modal .sp-list { flex: 1; overflow: auto; border-top: 1px dashed var(--line);
  border-bottom: 1px dashed var(--line); padding: 4px 0; min-height: 220px; }
.sp-modal .sp-item { display: flex; align-items: center; justify-content: space-between;
  padding: 5px 8px; border-radius: 5px; cursor: pointer; font-size: 12.5px; }
.sp-modal .sp-item:hover { background: var(--blue-bg); }
.sp-modal .sp-item .sp-name { color: var(--text); font-weight: 500; }
.sp-modal .sp-item .sp-n { color: var(--mut); font-variant-numeric: tabular-nums; font-size: 11.5px; }
.sp-modal .sp-item.sel { background: var(--blue-bg); color: var(--blue); }
.sp-modal .sp-item.sel .sp-name { color: var(--blue); font-weight: 600; }
/* v020：阶段非「在审」时在审进展 chips 置灰（点击即自动切到在审） */
.prog-note { font-size: 11px; color: var(--mut); margin-left: 2px; white-space: nowrap; align-self: center; }
/* v022：单行展开（行首 ▸ 按钮 + .xrow 8 节点日期带，v018 方案恢复）。
   「全部展开」= 表格加列时 ▸ 列/行内带隐藏，两种模式互不重复。 */
/* v039：▸ 展开按钮已内嵌到公司列，xp-th/xp 列废弃；seq 列宽度由下方 v040 统一控制 */
td.seq { text-align: center; color: var(--mut); font-variant-numeric: tabular-nums; font-size: 12px; }
.xp-btn { border: 1px solid var(--line); background: #f8fafd; color: var(--mut); cursor: pointer;
  border-radius: 5px; width: 22px; height: 22px; line-height: 1; font-size: 12px;
  transition: transform .12s, color .12s; }
.xp-btn-inline { display: inline-flex; align-items: center; justify-content: center;
  vertical-align: middle; margin-left: 4px; width: 18px; height: 18px; font-size: 10px; }
.xp-btn:hover { color: var(--blue); border-color: var(--blue); }
.xp-btn.open { transform: rotate(90deg); color: var(--blue); border-color: var(--blue); background: var(--blue-bg); }
tr.xrow td { background: #fbfcfe; border-bottom: 1px dashed var(--line); }
tr.xrow td:hover { background: #fbfcfe; }
tr.xrow .xp-grid { display: flex; flex-wrap: wrap; gap: 6px 4px; padding: 2px 0 4px; }
tr.xrow .xp-cell { display: inline-flex; flex-direction: column; align-items: flex-start;
  background: #fff; border: 1px solid var(--line); border-radius: 6px; padding: 3px 10px; min-width: 86px; }
tr.xrow .xp-k { font-size: 10px; color: var(--mut); }
tr.xrow .xp-v { font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--text); }
/* v096：展开行内「实际募资」块（拟募集/总额/净额/超募率），与主日期块视觉分隔 */
/* v101：行内募资块撤除（募资信息上主表列），相关样式一并移除 */
/* v022：表格 7 列节点日期（问询/上会/提交注册/注册生效/发行/上市/终止）默认隐藏，
   「全部展开」切换 #projTbl.expand-all class 显隐；同时隐藏 ▸ 列与 .xrow 行内带。 */
.tbl th.date-extra, .tbl td.date-extra { display: none; }
#projTbl.expand-all th.date-extra,
#projTbl.expand-all td.date-extra { display: table-cell; }
#projTbl.expand-all .xp-btn-inline,
#projTbl.expand-all tr.xrow { display: none; }
.date-sep { color: var(--mut); font-size: 12px; }
/* v032：关键节点日期筛选行常驻（原在高级搜索内，IPO 板块默认可见） */
.kd-row { margin-bottom: 8px; }
/* v033：年 / 月 / 日 三段输入 + 🗓 日历按钮（.dm-pick 为原生 date，透明叠放仅供 showPicker 调用） */
.dm { position: relative; display: inline-flex; align-items: center; gap: 1px;
  border: 1px solid var(--line); border-radius: 6px; background: #fff; padding: 1px 3px 1px 5px; }
.dm:focus-within { border-color: var(--blue); box-shadow: 0 0 0 2px var(--blue-bg); }
/* 提高特异性：压过 `.filters select, .filters input` 的通用边框/底色 */
.dc-box .dm input { border: 0; background: transparent; text-align: center; padding: 2px 0;
  font-size: 12px; color: var(--text); font-variant-numeric: tabular-nums; outline: none; min-width: 0; }
.dc-box .dm input.dm-y { width: 38px; }
.dc-box .dm input.dm-m, .dc-box .dm input.dm-d { width: 22px; }
.dc-box .dm input::placeholder { color: #b7c0ce; font-weight: 400; }
.dm .dm-sep { color: var(--mut); font-size: 12px; }
.dm .dm-cal { border: 0; background: transparent; cursor: pointer; font-size: 12px;
  line-height: 1; padding: 3px 2px; border-radius: 4px; }
.dm .dm-cal:hover { background: var(--blue-bg); }
.dm .dm-pick { position: absolute; right: 0; top: 0; width: 22px; height: 100%;
  opacity: 0; border: 0; padding: 0; margin: 0; pointer-events: none; }
.kd-quick { display: inline-flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.kd-quick .kd-qk { font-size: 11px; color: var(--mut); white-space: nowrap; }
.qchip { border: 1px solid var(--line); background: #fff; border-radius: 999px;
  padding: 3px 10px; font-size: 11.5px; color: var(--text); cursor: pointer;
  line-height: 1.45; white-space: nowrap; }
.qchip:hover { color: var(--blue); border-color: var(--blue); }
.qchip.on { color: var(--blue); border-color: var(--blue); background: var(--blue-bg); font-weight: 600; }
/* 未选关键节点却点了快捷区间 → 下拉闪烁提醒（不擅自替用户选节点） */
#fDateType.flash { animation: kd-flash 1.1s ease; }
@keyframes kd-flash {
  0%, 100% { border-color: var(--line); box-shadow: none; }
  25%, 75% { border-color: var(--amber); box-shadow: 0 0 0 3px var(--amber-bg); }
}
.filters input[type="date"] { padding: 3px 6px; }
#advPanel select, #advPanel input[type="date"] { max-width: 168px; }
/* v022：高级搜索「节点达成日 ∈ 区间」条件组 —— 边框分组让 节点+区间 视觉一体 */
.dc-box { display: inline-flex; align-items: center; gap: 5px;
  border: 1px solid var(--line); background: #fbfcfe; border-radius: 6px;
  padding: 2px 8px 2px 5px; flex-wrap: nowrap; }
.dc-box .dc-txt { font-size: 11px; color: var(--mut); white-space: nowrap; }
.dc-box select, .dc-box input { border-color: transparent; background: transparent; }
.dc-box select:focus, .dc-box input:focus { border-color: var(--blue); background: #fff; }
/* v049：撤 300px 截断 —— 「未选关键节点，已自动按「更新日」筛选」等提示完整显示
   （nowrap 保留，过长时由 .kd-row flex-wrap 整体换行） */
.dc-state { font-size: 11px; white-space: nowrap; flex-shrink: 0; }
.dc-state:empty { display: none; }
.dc-state.ok { color: var(--green); font-weight: 600; }
.dc-state.warn { color: var(--amber); font-weight: 600; }
/* v020：筛选栏「在审进展」Excel 式下拉（#fProgSel） */
.fpop { position: relative; display: inline-flex; align-items: center; }
.fpop-btn { display: inline-flex; align-items: center; gap: 5px; border: 1px solid var(--line);
  background: #fff; border-radius: 6px; padding: 4px 10px; font-size: 12px; color: var(--text);
  cursor: pointer; line-height: 1.4; white-space: nowrap; }
.fpop-btn:hover { border-color: var(--blue); color: var(--blue); }
.fpop-btn.active { color: var(--blue); border-color: var(--blue); background: var(--blue-bg); font-weight: 600; }
.fpop-btn .fb-caret { font-size: 9px; color: var(--mut); transition: transform .12s; }
.fpop-btn.open .fb-caret { transform: rotate(180deg); color: var(--blue); }
.fpop-panel { position: absolute; top: calc(100% + 5px); left: 0; z-index: 60;
  min-width: 264px; max-width: 320px; background: #fff; border: 1px solid var(--line);
  border-radius: 8px; box-shadow: 0 10px 30px rgba(20,40,80,.16); padding: 6px 8px 7px; }
.fpop-item { display: flex; align-items: center; gap: 6px; padding: 3px 5px;
  border-radius: 5px; cursor: pointer; font-size: 12px; color: var(--text); line-height: 1.5; }
.fpop-item:hover { background: var(--blue-bg); }
.fpop-item input { margin: 0; cursor: pointer; accent-color: var(--blue); flex-shrink: 0; }
.fpop-item .fp-lab { flex: 1; min-width: 0; }
.fpop-item .fp-n { font-size: 10.5px; color: var(--mut); font-variant-numeric: tabular-nums; flex-shrink: 0; }
.fpop-item.on .fp-lab { color: var(--blue); font-weight: 600; }
.fpop-master { border-bottom: 1px dashed var(--line); margin-bottom: 4px;
  padding-bottom: 5px; color: var(--mut); }
.fpop-list { max-height: 252px; overflow: auto; }
.fpop-foot { margin-top: 5px; padding-top: 5px; border-top: 1px dashed var(--line);
  font-size: 11px; color: var(--mut); max-height: 40px; overflow: auto; line-height: 1.5; }
.stat-wide { grid-column: span 1; }
.bar-row { display: flex; align-items: center; gap: 8px; font-size: 11px; margin: 4px 0; }
.bar-row .k { width: 50px; color: var(--mut); flex-shrink: 0; }
.bar-row .bar { flex: 1; background: var(--gray-bg); border-radius: 4px; height: 10px; overflow: hidden; }
.bar-row .fill { height: 100%; background: linear-gradient(90deg, #3b82f6, #60a5fa); border-radius: 4px; }
.bar-row .v { width: 56px; text-align: right; color: var(--mut); font-variant-numeric: tabular-nums; }
.chip { display: inline-block; padding: 0 7px; border-radius: 10px; font-size: 11px;
  background: var(--gray-bg); color: var(--mut); white-space: nowrap; }
.stg-在审 { background: var(--blue-bg); color: var(--blue); font-weight: 600; }
.stg-已注册 { background: var(--green-bg); color: var(--green); font-weight: 600; }
.stg-终止 { background: var(--gray-bg); color: var(--gray); }
.stg-中止 { background: var(--amber-bg); color: var(--amber); }
.stg-其他 { background: var(--gray-bg); color: var(--gray); }
.iss-live { background: var(--amber-bg); color: var(--amber); font-weight: 600; }
.iss-upcoming { background: var(--blue-bg); color: var(--blue); font-weight: 600; }
.iss-date { display: block; font-size: 10px; color: var(--mut); font-weight: 400; line-height: 1.3; margin-top: 1px; }
.iss-wait { font-size: 10px; color: var(--mut); }

/* 变更 */
.seg { display: inline-flex; border: 1px solid var(--line); border-radius: 6px; overflow: hidden; }
.seg button { border: 0; background: #fff; padding: 4px 12px; font-size: 12px; cursor: pointer; color: var(--mut); }
.seg button.on { background: var(--blue); color: #fff; }
.chg-list { max-height: 440px; overflow: auto; }
.chg-item { display: flex; gap: 10px; padding: 7px 4px; border-bottom: 1px dashed var(--line); align-items: baseline; }
.chg-item:last-child { border-bottom: 0; }
.chg-t { width: 84px; font-size: 11px; color: var(--mut); flex-shrink: 0; font-variant-numeric: tabular-nums; }
.chg-body { flex: 1; min-width: 0; }
.chg-main { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; }
.chg-co { font-weight: 600; font-size: 13px; }
.chg-flag { font-size: 11px; border-radius: 4px; padding: 0 6px; }
.flag-new { background: var(--blue-bg); color: var(--blue); }
.flag-chg { background: var(--green-bg); color: var(--green); }
.flag-info { background: var(--amber-bg); color: var(--amber); }
.chg-detail { font-size: 11px; color: var(--mut); margin-top: 1px; }
.arr { color: var(--mut); margin: 0 3px; }
.empty { color: var(--mut); text-align: center; padding: 24px 0; font-size: 12px; }
.fold { margin-top: 8px; }
.fold summary { cursor: pointer; font-size: 12px; color: var(--mut); user-select: none; }
.fold-row { font-size: 11px; color: var(--mut); padding: 2px 0 0 8px; }

/* 筛选 */
.filters { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; align-items: center; }
.filters.adv { padding-top: 6px; border-top: 1px dashed var(--line); margin-top: 4px; }
.filters select, .filters input { border: 1px solid var(--line); border-radius: 6px; background: #fff;
  padding: 4px 8px; font-size: 12px; color: var(--text); outline: none; min-width: 0; }
.filters select:focus, .filters input:focus { border-color: var(--blue); }
#fQ { flex: 1; min-width: 180px; }
.btn-minor { border: 1px solid var(--line); background: #fff; border-radius: 6px; padding: 3px 10px;
  font-size: 12px; color: var(--mut); cursor: pointer; }
.btn-minor:hover { color: var(--blue); border-color: var(--blue); }
.btn-minor.active { color: var(--blue); border-color: var(--blue); background: var(--blue-bg); }
/* v049：清除筛选按钮醒目化（琥珀实底，激活筛选时一眼可见） */
#resetFilters { background: var(--amber); border-color: var(--amber); color: #fff;
  font-weight: 600; }
#resetFilters:hover { background: #c26a00; border-color: #c26a00; color: #fff; }

/* 表格 */
.tbl-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 8px; }
/* v051：width:100% 让 table-layout:fixed 真正生效（width:auto 时浏览器回退
   自动布局，nowrap 长机构名把列撑爆 → 横向滚动）。列宽全由 th 定义接管。 */
.tbl { width: 100%; border-collapse: collapse; table-layout: fixed; min-width: 960px; }
/* v022：完整展开时表格新增 7 列节点日期（含终止日，每列 ~96px），触发横向滚动 */
#projTbl.expand-all { width: 1760px; min-width: 1760px; }
.tbl th { background: #f8fafd; font-size: 12px; color: var(--mut); font-weight: 500;
  padding: 6px 3px; text-align: center; border-bottom: 1px solid var(--line); white-space: nowrap; }
.tbl th.th-sort { cursor: pointer; user-select: none; }
.tbl th.th-sort:hover { color: var(--blue); }
.tbl th.th-sort.on { color: var(--blue); font-weight: 600; }
/* 排序箭头：默认上下双三角灰显（可排），激活方向高亮蓝、另一支淡化 */
.tbl th .arr { display: inline-block; position: relative; width: 9px; height: 13px;
  margin-left: 3px; vertical-align: -2px; }
.tbl th .arr i { position: absolute; left: 0; font-style: normal; font-size: 8px;
  line-height: 1; color: #c6ceda; }
.tbl th .arr i.u { top: 0; }
.tbl th .arr i.d { bottom: 0; }
.tbl th.th-sort:hover .arr i { color: #9aa7b8; }
.tbl th.th-sort.on .arr i { color: #d9dfe8; }
.tbl th.th-sort.on.asc .arr i.u { color: var(--blue); }
.tbl th.th-sort.on.desc .arr i.d { color: var(--blue); }
/* v051：fixed 布局下溢出内容必须裁切才能保住列宽 —— 统一省略号，
   机构列由 .ml 逐家截断、其余单元格整格截断（全称均在 title 悬停可见） */
.tbl td { padding: 4px 3px; text-align: center; border-bottom: 1px solid #f1f4f9; font-size: 12px;
  white-space: nowrap; vertical-align: middle; overflow: hidden; text-overflow: ellipsis; }
/* v051：机构换行单元格内每家机构独立截断 */
.tbl td .ml { display: inline-block; max-width: 100%; overflow: hidden;
  text-overflow: ellipsis; vertical-align: bottom; }
.tbl tr:hover td { background: #f6f9ff; }
.ta-l { text-align: left !important; }
.ta-r { text-align: right !important; font-variant-numeric: tabular-nums; }
.co { font-weight: 600; }
/* v061：公司列改 flex —— a 链接占满剩余空间，▸ 按钮 / pre-review / reorg-tag
   贴最右；解决「链接 150px + 按钮 22px 都靠左，余 ~35px 空白」造成的「公司-交易所中间很宽」观感。
   原 max-width:150px 也去除，让链接可占用 td 内 ~159px（td 内宽 184 - 按钮 22 - gap 3 = 159px）。 */
/* v099：flex 从 td 下沉到内层 .co-in —— 直接在 td 上用 display:flex 会让该单元格
   脱离 table-cell 行为（高度塌成内容高 27px、vertical-align:middle 失效）。一旦同行
   其它列换行把行撑高（再融资「已终止 + 日期 + 撤回标签」占 3 行 → 行高 74px），公司名
   就被顶在行首、其余列垂直居中 → 两行错位。内层 flex 既保留 v061 想要的「链接撑满 +
   ▸ / pre-review / reorg-tag 贴最右」，又让 td 恢复垂直居中。 */
.tbl td.co { text-align: left; padding-left: 4px; padding-right: 4px; }
.tbl td.co .co-in { display: flex; align-items: center; gap: 3px; min-width: 0; }
.tbl td.co .td-new { flex-shrink: 0; }
.tbl td.co a { color: var(--blue); text-decoration: none; flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }
.tbl td.co a:hover { text-decoration: underline; }
.tbl td.co .xp-btn-inline { margin-left: 0; flex-shrink: 0; }
.tbl td.co .pre-review, .tbl td.co .reorg-tag { flex-shrink: 0; }
/* v040：表格紧凑化 —— 固定列宽 + 减小 padding，避免列间留白过多
   v051：整体再压缩（fixed 布局生效后列宽精确受控）
   v054：公司列回归定宽 216；日期列 80 完整显示 YYYY-MM-DD；序号 26
   v060：列宽重分配 —— 缩 公司 给关键列，让 上市进展（chip+日期2行）/
   板块（创业板 3 字）/ 保荐机构（双保荐同行换行） 等不再被挤；
   v060b：重组 15 列 比 IPO 13 列 多 2 列，proc/board.wide/st 三列再缩，
   保 1218 容器内可见（含 28 容器边距）：
   - proc 104→88 让「分类审核（深）」贴近不挤；
   - board.wide 76→68 「发股买资产」刚好；
   - st 56→48 三字 chip「无配套/未发行」不破边；
   - co 196→188，board 60→56 各减一点让重组右侧「更新日」不被截。 */
.tbl th.seq-th { width: 28px; }
.tbl th.co-th { width: 184px; }
.tbl td.seq { padding: 4px 2px; }
/* v060b：业务类型列（再融资 + 重组 tab 都有）专用宽度。
   再融资「特定对象发行」5 字 + 重组「发股买资产」4 字均需 70-76px，
   用独立 .biz-type 而非复用 .board，.board 留给 板块（3 字短文本）。
   （旧 .board.wide 76→68 调整为：v060b 改用独立 .biz-type 后 .wide 已停用）
   v060b：审核程序 proc 76→88 让重组布局整体收进 1218 容器；原「普通审核」4 字
   实际只需 60px，留余量到 88 也让「分类审核（深）」7 字舒服显示。
   v061：prog 100→132 给再融资 10 字 chip「已审核通过待提交注册」完整显示
   （chip 自带 padding 1*8*2=16px + 文字 11px*10 ≈ 110px ≈ 126px 总宽，
   列需 ≥130px 才不破；其他列各收 4px 平衡）。 */
.tbl th.ex { width: 52px; }
.tbl th.board { width: 56px; }
.tbl th.prog { width: 132px; }
.tbl th.reg-st { width: 92px; }
.tbl th.amt { width: 80px; }
.tbl th.sp { width: 82px; }
.tbl th.law { width: 76px; }
.tbl th.acct { width: 76px; }
.tbl th.region { width: 64px; }
.tbl th.dt { width: 80px; }
.tbl th.date-extra { width: 84px; }
.tbl th.biz-type { width: 76px; }
.tbl th.proc { width: 88px; }
/* v046：实施状态 / 配套状态 彩色标签列；v052 收到 52；
   v060b：56→48 给三字档位 chip「未发行/已到期/无配套」贴边但不破。 */
.tbl th.st { width: 48px; text-align: center; }
.st-b { display: inline-block; padding: 1px 8px; border-radius: 9px;
  font-size: 11px; white-space: nowrap; line-height: 1.7; }
.st-g { background: #E1F5EE; color: #0F6E56; }
.st-a { background: #FAEEDA; color: #854F0B; }
.st-c { background: #F5C4B3; color: #993C1D; }
.st-r { background: #FCEBEB; color: #A32D2D; }
.st-n { background: #F1EFE8; color: #888780; }
.td-new { background: var(--blue-bg); border-radius: 4px; padding: 1px 6px; display: inline-block;
  font-size: 11px; color: var(--blue); font-weight: 600; }
/* v012 IPO 上市进展 chip（按节点位置配色：从申请中→上市一路递进） */
.prog-过会前                 { background: var(--blue-bg);   color: var(--blue);   font-weight: 600; }
.prog-已过会待提交注册       { background: #ece6ff;          color: #5b34c4;        font-weight: 600; }
.prog-已提交注册待注册生效   { background: #dfe9ff;          color: #1f4ec0;        font-weight: 600; }
.prog-已注册待发行           { background: var(--amber-bg);  color: var(--amber);   font-weight: 600; }
.prog-已发行待上市           { background: #c8e8ff;          color: #0b66b8;        font-weight: 600; }
.prog-已上市                 { background: var(--green-bg);  color: var(--green);   font-weight: 600; }
.prog-已终止                 { background: var(--gray-bg);   color: var(--gray); }
.prog-中止暂停审核           { background: var(--amber-bg);  color: var(--amber); }
/* v031 再融资在审进展 chip（语义对应 IPO 五档配色） */
.prog-交易所审核中            { background: var(--blue-bg);   color: var(--blue);   font-weight: 600; }
.prog-已审核通过待提交注册    { background: #ece6ff;          color: #5b34c4;        font-weight: 600; }
/* v012 预先审阅标记（详情页标的"预先审阅"项目，目前上交所：长鑫/宇树 等） */
.tag-pr { background: #fff3e6; color: #d97706; border: 1px solid #fde2bf;
  font-size: 10px; padding: 0 5px; border-radius: 4px; margin-left: 4px;
  vertical-align: 1px; font-weight: 600; }
.prog-date { display: block; font-size: 10px; color: var(--mut); line-height: 1.3; margin-top: 1px; }
.pager { display: flex; gap: 8px; align-items: center; justify-content: center; margin-top: 10px; font-size: 12px; }
.pager button { border: 1px solid var(--line); background: #fff; border-radius: 6px; padding: 3px 12px; cursor: pointer; font-size: 12px; }
.pager button:disabled { opacity: .4; cursor: default; }
.pager span { color: var(--mut); }

.foot { margin: 20px 0 30px; text-align: center; color: var(--mut); font-size: 11px; }
.foot a { color: var(--blue); text-decoration: none; }

@media (max-width: 980px) {
  .dash-4, .dash-5 { grid-template-columns: repeat(2, 1fr); }
  .stat-wide { grid-column: span 2 !important; }
  .topbar-inner { flex-direction: column; align-items: flex-start; }
  .meta { text-align: left; }
  .tbl { min-width: 980px; }
}
/* v007: 再融资/重组 实施进度「未实施」chip */
.imp-wait { background: #eef1f6; color: #6b7688; font-weight: 600; }

/* ---------- v025 终止方式标签（登记状态列内） ---------- */
.term-kind{display:inline-block;margin-left:6px;padding:0 6px;border-radius:8px;
  font-size:11px;line-height:17px;vertical-align:1px;white-space:nowrap}
.tk-deny{background:rgba(220,38,38,.14);color:#dc2626}
.tk-expired{background:rgba(217,119,6,.16);color:#b45309}
.tk-over{background:rgba(139,150,168,.20);color:#64748b}
/* v090：非 IPO 行「终止原因」标签 —— 撤回（主动撤回，中性蓝，与被否的红区分） */
.tk-withdraw{background:rgba(37,99,235,.12);color:#1d4ed8}

/* ============ v062 时间穿越 ============ */
.asof-card { display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  padding: 8px 14px; margin-top: 12px; border-radius: 12px;
  border: 1px dashed var(--line); transition: border-color .15s, background .15s; }
.asof-card .asof-k { font-size: 13px; font-weight: 700; color: var(--mut); }
.asof-card input[type="date"] { border: 1px solid var(--line); border-radius: 6px;
  padding: 4px 8px; font: inherit; color: var(--text); background: #fff; }
.asof-card .asof-state { font-size: 12px; color: var(--mut); }
.asof-card .asof-date { color: var(--amber); font-size: 13px; }
.asof-card.on { border: 1px solid var(--amber); background: var(--amber-bg); }
.asof-card.on .asof-k { color: var(--amber); }
.asof-card.on .asof-state { color: var(--text); }
/* 顶栏穿越标记 */
.asof-tag { display: inline-block; margin-left: 8px; padding: 1px 8px;
  border-radius: 4px; background: rgba(217,119,6,.25); border: 1px solid rgba(255,200,120,.6);
  color: #ffd8a8; font-weight: 700; }

/* ============ v063 穿越栏紧凑化 + 色块标签 + 快捷按钮 ============ */
.asof-card { gap: 8px; padding: 6px 12px; margin-top: 8px;
  border: 1px solid #f0d9b5; }
.asof-card .asof-k { font-size: 12px; font-weight: 700; color: #fff;
  background: linear-gradient(135deg, #d97706, #ea8c1a);
  padding: 3px 12px; border-radius: 14px; letter-spacing: .5px;
  box-shadow: 0 1px 3px rgba(217,119,6,.3); }
.asof-card .asof-state { margin-right: auto; }
/* 快捷日期按钮 */
.asof-quick { display: flex; gap: 5px; }
.asof-quick button { border: 1px solid var(--line); background: #fff;
  color: var(--mut); border-radius: 6px; padding: 3px 10px;
  font: inherit; font-size: 12px; cursor: pointer; transition: all .12s; }
.asof-quick button:hover { border-color: var(--amber); color: var(--amber);
  background: var(--amber-bg); }
.asof-quick button.on { border-color: var(--amber); color: #fff;
  background: var(--amber); font-weight: 700; }
/* v063b: 穿越态标签保持白字（修正 v062 旧规则 amber-on-amber 对比度问题） */
.asof-card.on .asof-k { color: #fff; text-shadow: 0 1px 1px rgba(146,64,14,.35); }

/* ============ v064 穿越态全页定向染色（body.asof-on） ============ */
body.asof-on .card,
body.asof-on .stat { background: #fefaf0; border-color: #f3e8d2; }
body.asof-on .tbl th { background: #fbf4e4; border-bottom-color: #f3e8d2; }
body.asof-on .tbl td { border-bottom-color: #f6efe0; }
/* 穿越栏自身保持琥珀高亮（覆盖上面 .card 规则的米色底） */
body.asof-on .asof-card { background: var(--amber-bg); border-color: var(--amber); }
/* v067: 日期带终止日旁披露日小字 */
.xp-sub { font-size: 11px; color: var(--mut); }

/* v068: 穿越终止口径下拉 */
.asof-term { border: 1px solid var(--line); border-radius: 6px; padding: 3px 6px;
  font: inherit; font-size: 12px; color: var(--text); background: #fff; }
.asof-card.on .asof-term { border-color: #f3e8d2; background: #fffdf8; }

/* ================= v070 撤否率分析 ================= */
.chebi-card { padding: 0; }
.chebi-summary { cursor: pointer; padding: 12px 16px; font-weight: 700;
  font-size: 15px; user-select: none; list-style: revert;
  display: flex; align-items: baseline; gap: 6px; }
.chebi-card[open] .chebi-summary { border-bottom: 1px solid var(--line); }
.chebi-ctl { display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  padding: 10px 16px; border-bottom: 1px solid var(--line); }
.chebi-item { display: inline-flex; align-items: center; gap: 4px;
  font-size: 13px; }
.chebi-k { color: var(--mut); font-weight: 600; font-size: 12px; }
.chebi-quick { border: 1px solid var(--line); background: #fff;
  border-radius: 14px; padding: 3px 12px; font-size: 12px; cursor: pointer;
  color: var(--text); }
.chebi-quick.on { background: var(--blue-bg); border-color: var(--blue);
  color: var(--blue); font-weight: 600; }
.chebi-ctl input[type="date"] { border: 1px solid var(--line);
  border-radius: 6px; padding: 3px 6px; font: inherit; font-size: 12px; }
.chebi-ctl select { border: 1px solid var(--line); border-radius: 6px;
  padding: 3px 6px; font: inherit; font-size: 12px; }
.chebi-chips { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.chebi-chip { background: var(--blue-bg); color: var(--blue);
  border-radius: 12px; padding: 2px 8px; font-size: 12px;
  display: inline-flex; align-items: center; gap: 4px; }
.chebi-chip a { cursor: pointer; color: var(--blue); font-weight: 700; }
.chebi-body { padding: 6px 16px 16px; overflow-x: auto; }
.chebi-loading { text-align: center; padding: 28px; color: var(--mut);
  font-size: 13px; }
.chebi-h3 { margin: 14px 0 8px; font-size: 14px; }
/* v081：表2 标题与「导出 Excel」按钮同行；表1 无 h3，用单独一条工具条 */
.chebi-hrow { display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap; }
.chebi-toolbar { display: flex; align-items: center; justify-content: flex-end;
  gap: 10px; margin: 12px 0 6px; }
.chebi-toolbar-t { margin-right: auto; font-size: 14.5px; font-weight: 700;
  color: #2c3e50; border-left: 4px solid var(--blue); padding-left: 8px; }
.chebi-exp { white-space: nowrap; cursor: pointer; }
.chebi-t1 th, .chebi-t1 td, .chebi-t2 th, .chebi-t2 td,
.chebi-dt th, .chebi-dt td { border: 1px solid var(--line); }
.chebi-t1 .c-scope { background: #f4f6fa; font-weight: 700; width: 84px;
  text-align: center; }
.chebi-t1 .c-metric { width: 130px; }
.chebi-t1 .c-col { min-width: 120px; }
.chebi-t1 .c-market { min-width: 150px; }
.c-num { text-align: right; font-variant-numeric: tabular-nums; }
.c-link { cursor: pointer; text-decoration: underline dotted;
  text-underline-offset: 3px; }
.c-link:hover { color: var(--blue); }
.c-rate td { background: #fbfbf7; font-weight: 700; }
.chebi-note { margin: 8px 0 4px; font-size: 12px; color: var(--mut); }
.chebi-t2 .c-sp { min-width: 130px; }
.chebi-t2 .c-grp { text-align: center; }
/* 明细 / 券商选择弹窗 */
.chebi-modal { position: fixed; inset: 0; background: rgba(20, 30, 50, .45);
  z-index: 1000; display: flex; align-items: flex-start;
  justify-content: center; padding: 40px 12px; }
.chebi-modal-card { background: #fff; border-radius: 10px;
  max-width: 960px; width: 100%; max-height: 82vh; display: flex;
  flex-direction: column; padding: 14px 16px; overflow: hidden; }
.chebi-modal-head { display: flex; justify-content: space-between;
  align-items: center; gap: 10px; margin-bottom: 8px; }
.chebi-modal-head h3 { margin: 0; font-size: 14px; }
.chebi-modal-body { overflow: auto; }
.chebi-search { border: 1px solid var(--line); border-radius: 6px;
  padding: 5px 10px; font: inherit; font-size: 13px; margin-bottom: 8px;
  width: 100%; box-sizing: border-box; }
.chebi-sp-list .sp-item { display: flex; justify-content: space-between;
  padding: 7px 10px; border-bottom: 1px solid var(--line); cursor: pointer; }
.chebi-sp-list .sp-item:hover { background: var(--blue-bg); }
.chebi-sp-list .sp-item.sel { background: var(--blue-bg); color: var(--blue);
  font-weight: 600; }
.chebi-dt { font-size: 12.5px; }
.chebi-dt td, .chebi-dt th { padding: 4px 8px; white-space: nowrap; }
.chebi-dt td.ta-l, .chebi-dt th.ta-l { white-space: normal; }

/* v071: 撤否率独立页 + 页面内嵌明细 */
.chebi-page { padding: 0 0 16px; }
.chebi-detail { margin: 14px 16px 4px; border: 1px solid var(--line);
  border-radius: 8px; padding: 10px 12px; background: #fcfcfa; }
.chebi-detail-head { display: flex; justify-content: space-between;
  align-items: center; margin-bottom: 8px; }
.chebi-detail-head h3 { margin: 0; font-size: 14px; }
.chebi-detail-body { overflow-x: auto; }

/* ================= v072: 撤否率页视觉升级（仅作用于 .chebi-page） ================= */

/* ---- 控制区：浅色渐变工具条 + 分段式快捷按钮 ---- */
.chebi-page .chebi-ctl {
  margin: 4px 16px 12px; padding: 10px 14px;
  background: linear-gradient(180deg, #f7f9fc, #eef2f8);
  border: 1px solid var(--line); border-radius: 10px;
  box-shadow: 0 1px 2px rgba(30, 40, 60, .04);
}
.chebi-page .chebi-quick {
  border: 1px solid var(--line); background: #fff; cursor: pointer;
  padding: 5px 12px; border-radius: 999px; font-size: 12.5px;
  transition: all .15s ease;
}
.chebi-page .chebi-quick:hover { border-color: var(--blue); color: var(--blue); }
.chebi-page .chebi-quick.on {
  background: var(--blue); border-color: var(--blue); color: #fff;
  font-weight: 600; box-shadow: 0 1px 4px rgba(30, 90, 180, .25);
}
.chebi-page .chebi-ctl input[type="date"],
.chebi-page .chebi-ctl select { border-radius: 8px; padding: 4px 8px; }
.chebi-page .chebi-chip { border-radius: 999px; padding: 3px 10px;
  box-shadow: 0 1px 2px rgba(30, 90, 180, .12); }
.chebi-page #chebiAddSp { border-radius: 999px; }

/* ---- 表格整体：弱化竖线、斑马纹、悬浮高亮、表头吸顶 ---- */
.chebi-page .tbl { border-collapse: separate; border-spacing: 0;
  width: max-content; min-width: 100%; font-variant-numeric: tabular-nums;
  border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.chebi-page .tbl th, .chebi-page .tbl td { border: 0;
  border-bottom: 1px solid #e8ecf2; border-right: 1px solid #f0f3f7; }
.chebi-page .tbl thead th {
  background: #f2f5fa; color: #33475e; font-size: 12px;
  position: sticky; top: 0; z-index: 2;
  box-shadow: inset 0 -2px 0 #d9e1ec;
}
.chebi-page .tbl tbody tr:nth-child(even) { background: #fafbfd; }
.chebi-page .tbl tbody tr:hover { background: #eef5ff; }
.chebi-page .tbl tbody tr:last-child td { border-bottom: 0; }

/* ---- 表1：分组行/指标列/撤否率行强调 ---- */
.chebi-page .chebi-t1 .c-scope { background: #eef2f8; font-weight: 700;
  color: #33475e; letter-spacing: .5px; }
.chebi-page .chebi-t1 .c-metric { color: #55677d; font-size: 12.5px; }
.chebi-page .chebi-t1 tr.c-rate td { background: #fdf7ec; font-weight: 700;
  border-top: 1px solid #f0e2c8; border-bottom: 1px solid #f0e2c8; }
.chebi-page .chebi-t1 tr.c-rate .c-rate-val { color: #b3541e; }
.chebi-page .chebi-t1 .c-market { background: #eaf3ff; }
.chebi-page .chebi-t1 thead .c-market { background: #e2eefc; color: #1c5aa8; }

/* ---- 数字链接：可点击数量样式 ---- */
.chebi-page .c-link { color: #1c5aa8; cursor: pointer;
  border-bottom: 1px dashed transparent; transition: all .12s ease; }
.chebi-page .c-link:hover { color: #0d3f80;
  border-bottom-color: #0d3f80; text-shadow: 0 0 .6px currentColor; }

/* ---- 表2：双层表头分组竖线 + 撤否率列强调 ---- */
.chebi-page .chebi-t2 thead .c-grp { background: #e7eef8; }
.chebi-page .chebi-t2 thead tr:first-child th { box-shadow: inset -2px 0 0 #d3deec, inset 0 -2px 0 #d9e1ec; }
.chebi-page .chebi-t2 .c-sp { color: #2c3e50; }
.chebi-page .chebi-t2 td:nth-child(4),
.chebi-page .chebi-t2 td:nth-child(6),
.chebi-page .chebi-t2 td:nth-child(8) { border-right: 2px solid #d9e1ec; }
.chebi-page .chebi-t2 tr:hover td { font-weight: 600; }

/* ---- 区块标题：左侧色条 ---- */
.chebi-page .chebi-h3 { border-left: 4px solid var(--blue); padding-left: 8px;
  font-size: 14.5px; letter-spacing: .3px; }

/* ---- 注释行 ---- */
.chebi-page .chebi-note { background: #fafbfd; border: 1px dashed #dfe5ee;
  border-radius: 8px; padding: 6px 10px; margin-top: 10px; }

/* ---- 内嵌明细区块 ---- */
.chebi-page .chebi-detail { background: #fcfdff; border-color: #c9d7ea;
  box-shadow: 0 2px 10px rgba(30, 60, 110, .07); border-radius: 10px; }
.chebi-page .chebi-detail-head h3 { border-left: 3px solid #1c5aa8; padding-left: 8px; }
.chebi-page .chebi-detail .count { color: var(--mut); font-weight: 400; font-size: 12px; }

/* ---- 券商选择弹窗 ---- */
.chebi-page .chebi-modal { backdrop-filter: blur(2px); }
.chebi-page .chebi-modal-card { box-shadow: 0 12px 40px rgba(15, 35, 70, .25); }
.chebi-page .chebi-sp-list .sp-item { border-radius: 6px; margin: 1px 0;
  transition: background .12s ease; }
.chebi-page .chebi-sp-list .sp-item.sel { font-weight: 600; }

/* ================= v075: 主页顶部紧凑化 =================
   目标：项目列表以上区域高度压缩 ~1/3。
   1) 顶栏吸顶 + 滚动后紧凑单行；2) 业务类型按钮缩小；
   3) 业务类型行与时间穿越行贴合（去行距，靠穿越栏色边区隔）；
   4) 交易所/板块并一行（.dk2 分隔）；5) 分布条默认折叠（JS 配合）。 */

/* ---- 顶栏吸顶（紧凑态由 JS 加 .compact） ---- */
.topbar { position: sticky; top: 0; z-index: 60; }
.topbar-inner { padding: 8px 16px; transition: padding .15s ease; }
.brand h1 { font-size: 16px; }
.brand .sub { font-size: 10.5px; }
.topbar.compact .topbar-inner { padding: 4px 16px; }
.topbar.compact .brand h1 { font-size: 14px; }
.topbar.compact .brand .sub { display: none; }
.topbar.compact .meta { font-size: 10px; line-height: 1.4; }

/* ---- 业务类型行：按钮缩小 + 与时间穿越行贴合 ---- */
.tabs-type { position: sticky; top: var(--topbarH, 44px); z-index: 55;
  margin: 8px 0 0; padding: 8px 12px;
  border-radius: 12px 12px 0 0; border-bottom: 0;
  box-shadow: 0 2px 8px rgba(20,40,80,.08); }
.tabs-type .k { font-size: 13px; border-left-width: 2px; }
.tabs-type button { padding: 5px 15px; font-size: 13.5px; border-radius: 8px; }
.tabs-type a.biz-ext { padding: 5px 15px; font-size: 13.5px; border-radius: 8px; }
/* 时间穿越行：上贴标签行、下留 8px，圆角只保留下侧 */
.asof-card { margin-top: 0; border-radius: 0 0 12px 12px; }

/* ---- 全局卡片间距收紧 ---- */
.card { margin: 8px 0; }
.dims-card { margin-top: 8px; }

/* ---- 交易所/板块合并行：组间分隔 ---- */
.dim .dk.dk2 { margin-left: 20px; position: relative; }
.dim .dk.dk2::before { content: ""; position: absolute; left: -11px; top: 50%;
  transform: translateY(-50%); width: 1px; height: 14px; background: var(--line); }

/* ---- 分布条折叠态 ---- */
.pb-toggle { cursor: pointer; user-select: none; }
.pb-toggle:hover { color: var(--blue); }
.pb-toggle .chev { display: inline-block; width: 12px; color: var(--mut); }
.pb-toggle .pb-hint { font-weight: 400; }

/* v076: 顶栏取消吸顶（业务类型行保留吸顶，改为贴视口顶部） */
.topbar { position: static; }
.tabs-type { top: 0; }

/* v077: 业务类型标签行也取消吸顶 */
.tabs-type { position: static; box-shadow: none; }

/* ================= v078: 券商排名独立页 ================= */

/* 维度子页签 */
.rank-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin: 2px 16px 10px;
  padding-bottom: 10px; border-bottom: 1px dashed var(--line); }
.rank-tabs button { border: 1px solid var(--line); background: #fff;
  color: var(--text); border-radius: 999px; padding: 6px 18px;
  font-size: 13.5px; cursor: pointer; transition: all .15s ease; }
.rank-tabs button:hover { border-color: var(--blue); color: var(--blue); }
.rank-tabs button.on { background: var(--blue); border-color: var(--blue);
  color: #fff; font-weight: 600; box-shadow: 0 1px 4px rgba(30, 90, 180, .25); }

/* 控制区 */
.rank-page .rank-ctl { margin: 0 16px 12px; padding: 10px 14px;
  background: linear-gradient(180deg, #f7f9fc, #eef2f8);
  border: 1px solid var(--line); border-radius: 10px;
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.rank-time { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.rank-quick { border: 1px solid var(--line); background: #fff; cursor: pointer;
  padding: 5px 12px; border-radius: 999px; font-size: 12.5px;
  transition: all .15s ease; }
.rank-quick:hover { border-color: var(--blue); color: var(--blue); }
.rank-quick.on { background: var(--blue); border-color: var(--blue); color: #fff;
  font-weight: 600; box-shadow: 0 1px 4px rgba(30, 90, 180, .25); }
/* v102：排名页当前排名主键列加粗强调；排序 chips 复用 .rank-quick */
.rank-tbl .r-key { font-weight: 700; color: var(--text); }
.rank-tbl td.c-num, .rank-tbl th.c-num { padding-right: 14px; }
.rank-item { display: inline-flex; align-items: center; gap: 4px;
  font-size: 12.5px; color: #55677d; }
.rank-item select, .rank-item input[type="date"] {
  border: 1px solid var(--line); border-radius: 8px; padding: 4px 8px;
  font: inherit; color: var(--text); background: #fff; }

/* v084：交易所/板块标签行 —— 复用主站全局 .dim/.dk/.tags/.tch，
   这里只补容器间距与底色，让它与上方 .rank-ctl 视觉成组。 */
.rank-page .rank-dims { margin: 0 16px 12px; padding: 7px 14px;
  background: linear-gradient(180deg, #f7f9fc, #eef2f8);
  border: 1px solid var(--line); border-radius: 10px; }
.rank-page .rank-dims .dim { padding: 2px 0; }
.rank-page .rank-dims .tch { cursor: pointer; }

/* 排名表 */
.rank-body { padding: 4px 16px 14px; overflow-x: auto; }
.rank-tbl { border-collapse: separate; border-spacing: 0; width: 100%;
  font-variant-numeric: tabular-nums;
  border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.rank-tbl th, .rank-tbl td { border: 0; border-bottom: 1px solid #e8ecf2; }
.rank-tbl thead th { background: #f2f5fa; color: #33475e; font-size: 12px; }
.rank-tbl tbody tr:nth-child(even) { background: #fafbfd; }
.rank-tbl tbody tr:hover { background: #eef5ff; }
.rank-tbl tbody tr:last-child td { border-bottom: 0; }
.rank-tbl .r-no { width: 52px; text-align: center; color: #55677d; }
.rank-tbl .r-sp { min-width: 150px; color: #2c3e50; }
/* v087：券商排名 → 券商透视 跳转链接（点机构名打开该机构画像） */
.rank-tbl .r-sp-link { color: #2c3e50; text-decoration: none; white-space: nowrap;
  border-bottom: 1px dashed #b7c8db; transition: color .15s ease, border-color .15s ease; }
.rank-tbl .r-sp-link::after { content: "↗"; font-size: 11px; margin-left: 3px;
  color: #9fb3c8; transition: color .15s ease; }
.rank-tbl .r-sp-link:hover { color: #2f6fed; border-bottom-color: #2f6fed; }
.rank-tbl .r-sp-link:hover::after { color: #2f6fed; }
.rank-tbl .r-pct { width: 68px; color: var(--mut); }
.rank-tbl .r-bar { width: 34%; min-width: 140px; padding-right: 12px; }
/* 前三名奖牌色 */
.rank-tbl tr.r-top td { background: #fffdf5; }
.rank-tbl .r-gold { color: #b3541e; font-weight: 700; }
.rank-tbl tr.r-top .r-gold { background: #fdf3d8; }
.rank-tbl .r-silver { color: #66788a; font-weight: 700; }
.rank-tbl tr.r-top .r-silver { background: #f1f4f8; }
.rank-tbl .r-bronze { color: #92603a; font-weight: 700; }
.rank-tbl tr.r-top .r-bronze { background: #f8ecdf; }
/* 行内迷你条形 */
.r-bar-in { display: block; height: 12px; border-radius: 6px;
  background: linear-gradient(90deg, #5b9bf0, #2f6fed);
  min-width: 2px; transition: width .25s ease; }
.rank-tbl tr.r-top .r-bar-in { background: linear-gradient(90deg, #f2b13e, #e8891a); }

.rank-loading { text-align: center; padding: 28px; color: var(--mut); }

/* ================= v092: 券商透视独立页（视觉升级） =================
   改动：① 顶部独立控制面板（主要券商卡片快捷点选 + 时点 + 已选 chips）
        ② 机构画像改为独立卡片（头像块 + 名称 + 指标 pill 组）
        ③ 表格精细化：双层表头渐变、业务类别左侧色条、数字胶囊化、
           小计/合计行分层、在途/在审 与 年度累计 之间分组竖线 */

/* ---- 控制面板 ---- */
.pf-panel { background: #fff; border: 1px solid var(--line); border-radius: 14px;
  padding: 14px 16px 13px; margin: 14px 0 10px;
  box-shadow: 0 1px 2px rgba(20,40,80,.04), 0 12px 32px -26px rgba(20,50,110,.55); }
.pf-panel-head { display: flex; align-items: baseline; gap: 10px;
  flex-wrap: wrap; margin-bottom: 12px; }
.pf-panel-head h2 { font-size: 14.5px; font-weight: 600; color: #1b2a3d;
  letter-spacing: .3px; }
.pf-panel-head h2::before { content: ""; display: inline-block; width: 3px;
  height: 13px; border-radius: 2px; margin-right: 8px; vertical-align: -1px;
  background: linear-gradient(180deg, #3a7bf5, #1b4587); }
.pf-hint { font-size: 11.5px; color: var(--mut); }
.pf-panel-ops { margin-left: auto; display: inline-flex; gap: 6px; }

/* ---- 主要券商卡片 ---- */
.pf-feat { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 13px; }
.pf-fc { position: relative; flex: 1 1 168px; min-width: 156px; max-width: 226px;
  display: flex; flex-direction: column; gap: 9px; text-align: left;
  padding: 13px 15px 12px; cursor: pointer; font: inherit;
  background: linear-gradient(180deg, #fff, #fafcfe);
  border: 1px solid var(--line); border-radius: 12px;
  transition: border-color .18s ease, box-shadow .18s ease,
    transform .18s ease, background .18s ease; }
.pf-fc:hover { border-color: #b9cdf3; transform: translateY(-1px);
  box-shadow: 0 8px 22px -12px rgba(31,78,150,.5); }
.pf-fc.on { border-color: var(--blue);
  background: linear-gradient(180deg, #f4f8ff, #e9f1ff);
  box-shadow: 0 8px 22px -14px rgba(47,111,237,.85); }
.pf-fc-name { font-size: 14px; font-weight: 600; color: #1f3047;
  letter-spacing: .3px; }
.pf-fc-nums { display: flex; gap: 16px; }
.pf-fc-n { display: flex; flex-direction: column; gap: 1px; }
.pf-fc-n i { font-style: normal; font-size: 10.5px; color: #93a0b2;
  letter-spacing: .5px; }
.pf-fc-n b { font-size: 17px; font-weight: 700; color: #1f4e96; line-height: 1.1;
  font-variant-numeric: tabular-nums; }
.pf-fc.on .pf-fc-n b { color: #1b57d6; }
.pf-fc-tick { position: absolute; top: 11px; right: 12px; width: 16px; height: 16px;
  border-radius: 50%; background: var(--blue); color: #fff; font-size: 10px;
  line-height: 16px; text-align: center; opacity: 0; transform: scale(.5);
  box-shadow: 0 2px 6px rgba(47,111,237,.45);
  transition: opacity .18s ease, transform .18s ease; }
.pf-fc.on .pf-fc-tick { opacity: 1; transform: scale(1); }

/* ---- 时点 / 已选 条 ---- */
.pf-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px;
  padding-top: 12px; border-top: 1px dashed #e2e8f2; }
.pf-time { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.pf-sel { display: inline-flex; align-items: center; gap: 7px; flex-wrap: wrap;
  margin-left: auto; }
.pf-sel-label { font-size: 11.5px; color: var(--mut); letter-spacing: .5px; }
.pf-sel .chebi-chips:empty::after { content: "未选择机构（点上方卡片即可）";
  font-size: 11.5px; color: #aab5c4; letter-spacing: .3px; }

/* ---- 结果区 ---- */
.profile-page { padding: 0; }
.pf-body { padding: 14px 16px 16px; }
.pf-empty { text-align: center; padding: 38px 20px; color: #8b96a8;
  font-size: 13px; line-height: 2; border: 1px dashed #dbe4f0;
  border-radius: 12px; background: linear-gradient(180deg, #fbfdff, #f6f9fd); }
.pf-empty b { color: var(--blue); font-weight: 600; }
.pf-empty-sub { font-size: 11.5px; color: #a9b4c3; }

/* ---- 机构画像卡 ---- */
.pf-card { margin-bottom: 18px; background: #fff; border: 1px solid #e6ecf5;
  border-radius: 14px; overflow: hidden;
  box-shadow: 0 1px 2px rgba(20,40,80,.04),
    0 14px 34px -30px rgba(20,50,110,.9); }
.pf-card:last-of-type { margin-bottom: 8px; }
.pf-card-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 11px 15px; border-bottom: 1px solid #eef2f8;
  background: linear-gradient(180deg, #fcfeff, #f5f9fd); }
.pf-ava { flex: 0 0 auto; width: 26px; height: 26px; border-radius: 8px;
  background: linear-gradient(135deg, #3a7bf5, #1b4587); color: #fff;
  font-size: 12px; font-weight: 700; display: flex; align-items: center;
  justify-content: center; box-shadow: 0 3px 8px -3px rgba(47,111,237,.85); }
.pf-name { font-size: 14.5px; font-weight: 600; color: #1b2a3d;
  letter-spacing: .4px; }
.pf-pills { margin-left: auto; display: flex; flex-wrap: wrap;
  align-items: center; gap: 6px; }
.pf-pill { display: inline-flex; align-items: baseline; gap: 5px;
  padding: 3px 10px; border-radius: 999px; background: #f4f7fc;
  border: 1px solid #e8eef6; font-size: 11px; color: #5b6b80;
  letter-spacing: .3px; font-variant-numeric: tabular-nums; }
.pf-pill b { font-size: 12.5px; font-weight: 700; color: #22406b; }
.pf-pill.hot { background: var(--blue-bg); border-color: #cddffb; }
.pf-pill.hot b { color: #1b57d6; }
.pf-pill.neg { background: #fdf6f6; border-color: #f3e3e3; }
.pf-pill.neg b { color: #b0392f; }
.pf-pill.dim b { color: #aeb9c8; }
.pf-pill-cap { font-size: 11px; color: #a3aebd; letter-spacing: .5px;
  padding: 0 2px; }
/* v094：卡片右上角单机构导出（页面级导出按钮已下线） */
.pf-exp { flex: 0 0 auto; font-size: 11.5px; color: #5b6b80;
  background: #f4f7fc; border: 1px solid #e8eef6; border-radius: 999px;
  padding: 3px 10px; text-decoration: none; letter-spacing: .3px;
  transition: color .15s, border-color .15s, background .15s; }
.pf-exp:hover { color: #1b57d6; border-color: #cddffb;
  background: var(--blue-bg); }

/* ---- 画像表（覆盖 .tbl 的 fixed 布局，列宽按内容自适应） ---- */
.pf-tbl { table-layout: auto; width: 100%; min-width: 0;
  border-collapse: separate; border-spacing: 0; border: 0;
  font-variant-numeric: tabular-nums; }
.pf-tbl th, .pf-tbl td { padding: 8px 11px; font-size: 12.5px;
  border: 0; border-bottom: 1px solid #eef2f8; }
.pf-tbl thead th { background: linear-gradient(180deg, #f9fbfe, #f0f4fa);
  color: #52657f; font-size: 11.5px; font-weight: 600; letter-spacing: .4px;
  text-align: center; white-space: nowrap; border-bottom: 1px solid #e2e9f3; }
.pf-tbl thead .c-grp { background: linear-gradient(180deg, #e9f1fc, #dde8f9);
  color: #1f4e96; letter-spacing: .8px; }
.pf-tbl .pf-biz { width: 92px; text-align: center; font-weight: 600;
  color: #1f4a8a; letter-spacing: .5px; background: #f6f9fd;
  border-left: 3px solid #2f6fed; border-right: 1px solid #e6ecf5; }
.pf-tbl thead .pf-biz { border-left: 0; border-right: 1px solid #e2e9f3; }
.pf-tbl .pf-sub { text-align: left; color: #33475e; min-width: 178px;
  padding-left: 14px; }
.pf-tbl thead th.pf-sub { text-align: left; }
.pf-tbl .c-num { text-align: right; min-width: 66px; }
.pf-tbl tbody tr:hover td { background: #f3f8ff; }
.pf-tbl tbody tr:hover .pf-biz { background: #eaf2ff; }
.pf-tbl .pf-zero { color: #ccd5e1; }
.pf-tbl .c-link { display: inline-block; min-width: 28px; padding: 1px 7px;
  border-radius: 6px; color: var(--blue); font-weight: 600;
  text-decoration: underline dotted; text-underline-offset: 3px;
  text-decoration-color: #a9c3ef;
  transition: background .15s ease, color .15s ease; }
.pf-tbl .c-link:hover { background: var(--blue-bg); color: #1b57d6;
  text-decoration: none; }
.pf-tbl tbody tr.pf-sub-row td { background: #f8fafd; color: #55677d;
  font-weight: 600; border-top: 1px solid #e6edf7; }
.pf-tbl tbody tr.pf-sub-row td:first-child { text-align: right;
  padding-right: 14px; letter-spacing: .3px; }
.pf-tbl tbody tr.pf-total-row td {
  background: linear-gradient(180deg, #eef4fd, #e5edfa); color: #143a72;
  font-weight: 700; border-top: 2px solid #bcd1ee; border-bottom: 0; }
.pf-tbl tbody tr.pf-total-row td:first-child { text-align: right;
  padding-right: 14px; letter-spacing: .5px; }
.pf-tbl tbody tr:last-child td { border-bottom: 0; }

/* 「在途/在审」与「年度累计」两组之间的分组竖线 */
.pf-tbl .pf-sep { border-right: 1px solid #e2e9f3; }
.pf-tbl thead .pf-sep { border-right: 1px solid #cfdaea; }

/* 明细面板：与画像卡视觉统一（覆盖 .chebi-detail 的默认灰底） */
.profile-page .chebi-detail { margin: 0 16px 16px; border-radius: 12px;
  border-color: #dfe8f4; background: linear-gradient(180deg, #fbfdff, #f6f9fd);
  padding: 11px 13px; }
.profile-page .chebi-detail-head h3 { font-size: 13.5px; color: #1b2a3d;
  font-weight: 600; }
.profile-page .chebi-dt th { background: linear-gradient(180deg, #f9fbfe, #f0f4fa);
  color: #52657f; font-size: 11.5px; font-weight: 600; }
.profile-page .chebi-dt th, .profile-page .chebi-dt td {
  border-color: #e8eef6; }
.profile-page .chebi-dt tbody tr:hover td { background: #f3f8ff; }
.profile-page .chebi-note { margin: 14px 16px 4px; line-height: 1.85; }

/* ================= v093: 同指标对比条形图 ================= */
.pf-cmp { margin: 0 16px 16px; padding: 13px 15px 15px; border-radius: 12px;
  border: 1px solid #dfe8f4;
  background: linear-gradient(180deg, #fbfdff, #f6f9fd); }
.pf-cmp-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 10px; }
.pf-cmp-sub { font-size: 11.5px; color: #8a97a8; }
.pf-cmp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 12px 22px; }
.pf-cmp-item { min-width: 0; }
.pf-cmp-t { font-size: 12px; font-weight: 600; color: #33475e; margin-bottom: 7px; }
.pf-cmp-row { display: flex; align-items: center; gap: 8px; padding: 2.5px 0; }
.pf-cmp-name { flex: 0 0 74px; font-size: 11.5px; color: #55677d;
  text-align: right; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pf-cmp-bar { flex: 1 1 auto; height: 13px; border-radius: 7px;
  background: #edf1f7; overflow: hidden; }
.pf-cmp-bar i { display: block; height: 100%; border-radius: 7px;
  background: linear-gradient(90deg, #4f83e8, #2563eb); min-width: 3px; }
.pf-cmp-row b { flex: 0 0 38px; font-size: 12px; color: #1f4e96;
  font-variant-numeric: tabular-nums; }

/* ================= v093: 近 12 个月趋势折线 ================= */
.pf-trend { margin: 0 16px 16px; padding: 13px 15px 10px; border-radius: 12px;
  border: 1px solid #dfe8f4;
  background: linear-gradient(180deg, #fbfdff, #f6f9fd); }
.pf-trend-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.pf-trend-btns { display: inline-flex; gap: 6px; }
.pf-trend-btns .rank-quick { padding: 3px 10px; font-size: 11.5px; }
.pf-trend-lgd { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 8px 0 4px; }
.pf-trend-lg { display: inline-flex; align-items: center; gap: 5px;
  font-size: 11.5px; color: #55677d; }
.pf-trend-lg i { width: 14px; height: 3px; border-radius: 2px; }
.pf-trend-lg b { color: #1f4e96; font-variant-numeric: tabular-nums; }
.pf-trend svg { width: 100%; height: auto; display: block; }
.pf-trend-note { font-size: 10.5px; color: #9aa6b5; margin-top: 2px; }

/* 卡片第三格（已上市）数字：中性绿，区别于在途/在审的蓝 */
.pf-fc-n:nth-child(3) b { color: #0b7a55; }
.pf-fc.on .pf-fc-n:nth-child(3) b { color: #0b7a55; }

/* ================= v107：移动端适配（A 阶段・轻量响应式） =================
   实测基线（390×844 视口）：主站文档宽 485 > 视口 390（整页横滑）；
   筛选区高 1185px（首屏 1.4 屏看不到数据）；96% 可点元素 < 32px。
   本块只做「不溢出 / 可折叠 / 热区够大 / 表格不迷路」，不改渲染逻辑。
   断点：≤820 窄屏（平板竖屏、分屏）· ≤600 手机
   ---------------------------------------------------------------------- */

/* 手机端专用件：桌面端一律隐藏（提示条由页面静态放置，折叠头由 JS 注入） */
.mob-hint, .mob-fold-head { display: none; }

/* ---------- ≤820：窄屏通用收紧 ---------- */
@media (max-width: 820px) {
  .wrap { padding: 0 10px; }
  .topbar-inner { padding: 8px 10px; }
  /* 关键节点区间行（关键节点 + 达成日 ∈ + 两个年月日三段）宽度 453px，
     是主站整页横向溢出的根因 —— 允许换行即可消除 */
  .dc-box { flex-wrap: wrap; row-gap: 6px; max-width: 100%; }
  .kd-row { align-items: flex-start; }
  .dims-card { padding: 8px 10px 10px; }
  .dims { gap: 1px; padding: 2px 0 6px; }
}

/* ---------- ≤600：手机 ---------- */
@media (max-width: 600px) {
  /* 兜底：残余溢出不横滑整页（clip 不影响 sticky，优于 hidden） */
  html, body { max-width: 100%; overflow-x: clip; }
  .wrap { padding: 0 8px; }

  /* ① 头部：紧凑顶栏（v109 收紧 —— 原 padding 14/16 + 副标题换行把 hero 撑到 130px+） */
  .topbar-inner { padding: 9px 12px 10px; gap: 2px 8px; }
  .brand h1 { font-size: 17px; line-height: 1.25; letter-spacing: .5px; }
  .badge { font-size: 10.5px; padding: 0 6px; vertical-align: 2px; }
  .brand .sub { font-size: 11px; line-height: 1.5; margin-top: 3px; opacity: .8; }
  .meta { font-size: 10.5px; margin-top: 3px; opacity: .8; }

  /* ② 点击热区：一级动作 ≥44px（Apple HIG）。
     v109：把「类型 tab」从这组里摘出去单独做 40px 紧凑 pill —— 8 个入口排 4 行
     时每个都撑 44px+padding，光这一块就吃掉首屏 350px；40px 仍高于 Android 最小
     触达 36px，且 pill 横向单行后指头不会点错。 */
  .tch, .qchip, .btn-minor,
  .rank-quick, .rank-tabs button, .pager button, .asof-quick button {
    min-height: 44px; padding: 10px 14px; font-size: 13.5px; line-height: 1.25; }
  .tch { align-items: center; }
  .tch .n { font-size: 11px; }
  /* v109 类型区：8 个入口（IPO/再融资/重组/转板/DR/辅导备案/撤否率/券商排名/券商透视）
     原本 flex-wrap 折成 4 行、每行 44px+，单这块占掉首屏 ~350px，真正的数据被挤到
     屏外 —— 改成单行横向滚动的 pill（scroll-snap 对齐，原生惯性滚动，藏滚动条）。 */
  .tabs-type { flex-wrap: nowrap; overflow-x: auto; gap: 6px; padding: 5px 10px;
    border-radius: 14px; scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch; scrollbar-width: none; }
  .tabs-type::-webkit-scrollbar { display: none; }
  .tabs-type .k { display: none; }
  /* 36px 高 pill：横向 scroll-snap 的 chip 无需 44px（Material 规范即 32px），
     换成容器上下 5px 内边距后整块 48px，比 v107 的 350px 省掉 86%。 */
  .tabs-type button, .tabs-type a.biz-ext {
    flex: 0 0 auto; scroll-snap-align: start; min-height: 36px;
    padding: 8px 15px; font-size: 13px; line-height: 1.2; border-radius: 999px; }
  .tabs-type a.biz-ext { border-style: solid; border-color: #bfe3dd; }
  .card-head { flex-wrap: wrap; gap: 8px; }
  .head-actions { flex-wrap: wrap; width: 100%; }
  .head-actions .btn-minor { flex: 1 1 auto; }
  /* 表格内的排序表头、日历小按钮不放大（否则列高失衡） */
  .tbl th, .tbl th.th-sort { min-height: 0; padding: 8px 6px; }
  .dm-cal { min-height: 0; padding: 2px 4px; }

  /* ③ 表单控件：iOS 上 <16px 会触发页面自动缩放，必须 ≥16px */
  .filters select, .filters input, .dc-box select, .dc-box input,
  .asof-card input[type="date"], .rank-item input[type="date"], #fQ {
    min-height: 44px; font-size: 16px; }
  .filters { gap: 8px; }
  .filters > select { flex: 1 1 calc(50% - 4px); }
  #fQ { flex: 1 1 100%; }
  .dc-box { display: flex; width: 100%; gap: 6px; }
  .dc-box .dm { flex: 0 0 auto; min-height: 44px; }
  .dc-box .dm input { font-size: 16px; }
  .dc-box .dm-cal { min-height: 44px; min-width: 44px; font-size: 17px; }
  .kd-quick { flex-wrap: wrap; gap: 6px; }

  /* ④ 卡片节奏 */
  .card { margin: 8px 0; padding: 10px 10px 12px; border-radius: 10px; }
  .dims-card { padding: 8px 10px 10px; }

  /* ⑤ 表格：字号/内边距收紧 + 首列吸附（横向滑动时公司名常驻） */
  .tbl th { font-size: 11.5px; }
  .tbl td { font-size: 12.5px; }
  .tbl th, .tbl td { padding: 7px 7px; }
  .tbl th.co, .tbl td.co { position: sticky; left: 0; z-index: 4;
    background: #fff; box-shadow: 6px 0 8px -7px rgba(16,32,64,.28); }
  .tbl thead th.co { background: #f8fafd; z-index: 6; }
  .tbl tbody tr:nth-child(even) td.co { background: #fafbfd; }
  .tbl tbody tr:hover td.co { background: #f3f8ff; }
  /* 撤否率对比表（chebi-t2，首列机构名无 rowspan）可吸附；表首列（c-scope）
     是 rowspan 合并单元格，sticky 在 Chrome 下失效，故不设 —— 见 ⑥b 说明。 */
  .chebi-t2 th:first-child, .chebi-t2 td:first-child {
    position: sticky; left: 0; z-index: 4; background: #fff;
    box-shadow: 6px 0 8px -7px rgba(16,32,64,.28); }
  .chebi-t2 thead th:first-child { background: #f8fafd; z-index: 6; }
  /* 横滑提示（手机端可见） */
  .mob-hint { display: block; font-size: 11.5px; color: var(--mut);
    margin: 2px 0 6px; }
  .tbl-wrap { -webkit-overflow-scrolling: touch; }

  /* ⑥ 明细表（排名/撤否率/透视内嵌）*/
  .chebi-dt td, .chebi-dt th { padding: 7px 8px; font-size: 12px; }

  /* ⑥b 排名表：手机上撤掉「家数占比」与「分布条」两列（合计占约 45% 宽度、
     信息量最低），表格即从 980px 降到 ~420px，基本无需横向滑动；
     剩下的排名/机构/数量/金额四列一屏可读。撤列不撤数据（DOM 仍在）。 */
  .rank-tbl .r-pct, .rank-tbl .r-bar { display: none; }
  /* 覆盖 .tbl 的 960/980px 固定最小宽（撤列后按容器自适应，不再横滑） */
  .rank-tbl { min-width: 0; }
  .rank-tbl .r-no { width: 40px; }
  .rank-tbl .r-sp { min-width: 96px; }

  /* 撤否率表首列是 rowspan 合并单元格（「各交易所合计」跨 7 行），
     Chrome 下 sticky 与 rowspan 冲突会失效 —— 故不设吸附，只给横滑提示。 */

  /* 页头「返回主站」文字链接：手机上是重要返回入口，撑到 44px 触达 */
  .brand .sub a { display: inline-flex; align-items: center; min-height: 44px;
    padding: 0 12px; margin: 2px 0; border-radius: 8px;
    background: rgba(255, 255, 255, .16); }

  /* ⑦ 折叠组件：容器 .mob-folds 内，除首个 .mob-fold-head 外默认收起
     （折叠头的基础 display:none 已在文件上方基础层声明，此处只放开手机端） */
  /* v109：折叠头从「白底描边卡」改「浅灰填充行」—— 与卡片同宽但零描边，
     视觉上退到背景层，不再和内容卡抢注意力；高度 44→42、下间距 8→6。 */
  /* v110：选择器一律去掉 `.mob-folds >` 前缀 —— 筛选区的折叠头已移进 .mob-fbar
     行（与常驻搜索框同排），不再是 .mob-folds 的直接子元素。 */
  .mob-fold-head {
    display: flex; align-items: center; justify-content: space-between; gap: 10px;
    width: 100%; min-height: 42px; margin: 0 0 6px; padding: 0 12px;
    border: 0; border-radius: 11px; background: #f2f6fb;
    font: inherit; font-size: 13px; font-weight: 600; color: #48566d; cursor: pointer; }
  /* 左侧 label + 摘要同一行：label 不换行、摘要吃剩余宽度并省略号收尾 */
  .mob-fold-head > span:first-child {
    display: flex; align-items: center; gap: 6px; min-width: 0; flex: 1 1 auto; }
  .mob-fold-head .mfs { color: var(--mut); font-size: 12px;
    font-weight: 400; min-width: 0; flex: 0 1 auto; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap; }
  .mob-fold-head .mfc { color: var(--blue); font-weight: 700;
    flex: 0 0 auto; transition: transform .15s ease; }
  .mob-folds.mob-open .mfc { transform: rotate(180deg); }
  /* 折叠体两种命中方式都要留（缺一不可）：
     ① .mob-fold-body —— 主站折叠头已移进 .mob-fbar 行、不再是 .mob-folds 的
        直接子元素，只能靠 JS 打的标记命中（v110 起）；
     ② 兜底「除折叠头与 .mob-fbar 之外的直接子元素」—— 排名/撤否率/透视三页的
        折叠 IIFE 是主站那份的独立副本：没有 fbar、也没打标记，全靠这条兜住。
        （v110 首轮只留 ①，这三页折叠当场失效、内容全展开，机构卡被顶到 782px。） */
  .mob-folds:not(.mob-open) > .mob-fold-body,
  .mob-folds:not(.mob-open) > *:not(.mob-fold-head):not(.mob-fbar) {
    display: none !important; }
  /* 折叠头右侧放小字提示（如「左右滑动看全部列」） */
  .mob-fold-head .mfh-sub { color: var(--mut); font-size: 11px; }
}

/* 打印：折叠内容强制展开，避免打印缺内容 */
@media print {
  .mob-folds > *:not(.mob-fold-head) { display: revert !important; }
  .mob-fold-head { display: none !important; }
}

/* =========================================================================
   v108 移动端 B 阶段：主站项目列表 + 券商排名 → 手机卡片视图（≤600px 生效）
   ---------------------------------------------------------------------------
   A 阶段（v107）解决的是「不溢出屏幕 / 热区 ≥44px / 筛选区折叠 / 首列吸附」，
   但主表 23 列在 390px 屏上一屏只看得到 4 列（序号·公司·交易所·板块），
   想读「上市进展 / 预计募资 / 保荐机构」必须横向拖动 —— 信息密度和阅读动线都不对。
   B 阶段直接把表格换掉：一个项目（或一家机构）一张卡，字段名+值成对竖排，
   节点日期与中介机构收进原生 <details>（零 JS、无 MutationObserver 副作用）。

   桌面端零影响：.mob-cards 基础层 display:none，卡片只在 ≤600px 由 CSS 放开。
   ========================================================================= */
.mob-cards { display: none; }

@media (max-width: 600px) {
  /* 表格交班给卡片（DOM 两份并存，桌面/手机各自只显示一份，避免重排闪烁） */
  .mob-cards { display: block; }
  .tbl-wrap { display: none; }
  /* 「全部展开」= 给表格加 7 列日期，卡片视图下本就常显节点日期，按钮无意义 */
  #expandAll { display: none; }
  /* v107 为撑满热区把按钮设成 flex:1 1 auto，撤掉「全部展开」后只剩「导出」一个，
     会被拉成一整条空条 —— 改回按内容宽度（高度仍由 v107 保证 ≥44px）。 */
  .head-actions .btn-minor { flex: 0 1 auto; }

  /* ---------- 项目卡片 ---------- */
  .mc { background: var(--card); border: 1px solid var(--line); border-radius: 10px;
    margin: 0 0 8px; padding: 10px 11px 9px; }
  .mc-hd { display: flex; align-items: flex-start; gap: 8px; }
  .mc-no { flex: 0 0 auto; min-width: 24px; height: 22px; padding: 0 5px;
    display: inline-flex; align-items: center; justify-content: center;
    background: var(--gray-bg); color: var(--mut); border-radius: 6px;
    font-size: 11.5px; font-variant-numeric: tabular-nums; }
  .mc-name { flex: 1 1 auto; min-width: 0; font-size: 14px; font-weight: 600;
    line-height: 1.35; word-break: break-word; }
  .mc-name a { color: var(--text); text-decoration: none;
    border-bottom: 1px solid #c9d6ea; }
  /* 状态 chip 行：chip + 达成日期小字同排，放不下自动换行 */
  .mc-st { display: flex; flex-wrap: wrap; align-items: center; gap: 3px 8px;
    margin-top: 5px; }
  .mc-st .prog-date, .mc-st .iss-date { font-size: 11.5px; }

  /* ---------- 字段行：左标签定宽 + 右值自适应 ---------- */
  .mc-rows { margin-top: 6px; }
  .mc-row { display: flex; align-items: baseline; gap: 10px; padding: 3.5px 0;
    border-bottom: 1px solid #f1f4f9; font-size: 12.5px; line-height: 1.45; }
  .mc-row:last-child { border-bottom: 0; }
  /* 标签按内容定宽 + 不换行：定宽 4.8em 会把「会计师事务所」折成「会计事务 / 所」；
     短标签（交易所/注册地）靠 min-width 对齐，长标签自然撑开，值列吃剩余宽度。 */
  .mc-k { flex: 0 0 auto; min-width: 4.6em; color: var(--mut);
    font-size: 11.5px; white-space: nowrap; }
  .mc-v { flex: 1 1 auto; min-width: 0; word-break: break-word; }
  /* 金额行：唯一的「主数字」，加粗着色便于扫读 */
  .mc-row.mc-amt .mc-v { font-weight: 700; color: var(--blue);
    font-variant-numeric: tabular-nums; }

  /* ---------- 「更多信息」原生折叠 ---------- */
  .mc-more { margin-top: 7px; }
  .mc-more > summary { display: flex; align-items: center; justify-content: space-between;
    gap: 8px; min-height: 44px; padding: 0 12px; border: 1px solid var(--line);
    border-radius: 8px; background: #fafbfd; color: var(--mut);
    font-size: 12.5px; cursor: pointer; list-style: none; }
  .mc-more > summary::-webkit-details-marker { display: none; }
  .mc-more > summary .mfc { flex: 0 0 auto; transition: transform .15s ease; }
  .mc-more[open] > summary { background: var(--blue-bg); color: var(--blue);
    border-color: #c9dbff; }
  .mc-more[open] > summary .mfc { transform: rotate(180deg); }
  .mc-more > .mc-rows { margin-top: 4px; }
  .mc-node-h { margin: 8px 0 4px; font-size: 11.5px; color: var(--mut); }
  .mc-node .xp-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 5px; }
  .mc-node .xp-cell { display: flex; flex-direction: column; align-items: flex-start;
    min-width: 0; background: #fff; border: 1px solid var(--line);
    border-radius: 6px; padding: 4px 8px; }
  .mc-node .xp-k { font-size: 10px; color: var(--mut); }
  .mc-node .xp-v { font-size: 12px; font-weight: 600;
    font-variant-numeric: tabular-nums; }
  .mc-node .xp-sub { font-size: 10px; color: var(--mut); font-weight: 400; }
  .mc-empty { text-align: center; padding: 22px; color: var(--mut); }

  /* ---------- 排名页机构卡片 ---------- */
  .rank-tbl { display: none; }
  /* v108 修正：A 阶段只隐藏了 td.r-pct / td.r-bar，表头「家数占比」用的是 .c-num
     没被隐藏 → 表头 5 列、表体 4 列错位。补一个专用类兜住（桌面端不套任何样式）。 */
  .rank-tbl thead th.r-pct-h { display: none; }
  .rc { display: flex; align-items: flex-start; gap: 9px; background: var(--card);
    border: 1px solid var(--line); border-radius: 10px; margin: 0 0 8px;
    padding: 9px 11px; }
  .rc-no { flex: 0 0 auto; min-width: 26px; height: 26px; padding: 0 6px;
    display: inline-flex; align-items: center; justify-content: center;
    background: var(--gray-bg); color: var(--mut); border-radius: 7px;
    font-size: 12.5px; font-weight: 600; font-variant-numeric: tabular-nums; }
  .rc-top .rc-no { background: linear-gradient(135deg, #f6c85c, #e8891a); color: #fff; }
  .rc-body { flex: 1 1 auto; min-width: 0; }
  .rc-name { font-size: 13.5px; font-weight: 600; line-height: 1.35;
    word-break: break-word; }
  .rc-name a { color: var(--text); text-decoration: none;
    border-bottom: 1px solid #c9d6ea; }
  .rc-mets { display: flex; flex-wrap: wrap; gap: 3px 14px; margin-top: 5px; }
  .rc-met { font-size: 11.5px; color: var(--mut); }
  .rc-met b { color: var(--text); font-size: 13px; font-variant-numeric: tabular-nums; }
  .rc-met a { text-decoration: none; border-bottom: 1px solid #c9d6ea;
    display: inline-flex; align-items: center; min-height: 22px; }
  .rc-met a b { color: var(--blue); }

  /* ---------- 排名明细：同样卡片化（点机构名/金额后出现） ----------
     ⚠️ .chebi-dt 这三个字被撤否率页(chebi.js)与券商透视页(profile.js)的明细表
     共用，绝不能全局隐藏 —— 故把作用域收敛到排名的明细容器 #rankDetailBody，
     那两个页面的明细表保持 A 阶段的「可横滑 + 提示」形态（B 阶段范围外）。 */
  #rankDetailBody .chebi-dt { display: none; }
  .rcd { background: var(--card); border: 1px solid var(--line); border-radius: 10px;
    margin: 0 0 8px; padding: 9px 11px; }
  .rcd-hd { display: flex; align-items: flex-start; gap: 8px; }
  .rcd-no { flex: 0 0 auto; min-width: 24px; height: 22px; padding: 0 5px;
    display: inline-flex; align-items: center; justify-content: center;
    background: var(--gray-bg); color: var(--mut); border-radius: 6px;
    font-size: 11.5px; font-variant-numeric: tabular-nums; }
  .rcd-name { flex: 1 1 auto; min-width: 0; font-size: 13.5px; font-weight: 600;
    line-height: 1.35; word-break: break-word; }
  .rcd-mets { display: flex; flex-wrap: wrap; gap: 3px 14px; margin-top: 4px; }
  .rcd-met { font-size: 11.5px; color: var(--mut); }
  .rcd-met b { color: var(--text); font-size: 12.5px;
    font-variant-numeric: tabular-nums; }
  .rcd-met.amt b { color: var(--blue); font-weight: 700; }
}

/* v109 基础层：脚注折叠容器（.note-fold）在桌面端恒定展开 —— 生成端带 open 属性，
   折叠头一律隐藏，只有 ≤600px 的媒体块把它放开成可点 pill。 */
.note-fold > summary.note-toggle { display: none; }
.note-fold > .chebi-note { margin-top: 0; }

/* =========================================================================
   v109 手机端视觉体系（≤600px）—— 从「能用」到「好看」
   ---------------------------------------------------------------------------
   v107 解决可用性（不溢出 / 热区 / 折叠），v108 解决信息密度（表格 → 卡片），
   但观感仍是「Excel 换了层皮」，六个具体病灶：
     ① 纯白卡贴同色系浅灰底 —— 无浮起感，卡片与背景糊成一片；
     ② 公司名/机构名/数字全用 1px 实色下划线当「可点」暗示 —— 老式网页链接感；
     ③ 卡片头部序号是灰底方块、公司名与金额同权重 —— 没有视觉主次；
     ④ 标签/值左对齐轴不统一（标签定宽浮动），扫读时眼睛要来回跳；
     ⑤ 节点日期 8 格里一半是空值「—」，白占 4 行高；
     ⑥ 排名页脚注是一整面文字墙（手机端 300px+）。
   本层逐条对症，纯视觉 + 局部结构调整，不改任何数据口径。
   全部限定 ≤600px：桌面端（>600px）不受本块影响，卡片容器 `.mob-cards` 基础层
   恒 display:none，故桌面端连 DOM 都不渲染进布局。
   ========================================================================= */
@media (max-width: 600px) {
  /* ---------- ① 建三级层次：背景退后 → 白卡浮起 → 卡内嵌块下沉 ---------- */
  body { background: #e9edf4; }
  .card, .dims-card, .asof-card, .rank-page, .chebi-page,
  .mc, .rc, .rcd, .pf-panel, .pf-card {
    border: 1px solid rgba(16, 32, 64, .06);
    border-radius: 14px;
    box-shadow: 0 1px 2px rgba(16, 32, 64, .05),
                0 7px 18px -11px rgba(16, 32, 64, .26);
  }
  .card { margin: 8px 0; padding: 11px 12px 12px; }

  /* 子页（排名/撤否率/透视）的顶栏里，「返回审核雷达主站」pill 会独占副标题的
     第二行 → hero 从 82 涨到 110。这三页副标题只是页面说明（口径在页内脚注已有），
     故用 font-size:0 让副标题文字让位、只留导航 pill；主站无返回链接、副标题
     （站点范围说明）原样保留。:has() 在不支持的旧浏览器上自动降级为原样式。 */
  .brand .sub:has(a) { font-size: 0; margin-top: 5px; }
  .brand .sub:has(a) a { font-size: 11px; }

  /* ---------- ② 全站去下划线；可点数字改「着色 + 淡底」暗示 ---------- */
  .mc-name a, .rc-name a, .rcd-name a, .rc-met a,
  .c-link, .r-sp-link, .tbl td.co a, .brand .sub a {
    text-decoration: none !important; border-bottom: 0 !important; }
  .c-link { color: #1d4ed8; }
  .c-link:hover { color: #1d4ed8; }

  /* ---------- ③ 数字统一等宽（tabular）：多行数字右边界对齐才不散 ---------- */
  .mc-v, .rc-met b, .rcd-met b, .mc-node .xp-v,
  .tbl td, .c-num, .chebi-t1 td, .chebi-t2 td { font-variant-numeric: tabular-nums; }

  /* ---------- ④ 主站卡：序号弱化 + 公司名主视觉 + 金额高亮条 ---------- */
  .mc { padding: 12px 12px 11px; }
  .mc-hd { align-items: baseline; gap: 7px; }
  .mc-no { min-width: 0; height: auto; padding: 0; background: none; border-radius: 0;
    color: #a9b4c6; font-size: 11px; font-weight: 700; letter-spacing: .3px; }
  .mc-name { font-size: 15px; font-weight: 650; line-height: 1.32; letter-spacing: .1px; }
  .mc-st { margin-top: 6px; gap: 4px 7px; }

  /* 字段区：标签列改固定轨道 + grid 对齐（原 flex + min-width 浮动会让值列左边界跳动）。
     ⚠️ 轨道必须用 px 且够宽：「会计师事务所」是最长标签（6 字 × 11.5px ≈ 69px），
     4.9em(64px) 装不下 → 标签会压到值列上（实测出现「会计师事务所容诚」粘连）。 */
  .mc-rows { margin-top: 9px; }
  .mc-row { display: grid; grid-template-columns: 74px minmax(0, 1fr); gap: 9px;
    align-items: baseline; padding: 5px 0; border-bottom: 1px solid #f1f4fa;
    font-size: 13px; line-height: 1.42; }
  .mc-k { min-width: 0; font-size: 11.5px; letter-spacing: .2px; }
  .mc-v { font-size: 13px; color: #1f2b3d; }
  /* 金额 = 卡片的主数字：浅蓝底高亮条（原来和「注册地」一个样式，毫无主次）。
     负 margin 让高亮底向外扩 8px，同时 padding 抵掉 → 金额行的「值」左边界
     与其它字段行严格对齐（否则整列会右移一个内边距）。 */
  .mc-row.mc-amt { border-bottom: 0; background: #f0f6ff; border-radius: 10px;
    margin: 5px -8px 6px; padding: 7px 8px; }
  .mc-row.mc-amt .mc-k { color: #6b8cbc; }
  .mc-row.mc-amt .mc-v { font-size: 16px; font-weight: 700; color: #1d4ed8;
    letter-spacing: .3px; }

  /* 「展开详情」summary：浅灰填充行 + 三段式（动作 / 内容提示 / 箭头） */
  .mc-more { margin-top: 9px; }
  .mc-more > summary { justify-content: flex-start; gap: 8px; min-height: 42px;
    border: 0; border-radius: 11px; background: #f2f6fb; color: #53627b;
    font-size: 12.5px; font-weight: 600; }
  .mc-more > summary .mct-l { flex: 0 0 auto; }
  .mc-more > summary .mct-s { flex: 1 1 auto; min-width: 0; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap;
    font-weight: 400; font-size: 11px; color: #9aa6ba; }
  .mc-more > summary .mfc { flex: 0 0 auto; }
  .mc-more[open] > summary { background: #e9f1ff; color: #2f6fed; }
  .mc-node-h { margin: 11px 0 6px; font-size: 11.5px; font-weight: 600;
    color: #53627b; letter-spacing: .2px; }
  /* 保持 2 列固定轨道（auto-fit 在 350px 容器里会算出 3 列，格子太窄且与
     表格展开带的 2 列不一致），只收紧间距。 */
  .mc-node .xp-grid { gap: 6px; }
  .mc-node .xp-cell { background: #f6f9fd; border: 1px solid rgba(16, 32, 64, .05);
    border-radius: 9px; padding: 6px 9px; }
  .mc-node .xp-k { font-size: 10.5px; margin-bottom: 2px; }
  .mc-node .xp-v { font-size: 13px; color: #1f2b3d; }

  /* ---------- ⑤ 排名卡：名次 + 机构名 + 等宽指标网格 ---------- */
  .rc { padding: 12px 12px 11px; gap: 10px; align-items: flex-start; }
  .rc-no { min-width: 26px; height: 26px; background: #eef2f8; color: #8e9aad;
    border-radius: 9px; font-size: 12px; font-weight: 700; }
  /* 前三名：淡金渐变底 + 金属名次，不用整块色块（更克制） */
  .rc-top { background: linear-gradient(180deg, #fffaef, #fff 62%); }
  .rc-top .rc-no { background: linear-gradient(135deg, #f8d071, #e79c17); color: #fff;
    box-shadow: 0 2px 7px -2px rgba(206, 143, 14, .6); }
  .rc-name { font-size: 15px; font-weight: 650; line-height: 1.3; }
  .rc-mets { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr);
    gap: 6px; margin-top: 9px; }
  .rc-met { display: flex; flex-direction: column; gap: 3px; padding: 7px 9px;
    background: #f6f9fd; border-radius: 10px; font-size: 10.5px; color: #97a3b7;
    letter-spacing: .2px; }
  .rc-met i { font-style: normal; }
  .rc-met b { font-size: 15px; font-weight: 700; color: #1f2b3d; line-height: 1.15; }
  .rc-met a { display: inline-flex; min-height: 0; padding: 0; background: none; }
  .rc-met a b { color: #1d4ed8; }

  /* ---------- ⑥ 排名明细卡 ---------- */
  .rcd { padding: 12px 12px 11px; }
  .rcd-hd { align-items: baseline; }
  .rcd-no { min-width: 0; height: auto; padding: 0; background: none; border-radius: 0;
    color: #a9b4c6; font-size: 11px; font-weight: 700; letter-spacing: .3px; }
  .rcd-name { font-size: 14.5px; font-weight: 650; }
  .rcd-mets { gap: 5px 7px; margin-top: 8px; }
  .rcd-met { padding: 4px 8px; background: #f6f9fd; border-radius: 8px;
    font-size: 10.5px; color: #97a3b7; }
  .rcd-met b { font-size: 12.5px; color: #1f2b3d; }
  .rcd-met.amt { background: #f0f6ff; color: #6b8cbc; }
  .rcd-met.amt b { color: #1d4ed8; font-weight: 700; }

  /* ---------- ⑦ 表格类页（撤否率 / 透视）：紧凑 + 数字右对齐 ----------
     ⚠️ 实测校准：v108 的表格平均行高已是 34px，v109 初版把 .chebi-* td 的 padding
     从 7px 提到 9px，行高反而涨到 37px（「优化」成了倒退）。这里按实测压到 6px，
     目标 ≤32px，比 v108 更紧。 */
  .tbl th, .tbl td { padding: 7px 7px; }
  .tbl td { line-height: 1.45; }
  .chebi-t1 td, .chebi-t2 td, .chebi-dt td { padding: 6px 8px; }
  .chebi-t1 .c-metric { text-align: left; padding-left: 10px; color: #66748c; }
  .chebi-toolbar-t { font-size: 13.5px; letter-spacing: -.2px;
    border-left-width: 3px; padding-left: 7px; line-height: 1.45; }
  .chebi-h3 { font-size: 14.5px; line-height: 1.45; }
  /* 「在途项目明细 中信证券（按…降序）」+「× 收起明细」原本一行挤成两行断句
     （「收起／明细」被折断）→ 手机端改纵向堆叠、按钮按内容宽左对齐。 */
  .chebi-hrow { flex-direction: column; align-items: flex-start; gap: 8px; }

  /* ---------- ⑧ 长脚注（排名页/透视页）默认收起，点「口径说明」展开 ----------
     用原生 <details>（零观察器，不引入 v107 那类自触发循环风险），
     开关状态由生成端决定：手机端不加 open（收起）、桌面端加 open（常显）。 */
  .note-fold > summary.note-toggle {
    display: inline-flex; align-items: center; gap: 5px; list-style: none;
    margin: 10px 0 2px; min-height: 36px; padding: 0 14px; border: 0;
    border-radius: 999px; background: #f2f6fb; color: #5a6a84;
    font: inherit; font-size: 11.5px; font-weight: 600; cursor: pointer; }
  .note-fold > summary.note-toggle::-webkit-details-marker { display: none; }
  /* 箭头用伪元素画，展开时翻转 —— 原来把「▾」写进文字里，展开后不会变向，
     用户看不出这个按钮当前是开是关 */
  .note-fold > summary.note-toggle::after { content: "▾"; font-size: 10px;
    color: #8e9aad; transition: transform .15s ease; }
  .note-fold[open] > summary.note-toggle::after { transform: rotate(180deg); }
  .note-fold[open] > summary.note-toggle { background: #e9f1ff; color: #2f6fed; }
  .note-fold[open] > summary.note-toggle::after { color: #2f6fed; }
  .note-fold > .chebi-note { margin: 6px 0 4px; }
  .chebi-note { font-size: 11px; line-height: 1.62; color: #93a0b3; }

  /* ---------- ⑨ 卡片头：标题与「导出」同行，省掉一整个折行 ---------- */
  .card-head { flex-wrap: nowrap; align-items: center; }
  .card-head h2 { flex: 1 1 auto; min-width: 0; font-size: 14.5px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .head-actions { flex: 0 0 auto; width: auto; flex-wrap: nowrap; }
  .head-actions .btn-minor { min-height: 36px; padding: 7px 12px; font-size: 12.5px; }

  /* ---------- ⑩ 卡片状态行：chip + 日期小字的分层 ---------- */
  .mc-st .prog-date, .mc-st .iss-date { font-size: 11px; color: #7b889c; }
  .mc-st .chip { font-size: 11.5px; padding: 2px 9px; border-radius: 999px; }
  /* 「受理 2026-04-24 已问询」—— 日期块紧跟的交易所登记状态中间补一个分隔点，
     否则两段语义不同的文字连读成一串（.prog-date 是 block，其后就是该 span）。 */
  .mc-st .prog-date + span::before { content: "·"; margin: 0 6px; color: #c3ccd9; }
  .mob-hint { font-size: 11px; color: #93a0b3; margin: 3px 0 6px; }
  /* 卡片间距 8→10：v109 卡片带阴影，8px 显挤 */
  .mc, .rc, .rcd { margin-bottom: 10px; }

  /* ---------- ⑪ 折叠壳层再收一档：三张折叠卡（时间穿越/筛选维度/筛选与节点检索）
     改前每个 = 卡内边距 23 + 折叠头 42 + 卡间距 16 ≈ 81px，三张 243px 全在首屏。
     内边距压到 8/10、折叠头 40 → 单个 ≈ 71px，首卡再上移 30px。 ---------- */
  .asof-card, .dims-card { padding: 8px 10px 9px; }
  .mob-folds > .mob-fold-head { min-height: 40px; margin-bottom: 5px; }
  .mob-folds { margin-bottom: 0; }

  /* ⚠️ .tabs-type 自己也带 .card（class="card tabs-type"），上面 ① 段的
     `.card{padding:11px 12px 12px}` 特异性相同且更靠后 → 会把 pill 区的
     上下内边距从 5 顶回 23，整块高度 48 变 61。这里用双类名压回去。 */
  .tabs-type.card { padding: 5px 10px; }

  /* ---------- ⑫ 排名页维度 tabs：6 个按钮原折 2 行（44px×2 ≈ 107px）→ 单行 pill ---------- */
  .rank-tabs { flex-wrap: nowrap; overflow-x: auto; gap: 6px; padding: 5px 10px;
    scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; }
  .rank-tabs::-webkit-scrollbar { display: none; }
  .rank-tabs button { flex: 0 0 auto; scroll-snap-align: start;
    min-height: 36px; padding: 8px 14px; font-size: 13px; border-radius: 999px; }

  /* ---------- ⑬ 顶栏「返回主站」：由灰蓝实心块改细描边胶囊（v107 是 44px 实心块，
     在深蓝底上像一个按钮砖，视觉很重） ---------- */
  .brand .sub a { min-height: 26px; padding: 0 11px; border-radius: 999px;
    background: rgba(255, 255, 255, .07);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .3);
    letter-spacing: .2px; }

  /* ---------- ⑭ 透视页引导区：说明收 1 行、按钮降一档、空状态去虚线（v109 观感统一） ---------- */
  .pf-hint { font-size: 10.5px; line-height: 1.5; display: -webkit-box;
    -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
  .pf-panel-head { gap: 6px; }
  .pf-panel-ops .btn-minor { min-height: 38px; padding: 8px 12px; font-size: 12.5px; }
  .pf-empty { border: 0; border-radius: 14px; padding: 30px 18px;
    background: #f6f9fd; font-size: 12.5px; line-height: 1.95; }
}

/* =========================================================================
   v110 手机端首页布局微调（≤600px）
   ① 去掉「导出」按钮：手机上导出 CSV 无使用场景，且它会把操作条撑成一整条空带
      （桌面端保留，页面 DOM 不变，只是手机端 display:none）。
   ② 关键字检索栏从折叠体里提出来，常驻在「筛选与节点检索」折叠头右侧 ——
      原本想搜公司必须先展开折叠，动线多两步。
   ③ 时间穿越 × 筛选维度 左右并排一行：原本上下两张卡（各 8px 外边距 + 内边距），
      首屏被吃掉两条；并排后省出一整行的高度。
   结构由 app.js 的 v107 折叠 IIFE 注入（.mob-row2 / .mob-fbar / .mob-fq），
   桌面端这些容器是普通块级流或 display:none，零影响。
   ========================================================================= */
@media (max-width: 600px) {
  /* ---------- ① 移除导出按钮 ---------- */
  #exportCsv { display: none; }

  /* ---------- ② 折叠头 + 搜索框同排 ---------- */
  .mob-fbar { display: flex; align-items: center; gap: 6px; margin: 0 0 6px; }
  .mob-fbar > .mob-fold-head { flex: 1 1 auto; min-width: 0; margin: 0; min-height: 44px; }
  /* 折叠头在半宽下必须禁止 label 折行：并排后「筛选维度」被折成
     「筛 / 选维 / 度」三行、卡片被撑到 80px，与左侧卡不等高很难看。
     label 固定宽度后，压缩交给摘要 .mfs（它自带 ellipsis）。 */
  .mob-fold-head { padding: 0 10px; gap: 8px; }
  .mob-fold-head > span:first-child { white-space: nowrap; }
  .mob-fq { flex: 0 0 40%; min-width: 0; display: flex; }
  /* 移出 .filters 后不再继承 .filters input 的边框/底色，这里补齐；
     min-width 也要压掉（基础层 #fQ 是 180px，半宽下会把整行顶破） */
  .mob-fq #fQ { flex: 1 1 auto; min-width: 0; width: 100%; min-height: 44px;
    padding: 0 11px; border: 1px solid var(--line); border-radius: 11px;
    background: #fff; color: var(--text); font-size: 16px; }
  /* placeholder 用 13px：139px 宽的框里 16px 会把「机构」的「构」切掉半个；
     input 自身仍是 16px（iOS 上 <16px 会触发页面自动缩放），只缩占位文案。 */
  .mob-fq #fQ::placeholder { font-size: 13px; color: #9aa7ba; }
  .mob-fq #fQ:focus { border-color: var(--blue); outline: none; }

  /* ---------- ③ 时间穿越 × 筛选维度 左右并排 ---------- */
  .mob-row2 { display: flex; flex-wrap: wrap; align-items: flex-start;
    gap: 6px; margin: 8px 0; }
  .mob-row2 > .card { flex: 1 1 calc(50% - 3px); min-width: 0; margin: 0; }
  /* 点开的那张独占整行（半宽下内部控件会挤成一团），另一张换行到它下面 */
  .mob-row2 > .card.mf-open { flex: 1 1 100%; }
  .mob-row2 > .asof-card, .mob-row2 > .dims-card { padding: 6px 8px 8px; }
  .mob-row2 .mob-folds { margin: 0; }
}
