/* 信号挖掘 / 持仓监控 / 情绪周期 视图样式 */
.view-subnote { color: var(--muted); font-size: 13px; margin: 0 0 12px; }

/* 工具切换 chips */
.tool-switcher { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.tool-chip {
  display: flex; gap: 8px; align-items: center;
  padding: 8px 14px; border: 1px solid var(--line-strong); border-radius: 999px;
  background: var(--surface); color: var(--ink); cursor: pointer; font: inherit;
}
.tool-chip:hover { border-color: var(--line); }
.tool-chip.is-active {
  border-color: var(--red); font-weight: 600;
  background: color-mix(in srgb, var(--red) 8%, var(--surface));
}
.chip-count { color: var(--muted); font-size: 12px; }

/* 分类 / 状态 chips */
.tag-chip {
  display: inline-block; padding: 2px 8px; border-radius: 6px; font-size: 12px;
  background: var(--surface-soft); color: var(--muted); border: 1px solid var(--line);
}
.tag-break { color: var(--red); }
.tag-pre { color: var(--amber); }
.tag-board { color: var(--magenta); }
.tag-await { color: var(--blue); }
.tag-trend { color: var(--green); }

.state-chip {
  display: inline-block; padding: 2px 8px; border-radius: 6px; font-size: 12px;
  border: 1px solid var(--line); color: var(--muted);
}
.state-stop { color: #fff; background: var(--red); border-color: var(--red); font-weight: 600; }
.state-take { color: #fff; background: var(--amber); border-color: var(--amber); font-weight: 600; }
.state-warn { color: var(--amber); border-color: var(--amber); }
.state-good { color: var(--green); border-color: var(--green); }

/* 情绪周期 hero */
.mood-hero {
  padding: 16px 18px; border: 1px solid var(--line); border-radius: 12px;
  background: var(--surface); margin-bottom: 14px;
}
.mood-hero-top { display: flex; gap: 14px; align-items: baseline; flex-wrap: wrap; }
.mood-stage { font-size: 20px; font-weight: 700; }
.mood-score { color: var(--muted); }
.mood-trend { color: var(--muted); font-size: 13px; }
.mood-advice { margin: 10px 0 4px; }
.mood-hint { margin: 0; color: var(--muted); font-size: 12px; }

.bar-cell { color: var(--red); letter-spacing: 1px; font-size: 12px; }

.signals-table td.strength, .positions-table td.strength { font-weight: 600; }

/* 信号挖掘: 子标题 */
.compact-heading { margin: 6px 0 8px; }
.sub-title { font-size: 14px; font-weight: 600; color: var(--muted); margin: 0; }

/* 持仓监控: 近7日走势条(红涨绿跌) */
.trend-wrap { padding: 4px 8px; min-width: 250px; }
.trend-strip { display: flex; gap: 2px; flex-wrap: nowrap; }
.trend-strip { flex-direction: column; align-items: flex-start; gap: 2px; }
.trend-strip-row { display: flex; gap: 2px; min-height: 18px; }
.trend-cell {
  flex: 0 0 auto; font-size: 10.5px; line-height: 1.4; padding: 1px 3px; border-radius: 4px;
  background: var(--surface-soft); border: 1px solid var(--line); white-space: nowrap;
}
.trend-up { color: var(--red); border-color: color-mix(in srgb, var(--red) 30%, var(--line)); }
.trend-down { color: var(--green); border-color: color-mix(in srgb, var(--green) 30%, var(--line)); }
.trend-flat { color: var(--muted); }
/* 前端缓存提示 */
.cache-hint {
  margin: 0 0 10px; padding: 6px 10px; border-radius: 8px;
  background: var(--surface-soft); border: 1px dashed var(--line);
  color: var(--muted); font-size: 12px;
}
/* 每个页面的「数据更新时间」（数据本身，读业务表 created_at/updated_at；不是浏览器缓存时间） */
.data-freshness {
  margin: 0 0 6px; padding: 6px 10px; border-radius: 8px;
  background: color-mix(in srgb, var(--green) 8%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--green) 26%, var(--line));
  color: var(--text); font-size: 12px; font-variant-numeric: tabular-nums;
}

/* 表头排序箭头 */
.data-table th.sortable { cursor: pointer; user-select: none; white-space: nowrap; }
.data-table th.sortable::after { content: "⇅"; margin-left: 4px; font-size: 10px; opacity: .35; }
.data-table th.sortable:hover { color: var(--red); }
.data-table th.sort-asc::after { content: "▲"; opacity: .95; color: var(--red); }
.data-table th.sort-desc::after { content: "▼"; opacity: .95; color: var(--red); }

/* 情绪周期: 柱状列收紧(否则 '██████████' 撑宽该列, 破坏列宽均衡) */
.mood-table { table-layout: fixed; min-width: 1000px; }
.mood-table .stage-cell { font-weight: 600; white-space: nowrap; }
.mood-table .bar-cell { font-size: 9px; letter-spacing: 0; white-space: nowrap; }

/* ── 板块主力资金流入/流出排名（热门板块页，榜单表之前）──────
   配色对齐参考图：左红=净流入 / 右绿=净流出；数据取自该页 data.ranking（同一日期与口径）。 */
.fund-rank {
  margin: 12px 0 14px; padding: 12px 14px 10px;
  border: 1px solid var(--line-strong); border-radius: 12px; background: var(--surface);
}
.fund-rank-title { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:10px; }
.fund-rank-title .sub-title { margin:0; }
.fund-rank-date { color:var(--muted); font-size:11.5px; }
.fund-rank-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.fund-rank-side { border:1px solid; border-radius:10px; overflow:hidden; }
.fund-rank-side.inflow { border-color:#e7b6b3; background:#fff5f4; }
.fund-rank-side.outflow { border-color:#a9d5c6; background:#f2fbf7; }
.fund-rank-side-head { display:flex; align-items:center; gap:7px; padding:9px 11px; border-bottom:1px solid; }
.fund-rank-side.inflow .fund-rank-side-head { color:#c9443d; border-color:#efd0cd; }
.fund-rank-side.outflow .fund-rank-side-head { color:#177b61; border-color:#c8e5da; }
.fund-rank-dot { width:9px; height:9px; border-radius:50%; background:currentColor; }
.fund-rank-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 11px; border-bottom:1px solid rgba(110,120,115,.12); }
.fund-rank-row:last-child { border-bottom:0; }
.fund-rank-row.is-clickable { cursor:pointer; }
.fund-rank-row.is-clickable:hover { background:rgba(201,68,61,.06); }
.fund-rank-row.is-current { background:rgba(201,68,61,.10); }
.fund-rank-sector { display:flex; align-items:center; gap:7px; min-width:0; }
.fund-rank-sector strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.fund-rank-rank-n { width:22px; flex:none; text-align:center; color:var(--muted); }
.fund-rank-tag { padding:1px 5px; border:1px solid var(--line); border-radius:4px; color:var(--muted); font-size:10px; white-space:nowrap; background:rgba(255,255,255,.65); }
.fund-rank-value { flex:none; font-weight:650; font-variant-numeric:tabular-nums; white-space:nowrap; }
.fund-rank-side.inflow .fund-rank-value { color:#c9443d; }
.fund-rank-side.outflow .fund-rank-value { color:#177b61; }
.fund-rank > .lc-note { margin:9px 1px 0; }
@media (max-width:900px) { .fund-rank-grid { grid-template-columns:1fr; } }

/* ── 涨停聚焦 / 涨停未封 */
.board-badge {
  display: inline-block; padding: 2px 8px; border-radius: 6px; font-size: 12px;
  border: 1px solid var(--line); color: var(--muted); white-space: nowrap;
}
.board-1 { color: var(--muted); }
.board-2 { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 35%, var(--line)); }
.board-3 { color: var(--amber); border-color: color-mix(in srgb, var(--amber) 40%, var(--line)); }
.board-hot { color: #fff; background: var(--red); border-color: var(--red); font-weight: 600; }
.board-none { color: var(--muted); }
.sector-chip {
  display: inline-block; margin: 0 6px 4px 0; padding: 2px 8px; border-radius: 6px;
  font-size: 12px; background: var(--surface-soft); border: 1px solid var(--line); color: var(--ink);
}
.zt-table { table-layout: fixed; }
.zt-table th, .zt-table td { white-space: nowrap; }
.zt-stock-sector { display:block; max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--muted); font-size:10.5px; line-height:1.25; }
.zt-table.reason-sticky .stock-cell { min-width:0; }
/* 列宽由 JS 的 colgroup 指定(见 zt-view.js 的 COL_W)。
   为什么必须 fixed+colgroup: table-layout:auto 下，宽屏富余宽度会按内容宽度比例分给最宽的列，
   「股票」列被撑出大片空白 → 与「板块」之间出现明显大空档(用户2026-09-19反馈"贴紧一点，
   和强度↔涨幅差不多")；而且 auto 下给 td 设 width 会被内容的 max-content 顶回去(实测无效)。 */
/* ⚠️ tracking.css 里有条**全站**规则 `.stock-cell { min-width: 120px }`，
   min-width 优先于 colgroup 的 width → 股票列会被顶到 120px，白改一场(实测踩到)。
   zt 表要按 colgroup 走，这里明确放开。 */
.zt-table .stock-cell { min-width: 0; }
.zt-table .reason-cell { white-space: normal; min-width: 0; max-width: none; line-height: 1.5; color: #505953; }
/* 类型标签：纵向排列，每排一个；超过4个自动换到下一列 */
.zt-table .seal-type-cell { white-space: normal; padding-top: 7px; padding-bottom: 3px; }
.seal-type-grid {
  display: grid; grid-auto-flow: column; grid-template-rows: repeat(4, auto);
  gap: 2px 4px; justify-content: start; align-content: start;
}
.seal-tag {
  display: inline-block; padding: 0 4px; border-radius: 3px; font-size: 10.5px; line-height: 15px;
  border: 1px solid var(--line); color: var(--muted); background: var(--surface-soft); white-space: nowrap;
  text-align: center;
}
.seal-tag-base { color: #294867; border-color: color-mix(in srgb, #294867 30%, var(--line)); font-weight: 600; }
.zt-table .trend-wrap { min-width: 0; }
/* ⚠️ 首列对齐（用户 2026-10-11：「所有的第一列股票都和后面的没有对齐」）：
   股票格是 3 行(名称/代码/板块)的 flex 列，其它列只有 1 行；默认的 vertical-align:middle
   会让单行单元格正好落在**中间那行(代码)**上 ⇒ 股票名称在上方、板块在下方，与后面每一列都错开。
   统一 top 对齐后，股票名称 / 强度 / 涨幅 … 的首行落在同一条水平线上，代码与板块作为次级行往下排。 */
.zt-table td, .lhb-table td, .dt-table td { vertical-align: top; }
/* ⚠️ tracking.css 有一条**全局** `.stock-cell{display:flex;flex-direction:column}`。
   td 一旦是 flex 容器就不再是 table-cell ⇒ 高度只按内容撑开(70px)而不跟随整行(75px)，
   于是「股票」格的底部分割线比「强度」等列高 4px（用户 2026-10-11：「第一行股票和强度
   下面有一条分割线，两列未对齐」）。以下各表改回 table-cell + 内部块级堆叠即可对齐。
   ⚠️ 新表必须**逐个补进来**：漏掉的表会重现同一个错位（用户 2026-10-11 又报了
   「持仓监控 和 清仓走势 股票最下方的分割符和第二列未对上」——就是当时漏了这两张表）。 */
.zt-table .stock-cell, .lhb-table .stock-cell, .dt-table .stock-cell,
.positions-table .stock-cell, .cleared-table .stock-cell, .tracking-table .stock-cell,
.history-leaders-table .stock-cell { display: table-cell; }
.zt-table .stock-cell > span, .lhb-table .stock-cell > span, .dt-table .stock-cell > span,
.positions-table .stock-cell > span, .cleared-table .stock-cell > span,
.tracking-table .stock-cell > span, .history-leaders-table .stock-cell > span {
  display: block; line-height: 1.35;
}
/* ⚠️ 全局 `.trend-wrap{min-width:250px}` 是给「持仓监控」用的；龙虎榜/跌停跟踪用的是 auto 布局，
   没有覆盖时「近1周走势」列会被强制撑到 250px，而同行的近6周/近6月 走 .monthly-trend-wrap{min-width:0}
   ⇒ 只有 88px，两列之间出现大间隔（用户 2026-10-11 反馈「和近6周间隔较大，建议贴合」）。 */
.lhb-table .trend-wrap, .dt-table .trend-wrap { min-width: 0; }
.monthly-trend-wrap { min-width: 0; }
.monthly-trend-strip { flex-direction: column; flex-wrap: nowrap; align-items: flex-start; gap: 2px; min-width: 0; }
.monthly-trend-strip .trend-cell { font-size: 10px; padding-left: 3px; padding-right: 3px; }

/* ── 涨停聚焦/涨停未封 有20列: 只压**纵向**节奏 ──
   横向 padding 已由 styles.css 全站统一为 8px, 这里不再单独覆盖
   (原先写 4px, 与其它 Tab 不一致 → 用户反馈"有的空隔大有的空隔小") */
.zt-table th { height: 28px; padding-top: 5px; padding-bottom: 5px; font-size: 10.5px; }
.zt-table td { padding-top: 7px; padding-bottom: 7px; font-size: 12px; }
.zt-table.reason-sticky th, .zt-table.reason-sticky td { padding-left:4px; padding-right:4px; }
.zt-table.reason-sticky .reason-cell {
  min-width:0; max-width:none; white-space:normal; line-height:1.3; font-size:10.5px;
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:4; overflow:hidden;
}
/* 所属板块列: 弱化处理(灰字小一号), 不跟股票名抢视觉; 最长行业名10字≈136px */
.zt-table .industry-cell { color: var(--muted); font-size: 11.5px; }

/* ── 涨停板块图（2026-09-22 用户要求：涨停聚焦列表前面加"按板块分析的涨停图"，可每日切换）──
   纯 HTML 卡片网格，不是图片；配色沿用既有 .board-badge（红底=4板+），与参考图观感一致。 */
.zt-map { margin: 4px 0 8px; padding: 12px 14px 10px; border: 1px solid var(--line); background: var(--surface); }
.zt-map-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: 10px; margin-bottom: 9px; }
.zt-map-title { margin: 0; font-size: 14px; font-weight: 700; }
.zt-map-sum { color: var(--muted); font-size: 12px; }
.zt-map-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }
.zt-map-chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 9px; border: 1px solid var(--line-strong); border-radius: 999px;
  background: var(--surface-soft); font-size: 12px; white-space: nowrap;
}
.zt-map-chip b { font-weight: 700; }
.zt-map-chip-n { color: var(--muted); font-variant-numeric: tabular-nums; }
.zt-map-chip-b { color: #fff; background: var(--red); border-radius: 999px; padding: 0 6px; font-size: 11px; font-weight: 700; }
.zt-map-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(272px, 1fr)); gap: 10px; }
.zt-map-board {
  /* 每个题材独立识别：低饱和彩色外围，不给整块内容铺高亮，减少视觉疲劳 */
  --zt-accent: #6d8fb3;
  border: 1px solid color-mix(in srgb, var(--zt-accent) 48%, var(--line));
  border-left: 4px solid var(--zt-accent);
  border-radius: 8px;
  background: var(--surface-soft);
  box-shadow: 0 1px 4px color-mix(in srgb, var(--zt-accent) 12%, transparent);
  overflow: hidden;
}
.zt-map-board:nth-child(6n + 2) { --zt-accent: #7f9f7a; }
.zt-map-board:nth-child(6n + 3) { --zt-accent: #b18b62; }
.zt-map-board:nth-child(6n + 4) { --zt-accent: #927caf; }
.zt-map-board:nth-child(6n + 5) { --zt-accent: #b27b7b; }
.zt-map-board:nth-child(6n + 6) { --zt-accent: #5f9b9b; }
.zt-map-board:nth-child(6n + 7) { --zt-accent: #788bb0; }
.zt-map-board-head {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 6px 10px;
  border-bottom: 1px solid color-mix(in srgb, var(--zt-accent) 32%, var(--line));
  background: color-mix(in srgb, var(--zt-accent) 9%, var(--surface));
}
.zt-map-board-name { font-size: 13px; font-weight: 700; color: color-mix(in srgb, var(--zt-accent) 72%, var(--ink)); }
.zt-map-board-stat { color: var(--muted); font-size: 11.5px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.zt-map-items {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
  padding: 8px 10px 10px;
}
.zt-map-item {
  display: flex; flex-direction: column; align-items: flex-start; gap: 3px;
  min-width: 0; padding: 5px 7px; border: 1px solid var(--line); border-radius: 6px;
  background: var(--surface);
  overflow: hidden;
}
.zt-map-item-meta {
  display: flex; align-items: center; justify-content: space-between; gap: 4px;
  width: 100%; min-width: 0; line-height: 1.2;
}
.zt-map-time {
  flex: 0 0 auto; color: var(--muted); font-size: 10px;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.zt-map-stock {
  display: block; width: 100%; min-width: 0; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; font-size: 12px; font-weight: 600;
}
.zt-map-item .board-badge {
  flex: 0 1 auto; min-width: 0; max-width: 70px; overflow: hidden;
  padding: 0 4px; font-size: 9.5px; line-height: 16px; border-radius: 4px;
  text-overflow: ellipsis; white-space: nowrap;
}
.zt-map-item-meta .board-1 { border-color: var(--line); }
.zt-map-note { margin: 10px 0 0; color: var(--muted); font-size: 11.5px; line-height: 1.6; }
/* 近七日走势: 不再刻意缩小 —— 与「推送跟踪」保持同尺寸(用户明确要求)。
   原先的 .trend-wrap/.trend-cell min-width:0、gap:1px、font-size:9px 覆盖已移除。 */
/* 最后一列吸附在右侧: 不用滑动就能看到（涨停聚焦=涨停原因 / 龙虎榜=最强游资）
   ⚠️ 必须排除行内展开行 `tr.lhb-detail-row`：它的 td 带 colSpan 且是 `:last-child`，
      不排除的话整个席位面板会被 position:sticky 抓成吸附列。 */
.zt-table.reason-sticky th:last-child,
.zt-table.reason-sticky tr:not(.lhb-detail-row) td:last-child,
.lhb-table.reason-sticky th:last-child,
.lhb-table.reason-sticky tr:not(.lhb-detail-row) td:last-child {
  position: sticky; right: 0; z-index: 2; background: var(--surface);
  box-shadow: -8px 0 10px -8px rgba(0, 0, 0, .28);
}
.zt-table.reason-sticky tbody tr:hover td:last-child,
.lhb-table.reason-sticky tr.lhb-row:hover td:last-child,
.lhb-table.reason-sticky tr.lhb-row.is-open td:last-child { background: var(--surface-soft); }
/* 龙虎榜「最强游资」：不截断文案，折 3~4 行；列宽由 colgroup 固定(90px)，这里不再设 min/max-width
   （td 的 min-width 会把固定列宽顶开）。 */
.lhb-table .dept-cell {
  white-space: normal; text-overflow: clip;
  line-height: 1.35; color: var(--muted);
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden;
}
/* 推送跟踪: 列宽固定化, 避免宽屏下"前面窄后面宽"+走势色块重叠 */
.tracking-table { table-layout: fixed; min-width: 1165px; }
.tracking-table th, .tracking-table td { white-space: nowrap; }

/* ── 推送回测 · 打板情绪矩阵（板块为行 / 连板梯队为列）──────── */
.tracking-board-matrix {
  margin: 8px 0 14px;
  border: 1px solid var(--line-strong);
  border-radius: 10px;
  background: var(--surface);
  overflow: hidden;
}
.tracking-board-title {
  display: flex; align-items: baseline; flex-wrap: wrap; gap: 10px;
  padding: 10px 12px 8px; border-bottom: 1px solid var(--line);
  background: var(--surface-soft);
}
.tracking-board-title .sub-title { margin: 0; }
.tracking-board-summary { color: var(--muted); font-size: 12px; }
.tracking-board-scroll { width: 100%; overflow-x: auto; }
.tracking-board-table {
  width: 100%; min-width: 1120px; border-collapse: separate; border-spacing: 0;
  table-layout: fixed; font-size: 12px;
}
.tracking-board-table th,
.tracking-board-table td { border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.tracking-board-table th {
  padding: 7px 8px; color: var(--muted); font-weight: 700; text-align: center;
  background: var(--surface-soft); white-space: nowrap;
}
.tracking-board-table th:first-child { width: 150px; }
.tracking-board-table th:not(:first-child) { width: 194px; }
.tracking-board-table tr:last-child td { border-bottom: 0; }
.tracking-board-table th:last-child,
.tracking-board-table td:last-child { border-right: 0; }
.tracking-board-sector {
  padding: 9px 10px; vertical-align: top;
  background: color-mix(in srgb, #7187a5 7%, var(--surface));
  border-left: 4px solid #7187a5;
}
.tracking-board-sector strong { display: block; font-size: 12.5px; color: var(--ink); line-height: 1.35; }
.tracking-board-sector span { display: block; margin-top: 4px; color: var(--muted); font-size: 10.5px; }
.tracking-board-cell { padding: 6px; vertical-align: top; background: var(--surface); }
.tracking-board-cell-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 5px;
  align-items: start;
}
@media (min-width: 1500px) {
  .tracking-board-cell-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.tracking-board-table tbody tr:nth-child(even) .tracking-board-cell {
  background: color-mix(in srgb, var(--surface-soft) 55%, var(--surface));
}
.tracking-board-stock {
  padding: 5px 6px; border: 1px solid var(--line);
  border-radius: 6px; background: var(--surface); min-width: 0;
  overflow: hidden;
}
.tracking-board-stock-name {
  display: block; width: 100%; min-width: 0; min-height: 16px;
  color: #294867; font-weight: 650; line-height: 16px;
  white-space: normal; overflow-wrap: anywhere;
}
.tracking-board-stock-quote {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  width: 100%; min-width: 0; min-height: 17px; line-height: 17px;
}
.tracking-board-pct {
  flex: 0 0 auto; font-size: 10.5px; white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.tracking-board-amount {
  flex: 0 0 auto; color: var(--muted); font-size: 10px;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.tracking-board-matrix > .lc-note { margin: 7px 11px 9px; }
.tracking-score-row { cursor: pointer; }
.tracking-score-row:hover { background: var(--surface-soft); }
.tracking-score-detail-cell { padding: 8px 12px; white-space: normal; line-height: 1.7; color: var(--muted); background: var(--surface-soft); }

/* ── 热门板块：榜单 + 六维雷达/条形 + 结构化解读 ────────────── */
.sectors-table { table-layout: fixed; }
.sectors-table th, .sectors-table td { white-space: nowrap; }
.sectors-table .sector-name { font-weight: 600; }
.sectors-table tbody tr { cursor: pointer; }
.sectors-table tbody tr.is-selected { background: #fdf2f1; }
.sectors-table tbody tr.is-selected td { box-shadow: inset 0 0 0 9999px rgba(201, 68, 61, .04); }

.sector-detail {
  margin-top: 14px; padding: 14px 16px; border: 1px solid var(--line);
  border-radius: 12px; background: var(--surface);
}
.sector-detail-head { display: flex; align-items: baseline; gap: 16px; flex-wrap: wrap; }
.sector-detail-name { margin: 0; font-size: 19px; }
.sector-score { display: flex; align-items: baseline; gap: 3px; }
.sector-score-value { font-size: 30px; line-height: 1; color: var(--red); }
.sector-score-max { font-size: 12px; color: var(--muted); }
.sector-score-delta { margin-left: 8px; font-size: 12px; }

.sector-charts { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; margin: 10px 0 4px; }
.radar-svg { width: 300px; height: 300px; flex: 0 0 auto; }
.radar-grid, .radar-axis { fill: none; stroke: var(--line); stroke-width: 1; }
.radar-area { fill: rgba(201, 68, 61, .16); stroke: var(--red); stroke-width: 1.6; }
.radar-dot { fill: var(--red); }
.radar-label { font-size: 10px; fill: var(--muted); }

.score-bars { flex: 1 1 300px; min-width: 280px; display: flex; flex-direction: column; gap: 7px; }
.score-bar-row { display: grid; grid-template-columns: 96px 1fr 40px; align-items: center; gap: 8px; }
.score-bar-label { font-size: 12px; white-space: nowrap; }
.score-bar-track { height: 14px; border-radius: 7px; background: #f0f2ef; overflow: hidden; }
.score-bar-fill { height: 100%; border-radius: 7px; transition: width .3s; }
.score-bar-value { font-size: 12px; font-weight: 700; text-align: right; font-variant-numeric: tabular-nums; }

.sector-raw { margin: 6px 0 4px; font-size: 11.5px; color: var(--muted); line-height: 1.6; }

.analysis-box {
  margin-top: 8px; padding: 10px 12px; border-left: 4px solid var(--line-strong);
  border-radius: 8px; background: var(--surface-soft);
}
.analysis-box.level-danger { border-left-color: var(--red); background: #fdf1f0; }
.analysis-box.level-warn { border-left-color: var(--amber); background: #fdf8ec; }
.analysis-box.level-good { border-left-color: var(--green, #2f7d4f); background: #f2f8f3; }
.analysis-verdict { margin: 0 0 6px; font-size: 14px; font-weight: 700; }
.analysis-reasons { margin: 0 0 6px; padding-left: 18px; font-size: 12px; line-height: 1.65; }
.analysis-hint { margin: 0; font-size: 12px; color: #4a5a4f; }

.sector-trend-title { margin: 10px 0 2px; font-size: 12px; color: var(--muted); }
.sector-trend-svg { width: 100%; max-width: 460px; height: 92px; }
/* 板块下拉：宽度**定死**再省略。原因：select 的宽度默认由"最长选项"决定
   （本站最长是「开采专业及辅助性活动（34.2）」≈204px），而选中项往往短得多
   （「公共设施管理业（69.7）」≈130px）→ 文字与 ▾ 之间留出一大段空隙，观感很差。
   定宽后箭头紧贴文字，长名字自动省略号。 */
.sectors-view .industry-select {
  width: 182px; max-width: 182px; text-overflow: ellipsis;
}
.sectors-view .metric-select { width: 96px; }
.sectors-view .axis-select { width: 104px; }
.sectors-view .kind-select { width: 168px; }
.sector-table-title { margin: 18px 0 6px; font-size: 13px; font-weight: 600; color: var(--muted); }

/* ── 板块分析 · 个股机会（龙头 / 低位待启动）── */
.picks-wrap { margin: 8px 0 2px; }
.pick-group { margin-bottom: 8px; }
.pick-group-title { margin: 8px 0 4px; font-size: 12.5px; color: var(--ink); }
.pick-group-sub { font-size: 11.5px; color: var(--muted); font-weight: 400; }
.picks-table { table-layout: fixed; width: 100%; }
.picks-table th, .picks-table td { font-size: 12px; padding: 5px 6px; vertical-align: top; }
.picks-table th { font-weight: 600; }
.picks-table .pick-name { white-space: nowrap; }
.pick-code { color: var(--muted); font-size: 11px; font-weight: 400; }
.picks-table .pick-mid { color: var(--muted); }
.picks-table .pick-hint { line-height: 1.55; color: #3d4a42; }
.pick-note { margin: 3px 0; font-size: 11.5px; color: #8a6d3b; }

/* 资金流·多周期（同花顺口径）条形列表 */
.fundp-wrap { margin: 6px 0 2px; }
.fundp-row {
  display: grid; grid-template-columns: 52px 1fr 74px 150px;
  gap: 8px; align-items: center; margin: 3px 0; font-size: 12px;
}
.fundp-label { color: var(--muted); white-space: nowrap; }
.fundp-track { height: 12px; background: #f1f3f0; border-radius: 6px; overflow: hidden; }
.fundp-bar { display: block; height: 100%; border-radius: 6px; }
.fundp-val { text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; }
.fundp-io { color: var(--muted); font-size: 11.5px; white-space: nowrap; }

/* 板块内部结构样式已移除：页面保留板块详情、资金流排名与榜单。 */
/* 折线 + 柱状并排 (withBars：情绪周期等多指标页) -- 左折线右柱状各占一半 */
.lc-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 900px) { .lc-row { grid-template-columns: 1fr; } }
.lc-half { min-width: 0; }
.lc-half-cap {
  margin: 0 0 2px; font-size: 11.5px; color: var(--muted); text-align: center;
}
.lc-bars { position: relative; }

/* ── 诊股面板（diagnose）──────────────────────────────────── */
.diagnose-view .code-input {
  width: 190px; padding: 7px 10px; font-size: 14px; letter-spacing: 1px;
  border: 1px solid var(--line-strong); border-radius: 6px; background: #fff;
}
.dx-card {
  background: var(--card); border: 1px solid var(--line);
  border-radius: 10px; padding: 12px 14px; margin: 10px 0;
}
.dx-card-title { margin: 0 0 8px; font-size: 13px; font-weight: 700; color: var(--muted); }
.dx-chart-latest { margin: -3px 0 7px; color: var(--text); font-size: 11px; font-weight: 600; }
.dx-head { display: flex; flex-wrap: wrap; align-items: center; gap: 18px; }
.dx-title { font-size: 20px; display: flex; align-items: baseline; gap: 6px; }
.dx-code { color: var(--muted); font-size: 14px; }
.dx-date { color: var(--muted); font-size: 12px; }
.dx-tag { font-size: 11px; padding: 2px 6px; border-radius: 4px; }
.dx-tag-hot { background: #fdecea; color: #c9443d; border: 1px solid #f3c4c0; }
.dx-price { display: flex; align-items: baseline; gap: 8px; }
.dx-now { font-size: 30px; font-weight: 800; font-variant-numeric: tabular-nums; }
.dx-pct { font-size: 16px; font-weight: 700; }
.dx-metas { display: flex; flex-wrap: wrap; gap: 14px; }
.dx-meta { display: flex; flex-direction: column; font-size: 11.5px; color: var(--muted); }
.dx-meta b { font-size: 13px; color: var(--text); font-variant-numeric: tabular-nums; }
.dx-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
@media (max-width: 900px) { .dx-row { grid-template-columns: 1fr; } }
.dx-top-row > .dx-card { min-width: 0; margin-top: 0; margin-bottom: 0; }
.dx-tech-review-row > .dx-card,
.dx-signal-risk-row > .dx-card { min-width: 0; margin-top: 0; margin-bottom: 0; }
.dx-tech-review-row, .dx-signal-risk-row { align-items: stretch; margin: 10px 0; }
.dx-top-row .dx-head { align-content: flex-start; }
.dx-sector-card .dx-chips {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px;
}
.dx-sector-card .dx-chip { min-width: 0; }
@media (max-width: 1200px) {
  .dx-sector-card .dx-chips { grid-template-columns: 1fr; }
}
.dx-signal-tech-row { align-items: stretch; gap: 10px; }
.dx-signal-tech-row > .dx-card { min-width: 0; margin: 0; }
.dx-signal-tech-row .dx-signal-summary { padding: 10px 12px; }
.dx-signal-tech-row .dx-cond-list { gap: 6px; }
@media (max-width: 900px) { .dx-signal-tech-row { grid-template-columns: 1fr; } }
.dx-review-risk-row > .dx-card { min-width: 0; margin: 0; }
.dx-review-risk-row > .dx-card:first-child { padding-bottom: 10px; }
.dx-review-risk-row .dx-merged-analysis { padding: 10px 12px; }
.dx-review-risk-row .dx-merged-analysis .dx-grid { grid-template-columns: 1fr; gap: 6px; margin-bottom: 6px; }
.dx-review-risk-row .dx-merged-analysis .dx-mini { padding: 5px 8px; }
.dx-review-risk-row .dx-merged-analysis .dx-risks { margin: 3px 0 5px; line-height: 1.5; }
@media (max-width: 900px) { .dx-review-risk-row { grid-template-columns: 1fr; } }
.dx-score b { font-size: 34px; font-weight: 800; color: #c9443d; }
.dx-bars { display: flex; flex-direction: column; gap: 4px; }
.dx-bar-row { display: grid; grid-template-columns: 46px 1fr 62px; gap: 8px; align-items: center; font-size: 12px; }
.dx-bar-label { color: var(--muted); }
.dx-bar-track { height: 10px; background: #f1f3f0; border-radius: 5px; overflow: hidden; }
.dx-bar-fill { display: block; height: 100%; background: #6b8e6b; border-radius: 5px; }
.dx-bar-val { text-align: right; font-variant-numeric: tabular-nums; color: var(--muted); }
.dx-state { margin: 4px 0; font-size: 14px; }
.dx-prob { margin: 4px 0; font-size: 15px; font-weight: 700; }
.dx-verdict { margin: 2px 0 8px; font-size: 13.5px; line-height: 1.7; }
.dx-nodes { display: flex; flex-wrap: wrap; gap: 8px; }
.dx-node {
  display: flex; align-items: baseline; gap: 5px; font-size: 12px;
  border: 1px solid var(--line); border-radius: 6px; padding: 4px 8px;
}
.dx-node.up { border-color: #f3c4c0; background: #fdf6f5; }
.dx-node.down { border-color: #bfd8c6; background: #f4f9f5; }
.dx-node.warn { border-color: #e8d9a8; background: #fdfaf0; }
.dx-node-date { color: var(--muted); }
.dx-node-label { color: var(--muted); }
.dx-node-price { font-variant-numeric: tabular-nums; }
.dx-node-pct { font-variant-numeric: tabular-nums; }
.dx-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.dx-chip {
  display: flex; flex-direction: column; gap: 1px; min-width: 110px;
  border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; font-size: 12px;
}
.dx-chip.good { border-color: #bfd8c6; background: #f4f9f5; }
.dx-chip.bad { border-color: #f3c4c0; background: #fdf6f5; }
.dx-chip.warn { border-color: #e8d9a8; background: #fdfaf0; }
.dx-chip b { font-size: 12px; color: var(--muted); }
.dx-chip-val { font-size: 13.5px; font-weight: 700; }
.dx-chip-desc { font-size: 11px; color: var(--muted); }
.dx-flow { display: flex; flex-direction: column; gap: 3px; }
.dx-flow-row { display: grid; grid-template-columns: 46px 1fr 74px; gap: 8px; align-items: center; font-size: 12px; }
.dx-flow-date { color: var(--muted); }
.dx-flow-track { height: 11px; background: #f1f3f0; border-radius: 5px; overflow: hidden; }
.dx-flow-fill { display: block; height: 100%; min-width: 2px; border-radius: 5px; }
.dx-flow-val { text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; }

.dx-flow-range { display: flex; gap: 6px; margin-bottom: 6px; }
.dx-flow-range-btn { padding: 3px 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); color: var(--muted); cursor: pointer; font-size: 11px; }
.dx-flow-range-btn.is-active { color: var(--red); border-color: var(--red); background: #fff5f4; font-weight: 700; }
.dx-flow-history { position: relative; width: 100%; box-sizing: border-box; }
.dx-flow-history-chart { position: relative; width: 100%; min-height: 300px; }
.dx-flow-history-svg { width: 100%; min-width: 100%; height: 300px; display: block; overflow: visible; }
.dx-flow-zero { stroke: var(--line-strong); stroke-width: 1.2; stroke-dasharray: 5 4; }
.dx-flow-bar.positive { fill: #c9443d; opacity: .35; }
.dx-flow-bar.negative { fill: #2f7d4f; opacity: .35; }
.dx-flow-main-line { fill: none; stroke: #c9443d; stroke-width: 2; }
.dx-flow-all-line { fill: none; stroke: #2563eb; stroke-width: 1.8; }
.dx-flow-price-line { fill: none; stroke: #6b7280; stroke-width: 1.5; stroke-dasharray: 4 3; }
.dx-flow-tooltip { position: absolute; top: 8px; z-index: 5; padding: 6px 8px; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--surface); box-shadow: var(--shadow); font-size: 11px; line-height: 1.55; white-space: nowrap; pointer-events: none; }
.dx-flow-tooltip[hidden] { display: none !important; }
.dx-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 8px; }
@media (max-width: 900px) { .dx-grid { grid-template-columns: 1fr; } }
.dx-mini { display: flex; flex-direction: column; gap: 2px; border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; font-size: 12px; }
.dx-mini b { color: var(--muted); font-size: 11.5px; }
.dx-risks { margin: 4px 0 6px; padding-left: 18px; font-size: 12.5px; line-height: 1.7; color: #8a6d3b; }
.dx-action { margin: 4px 0 0; font-size: 13px; font-weight: 600; }
.detail-section-title {
  margin: 16px 0 6px; padding-left: 8px; line-height: 1.2;
  font-size: 13px; font-weight: 700; color: var(--ink);
  border-left: 3px solid var(--red);
}

/* ── 热门板块：多板块对比折线图（雷达之前）+ 多选下拉 ── */
.compare-bar {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  margin: 10px 0 6px; padding-bottom: 8px; border-bottom: 1px dashed var(--line);
}
.compare-chart { margin: 4px 0 8px; }
.compare-svg { width: 100%; height: 250px; }
/* 折线(左) + 柱状(右) 并排各占一半；窄屏自动换行堆叠 */
.compare-row { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: flex-start; }
.compare-half { flex: 1 1 420px; min-width: 320px; }
.compare-caption { margin: 2px 0 2px; font-size: 11.5px; color: var(--muted); }
.compare-legend { flex: 1 1 100%; }
.compare-grid { stroke: var(--line); stroke-width: 1; }
.compare-grid-zero { stroke: var(--line-strong); stroke-width: 1.5; }
.compare-tick { font-size: 10px; fill: var(--muted); }
.compare-line { fill: none; stroke-width: 1.9; stroke-linejoin: round; }
.compare-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 4px; font-size: 12px; }
.compare-legend-item { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.compare-legend-dot { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }

.multiselect { position: relative; display: inline-block; }
.multiselect-btn {
  padding: 5px 10px; font-size: 12px; border: 1px solid var(--line-strong);
  border-radius: 8px; background: var(--surface); color: var(--ink); cursor: pointer;
}
.multiselect-btn:hover { border-color: var(--red); color: var(--red); }
.multiselect-panel {
  position: absolute; z-index: 20; top: calc(100% + 4px); left: 0;
  min-width: 200px; max-height: 300px; overflow-y: auto;
  padding: 6px; border: 1px solid var(--line-strong); border-radius: 10px;
  background: var(--surface); box-shadow: 0 6px 20px rgba(0, 0, 0, .12);
}
.multiselect-item {
  display: flex; align-items: center; gap: 7px; padding: 4px 6px;
  font-size: 12px; border-radius: 6px; cursor: pointer; white-space: nowrap;
}
.multiselect-item:hover { background: var(--surface-soft); }

/* ── 热门板块：榜单内嵌 sparkline（四象限散点/热力日历已按用户要求移除）── */
.spark-cell { padding: 0 4px; }
.spark-svg { width: 68px; height: 18px; display: block; }
.spark-line { fill: none; stroke-width: 1.4; }

/* 跌停跟踪 */
.mk-wrap { display: inline-flex; gap: 4px; }
.mk-badge {
  display: inline-block; padding: 2px 7px; border-radius: 6px; font-size: 11px;
  border: 1px solid var(--line); color: var(--muted); white-space: nowrap;
}
.mk-main { color: #5a6b61; }
.mk-gem { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 35%, var(--line)); }
.mk-star { color: var(--amber); border-color: color-mix(in srgb, var(--amber) 40%, var(--line)); }
.mk-bse { color: #fff; background: #7a5af8; border-color: #7a5af8; }
.mk-st { color: #fff; background: var(--red); border-color: var(--red); }
.dt-table th, .dt-table td { white-space: nowrap; }
.dt-table td.center { text-align: center; }
.dt-insight-grid, .dt-profile-grid {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px;
}
.dt-profile-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.dt-insight, .dt-profile-panel {
  min-width: 0; padding: 12px 14px; border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line); background: var(--surface-soft);
}
.dt-insight-title { margin: 0 0 9px; font-size: 13px; font-weight: 700; }
.dt-compare-nums, .dt-repair-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; }
.dt-compare-item, .dt-repair-item { display: grid; gap: 2px; }
.dt-compare-item small, .dt-repair-item small { color: var(--muted); font-size: 10.5px; }
.dt-compare-item strong, .dt-repair-item strong { font-size: 18px; }
.dt-repair-item em { color: var(--muted); font-size: 10px; font-style: normal; }
.dt-insight-note { margin: 8px 0 0; color: var(--muted); font-size: 11px; }
.dt-bar-row { display: grid; grid-template-columns: minmax(72px, 1fr) minmax(80px, 2fr) 48px; gap: 7px; align-items: center; margin: 6px 0; }
.dt-bar-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11px; }
.dt-bar-track { height: 7px; overflow: hidden; background: var(--line); }
.dt-bar-fill { display: block; height: 100%; background: #6387a8; }
.dt-bar-fill.critical { background: var(--red); }
.dt-bar-fill.high, .dt-bar-fill.reason { background: var(--amber); }
.dt-bar-fill.mid { background: #5b8f78; }
.dt-bar-value { text-align: right; font-size: 11px; }
.trend-layer-filters { display:flex; flex-wrap:wrap; gap:10px; margin:8px 0 10px; }
.trend-layer-filters .filter-field { min-width:150px; }
.zt-distribution-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin:8px 0 12px; }
.zt-distribution-card { min-width:0; }
.zt-distribution-row { display:grid; grid-template-columns:128px minmax(0,1fr); gap:8px; align-items:center; margin:5px 0; }
.zt-distribution-label { font-size:11px; text-align:right; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.zt-distribution-track { position:relative; height:20px; background:var(--line); border-radius:3px; overflow:hidden; }
.zt-distribution-track .dt-bar-fill { opacity:.65; border-radius:3px; }
.zt-distribution-value { position:absolute; inset:0; padding-left:7px; display:flex; align-items:center; font-size:11px; color:var(--text); font-weight:600; }
@media(max-width:760px) { .zt-distribution-grid { grid-template-columns:1fr; } .zt-distribution-row { grid-template-columns:110px minmax(0,1fr); } }
.dt-risk { display: inline-block; min-width: 34px; padding: 2px 6px; border: 1px solid currentColor; border-radius: 5px; font-size: 10.5px; }
.dt-risk-critical { color: #b42318; background: #fff0ee; }
.dt-risk-high { color: #b45309; background: #fff7ed; }
.dt-risk-mid { color: #3f6f5e; background: #edf7f1; }
.dt-reason-cell { font-size: 11px; }
.dt-lhb-hit { color: var(--red); font-weight: 700; }
.dt-outcome-cell { max-width: 170px; overflow: hidden; text-overflow: ellipsis; font-size: 11px; }
@media (max-width: 980px) {
  .dt-insight-grid, .dt-profile-grid { grid-template-columns: 1fr; }
}

/* 龙虎榜 */
.lhb-table th, .lhb-table td { white-space: nowrap; }
/* 固定布局 + colgroup 指定列宽（见 lhb-view.js 的 COL_W）：auto 布局下列宽由**表头文字**决定
   （「竞价高开%」「机构净买(亿)」等长表头硬撑出宽度），且宽屏会把余量摊给各列 ⇒ 列间出现空隙。
   这里把继承来的 min-width 全部放开，列宽完全由 colgroup 决定。 */
.lhb-table { table-layout: fixed; }
.lhb-table .stock-cell { min-width: 0; }
.lhb-table th.numeric, .lhb-table td.numeric,
.lhb-table th.center, .lhb-table td.center { min-width: 0; }
/* 跌停跟踪：同样固定布局 + colgroup（见 dt-view.js 的 COL_W），放开继承的 min-width */
.dt-table { table-layout: fixed; }
.dt-table th, .dt-table td { white-space: nowrap; }
.dt-table .stock-cell { min-width: 0; }
.dt-table th.numeric, .dt-table td.numeric,
.dt-table th.center, .dt-table td.center { min-width: 0; }
/* 持仓监控：近1周/近6周/近6月 三个走势列宽度必须一致 —— 全局 `.trend-wrap{min-width:250px}`
   只作用于「近1周走势」（periodTrendCell 走 .monthly-trend-wrap{min-width:0}），
   不放开的话三列会是 250/88/90，中间空一大截。 */
.positions-table .trend-wrap { min-width: 0; }
.lhb-table .lhb-row { cursor: pointer; }
.lhb-table .lhb-row:hover td { background: var(--surface-soft); }
.lhb-table .lhb-row.is-open td { background: color-mix(in srgb, var(--amber) 14%, transparent); }
.dept-cell { max-width: 200px; overflow: hidden; text-overflow: ellipsis; }
.data-table td.lhb-detail-cell {
  padding: 0; white-space: normal; background: var(--surface-soft);
  border-bottom: 1px solid var(--line-strong);
}
.data-table tr.lhb-inline-source { cursor: pointer; }
.data-table tr.lhb-inline-source.is-open td {
  background: color-mix(in srgb, var(--amber) 14%, transparent);
}
.lhb-detail-row:hover td { background: var(--surface-soft); }
.lhb-top20{margin:12px 0 18px;padding:16px;border-radius:12px;background:var(--surface);border:1px solid var(--line);box-shadow:0 4px 16px rgba(36,50,74,.07);color:var(--ink)}.lhb-top20-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:13px;padding-bottom:11px;border-bottom:1px solid var(--line)}.lhb-top20-head h3{margin:0;color:var(--ink);font-size:18px}.lhb-top20-head span{color:var(--muted);font-size:11px}.lhb-top20-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px}.lhb-top20-row{display:grid;grid-template-columns:34px 126px minmax(0,1fr);gap:9px;align-items:center;padding:10px;background:var(--surface-soft);border:1px solid var(--line);border-radius:9px;transition:border-color .15s,box-shadow .15s}.lhb-top20-row:hover{border-color:color-mix(in srgb,var(--red) 35%,var(--line));box-shadow:0 3px 10px rgba(36,50,74,.08)}.lhb-top20-rank{width:27px;height:27px;border-radius:50%;display:grid;place-items:center;background:#e5e9ed;color:#52606d;font-weight:800}.rank-1{background:#f2c14e;color:#5d4300}.rank-2{background:#d7dce2;color:#45515d}.rank-3{background:#d99a68;color:#603313}.lhb-top20-stock{display:grid;gap:2px;min-width:0}.lhb-top20-stock b{color:var(--ink);font-size:13px}.lhb-top20-stock small{color:var(--muted);font-size:9px}.lhb-inst-tag{display:inline-flex;width:max-content;max-width:100%;margin-top:3px;padding:2px 5px;border:1px solid #c7afe8;border-radius:4px;background:#f3edfb;color:#68429a;font-size:8px;font-weight:700}.lhb-inst-tag.inst-out{border-color:#9dc9c0;background:#eaf6f3;color:#267063}.lhb-top20-seats{display:flex;flex-wrap:wrap;gap:5px}.lhb-seat-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 7px;border-radius:5px;font-size:10px;font-weight:700;border:1px solid transparent}.lhb-seat-chip.in{background:#fae8e5;border-color:#f0c1bb;color:#b33c32}.lhb-seat-chip.out{background:#e6f3ef;border-color:#b8ddd3;color:#217565}.lhb-quant-tag,.lhb-trader-tag{font-style:normal;padding:1px 3px;border-radius:3px;background:rgba(255,255,255,.72);font-size:8px}.lhb-quant-tag{color:#76500a}.lhb-trader-tag{background:#fff3cf;color:#8c6200}.lhb-top20 .view-footnote{color:var(--muted)}[data-theme=dark] .lhb-seat-chip.in{background:#512c2a;color:#ffc3bc;border-color:#7c413c}[data-theme=dark] .lhb-seat-chip.out{background:#203f39;color:#bce9df;border-color:#35665c}[data-theme=dark] .lhb-inst-tag{background:#3d3150;color:#e2cef9;border-color:#675182}@media(max-width:900px){.lhb-top20-list{grid-template-columns:1fr}}@media(max-width:600px){.lhb-top20-row{grid-template-columns:30px 104px minmax(0,1fr)}}
.seats-panel {
  margin: 8px; padding: 12px 14px; border: 1px solid var(--line);
  border-radius: 8px; background: var(--surface);
}
.seats-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.seats-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
@media (max-width: 980px) { .seats-grid { grid-template-columns: 1fr; } }
.seats-box { min-width: 0; overflow: hidden; }
.seats-title { margin: 0 0 6px; font-size: 13px; color: var(--muted); }
.seats-table { width: 100%; min-width: 0 !important; table-layout: fixed; font-size: 12px; }
.seats-table th:first-child { width: 64%; }
.seats-table th:nth-child(2),
.seats-table th:nth-child(3),
.seats-table th:nth-child(4) { width: 12%; }
.seats-table td, .seats-table th { padding: 4px 8px; }
.seats-table td.seat-name { white-space: normal; overflow-wrap: anywhere; text-align: left; }
.seat-badge { font-size: 10px; padding: 1px 5px; border-radius: 4px; margin-left: 5px; }
.seat-inst { background: #eaf3ff; color: #2f6bff; }
.seat-nb { background: #eef7ee; color: #2f8a45; }
.seat-hot { background: #fff2e5; color: #d97706; }

/* 该表列宽随内容自适应(fixed 布局会压缩走势条导致重叠), 超宽时由 .table-scroll 横向滚动 */
.positions-table { table-layout: auto; }
.positions-table th, .positions-table td { white-space: nowrap; }

/* ── 清仓走势（2026-09-18）── */
/* 固定布局 + colgroup（见 cleared-view.js 的 COL_W）：auto 布局列宽由表头文字决定且宽屏会摊余量，
   列间空隙大（用户 2026-10-11「把所有的间距再调整」）。左右内边距一并收到 4px（与涨停聚焦同款）。 */
.cleared-table { table-layout: fixed; }
.cleared-table th, .cleared-table td {
  padding-top: 7px; padding-bottom: 7px; padding-left: 4px; padding-right: 4px; white-space: nowrap;
}
.cleared-table .stock-cell { min-width: 0; }
.cleared-table th.numeric, .cleared-table td.numeric,
.cleared-table th.center, .cleared-table td.center { min-width: 0; }
.cleared-table .trend-cell-host { white-space: nowrap; }
/* 走势条: 不再刻意缩小(用户2026-09-19) —— 与「推送跟踪」同尺寸。
   原先的 `.trend-strip{gap:1px}` / `.trend-cell{min-width:19px;font-size:9.5px}` 已移除。 */
.cleared-table .stock-name { font-weight: 600; }
.cleared-table .stock-code { font-size: 10.5px; color: var(--muted); }
.cleared-table .stock-note { font-size: 10px; color: var(--muted); max-width: 150px; white-space: normal; }
/* 「信号」列：回场信号(进场机会/观望/回避/暂不参与 + 多头/空头/纠缠) 与
   仓位档位(持有观察/试错仓 20%/加到 50% + 维持/20%/50%) **上下堆叠**，每项各占一行。
   ⚠️ 不能用 `display:flex`：td 变 flex 就不再是 table-cell，行高不跟随 ⇒ 分割线错位（踩过坑）。
   靠「badge 保持 inline-block + trend 为 block」自然换行。 */
.cleared-table .cleared-signal .state-badge { display: inline-block; }
.cleared-table .cleared-signal .cleared-trend { display: block; }
.cleared-table .cleared-signal .cleared-muted { display: inline-block; }
/* 命中条件: 与涨停聚焦的「涨停原因」**同一处理**（用户 2026-10-11）：
   固定窄列 + 自动折行 + 最多 4 行截断（超出省略号，全文在 title 悬停）。
   ⚠️ 必须写成 `.cleared-table td.cleared-hits`(权重 0,2,1) 才能压过
   `.cleared-table td{white-space:nowrap}`(0,1,1)；列宽由 colgroup 决定，这里不要再写 min/max-width。 */
.cleared-table td.cleared-hits {
  min-width: 0; max-width: none;
  white-space: normal;
  font-size: 10.5px;
  line-height: 1.3;
  color: var(--muted);
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden;
}
.cleared-day-cell { white-space: nowrap; }
.cleared-day-line { display: flex; align-items: center; gap: 4px; }
.cleared-pct { font-weight: 600; }
/* 当日指标拆四行后每行的「标签 + 值」，标签定宽保证数值左对齐 */
.cleared-day-key { font-size: 10.5px; color: var(--muted); min-width: 26px; }
.cleared-day-val { font-size: 11px; }
.state-badge { display: inline-block; padding: 2px 8px; border-radius: 6px;
  font-size: 11px; border: 1px solid currentColor; white-space: nowrap; }
.state-hold { color: var(--muted); }
.empty-hint { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; color: var(--muted); }
.cleared-trend { margin-left: 6px; font-size: 11px; color: var(--muted); }
.cleared-muted { font-size: 11px; color: var(--muted); }

/* 持仓监控: 支撑位/压力位 */
.positions-table .level-cell { line-height: 1.3; }
.level-value { display: block; font-weight: 600; }
.level-tag { display: block; font-size: 10px; color: var(--muted); white-space: nowrap; }

/* ── ⚠️ 严重异动提醒（2026-09-21 新建，用户要求）──
   口径：连续10个交易日收盘累计≥+100% → 交易所停牌核查（已用真实案例校准）*/
.abnormal-view { display: flex; flex-direction: column; gap: 10px; }
.abn-head .view-title { margin: 0 0 4px; }
.abn-desc { margin: 0; font-size: 12.5px; color: var(--muted); }
.abn-summary { display: flex; gap: 8px; flex-wrap: wrap; padding: 6px 0 2px; }
.abn-chip {
  padding: 4px 10px; border-radius: 999px; font-size: 12.5px; font-weight: 700;
  border: 1px solid var(--line-strong); background: var(--surface);
}
.abn-chip-hot { color: #fff; background: var(--red); border-color: var(--red); }
.abn-chip-near { color: #b45309; background: #fff7ed; border-color: #fdba74; }
.abn-chip-done { color: var(--muted); background: var(--surface-soft); }
.abn-chip-none { color: var(--muted); font-weight: 400; }
.abn-tier { margin-top: 2px; }
.abn-tier-title { margin: 0 0 6px; font-size: 13.5px; font-weight: 700; }
/* 表宽由 JS 按 colgroup 列宽合计设 min-width；这里只声明定宽布局，
   保证表头与数据严格逐列对齐（auto 布局下会按内容重排 → 用户反馈"没对齐"）。 */
.abn-table { table-layout: fixed; }
.abn-table th, .abn-table td { white-space: nowrap; }
/* ⚠️ tracking.css 有全站 `.stock-cell { min-width: 120px }`，min-width 优先于 colgroup 的 width
   ⇒ 不放开的话「股票」列会被顶到 120px（与 zt-table 同一个坑，实测踩到）。 */
.abn-table .stock-cell { min-width: 0; }
.abn-table .industry-cell {
  color: var(--muted); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis;
}
.abn-empty { text-align: center !important; color: var(--muted); padding: 14px 0 !important; }
/* 明日涨停 ≥ 触发价 = 明天一个涨停就踩线 → 红底高亮（保持右对齐，与同列其它行一致） */
.abn-fire { color: #fff; background: var(--red); font-weight: 700; }
.level-none { color: var(--muted); }

/* AI用量: 每日柱状图 */
.ai-usage-chart { display:flex; align-items:flex-end; gap:6px; overflow-x:auto; padding:14px 6px 4px; min-height:190px; border:1px solid var(--border); border-radius:12px; background:var(--surface); }
.usage-bar-item { display:flex; flex-direction:column; align-items:center; gap:6px; min-width:34px; flex:1 0 34px; }
.usage-bar-wrap { display:flex; align-items:flex-end; height:140px; width:100%; }
.usage-bar { width:100%; border-radius:4px 4px 0 0; background:linear-gradient(180deg,#4a86ff,#2f6bdc); transition:opacity .15s; }
.usage-bar:hover { opacity:.82; }
.usage-bar-label { font-size:10px; color:var(--muted); white-space:nowrap; }
.ai-usage-view .usage-section { margin-top:18px; }

.ai-usage-view .ai-usage-summary { margin-top: 28px; }
.ai-usage-view .usage-section-header { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:12px; }
.ai-usage-view .usage-section-header .section-title { margin:0; }
.ai-usage-view .ai-model-detail { display:grid; grid-template-columns:repeat(5,minmax(120px,1fr)); gap:10px; }
@media (max-width: 700px) {
  .ai-usage-view .ai-model-detail { grid-template-columns:repeat(2,minmax(130px,1fr)); }
}

.view-actions { display:flex; gap:8px; margin-left:auto; }
.row-select { margin-right:6px; accent-color:var(--accent); }
.ai-model-detail { margin-top:10px; }

/* 持仓/清仓管理操作: 主操作 + 危险操作 */
.view-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-left: auto;
  padding: 4px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: color-mix(in srgb, var(--surface-soft) 86%, var(--surface));
  box-shadow: 0 3px 12px rgba(24, 33, 28, .06);
}
.manage-button {
  min-height: 36px;
  padding: 0 14px;
  border: 1px solid transparent;
  border-radius: 7px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0;
  cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease;
}
.manage-button:hover { transform: translateY(-1px); box-shadow: 0 5px 14px rgba(24, 33, 28, .12); }
.manage-button:active { transform: translateY(0); box-shadow: none; }
.manage-button:focus-visible { outline: 3px solid color-mix(in srgb, var(--blue) 28%, transparent); outline-offset: 2px; }
.manage-add {
  color: #fff;
  background: #26352e;
  border-color: #26352e;
}
.manage-add:hover { background: #1d2923; border-color: #1d2923; }
.manage-delete {
  color: #a33b35;
  background: #fff8f7;
  border-color: #e8b9b4;
}
.manage-delete:hover { color: #fff; background: #b94a43; border-color: #b94a43; }
.manage-delete.is-confirm { color: #fff; background: #b94a43; border-color: #b94a43; }
@media (max-width: 640px) {
  .view-actions { gap: 5px; padding: 3px; }
  .manage-button { min-height: 32px; padding: 0 9px; font-size: 11px; }
}

.table-pager { display:flex; align-items:center; justify-content:center; gap:10px; padding:8px 0; }
.table-pager-info { color:var(--muted); font-size:12px; }
.table-pager-btn { padding:4px 10px; border:1px solid var(--line); border-radius:6px; background:var(--surface); color:var(--text); cursor:pointer; font-size:12px; }
.table-pager-btn:disabled { opacity:.45; cursor:not-allowed; }
.leaders-lifecycle-summary { display:flex; flex-wrap:wrap; gap:6px; margin:6px 0 8px; padding:8px 10px; border:1px solid var(--line); border-radius:8px; background:var(--surface-soft); }
.leaders-factor-breakdown { margin:8px 0 10px; padding:9px 10px; border:1px solid var(--line); border-radius:8px; background:var(--surface-soft); }
.leaders-factor-row { display:flex; flex-wrap:wrap; gap:5px; align-items:center; margin:5px 0; }
.leaders-factor-name { width:110px; color:var(--ink); font-weight:700; font-size:11px; }
.leaders-factor-bucket { padding:2px 6px; border:1px solid var(--line); border-radius:5px; color:var(--muted); font-size:10.5px; white-space:nowrap; }
.trend-status { font-weight:650; white-space:nowrap; }

/* ── 历史牛股: 连板榜（年内连板 / 月内连板）── */
.streak-stats { display: flex; flex-wrap: wrap; gap: 10px; margin: 8px 0 6px; }
.streak-stat {
  display: flex; flex-direction: column; gap: 2px; min-width: 112px;
  padding: 8px 12px; border: 1px solid var(--line); border-radius: 10px;
  background: var(--surface-soft);
}
.streak-stat-label { font-size: 11px; color: var(--muted); }
.streak-stat-value { font-size: 15px; font-weight: 700; }
.streak-table { table-layout: auto; }
.streak-table th, .streak-table td { white-space: nowrap; }
/* 连板数: 柱长随连板数递增 + 每个连板数一个专属颜色(颜色在 JS 里内联设置, 见 BOARD_PALETTE) */
.streak-table .board-cell { white-space: nowrap; }
.streak-table .board-bar {
  display: inline-block; height: 11px; min-width: 4px; border-radius: 3px;
  margin-right: 7px; vertical-align: middle;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .12);
}
.streak-table .board-num { font-weight: 700; }

/* ── 历史牛股: 牛股榜新增列(行业/当日指标/历史极值/涨停跌停次数/最高连板) ── */
.history-leaders-table .industry-cell {
  max-width: 118px; overflow: hidden; text-overflow: ellipsis; font-size: 12px; color: var(--muted);
}
.history-leaders-table .day-metrics { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.history-leaders-table .hist-cell { line-height: 1.25; }
.history-leaders-table .hist-value { display: block; font-weight: 600; }
.history-leaders-table .hist-date { display: block; font-size: 10px; color: var(--muted); }
.history-leaders-table .hist-low .hist-value { color: var(--green); }
.history-leaders-table .hist-high .hist-value { color: var(--red); }
.history-leaders-table .zt-count { color: var(--red); font-weight: 600; }
.history-leaders-table .dt-count { color: var(--green); font-weight: 600; }
.history-leaders-table .board-bar-inline { height: 9px; min-width: 3px; margin-right: 5px; }
.history-leaders-table .streak-max-cell { font-weight: 700; }
/* ── 连板榜: 板型徽章（一字/T字/换手/烂板，2026-09-19 用户要求）──
   颜色与折线图/趋势条一致；固定色在明暗两种主题下都可读 */
.seal-chip {
  display: inline-block; padding: 1px 7px; border-radius: 999px;
  font-size: 11.5px; font-weight: 600; white-space: nowrap;
  border: 1px solid transparent; line-height: 1.6;
}
.seal-yizi     { color: #c9443d; background: rgba(201, 68, 61, .12);  border-color: rgba(201, 68, 61, .38); }
.seal-tzi      { color: #b45309; background: rgba(217, 119, 6, .14);  border-color: rgba(217, 119, 6, .40); }
.seal-huanshou { color: #177b61; background: rgba(23, 123, 97, .12);  border-color: rgba(23, 123, 97, .38); }
.seal-lan      { color: #7a5af8; background: rgba(122, 90, 248, .12); border-color: rgba(122, 90, 248, .38); }
.seal-other    { color: var(--muted); background: var(--surface-soft); border-color: var(--line); }
/* 数量为 0 的淡显（保留位置便于同类比较） */
.seal-chip.is-zero { opacity: .38; }
.streak-table .seal-cell { white-space: nowrap; }
/* 板型构成列: 只列出现过的型(一×8 T×2 …), 紧凑 */
.streak-table .seal-compose-cell { white-space: nowrap; }
.streak-table .seal-compose-cell .seal-chip { margin-right: 3px; }
.seal-breakdown { display: flex; flex-wrap: wrap; gap: 4px; }

/* 连板榜第 8 列=行业（2026-09-19 去掉「板块」列、新增「首板型/二板型/板型构成」后由第 6 列后移） */
.streak-table td:nth-child(8) { max-width: 170px; overflow: hidden; text-overflow: ellipsis; }

/* ── 情绪周期: 多指标折线图（2026-09-19）──────────────────────────
   自研 SVG(linechart.js)，无第三方图表库。左侧图 + 右侧可点亮/熄灭的图例。 */
.mood-chart {
  margin: 0 0 16px; padding: 14px 16px;
  border: 1px solid var(--line); border-radius: 12px; background: var(--surface);
}
.lc-wrap { display: grid; grid-template-columns: minmax(0, 1fr) 216px; gap: 14px; align-items: start; }
.lc-plot { position: relative; min-width: 0; color: var(--line-strong); }
.lc-svg { width: 100%; display: block; overflow: visible; }
.lc-axis { font-size: 10px; fill: var(--muted); }
.lc-legend { display: flex; flex-direction: column; gap: 5px; }
.lc-legend-title { font-size: 11px; color: var(--muted); margin-bottom: 2px; }
.lc-item {
  display: flex; align-items: center; gap: 6px; width: 100%;
  padding: 5px 8px; border: 1px solid var(--line); border-radius: 8px;
  background: var(--surface-soft); color: var(--muted); cursor: pointer;
  font: inherit; font-size: 12px; text-align: left; opacity: .55;
}
.lc-item.is-on { opacity: 1; border-color: var(--line-strong); background: var(--surface);
  color: var(--ink); font-weight: 600; }
.lc-item:hover { border-color: var(--muted); }
.lc-dot { width: 9px; height: 9px; border-radius: 50%; flex: 0 0 auto; }
.lc-label { flex: 1 1 auto; }
.lc-range { font-size: 10px; color: var(--muted); font-weight: 400; }
.lc-tip {
  position: absolute; top: 6px; z-index: 5;
  padding: 7px 9px; border: 1px solid var(--line-strong); border-radius: 8px;
  background: var(--surface); box-shadow: var(--shadow);
  font-size: 11.5px; line-height: 1.5; pointer-events: none; white-space: nowrap;
}
/* ⚠️ 必须显式压掉 [hidden]：上方若用 display:flex/grid，会覆盖 hidden 的 display:none */
.lc-tip[hidden] { display: none !important; }
.lc-tip-date { font-weight: 700; margin-bottom: 2px; }
.lc-tip-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 5px; vertical-align: middle; }
.lc-tip-k { color: var(--muted); margin-right: 6px; }
.lc-tip-v { font-weight: 700; font-variant-numeric: tabular-nums; }
.lc-note { margin: 10px 0 0; font-size: 11px; color: var(--muted); line-height: 1.5; }
/* 0 轴标注（signed 指标，如"平均收益"） */
.lc-zero-label { font-size: 10px; fill: var(--muted); font-weight: 600; }
.lc-empty { padding: 24px; text-align: center; color: var(--muted); }
@media (max-width: 900px) { .lc-wrap { grid-template-columns: 1fr; } }

/* 诊股日K概览 + 龙虎榜行为标签 */
.dx-series-plot { position: relative; min-height: 190px; padding: 8px 24px 22px 8px; background: var(--surface-soft); border: 1px solid var(--line); border-radius: 8px; }
.dx-series-svg { display: block; width: 100%; height: 170px; overflow: visible; }
.dx-series-line { fill: none; stroke: var(--red); stroke-width: 1.8; vector-effect: non-scaling-stroke; }
.dx-series-min, .dx-series-max { position: absolute; right: 6px; font-size: 10px; color: var(--muted); }
.dx-series-min { bottom: 8px; } .dx-series-max { top: 8px; }
.dx-series-legend { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 4px; }
.dx-series-chip { padding: 2px 6px; border: 1px solid var(--line); border-radius: 4px; color: var(--muted); font-size: 10px; }
.dx-chart-panel { position: relative; overflow: hidden; }
.dx-chart-svg { display: block; width: 100%; height: auto; min-height: 180px; background: var(--surface-soft); border: 1px solid var(--line); border-radius: 6px; }
.dx-chart-grid { stroke: var(--line); stroke-width: .6; stroke-dasharray: 2 3; }
.dx-chart-line { fill: none; stroke-width: 1.6; vector-effect: non-scaling-stroke; }
.dx-chart-line.line-0 { stroke: #c9443d; }
.dx-chart-line.line-1 { stroke: #a76413; }
.dx-chart-line.line-2 { stroke: #7a4fd6; }
.dx-chart-line.line-3 { stroke: #23628b; }
.dx-chart-line.line-4 { stroke: #177b61; }
.dx-candle { stroke-width: 2; vector-effect: non-scaling-stroke; }
.dx-candle.up { stroke: var(--red); }
.dx-candle.down { stroke: var(--green); }
.dx-signal-dot { fill: var(--red); stroke: var(--surface); stroke-width: 1; }
.dx-trade-marker { stroke: var(--surface); stroke-width: 1; }
.dx-trade-marker.buy { fill: #c9443d; }
.dx-trade-marker.sell { fill: #177b61; }
.dx-trade-marker.marker-mingri { fill: #c9443d; stroke: var(--surface); }
.dx-trade-marker.marker-jiancang-first { fill: #d97706; }
.dx-trade-marker.marker-jiancang-big { fill: #7a4fd6; }
.dx-trade-marker.future { fill: var(--surface); stroke-width: 2; stroke-dasharray: 3 2; }
.dx-trade-marker.marker-original-heima { stroke: #7a4fd6; }
.dx-trade-marker.marker-original-buy { stroke: #d97706; }
.dx-trade-marker.marker-original-group-buy { stroke: #a44270; }
.dx-trade-marker.marker-original-sell { stroke: #177b61; }
.dx-formula-signal-legend {
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
  padding: 8px 10px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  background: var(--surface-soft); font-size: 11px;
}
.dx-formula-group { padding: 2px 7px; border-radius: 4px; font-weight: 700; }
.dx-formula-group.causal { color: #9f2d2a; background: #fff0ee; }
.dx-formula-group.future { color: #6741a5; background: #f5f0ff; }
.dx-formula-legend-item { white-space: nowrap; }
.dx-formula-legend-item.marker-mingri { color: #c9443d; }
.dx-formula-legend-item.marker-original-heima { color: #7a4fd6; }
.dx-formula-legend-item.marker-original-buy { color: #d97706; }
.dx-formula-legend-item.marker-original-group-buy { color: #a44270; }
.dx-formula-legend-item.marker-original-sell { color: #177b61; }
.dx-overlap-note {
  margin: 5px 0; padding: 6px 9px; border-left: 3px solid #7a4fd6;
  background: var(--surface-soft); color: var(--text); font-size: 11.5px;
}
.dx-volume-bar { opacity: .82; }
.dx-volume-bar.up { fill: #c9443d; }
.dx-volume-bar.down { fill: #177b61; }
.dx-bar-zero { stroke: var(--muted); stroke-width: .8; stroke-dasharray: 3 3; opacity: .75; }
.dx-hover-cross { stroke: var(--muted); stroke-width: 1; stroke-dasharray: 3 3; pointer-events: none; }
.dx-chart-tooltip {
  position: absolute; z-index: 6; top: 42px; min-width: 180px; max-width: 300px;
  padding: 7px 9px; border: 1px solid var(--line-strong); border-radius: 6px;
  background: color-mix(in srgb, var(--surface) 94%, transparent); color: var(--text);
  box-shadow: var(--shadow); font-size: 11px; line-height: 1.55; pointer-events: none;
  font-variant-numeric: tabular-nums;
}
.dx-chart-tooltip[hidden] { display: none; }
.dx-cond-list { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; }
.dx-cond {
  display: flex; flex-direction: column; gap: 2px; min-width: 170px;
  border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; font-size: 11.5px;
}
.dx-cond.is-on { border-color: #bfd8c6; background: #f4f9f5; }
.dx-cond.is-off { border-color: #f3c4c0; background: #fdf6f5; }
.dx-cond b { font-size: 12px; }
.dx-cond span { color: var(--muted); }
.dx-cond-signals { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 6px; }
.dx-cond-signal { padding: 3px 8px; border-radius: 5px; font-size: 11px; border: 1px solid var(--line); }
.dx-cond-signal.buy { color: #c9443d; border-color: #f3c4c0; background: #fdf6f5; }
.dx-cond-signal.sell { color: #177b61; border-color: #bfd8c6; background: #f4f9f5; }
.dx-chart-legend { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.dx-chart-legend .line-chip-0 { color: #c9443d; }
.dx-chart-legend .line-chip-1 { color: #a76413; }
.dx-chart-legend .line-chip-2 { color: #7a4fd6; }
.dx-chart-legend .line-chip-3 { color: #23628b; }
.dx-chart-legend .line-chip-4 { color: #177b61; }
.lhb-behavior { font-size: 11px; font-weight: 700; white-space: nowrap; color: var(--muted); }
.lhb-behavior.机构主导, .lhb-behavior.机构游资共振 { color: var(--red); }
.lhb-behavior.游资主导 { color: var(--blue); }
.lhb-behavior.净卖出风险 { color: var(--green); }
.risk-relation { display: flex; flex-direction: column; gap: 2px; min-width: 150px; color: var(--muted); font-size: 10.5px; line-height: 1.45; }
.tracking-segment-table { min-width: 640px; }
.tracking-segment-table th, .tracking-segment-table td { white-space: nowrap; }

/* ── 信号挖掘 · 主升校准池 ─────────────────────────────── */
.calibration-view { margin-top: 12px; }
.calibration-actions {
  display: flex; align-items: center; gap: 8px; padding: 10px 12px;
  border: 1px solid var(--line); background: var(--surface);
}
.calibration-actions .view-subnote { margin: 0 auto 0 0; }
.calibration-table { table-layout: fixed; min-width: 920px; }
.calibration-table th, .calibration-table td { white-space: nowrap; }
.calibration-table th:nth-child(1) { width: 160px; }
.calibration-table th:nth-child(2), .calibration-table th:nth-child(3) { width: 120px; }
.calibration-table th:last-child { width: 90px; }
.calibration-table .calibration-note,
.calibration-match-table .calibration-features { white-space: normal; line-height: 1.45; }
.calibration-stock-button {
  padding: 0; border: 0; color: var(--ink); background: transparent;
  font: inherit; font-weight: 700; cursor: pointer; text-align: left;
}
.calibration-stock-button:hover { color: var(--red); text-decoration: underline; }
.calibration-state {
  padding: 3px 8px; border: 1px solid var(--line-strong); border-radius: 999px;
  background: var(--surface-soft); color: var(--muted); cursor: pointer; font-size: 11px;
}
.calibration-state.is-on { color: var(--green); border-color: color-mix(in srgb,var(--green) 40%,var(--line)); }
.calibration-table tr.is-disabled { opacity: .52; }
.calibration-match-title { margin-top: 14px; }
.calibration-match-table { min-width: 1260px; }
.calibration-tier { font-weight: 800; text-align: center; }
.calibration-tier.tier1 { color: var(--red); }
.calibration-tier.tier2 { color: var(--amber); }
.calibration-tier.tier3 { color: var(--blue); }
.calibration-signals { color: var(--muted); font-size: 11px; white-space: normal !important; }

/* 诊股面板股票搜索下拉 */
.diagnose-view .view-toolbar { position: relative; }
.diagnose-stock-search {
  position: absolute; left: 0; top: calc(100% + 3px); z-index: 40;
  width: min(420px, 100%); max-height: 260px; overflow-y: auto; padding: 3px;
  border: 1px solid var(--line-strong); border-radius: 6px;
  background: var(--surface-raised); box-shadow: var(--shadow);
}
.diagnose-stock-search[hidden] { display: none; }
.diagnose-stock-option {
  display: flex; justify-content: space-between; align-items: center; gap: 12px;
  width: 100%; padding: 8px 10px; border: 0; border-radius: 4px;
  color: var(--ink); background: transparent; cursor: pointer; text-align: left; font-size: 12px;
}
.diagnose-stock-option:hover { background: var(--hover); }
.diagnose-stock-option span { color: var(--muted); font-size: 11px; white-space: nowrap; }
