/* ============================================================
   太阳之下 UnderTheSun · 设计稿变体 A · 彭博终端风
   样式基线（从 design/variantA_bt.html 迁出，M2+ 各页共用）
   ============================================================ */
:root{
  /* 底色 · 深空黑 · 毛玻璃基调（风格B · 黑红高对比） */
  --bg:        #07080c;
  --bg2:       #0a0c11;
  --panel:     #0d1017;
  --panel2:    #10131a;
  --well:      #090b10;
  --well2:     #07080c;
  /* 边界 · 毛玻璃亮边框 */
  --line:      rgba(255,255,255,.10);
  --line2:     rgba(255,255,255,.16);
  --line3:     rgba(255,255,255,.24);
  /* 文字 · 更亮 */
  --txt:       #eaeef5;
  --txt2:      #a6b2c4;
  --txt3:      #7d8899;
  --txt4:      #6b7788;   /* 2026-09-10 老板令「（67只）·口径有效性·T+1回填 根本看不清」：最暗档 #3a4450 在暗底上
                             对比不足 2:1，提亮到 4.5:1+；txt3 同步抬一档保层级（txt4 恒为最弱档），
                             全站 var(--txt4)/var(--txt3) 注记一并受益 */
  /* 品牌 / 语义 */
  --gold:      #f5a524;
  --gold2:     #ffc46b;
  --up:        #ff2d55;   /* 红 = 涨 / 热（中国市场习惯） */
  --up2:       #d93255;
  --down:      #00ff88;   /* 绿 = 跌 / 冷（判定语义色·字面 RGB，不随调色盘换肤——2026-09-07 越权修复，恢复 224708a 耦合前原值） */
  --down2:     #00d974;
  --warn:      #ffb020;
  --hot:       #ff5c6c;
  /* 字体 */
  --mono: "Space Grotesk", Consolas, "Microsoft YaHei", monospace;
  --sans: "Inter", "Microsoft YaHei", "PingFang SC", "Segoe UI", sans-serif;
  /* ===== UI v3 · 设计令牌（方向 C：以市道热度/影子账户 2b 工作台语言为全站基准） ===== */
  --accent:   #4c9bff;   /* 策略蓝（hist-kline/sh-sec-t 历史引用但一直未定义，此处转正） */
  --r-ctl:    8px;       /* 圆角三档：控件 / 内嵌块 / 大卡（与 2b 体系一致） */
  --r-blk:    9px;
  --r-card:   12px;
  --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px; --sp-5: 20px; --sp-6: 24px;  /* 间距 4/8 节奏 */
  --sh-pop:  0 8px 22px rgba(0,0,0,.55);   /* 浮层阴影 */
  --sh-card: 0 4px 24px rgba(0,0,0,.35);   /* 卡片阴影 */
  --st-b1: #4c9bff; --st-b2: #8b5cf6; --st-b3: #22d3ee; --st-dz: #ff2d55; --st-zx: #ffb020;  /* 策略五色 B1/B2/B3/单针/砖形 */
  --ctl-bg: rgba(7,8,12,.55);              /* 控件底 */
  --focus: rgba(var(--ac-rgb),.45);            /* 焦点环 */
  --focus-ring: 0 0 0 2px rgba(var(--ac-rgb),.12);
}

*{ margin:0; padding:0; box-sizing:border-box; }
html{ width:100%; height:100%; overflow-x:hidden; overflow-y:auto; background:var(--bg); }
body{ width:100%; min-height:100%; overflow-x:hidden;
  background:
    radial-gradient(1200px 700px at 82% -8%, rgba(76,155,255,.16), transparent 60%),
    radial-gradient(1000px 600px at 100% 106%, rgba(139,92,246,.14), transparent 62%),
    radial-gradient(900px 500px at -6% 45%, rgba(var(--ac-rgb),.09), transparent 55%),
    radial-gradient(800px 500px at 42% 100%, rgba(255,45,85,.09), transparent 55%),
    var(--bg); }
/* 缩放舞台：宽度铺满视口，高度不足时由页面滚动 */
#stage{ position:relative; }
body{
  font-family:var(--sans);
  color:var(--txt);
  font-size:12px;
  -webkit-font-smoothing:antialiased;
}
.mono{ font-family:var(--mono); font-variant-numeric:tabular-nums; }
.up{ color:var(--up); } .down{ color:var(--down); } .gold{ color:var(--gold); }
.dim{ color:var(--txt2); } .faint{ color:var(--txt3); }

#term{
  position:absolute; top:0; left:0;
  width:1440px; height:900px;
  display:flex; flex-direction:column;
  background:
    radial-gradient(130% 90% at 50% 0%, rgba(35,46,60,.16) 0%, rgba(10,13,18,0) 46%),
    linear-gradient(180deg, var(--bg) 0%, #080b0f 100%);
  transform-origin:0 0;
}

/* ============ 顶部 · 全球热度滚动条 ============ */
.tape{
  height:26px; flex:0 0 26px;
  border-bottom:1px solid var(--line);
  background:rgba(255,255,255,.02);
  overflow:hidden; position:relative;
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 60px, #000 calc(100% - 60px), transparent 100%);
          mask-image:linear-gradient(90deg, transparent 0, #000 60px, #000 calc(100% - 60px), transparent 100%);
}
.tape-track{
  display:flex; width:max-content;
  animation:tscroll 96s linear infinite;
}
@keyframes tscroll{ to{ transform:translateX(-50%); } }
.tp-itm{
  display:inline-flex; align-items:center; gap:6px;
  padding:0 16px; height:26px; white-space:nowrap;
  font-family:var(--mono); font-size:11px;
  border-right:1px solid var(--line);
}
.tp-sec{
  display:inline-flex; align-items:center;
  padding:0 12px; height:26px; gap:7px;
  font-family:var(--mono); font-size:10px; letter-spacing:.14em;
  color:var(--gold); background:linear-gradient(180deg,rgba(217,164,65,.10),rgba(217,164,65,.03));
  border-right:1px solid var(--line);
}
.tp-n{ color:var(--txt2); letter-spacing:.02em; }
.tp-v{ font-weight:700; font-size:12px; }
.tp-t{
  font-size:9px; line-height:1; padding:2px 4px; border:1px solid;
  font-family:var(--sans); letter-spacing:.06em;
}
.tp-t.red{ color:var(--up); border-color:rgba(226,86,74,.45); background:rgba(226,86,74,.08); }
.tp-t.dred{ color:#e08680; border-color:rgba(180,35,35,.55); background:rgba(180,35,35,.14); }
.tp-t.grn{ color:var(--down); border-color:rgba(37,160,108,.45); background:rgba(37,160,108,.08); }

/* ============ 顶栏（2b 一条） ============ */
.topbar{
  height:48px; flex:0 0 48px;
  display:flex; align-items:center; gap:14px;
  padding:0 14px;
  border-bottom:1px solid var(--line);
  background:rgba(255,255,255,.03);
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
}
.topbar .crumb{ margin-left:16px; font-size:12px; white-space:nowrap; }
.topbar .tl-right{ display:flex; align-items:center; gap:10px; white-space:nowrap; }
.topbar .cbar-right{ margin-left:auto; }
.topbar .cmdline{ flex:0 1 420px; }

/* ============ 命令栏 ============ */
.cmdbar{
  height:34px; flex:0 0 34px;
  display:flex; align-items:center; gap:14px;
  padding:0 12px;
  border-bottom:1px solid var(--line);
  background:rgba(255,255,255,.03);
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
}
.brand{ display:flex; align-items:center; gap:8px; }
.brand-mark{ width:15px; height:15px; color:var(--gold); }
.brand-name{
  font-size:15px; font-weight:700; letter-spacing:.14em;
  color:var(--gold); text-shadow:0 0 0 transparent;
}
.brand-en{
  font-family:var(--mono); font-size:9px; letter-spacing:.22em;
  color:var(--txt3); padding-left:8px; border-left:1px solid var(--line2);
  margin-left:2px;
}
.cmdline{
  flex:1; max-width:520px; display:flex; align-items:center; gap:8px;
  height:22px; padding:0 10px;
  border:1px solid var(--line2); background:var(--well);
  font-family:var(--mono); font-size:11px; color:var(--txt2);
}
.cmdline .gt{ color:var(--gold); font-weight:700; }
.cmdline .ph{ color:var(--txt3); }
.cmdline input{
  flex:1; min-width:0; border:none; outline:none; background:transparent;
  font-family:var(--mono); font-size:11px; color:var(--txt); caret-color:var(--gold);
}
.cmdline input::placeholder{ color:var(--txt4); }
.cmd-hint{
  font-family:var(--mono); font-size:9px; letter-spacing:.08em;
  color:var(--txt3); border:1px solid var(--line2); padding:1px 5px;
}
/* 20260916h 老板令「两个时间只留后面一个；固定时间宽度别让数字跳动；两行不在同一水平线」：
   ①日期行 HH:MM 撤（app.js）②基线对齐：center→baseline（.live/.cdate/.cclock 字号 9/11/12px
   不一，center 只对齐盒子中线=文字基线参差）③时钟定宽：tabular-nums 等宽数字+min-width:8ch
   （「1」等窄字不再使整条左右跳）。
   20260916m 老板令再修「文字没对齐」：10/12/13px 三种字号×等宽拉丁+中文回退双字体混排，
   基线/居中两派都对不稳（Windows 中文字形 em 框偏沉）——终解=三段统一 16px 定高行框+盒内
   垂直居中，任何字体度量下视觉中线恒齐。 */
.cbar-right{ display:flex; align-items:center; gap:12px; margin-left:auto; }
.cbar-right > .live,
.cbar-right > .cdate,
.cbar-right > .cclock{ height:16px; line-height:16px; display:inline-flex; align-items:center; }
.cdate{ font-family:var(--mono); font-size:11px; color:var(--txt2); letter-spacing:.04em;
  font-variant-numeric:tabular-nums; white-space:nowrap; }
.cclock{ font-family:var(--mono); font-size:12px; color:var(--txt); font-weight:700;
  font-variant-numeric:tabular-nums; min-width:8ch; white-space:nowrap; }
.live{ display:inline-flex; align-items:center; gap:5px; font-size:9px; letter-spacing:.12em; color:var(--up); }
.dot{ width:5px; height:5px; border-radius:50%; background:var(--up); box-shadow:0 0 0 0 transparent; animation:blink 1.6s steps(2) infinite; }
@keyframes blink{ 50%{ opacity:.25; } }
.cflag{ font-family:var(--mono); font-size:9px; color:var(--txt3); letter-spacing:.1em; border:1px solid var(--line2); padding:1px 4px; }

/* ============ 模块条 ============ */
.topline{
  height:27px; flex:0 0 27px;
  display:flex; align-items:center; gap:10px;
  padding:0 10px; border-bottom:1px solid var(--line);
  background:rgba(255,255,255,.02);
}
.crumb{ font-family:var(--mono); font-size:11px; color:var(--txt2); }
.crumb b{ color:var(--gold); font-weight:700; }
.segs{ display:flex; gap:0; margin-left:16px; height:27px; align-items:stretch; }
.seg{
  display:flex; align-items:center; padding:0 12px; font-size:11px;
  color:var(--txt2); border:1px solid var(--line); border-right:none;
  background:#0d1118; cursor:default;
}
.seg:last-child{ border-right:1px solid var(--line); }
.seg.act{ color:var(--gold); background:linear-gradient(180deg,#141a24,#0d1118); border-color:var(--line2); box-shadow:inset 0 2px 0 var(--gold); }
.tl-right{ margin-left:auto; display:flex; align-items:center; gap:10px; }
.chip-risk{
  display:inline-flex; align-items:center; gap:6px;
  font-size:10px; letter-spacing:.08em; color:var(--warn);
  border:1px solid rgba(227,168,78,.4); background:rgba(227,168,78,.07); padding:2px 8px;
}
.btn{
  font-family:var(--mono); font-size:10px; color:var(--txt2);
  border:1px solid var(--line2); background:#0d1118; padding:2px 10px; cursor:pointer;
}
.btn:hover{ color:var(--txt); border-color:var(--line3); }

/* ============ 主体布局 ============ */
.body{ flex:1; display:flex; min-height:0; overflow-x:hidden; }
.content{
  flex:1; min-width:0; position:relative;
  display:flex; flex-direction:column; padding:8px; padding-right:0; overflow-x:hidden;   /* 20260916z：撤右内距（老板 11:2x 报「滚动条与屏幕右缘有空隙」）——8px 右距把滚动容器整体推离屏缘=滚动条出现时距屏 8px 夹缝；间距移入 #view 自身（下行），滚动条贴视口最右缘与浏览器原生一致 */
}
/* 页面容器：flex 列 + 内部滚动（页高超过内容区时可滚动） */
#view{
  flex:1; min-height:0; min-width:0; position:relative;
  display:flex; flex-direction:column; gap:8px; overflow-y:auto; overflow-x:hidden;
  padding-right:8px;   /* 20260916z：承接 .content 撤出的右距（内容与滚动条间距不变·滚动条贴屏缘） */
}
/* 超高内容时整体滚动，绝不挤压兄弟项（否则顶部控制栏会被压缩塌陷） */
#view > *{ flex-shrink:0; }
/* 终端风格细滚动条 */
::-webkit-scrollbar{ width:8px; height:8px; }
::-webkit-scrollbar-thumb{ background:#2b3543; }
::-webkit-scrollbar-thumb:hover{ background:#3a4450; }
::-webkit-scrollbar-track{ background:transparent; }
::-webkit-scrollbar-corner{ background:transparent; }
/* 全球网格隐喻 · 极淡经纬线（纯氛围，不抢内容） */
.graticule{
  position:absolute; inset:8px; pointer-events:none; opacity:.05; z-index:0;
}

/* ============ 左侧导航 ============ */
.sidenav{
  width:224px; flex:0 0 224px;
  display:flex; flex-direction:column;
  border-right:1px solid var(--line);
  background:rgba(10,13,19,.72);
  backdrop-filter:blur(24px); -webkit-backdrop-filter:blur(24px);
}
.s-brand{display:flex;align-items:center;gap:10px;padding:14px 14px 16px;border-bottom:1px solid var(--line);margin-bottom:8px}
.s-logo{width:32px;height:32px;border-radius:9px;background:linear-gradient(135deg,var(--ac),#22d3ee);display:flex;align-items:center;justify-content:center;font-weight:800;color:#000;font-size:16px;box-shadow:0 0 18px rgba(var(--ac-rgb),.4)}
.s-bt{font-size:15px;font-weight:700;color:var(--txt)}
.s-bs{font-size:10px;color:var(--txt3);letter-spacing:.12em}
.nav-sec{
  font-family:var(--mono); font-size:10px; letter-spacing:.22em;
  color:var(--txt3); padding:10px 12px 4px; text-transform:uppercase;
}
.nav-itm{
  display:flex; align-items:center; gap:8px; height:30px;
  padding:0 10px 0 8px; position:relative; cursor:pointer;
  border-left:2px solid transparent;
}
.nav-itm:hover{ background:rgba(255,255,255,.04); }
.nav-itm.act{
  border-left-color:var(--down);
  background:linear-gradient(90deg, rgba(var(--ac-rgb),.12), rgba(var(--ac-rgb),0) 70%);
}
.nav-itm.act .nav-l{ color:var(--down); }
.nav-itm.act .nav-t{ color:var(--down); font-weight:600; }
.nav-ic{ width:16px; height:16px; color:var(--txt3); flex:0 0 16px; }
.nav-itm.act .nav-ic{ color:var(--down); }
.nav-t{ flex:1; font-size:13px; color:var(--txt2); letter-spacing:.04em; }
.nav-k{ font-family:var(--mono); font-size:10px; color:var(--txt2); }
.nav-sub{ font-size:9px; color:var(--txt4); letter-spacing:.05em; margin:-2px 0 4px 34px; }
.nav-sep{ height:1px; background:var(--line); margin:6px 10px; }
.nav-ftr{ margin-top:auto; padding:10px 12px 12px; border-top:1px solid var(--line); background:rgba(255,255,255,.02); }
.nft-row{ display:flex; align-items:center; gap:7px; font-size:12px; color:var(--txt2); padding:3px 0; }
.nft-row .mono{ font-size:11px; color:var(--txt3); }
.sdot{ width:5px; height:5px; border-radius:50%; flex:0 0 5px; }
.sdot.grn{ background:var(--down); } .sdot.gold{ background:var(--gold); } .sdot.red{ background:var(--up); }

/* ============ 通用卡片 ============
   20260916 老板令「分段表现/策略表现/回测历史/交易明细/选股历史/已清仓历史/当前持仓/已卖出
   历史/每日操作流水/全球市场对比/AI研究员…背景都是灰黑色，没有直接穿透背景显示出毛玻璃效果，
   全改！」根因=卡面 backdrop-filter:blur(20px) 把 aurora 光晕糊成平板灰黑（blur 采样的
   aurora 本身平滑无细节→糊完≈实色）。修=全站卡面撤 blur 保 rgba 白 .045 透底——aurora 光晕
   穿卡清晰可见，与 20260915 选股页同款修法（老板已认可该观感）；重采样闪烁物理根除。 */
.card{
  background:rgba(255,255,255,.045);
  border:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06), 0 4px 24px rgba(0,0,0,.35);   /* 20260916q git 考古回滚：恢复 fe2984b 入库版原配方（老板令「弄回我原来的毛玻璃」）——inset 顶缘高光+外投影 0 4px 24px 原本就在，昨晚链路误删 */
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);   /* 20260916q 恢复原值 20px；saturate/brightness 滤镜链与 aurora 小光斑=二轮花活全撤（老板令「撤回花花绿绿」） */
  border-radius:12px;
  display:flex; flex-direction:column; min-height:0; min-width:0;
  position:relative; z-index:1;
}
/* 20260916 老板令「卡片的圆角后面有直角底色，找找是什么原因生成的」根因定案：
   上一轮全站撤 backdrop-filter 后卡面脱合成层走慢径绘制——Chromium 在非整数 zoom 光栅
   （老板机 125% 系统缩放 ≈1.775 有效光栅）下圆角背景角部裁剪失准=方角漏出卡底色
   （老板机实拍实证；IAB dpr1 整数光栅不可复现，撤 blur 时点吻合）。
   修=卡面族强制独立合成层（与 th-stuck translateZ(0) 同款已验证经典对策）——
   合成器对 背景+边框 按正确圆角整片栅格化，直角底不再漏出；零布局/视觉副作用，
   不裁弹出层（clip-path 方案会剪掉卡外下拉菜单故弃）。 */
.card, .hd-card, .bt-chart-curve, .ws-cat, .ws-card,
.hz-kpi, .hz-col, .b-kpi, .b-col, .mk-card, .fx-card, .st-card{
  transform:translateZ(0);   /* 20260916q 撤二轮 inset 高光公共行（原配方高光在 .card 组合投影内）；translateZ 本身系昨晚产物，随原配方恢复一并评估——暂留防直角底复发 */
}
.card-hd{
  height:27px; flex:0 0 27px;
  display:flex; align-items:center; gap:8px; padding:0 12px;
  background:transparent;
}
.hd-t{ font-size:14px; font-weight:600; color:var(--txt); letter-spacing:.04em; }
.hd-en{ font-family:var(--mono); font-size:10px; letter-spacing:.16em; color:var(--txt3); text-transform:uppercase; }
.hd-sp{ flex:1; }
.hd-meta{ font-family:var(--mono); font-size:10px; color:var(--txt3); letter-spacing:.04em; }
.hd-tag{
  font-size:9px; letter-spacing:.1em; padding:2px 6px; border:1px solid;
}
.hd-tag.red{ color:var(--up); border-color:rgba(226,86,74,.5); background:rgba(226,86,74,.09); }
.hd-tag.gold{ color:var(--gold); border-color:rgba(217,164,65,.45); background:rgba(217,164,65,.08); }
.hd-tag.dim{ color:var(--txt3); border-color:var(--line2); }
/* AI 研判来源徽标：真实AI / 演示文案 */
.ai-badge{
  font-size:9px; letter-spacing:.08em; padding:2px 7px; border-radius:9px;
  color:var(--ac); border:1px solid rgba(37,160,108,.5); background:rgba(37,160,108,.10);
}
.ai-badge.demo{ color:var(--txt3); border-color:var(--line2); background:rgba(120,136,158,.08); }
.card-bd{ flex:1; min-height:0; position:relative; padding:10px; }

/* ============ 总览 · 行 1 · A股仪表盘 ============ */
.row1{ flex:0 0 316px; display:flex; gap:8px; min-height:0; }
.gauge-card{ flex:0 0 56%; }
.gauge-stage{ position:relative; height:100%; display:flex; flex-direction:column; }
.gauge-svg{ flex:1; min-height:0; width:100%; }
.gauge-ro{
  position:absolute; left:0; right:0; bottom:0;
  display:flex; align-items:flex-end; justify-content:center; gap:26px;
  padding:0 14px 8px;
}
.g-val-big{
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:44px; font-weight:700; line-height:1; color:var(--up);
  letter-spacing:-.01em;
}
.g-val-cap{ font-size:10px; color:var(--txt3); letter-spacing:.3em; margin-bottom:6px; }
.g-val-of{ font-family:var(--mono); font-size:14px; color:var(--txt3); margin-left:4px; }
.g-right{ text-align:left; padding-bottom:2px; }
.g-chip{
  display:inline-flex; align-items:center; gap:6px;
  font-size:10px; letter-spacing:.14em; color:var(--up);
  border:1px solid rgba(226,86,74,.55); background:rgba(226,86,74,.10);
  padding:2px 8px;
}
.g-pct{ font-family:var(--mono); font-size:18px; font-weight:700; color:var(--up); }
.g-pct-l{ font-size:9px; color:var(--txt3); letter-spacing:.12em; }
.g-bar{ width:96px; height:4px; background:var(--line2); margin-top:4px; position:relative; }
.g-bar i{ position:absolute; left:0; top:0; bottom:0; background:linear-gradient(90deg,#d92b4e,#ff2d55); }
.g-scale{
  display:flex; justify-content:space-between;
  font-family:var(--mono); font-size:9px; color:var(--txt3);
  padding:0 10px 6px; letter-spacing:.05em;
}

/* ============ 总览 · 行 1 · AI 综合研判 ============ */
.ai-card{ flex:1; }
.ai-bd{ display:flex; flex-direction:column; gap:8px; padding:10px 12px; }
.ai-verdict{
  font-size:13px; line-height:1.75; color:var(--txt);
  text-wrap:pretty; padding:8px 10px;
  border-left:2px solid var(--gold);
  background:linear-gradient(90deg, rgba(217,164,65,.07), rgba(217,164,65,0) 55%);
}
.ai-verdict .up{ font-family:var(--mono); font-weight:700; }
.ai-factors{ display:flex; gap:18px; }
.ai-col{ flex:1; }
.ai-col-h{ display:flex; align-items:center; gap:6px; font-size:10px; letter-spacing:.18em; color:var(--txt2); margin-bottom:5px; }
.ai-col-h i{ width:6px; height:6px; }
.ai-col-h i.up{ background:var(--up); } .ai-col-h i.down{ background:var(--down); }
.ai-row{ display:flex; align-items:center; gap:6px; height:20px; }
.ai-n{ width:60px; font-size:11px; color:var(--txt2); flex:0 0 60px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ai-bar{ flex:1; height:4px; background:var(--line2); position:relative; }
.ai-bar i{ position:absolute; left:0; top:0; bottom:0; }
.ai-bar i.up{ background:linear-gradient(90deg,#d92b4e,#ff2d55); }
.ai-bar i.down{ background:linear-gradient(90deg,var(--down2),var(--down)); }
.ai-v{ font-family:var(--mono); font-size:11px; font-weight:700; width:22px; text-align:right; }
.ai-rec{
  font-size:12px; line-height:1.7; color:#cdd4dc;
  padding:7px 10px; border:1px solid var(--line);
  background:var(--well);
}
.ai-rec .gold{ font-weight:600; }
.ai-meta{ font-family:var(--mono); font-size:9px; color:var(--txt3); letter-spacing:.06em; display:flex; justify-content:space-between; }

/* ============ 总览 · 行 2 · 全球市场热度横条 ============ */
.row2{ flex:0 0 104px; display:flex; min-height:0; }
.heat-card{ flex:1; }
.heat-bd{ display:flex; align-items:stretch; height:calc(100% - 27px); }
.hm{
  flex:1; display:flex; flex-direction:column; justify-content:center;
  padding:8px 16px; border-right:1px solid var(--line);
}
.hm:last-child{ border-right:none; }
.hm-top{ display:flex; align-items:baseline; gap:8px; }
.hm-n{ font-size:12px; color:var(--txt2); letter-spacing:.05em; }
.hm-v{ font-family:var(--mono); font-size:22px; font-weight:700; line-height:1; }
.hm-l{ font-size:9px; letter-spacing:.12em; padding:1px 6px; border:1px solid; margin-left:auto; }
.hm-l.red{ color:var(--up); border-color:rgba(226,86,74,.5); background:rgba(226,86,74,.08); }
.hm-l.dred{ color:#e08680; border-color:rgba(180,35,35,.55); background:rgba(180,35,35,.12); }
.hm-l.grn{ color:var(--down); border-color:rgba(37,160,108,.5); background:rgba(37,160,108,.08); }
.hm-l.mid{ color:var(--gold); border-color:rgba(217,164,65,.45); background:rgba(217,164,65,.08); }
.hm-track{ position:relative; height:5px; background:var(--line2); margin:8px 0 6px; }
.hm-fill{ position:absolute; left:0; top:0; bottom:0; }
.hm-fill.hot{ background:linear-gradient(90deg,#7d2a22,#ff2d55); }
.hm-fill.vhot{ background:linear-gradient(90deg,#7d1515,#ff2d55); }
.hm-fill.cool{ background:linear-gradient(90deg,#1b5c3e,var(--down)); }
.hm-fill.mid{ background:linear-gradient(90deg,#a97b2c,#f5a524); }
.hm-dot{ position:absolute; top:-2.5px; width:10px; height:10px; border-radius:50%;
  background:#0b0f15; border:2px solid; transform:translateX(-50%); }
.hm-dot.hot{ border-color:#ff2d55; } .hm-dot.vhot{ border-color:#ff2d55; } .hm-dot.cool{ border-color:var(--down); } .hm-dot.mid{ border-color:#f5a524; }
.hm-meta{ font-family:var(--mono); font-size:9px; color:var(--txt3); letter-spacing:.05em; }

/* ============ 总览 · 行 3 · 雷达 + 右侧 ============ */
.row3{ flex:1; display:flex; gap:8px; min-height:0; }
.radar-card{ flex:0 0 56%; }
.radar-bd{ display:flex; align-items:center; gap:6px; height:calc(100% - 27px); padding:6px 10px; }
.radar-svg{ flex:0 0 auto; height:100%; max-height:300px; }
.fact-list{ flex:1; display:flex; flex-direction:column; justify-content:center; gap:2px; }
.frow{ display:flex; align-items:center; gap:6px; height:20px; }
.frow .ai-n{ width:60px; flex:0 0 60px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.frow .ai-bar{ height:4px; }
.frow .ai-v{ width:24px; }
.frow .f-t{ font-family:var(--mono); font-size:9px; color:var(--txt4); width:40px; }
.fbar{ position:absolute; left:0; top:0; bottom:0; }

.r3-right{ flex:1; display:flex; flex-direction:column; gap:8px; min-height:0; }
.sig-card{ flex:0 0 46%; }
.sig-bd{ padding:6px 10px; display:flex; flex-direction:column; justify-content:space-around; height:calc(100% - 27px); }
.sig{
  display:flex; align-items:center; gap:8px; height:24px;
  border-bottom:1px dashed var(--line); padding-bottom:4px; margin-bottom:4px;
}
.sig:last-child{ border-bottom:none; }
.sig-n{ font-size:12px; color:var(--txt); width:56px; flex:0 0 56px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sig-c{ font-family:var(--mono); font-size:9px; color:var(--txt3); }
.sig-bar{ flex:1; height:4px; background:var(--line2); position:relative; }
.sig-bar i{ position:absolute; left:0; top:0; bottom:0; background:linear-gradient(90deg,#a97b2c,#f5a524); }
.sig-v{ font-family:var(--mono); font-size:14px; font-weight:700; color:var(--gold); width:26px; text-align:right; }
.sig-t{ font-size:9px; color:var(--txt2); border:1px solid var(--line2); padding:1px 5px; letter-spacing:.08em; }
.sig-ftr{ display:flex; justify-content:space-between; font-family:var(--mono); font-size:9px; color:var(--txt3); margin-top:2px; }
.sig-ftr a{ color:var(--gold); text-decoration:none; cursor:pointer; }

.flow-card{ flex:1; }
.flow-bd{ padding:5px 12px 6px; height:calc(100% - 27px); display:flex; flex-direction:column; justify-content:center; }
.flow{
  display:flex; align-items:baseline; gap:8px; height:22px;
  font-size:11px; color:var(--txt);
}
.flow-i{ font-family:var(--mono); font-size:10px; color:var(--gold); width:18px; flex:0 0 18px; font-weight:700; }
.flow-t{ color:var(--txt); white-space:nowrap; }
.flow-d{ margin-left:auto; font-family:var(--mono); font-size:9px; color:var(--txt3); white-space:nowrap; }

/* ============ 底部状态栏 ============ */
.statusbar{
  height:26px; flex:0 0 26px;
  display:flex; align-items:center; gap:16px; padding:0 14px;
  border-top:1px solid var(--line);
  background:rgba(255,255,255,.02); backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
  font-family:var(--mono); font-size:12px; color:var(--txt2);
  letter-spacing:.04em;
}
.sb-echo{ color:var(--txt2); }
.sb-echo .gold{ color:var(--gold); }

/* ============ 未建页面占位 ============ */
.placeholder{
  flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px;
  border:1px dashed var(--line2); color:var(--txt3);
}
.placeholder .pl-tag{ font-family:var(--mono); font-size:10px; letter-spacing:.2em; color:var(--gold); border:1px solid var(--line2); padding:2px 8px; }
.placeholder .pl-title{ font-size:18px; color:var(--txt2); letter-spacing:.1em; }
.placeholder .pl-desc{ font-size:11px; color:var(--txt3); }

/* ============ 加载遮罩 ============ */
.loading{
  flex:1; display:flex; align-items:center; justify-content:center;
  color:var(--txt3); font-family:var(--mono); font-size:11px; letter-spacing:.14em;
  gap:8px;
}
.loading .sp{ width:8px; height:8px; border-radius:50%; background:var(--gold); animation:blink 1s steps(2) infinite; }

/* ============ M2 · 全球市场 ============ */
.mk-ruler{ flex:0 0 auto; }
.ruler{ padding:10px 12px 8px; }
.ruler-bar{ position:relative; display:flex; height:10px; border:1px solid var(--line); }
.ruler-seg{ height:100%; }
.ruler-rule{ position:absolute; top:-3px; bottom:-3px; width:1px; background:var(--txt); opacity:.5; }
.ruler-labels{ display:flex; font-family:var(--mono); font-size:9px; color:var(--txt3); margin-top:4px; }
.ruler-tiers{ display:flex; justify-content:space-between; font-size:9px; color:var(--txt3); margin-top:2px; letter-spacing:.05em; }
.mk-grid{ display:flex; flex-wrap:wrap; gap:8px; }
.mk-card{ flex:0 0 calc(33.333% - 6px); display:flex; flex-direction:column; gap:6px;
  background:linear-gradient(180deg,#0d1118,#07080c); border:1px solid var(--line); padding:10px 12px; min-height:120px; }
.mk-top{ display:flex; align-items:center; gap:6px; }
.mk-name{ font-size:13px; color:var(--txt); font-weight:600; }
.mk-reg{ font-family:var(--mono); font-size:9px; color:var(--txt3); border:1px solid var(--line2); padding:0 4px; }
.mk-badge{ margin-left:auto; font-size:9px; letter-spacing:.08em; padding:1px 6px; border:1px solid; }
.mk-badge.red{ color:var(--up); border-color:rgba(226,86,74,.5); background:rgba(226,86,74,.08); }
.mk-badge.dred{ color:#e08680; border-color:rgba(180,35,35,.55); background:rgba(180,35,35,.12); }
.mk-badge.grn{ color:var(--down); border-color:rgba(37,160,108,.5); background:rgba(37,160,108,.08); }
.mk-badge.mid{ color:var(--gold); border-color:rgba(217,164,65,.45); background:rgba(217,164,65,.08); }
.mk-mid{ display:flex; align-items:baseline; gap:8px; }
.mk-score{ font-family:var(--mono); font-size:28px; font-weight:700; line-height:1; }
.mk-of{ font-family:var(--mono); font-size:11px; color:var(--txt3); }
.mk-delta{ font-family:var(--mono); font-size:12px; font-weight:700; margin-left:auto; }
.mk-chart{ height:34px; }
.mk-nospark{ font-size:10px; color:var(--txt3); }
.mk-foot{ display:flex; flex-direction:column; gap:2px; }
.mk-crash{ font-size:10px; color:var(--txt2); }
.mk-memo{ font-size:10px; color:var(--txt3); line-height:1.5; }

/* ============ M2 · 市道热度 ============ */
.as-row1{ display:flex; gap:10px; min-height:0; min-width:0; align-items:stretch; }
.as-gauge{ flex:1; min-width:0; overflow:hidden; }
.as-comp{ flex:1; min-width:0; overflow:hidden; }
.as-facts{ flex:1; min-width:0; overflow:hidden; }
.facts-bd{ padding:10px 12px; display:flex; flex-direction:column; gap:4px; justify-content:space-between; }
.fact-row{ display:flex; align-items:center; gap:6px; font-size:11px; padding:4px 7px; background:#0d141d; border-radius:4px; }
.fact-id{ font-family:var(--mono); font-size:9px; color:var(--txt3); flex:0 0 auto; }
.fact-name{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--txt2); }
.fact-val{ flex:0 0 auto; font-size:11px; font-weight:600; }
.comp-bd{ padding:10px 12px; display:flex; flex-direction:column; gap:9px; }
.comp-top{ display:flex; align-items:baseline; gap:6px; margin-bottom:3px; }
.comp-name{ font-size:12px; color:var(--txt); }
.comp-val{ font-size:14px; font-weight:700; margin-left:auto; }
.comp-bar{ height:6px; background:var(--line2); position:relative; }
.comp-bar i{ position:absolute; left:0; top:0; bottom:0; }
.comp-note{ font-size:9px; color:var(--txt3); margin-top:3px; line-height:1.4; }
.as-row2{ display:flex; gap:10px; min-height:0; min-width:0; align-items:stretch; }
.as-cycle{ flex:0 0 320px; width:320px; max-width:320px; min-width:0; overflow:hidden; }
.as-timeline{ flex:1; min-width:0; overflow:hidden; }
.tl-hint{ font-size:9px; color:var(--txt3); margin:2px 0 3px; letter-spacing:.08em; }
#asHeatCurve{ position:relative; margin-bottom:2px; }
#asYearBand{ display:flex; gap:1px; }
#asMonthBand{ display:flex; flex-direction:column; gap:1px; }
.mb-row{ display:flex; align-items:center; gap:4px; }
.mb-year{ font-family:var(--mono); font-size:9px; color:var(--txt3); width:34px; flex:0 0 auto; }
.band-strip2{ padding:10px 12px 0; }
.band-strip2 .band-strip{ height:40px; }
.tl-note{ font-size:10px; color:var(--txt3); padding:6px 12px 2px; line-height:1.5; }
.band-bd{ padding:12px 12px 8px; }
.band-strip{ display:flex; height:56px; border:1px solid var(--line); overflow:hidden; }
.band-seg{ position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; }
.band-num{ font-family:var(--mono); font-size:9px; color:#07080c; font-weight:700; }
.band-name{ font-size:9px; color:#07080c; font-weight:600; letter-spacing:.03em; }
.band-cur{ position:absolute; top:-5px; left:50%; transform:translateX(-50%); font-size:8px; color:#fff; background:#ff2d55; padding:0 4px; letter-spacing:.1em; }
.hist-bd{ padding:12px; }
.hist-chart{ height:110px; }
.hist-dates{ display:flex; justify-content:space-between; font-family:var(--mono); font-size:8px; color:var(--txt3); margin-top:4px; }

/* ============ M2 · 因子中心 ============ */
.fx-row1{ display:flex; gap:8px; min-height:0; flex:0 0 330px; }
.fx-radar{ flex:0 0 56%; }
.fx-ai{ flex:1; }
.fx-rows{ display:flex; flex-direction:column; gap:8px; }
.fx-note{ font-size:11px; line-height:1.65; color:var(--txt); padding:7px 10px; border:1px solid var(--line); background:var(--well); }
.fx-note-t{ display:inline-block; font-size:9px; letter-spacing:.12em; color:var(--gold); border:1px solid rgba(217,164,65,.4); padding:1px 5px; margin-right:6px; }
.fx-risk .fx-note-t{ color:var(--up); border-color:rgba(226,86,74,.5); }
.fx-grid{ display:flex; flex-wrap:wrap; gap:8px; }
.fx-card{ flex:0 0 calc(25% - 6px); display:flex; flex-direction:column; gap:8px;
  background:linear-gradient(180deg,#0d1118,#07080c); border:1px solid var(--line); padding:10px 12px; }
.fx-top{ display:flex; align-items:baseline; gap:8px; }
.fx-name{ font-size:13px; color:var(--txt); font-weight:600; }
.fx-score{ font-family:var(--mono); font-size:22px; font-weight:700; line-height:1; }
.fx-w{ font-family:var(--mono); font-size:9px; color:var(--txt3); margin-left:auto; }
.fx-subs{ display:flex; flex-direction:column; gap:4px; }
.sub-row{ display:flex; align-items:center; gap:6px; }
.sub-name{ font-size:10px; color:var(--txt2); width:56px; flex:0 0 56px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sub-bar{ flex:1; height:4px; background:var(--line2); position:relative; }
.sub-bar i{ position:absolute; left:0; top:0; bottom:0; }
.sub-v{ font-family:var(--mono); font-size:9px; color:var(--txt3); width:22px; text-align:right; }
.fx-detail{ font-size:9px; color:var(--txt3); line-height:1.5; }

/* ============ M3 · 智能选股 ============ */
select.sc-ctl, input.sc-ctl{ background:rgba(255,255,255,.04); border:1px solid var(--line2); color:var(--txt); font-family:var(--mono); font-size:12px; height:26px; padding:0 8px; outline:none; border-radius:7px; }
select.sc-ctl:focus, input.sc-ctl:focus{ border-color:var(--down); }
input.sc-ctl{ width:132px; }
input.sc-ctl::-webkit-calendar-picker-indicator{ filter:invert(.75); cursor:pointer; }
.sc-ctrl-bd{ display:flex; align-items:center; gap:8px; padding:12px 14px; flex-wrap:wrap; }
.sc-ctrl-bd label{ font-size:12px; color:var(--txt2); white-space:nowrap; }
/* 参数中心 · 单列纵向，每参数一行(label右对齐+input紧邻) */
.pm-grid{ display:grid; grid-template-columns:1fr; gap:9px; padding:14px 16px; align-items:center; }
.pm-item{ display:flex; align-items:center; gap:10px; min-width:0; }
.pm-item > label{ flex:0 0 150px; font-size:12px; color:var(--txt2); white-space:nowrap; text-align:right; }
.pm-item > .sc-ctl{ flex:0 1 360px; }
.pm-item .pm-check{ display:inline-flex; align-items:center; gap:6px; font-size:12px; color:var(--txt2); margin-right:12px; }
.pm-item .sc-chk{ font-size:12px; color:var(--txt2); display:inline-flex; align-items:center; gap:6px; white-space:nowrap; }
.pm-item.grp{ color:var(--gold); font-weight:700; font-size:13px; letter-spacing:.03em; }
.pm-item.wide{ grid-column:1/-1; }
.pm-item.wide .hd-dim{ color:var(--txt3); font-size:11px; }
.sc-scan-btn{ font-family:var(--mono); font-size:11px; color:var(--gold); border:1px solid rgba(217,164,65,.5); background:rgba(217,164,65,.08); padding:3px 14px; cursor:pointer; margin-left:auto; }
.sc-scan-btn:hover{ background:rgba(217,164,65,.16); }
.sc-scan-btn:disabled{ opacity:.5; cursor:default; }
.sc-progress{ height:5px; background:var(--line2); margin:0 12px; position:relative; }
.sc-bar{ position:absolute; left:0; top:0; bottom:0; width:0%; background:linear-gradient(90deg,#a97b2c,#f5a524); transition:width .25s; }
.sc-status{ font-family:var(--mono); font-size:10px; color:var(--txt3); padding:6px 12px 8px; letter-spacing:.03em; min-height:14px; font-variant-numeric:tabular-nums; }   /* 20260912y 老板报「数字1窄·进度行跳动」：Space Grotesk 数字等宽（回测/选股两条进度行同治） */
.sc-main{ display:flex; gap:8px; min-height:0; flex:1; }
.sc-table-card{ flex:0 0 72%; display:flex; flex-direction:column; }
.sc-detail{ flex:1; display:flex; flex-direction:column; }
/* 2026-09-11 老板令：全站表格统一——铺满容器（列随分辨率自适应分布）+紧凑 padding+全部左对齐（表头首字与表单首字对应，像回测历史） */
.term-table{ width:100%; border-collapse:collapse; font-size:13px; }
.term-table th{ font-family:var(--mono); font-size:11px; color:var(--txt2); text-align:left; padding:4px 8px; border-bottom:1px solid var(--line2); letter-spacing:.06em; white-space:nowrap; }   /* 2026-08-29 用户裁定：以影子账户持仓表为准——表头无底色、不 sticky，融入卡片 */
.term-table td{ padding:4px 8px; border-bottom:1px solid var(--line); color:var(--txt); white-space:nowrap; }
.term-table tbody tr{ cursor:pointer; }
.term-table tbody tr:hover{ background:rgba(255,255,255,.04); }
.term-table .num{ font-family:var(--mono); font-variant-numeric:tabular-nums; }
.sc-table-body{ flex:1; overflow-y:auto; }
.sc-jump{ display:inline-flex; align-items:center; justify-content:center; width:30px; height:20px;
  font-family:var(--mono); font-size:12px; color:var(--gold);
  border:1px solid var(--line); border-radius:6px; background:rgba(255,255,255,.05); cursor:pointer; padding:0; }   /* 2026-09-10 老板令：直角小方块撤，换系统标准按钮材质（同 .btn 圆角/底/悬停），保留金色箭头识别 */
.sc-jump:hover{ color:var(--txt); border-color:var(--line2); background:rgba(255,255,255,.08); }
#scTbody tr.cur{ background:rgba(217,164,65,.16); box-shadow:inset 2px 0 0 var(--gold); }
/* 扫描结果表固定列宽（20260915 老板令列序重排：选股日期|代码|名称|收盘|实时股价|距今涨幅|形态分|模型分|策略|信号|跳转）：
   任何历史加载宽度恒定，不随内容跳动；table-layout:fixed 下未指定宽度列（信号）自动吸收剩余空间 */
.sc-table-card .term-table{ table-layout:fixed; }
.sc-table-card .term-table th:nth-child(1){ width:74px; }   /* 选股日期 09-14 */
.sc-table-card .term-table th:nth-child(2){ width:76px; }   /* 代码 600872 */
.sc-table-card .term-table th:nth-child(3){ width:92px; }   /* 名称 4-6字 */
.sc-table-card .term-table th:nth-child(4){ width:70px; }   /* 收盘 108.40（选股日） */
.sc-table-card .term-table th:nth-child(5){ width:74px; }   /* 实时股价 107.71（15点后=当日收盘冻结） */
.sc-table-card .term-table th:nth-child(6){ width:74px; }   /* 距今涨幅 +10.02%（选股日收盘→实时） */
.sc-table-card .term-table th:nth-child(7){ width:70px; }   /* 形态分 97.02（规则门槛） */
.sc-table-card .term-table th:nth-child(8){ width:70px; }   /* 模型分 98.7（rank_q 0-100） */
.sc-table-card .term-table th:nth-child(9){ width:86px; }   /* 策略 单针探底 */
.sc-table-card .term-table th:nth-child(10){ width:calc(100% - 740px); }  /* 信号：剩余空间（其余列固定740px） */
.sc-table-card .term-table th:nth-child(11){ width:52px; }  /* 通达信按钮 */
.sc-table-card .term-table td{ overflow:hidden; text-overflow:ellipsis; }
/* 信号列完整折行不截断（2026-09-03 落地04：文字完整不截断），hover title 亦有全文 */
.sc-table-card .term-table td.sc-sig{ overflow:visible; text-overflow:clip; white-space:normal; overflow-wrap:anywhere; }
/* 扫描结果标题完整显示（统计+广度chip 不截断）；加宽表格区后空间足够 */
.sc-table-card .card-hd .hd-meta{ overflow:visible; white-space:nowrap; text-overflow:clip; }
.sc-empty{ padding:20px; text-align:left; color:var(--txt3); font-size:11px; }
.det-bd{ flex:1; overflow-y:auto; padding:10px 12px; }
.det-note{ color:var(--txt3); font-size:11px; }
.det-title{ font-size:13px; color:var(--txt); font-weight:600; margin-bottom:6px; }
.det-lines{ font-family:var(--mono); font-size:11px; color:var(--txt2); margin-bottom:4px; }
.det-score{ font-family:var(--mono); font-size:16px; font-weight:700; margin-bottom:8px; }
.det-sec{ margin-top:10px; }
.det-sec-h{ font-size:11px; color:var(--txt); font-weight:600; margin-bottom:4px; letter-spacing:.05em; }
.det-sig{ font-size:11px; color:var(--txt2); line-height:1.6; padding-left:8px; border-left:1px solid var(--line); margin-bottom:5px; }
.det-sig b{ color:var(--txt); }
.det-zg{ margin-top:12px; border-top:1px solid var(--line); padding-top:8px; }
.det-zg-h{ color:var(--gold); font-size:11px; font-weight:600; margin-bottom:5px; letter-spacing:.08em; }
.det-zg div{ font-size:11px; color:var(--txt2); line-height:1.7; }
.sc-hist{ flex:0 0 200px; }
.sc-hist-body{ flex:1; overflow-y:auto; }
/* 历史表自适应（2026-09-06 需求_回测历史表自适应_参数瘦身_删除按钮重做.md）：
   老板非全屏宽度为第一基准——收 padding/字号、摘要列允许换行保完整可读，横向不再溢出视口 */
.sc-hist-body .term-table th{ padding:5px 6px; }
.sc-hist-body .term-table td{ padding:4px 6px; font-size:12px; }
#btHistBody td.hist-sum, #scHistBody td.hist-sum{ white-space:normal; min-width:150px; }
/* 删除按钮重做（同卡施工3）：并入站点胶囊按钮语言（bt-btn 家族），明显可点；hover 危险红改实心更醒目 */
.hist-del{ font-family:var(--mono); font-size:11px; color:var(--txt2); border:1px solid var(--line2); background:var(--well); cursor:pointer; padding:2px 10px; border-radius:999px; line-height:1.4; }
.hist-del:hover{ color:#fff; background:rgba(226,86,74,.78); border-color:rgba(226,86,74,.9); }
#btHistBody tr.act .hist-del:hover, #scHistBody tr.act .hist-del:hover{ color:#fff; background:rgba(226,86,74,.78); border-color:rgba(226,86,74,.9); }
/* 历史行中央「K线」按钮：点击进入该记录的K线详情模式（点击行本身只加载概览） */
.hist-kline{ font-family:var(--mono); font-size:10px; font-weight:600; color:var(--accent); border:1px solid rgba(74,158,255,.45); background:rgba(74,158,255,.08); cursor:pointer; padding:1px 7px; border-radius:3px; margin-right:6px; }
.hist-kline:hover{ background:rgba(74,158,255,.2); border-color:var(--accent); }
/* 历史行点击选中：与策略表现行一致的选中效果 */
#btHistBody tr{ cursor:pointer; }
#btHistBody tr.act{ background:rgba(217,164,65,.10); box-shadow:inset 2px 0 0 var(--gold); }
#btHistBody tr.act .hist-del{ color:var(--txt2); border-color:var(--line3); }
/* 智能选股历史行选中高亮（与回测历史一致） */
#scHistBody tr{ cursor:pointer; }
#scHistBody tr.act{ background:rgba(217,164,65,.10); box-shadow:inset 2px 0 0 var(--gold); }
#scHistBody tr.act .hist-del{ color:var(--txt2); border-color:var(--line3); }

/* ============ M4 · 选股回测 ============ */
.bt-btn{ font-family:var(--mono); font-size:11px; color:var(--txt2); border:1px solid var(--line2); background:var(--well); padding:3px 12px; cursor:pointer; }
.bt-btn:hover{ color:var(--txt); border-color:var(--line3); }
.bt-btn:disabled{ opacity:.5; cursor:default; }
.sc-num{ width:76px; }
.bt-body{ display:flex; gap:8px; flex:1; min-height:0; }
.bt-tabs{ flex:1; display:flex; flex-direction:column; min-width:0; border:1px solid var(--line); background:transparent; }   /* 20260916 老板令玻璃穿透：原实底渐变(#0d1118,#07080c)=玻璃卡背后的深灰板（假穿透/直角灰背景来源之一），改透明直显极光 */
.bt-tabbar{ display:flex; flex-wrap:wrap; border-bottom:1px solid var(--line); background:#0b1016; flex:0 0 auto; }
.bt-tab{ padding:7px 16px; font-size:11px; color:var(--txt2); border-right:1px solid var(--line); cursor:pointer; white-space:nowrap; }
.bt-tab.act{ color:var(--gold); background:linear-gradient(180deg,#141a24,#0d1118); box-shadow:inset 0 2px 0 var(--gold); }
.bt-pane{ display:none; flex:1; min-height:0; flex-direction:column; gap:10px; padding:12px; overflow-y:auto; }
.bt-info{ font-size:11px; color:var(--txt3); line-height:1.7; }
.bt-stats{ display:flex; gap:3px; flex-wrap:nowrap; flex:0 0 158px; flex-direction:column; }   /* 主统计：左列表格，一行一个 */
.cen-stats{ display:flex; gap:8px; flex:0 0 auto; }
.bt-stat{ flex:0 0 auto; min-width:0; background:linear-gradient(180deg,#0d1118,#07080c); border:1px solid var(--line); padding:3px 8px; display:flex; flex-direction:row; align-items:center; justify-content:space-between; gap:6px; width:100%; }
.bs-t{ font-size:11px; color:var(--txt3); letter-spacing:.08em; white-space:nowrap; }
.bs-v{ font-family:var(--mono); font-size:13px; font-weight:700; }
/* 模拟单吊统计/分组：整行横排（覆盖主统计左列竖排布局） */
.bt-sb-stats{ flex:0 0 100%; flex-direction:row; flex-wrap:wrap; }
.bt-sb-stats .bt-stat{ width:auto; flex:1 1 auto; min-width:86px; }
/* 净值曲线容器基础（单吊/概览共用）
   2026-09-10 老板令「直角灰黑底撤，像影子账户那样」：.bt-chart 自带 --well 近黑底+直角边框+6px 内衬
   =黑框真身（玻璃圆角的曲线卡被框在直角黑板上）——容器归零镀铬（透极光），曲线卡自带玻璃圆角，
   观感=影子账户玻璃卡曲线；cen/sb 图表挂载同款一并去黑 */
.bt-chart{ background:transparent; border:none; padding:0; min-width:0; }
/* 净值曲线卡片（概览主视觉 2026-09-03 布局重排）：曲线大图居顶 + 统计指标条化横排其下 */
#btChart{ grid-area:chart; display:flex; flex-direction:column; flex-wrap:nowrap; align-items:stretch; gap:6px;
  min-height:240px; height:auto; }   /* 20260916 老板令「不要右侧滑块」终值：620→420→240，随 pane 预算弹性（bt-overview 改 flex:1 填充），任何屏不再溢出 */
.bt-chart-curve{ position:relative; flex:1 1 0; min-width:0; min-height:0; background:rgba(255,255,255,.045); backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px); border:1px solid var(--line); border-radius:12px; }   /* 20260916q git 考古回滚至 fe2984b 原配方（老板令「弄回我原来的毛玻璃」）；2026-09-10 老板令「大黑框」撤：换K线同款玻璃卡材质 */
/* flex 渲染顺序（重排后）：净值曲线(-1 主视觉置顶) → 主统计(0 条化横排) → 单吊统计(2) → 单吊分组(3) */
#btChart > .bt-chart-curve{ order:-1; min-height:200px; }   /* 20260916 老板令二调「阻止机制全删+适当缩短净值曲线」：540→300→200，曲线吃 pane 弹性余量 */
#btChart > .bt-stats{ order:0; flex:0 0 auto; flex-direction:row; flex-wrap:wrap; }
#btChart > .bt-stats .bt-stat{ width:auto; flex:1 1 auto; min-width:100px; }
#btChart > .bt-sb-stats{ order:2; }
#btChart > .bt-sb-groups{ order:3; }
.bt-chart svg.lc{ display:block; }
/* 概览 grid：stats 在 chart 卡片内部，不再全宽独立行；chart(左大) + two(右窄列上下叠) → hist 全宽底部
   2026-08-21bh 修复「新增任务展开后回测历史被挤看不见、无滚动条」：
   .bt-pane 是 flex 列（flex:1/min-height:0/overflow-y:auto），其子项 .bt-overview 默认 flex:0 1 auto
   且 min-height:0 → 配置卡变高把 pane 压矮时，概览被压缩（flex-shrink），grid 自动行把
   可缩的 .bt-hist（.card 的 min-height:0）挤到几乎看不见，且 pane 无溢出 → 页面/面板都不滚动。
   改为 flex:0 0 auto（不压缩，概览保持内容高度）→ 高度超出时由 .bt-pane 的 overflow-y:auto
   出滚动条，回测历史始终完整可滚到。 */
.bt-overview{ display:grid; grid-template-columns:minmax(0,1fr) 400px; gap:10px;
  grid-template-areas:"chart two" "hist hist"; align-items:stretch; min-height:0; flex:0 0 auto; }
/* 20260916 老板令「回测结果窗不要右侧滑块」：概览改填充式——pane 有多少用多少（自身可收缩，
   图表/两卡随行伸缩），内容与窗高恒自洽，滑块物理消失 */
#term.page-backtest .bt-overview{ flex:1 1 auto; min-height:0; }
.bt-two{ grid-area:two; display:flex; flex-direction:column; gap:8px; min-height:0; height:auto; }
.bt-sub{ flex:1; display:flex; flex-direction:column; min-height:0; }
/* 20260916 老板令「分段表现和策略表现要保持同高度」：flex 基准 0 严格对半（内容差不再撑歪），
   超出部分由各自 tablewrap 内滚消化 */
#term.page-backtest .bt-two .bt-sub{ flex:1 1 0; min-height:0; overflow:hidden; }
.bt-sub .tablewrap{ flex:1; overflow:auto; }
.bt-hist{ grid-area:hist; flex:0 0 auto; display:flex; flex-direction:column; }
.bt-detail{ display:flex; gap:10px; flex:1; min-height:0; }
.bt-kline{ flex:1.7; display:flex; flex-direction:column; min-width:0; min-height:0; }   /* 左 70%，直接展示 */
.bt-detail-right{ flex:0 0 30%; display:flex; flex-direction:column; gap:10px; min-width:0; min-height:0; }
.bt-detail-right .bt-evals{ flex:1; min-height:0; }      /* 右上：人工评价 */
.bt-detail-right .bt-trades{ flex:1; min-height:0; }     /* 右下：交易明细（缩小） */
.bt-trades{ display:flex; flex-direction:column; min-width:0; min-height:0; }
.bt-evals-30{ display:flex; flex-direction:column; min-width:0; min-height:0; }
.bt-trades-body{ flex:1; overflow:auto; min-height:0; }
.bt-pagebar{ display:flex; align-items:center; gap:10px; padding:6px 12px; border-top:1px solid var(--line); flex:0 0 auto; }
.bt-pagebar .btn{ font-family:var(--mono); font-size:11px; color:var(--txt2); border:1px solid var(--line2); background:var(--well); padding:2px 12px; cursor:pointer; }
.bt-pagebar .btn:hover{ border-color:var(--gold); color:var(--gold); }
.bt-pagebar .pg-info{ font-family:var(--mono); font-size:10px; color:var(--txt3); }
/* 交易明细 · 多卖点子行（一笔买入 → 1-N 卖点） */
.bt-sellrow td{ background:rgba(12,17,26,.55); padding:5px 12px; border-top:1px dashed rgba(26,35,48,.5); font-size:11px; }
.bt-sellrow:hover td{ background:rgba(26,35,48,.32); }
/* 2026-09-11 老板令「子明细太乱，规整」：内联顺排改共享网格——
   标签|日期|价格|档位%|盈亏%|原因 六列，行行纵向对齐；数字等宽字体，档位/盈亏右对齐。 */
.bt-sp{ display:grid; grid-template-columns:40px 78px 1fr 42px 66px minmax(110px, 1.6fr);
  gap:0 10px; align-items:baseline; color:var(--txt2); padding:1.5px 6px; line-height:1.7; white-space:nowrap; }
.bt-sp .c-date,.bt-sp .c-pri{ font-family:var(--mono); }
.bt-sp .c-pri{ color:var(--txt); }
.bt-sp .c-frac,.bt-sp .c-pnl{ text-align:right; font-family:var(--mono); font-variant-numeric:tabular-nums; }
.bt-sp .c-rule{ text-align:left; color:var(--txt3); overflow:hidden; text-overflow:ellipsis; }
.bt-sp-no{ color:var(--gold); font-weight:700; }
.bt-sp-reason{ color:var(--txt3); }
/* 交易明细表格内竖排子信息前缀：买入/卖出列内 买N/卖N 小标 */
.bt-sv-no{ color:var(--gold); font-weight:700; font-size:9px; margin-right:3px; }
/* 评分分段/策略表现表筛选行高亮 */
.bt-sub .term-table tbody tr[data-k].act{ background:rgba(217,164,65,.10); box-shadow:inset 2px 0 0 var(--gold); }
.bt-kline #btKline{ width:100%; }
#btTradesTable th[data-k]{ cursor:pointer; user-select:none; }
#btTradesTable thead th[data-k]:hover{ color:var(--gold); }
#btTradesTable tr{ cursor:pointer; }
#btTradesTable tr:hover{ background:rgba(217,164,65,.08); }
#btTradesTable tbody tr.cur{ background:rgba(217,164,65,.16); box-shadow:inset 2px 0 0 var(--gold); }
#btTradesTable td{ white-space:nowrap; padding-top:3px; padding-bottom:3px; }
#btTradesTable td b{ font-weight:700; }
/* 已人工评价 → 代码/名称金色高亮（★=该笔交易被评价；浅金=仅该股被打分） */
#btTradesTable td.tbl-ev{ color:var(--gold); font-weight:700; }
#btTradesTable td.tbl-ev-stk{ color:var(--gold2); }
#btTradesTable .ev-star{ color:var(--gold); font-size:9px; margin-left:3px; }
.t-met{ display:block; font-size:9px; color:var(--gold); font-family:var(--mono); letter-spacing:.03em; }
#btKlineTitle{ font-weight:700; }
#btKlineTitle .num{ color:var(--gold); }
.tablewrap{ flex:1; overflow-y:auto; min-height:0; }
.bt-advice{ font-size:12px; line-height:1.6; flex:0 0 auto; }
.bt-advice.gold{ color:var(--gold); }
.bt-advice.ok{ color:var(--down); }
.bt-apply-row{ display:flex; flex:0 0 auto; }
.cen-note{ font-size:10px; color:var(--txt3); line-height:1.7; border:1px solid var(--line); padding:8px 10px; background:var(--well); flex:0 0 auto; }
/* 回测历史 + 人工评价：全宽入主区域（评价在上，历史在最底） */
.bt-hist{ flex:0 0 auto; display:flex; flex-direction:column; }
.bt-hist .sc-hist-body{ max-height:280px; }
.bt-evals{ display:flex; flex-direction:column; min-width:0; min-height:0; }

/* ============ M5 · 交易智慧 ============ */
.ws-search{ width:280px; height:30px; padding:0 10px; border-radius:8px; }
.ws-cat{ background:rgba(255,255,255,.045); border:1px solid var(--line); border-radius:12px; margin-bottom:11px; backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px); overflow:hidden; }
.ws-cat-hd{ display:flex; align-items:center; gap:9px; padding:13px 15px; background:transparent; }
.ws-dot{ width:9px; height:9px; border-radius:50%; flex:0 0 9px; box-shadow:0 0 8px currentColor; }
.ws-cat-name{ font-size:16px; font-weight:700; }
.ws-cat-desc{ font-size:11px; color:var(--txt3); }
.ws-cat-count{ margin-left:auto; font-size:11px; color:var(--txt3); font-family:var(--mono); }
.ws-rules{ padding:2px 15px 13px; }
.ws-rule{ display:flex; gap:10px; padding:6px 0; }
.ws-rdot{ width:5px; height:5px; border-radius:50%; flex:0 0 5px; margin-top:7px; opacity:.92; box-shadow:0 0 6px currentColor; }
.ws-rule-text{ font-size:13px; color:var(--txt2); line-height:1.7; }
.ws-card{ background:rgba(255,255,255,.045); border:1px solid var(--line); border-radius:12px; margin-bottom:11px; backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px); overflow:hidden; }
.ws-card-hd{ display:flex; align-items:center; gap:8px; font-size:13px; color:var(--txt); padding:13px 15px; background:transparent; border-bottom:none; }
.ws-hits{ padding:4px 15px 13px; }
.ws-hit{ font-size:13px; color:var(--txt2); line-height:1.7; padding:4px 0; }

/* ============ 止损纪律卡片（智能选股/回测调优共用） ============ */
.st-card{ background:linear-gradient(180deg,#0d1118,#07080c); border:1px solid var(--line); }
.st-hd{ display:flex; align-items:center; gap:8px; padding:8px 12px; border-bottom:1px solid var(--line); cursor:pointer; }
.st-hd-t{ font-size:13px; font-weight:700; color:var(--gold); }
.st-hd-desc{ font-size:10px; color:var(--txt3); }
.st-toggle{ margin-left:auto; font-size:10px; color:var(--txt3); }
.st-toggle:hover{ color:var(--gold); }
.st-body{ border-top:none; }
.st-item{ border-bottom:1px dashed rgba(26,35,48,.5); }
.st-item:last-child{ border-bottom:none; }
.st-item-hd{ display:flex; align-items:flex-start; gap:8px; padding:7px 12px; cursor:pointer; }
.st-item-hd:hover{ background:rgba(26,35,48,.3); }
.st-item-txt{ flex:1; font-size:12px; color:var(--txt); line-height:1.6; }
.st-item-date{ flex:0 0 auto; font-size:10px; color:var(--txt3); margin-top:2px; }
.st-item-x{ flex:0 0 auto; width:14px; text-align:center; font-size:14px; color:var(--gold); }
.st-item-sub{ padding:2px 12px 10px; }
.st-detail{ font-size:11px; color:var(--txt2); line-height:1.7; padding:4px 0 6px; }
.st-children{ border-top:1px dashed rgba(26,35,48,.5); padding-top:6px; }
.st-child{ font-size:11px; color:var(--txt3); line-height:1.7; padding:2px 0; }

/* ============ M5 · AI 研究员 ============ */
.ai-chat{ flex:1; min-height:0; overflow-y:auto; display:flex; flex-direction:column; gap:10px; padding:4px 2px; }
.ai-bub{ max-width:78%; padding:9px 12px; border:1px solid var(--line); }
.ai-bub.user{ align-self:flex-end; background:linear-gradient(180deg,#15222e,#101a24); border-color:#2a3442; }
.ai-bub.bot{ align-self:flex-start; background:linear-gradient(180deg,#151710,#10130c); border-color:#2c2a18; }
.ai-who{ font-size:10px; font-weight:700; color:var(--txt3); letter-spacing:.1em; margin-bottom:4px; }
.ai-bub.user .ai-who{ color:#4a9eff; }
.ai-bub.bot .ai-who{ color:var(--gold); }
.ai-text{ font-size:12px; color:var(--txt); line-height:1.75; }
.ai-text b{ color:var(--gold); }
.ai-code{ font-family:var(--mono); font-size:11px; color:var(--gold2); background:var(--well); padding:0 3px; }
.ai-think{ color:var(--txt3); font-style:italic; }
.ai-chips{ padding-bottom:8px; }
.ai-chip{ }

/* ============ M5 · 参数中心 / 系统设置 ============ */
.pm-lbl{ font-size:11px; color:var(--txt2); }
.pm-check{ display:inline-flex; align-items:center; gap:4px; font-size:11px; color:var(--txt2); cursor:pointer; }
.pm-check input{ accent-color:var(--gold); }
.set-form{ padding:10px 12px; display:flex; flex-direction:column; gap:8px; }
.set-row{ display:flex; align-items:center; gap:10px; }
.set-row > label:not(.pm-check){ font-size:11px; color:var(--txt2); width:110px; flex:0 0 110px; }
.set-row input{ flex:1; max-width:420px; height:24px; padding:0 8px; }
.set-row .pm-check{ flex:0 0 auto; }
.set-row .sc-scan-btn{ margin-left:auto; }
.st-sources{ padding:10px 12px; display:flex; flex-direction:column; gap:6px; }
.st-row{ display:flex; align-items:center; gap:8px; font-size:11px; }
.st-k{ color:var(--txt2); min-width:120px; }
.st-v{ margin-left:auto; color:var(--txt3); }

/* ============ 人工评价（智能选股个股分析 / 回测交易K线下） ============ */
.eval-sec{ margin-top:8px; border-top:1px solid var(--line); }
.eval-sec .det-sec-h{ margin-bottom:6px; }
.eval-row{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-size:11px; margin-bottom:6px; }
.eval-row label{ color:var(--txt3); min-width:34px; }
.eval-row select{ height:22px; background:var(--well); border:1px solid var(--line2); color:var(--txt); font-family:var(--mono); font-size:11px; }
.eval-row select:focus{ outline:none; border-color:var(--gold); }
.eval-row textarea{ flex:1; min-width:180px; background:var(--well); border:1px solid var(--line2); color:var(--txt); font-family:var(--mono); font-size:11px; padding:4px 6px; resize:vertical; }
.eval-row textarea:focus{ outline:none; border-color:var(--gold); }
.eval-status{ font-size:11px; color:var(--gold); }
.bt-eval{ padding:10px 12px; border-top:1px solid var(--line); }
.ev-sum-stats{ font-size:11px; color:var(--txt2); margin-bottom:6px; }
.ev-sum-list{ font-size:10px; color:var(--txt2); }
.ev-hist-item{ font-size:10px; color:var(--txt2); line-height:1.7; }
.ev-hist-item[data-type="trade"]{ cursor:pointer; }
.ev-hist-item[data-type="trade"]:hover{ color:var(--gold); }

/* 人工评价卡：交易评价区（选中交易后在此评价） */
.bt-evals-body{ flex:1; min-height:0; overflow-y:auto; padding:8px 12px; }
.ev-trade{ border-bottom:1px solid var(--line); padding-bottom:8px; margin-bottom:8px; }
.ev-trade-title{ font-size:11px; color:var(--txt); margin-bottom:6px; line-height:1.5; }

/* ============ 回测页拖拽布局（系统设置里启用开关） ============ */
.bt-dragbar{ display:none; position:absolute; top:0; left:0; right:0; height:18px;
  align-items:center; gap:6px; padding:0 8px;
  font-size:10px; color:var(--txt3); letter-spacing:.08em;
  background:var(--panel2); border-bottom:1px dashed var(--line3);
  cursor:grab; z-index:6; user-select:none; }
.bt-dragbar .dg-ic{ color:var(--gold); font-size:11px; }
.bt-drag-on [data-drag]{ position:relative; }
.bt-drag-on .bt-dragbar{ display:flex; }
.bt-drag-on [data-drag].bt-dragging{ opacity:.4; outline:1px dashed var(--gold); }
.bt-drop-line{ height:3px; background:var(--gold); border-radius:2px; margin:2px 0; flex:0 0 auto; }

/* ============ 持仓管理 ============ */
.hd-add-btn{ border-color:var(--gold); color:var(--gold); }
.hd-add-btn:hover{ background:rgba(217,164,65,.10); }
.hd-an-btn{ border-color:var(--up); color:var(--up); }
.hd-an-btn:hover{ background:rgba(226,86,74,.10); }

.hd-overview{
  display:flex; flex-wrap:wrap; align-items:center; gap:8px;
  margin:10px 0; padding:10px 13px;
  background:rgba(255,255,255,.045);
  border:1px solid var(--line); border-left:3px solid var(--down);
  border-radius:12px; backdrop-filter:blur(18px);   /* 20260916q 回滚原值 18px */
}
.hd-ov-note{ font-size:11px; color:var(--txt2); padding:10px 2px; line-height:1.6; }
.hd-ov-row{ display:flex; flex-wrap:wrap; gap:6px 2px; padding:8px 2px 2px; }
.sh-sec-t{ font-size:12px; font-weight:700; color:var(--accent); margin:14px 2px 6px; letter-spacing:.08em; }
.hd-ledger-wrap{ max-height:340px; overflow:auto; }
/* ── 交易台账行样式（2026-09-10 老板令：触发/未触发必须一眼可辨——此前 hd-lg-* 只有结构无样式全灰一色）──
   已触发行=实心绿点（兑现语义·与「已回本」同族）+标签亮字；未触发行=空心点+整行 0.42 暗淡；规则名沿用回测明细金色 */
.hd-ledger{ display:flex; flex-direction:column; gap:2px; font-size:11px; }
.hd-lg-row{ display:flex; align-items:baseline; gap:5px; padding:2px 8px; border-radius:5px; }   /* 20260916 老板令「两列中间的空间太开」：gap 8→5 */
.hd-lg-row::before{ content:''; flex:none; width:6px; height:6px; border-radius:50%; align-self:center; }
.hd-lg-row:not(.off)::before{ background:var(--down); box-shadow:0 0 5px rgba(0,255,136,.45); }
.hd-lg-row:not(.off) .hd-lg-label{ color:var(--txt); font-weight:600; }
.hd-lg-row:not(.off) .hd-lg-body{ color:var(--txt2); }
.hd-lg-row.off{ opacity:.42; }
.hd-lg-row.off::before{ border:1px solid var(--txt4); background:transparent; }
.hd-lg-row.off .hd-lg-label, .hd-lg-row.off .hd-lg-body{ color:var(--txt3); }
.hd-lg-label{ flex:none; min-width:32px; font-size:11px; color:var(--txt3); }   /* 20260916 老板令：44→32 紧贴内容列 */
.hd-lg-body{ flex:1; min-width:0; color:var(--txt2); }
.hd-lg-rule{ color:var(--gold); }
.hd-lg-today{ padding:2px 8px; font-size:11.5px; color:var(--txt); font-weight:600; }
.hd-lg-today.off{ color:var(--txt3); font-weight:400; }
/* 2026-09-10 老板令：去弱留强排名徽标（卡头）+ 放飞计划并入建议卡的第二行 */
.hd-rank{ flex:none; font-size:9.5px; padding:1px 6px; border:1px solid rgba(255,255,255,.14); border-radius:5px; color:var(--txt2); }
.hd-lg-rel{ padding-top:3px; font-size:10.5px; color:var(--txt2); }
.hd-lg-rel b{ color:var(--txt); font-family:var(--mono); }
.hd-ov-stat{ font-size:11px; color:var(--txt2); padding-right:14px; }
.hd-ov-stat b{ font-family:var(--mono); font-weight:700; color:var(--txt); }
.hd-ov-stat .up{ color:var(--up); } .hd-ov-stat .down{ color:var(--down); }
.hd-ac{ display:inline-flex; gap:4px; flex-wrap:wrap; }
.hd-ac-chip{ font-family:var(--mono); font-size:10px; padding:1px 6px; border:1px solid var(--line2); }
.hd-ov-weak{ width:100%; font-size:10px; color:var(--txt2); padding-top:6px; border-top:1px dashed var(--line); }
.hd-weak-itm{ font-family:var(--mono); color:var(--up); }
.hd-dim{ color:var(--txt3); font-size:10px; }

.hd-cards{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
.hd-card{
  display:flex; flex-direction:column;
  background:rgba(255,255,255,.045);
  border:1px solid var(--line); border-radius:12px;
  backdrop-filter:blur(18px); position:relative; overflow:hidden;   /* 20260916q 回滚原值 18px */
}
.hd-card-hd{
  display:flex; align-items:center; gap:5px; flex-wrap:wrap; row-gap:2px;   /* 20260914m 基础层可换行：零富余行任何渲染差异即裁字，换行优先于裁字 */
  min-height:30px; padding:4px 10px;
  border-bottom:1px solid var(--line);
  background:rgba(255,255,255,.02);
}
/* 20260916 老板令「两行合并到一行，按逻辑重置布局，直角徽换新设计」单行头部（.one 作用域，
   已清仓历史等旧头部不受染）：事实组可缩省略+title 全串兜底；动作结论=圆角胶囊徽（方角退役） */
.hd-card-hd.one{ flex-wrap:wrap; row-gap:2px; overflow:visible; }   /* 20260916r 老板报「评分70.0显示不全不会自动换行？」：单行合并态内容超宽时尾部（持有/名次/策略/评分）被 overflow 裁切——换行优先于裁字（与基础层 20260914m 同纪律）；内容不超宽时仍是一行，合并令不变 */
.hd-facts{
  flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  font-family:var(--mono); font-size:10.5px; color:var(--txt3);
}
.hd-pnl2{ flex:0 0 auto; font-family:var(--mono); font-size:11px; font-weight:700; white-space:nowrap; }
.hd-pnl2.up{ color:var(--up); } .hd-pnl2.down{ color:var(--down); }
.hd-act-pill{
  flex:0 0 auto; font-size:10.5px; font-weight:700; letter-spacing:.08em;
  padding:2px 11px; border:1px solid; border-radius:999px; background:rgba(255,255,255,.03);
}
.hd-code{ font-family:var(--mono); font-size:11px; color:var(--txt3); flex:0 0 auto; }
.hd-name{ font-size:13px; font-weight:600; color:var(--txt); flex:0 0 auto; }
.hd-price{ font-family:var(--mono); font-size:13px; font-weight:700; color:var(--txt); flex:0 0 auto; }
.hd-pnl{ font-family:var(--mono); font-size:12px; font-weight:700; flex:0 0 auto; }
.hd-days{ font-family:var(--mono); font-size:11px; color:var(--txt3); flex:0 0 auto; }
.hd-sp{ flex:1 1 0; }
.hd-meta{ font-family:var(--mono); font-size:9px; color:var(--txt3);
  flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:right; }
.hd-action{
  font-size:10px; letter-spacing:.06em; font-weight:600;
  padding:2px 7px; border:1px solid; flex:0 0 auto;
}
.hd-strat{ font-size:10px; font-weight:600; color:var(--gold); flex:0 0 auto; }
.hd-score{ font-size:10px; font-weight:600; color:#a6b2c4; flex:0 0 auto; }
.hd-sep{ font-size:10px; color:#3a4a5e; flex:0 0 auto; }
.hd-card-hd2{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap; row-gap:3px;   /* 20260914m 基础层可换行（20260914i 断点特例转正）：买入行 392/392 零富余，任何宽度不再裁字 */
  padding:3px 10px 4px; font-family:var(--mono); font-size:10px; color:var(--txt3);
  border-bottom:1px solid var(--line); background:rgba(255,255,255,.02);
  white-space:nowrap; overflow:hidden;
}
.hd-card-hd2 .hd-pnl{ font-size:12px; font-weight:700; flex:0 0 auto; }
.hd-hd2-big{ font-size:12px; font-weight:700; flex:0 0 auto; }
.hd-card-bd{ padding:9px 12px; font-size:13px; color:var(--txt); line-height:1.9;
  flex:1 1 auto; display:flex; flex-direction:column; }
.hd-line{ font-family:var(--mono); font-variant-numeric:tabular-nums; }
.hd-lb{ display:inline-block; min-width:46px; color:var(--txt3); letter-spacing:.1em; font-size:10px; }
.hd-brick{
  display:inline-block; width:15px; height:15px; line-height:15px;
  text-align:center; font-size:9px; margin-right:2px;
}
.bk-red{ background:rgba(226,86,74,.18); color:var(--up); border:1px solid rgba(226,86,74,.4); }
.bk-green{ background:rgba(37,160,108,.14); color:var(--down); border:1px solid rgba(37,160,108,.35); }
.bk-dim{ background:rgba(120,136,158,.08); color:var(--txt3); border:1px solid var(--line); }

.hd-sigs{ margin-top:6px; border-top:1px dashed var(--line); padding-top:4px; }
.hd-sig{ font-size:10px; line-height:1.6; }
.hd-sig-buy{ color:var(--up); }
.hd-sig-sell{ color:var(--gold); font-weight:600; }   /* 2026-09-10 老板令：信号行与关注行统一粗体 */
.hd-sig-hl{ color:var(--up); font-weight:600; }
.hd-sig-ok{ color:var(--down); }
.hd-sig-gold{ color:var(--gold); font-weight:600; }
.hd-sig-focus{ font-weight:600; }   /* 2026-09-10 老板令：关注行（默认绿/破位项黄）保持粗体 */
.hd-sig-hit{ color:var(--txt3); }

.hd-advice{
  margin-top:8px; padding:7px 9px; font-size:11px; line-height:1.7;
  background:rgba(120,136,158,.06); border:1px solid var(--line); border-left:3px solid var(--gold);
}
.hd-advice-a{ font-weight:700; letter-spacing:.05em; margin-right:2px; }

/* 主建议区（动作在头部标签，这里只给"做什么"） */
.hd-main{ margin-top:6px; padding:6px 9px; font-size:12px; background:rgba(120,136,158,.06); border:1px solid var(--line); border-left:3px solid var(--gold); }
.hd-main-l1{ display:flex; flex-direction:column; align-items:stretch; gap:2px; font-weight:600; color:var(--txt); line-height:1.6; }
.hd-main-l1-t{ width:100%; }   /* reason 占满整行（多行换行），不缩窄不截断 */
.hd-main-l1 b{ font-family:var(--mono); font-size:13px; }
.hd-main-l2{ font-family:var(--mono); font-size:10px; color:var(--txt2); margin-top:2px; }
.hd-main-l2 b{ color:var(--gold); }
/* 去弱留强 · 排名徽标：reason 下方独立一行、右对齐（右下角）；reason 占满整行，互不挤占 */
.hd-main-weak{ align-self:flex-end; font-family:var(--mono); font-size:9px; color:var(--txt3); font-weight:400; white-space:nowrap;
  background:rgba(14,20,28,.92); padding:1px 4px; border-radius:2px; }
.hd-mut{ color:var(--txt3); font-size:10px; }
.hd-stops{ margin-top:2px; font-size:10px; color:var(--txt2); }
.hd-stops b{ color:var(--up); }
.hd-del-btn{ opacity:.65; }
.hd-del-btn:hover{ opacity:1; color:var(--up); border-color:var(--up); }
.hd-err .hd-card-bd{ color:var(--txt2); }
.hd-err-t{ color:var(--up); }
.hd-card-bd{ padding-bottom:8px; }

/* 操作历史 */
.hd-ops-hist{ margin-top:6px; font-size:10px; color:var(--txt3); }

/* 操作行 */
/* 操作行（加仓行 + 放飞行包在 .hd-ops-block 内，整块贴卡片底部对齐） */
.hd-ops-block{ margin-top:auto; }
.hd-act-row{ margin-top:8px; display:flex; align-items:center; gap:5px; flex-wrap:nowrap; }
.hd-act-sp{ flex:1; }
.hd-in{
  width:57px; height:22px; background:var(--well); border:1px solid var(--line2);
  color:var(--txt); font-family:var(--mono); font-size:11px; padding:0 6px;
}
.hd-in:focus{ outline:none; border-color:var(--gold); }
.hd-in-date{ width:100px; }

/* 已清仓历史 */
.hd-hist-body{ max-height:180px; overflow-y:auto; padding:8px 12px; font-size:11px; }
.hd-hist-itm{ padding:4px 0; border-bottom:1px solid var(--line); line-height:1.6; }
.hd-hist-d{ font-family:var(--mono); color:var(--txt3); margin-right:8px; }
.hd-hist-c{ color:var(--gold); font-size:10px; border:1px solid rgba(217,164,65,.4); padding:0 4px; }

/* K 线容器（主图，无副图） */
.hd-kline{ height:240px; width:100%; margin-top:6px; position:relative; }

/* 回测控制区：按钮单独一行（参数控件下方），左对齐 */
.bt-btns{ display:flex; align-items:center; justify-content:flex-start; gap:8px; flex-wrap:wrap; flex-basis:100%; padding-top:6px; }
/* 运行回测按钮默认 margin-left:auto(推右)，在按钮行内取消 */
.bt-btns .sc-scan-btn{ margin-left:0; }

/* 策略下拉勾选多选 */
.bt-stdrop{ position:relative; }
.bt-stdrop-sel{ font-family:var(--mono); font-size:11px; color:var(--txt); background:var(--well); border:1px solid var(--line2); padding:3px 10px; cursor:pointer; min-width:130px; }
.bt-stdrop-sel:hover{ border-color:var(--line3); }
.bt-stdrop-menu{ position:absolute; top:100%; left:0; z-index:30; margin-top:2px; background:#0b0f15; border:1px solid var(--line2); padding:6px 10px; display:flex; flex-direction:column; gap:4px; min-width:150px; box-shadow:0 6px 18px rgba(0,0,0,.5); }
.bt-strat-lb{ font-size:11px; color:var(--txt2); display:flex; align-items:center; gap:7px; cursor:pointer; white-space:nowrap; }
.bt-strat-lb:hover{ color:var(--txt); }
.bt-strat-lb input{ accent-color:#ffb020; }

/* 回测控制区整体抬到所有卡片之上（.card 默认 z-index:1）：放飞止损/策略下拉菜单是
   absolute 溢出配置区向下展开，若困在 z-index:1 会被下方收益曲线/回测历史卡盖住
   （同层 z-index 按 DOM 顺序后面的盖前面）。z-index:40 < toast(999)，不干扰全局浮层。 */
.bt-ctrl{ position:relative; z-index:40; }
/* 回测控制区输入框调窄（够用即可，不影响其他页面） */
.bt-ctrl input.sc-num{ width:64px; }              /* 开始/结束日期 8 位 */
.bt-ctrl #btScore, .bt-ctrl #btB1B2{ width:46px; } /* 最低评分 / B1→B2 窗口 */
/* 回测配置任务标签页 —— 2026-08-21：多行配置并行组织，顶部 [任务1 ×][任务2 ×]…[＋ 新增任务]
   初始无任务（只有＋按钮）；点 + 新建并激活；点标签切换查看/修改；点 × 删除（可删光）。 */
.bt-rows{ padding:8px 12px 0; }
.bt-taskbar{ display:flex; align-items:center; gap:8px; padding:0 0 6px; flex-wrap:wrap; }
.bt-tasktabs{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.bt-tasktab{ display:inline-flex; align-items:center; gap:5px; font-family:var(--mono); font-size:11px;
  color:var(--txt2); background:var(--well); border:1px solid var(--line2); padding:3px 8px 3px 10px;
  cursor:pointer; white-space:nowrap; }
.bt-tasktab:hover{ color:var(--txt); border-color:var(--line3); }
.bt-tasktab.act{ color:var(--gold); border-color:#3a2e17; background:rgba(224,168,78,.06); }
.bt-taskx{ color:#ff2d55; font-size:12px; line-height:1; cursor:pointer; padding:0 1px; }
.bt-taskx:hover{ color:#ff6b5e; }
/* 2026-09-11 老板令「换成新版」：旧深底方块换现代玻璃胶囊（同 更多▾/免打断 家族），金字保留
   （选择器加权到 .bt-ctrl 层级，压过后置 .bt-btn 基础规则的 radius/background 覆盖） */
.bt-ctrl .bt-taskbar /* 策略组（2026-09-11 P1）：策略勾选+白穿黄开关+random 种子 行内组 */
.bt-strat-grp{ display:inline-flex; align-items:center; gap:0; }
/* ── 2026-09-11 老板直派「有些胶囊左右没有对齐」根因：策略区不在 .bt-taskbar 下，
   原 display:inline-flex 长前缀规则从不匹配——组实际 display:block，两半按文字基线
   (vertical-align:baseline) 排，中文/拉丁基线各异→成对上下错位 1px 且随内容时有时无。
   立独立组规则：flex 盒居中对齐（不靠基线），两半顶底永齐 ── */
.bt-strat-grp{ display:inline-flex !important; align-items:center; gap:0; }
/* ── 2026-09-11 老板直派「这种按钮应该做成胶囊形式，左边一个半椭圆，右边一个半椭圆，拼在一起」：
   策略+白穿黄 成对合一枚整胶囊——左chip=左半椭圆（右缘切平），右chip=右半椭圆（左缘切平），
   相接处共用一条分隔线（左chip 右边框透明防双线）；选中态/悬停态右缘同样保持切平；
   random 的种子输入在胶囊外随行（margin 归位，gap:0 后补距）── */
/* v4.16 全站药丸块对 .sc-chk 用 !important 圆角 999——本块同权重 !important 才能拼上 */
.bt-row .bt-strat-grp .sc-chk{ border-radius:0 !important; }
.bt-row .bt-strat-grp .sc-chk:first-child{ border-radius:999px 0 0 999px !important; border-right-color:transparent !important; }
.bt-row .bt-strat-grp .sc-chk:first-child:hover,
.bt-row .bt-strat-grp .sc-chk:first-child:has(input:checked){ border-right-color:transparent !important; }
.bt-row .bt-strat-grp .sc-chk.bt-tf-wrap{ border-radius:0 999px 999px 0 !important; }   /* (0,4,0) 压 v4.16 label:has 的 (0,3,1) */
/* ── 2026-09-11 老板直派「这三个是一起的吗？如果是，组合成大胶囊」：随机买入+白穿黄+种子
   三段合一大胶囊——随机=左半椭圆（已有 first-child 规则）、白穿黄降为中段（双平缘双分隔线）、
   种子段=右半椭圆帽（bt-seed-wrap 自带右圆缘，输入框透底融段）── */
.bt-row .bt-strat-grp:has(.bt-seed-wrap) .sc-chk.bt-tf-wrap{ border-radius:0 !important; }
.bt-seed-wrap{
  display:inline-flex; align-items:center; gap:5px; height:var(--ctl-h); box-sizing:border-box;
  padding:0 13px 0 2px; border:1px solid var(--line2); border-left:0;
  border-radius:0 999px 999px 0; background:rgba(255,255,255,.04);
  font-size:10.5px; color:var(--txt3); white-space:nowrap; user-select:none;
}
.bt-seed-wrap .sc-ctl{ background:transparent; border:0; height:100%; padding:0; text-align:center; border-radius:0; font-family:var(--mono); color:var(--txt); }
.bt-tf-wrap{ font-size:10.5px; color:var(--gold); opacity:.85; }
.bt-taskadd{
  color:#ffb020; border:1px solid rgba(224,168,78,.45);
  background:linear-gradient(90deg,rgba(224,168,78,.16),rgba(224,168,78,.05));
  border-radius:9px; padding:7px 14px; font-weight:600;
}
.bt-ctrl .bt-taskbar .bt-taskadd:hover{
  background:linear-gradient(90deg,rgba(224,168,78,.28),rgba(224,168,78,.10));
  box-shadow:0 0 10px rgba(224,168,78,.22); border-color:rgba(224,168,78,.7);
}
.bt-row{ display:flex; flex-direction:column; gap:2px; padding:6px 10px 8px;
  border:1px dashed var(--line2); margin-bottom:8px; background:rgba(10,17,24,.4); }
.bt-row-hd{ display:flex; align-items:center; gap:8px; padding-bottom:2px; }
.bt-row label{ font-size:11px; color:var(--txt2); white-space:nowrap; }
.bt-row input.sc-num{ width:64px; }
.bt-row input[data-score]{ width:46px; }   /* 最低评分：用户要求撤回缩窄，保持原宽 */
.bt-row input[data-b1b2]{ width:31px; }     /* B1→B2回看：去箭头后缩窄，刚好够数字 */
.bt-row-no{ color:#ffb020; font-size:11px; font-family:var(--mono); }
.bt-ctrl .bt-stdrop-sel{ min-width:104px; }        /* 策略下拉 */
/* 分区卡片：每分区 = 左侧竖标签 + 右侧控件流（wrap 平铺） */
.bt-sec{ display:flex; align-items:flex-start; gap:8px; border-top:1px solid rgba(255,255,255,.05); padding:4px 0; }
.bt-sec:first-of-type{ border-top:none; }
.bt-sec-hd{ flex:0 0 auto; font-size:10px; letter-spacing:.12em; color:var(--txt3);
  border-left:2px solid #3a2e17; padding:2px 0 2px 8px; margin-top:4px; min-width:28px; }
.bt-sec-body{ display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; flex:1; }
.bt-sec-body > .bt-stdrop{ display:inline-flex; }
.bt-sec-body .sc-chk{ white-space:nowrap; }
/* 策略分区内各策略专属参数组之间的间隔符（细竖线，跟随行高） */
.bt-sep{ width:1px; align-self:stretch; min-height:20px; background:rgba(255,255,255,.14); margin:0 2px; flex:0 0 auto; }

/* 手动输入偏好（2026-08-21 E17 用户要求）：回测任务配置行里所有数字输入框去掉上下微调箭头 */
.bt-row input[type=number]::-webkit-outer-spin-button,
.bt-row input[type=number]::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }
.bt-row input[type=number]{ -moz-appearance:textfield; }

/* ---- 「更多」下拉面板：左列=自定义输入 / 右列=勾选功能（空头只卖不买置顶默认勾选） ---- */
.bt-more-wrap{ position:relative; display:inline-flex; }
.bt-more{ color:var(--gold); border-color:#3a2e17 !important; }
.bt-more-panel{ position:absolute; top:100%; left:0; z-index:45; margin-top:2px;
  background:#0b0f15; border:1px solid var(--line2); padding:10px 12px;
  display:flex; gap:18px; min-width:430px; box-shadow:0 8px 22px rgba(0,0,0,.55); }
.bt-more-col{ display:flex; flex-direction:column; gap:5px; align-items:flex-start; }
.bt-more-left{ min-width:150px; }
.bt-more-right{ flex:1; }
.bt-more-hd{ font-size:10px; color:var(--txt3); letter-spacing:.14em; border-bottom:1px solid var(--line); padding-bottom:3px; margin-bottom:2px; width:100%; }
.bt-more-col label{ font-size:11px; color:var(--txt2); }
.bt-more-col input.sc-num{ width:64px; }
.bt-more-ptf{ display:flex; flex-wrap:wrap; align-items:center; gap:4px 6px; margin:1px 0 2px 20px; font-size:11px; color:var(--txt2); }
.bt-more-ptf label{ font-size:11px; color:var(--txt2); }
.bt-more-ptf input.sc-num{ width:52px; }
.bt-avg-pos{ font-family:var(--mono); font-size:11px; color:var(--txt3); white-space:nowrap; }
.bt-sb-chk{ margin-top:2px; }
.bt-sb{ border-left:1px solid var(--line); padding-left:8px; margin-left:20px; }
.bt-more-chk{ display:flex; align-items:center; gap:4px; }

/* ---- 模拟单吊（账户收益）结果：统计条 / 策略分组小卡 / 分布条形 / 标签页 ---- */
.bt-sb-stats{ margin-top:8px; flex:0 0 100%; }
.bt-sb-groups{ display:flex; gap:6px; flex-wrap:wrap; flex:0 0 100%; order:10; }
.bt-sb-grp-hd{ font-size:10px; color:var(--txt3); letter-spacing:.14em; width:100%; padding:2px 0 4px; }
.bt-sb-grp{ flex:1; min-width:86px; background:linear-gradient(180deg,#0d1118,#07080c);
  border:1px solid var(--line); padding:5px 8px; display:flex; flex-direction:column; gap:2px; }
.bt-sb-grp .bs-v{ font-size:14px; }
.bt-sb-dist{ flex:1; min-height:0; padding:4px 2px; display:flex; flex-direction:column; }
.sb-dist-note{ font-size:10px; color:var(--txt3); margin-bottom:4px; }
.sb-dist-bars{ flex:1; overflow-y:auto; display:flex; flex-direction:column; gap:1px; }
.sb-bar{ position:relative; height:3px; background:rgba(20,28,38,.6); flex:0 0 auto; cursor:default; }
.sb-bar-fill{ position:absolute; top:0; bottom:0; opacity:.85; }

/* 模拟单吊双栏：左 账户净值曲线 / 右 逐笔交易明细 */
.bt-sb-layout{ display:flex; gap:8px; flex:1; min-height:0; }
.bt-sb-curve{ flex:1.2; display:flex; flex-direction:column; min-height:0; min-width:0; }
.bt-sb-curve .bt-chart{ flex:1; height:auto; min-height:200px; }
.bt-sb-ledger{ flex:1.4; display:flex; flex-direction:column; min-height:0; min-width:0; }
.sb-led-buy td{ border-top:1px solid rgba(34,48,63,.5); }
.sb-led-sells{ font-size:10px; line-height:1.8; }
.sb-sp{ display:block; white-space:nowrap; }
.sb-sp-no{ font-family:var(--mono); font-size:10px; }

/* ============================================================
   UI v2 · 字号放大覆盖（2026-08-21）
   - 整体字号上调一档（高分屏 3072×1728 可读性）
   - 覆盖段置于文件末尾：同特异性选择器后定义生效，不改原布局
   - 如需整体再放大/缩小：调 body 基准 13px 即可，其余按档跟随
   ============================================================ */
body{ font-size:13px; }

/* 顶部 tape */
.tp-itm{ font-size:12px; } .tp-sec{ font-size:11px; } .tp-v{ font-size:13px; } .tp-t{ font-size:10px; }

/* 命令栏 */
.brand-name{ font-size:16px; } .brand-en{ font-size:10px; }
.cmdline, .cmdline input{ font-size:12px; } .cmd-hint{ font-size:10px; }
.cdate{ font-size:12px; } .cclock{ font-size:13px; } .live{ font-size:10px; }

/* 模块条 */
.crumb{ font-size:12px; } .chip-risk{ font-size:11px; } .btn{ font-size:11px; }

/* 侧栏（加宽以容纳更大字号） */
.sidenav{ width:184px; flex-basis:184px; }
.nav-sec{ font-size:10px; } .nav-t{ font-size:13px; } .nav-k{ font-size:10px; }
.nft-row{ font-size:13px; } .nft-row .mono{ font-size:12px; }
.nav-ic{ width:17px; height:17px; flex-basis:17px; }

/* 通用卡片头 */
.hd-t{ font-size:14px; } .hd-en{ font-size:10px; } .hd-meta{ font-size:11px; } .hd-tag{ font-size:11px; }
.card-bd{ padding:11px; }

/* 表格 / 常用控件 */
.term-table{ font-size:12px; } .term-table th{ font-size:10px; }
.bt-btn{ font-size:12px; } .bt-tab{ font-size:12px; }
.sc-ctl, select.sc-ctl, input.sc-ctl{ font-size:12px; } .sc-scan-btn{ font-size:12px; }
.sc-status{ font-size:11px; } .sc-jump{ font-size:12px; }
.bt-sellrow td{ font-size:12px; } .sb-led-sells{ font-size:11px; } .sb-sp-no{ font-size:11px; }
.bt-more-col label, .bt-more-ptf label{ font-size:12px; } .bt-more-hd{ font-size:11px; }
.pm-lbl, .pm-check, .set-row label, .st-row, .eval-row, .eval-status{ font-size:12px; }
.bt-row label{ font-size:12px; } .bt-strat-lb{ font-size:12px; } .bt-stdrop-sel{ font-size:12px; }
.bt-avg-pos{ font-size:12px; } .bt-sec-hd{ font-size:11px; }

/* 持仓 / 明细 / 智慧 */
.hd-name, .hd-price, .hd-pnl{ font-size:13px; } .hd-days{ font-size:12px; }
.hd-sig{ font-size:11px; } .hd-card-bd{ font-size:12px; } .hd-stops{ font-size:11px; }
.det-title{ font-size:14px; } .det-lines, .det-score, .det-sec-h, .det-sig{ font-size:12px; }
.ws-rule-text{ font-size:13px; } .ws-hit{ font-size:13px; } .ws-cat-name{ font-size:16px; }
.st-item-txt{ font-size:13px; } .ai-text{ font-size:13px; } .ai-who{ font-size:11px; }

/* ============================================================
   UI v2 · 侧栏分组（核心/配置/研判/内容）
   ============================================================ */
.nav-group{
  display:flex; align-items:center; gap:7px; padding:9px 12px 5px;
  cursor:pointer; user-select:none;
  font-family:var(--mono); font-size:10px; letter-spacing:.2em;
  color:var(--txt3); text-transform:uppercase;
}
.nav-group:hover{ color:var(--txt); }
.nav-group .tri{ font-size:9px; color:var(--txt4); transition:transform .15s; }
.nav-group.open .tri{ transform:rotate(90deg); }
.nav-group-body{ overflow:hidden; max-height:0; transition:max-height .18s ease; }
.nav-group-body.open{ max-height:230px; }

/* 任务运行中：导航按钮呼吸灯（金色呼吸点 + 图标呼吸辉光，仅运行时亮起） */
.nav-itm.work{ border-left-color:var(--ac); }
.nav-itm.work .nav-ic{ color:var(--ac); animation:navWorkGlow 1.6s ease-in-out infinite; }
.nav-itm.work .nav-t{ color:#dfe6ee; font-weight:600; }
.nav-itm.work.act .nav-t{ color:var(--ac-text); }
.nav-itm.work.act .nav-ic{ color:var(--ac); }
.nav-itm.work::after{
  content:''; position:absolute; right:6px; top:50%; width:7px; height:7px; margin-top:-3.5px;
  border-radius:50%; background:var(--ac); box-shadow:0 0 9px var(--ac);
  animation:navWorkDot 1.5s ease-in-out infinite;
}
/* 2026-09-11 老板直派「系统颜色改为了蓝色，但回测调优导航按钮没变化」：WORK 运行中态原整组硬编码金——
   按导航风格色联动令改随主题令牌（--ac/--ac-text），「任务运行中」语义由呼吸动画承担，金残留清零 */
.nav-itm.work .nav-k{ margin-right:15px; }
@keyframes navWorkGlow{ 0%,100%{ opacity:.45; } 50%{ opacity:1; } }
@keyframes navWorkDot{ 0%,100%{ opacity:.18; transform:scale(.7); } 50%{ opacity:1; transform:scale(1.25); } }

/* 底部状态栏字号（覆盖回 10px，避免与主体脱节） */
.statusbar{ font-size:13px; }

/* 卡片头部元信息：超长省略号截断，避免挤压标题（如扫描结果统计） */
.card-hd .hd-meta{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* ============================================================
   UI v2 · 回测页「更多分析」Tab 收纳下拉
   ============================================================ */
/* ============================================================
   UI v2 · 回测页控制区降载（更多操作下拉 + JSON 折叠）
   ============================================================ */
.bt-ops-wrap{ position:relative; display:inline-flex; }
.bt-ops-panel{
  position:absolute; top:100%; left:0; z-index:46; margin-top:2px;
  background:#0b0f15; border:1px solid var(--line2);
  box-shadow:0 8px 22px rgba(0,0,0,.55);
  display:flex; flex-direction:column; min-width:160px; padding:4px 0;
}
.bt-ops-panel .bt-ops-item{
  margin:0 6px !important; padding:7px 10px; border:none !important; text-align:left;
}
.bt-ops-panel .bt-ops-item:hover{ background:#10141c; }
.bt-jsonfold{ margin-top:8px; }
.bt-jsonfold-h{
  display:inline-flex; align-items:center; gap:6px; cursor:pointer; user-select:none;
  font-size:11px; color:var(--txt3); letter-spacing:.06em;
}
.bt-jsonfold-h:hover{ color:var(--txt); }
.bt-jsonfold-tri{ font-size:9px; color:var(--txt4); transition:transform .15s; }
.bt-jsonfold.open .bt-jsonfold-tri{ transform:rotate(90deg); }
.bt-jsonpaste{ display:flex; align-items:center; gap:6px; margin-top:8px; flex-wrap:wrap; }

/* ============================================================
   UI v2 · 回测详情视图重排：上 左K线(大头)+右交易明细 / 下 整行人工评价+评价管理
   详情容器可纵向滚动：K线主图+副图(固定高)完整显示，评价区在下方滚动可见，互不侵占。
   ============================================================ */
.bt-detail{ flex-direction:column; overflow-y:auto; }                 /* 上下结构 + 内部滚动 */
.bt-detail-top{ display:flex; gap:10px; flex:0 0 auto; align-items:stretch; height:520px; } /* 上：K线与明细强制等高，明细不被内容撑高 */
.bt-kline{ flex:2; }                                                   /* 左 K线占大头 */
.bt-detail-right{ flex:0 0 34%; gap:0; }                               /* 右：交易明细拉宽 */
.bt-detail-right .bt-trades{ flex:1; min-height:0; }
.bt-evals{ flex:0 0 auto; }                                            /* 下：评价整行，内容高度 */
.bt-evals-body{ display:flex; gap:24px; align-items:stretch; }         /* 评价区横向：左表单 / 右管理 */
.bt-evals-left{ flex:1; min-width:0; border-right:1px solid var(--line); padding-right:20px; }
.bt-evals-right{ flex:1; min-width:0; display:flex; flex-direction:column; }
.bt-evals-right .ev-sum-list{ max-height:120px; overflow-y:auto; }     /* 评价历史限高，避免无限撑高 */
.bt-trades-body{ overflow-x:hidden; }                                  /* 交易明细不横向拖动 */
.bt-kline .card-hd .hd-t{ flex:1; min-width:0; white-space:nowrap; overflow:visible; } /* K线标题完整单行显示，不截断 */
.bt-kline .card-hd .hd-sp{ flex:0 0 auto; width:8px; }                               /* 占位压到最小，标题占满整行 */
.bt-kline .card-hd .hd-en{ flex:0 0 auto; }
/* 20260916 老板令「策略超过 B1/B2/B3/单针/砖形 宽度的都缩略」：策略列超基准宽省略号截断，
   全串 title 悬停（backtest.js btHistStrat 挂 class）——策略列不再把引擎列挤出表外 */
#btHistBody td.bt-hist-strat{
  max-width:185px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.bt-hist-ops .hist-kline{ font-size:11px; padding:2px 9px; }           /* 任务编号按钮（t289） */

/* ============================================================
   2b 全站工作台组件（黑红毛玻璃）· 各页共用
   ============================================================ */
.hz-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 14px;min-width:0}
.hz-kpi{background:rgba(255,255,255,.045);border:1px solid var(--line);border-radius:12px;padding:15px 17px;backdrop-filter:blur(22px);min-width:0;position:relative;overflow:hidden}
.hz-kpi::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--c,var(--ac)),transparent);opacity:.8}
.hz-kpi .l{font-size:12px;color:var(--txt3);font-weight:600;letter-spacing:.07em;text-transform:uppercase;margin-bottom:8px;display:flex;justify-content:space-between}
.hz-kpi .v{font-family:var(--mono);font-size:34px;font-weight:700;line-height:1;color:var(--c,#fff);text-shadow:0 0 20px rgba(var(--ac-rgb),.25)}
.hz-kpi .v .o{font-size:14px;color:var(--txt3);font-weight:500}
.hz-kpi .d{font-size:13px;color:var(--txt2);margin-top:8px;display:flex;align-items:center;gap:7px}
.hz-k1{--c:#00ff88}.hz-k2{--c:#ffb020}.hz-k3{--c:#00ff88}.hz-k4{--c:#4c9bff}
.hz-chip{display:inline-block;font-size:12px;padding:2px 10px;border-radius:999px;font-weight:700}
.hz-chip.b{background:rgba(0,255,136,.15);color:#00ff88}.hz-chip.a{background:rgba(255,176,32,.15);color:#ffb020}.hz-chip.g{background:rgba(0,255,136,.15);color:#00ff88}
.hz-grid{display:grid;gap:12px;align-items:start;max-width:100%;min-width:0}
.hz-col{background:rgba(255,255,255,.045);border:1px solid var(--line);border-radius:12px;padding:15px;backdrop-filter:blur(22px);min-width:0;overflow:hidden}
.hz-col h3{font-size:14px;font-weight:700;color:var(--txt);margin-bottom:13px;display:flex;align-items:center;gap:7px}
.hz-col h3 .e{font-size:10px;color:var(--txt3);letter-spacing:.1em;margin-left:auto;font-family:var(--mono)}
.hz-curve{height:110px;margin-bottom:11px}.hz-curve svg{width:100%;height:100%;display:block;filter:drop-shadow(0 0 5px rgba(var(--ac-rgb),.25))}
.hz-yband{display:flex;gap:2px;height:15px;margin-bottom:8px}.hz-yband div{flex:1;border-radius:2px}
.hz-mband{display:flex;flex-direction:column;gap:2px}
.hz-mrow{display:flex;align-items:center;gap:4px}
.hz-mrow .yr{font-size:10px;color:var(--txt3);width:34px;flex:none;font-family:var(--mono);font-weight:600}
.hz-mrow .cs{display:flex;gap:2px;flex:1}.hz-mrow .cs i{flex:1;height:9px;border-radius:2px}
.hz-note{font-size:12px;color:var(--txt3);margin-top:10px;line-height:1.7}
.hz-comp{display:flex;align-items:center;gap:11px;margin-bottom:12px}
.hz-comp .nm{font-size:13px;color:var(--txt2);width:56px;flex:none;font-weight:500}
.hz-comp .tr{flex:1;height:7px;background:rgba(255,255,255,.08);border-radius:4px;overflow:hidden}
.hz-comp .tr i{display:block;height:100%;border-radius:4px;box-shadow:0 0 9px currentColor}
.hz-comp .vl{font-family:var(--mono);font-size:14px;width:56px;text-align:right;font-weight:600}
.hz-comp .mx{color:var(--txt3);font-size:11px}
.hz-fact{display:flex;align-items:center;gap:10px;padding:10px 11px;margin-bottom:7px;background:rgba(255,255,255,.02);border:1px solid var(--line);border-radius:9px;font-size:13px}
.hz-fact .id{font-size:10px;color:var(--txt3);width:22px;font-family:var(--mono);font-weight:700}
.hz-fact .nm{color:var(--txt2);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.hz-fact .vl{font-family:var(--mono);font-weight:700;font-size:13px;flex-shrink:0;white-space:nowrap}
.hz-up{color:var(--down)}.hz-dn{color:#ff2d55}.hz-nt{color:#ffb020}

/* ============ 2b 工作台共享原语（b- 前缀 · 2026-08-25 落地 全球市场/影子账户/数据管理/系统设置） ============ */
.b-wrap{display:flex;flex-direction:column;padding:0;max-width:100%;overflow:hidden;min-width:0}
.b-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px;min-width:0}
.b-kpi{background:rgba(255,255,255,.045);border:1px solid var(--line);border-radius:12px;padding:15px 17px;backdrop-filter:blur(22px);min-width:0;position:relative;overflow:hidden}
.b-kpi::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--c,var(--ac)),transparent);opacity:.8}
.b-kpi .l{font-size:12px;color:var(--txt3);font-weight:600;letter-spacing:.07em;text-transform:uppercase;margin-bottom:8px;display:flex;justify-content:space-between;gap:8px}
.b-kpi .l .e{font-size:10px;font-family:var(--mono);letter-spacing:.1em}
.b-kpi .v{font-family:var(--mono);font-size:32px;font-weight:700;line-height:1;color:var(--c,#fff);text-shadow:0 0 20px rgba(var(--ac-rgb),.25);white-space:nowrap}
.b-kpi .v .o{font-size:13px;color:var(--txt3);font-weight:500}
.b-kpi .d{font-size:12px;color:var(--txt2);margin-top:8px;display:flex;align-items:center;gap:7px;min-height:18px;flex-wrap:wrap}
.b-k1{--c:#00ff88}.b-k2{--c:#ffb020}.b-k3{--c:#00ff88}.b-k4{--c:#4c9bff}.b-k5{--c:#ff2d55}
.b-k1 .v{color:#00ff88}.b-k2 .v{color:#ffb020}.b-k3 .v{color:#00ff88}.b-k4 .v{color:#4c9bff}.b-k5 .v{color:#ff2d55}
.b-chip{display:inline-block;font-size:11px;padding:2px 10px;border-radius:999px;font-weight:700;white-space:nowrap}
/* 2026-09-10 老板令：b-chip.b=数据通过态，固定绿 #00ff88——调色盘只改系统风格色，不改功能色 */
.b-chip.b{background:rgba(0,255,136,.15);color:#00ff88}
.b-chip.a{background:rgba(255,176,32,.15);color:#ffb020}
.b-chip.r{background:rgba(255,45,85,.15);color:#ff2d55}
.b-chip.n{background:rgba(76,155,255,.15);color:#4c9bff}
/* 2026-09-11 老板直派「当前市道跟别的框不一致·连框都没有，改一样」：当前市道 chip 加 b-stat 同款框
   （var(--line) 1px 框+8px 圆角+5px10px 内距+mono 字），蓝身份底字保留——选股/影子/持仓三处统一 */
.b-chip-rg{ border:1px solid var(--line); border-radius:8px; padding:5px 10px; font-family:var(--mono); }
.b-chip.v{background:rgba(139,92,246,.15);color:#8b5cf6}
.b-chip.dim{background:rgba(255,255,255,.06);color:var(--txt3)}
.b-sec{font-size:15px;font-weight:700;color:var(--txt);display:flex;align-items:center;gap:8px;margin:2px 2px 12px}
.b-sec .e{font-size:10px;color:var(--txt3);letter-spacing:.1em;margin-left:auto;font-family:var(--mono)}
.b-col{background:rgba(255,255,255,.045);border:1px solid var(--line);border-radius:12px;padding:15px;backdrop-filter:blur(22px);min-width:0;overflow:hidden}
.b-col h3{font-size:14px;font-weight:700;color:var(--txt);margin-bottom:12px;display:flex;align-items:center;gap:7px}
.b-col h3 .e{font-size:10px;color:var(--txt3);letter-spacing:.1em;margin-left:auto;font-family:var(--mono)}
.b-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:12px;align-items:start;min-width:0}
.b-grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start;min-width:0}
.b-grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;align-items:start;min-width:0}
.b-tbl{width:100%;border-collapse:collapse}   /* 2026-09-11 老板令：铺满容器（保留紧凑+左对齐） */
.b-tbl th{font-size:11px;color:var(--txt3);letter-spacing:.08em;text-transform:uppercase;text-align:left;padding:4px 8px;border-bottom:1px solid var(--line);font-weight:600;white-space:nowrap}
.b-tbl td{padding:4px 8px;font-size:13px;border-bottom:1px solid rgba(255,255,255,.05);color:var(--txt2);white-space:nowrap}
.b-tbl tbody tr:hover td{background:rgba(255,255,255,.03)}
.b-tbl td.c{text-align:center}   /* 2026-09-11 老板令：.r 右对齐废除→全表左对齐对应 */
.b-tbl th.c{text-align:center}
.b-tbl td.v{font-family:var(--mono);font-weight:600;color:var(--txt)}
.b-tbl .nm{font-weight:700;color:var(--txt);font-size:13.5px}
.b-tbl .sub{font-size:10px;color:var(--txt3);font-family:var(--mono);display:block;margin-top:2px}
.b-tag{display:inline-block;font-size:10px;padding:2px 8px;border-radius:6px;font-family:var(--mono);font-weight:600}
.b-tag.b1{background:rgba(76,155,255,.16);color:#4c9bff}.b-tag.b2{background:rgba(139,92,246,.18);color:#8b5cf6}
.b-tag.b3{background:rgba(34,211,238,.16);color:#22d3ee}.b-tag.dz{background:rgba(255,45,85,.16);color:#ff2d55}
.b-tag.zx{background:rgba(255,176,32,.16);color:#ffb020}
.b-tag.buy{background:rgba(255,45,85,.15);color:#ff2d55}.b-tag.sell{background:rgba(0,255,136,.15);color:var(--down)}
.b-fact{display:flex;align-items:center;gap:10px;padding:9px 11px;margin-bottom:7px;background:rgba(255,255,255,.02);border:1px solid var(--line);border-radius:9px;font-size:13px}
.b-fact .id{font-size:10px;color:var(--txt3);width:22px;font-family:var(--mono);font-weight:700;flex:none}
.b-fact .nm{color:var(--txt2);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.b-fact .vl{font-family:var(--mono);font-weight:700;font-size:13px}
.b-comp{display:flex;align-items:center;gap:11px;margin-bottom:11px}
.b-comp .nm{font-size:13px;color:var(--txt2);width:58px;flex:none;font-weight:500}
.b-comp .tr{flex:1;height:7px;background:rgba(255,255,255,.08);border-radius:4px;overflow:hidden}
.b-comp .tr i{display:block;height:100%;border-radius:4px;box-shadow:0 0 9px currentColor}
.b-comp .vl{font-family:var(--mono);font-size:14px;width:52px;text-align:right;font-weight:600}
.b-comp .vl .mx{color:var(--txt3);font-size:11px}
.b-up{color:#ff2d55}.b-dn{color:var(--down)}.b-nt{color:#ffb020}
.b-note{font-size:12px;color:var(--txt3);margin-top:10px;line-height:1.7}
.b-btn{display:inline-flex;align-items:center;gap:7px;background:linear-gradient(90deg,rgba(var(--ac-rgb),.26),rgba(var(--ac-rgb),.10));border:1px solid rgba(var(--ac-rgb),.42);color:#fff;font-weight:600;font-size:12px;padding:7px 15px;border-radius:9px;cursor:pointer;font-family:var(--mono);letter-spacing:.04em}
.b-btn:hover{background:linear-gradient(90deg,rgba(var(--ac-rgb),.34),rgba(var(--ac-rgb),.16))}
.b-btn:disabled{opacity:.5;cursor:default}
.b-btn.ghost{background:rgba(255,255,255,.05);border-color:var(--line);color:var(--txt2);font-weight:500}
.b-btn.ghost:hover{color:var(--txt);border-color:var(--line2);background:rgba(255,255,255,.08)}
.b-btn.sm{padding:4px 10px;font-size:11px}
.b-input{background:rgba(7,8,12,.5);border:1px solid var(--line);border-radius:8px;padding:6px 10px;color:var(--txt);font-size:12px;font-family:var(--mono);min-width:0;color-scheme:dark}
.b-input:focus{outline:none;border-color:rgba(var(--ac-rgb),.4)}
.b-sw{position:relative;width:40px;height:22px;flex:none;cursor:pointer}
.b-sw input{position:absolute;opacity:0;width:0;height:0}
.b-sw i{position:absolute;inset:0;background:rgba(255,255,255,.1);border:1px solid var(--line);border-radius:999px;transition:.2s}
.b-sw i::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#556;transition:.2s}
.b-sw input:checked+i{background:rgba(var(--ac-rgb),.3);border-color:rgba(var(--ac-rgb),.5)}
.b-sw input:checked+i::after{left:20px;background:var(--ac);box-shadow:0 0 8px var(--ac)}
.b-scroll{max-height:420px;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--line2) transparent}
.b-scroll::-webkit-scrollbar{width:8px;height:8px}
.b-scroll::-webkit-scrollbar-thumb{background:var(--line2);border-radius:4px}
.b-empty{color:var(--txt3);font-size:12px;padding:16px;text-align:center}
.b-stat{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--txt3);font-family:var(--mono);background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:8px;padding:5px 10px;white-space:nowrap}
.b-stat b{color:var(--txt);font-weight:700;margin-left:auto}
.b-stat .sdot{width:7px;height:7px;border-radius:50%;flex:none}
.b-stat .sdot.gr{background:#00ff88;box-shadow:0 0 8px #00ff88}
.b-stat .sdot.go{background:#ffb020;box-shadow:0 0 8px #ffb020}
.b-stat .sdot.re{background:#ff2d55;box-shadow:0 0 8px #ff2d55}

/* ============================================================
   UI v3 · 全站收敛层（2026-08-28 · 方向 C）
   基准 = 市道热度/影子账户的 2b 工作台语言。
   原则：只覆盖外观，不改类名/结构/JS 取值钩子；
        同特异性「后定义生效」，上文原始定义保留可随时回退。
   ============================================================ */

/* ---------- 文本选区 ---------- */
::selection{ background:rgba(var(--ac-rgb),.22); color:var(--txt); }

/* ---------- 滚动条：更贴边、圆角、低存在感 ---------- */
::-webkit-scrollbar{ width:10px; height:10px; }
::-webkit-scrollbar-thumb{
  background:#232d3c; border-radius:6px;
  border:2px solid transparent; background-clip:padding-box;
}
::-webkit-scrollbar-thumb:hover{ background:#33415a; border:2px solid transparent; background-clip:padding-box; }
::-webkit-scrollbar-track{ background:transparent; }
::-webkit-scrollbar-corner{ background:transparent; }

/* ---------- 键盘焦点可见性 ---------- */
.btn:focus-visible, .bt-btn:focus-visible, .sc-scan-btn:focus-visible,
.sc-jump:focus-visible, .hist-del:focus-visible, .hist-kline:focus-visible{
  outline:1px solid var(--focus); outline-offset:1px;
}

/* ---------- 按钮收敛为三态 ----------
   主行动 = 绿渐变（运行/扫描/保存 · 与影子账户「运行」一致）
   次行动 = ghost（刷新/清空/更多 · 中性玻璃）
   小按钮 = 小 ghost / 危险红沿用原定义 */

.sc-scan-btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  font-size:12px; font-weight:600; letter-spacing:.04em;
  color:#fff; padding:4px 14px; border-radius:var(--r-blk);
  background:linear-gradient(90deg,rgba(var(--ac-rgb),.26),rgba(var(--ac-rgb),.10));
  border:1px solid rgba(var(--ac-rgb),.42);
}
.sc-scan-btn:hover{
  color:#fff;
  background:linear-gradient(90deg,rgba(var(--ac-rgb),.34),rgba(var(--ac-rgb),.16));
  border-color:rgba(var(--ac-rgb),.55);
}
.sc-scan-btn:active{ transform:translateY(1px); }
.sc-scan-btn:disabled{ opacity:.45; }

.btn, .bt-btn{
  display:inline-flex; align-items:center; justify-content:center; gap:5px;
  color:var(--txt2); background:rgba(255,255,255,.05);
  border:1px solid var(--line); border-radius:6px;
}
.btn:hover, .bt-btn:hover{
  color:var(--txt); border-color:var(--line2); background:rgba(255,255,255,.08);
}
.bt-btn:active, .btn:active{ transform:translateY(1px); }

/* ---------- 输入控件统一：深井底 + 玻璃边 + 绿焦点 ---------- */
select.sc-ctl, input.sc-ctl, .hd-in, .bt-stdrop-sel,
.eval-row select, .eval-row textarea, .set-row input{
  background:var(--ctl-bg);
  border:1px solid var(--line);
  border-radius:var(--r-ctl);
}
select.sc-ctl:hover, input.sc-ctl:hover, .hd-in:hover, .bt-stdrop-sel:hover{ border-color:var(--line2); }
select.sc-ctl:focus, input.sc-ctl:focus, .hd-in:focus, .bt-stdrop-sel:focus,
.eval-row select:focus, .eval-row textarea:focus, .set-row input:focus{
  outline:none; border-color:var(--focus); box-shadow:var(--focus-ring);
}
#btJsonInput{ border-radius:var(--r-ctl); }

/* ---------- 表格：可读性优先 ----------
   表头对比度 3.5:1 → ≥4.5:1；行分隔更轻；斑马纹极淡（避开 cur/act 选中态） */
.term-table th{
  color:var(--txt2); font-weight:600; font-size:10px; letter-spacing:.08em;
  border-bottom:1px solid var(--line2);
}
.term-table td{ border-bottom:1px solid rgba(255,255,255,.05); }
.term-table tbody tr:hover{ background:rgba(255,255,255,.035); }
.term-table tbody tr:nth-child(even):not(.cur):not(.act){ background:rgba(255,255,255,.013); }

/* ---------- 回测页容器/标签页：玻璃大卡 + 药丸 tab ----------
   2026-09-10 老板令「回测K线发白」根因：.bt-tabs 容器白 .045 玻璃大卡+内部卡片玻璃=白上叠白——
   撤 bg/backdrop（保 K线单层玻璃不复发发白）。
   2026-09-10 老板令「回测结果卡片本身的外框没了」：边框是无辜的——发白根因是玻璃叠层不是边框，
   恢复 1px 外框线+圆角（背景保持透明），结果区重新成「卡」，内部玻璃卡不叠层。 */
.bt-tabs{
  background:transparent;
  border:1px solid var(--line); border-radius:var(--r-card);
  backdrop-filter:none; -webkit-backdrop-filter:none;   /* 20260916q 回滚：容器透明防叠白系 09-10 老板令定案（o 轮误升 blur 已撤） */
  overflow:hidden;
}
.bt-tabbar{ background:rgba(255,255,255,.02); padding:6px 8px; gap:4px; }
.bt-tab{
  display:inline-flex; align-items:center; gap:6px;
  border:1px solid transparent; border-right:none; border-radius:8px;
  padding:6px 13px; color:var(--txt2);
}
.bt-tab:hover{ color:var(--txt); background:rgba(255,255,255,.045); }
.bt-tab.act{
  color:var(--gold2);
  background:rgba(217,164,65,.13);
  border-color:rgba(217,164,65,.35);
  box-shadow:none;
}
.bt-tab svg{ width:14px; height:14px; flex:0 0 14px; }

/* bt-tabs 内的玻璃卡继承圆角 */
.bt-tabs .card{ border-radius:var(--r-blk); }

/* ---------- 统计小药丸（回测主统计/百年统计）贴齐 b-stat ---------- */
.bt-stat{
  background:rgba(255,255,255,.03);
  border:1px solid var(--line); border-radius:var(--r-ctl);
}

/* ---------- 空态组件（.ut-empty · 全页通用） ---------- */
.ut-empty{
  flex:1; min-height:120px;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:6px; padding:28px 16px; text-align:center;
}
.ut-empty .ut-e-ic{ width:34px; height:34px; color:var(--txt4); margin-bottom:2px; }
.ut-empty .ut-e-t{ font-size:13px; color:var(--txt2); letter-spacing:.04em; }
.ut-empty .ut-e-d{ font-size:11px; color:var(--txt3); line-height:1.7; max-width:460px; }
.ut-empty .ut-e-a{ margin-top:8px; }

/* ---------- 加载骨架（.ut-skel · 数据扫描等长任务） ---------- */
.ut-skel{
  position:relative; overflow:hidden;
  background:rgba(255,255,255,.045); border-radius:6px;
}
.ut-skel::after{
  content:''; position:absolute; inset:0; transform:translateX(-100%);
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.07), transparent);
  animation:utSkel 1.4s ease-in-out infinite;
}
@keyframes utSkel{ to{ transform:translateX(100%); } }
@media (prefers-reduced-motion: reduce){
  .ut-skel::after{ animation:none; }
  .tape-track{ animation-duration:480s; }
  .dot{ animation:none; }
}

/* ---------- 表格数字列统一左对齐（2026-09-11 老板令：表头首字与表单首字对应·像回测历史；原右对齐废除） ---------- */
.term-table td.num, .term-table th.num{ text-align:left; font-variant-numeric:tabular-nums; }

/* ---------- 进度条：绿渐变 + 圆角（主行动同色系） ---------- */
.sc-progress{ background:rgba(255,255,255,.06); border-radius:3px; overflow:hidden; }
.sc-bar{ border-radius:3px; background:linear-gradient(90deg,#1f9d68,var(--ac)); }

/* ---------- 提示说明块（bt-info 等纯文本说明）升级为轻量信息条 ---------- */
.bt-info{
  padding:8px 12px;
  background:rgba(255,255,255,.025);
  border:1px solid var(--line); border-radius:var(--r-ctl);
  line-height:1.75;
}

/* ---------- 空表格占位：无 JS 侵入，渲染层自动补提示 ---------- */
.tablewrap:has(> table.term-table:empty)::before,
.bt-pane > .tablewrap:has(> table.term-table:empty)::before{
  content:'暂无数据 · 完成对应操作后此处生成表格';
  display:block; padding:30px 16px; text-align:center;
  color:var(--txt3); font-size:11px; letter-spacing:.05em;
}
#cenChart:empty::before{
  content:'选择范围与基准资产后点「重新回测」生成百年净值曲线';
  display:block; padding:46px 16px; text-align:center;
  color:var(--txt3); font-size:11px; letter-spacing:.05em;
}

/* ============================================================
   UI v3.1 · 二遍收敛（2026-08-28 · 老渐变卡 → 2b 玻璃 + 遗留细节）
   ============================================================ */

/* 老渐变底卡（全球市场 mk / 因子中心 fx / 止损纪律 st）统一为玻璃大卡 */
.mk-card, .fx-card, .st-card{
  background:rgba(255,255,255,.045);
  border:1px solid var(--line); border-radius:var(--r-card);
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
}

/* 侧栏底部状态行：长模型名不折行，超宽弹性收缩省略（修 AI 引擎 deepseek-v4-flash 折行错乱；
   版本/快照竖排行不受影响——列向布局下无宽度约束不会触发省略） */
.nft-row{ white-space:nowrap; }
.nft-row .mono{ min-width:0; overflow:hidden; text-overflow:ellipsis; }

/* 键盘焦点可见性补全（2b 体系按钮 / 下拉项 / 历史行按钮） */
.b-btn:focus-visible, .bt-ops-item:focus-visible, .bt-tasktab:focus-visible,
.sc-jump:focus-visible, .hist-del:focus-visible{
  outline:1px solid var(--focus); outline-offset:1px;
}

/* ============================================================
   UI v3.2 · 回测控制区 → 影子账户式运行条（2026-08-28）
   任务标签行 → 运行条(按钮+JSON收纳) → 状态行 → 贴底全宽进度线
   ============================================================ */
.bt-ctrl .bt-rows{ padding:10px 14px 0; }
.bt-runrow{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  padding:10px 14px 12px;
  border-bottom:1px solid rgba(255,255,255,.04);
}
.bt-runrow .hd-sp{ flex:1; }
.bt-runrow .bt-jsonfold{ margin-top:0; }
.bt-ctrl .sc-status{ padding:9px 14px 8px; min-height:0; }
.bt-ctrl .sc-progress{ margin:0; height:3px; border-radius:0; background:rgba(255,255,255,.06); }

/* ============================================================
   UI v3.4 · 回测控制条 → 影子账户三段式（2026-08-29）
   上=按钮行（运行/更多/暂停/停止 + JSON 收纳）
   中=常驻输出框（状态文本 + 贴底进度线）
   下=任务行（任务标签 chips + ＋新增任务，仿影子「当前市道」行）
   仅用 flex order 重排，DOM 与 JS 钩子不动。
   ============================================================ */
.bt-ctrl{ display:flex; flex-direction:column; }
.bt-ctrl .bt-runrow{ order:1; border-bottom:none; padding:12px 14px 10px; }
.bt-runrow .sc-scan-btn{ margin-left:0; }   /* 原 .sc-scan-btn{margin-left:auto} 在脱离 .bt-btns 后会把整行按钮推到右缘外 */
.bt-ctrl .sc-status{
  order:2;
  margin:2px 14px 0; padding:11px 14px;
  background:rgba(7,8,12,.5);
  border:1px solid var(--line); border-radius:8px;
  min-height:0;
  font-family:var(--mono); font-size:12px; color:var(--txt2); letter-spacing:.03em;
}
.bt-ctrl .sc-progress{
  order:3;
  margin:6px 14px 0; height:3px;
  border-radius:3px; background:rgba(255,255,255,.06);
}
.bt-ctrl .bt-rows{ order:4; padding:4px 14px 12px; }
/* 2026-09-11 老板令「新增任务旧版+不对齐」：bt-outbox 包装层自带 margin/padding 与内层
   sc-status 的 margin 叠加 → 状态条左缘比运行行右移约 20px——包装层归零，三行左缘统一 14px */
.bt-ctrl .bt-outbox{ margin:0; padding:0; border:none; background:none; }
/* 终裁（ID 级作用域压过 v3.7/v4 全部旧块）：状态条盒左缘 = 运行按钮左缘（实测基准 356），
   两行（状态条/任务条）与运行行同左基准分三行排布 */
#term.page-backtest .bt-ctrl .bt-outbox{ margin:2px 14px 10px; padding:9px 12px;
  border:1px solid var(--line); border-radius:9px; background:rgba(255,255,255,.03); }   /* 2026-09-11 老板令「原本的框呢」：归零时误把框体也剥了——补回（对齐不变） */
#term.page-backtest .bt-ctrl .bt-outbox .sc-status{ margin:0; padding:0; }
#term.page-backtest .bt-ctrl .bt-outbox .sc-progress{ margin:6px 0 0; }
.bt-ctrl .bt-taskbar{ border-top:1px solid rgba(255,255,255,.04); padding-top:10px; }
.bt-ctrl .bt-tasktab{ border-radius:999px; }
.bt-ctrl .bt-tasktab.act{ border-radius:999px; }

/* ============================================================
   UI v3.5 · 智能选股控制卡 → 同款三段式（2026-08-29）
   上=筛选控件胶囊 + 扫描/暂停按钮；中=常驻输出框 + 细进度线；
   下=信息行（广度 chip + 结果统计，仿影子「当前市道」行）。
   ============================================================ */
.sc-ctrl{ display:flex; flex-direction:column; }
.sc-ctrl .card-hd{ order:4; border-top:1px solid rgba(255,255,255,.04); padding:9px 14px; }
.sc-ctrl .card-hd .hd-t, .sc-ctrl .card-hd .hd-en{ display:none; }   /* 页名由面包屑承担 */
.sc-ctrl .card-hd .hd-meta{ font-family:var(--mono); }
.sc-ctrl .card-hd .hd-sp{ display:none; }
.sc-ctrl .sc-ctrl-bd{ order:1; padding:12px 14px 10px; max-width:100%; flex-wrap:wrap; }   /* 2026-09-11 老板令「还是没有右对齐」：70% 封顶把右对齐只送到 70% 线——解除封顶 */
.sc-ctrl .sc-ctrl-bd > .bt-f{ margin:0; }
.sc-ctrl .sc-status{
  order:2;
  margin:2px 14px 0; padding:11px 14px;
  background:rgba(7,8,12,.5);
  border:1px solid var(--line); border-radius:8px;
  min-height:0;
  font-family:var(--mono); font-size:12px; color:var(--txt2); letter-spacing:.03em;
}
.sc-ctrl .sc-progress{
  order:3;
  margin:6px 14px 0; height:3px;
  border-radius:3px; background:rgba(255,255,255,.06);
}
/* 输出框内长文本可换行（扫描完成统计较长） */
.sc-ctrl .sc-status, .bt-ctrl .sc-status{ white-space:normal; line-height:1.6; }

/* ============================================================
   UI v3.7 · 输出框+进度条 → 影子账户同款（2026-08-29）
   进度条长在输出框内部（文字下方 6px 金色渐变条，静止时隐藏），
   样式与 .sh-out/.sh-bar-wrap/.sh-bar-fill 一致。
   ============================================================ */
.bt-outbox{
  order:2;   /* 输出框位于按钮行(1)与任务行(4)之间 */
  margin:2px 14px 0;
  padding:9px 12px;
  border:1px solid var(--line); border-radius:9px;
  background:rgba(255,255,255,.03);
}
.bt-outbox .sc-status{
  margin:0; padding:0; min-height:0;
  border:none; background:none; border-radius:0;
  font-family:var(--mono); font-size:12px; color:var(--txt2); letter-spacing:.03em;
  white-space:normal; line-height:1.6;
}
.bt-outbox .sc-progress{
  margin:8px 0 0; height:6px;
  background:var(--line2); border-radius:4px; overflow:hidden;
}
.bt-outbox .sc-bar{
  background:linear-gradient(90deg,#a97b2c,#f5a524);
  transition:width .3s; border-radius:0;
}
/* 静止（0%）时隐藏进度条——与影子 shBar(null) 行为一致 */
.bt-outbox .sc-progress{ display:none; }
.bt-outbox .sc-progress.sc-running{ display:block; }

/* ============================================================
   UI v3.8 · 选股结果表列头排序指示（协同需求_选股双分显示 F2）
   ============================================================ */
.sc-table-card thead th[data-k]{ cursor:pointer; user-select:none; }
.sc-table-card thead th[data-k]:hover{ color:var(--txt); }
.sc-table-card thead th[data-sort="desc"], .sc-table-card thead th[data-sort="asc"]{ color:var(--gold2); }
.sc-table-card thead th[data-sort="desc"]::after{ content:' ▾'; }
.sc-table-card thead th[data-sort="asc"]::after{ content:' ▴'; }

/* ============================================================
   UI v3.6 · JSON 批量配置 → 按钮化 + 悬浮面板（2026-08-29）
   触发器是真正的按钮；面板 absolute 浮层，展开不再撑开卡片高度；
   点面板外自动收起。原 .bt-jsonfold 类名与 JS 钩子保留。
   ============================================================ */
.bt-runrow .bt-jsonfold{ position:relative; margin-top:0; }
#btJsonFold{
  display:inline-flex; align-items:center; gap:6px;
  padding:5px 13px; font-size:12px; letter-spacing:.04em;
  color:var(--txt2);
  background:rgba(255,255,255,.05);
  border:1px solid var(--line); border-radius:6px;
  cursor:pointer; user-select:none;
}
#btJsonFold:hover{ color:var(--txt); border-color:var(--line2); background:rgba(255,255,255,.08); }
#btJsonFold:focus-visible{ outline:1px solid var(--focus); outline-offset:1px; }
#btJsonFold .bt-jsonfold-tri{ font-size:9px; color:var(--txt4); transition:transform .15s; }
#btJsonFold.open{
  color:var(--gold2);
  border-color:rgba(217,164,65,.35);
  background:rgba(217,164,65,.13);
}
#btJsonFold.open .bt-jsonfold-tri{ transform:rotate(90deg); }
.bt-jsonpaste{
  position:absolute !important;
  left:auto; right:0;                 /* 2026-09-04 追补（管理员来单）：开关已右对齐 → 面板右锚定、向左生长（原 left:0 向右展已捅出卡片外） */
  top:calc(100% + 8px); z-index:46;
  width:640px; max-width:none;
  align-items:flex-start; align-content:flex-start;
  background:#0b0f15;
  border:1px solid var(--line2); border-radius:10px;
  padding:12px;
  box-shadow:var(--sh-pop);
}
.bt-jsonpaste #btJsonInput{ width:100% !important; min-width:0 !important; flex:1 1 100% !important; }
.bt-jsonpaste .sc-scan-btn, .bt-jsonpaste .bt-btn{ flex:0 0 auto; }

/* ============================================================
   UI v3.3 · 任务配置行 → 胶囊单元系统（2026-08-28）
   每个控件 = 标签+输入+单位 捆成一个 .bt-f 胶囊，换行永不拆散；
   以后新增参数只要同样包成 .bt-f，即自动获得统一样式与换行行为。
   高级参数折叠已移除，策略细分/放飞/止损/红线 分区常驻。
   ============================================================ */
.bt-row{
  gap:0; padding:0; margin-bottom:10px;
  border:1px solid var(--line); border-radius:10px;
  background:rgba(255,255,255,.02);
}
/* 2026-09-04 整版重排：.bt-row-hd「任务 N」大标题行已删（任务归属看顶部任务标签），规则随撤 */
/* 分区 = 标题行 + 整行宽控件流（标题在上，控件在下自动换行，永不横向溢出）
   2026-09-04 整版重排（管理员来单）：去 max-width:70% —— 右侧 30% 永久空白的「莫名两行」根因，
   控件流吃满整行、放不下才换行 */
.bt-row .bt-sec{ display:block; padding:8px 14px 9px; border-top:1px solid rgba(255,255,255,.04); white-space:normal; }
.bt-row .bt-sec:first-of-type{ border-top:none; }
.bt-row .bt-sec .bt-sec-hd{
  display:inline-flex; margin:0 0 7px;
  border-left:2px solid #3a2e17; padding:1px 0 1px 8px;
}
.bt-row .bt-sec-body{
  display:flex !important; flex-wrap:wrap !important;
  min-width:0; white-space:normal;
  gap:6px 8px;
}
.bt-row .bt-sec-body > *{ white-space:normal; }
.bt-row .bt-sec-body .bt-f > label,
.bt-row .bt-sec-body .sc-chk{ white-space:nowrap; }

/* ===== 任务行板块头部标签（2026-09-03 布局重排：任务 N · 板块 两级标签，同屏一块） ===== */
.bt-btabbar{ display:flex; align-items:center; gap:2px; flex-wrap:nowrap; overflow-x:auto;
  border-bottom:1px solid var(--line); padding:6px 10px 0; scrollbar-width:thin; }
.bt-btab{ position:relative; flex:0 0 auto; padding:5px 13px; font-size:11px; color:var(--txt2);
  cursor:pointer; white-space:nowrap; border:1px solid transparent; border-bottom:none;
  border-radius:6px 6px 0 0; user-select:none; }
.bt-btab:hover{ color:var(--txt); }
.bt-btab.act{ color:var(--gold); background:linear-gradient(180deg,#141a24,#0d1118);
  border-color:var(--line); box-shadow:inset 0 2px 0 var(--gold); }
.bt-btab-dot{ display:none; position:absolute; top:4px; right:5px; width:5px; height:5px;
  border-radius:50%; background:var(--gold); }
.bt-btab.touched .bt-btab-dot{ display:inline-block; }
.bt-btabpane{ display:none; padding-top:2px; }
.bt-btabpane.act{ display:block; }
.bt-btabpane .bt-sec-hd,
.bt-row .bt-btabpane .bt-sec .bt-sec-hd{ display:none !important; }   /* 板块名已在标签上，分区标题不重复 */

/* ===== 口径徽标（2026-09-03 口径切换卡）：组合=绿 · 纸面(simulate)=灰 · 单吊=蓝 ===== */
.bt-emode-big{ order:-2; flex:0 0 auto; align-self:flex-start; font-family:var(--mono); font-size:11px;
  font-weight:700; padding:2px 10px; border-radius:999px; border:1px solid rgba(0,255,136,.4);
  color:#00ff88; background:rgba(0,255,136,.07); }
.bt-emode-big.em-paper{ border-color:rgba(143,163,184,.45); color:#8fa3b8; background:rgba(143,163,184,.08); }
.bt-emode{ display:inline-block; font-size:10px; font-weight:700; border-radius:999px; padding:0 6px; }   /* 自适应卡：口径章收窄 */
.bt-emode.em-combo{ color:#00ff88; background:rgba(0,255,136,.09); }
.bt-emode.em-paper{ color:#8fa3b8; background:rgba(143,163,184,.12); }
.bt-emode.em-sb{ color:#4c9bff; background:rgba(76,155,255,.10); }
.bt-emode.em-unk{ color:var(--txt3); }
.bt-btabpane .bt-sec:first-of-type{ border-top:none; }

/* 胶囊单元：label + input + 单位后缀 */
.bt-f{
  display:inline-flex; align-items:center; gap:5px;
  padding:3px 9px;
  background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.06);
  border-radius:8px;
  transition:border-color .15s, background .15s;
}
.bt-f:hover{ border-color:rgba(255,255,255,.12); }
.bt-f:focus-within{ border-color:rgba(var(--ac-rgb),.35); background:rgba(var(--ac-rgb),.045); }
.bt-f > label{ font-size:11px; color:var(--txt3); white-space:nowrap; cursor:help; }
.bt-f .sc-ctl{ border:none; background:transparent; height:22px; padding:0 2px; }
.bt-f > select.sc-ctl{ border:1px solid var(--line); background:var(--ctl-bg); height:24px; padding:0 6px; }

/* 区间胶囊（含多区间与删除按钮） */
.bt-row .bt-iv{
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 9px;
  background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.06);
  border-radius:8px;
}
.bt-row .bt-iv .sc-ctl{ border:none; background:transparent; height:22px; }
.bt-row .bt-iv:focus-within{ border-color:rgba(var(--ac-rgb),.35); }

/* 勾选胶囊（sc-chk：免打断/模拟组合/各策略开关等） */
.bt-row .sc-chk{
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 10px; font-size:11px; color:var(--txt2);
  background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.06);
  border-radius:8px; cursor:pointer; white-space:nowrap; user-select:none;
}
.bt-row .sc-chk:hover{ border-color:rgba(255,255,255,.14); color:var(--txt); }
.bt-row .sc-chk:has(input:checked){ border-color:rgba(var(--ac-rgb),.25); background:rgba(var(--ac-rgb),.05); }
.bt-row .sc-chk input{ margin:0; vertical-align:middle; accent-color:#00b862; }

/* 分区内的策略/放飞/止损下拉胶囊化 */
.bt-row .bt-stdrop-sel{
  border-radius:8px;
  background:rgba(255,255,255,.03);
  border-color:rgba(255,255,255,.08);
}
.bt-row .bt-avg-pos{ margin-left:2px; }

/* ============================================================
   UI v3.9 · 顶栏单行化（2026-08-29）：滚动行情 + 固定时间区合为一行
   命令栏整行删除（用户裁定无用）。左=热度/因子滚动条，右=LIVE/日期/时钟固定不滚。
   ============================================================ */
.topbar{
  height:34px; flex:0 0 34px;
  display:flex; align-items:stretch;
  gap:0; padding:0;
}
.topbar .tape{
  flex:1 1 auto; min-width:0; height:100%;
  border-bottom:none; background:transparent;
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 40px, #000 calc(100% - 40px), transparent 100%);
          mask-image:linear-gradient(90deg, transparent 0, #000 40px, #000 calc(100% - 40px), transparent 100%);
}
.topbar .tape-track,
.topbar .tp-itm,
.topbar .tp-sec{ height:100%; }
.topbar .cbar-right{
  flex:none; align-self:stretch; margin:0;
  gap:12px; padding:0 16px 0 18px;
  border-left:1px solid var(--line);
  background:rgba(10,13,19,.72);
}

/* ============================================================
   UI v4.0 · 持仓管理重排（2026-08-29 · 用户直接交办）
   控制条胶囊化 / 市道+总览合并为常驻信息条 / 组合决策面板结构化
   （资金条 → 双列表格 → 替换建议 → 市道警示）。
   ============================================================ */
.hd-ctrl .sc-ctrl-bd{ padding:10px 14px; }
.hd-ctrl .sc-ctrl-bd + .sc-ctrl-bd{ border-top:1px dashed rgba(255,255,255,.05); }
.hd-ctrl .bt-f > label{ font-size:11px; color:var(--txt3); }
.hd-ctrl .hd-an-btn, .hd-ctrl .hd-plan-btn{
  background:linear-gradient(90deg,rgba(var(--ac-rgb),.26),rgba(var(--ac-rgb),.10));
  border-color:rgba(var(--ac-rgb),.42); color:#fff;
}
.hd-ctrl .hd-an-btn:hover, .hd-ctrl .hd-plan-btn:hover{
  background:linear-gradient(90deg,rgba(var(--ac-rgb),.34),rgba(var(--ac-rgb),.16)); color:#fff;
}
.hd-ctrl .hd-add-btn{ color:var(--ac-text); border-color:rgba(var(--ac-rgb),.35); }
.hd-ctrl .hd-add-btn:hover{ background:rgba(var(--ac-rgb),.10); color:#aef0d0; }

/* 信息条：市道行 + 持仓总览行（常驻、等高、chips 式） */
.hd-infoband{ display:flex; flex-direction:column; padding:6px 14px; }
.hd-band-row{
  display:flex; align-items:center; flex-wrap:wrap;
  gap:4px 16px; min-height:26px; padding:4px 0;
}
.hd-band-row + .hd-band-row{ border-top:1px dashed rgba(255,255,255,.05); }
.hd-band-row .card-hd{
  display:inline-flex; align-items:center; gap:8px;
  height:auto; min-height:0; padding:0; background:none; border-bottom:none; flex-wrap:wrap;
}
.hd-band-row .card-hd .hd-en, .hd-band-row .card-hd .hd-sp{ display:none; }
.hd-band-row .card-hd .hd-t{ font-size:12px; }
.hd-band-row .sc-ctrl-bd{ display:inline-flex; flex-wrap:wrap; gap:4px 14px; padding:0; }
.hd-band-row .hd-ov-stat{ padding:0; background:none; border:none; }
.hd-band-row .hd-ov-note{ padding:2px 0; }

/* 组合决策面板 */
#hdPlanBody{ padding:4px 14px 14px; }
.hd-plan-stats{ display:flex; flex-wrap:wrap; gap:4px 18px; padding:6px 0 8px; }
.hd-plan-stat{ font-size:11px; color:var(--txt3); }
.hd-plan-stat b{ font-family:var(--mono); font-size:13px; color:var(--txt); margin-left:4px; }
.hd-plan-sub{
  display:flex; align-items:center; gap:8px;
  font-size:12px; color:var(--gold); font-weight:700; letter-spacing:.08em;
  margin:12px 0 4px;
}
.hd-plan-sub::after{ content:''; flex:1; height:1px; background:linear-gradient(90deg,var(--line),transparent); }
.hd-plan-cols{
  display:grid; grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);
  gap:0 22px; align-items:start;
}
.hd-plan-tbl td{ font-size:12px; }
.hd-plan-replace{
  margin-top:4px; padding:8px 12px;
  border:1px solid rgba(217,164,65,.4); background:rgba(217,164,65,.06); border-radius:8px;
  font-size:12px; color:var(--txt2); line-height:1.7;
}
.hd-plan-note{
  padding:8px 12px; border:1px solid rgba(255,45,85,.35); background:rgba(255,45,85,.06);
  border-radius:8px; font-size:12px; color:var(--up);
}

/* UI v4.1 · 持仓页微调（2026-08-29）：zoom 宽度缺陷的页面级对策 */
.hd-ctrl .sc-ctrl-bd{ max-width:70%; flex-wrap:wrap; } /* 行宽封顶，超宽自动换行（与 bt-sec-body 同策） */
/* 2026-09-11 老板直派重排：总资金行下移组合决策卡（原 hd-cash-row 豁免与 .hd-sp 规则随之退役）——
   市道行 #hdRegimeRow 接棒控制卡尾：满宽（胶囊行+指引右推） */
.hd-ctrl .hd-regime-row{ max-width:none; min-width:0; }
.hd-band-row .card-hd{ flex:none; white-space:nowrap; } /* 市道标题不被压折行 */
.hd-ctrl .bt-f input.sc-ctl{ width:90px !important; }  /* zoom 下控件内在宽约 2 倍，显式封宽 */
.hd-ctrl .bt-f input.sc-ctl.hd-in-date,
.hd-ctrl .bt-f input[type="date"]{ width:150px !important; }
.hd-ctrl .bt-f input#hdCode{ width:80px !important; }

/* UI v4.2 · 组合决策面板单列化（2026-08-29）：nowrap 表格在双列网格会溢出压列 */
.hd-plan-cols{ display:block; }
.hd-plan-tbl{ table-layout:fixed; width:100%; }
.hd-plan-tbl th:nth-child(1){ width:90px; }
.hd-plan-tbl th:nth-child(2){ width:110px; }
.hd-plan-tbl th:nth-child(3){ width:90px; }
.hd-plan-tbl th:nth-child(4){ width:76px; }
.hd-plan-tbl th:nth-child(5){ width:76px; }
.hd-plan-tbl td{ overflow:hidden; text-overflow:ellipsis; }
.hd-plan-note{
  margin-top:10px; padding:7px 12px;
  border:1px solid rgba(255,45,85,.35); background:rgba(255,45,85,.06);
  border-radius:8px; font-size:12px; color:var(--up);
}
/* 两表列数不同 → 按列数分别定宽 */
.hd-plan-tbl6 th:nth-child(1){ width:90px; } .hd-plan-tbl6 th:nth-child(2){ width:110px; }
.hd-plan-tbl6 th:nth-child(3){ width:90px; } .hd-plan-tbl6 th:nth-child(4){ width:76px; }
.hd-plan-tbl6 th:nth-child(5){ width:76px; }
.hd-plan-tbl5 th:nth-child(1){ width:90px; } .hd-plan-tbl5 th:nth-child(2){ width:110px; }
.hd-plan-tbl5 th:nth-child(3){ width:70px; } .hd-plan-tbl5 th:nth-child(4){ width:76px; }

/* ============================================================
   UI v4.1 · 侧边栏重构（2026-08-29 · 用户交办）：2b 药丸导航
   结构/类名/JS 钩子不动，纯外观重塑：
   导航项=药丸（激活=绿染底+描边·柔和）、分区标题缩进对齐、页脚=状态 chips。
   ============================================================ */
.sidenav{ width:216px; flex:0 0 216px; padding:0 10px 10px; background:rgba(9,12,18,.82); }
.s-brand{
  margin:12px 2px 6px; padding:10px 10px 12px;
  border:1px solid rgba(255,255,255,.06); border-radius:12px;
  background:rgba(255,255,255,.03); border-bottom:1px solid rgba(255,255,255,.06);
}
.s-logo{ border-radius:10px; box-shadow:0 0 14px rgba(var(--ac-rgb),.35); }
.s-bs{ letter-spacing:.18em; }
.nav-sec{ padding:12px 8px 4px; color:var(--txt4); letter-spacing:.2em; }
.nav-itm{
  height:32px; margin:2px 0; padding:0 10px;
  border-left:none; border-radius:9px;
  transition:background .15s, color .15s, box-shadow .15s;
}
.nav-itm:hover{ background:rgba(255,255,255,.05); }
/* 柔和激活态：弱渐变染底 + 半透明内描边，去硬边框与高饱和小字 */
.nav-itm.act{
  border-left:none;
  background:linear-gradient(90deg,rgba(var(--ac-rgb),.12),rgba(var(--ac-rgb),.03) 80%);
  box-shadow:inset 0 0 0 1px rgba(var(--ac-rgb),.18);
}
.nav-itm.act .nav-t{ color:var(--ac-text); }   /* 2026-09-11 老板直派「系统颜色改为了蓝色，但回测调优导航按钮没变化」：激活态文字/图标原硬编码绿，改随主题令牌 */
.nav-itm.act .nav-ic{ color:var(--ac); }
.nav-t{ font-size:12.5px; }
.nav-k{
  font-size:9px; color:var(--txt4);
  border:1px solid rgba(255,255,255,.08); border-radius:5px; padding:0 5px;
}
/* 折叠组内项微缩进：药丸列表的层级感 */
.nav-group-body .nav-itm{ margin-left:7px; }
.nav-itm.work::after{ right:10px; }
.nav-sep{ margin:8px 8px; background:transparent; border-top:1px dashed rgba(255,255,255,.08); height:0; }

/* ---- 页脚 · 状态 chips：每行=圆角胶囊，点色即状态色，数值右对齐 ---- */
.nav-ftr{
  margin-top:auto; padding:8px 8px 10px;
  border:1px solid rgba(255,255,255,.06); border-top:1px solid rgba(255,255,255,.06);
  border-radius:12px; background:rgba(255,255,255,.03);
  display:flex; flex-direction:column;
}
.nft-row{
  display:flex; align-items:center; gap:7px;
  padding:4px 10px; margin:2px 0;
  font-size:11.5px; color:var(--txt2); white-space:nowrap;
  border:1px solid rgba(255,255,255,.07); border-radius:999px;
  background:rgba(255,255,255,.025);
}
.nft-row .mono{ min-width:0; overflow:hidden; text-overflow:ellipsis; font-size:10.5px; color:var(--txt3); }
.nft-lb{ flex:none; letter-spacing:.03em; }
/* 状态点随 chip 语义微放大并带同色柔光 */
.sdot{ width:6px; height:6px; border-radius:50%; flex:0 0 6px; }
.sdot.grn{ background:var(--down); box-shadow:0 0 6px rgba(0,255,136,.45); }
.sdot.gold{ background:var(--gold); box-shadow:0 0 6px rgba(227,168,78,.4); }
.sdot.red{ background:var(--up); box-shadow:0 0 6px rgba(255,45,85,.4); }
/* 版本/快照：chips 区下方轻分隔的元信息行（窄栏纵向堆叠，避免互相挤压截断） */
.nft-meta{
  display:flex; flex-direction:column; align-items:flex-start; gap:2px;
  margin-top:6px; padding:5px 6px 0;
  border-top:1px dashed rgba(255,255,255,.08);
}
.nft-meta .mono{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:10px; color:var(--txt4); }

/* ============================================================
   UI v4.2 · 全局配色主题（调色盘）+ 侧栏底色重塑（2026-08-29）
   <html data-ac="green|gold|blue|violet"> 切换全站主题色；
   语义色（红涨绿跌）不参与换肤。
   ============================================================ */
:root, html[data-ac="green"]{
  --ac-rgb:0,255,136;
  --ac:#00ff88; --ac2:#22d3ee; --ac-text:#7ee2b8; --ac-dim:#00c97a;
  --ac-bg-strong:rgba(0,255,136,.26); --ac-bg-mid:rgba(0,255,136,.13); --ac-bg-soft:rgba(0,255,136,.05);
  --ac-line:rgba(0,255,136,.42); --ac-glow:rgba(0,255,136,.35);
  --bg-tint:rgba(0,255,136,.09); --bg-deep:#06090b;
}
html[data-ac="gold"]{
  --ac-rgb:255,196,77;
  --bg-tint:rgba(255,176,32,.10); --bg-deep:#0b0805;
  --ac:#ffc44d; --ac2:#ff9f43; --ac-text:#ffd98a; --ac-dim:#e0a52e;
  --ac-bg-strong:rgba(255,176,32,.26); --ac-bg-mid:rgba(255,176,32,.13); --ac-bg-soft:rgba(255,176,32,.05);
  --ac-line:rgba(255,176,32,.42); --ac-glow:rgba(255,176,32,.35);
  --focus:rgba(255,176,32,.45); --focus-ring:0 0 0 2px rgba(255,176,32,.12);
}
html[data-ac="blue"]{
  --ac-rgb:76,155,255;
  --bg-tint:rgba(76,155,255,.11); --bg-deep:#05070d;
  --ac:#4c9bff; --ac2:#22d3ee; --ac-text:#9cc7ff; --ac-dim:#2f7fe0;
  --ac-bg-strong:rgba(76,155,255,.26); --ac-bg-mid:rgba(76,155,255,.13); --ac-bg-soft:rgba(76,155,255,.05);
  --ac-line:rgba(76,155,255,.42); --ac-glow:rgba(76,155,255,.35);
  --focus:rgba(76,155,255,.45); --focus-ring:0 0 0 2px rgba(76,155,255,.12);
}
html[data-ac="violet"]{
  --ac-rgb:167,139,250;
  --bg-tint:rgba(139,92,246,.11); --bg-deep:#090712;
  --ac:#a78bfa; --ac2:#c084fc; --ac-text:#cbb8fd; --ac-dim:#8b5cf6;
  --ac-bg-strong:rgba(139,92,246,.26); --ac-bg-mid:rgba(139,92,246,.13); --ac-bg-soft:rgba(139,92,246,.05);
  --ac-line:rgba(139,92,246,.42); --ac-glow:rgba(139,92,246,.35);
  --focus:rgba(139,92,246,.45); --focus-ring:0 0 0 2px rgba(139,92,246,.12);
}

/* 主题色应用到全站关键位（后定义覆盖前文同选择器） */
.sc-scan-btn{
  background:linear-gradient(90deg,var(--ac-bg-strong),var(--ac-bg-soft));
  border-color:var(--ac-line);
}
.sc-scan-btn:hover{
  background:linear-gradient(90deg,var(--ac-bg-strong),var(--ac-bg-mid));
  border-color:var(--ac-line);
}
.sc-bar{ background:linear-gradient(90deg,var(--ac-dim),var(--ac)); }
.bt-outbox .sc-bar{ background:linear-gradient(90deg,var(--ac-dim),var(--ac)); }
.b-btn{
  background:linear-gradient(90deg,var(--ac-bg-strong),var(--ac-bg-soft));
  border-color:var(--ac-line);
}
.b-btn:hover{ background:linear-gradient(90deg,var(--ac-bg-strong),var(--ac-bg-mid)); border-color:var(--ac-line); }
.b-sw input:checked + i{ background:var(--ac-bg-mid); border-color:var(--ac-line); }
.b-sw input:checked + i::after{ background:var(--ac); box-shadow:0 0 8px var(--ac); }
.hd-ctrl .hd-an-btn, .hd-ctrl .hd-plan-btn{
  background:linear-gradient(90deg,var(--ac-bg-strong),var(--ac-bg-soft));
  border-color:var(--ac-line); color:#fff;
}
.hd-ctrl .hd-an-btn:hover, .hd-ctrl .hd-plan-btn:hover{
  background:linear-gradient(90deg,var(--ac-bg-strong),var(--ac-bg-mid)); color:#fff;
}
.hd-ctrl .hd-add-btn{ color:var(--ac-text); border-color:var(--ac-line); }
.hd-ctrl .hd-add-btn:hover{ background:var(--ac-bg-soft); color:var(--ac-text); }
.s-logo{ background:linear-gradient(135deg,var(--ac),var(--ac2)); box-shadow:0 0 14px var(--ac-glow); }
.nav-itm.act{
  background:linear-gradient(90deg,var(--ac-bg-mid),transparent);
  box-shadow:inset 0 0 0 1px var(--ac-line);
}
.nav-itm.act .nav-t{ color:var(--ac-text); }
.nav-itm.act .nav-ic{ color:var(--ac); }
.nav-itm.work::after{ background:var(--ac); box-shadow:0 0 9px var(--ac); }
.nav-itm.work .nav-ic{ color:var(--ac); }

/* 侧栏底色重塑：主题辉光 + 渐变底 + 渐变亮边（摆脱死黑平涂） */
.sidenav{
  position:relative;
  background:
    radial-gradient(420px 240px at 20% -6%, var(--ac-bg-soft), transparent 62%),
    radial-gradient(420px 320px at -10% 110%, rgba(76,155,255,.05), transparent 60%),
    linear-gradient(180deg, rgba(12,16,24,.92), rgba(7,9,14,.94));
}
.sidenav::before{
  content:''; position:absolute; top:0; left:0; right:0; height:2px;
  background:linear-gradient(90deg, var(--ac), transparent 70%); opacity:.55;
  pointer-events:none;
}
.sidenav::after{
  content:''; position:absolute; top:0; bottom:0; right:0; width:1px;
  background:linear-gradient(180deg, var(--ac-line), rgba(255,255,255,.05) 45%, var(--ac-glow));
  pointer-events:none;
}

/* 页脚：调色盘按钮 + 版本/快照（行容器=.nft-meta，见 2052 行覆写） */
.ac-btn{
  width:28px; height:28px; flex:none;
  display:inline-flex; align-items:center; justify-content:center;
  border:1px solid var(--ac-line); border-radius:8px;
  background:linear-gradient(135deg, var(--ac-bg-strong), var(--ac-bg-soft));
  color:var(--ac-text); cursor:pointer;
  transition:transform .15s, box-shadow .15s;
}
.ac-btn:hover{ transform:rotate(-12deg) scale(1.06); box-shadow:0 0 10px var(--ac-glow); }
.nft-ver-col{ display:flex; flex-direction:column; gap:1px; min-width:0; }
.nft-ver-col .mono{ font-size:10px; }

/* 调色盘按钮在 nft-meta 行内的适配 */
/* 2026-09-07 老板令：调色盘按钮与版本/快照分列左右——按钮靠左、版本列靠右（space-between）；
   极窄窗由 .nft-ver-col min-width:0 + mono 省略号兜底，不挤不叠 */
.nft-meta{ display:flex; flex-direction:row; align-items:center; justify-content:space-between; gap:8px; min-width:0; }
.nft-ver-col .mono{ text-align:left; }


/* ============================================================
   UI v4.3 · 背景随主题换色（2026-08-29 用户要求：调色盘必须调背景）
   大底氛围光 + 终端渐变底全部走主题令牌；面板为中性玻璃，透出底色。
   2026-09-10 老板令：背景必须是「可被毛玻璃透出的色彩源」——五斑极光
   （主斑随调色盘 --ac-rgb，另紫/涨红/跌绿/金四斑为身份色常量），面板
   自带 blur(18-24px) 即透成毛玻璃；中央仍留暗区保表格可读性。
   2026-09-10 老板令②：极光动态化（呼吸感）——色斑移入 #term::before/
   ::after 双层，60s/75s 异相漂移，纯 transform（合成层动画，零布局成本，
   不触发重排）；z-index:-1 压在内容下、translateZ(0) 保 #term 恒为堆叠
   上下文；inset:-12% + scale 给漂移留边，overflow:hidden 防 phantom 滚动；
   prefers-reduced-motion 时静止为静态极光。
   2026-09-10 10:0x 老板报告 GPU 3D 常驻 40%+（悬停卡顿+回测历史回落缓慢）：
   根因=动态背景令全站 backdrop-filter 面板每帧重新采样模糊 + 两块 1750×1090
   常驻合成层——动效先行下线回静态（animation:none，色彩/毛玻璃观感不变，
   keyframes 与分层保留=再开是一行事）；呼吸感再上 Scheme（设置开关默认关/
   仅轻页开/放弃）候老板裁决。
   ============================================================ */
body{
  background:
    radial-gradient(1200px 700px at 82% -8%, rgba(var(--ac-rgb),.18), transparent 62%),
    radial-gradient(1000px 600px at 100% 106%, rgba(139,92,246,.15), transparent 62%),
    radial-gradient(900px 500px at -6% 45%, rgba(255,45,85,.11), transparent 55%),
    radial-gradient(800px 500px at 42% 100%, rgba(var(--ac-rgb),.11), transparent 55%),
    var(--bg);
}
/* 2026-09-10 10:1x 老板令：暗部渐变分层（8bit 量化 banding）——细分色标+噪点抖动。
   2026-09-10 10:4x 二轮：低频云纹+13档+颗粒加强。
   2026-09-10 10:5x 三轮修正（老板：看着脏）——二轮云纹/颗粒在 #term+双伪层三层叠加=等效三倍强度，
   整屏云状脏痕。收敛为「单层」架构：细颗粒只在最顶伪层（::after）一次、云纹只在最底 #term 一次
   且降 3%，13 档渐变与色斑加密保留。强度旋钮不变：--grain 0.045 / --mottle 0.03。
   2026-09-10 10:5x 四轮（老板：云状不在审美上，改极光那种）——云纹层整层撤销，
   背景回归「13 档细渐变 + 五斑极光 + 一层细颗粒压色带」的纯极光平滑过渡。
   2026-09-10 11:0x 五轮（老板令：背景跟随左下角换色按钮+找回红紫对撞色）——
   ①主斑（84% -10%）与底部斑（40% 112%）均随调色盘 --ac-rgb 联动（换肤即换背景主色）；
   ②对撞双锚常驻找回：紫 139,92,246（104% 44%，.15→.18）+ 涨红 255,45,85（-12% 36%，.12→.16，
   四轮收敛时被误删本轮找回）——无论调色盘切到哪色，红紫对撞始终在场；
   ③细颗粒 4.5% 保留压暗部量化。 */
:root{
  --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.045 0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23g)'/%3E%3C/svg%3E");
}
#term{
  transform:translateZ(0);   /* 20260916q git 考古回滚：isolation:isolate 恢复为入库版 translateZ(0)（伪层同步回 absolute，无 fixed 降级问题） */
  background:
    var(--grain) repeat,   /* 20260916q 恢复 grain 颗粒层（昨晚 k 轮误撤——老板令「弄回我原来的毛玻璃」git 考古 fe2984b 原配方） */
    linear-gradient(180deg,
      #0b0e14 0%, #0a0e13 8%, #0a0d13 16%, #090d12 24%, #090c12 32%, #080c11 40%,
      #080b11 48%, #070b10 56%, #070a10 64%, #070a0f 72%, #06090e 80%, #06090d 88%,
      var(--bg-deep) 100%);
}
#term::before,
#term::after{
  content:""; position:absolute; z-index:-1;   /* 20260916q 恢复入库版 absolute 挂附（昨晚改 fixed 系直角底色修复链产物，随原配方回滚） */
  inset:0; pointer-events:none;
}
#term::before{
  background:
    radial-gradient(1370px 800px at 84% -10%, rgba(var(--ac-rgb),.20) 0%, rgba(var(--ac-rgb),.16) 14%, rgba(var(--ac-rgb),.12) 28%, rgba(var(--ac-rgb),.08) 42%, rgba(var(--ac-rgb),.04) 53%, transparent 62%),
    radial-gradient(1180px 700px at 104% 44%, rgba(139,92,246,.18) 0%, rgba(139,92,246,.11) 16%, rgba(139,92,246,.07) 32%, rgba(139,92,246,.03) 46%, transparent 60%),
    radial-gradient(650px 400px at 55% -6%, rgba(245,165,36,.08) 0%, rgba(245,165,36,.05) 16%, rgba(245,165,36,.02) 32%, transparent 60%);
  animation:none;   /* 2026-09-10 10:0x 性能下线（原 utsAuroraA 60s）；恢复=改回 animation:utsAuroraA 60s ease-in-out infinite alternate */
}
#term::after{
  background:
    var(--grain) repeat,   /* 20260916q 恢复（昨晚误撤） */
    radial-gradient(1000px 620px at -12% 36%, rgba(255,45,85,.16) 0%, rgba(255,45,85,.10) 16%, rgba(255,45,85,.05) 32%, rgba(255,45,85,.02) 46%, transparent 58%),
    radial-gradient(900px 560px at 40% 112%, rgba(var(--ac-rgb),.10) 0%, rgba(var(--ac-rgb),.05) 18%, rgba(var(--ac-rgb),.02) 34%, transparent 52%);
  animation:none;   /* 2026-09-10 10:0x 性能下线（原 utsAuroraB 75s）；恢复=改回 animation:utsAuroraB 75s ease-in-out infinite alternate */
}
@keyframes utsAuroraA{
  from{ transform:translate3d(-1.8%,-1.2%,0) scale(1.02); }
  to  { transform:translate3d(1.8%,1.5%,0)   scale(1.08); }
}
@keyframes utsAuroraB{
  from{ transform:translate3d(1.6%,1.2%,0)  scale(1.07); }
  to  { transform:translate3d(-1.8%,-1.0%,0) scale(1.02); }
}
@media (prefers-reduced-motion: reduce){
  #term::before, #term::after{ animation:none; }
}



/* ============================================================
   UI v4.5 · 品牌热度水位计（2026-08-29 用户正式需求单）
   「市」字后置水位：高度=score/scale.max，颜色沿温度档连续插值
   （0紫灰→16冷紫→48琥珀→80橙红→96正红→120深红）；
   ≥80蒸汽、≤32结霜、≤16冰封（波纹静止）；波浪双层果冻波。
   数据语义色 = 字面 RGB，不随 data-ac 调色盘换肤（与红涨绿跌同待遇）。
   CPU 纪律：循环动画元素仅 4（波×2+汽×2），只动 transform/opacity；
   --hl-c 经 @property 注册可平滑插值；页签隐藏时 hl-off 全暂停。
   ============================================================ */
@property --hl-c{syntax:'<color>';inherits:true;initial-value:rgba(107,91,122,.78);}
.s-logo{ position:relative; overflow:hidden; }
.s-logo .hl-liquid{
  position:absolute; left:0; right:0; bottom:0; z-index:1; height:var(--hl-pct,50%);
  background:var(--hl-c); overflow:hidden;
  transition:height 1.8s cubic-bezier(.4,0,.2,1), background-color 1.2s linear;
}
.s-logo .hl-wave{
  position:absolute; left:-50%; width:200%; height:64px; top:-46px;
  border-radius:43%; background:var(--hl-c); opacity:.9;
  animation:hlSpin 5.5s linear infinite;
}
.s-logo .hl-w2{ top:-52px; opacity:.42; animation-duration:7.4s; animation-direction:reverse; }
@keyframes hlSpin{ from{transform:rotate(0deg)} to{transform:rotate(360deg)} }
/* 蒸汽：score≥80 .hl-hot 显示，≥96 .hl-boil 加频 */
.s-logo .hl-steam{ position:absolute; inset:0; z-index:2; pointer-events:none; display:none; }
.s-logo .hl-steam i{
  position:absolute; bottom:38%; width:10px; height:14px; opacity:0;
  border-radius:50% 50% 45% 45%;
  background:radial-gradient(closest-side, rgba(255,255,255,.55), rgba(255,255,255,0));
  animation:hlSteam 2.6s ease-in infinite;
}
.s-logo .hl-steam i:first-child{ left:6px; }
.s-logo .hl-steam i:last-child{ left:17px; animation-delay:1.3s; animation-duration:3.2s; }
.s-logo.hl-hot .hl-steam{ display:block; }
.s-logo.hl-boil .hl-steam i{ animation-duration:1.7s; }
@keyframes hlSteam{
  0%{ transform:translateY(6px) scaleX(.7); opacity:0; }
  35%{ opacity:.55; }
  100%{ transform:translateY(-16px) scaleX(1.25); opacity:0; }
}
/* 结冰：score≤32 .hl-frost 霜层，≤16 .hl-frozen 冰封+波纹静止 */
.s-logo .hl-ice{
  position:absolute; inset:0; z-index:3; pointer-events:none; opacity:0;
  background:linear-gradient(180deg, rgba(214,228,255,.36), rgba(190,210,250,.10) 55%, rgba(214,228,255,.32));
  transition:opacity 1.4s;
}
.s-logo .hl-ice::after{
  content:''; position:absolute; inset:0; opacity:.5;
  background:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><g stroke='%23e8f2ff' stroke-width='.7' fill='none' opacity='.6'><path d='M2 8 L12 14 L9 22'/><path d='M30 6 L20 13 L24 21 L14 27'/><path d='M12 14 L4 18'/><path d='M20 13 L28 16'/><path d='M9 22 L18 25'/><path d='M16 2 L14 9'/></g></svg>") center/100% 100% no-repeat;
}
.s-logo.hl-frost .hl-ice{ opacity:.55; }
.s-logo.hl-frozen .hl-ice{ opacity:1; }
.s-logo.hl-frozen .hl-wave{ animation-play-state:paused; }
/* 页签隐藏暂停全部动画；reduced-motion 关动画留静态水位 */
.s-logo.hl-off *,.s-logo.hl-off *::after{ animation-play-state:paused !important; }
@media (prefers-reduced-motion:reduce){
  .s-logo .hl-wave,.s-logo .hl-steam i{ animation:none !important; }
  .s-logo .hl-liquid{ transition:none; }
}


/* ============================================================
   UI v4.6 · 品牌水位计 v2（2026-08-29 用户二轮指令）
   ① 杯体去主题渐变（「背景黄色不再需要」）→ 中性暗色量杯底；
   ② 「市」字改市道热度数字（hl-num）；
   ③ 水位重标定：120 分 = 85% 满（height = score/max×85%）；
   ④ 90 分绿色横线（hl-line，2026-08-29 用户令 100→90），score>90 溢出 → 绿线发光。
   档位色插值/波浪/蒸汽/结冰沿用 v4.5；数据语义色仍不随调色盘换肤。
   ============================================================ */
.s-logo{
  background:linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,.015)) !important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.10), 0 0 12px rgba(0,0,0,.35) !important;
}
.s-logo .hl-num{
  position:relative; z-index:4; font:700 13px/1 var(--mono);
  color:#fff; letter-spacing:-.5px; text-shadow:0 1px 2px rgba(0,0,0,.55);
}
.s-logo .hl-line{
  position:absolute; left:0; right:0; bottom:var(--hl-line,63.75%); height:0; z-index:3;
  border-top:1px solid rgba(0,255,136,.55); pointer-events:none; transition:box-shadow .6s, border-color .6s;
}
.s-logo.hl-overflow .hl-line{
  border-top-color:#00ff88;
  box-shadow:0 0 6px rgba(0,255,136,.9), 0 0 12px rgba(0,255,136,.5);
}


/* ============================================================
   UI v4.7 · 溢出水头可见化（2026-08-29 用户三轮指令）
   问题：100→120 分在杯内仅 4.5px，107.5 漫线仅 1.7px，且绿光向上
   糊开把水头吃掉 → 肉眼「线上面没了」。修复：
   ① hl-spill 亮白水头层：高度=水位-绿线（calc，负值自动隐藏），
     溢出的水泛白亮，与绿线形成强对比；
   ② 液面高光线（liquid::after）标出真实水面；
   ③ 溢出绿光改向下投射，不再向上遮水头。
   ============================================================ */
.s-logo .hl-spill{
  position:absolute; left:1px; right:1px; z-index:2;
  bottom:var(--hl-line,63.75%); height:calc(var(--hl-pct,50%) - var(--hl-line,63.75%));
  background:linear-gradient(180deg, rgba(255,255,255,.55), rgba(255,255,255,.28));
  border-radius:2px 2px 0 0; pointer-events:none;
  transition:height 1.8s cubic-bezier(.4,0,.2,1), bottom 1.2s;
}
.s-logo .hl-liquid::after{
  content:''; position:absolute; top:0; left:0; right:0; height:1.5px;
  background:linear-gradient(90deg, rgba(255,255,255,.15), rgba(255,255,255,.5) 50%, rgba(255,255,255,.15));
}
.s-logo.hl-overflow .hl-line{
  border-top-color:#00ff88;
  box-shadow:0 2px 5px rgba(0,255,136,.8), 0 4px 10px rgba(0,255,136,.4);
}


/* ============================================================
   UI v4.8 · 品牌水位计微调（2026-08-29 用户四轮指令）
   ① 热度数字下移（translateY 5px + 12px 字号），离开水面线；
     数字 z4 在线 z3 之前，绿/黄线穿杯时被数字局部遮挡不抢字。
   ② 警戒线 绿→黄（#ffb020 站内 warn 琥珀黄），溢出发光同步黄。
   ============================================================ */
.s-logo .hl-num{
  transform:translateY(5px);
  font:700 12px/1 var(--mono);
}
.s-logo .hl-line{ border-top-color:rgba(255,176,32,.65); }
.s-logo.hl-overflow .hl-line{
  border-top-color:#ffb020;
  box-shadow:0 2px 5px rgba(255,176,32,.85), 0 4px 10px rgba(255,176,32,.45);
}


/* ============================================================
   UI v4.9 · 侧栏悬浮卡化（2026-08-29 用户拍板 C 方案）
   告别「贴边黑板面板」：四周留缝 + 14px 圆角 + 中性玻璃底，
   与主区卡片同语言；主题氛围由全站背景透入侧栏；
   顶部光带(::before)/右缘光线(::after)/挂空毛玻璃(blur24)一并退役。
   ============================================================ */
.sidenav{
  margin:10px;
  border:1px solid rgba(255,255,255,.06);
  border-radius:14px;
  background:linear-gradient(180deg, rgba(255,255,255,.03), rgba(255,255,255,.012));
  box-shadow:0 8px 28px rgba(0,0,0,.32);
  backdrop-filter:none; -webkit-backdrop-filter:none;
}
.sidenav::before,.sidenav::after{ content:none; }


/* ============================================================
   UI v5.0 · 品牌水位计扁平化 + 侧栏右缝对齐（2026-08-29 用户令）
   ① 侧栏 margin-right 10→2px：中间视缝 = 2 + .content padding 8 = 10px，
     与左侧缝等宽；
   ② 水位计去立体：杯体落影/内描边渐变→普通 1px 边框+单色底，
     液面高光线删、溢出水头渐变→纯色、数字阴影删；
     档位色纯色水位/黄线/波浪/蒸汽保留（均为平面语言）。
   ============================================================ */
.sidenav{ margin-right:2px; }
.s-logo{
  border:1px solid rgba(255,255,255,.10);
  background:rgba(255,255,255,.03) !important;
  box-shadow:none !important;
}
.s-logo .hl-num{ text-shadow:none; }
.s-logo .hl-liquid::after{ content:none; }
.s-logo .hl-spill{ background:rgba(255,255,255,.4); }


/* ============================================================
   UI v5.1 · 顶栏行情条胶囊化 + 仪表盘扁平化（2026-08-29 用户点名 ①②）
   ① tape 与 LIVE/时钟区从「贴顶直角条」改为玻璃胶囊，
     与侧栏悬浮卡/主区卡片同语言；金色 GLOBAL HEAT 语义高亮保留；
   ② 总览仪表盘去拟物：深色渐变井→平色极淡底、指针投影滤镜删、
     双层立体指针→单层平面。
   ============================================================ */
.topbar{
  height:auto; flex:0 0 auto;
  padding:8px 10px 0 10px; gap:8px;
}
.topbar .tape{
  height:26px; flex:1 1 auto;
  border:1px solid rgba(255,255,255,.06);
  border-radius:999px;
  background:rgba(255,255,255,.025);
}
.topbar .tape-track,
.topbar .tp-itm,
.topbar .tp-sec{ height:26px; }
.topbar .cbar-right{
  height:26px; align-self:center;
  gap:12px; padding:0 14px;
  border:1px solid rgba(255,255,255,.06);
  border-left:1px solid rgba(255,255,255,.06);
  border-radius:999px;
  background:rgba(255,255,255,.025);
}




/* ============================================================
   UI v5.3 · 持仓控制卡三段式（2026-09-01 用户令）：对齐回测调优/影子账户
   ① 「刷新分析」挪到首行、紧跟「买入日期」之后（DOM 就位）；
   ② 中段 = 常驻输出框（状态文本 + 贴底金色进度线，复用 .bt-outbox
     同款样式与 sc-running 静止隐藏协议），刷新分析时跑往复扫描动画；
   ③ 三段 flex order：输入行(1) → 输出框(2) → 资金/组合决策行(3)；
     标题条（含「输入持仓 →…」meta 行）已按用户令整行删除。
   ============================================================ */
.hd-ctrl{ display:flex; flex-direction:column; }
.hd-ctrl .sc-ctrl-bd{ order:1; }
.hd-ctrl .hd-outbox{ order:2; }
/* 2026-09-11 老板直派重排：市道行接棒原总资金行位置（控制卡 order:3）；总资金行下移组合决策卡 */
.hd-ctrl .hd-regime-row{ order:3; border-top:1px dashed rgba(255,255,255,.05); padding:8px 14px; }
.hd-rghd-t{ font-size:13px; font-weight:600; color:var(--txt); letter-spacing:.04em; margin-right:6px; }
.hd-ctrl .hd-outbox .sc-bar.sc-indet{
  width:32%;
  animation:hdSweep 1.1s linear infinite;
}
@keyframes hdSweep{
  from{ transform:translateX(-110%); }
  to{ transform:translateX(340%); }
}
/* 持有天数进首行头部：现价右侧、比现价低半档（hd-days 原为灰阶 11px） */
.hd-card-hd .hd-days{ font-size:11px; color:var(--txt2); }
/* 首行七件套一行放下：v4.1 的 max-width:70% 行宽封顶会把 名称/添加持仓 挤到第二行，
   仅对首行解除封顶；flex-wrap 保留，真窄屏放不下仍兜底换行 */
.hd-ctrl .sc-ctrl-bd.hd-inrow{ max-width:none; }
/* 「刷新分析」贴首行最右（margin-left:auto 吃掉行尾全部富余） */
.hd-ctrl .hd-inrow .hd-an-btn{ margin-left:auto; }

/* ===== 全站上新落地01 · 回测页市道择时/回显/基准（2026-09-03 前端分身） ===== */
/* 20260912y 老板直派：锚行加框——与上方 交易笔数/胜率 KPI 胶囊（.bt-stat 白.03底+var(--line)框+圆角）同族材质 */
.bt-r3base{font-size:10.5px;color:var(--txt3);padding:6px 10px;line-height:1.8;margin-top:6px;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:var(--r-ctl);font-variant-numeric:tabular-nums}
.bt-r3base b{color:#e0a84e;font-family:var(--mono)}
.bt-r3base-src{margin-left:8px;cursor:help;border-bottom:1px dotted rgba(224,168,78,.5)}
.bt-effparams{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:10.5px;padding:5px 8px;margin-top:6px;border:1px dashed rgba(224,168,78,.4);border-radius:6px;background:rgba(224,168,78,.05)}
.bt-effparams .bt-eff-k{color:#e0a84e;font-weight:700;letter-spacing:.05em}
.bt-effparams .bt-eff-v{font-family:var(--mono);color:var(--txt2);background:rgba(255,255,255,.05);border-radius:4px;padding:0 6px;line-height:1.7}
.bt-effparams .bt-eff-src{color:var(--txt4);font-size:9.5px}
.bt-timing-sum{font-size:10px;color:#e0a84e;font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:340px}
.bt-timing-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:5px}
button[data-timing-toggle]{font-size:10.5px}
/* 批量子结果红低 overlay 七维表（2026-09-05 透传修复卡②）；2026-09-11 老板令：自适应宽+全左对齐对应 */
.bt-ovtab{border-collapse:collapse;font-size:10.5px;min-width:100%}
.bt-ovtab th{color:var(--txt3);font-weight:600;text-align:left;padding:2px 7px;border-bottom:1px solid var(--line2);white-space:nowrap}
.bt-ovtab th:first-child,.bt-ovtab td:first-child{text-align:left}
.bt-ovtab td{padding:2px 7px;border-bottom:1px solid rgba(34,48,63,.45);white-space:nowrap;font-family:var(--mono)}
.bt-ovtab tr:hover td{background:rgba(255,255,255,.04)}

/* ===== 历史来源标记与筛选（2026-09-03 混源治理）：界面=蓝 · 研究=金 ===== */
.bt-srcchip{ display:inline-flex; align-items:center; padding:2px 10px; font-size:10.5px;
  border:1px solid var(--line); border-radius:999px; color:var(--txt3); cursor:pointer; user-select:none; }
.bt-srcchip:hover{ color:var(--txt); }
.bt-srcchip.on{ border-color:var(--gold); color:var(--gold); background:rgba(224,168,78,.08); }
.bt-src-ui, .bt-src-research{ display:inline-block; font-size:9.5px; font-weight:700; border-radius:999px;
  padding:0 7px; margin-right:4px; vertical-align:1px; white-space:nowrap; }
.bt-src-ui{ color:#4c9bff; background:rgba(76,155,255,.10); }
.bt-src-research{ color:#e0a84e; background:rgba(224,168,78,.12); }

/* ============================================================
   窄视口适配（W2 复审项 2026-09-03）· 纯样式层，零逻辑（P0）
   目标：375px / 768px 两档下文字不得截断（右缘留白或横向滚动均可）。
   机制：
   1) ≤768px 侧栏收图标窄轨（此前 216px 侧栏占满窄视口、主区被
      overflow-x:hidden 剪成一条缝且不可达 = 全站截断根因）；
   2) 固定列网格逐级单列化，KPI 4列→2列，数据卡 3列→2列→1列；
   3) 表格块化+容器内横向滚动（.b-tbl/.term-table/.hd-plan-tbl）；
   4) 回测配置区小节标题独立成行、字段带换行；分项固定宽标签放宽。
   ============================================================ */
@media (max-width: 900px){   /* 20260914i 断点 768→900：与 JS fit() 窄窗协同（<900 zoom=1）——浏览器 Ctrl+放大压进断点时不再发生「zoom 被砍=字不跟放」 */
  /* -- 舞台铺满视口（总根因修复）：JS fit() 将布局宽锁 ≥1440、zoom=1.42
     （视觉 ≥2045px），窄窗内容被 html overflow-x:hidden 裁掉且不可达。
     此处以样式层 !important 反抑制 JS 内联尺寸（JS 一字不动，P0）：
     窄档取消 zoom 放大、舞台宽度=视口，交由下方响应式布局接管。 -- */
  #stage{ width:100% !important; }
  #term{ width:100% !important; zoom:1 !important; }
  /* -- 侧栏 → 图标窄轨 -- */
  .sidenav{ width:54px; flex:0 0 54px; padding:0 5px 8px; }
  .s-brand{ padding:8px 2px 10px; }
  .s-brand > div{ display:none; }
  .nav-t, .nav-k{ display:none; }
  .nav-sec{ visibility:hidden; padding:6px 0 0; }
  .nav-itm{ justify-content:center; gap:0; padding:0 4px; }
  .nav-group .tri{ display:none; }
  /* 分组头文字（如「研判 · INSIGHT」）窄轨放不下：字号归零隐藏，仅留分组行距 */
  .nav-group{ font-size:0; letter-spacing:0; justify-content:center; padding:8px 0 4px; }
  .nav-group-body .nav-itm{ margin-left:0; }
  .nav-ftr{ display:none; }
  .nav-sep{ margin:6px 10px; }
  /* -- 主区网格降级 -- */
  .bt-overview{ grid-template-columns:1fr; grid-template-areas:'chart' 'two' 'hist'; }
  .b-grid{ grid-template-columns:1fr; }
  .b-grid2{ grid-template-columns:1fr; }
  .b-grid3{ grid-template-columns:1fr; }
  .hd-plan-cols{ grid-template-columns:1fr; }
  .hz-kpis{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .b-kpis{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .hd-cards{ grid-template-columns:repeat(2,1fr); }
  /* -- 20260914i 窄屏持仓卡特例（老板报「买入行字不跟随放大+下部被遮挡」·断点协同修复）：
     买入/盈利行（hd-card-hd2）10px 单行 nowrap → 12.5px 可换行（zoom=1 后浏览器放大直接生效，
     行不再溢出裁切）；卡体解除 overflow 裁切与定高压制，内容完整可见 -- */
  .hd-card{ height:auto; max-height:none; }
  .hd-card-hd2{ flex-wrap:wrap; font-size:12.5px; padding:5px 10px 6px; }
  .hd-card-hd2 .hd-pnl{ font-size:13.5px; }
  .hd-card-hd{ flex-wrap:wrap; height:auto; min-height:30px; }
  /* -- 表格：块化 + 自身横向滚动（不裁剪文字，滚动可达） -- */
  .b-tbl, .term-table, .hd-plan-tbl{ display:block; overflow-x:auto; -webkit-overflow-scrolling:touch; }
  /* -- 回测配置区：小节标题独立成行，字段带自由换行（标签条本就横滚） -- */
  .bt-sec{ flex-wrap:wrap; }
  .bt-sec-hd{ flex:0 0 100%; padding-bottom:2px; }
  /* -- 分项固定宽标签放宽，消省略号截断（最长「全球与流动性」≈66px） -- */
  .ai-n{ flex:0 0 78px; width:78px; }
  .frow .ai-n{ flex:0 0 78px; width:78px; }
  .hz-comp .nm{ width:80px; font-size:12px; }
  /* ashare.html 页内 <style> 同名规则后置覆盖本表，用更高特异性压回（消「全球与流动性」2px 溢出） */
  .hz-col .hz-comp .nm{ width:80px; font-size:12px; }
  /* -- 八大分项雷达：窄幅换行堆叠，SVG 按 viewBox 等比缩放（文字随之缩不裁剪） -- */
  .radar-bd{ flex-wrap:wrap; }
  .radar-svg{ width:min(100%,300px); height:auto; max-height:none; }
  /* -- 卡片头：元注（.hd-meta）窄幅独占整行，消 27px 定高挤压截断 -- */
  .card-hd{ flex-wrap:wrap; height:auto; min-height:30px; padding:6px 12px; }
  .card-hd .hd-meta{ flex:1 1 100%; white-space:normal; overflow:visible; text-overflow:clip; }
  h3{ flex-wrap:wrap; }
  h3 .hd-meta, h3 .e{ white-space:normal; overflow:visible; text-overflow:clip; }
  /* -- KPI 栏：ashare/wisdom 等页内 <style> 同名规则后置，需 !important 反压 -- */
  .hz-kpis, .b-kpis{ grid-template-columns:repeat(2,minmax(0,1fr)) !important; }
  .ws-kpis{ grid-template-columns:repeat(2,minmax(0,1fr)) !important; grid-column:auto !important; }
  /* -- 信息行（.b-fact）：标签整行、值可断行，消 flex 挤压省略号 -- */
  .b-fact{ flex-wrap:wrap; }
  .b-fact .nm{ flex:1 1 100%; white-space:normal; overflow:visible; text-overflow:clip; }
  .b-fact .vl{ max-width:100%; overflow-wrap:anywhere; }
  /* -- 影子层总览行：190px 固定模块名改自适，整行可换行 -- */
  .sh-layer .sh-lrow{ flex-wrap:wrap; }
  .sh-layer .sh-lrow .lnm{ min-width:0; flex:0 0 auto; }
  /* -- 卡头元注（hd-meta）全局允许换行：总览页内联 flex 行里被挤窄时不丢字 -- */
  .hd-meta{ white-space:normal; overflow-wrap:anywhere; }
  /* -- ashare 四联卡 / wisdom 双列卡：页内 <style> 定义，窄幅降列（!important 反压后置同名规则） -- */
  .hz-grid{ grid-template-columns:repeat(2,minmax(0,1fr)) !important; }
  .ws-wrap{ grid-template-columns:1fr !important; }
  .ws-summary{ grid-column:auto !important; }
  /* -- 因子/市况固定 25%/33% 弹性卡：窄幅降两列，≤480 单列（消一字竖排挤压） -- */
  .fx-card{ flex:0 0 calc(50% - 4px); }
  .mk-card{ flex:0 0 calc(50% - 4px); }
  /* -- ashare 因子行 / settings 数据源行：标签整行自适（0,3,0 压过页内 0,2,0） -- */
  .hz-col .hz-fact{ flex-wrap:wrap; }
  .hz-col .hz-fact .nm{ flex:1 1 100%; white-space:normal; overflow:visible; text-overflow:clip; }
  .b-col .st-src{ flex-wrap:wrap; }
  .b-col .st-src .k{ flex:1 1 100%; white-space:normal; overflow:visible; text-overflow:clip; }
  /* -- 回测 JSON 浮层：窄幅改卡片内全宽（640px 定宽会向左溢出视口） -- */
  .bt-runrow .bt-jsonpaste{ width:auto; left:8px; right:8px; }
}
@media (max-width: 480px){
  .hd-cards{ grid-template-columns:1fr; }
  .hz-kpis, .b-kpis, .ws-kpis{ grid-template-columns:1fr !important; }
  .hz-grid{ grid-template-columns:1fr !important; }
  .fx-card, .mk-card{ flex:0 0 100%; }
}


/* ============ 持仓页仓位管理中枢（2026-09-07 持仓中枢卡）：四统计归位总资金行 + 市道卡双进度条 ============ */
.hd-ov-inline{ display:none; align-items:center; gap:12px; flex-wrap:wrap; min-width:0; }
/* 2026-09-11 老板直派重排：总资金行下移组合决策卡——四统计随行，满宽不断 min-content 上传 */
.hd-plan .hd-cash-row{ max-width:none; min-width:0; padding:8px 14px 4px; border-top:0; }
.hd-plan .hd-plan-btn{ margin-left:auto; flex:none; }   /* 20260913o 按钮挂总资金行右端（持久元素性质不变） */
/* ── 2026-09-11 老板直派「组合决策仿照回测结果·改成3子卡片布局」：左大卡=仓位指导+资金统计，
   右侧堆叠=持仓动作建议/今日选股买入候选——子卡玻璃面+卡头标题，表格紧凑化 ── */
.hd-plan-grid{ display:flex; gap:10px; padding:2px 12px 12px; flex:1; min-height:0; align-items:stretch; }
.hd-sub{ background:rgba(255,255,255,.02); border:1px solid var(--line); border-radius:10px; min-width:0; display:flex; flex-direction:column; }
.hd-sub-main{ flex:0 0 66.667%; }   /* 2/3：与 hd-cards 前两列对齐（右缘落在列缝 10px 容差带内）；20260915 老板令撤 space-between——仓位指导条紧跟卡头，不置底 */
.hd-plan-side{ flex:1 1 auto; display:flex; flex-direction:column; gap:10px; min-width:0; }
/* 组合决策卡头 展开/收起（同 已清仓历史 交互） */
#hdPlanCard.folded .hd-cash-row, #hdPlanCard.folded .hd-plan-grid{ display:none; }
#hdPlanCard .card-hd .btn{ cursor:pointer; }   /* 卡头/条块/统计行 三段均布——右列高时左卡中空不压一侧 */
.hd-plan-side .hd-sub{ flex:1 1 0; }
.hd-sub-main .hd-sub-hd{ display:flex; align-items:center; gap:8px; }   /* 20260915 老板令：判定胶囊右对齐同一行 */
.hd-sub-hd{ padding:8px 12px 4px; font-size:12.5px; font-weight:700; color:var(--txt); letter-spacing:.03em; flex:none; }
.hd-sub-hd .hd-en{ font-size:9px; color:var(--txt4); letter-spacing:.16em; margin-left:6px; }
.hd-sub-bd{ padding:0 10px 8px; min-height:0; overflow:auto; }
.hd-sub-main .hd-plan-stats{ margin-top:auto; border-top:1px dashed rgba(255,255,255,.07); padding:7px 12px; display:flex; flex-wrap:wrap; gap:4px 14px; align-items:center; }
.hd-sub .term-table{ font-size:11px; }
.hd-sub .term-table th, .hd-sub .term-table td{ padding:3px 6px; }
.hd-ov-inline .hd-ov-stat{ font-size:11px; color:var(--txt2); padding-right:2px; }
.hd-ov-inline .hd-ov-stat b{ font-family:var(--mono); font-weight:700; color:var(--txt); }
.hd-ov-inline .hd-ov-stat .up{ color:var(--up); } .hd-ov-inline .hd-ov-stat .down{ color:var(--down); }
/* 2026-09-10 老板令：市道卡重排——标题离顶呼吸、指导段左右留白、图例三格各归各段正下方 */
.hd-pos-guide{ padding:2px 12px 6px; margin-top:0; }   /* 20260913o 入 3子卡：标题由 hd-sub-hd 承担，内块贴卡头 */
#hdPlanCard .card-hd{ height:auto; min-height:27px; padding:9px 14px 0; flex-basis:auto; }   /* 20260914h flex-basis auto：卡头高度随内容（30px 展开钮）自然撑开 */
#hdPlanCard .card-hd{ padding-bottom:9px; align-items:center; }   /* 20260914h 收起态下缘呼吸：padding-bottom 0→9px（按钮下缘原距卡缘 -2px），展开钮居中 */
.hd-pos-guide-hd{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:6px; }
.hd-pos-verdict{ display:inline-block; font-size:10.5px; font-weight:700; padding:0 8px; border:1px solid; border-radius:999px; margin-left:auto; }
/* 三段式仓位条·二批反馈重构（2026-09-07 21:0x）：轨道=目标分区背景化（股票目标区淡蓝 0→60%、
   敞口区中性 60→80%、红低目标区淡红 80→100%，分区边界线=原刻度升级）；实际填充叠于分区上
   （蓝实条自左=股票、红实条自右=红低）；分段标签内嵌分区；行1 徽标右对齐；身份色字面 RGB 不随 --ac。 */
.hd-tsb{ display:flex; align-items:center; gap:8px; margin:7px 0 3px; }
.hd-tsb-half{ flex:none; font-size:10.5px; color:var(--txt3); }
.hd-tsb-rb{ text-align:right; }
.hd-tsb-track{ position:relative; flex:1; min-width:120px; height:20px; border-radius:7px; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.09); overflow:hidden; }
.hd-tsb-zone{ position:absolute; top:0; bottom:0; background:rgba(62,198,217,.13); }
.hd-tsb-zone-open{ background:rgba(255,255,255,.03); }
.hd-tsb-zone-rl{ background:rgba(255,45,85,.12); }
.hd-tsb-bd{ position:absolute; top:0; bottom:0; width:2px; z-index:2; }
.hd-tsb-bd-st{ background:rgba(62,198,217,.85); }
.hd-tsb-bd-rl{ background:rgba(255,143,163,.85); }
.hd-tsb-fill-stock{ position:absolute; left:0; top:0; bottom:0; background:linear-gradient(180deg,#54d2e6,#2fa9c0); box-shadow:0 0 8px rgba(62,198,217,.35); }
.hd-tsb-fill-low{ position:absolute; top:0; bottom:0; background:linear-gradient(180deg,#ff4d68,#e62848); box-shadow:0 0 8px rgba(255,45,85,.3); }
.hd-tsb-lb{ position:absolute; top:50%; transform:translate(-50%,-50%); font-size:9.5px; color:var(--txt3); white-space:nowrap; pointer-events:none; }   /* 2026-09-11 重绘退役：条内文字标签撤（JS 不再输出），段名归下方图例 */
.hd-tsb-note{ display:flex; margin-top:6px; align-items:flex-start; }
.hd-tsb-cell{ flex:none; min-width:0; text-align:left; white-space:nowrap; overflow:visible; }   /* 宽度=对应分区宽度（内联）。20260916n 巡查轮P2修复：格宽=目标分区宽（股票格最窄可至 20%≈220px）而图例文字全要素加粗后超格宽，原 nowrap 使溢出字直接压邻格（1600 级视口实证「现金」被盖）——nowrap 撤、全视口许可格内折行（原 ≤900px 媒体查询防护升级为全局），跨格叠字改格内换行，分区对齐设计不变 */
.hd-tsb-k{ font-size:10.5px; color:var(--txt3); }
.hd-tsb-k b{ font-family:var(--mono); color:var(--txt); }
.hd-tsb-dot{ display:inline-block; width:8px; height:8px; border-radius:2px; margin-right:5px; vertical-align:middle; }
.hd-tsb-mid{ opacity:.75; }
.hd-guide-src{ cursor:help; border-bottom:1px dotted var(--txt4); }
.hd-pos-guide-hd .hd-pos-verdict{ margin-left:auto; }   /* 行1 徽标右对齐收齐 */
@media (max-width: 900px){
  .hd-ov-inline{ flex-basis:100%; }
  .hd-tsb-half{ display:none; }
  .hd-tsb-lb{ display:none; }   /* 窄幅收内嵌标签防叠，图例行仍完整 */
  .hd-tsb-cell{ white-space:nowrap; overflow:visible; }   /* 20260918f 老板令严格两行：折行禁用（nowrap）·内容可侵入邻格 */
}@media (max-width: 900px){
  .hd-ov-inline{ flex-basis:100%; }
  .hd-tsb-half{ display:none; }   /* 窄幅收端标签，条+侧注仍完整 */
}


/* ============ 影子页两区块手风琴（2026-09-07 待办：影子层总览/账户锁定配置，默认收起+uts.*记忆） ============ */
/* 20260914k 折叠控件全站统一为「组合决策」卡头式胶囊文字钮：▸/▾ 三角退役 */
.sh-fold-hd{ cursor:pointer; user-select:none; display:flex; align-items:center; gap:8px; }
.sh-fold-hd::after{
  content:'展开'; margin-left:auto; flex:none;
  font-family:var(--mono); font-size:10px; line-height:1; color:var(--txt2);
  border:1px solid var(--line2); background:rgba(255,255,255,.04); border-radius:999px;
  padding:3px 9px; transition:all var(--mo-d1) var(--eo-out);
}
.sh-fold-hd.open::after{ content:'收起'; }
.sh-fold-hd:hover::after{ color:var(--txt); border-color:var(--line3); background:rgba(255,255,255,.07); }
.sh-fold-hd:hover{ color:var(--txt); }
.sh-fold-sum{ font-size:10px; color:var(--txt4); font-family:var(--mono); }

/* ============================================================
   UI v4.11 · 滚动表格表头固定（2026-09-10 老板令：策略/代码表头行随滚动丢失，
   选股历史/回测历史/交易明细等多表同病，全部修复——本条推翻 2026-08-29
   「表头无底色、不 sticky」旧裁）。
   sticky 只在自身 overflow 容器内生效（.sc-table-body/.sc-hist-body[含回测历史
   复用]/.bt-trades-body/.tablewrap[backtest 15 表]/.hd-hist-body/.b-scroll）；
   表头不透明底防透字；底边线用 box-shadow（border-collapse:collapse 下
   sticky th 的 border 会被滚没）。 */
.sc-table-body thead th,
.sc-hist-body thead th,
.bt-trades-body thead th,
.tablewrap thead th,
.hd-hist-body thead th,
.b-scroll thead th{
  position:sticky; top:0; z-index:2;
  box-shadow:inset 0 -1px 0 var(--line2);
}

/* ── 2026-09-10 老板令「表头第二行弄透明了，修正」根因：Chromium 对 border-collapse:collapse
   的表格单元格**忽略 backdrop-filter**——上一轮「表头零涂装+blur」方案里 blur 从未生效，
   静止时与卡片同色（老板认可），一滚动行文字直接透过表头（回测历史实证）。
   修正=六个滚动容器内的表格切 border-collapse:separate + spacing 0（单元格独立绘制，
   backdrop-filter 恢复生效；行分隔线本就是逐格 border-bottom，观感不变），
   毛玻璃真正开始工作：静止=卡片本体，滚动=糊掉底下行。活体实验已验证。 */
.sc-table-body table,
.sc-hist-body table,
.bt-trades-body table,
.tablewrap table,
.hd-hist-body table,
.b-scroll table{
  border-collapse:separate; border-spacing:0;
}

/* ============================================================
   UI v4.12 · 页面高度自适应占满（2026-09-10 老板令：125%→100% 后页面不再铺满——
   页面内容高度若短于 #view 则下方留空；改「每页类名 + 分段 flex」：
   回测=三段式（头=运行回测 / 肚=回测结果 flex:1 最大 / 尾=回测历史定高），
   三段各自滚动互不干扰（#view 不再整页滚）；选股/持仓/影子等同法自动占满。
   注意：勿给 #view > * 再加 flex-shrink:0（原 216 行规则即可，作用域规则需可收缩）。 */
/* 2026-09-10 老板令「参数中心/市道热度无法下滑」：一刀切 hidden 使未配分段规则的页内容超高即被裁。
   改默认=每页可纵向滚；自适应四页显式钉住 hidden（分段内滚不受影响）。 */
#term[class*="page-"] #view{ overflow-y:auto; overflow-x:hidden; }
#term.page-shadow #view{ overflow:hidden; }
/* 20260916 老板令：回测/持仓 两页撤 overflow:hidden——回测中段按内容定高后整页自然滚动；
   持仓管理卡片行推下去后页面必须可滚（此前 hidden=下方内容不可达无滚动条） */

/* 回测 · 三段式（注意：8 个 bt-pane 都是 .bt-tabs 的子元素——肚段容器=bt-tabs）
   2026-09-10 12:5x 老板令二轮：肚段（回测结果）按内容定高（以分段表现+策略表现卡为准），
   尾段（回测历史）紧贴其下并弹性吃掉剩余高度铺满页面——肚/尾互不挤占：
   肚=flex:0 1 auto（超高时自身内滚），尾=flex:1 1 auto（吃掉全部余高，表格内滚）。 */
/* 20260916 老板令终轮二[20:3x 「我要的是默认显示4条，不是往下拉才显示4条，有什么在阻止
   回测历史默认显示4条的机制都给我删掉！」]——视口预算制：
   ①阻止机制铲除：#btChart 图表区 min-height:540px（结果窗最低~780css=正把历史卡推出首屏的
   真凶）→300px；
   ②bt-body 回归 flex:1 撑满视口不产生页滚，bt-tabs/bt-pane 收缩让位（内容超高窗内滚兜底）；
   ③历史卡 flex:0 0 auto+height:217css 恰好4行——任何布置下默认钉在首屏底部完整可见。
   与 2026-09-10 三段式同构（肚让尾、尾恒4行），区别=图表地板 540→300。 */
#term.page-backtest .bt-ctrl{ flex:0 0 auto; }
#term.page-backtest .bt-body{ flex:1 1 auto; min-height:0; flex-direction:column; overflow:hidden; }
#term.page-backtest .bt-tabs{ flex:1 1 auto; min-height:0; }
#term.page-backtest .bt-pane{ flex:1 1 auto; min-height:0; overflow-y:auto; }
#term.page-backtest .card.bt-hist{ flex:0 0 auto; height:217px; display:flex; flex-direction:column; overflow:hidden; }
#term.page-backtest .card.bt-hist .sc-hist-body{ flex:1 1 auto; min-height:0; max-height:none; overflow:auto; }

/* 选股 · 头(控制)/颈(K线+个股分析 常驻行·2026-09-11 老板令)/肚(扫描结果 全宽 flex:1)/尾(历史 压矮定高)
   常驻K线行加入后，矮视口装不下四段——扫描结果保 240px 下限，超出部分由 #view 页内滚动兜底
   （大屏四段全容时依旧零滚动，自适应占满不破坏）。
   页级节奏单一来源：gap 统一 10px（.sc-krow/#scStopRules 自带 margin 已撤——同持仓页根因）。 */
#term.page-screening #view{ gap:10px; overflow-y:auto; }
#term.page-screening .sc-ctrl{ flex:0 0 auto; }
/* 2026-09-10 老板令：余高全部给 K线+个股分析行（自动填充满），K线主图随行弹性加高 */
#term.page-screening .sc-krow{ flex:1 1 auto; min-height:430px; }
#term.page-screening .sc-main{ flex:0 0 auto; min-height:0; }
#term.page-screening .sc-table-card{ flex:1 1 auto; min-width:0; }
/* 固定显示 6 行（211=表头 27.7+6×30.4 实测行高含小数累积；第 7 行起滚动） */
#term.page-screening .sc-table-body{ flex:0 0 auto; height:211px; overflow-y:auto; }
#term.page-screening .card.sc-hist{ flex:0 0 auto; max-height:none; display:flex; flex-direction:column; min-height:0; }
/* 固定显示 4 行（143=表头 23.7+4×29.5 实测行高） */
#term.page-screening .card.sc-hist .sc-hist-body{ flex:0 0 auto; height:143px; max-height:none; overflow-y:auto; }

/* 持仓 · 头(控制)/肚(市道卡+卡片流 flex:1)/尾(操作历史)
   2026-09-10 老板令：卡片按内容自然高度，超过 3 张自动换行/下滚——grid 禁止拉伸卡片充高
   （align-content/start + align-items/start），多余高度留在容器内由滚动消化 */
#term.page-holdings .hd-ctrl, #term.page-holdings .card.hd-plan{ flex:0 0 auto; }
/* ── 2026-09-10 老板令「大卡片上下间距全都不一致·一查到底」根因定案：
   #view 自带 gap:8px，而部分区块又自带 margin:10px 0（flex 不折叠 margin）→
   相邻间距 8/18/28px 混杂；且 .hd-cards flex:1 的余高空腔压在卡片行与已清仓历史之间随视口浮动。
   终解=页级节奏单一来源：gap 统一 10px，区块自带 margin 一律撤（html inline/JS 注入卡已同步清除）；
   卡片行改内容定高（flex:0 1 auto，挤时内滚不变），余高移到页尾止损纪律下方，不再变成假间距。 */
#term.page-holdings #view{ gap:10px; }
#term.page-holdings #hdRedLowStrip > .card{ margin:0; }
/* 20260915 老板令「红低仓影子/已清仓历史/止损纪律 三行推下去而不是被截断」：
   卡片行撤 flex-shrink+内滚——放大态卡片（K线+台账）很高，内滚壳会把内容裁在里面、
   下方三行浮在截断处。改吃足内容高（flex:0 0 auto 无内滚），整页自然滚动推下去 */
#term.page-holdings .hd-cards-wrap{ flex:0 0 auto; }
/* -- 20260914m 放大态两根因修复 [老板报「下半部被完全覆盖/卡片只显示一半」·探针定案]：
   ①行高钉死：.hd-cards 作为 flex 项被压缩后，grid auto 行跟着解析成压缩高（316px≠内容高 645px），
   卡被钉矮 + .hd-card overflow:hidden 裁掉 S1/关注/动作行，且 scrollHeight==clientHeight 内滚死。
   修=flex 压缩+内滚上移到 .hd-cards-wrap 外壳，网格自身高度不定 → auto 行按最终列宽真实排版
   取高（grid-auto-rows:max-content 会按「无约束单行宽」估行，换行文本必低估几像素裁底，弃），
   同行等高保持（默认 stretch），超出由外壳内滚消化（原设计意图复活）。
   ②可见切片：布局宽钳 1440 而 zoom 后视口更窄时，右缘卡片落在不可达区=「只显示一半」。
   width 走 fit() 发布的 --vis-main（可见主列宽），列定义改 auto-fit minmax(360px,1fr)——
   列数随可见宽自适应：一行放不下推下一行，卡卡完整可见（1080p 仍 3 列，更窄自动降 2 列/1 列）；
   20260914o 老板令「能放下4个怎么只放了3个·没让改卡片宽度·只让自适应换行换位置」：
   auto-fill 会保留空轨道（3 只持仓算出 4 列=第 4 列空置+卡片被压窄）——改 auto-fit，
   空轨道塌缩、现有卡片摊满行宽（3 只=3 等分恢复原宽度；加到第 4 只自动变 4 列）。 -- */
#term.page-holdings .hd-cards{ align-content:start; gap:8px; width:var(--vis-main,100%);
  grid-template-columns:repeat(auto-fit,minmax(360px,1fr)); }
/* 2026-09-10 老板令：同一行卡片等高（以最高卡为准）——保留 grid 默认 align-items:stretch（去掉上轮 start） */
/* 组合决策按钮持久右对齐（点生成提示行右侧；hdPlanBody 内容替换不丢按钮） */
.hd-plan-note-row{ display:flex; align-items:flex-start; gap:10px; padding:0 12px 10px; }
.hd-plan-note-row #hdPlanBody{ flex:1; min-width:0; }
.hd-plan-note-row .hd-plan-btn{ flex:none; }
#term.page-holdings .card.hd-hist{ flex:0 0 auto; max-height:30%; display:flex; flex-direction:column; min-height:0; }
#term.page-holdings .card.hd-hist .hd-hist-body{ flex:1 1 auto; min-height:0; max-height:none; }

/* 影子 · 根撑满（内容长时 b-wrap 内部滚动，不裁切） */
#term.page-shadow .b-wrap{ flex:1 1 auto; min-height:0; overflow-y:auto; }
/* 2026-09-10 老板令「很多卡片被奇怪折叠和遮挡」根因：.b-wrap 是定高 flex 纵列，子区块默认
   flex-shrink:1——内容超一屏时各卡被等比压瘪（新建面板 730px→45px、.b-col overflow:hidden
   剪掉其余=「折叠遮挡」假象）。子区块一律禁缩，超高由 wrap 滚动消化。 */
#term.page-shadow .b-wrap > *{ flex-shrink:0; }
/* 市道行垂直居中（2026-09-10 老板令：末尾文字与胶囊不水平对齐、当前市道字样偏上=align-items 缺省 stretch） */
.sh-regime{ align-items:center; }
/* 折叠头去重箭头：h3 内已有右对齐 ::after 箭头，行内 .sh-fold-arrow span 是第二支（重复显两支） */
.sh-fold-hd .sh-fold-arrow{ display:none; }

/* ── 2026-09-10 老板令：免打断/智能调度 升级为策略行同款圆角 chip（绿描边 pill+琥珀 ☑）── */
.bt-ctrl .sc-chk{
  display:inline-flex; align-items:center; gap:7px; white-space:nowrap; user-select:none;
  padding:3px 14px; border-radius:999px; cursor:pointer;
  background:rgba(0,255,136,.05);
  border:1px solid rgba(0,255,136,.30);
  font-size:11px; color:var(--txt2);
}
.bt-ctrl .sc-chk input{ width:13px; height:13px; margin:0; accent-color:#ffb020; }
.bt-ctrl .sc-chk:hover{ border-color:rgba(0,255,136,.55); background:rgba(0,255,136,.10); color:var(--txt); }
.bt-ctrl .sc-chk:has(input:checked){ border-color:rgba(0,255,136,.45); }

/* ── 2026-09-10 老板令：下拉自适应位置/大小 + 美化（bt-stdrop 全站共享组件）──
   限高 320px 内部滚动（不再整条爆高）；圆角+悬浮阴影+菜单项悬停高亮；
   贴底自动上翻（.up，由 JS fitMenu 依视口余量判定，zoom 坐标已换算）。 */
.bt-stdrop-menu{
  top:calc(100% + 4px); left:0; right:auto;
  min-width:calc(100% + 60px); max-width:460px;
  max-height:min(320px, 60vh); overflow-y:auto;
  border-radius:10px; padding:5px; gap:2px;
  background:rgba(13,17,24,.97);
  box-shadow:0 14px 36px rgba(0,0,0,.55), 0 0 0 1px rgba(255,255,255,.05);
}
.bt-stdrop.up .bt-stdrop-menu{ top:auto; bottom:calc(100% + 4px); }
.bt-stdrop-menu .bt-strat-lb{
  display:block; padding:6px 10px; border-radius:7px; cursor:pointer;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  color:var(--txt2); font-size:11.5px;
}
.bt-stdrop-menu .bt-strat-lb:hover{ background:rgba(var(--ac-rgb),.12); color:var(--txt); }
.bt-stdrop-menu .bt-model-opt{ white-space:nowrap; }
.bt-stdrop-menu .bt-model-opt.sel{ color:var(--gold); font-weight:600; }

/* ── UI v4.13 · 控件高度统一 26px（2026-09-10 老板令：勾选框/输入框/下拉等所有控件同高，
   勿再单独设高——统一走 --ctl-h 令牌）── */
:root{ --ctl-h:26px; }
.sc-ctl, select.sc-ctl, input.sc-ctl{ height:var(--ctl-h); }
.bt-row .sc-chk, .bt-sec-body .sc-chk, .bt-ctrl .sc-chk, .pm-item .sc-chk{
  height:var(--ctl-h); box-sizing:border-box;
}
.bt-stdrop-sel{ height:var(--ctl-h); box-sizing:border-box; }
.hd-in{ height:var(--ctl-h); box-sizing:border-box; }

/* ── 参数组内输入 20px + 组 padding 2px → 组外框恰 26，与 chip/输入/下拉全站同高 ── */
.bt-f{ padding:2px 9px; }
.bt-f .sc-ctl{ height:20px; padding:0 2px; }
.eval-row select{ height:var(--ctl-h); }

/* ── 2026-09-10 老板令（返工）：sticky 表头死灰底 #0e1219 与卡片玻璃色割裂——
   改毛玻璃表头：半透明暗底+backdrop blur，透出所在位置的极光色调、同时糊掉底下滑过的行。
   （自带坐标随卡片位置自适应，不再用固定死色） */
/* ── 2026-09-11 老板令「没有任何作用」·真根因定案（本块整体废除勿复活）：
   三轮返工残留的 rgba(10,13,19,.62)+backdrop-filter:blur(14px) 在 IAB 试验环境不生效
   （四轮误判「Chromium 表格单元格 blur 无效」），但在老板真 Chrome 上**生效**——
   且卡片自身带 backdrop-filter 构成隔离边界，th 的 blur 采样到的是卡片背后的页面暗渐变
   （≈#07080c）而非卡片玻璃面（≈#14171b）→ 表头静止也呈黑带。滚动底色怎么改都无解。
   处置=本块整删；基础块显式 backdrop-filter:none 防复活；滚动遮行仍走 th-stuck 实底配方。 */
.sc-table-body thead th,
.sc-hist-body thead th,
.bt-trades-body thead th,
.tablewrap thead th,
.hd-hist-body thead th,
.b-scroll thead th{
  background:transparent;
  backdrop-filter:none; -webkit-backdrop-filter:none;
  transform:translateZ(0);   /* 2026-09-11 老板令「这一行不停闪烁」：sticky 表头强制独立合成层，消微抖/闪（经典对策，零视觉副作用） */
}

/* ── 2026-09-10 老板令（三轮返工·根因定案）：表头浅带不是颜色值问题，是叠层结构问题——
   卡片表面本身 = 白 .045 + blur20；sticky 表头再涂一层白 .045 = 卡片之上再叠一卡配方，
   双层白必然比周围亮一截（选股历史「时间」行即此带）。
   终解=表头零涂装：background 透明（回到 08-29「表头无底色融入卡片」原裁），
   只留 backdrop blur——静止时表头下面就是卡片已合成的表面，分毫不差；
   行滚过时由强模糊糊成毛玻璃，不再透字。任何非零 alpha 涂装都会复现亮带，勿再加。 */
/* ── 2026-09-10 老板令（四轮·根治）：backdrop-filter 在 Chromium 表格单元格上不生效
   （separate 也救不了，三连失败实证）——blur 方案整体废弃。
   改确定性哨兵方案：静止时 th 透明=卡片本体零色带（老板已认可）；
   容器挂 .th-stuck（common.js UT.initStickyCover：内容顶 1px 哨兵离开视口=已滚动）时
   表头切实底 rgba(17,23,31,.97) 遮行——实底不靠浏览器特性，确定性遮字。 */
.sc-table-body thead th,
.sc-hist-body thead th,
.bt-trades-body thead th,
.tablewrap thead th,
.hd-hist-body thead th,
.b-scroll thead th{
  background:transparent;
}
.sc-table-body.th-stuck thead th,
.sc-hist-body.th-stuck thead th,
.bt-trades-body.th-stuck thead th,
.tablewrap.th-stuck thead th,
.hd-hist-body.th-stuck thead th,
.b-scroll.th-stuck thead th{
  /* 2026-09-11 老板令（表头发黑修复）：原 rgba(17,23,31,.97) 比卡片实际色调黑一截。
     卡片表面 = 白.045 玻璃叠在 #term 渐变底上，此处用同一配方平涂（白.045 叠 #090c11，
     合成 ≈ #14171b）→ 滚动/静止/残留微滚三态都与卡片色调一致，滚过表头下的行被实底遮字。 */
  background: linear-gradient(rgba(255,255,255,.045), rgba(255,255,255,.045)), #090c11;
}

/* ── UI v4.14 · 勾选框三态净化 + 更多▾下拉现代化（2026-09-10 老板令）──
   ①未勾选=中性（灰空框/中性描边），勾选=琥珀实心✓——原生 accent-color 无法区分两态，改自绘；
   ②更多▾菜单对齐 bt-stdrop-menu 的现代下拉语言（圆角/悬浮阴影/项悬停高亮）。 */
.bt-row .sc-chk input, .bt-sec-body .sc-chk input, .bt-ctrl .sc-chk input, .pm-item .sc-chk input{
  appearance:none; -webkit-appearance:none;
  width:13px; height:13px; margin:0; vertical-align:middle;
  border:1px solid rgba(255,255,255,.28); border-radius:3px; background:transparent;
  cursor:pointer; position:relative; flex:none;
}
.bt-row .sc-chk input:checked, .bt-sec-body .sc-chk input:checked,
.bt-ctrl .sc-chk input:checked, .pm-item .sc-chk input:checked{
  background:#ffb020; border-color:#ffb020;
}
.bt-row .sc-chk input:checked::after, .bt-sec-body .sc-chk input:checked::after,
.bt-ctrl .sc-chk input:checked::after, .pm-item .sc-chk input:checked::after{
  content:'✓'; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  color:#1a1205; font-size:10px; font-weight:700; line-height:1;
}
.bt-ctrl .sc-chk{ background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.10); }
.bt-ctrl .sc-chk:has(input:checked){ background:rgba(0,255,136,.05); border-color:rgba(0,255,136,.30); }
.bt-ctrl .sc-chk:hover{ border-color:rgba(255,255,255,.30); background:rgba(255,255,255,.06); color:var(--txt); }
.bt-ops-panel{
  top:calc(100% + 4px); margin-top:0;
  background:rgba(13,17,24,.97); border:1px solid var(--line2);
  border-radius:10px; box-shadow:0 14px 36px rgba(0,0,0,.55);
  min-width:190px; padding:5px; gap:2px; overflow:hidden;
}
.bt-ops-panel .bt-ops-item{
  margin:0 !important; padding:8px 12px; border-radius:7px; text-align:left;
  display:inline-flex; align-items:center; gap:9px; font-size:12px; color:var(--txt2);
}
.bt-ops-panel .bt-ops-item:hover{ background:rgba(var(--ac-rgb),.12); color:var(--txt); }

/* ── 2026-09-10 老板令：影子页折叠条箭头右对齐补齐（贴边切割修正）──
   20260914k 统一胶囊钮后：13px 大三角与 padding-right 补偿退役，胶囊钮自带内距 -- */
.sh-fold-hd{ padding-right:8px; }
.sh-fold-hd::after{ font-size:10px; }

/* ============================================================
   UI v4.16 · 全站勾选转药丸（2026-09-10 老板令：像影子「免打断」那样——
   不要勾选框，label 即开关；开=绿描边/绿字/浅绿底，关=原中性色）。
   适用=sc-chk(回测)/pm-chip(参数策略)/sc-check(影子选项)/任意 label>checkbox；
   拨杆 .tgl/.b-sw 本无勾选框不转，但其 on 色统一改绿。 */
.sc-chk, .pm-chip, .sc-check,
label:has(> input[type="checkbox"]):not(.b-sw):not(.tgl){
  display:inline-flex !important; align-items:center !important; gap:6px !important;
  border:1px solid var(--line2) !important; border-radius:999px !important;
  background:rgba(255,255,255,.04) !important; color:var(--txt2) !important;
  padding:4px 12px !important; cursor:pointer !important; user-select:none !important;
  white-space:nowrap;
}
.sc-chk:has(input:checked), .pm-chip:has(input:checked), .sc-check:has(input:checked),
label:has(> input[type="checkbox"]:checked):not(.b-sw):not(.tgl){
  color:#00ff88 !important; border-color:rgba(0,255,136,.45) !important; background:rgba(0,255,136,.08) !important;
}
label > input[type="checkbox"], .sc-check > input[type="checkbox"],
.sc-chk input[type="checkbox"], .pm-chip input[type="checkbox"]{ display:none !important; }
/* 合并药丸内的数值子项（2026-09-10 老板令：点选+数值并丸） */
.sc-chk .sc-sub, .pm-chip .sc-sub{ display:inline-flex; align-items:center; gap:3px; color:var(--txt3); margin-left:2px; }
.sc-chk .sc-sub .sc-ctl, .pm-chip .sc-sub .sc-ctl{ display:inline-flex !important; height:18px; }
/* 影子锁定只读行：勾选方块撤，改「开 / —」文字态 */
.sc-row .ctl > input[type="checkbox"]{ display:none; }
.sc-row .ctl:has(> input[type="checkbox"])::after{ content:'—'; font-family:var(--mono); font-size:12px; color:var(--txt3); }
.sc-row .ctl:has(> input[type="checkbox"]:checked)::after{ content:'开'; color:#00ff88; font-weight:700; }
/* 拨杆 on 色统一绿（打开是绿色） */
.b-sw input:checked+i{ background:rgba(0,255,136,.25); border-color:rgba(0,255,136,.5); }
.b-sw input:checked+i::after{ background:#00ff88; box-shadow:0 0 6px #00ff88; }


/* ============================================================
   UI v5.4 · 品牌温度计横置：温度融入 logo 卡背景（2026-09-11 用户令）
   「温度+logo 的组合不好看」→ 整张 .s-brand 作横向水槽：
   液面自左往右铺（宽=score/max×100%，--hl-pctx，越高越往右），
   右缘双椭圆浪头错相摇摆=水位晃荡；90 分警戒线由横改竖（--hl-linex）；
   竖式量杯（hl-liquid/wave/spill/line/ice/steam）元素已删、旧规则作废；
   数字徽标撤主题色块，中性玻璃底 + 温度色数字（--hl-ct）。
   ============================================================ */
.s-brand{ position:relative; overflow:hidden; border-radius:13px 13px 0 0; }
.s-brand .hl-sea{
  position:absolute; top:-1px; bottom:-1px; left:0; z-index:0;
  width:var(--hl-pctx,0%); overflow:visible;
  transition:width 1.2s cubic-bezier(.4,0,.2,1);
  animation:hlBob 3.8s ease-in-out infinite alternate;
}
.s-brand .hl-water{
  position:absolute; inset:0;
  background:var(--hl-c,rgba(107,91,122,.78)); opacity:.38;
  transition:background-color .8s;
}
.s-brand .hl-crest{
  position:absolute; top:-16%; bottom:-16%; right:-8px; width:18px;
  border-radius:44%;
  background:var(--hl-c,rgba(107,91,122,.78)); opacity:.8;
  animation:hlSlosh 2.3s ease-in-out infinite alternate;
  transition:background-color .8s;
}
.s-brand .hl-crest.hl-cb{
  right:-14px; width:26px; opacity:.34; border-radius:42%;
  animation-duration:3.4s; animation-direction:alternate-reverse;
}
@keyframes hlSlosh{
  from{ transform:rotate(-15deg) translateX(-2px); }
  to  { transform:rotate(15deg)  translateX(2px); }
}
@keyframes hlBob{
  from{ transform:translateX(-1.5px); }
  to  { transform:translateX(1.5px); }
}
/* 90 分警戒线：横改竖，水位漫过右移为溢出发光 */
.s-brand .hl-gline{
  position:absolute; top:0; bottom:0; left:var(--hl-linex,75%); width:0; z-index:1;
  border-left:1px dashed rgba(255,176,32,.5); pointer-events:none;
  transition:left 1.2s cubic-bezier(.4,0,.2,1);
}
.s-brand.hl-overflow .hl-gline{
  border-left:1px solid #ffb020;
  box-shadow:0 0 6px rgba(255,176,32,.75);
}
/* 内容层浮于水面之上：数字徽标（中性玻璃底+温度色数字）与品牌文字 */
.s-brand .s-logo{
  position:relative; z-index:2;
  border:1px solid rgba(255,255,255,.10) !important;
  background:rgba(255,255,255,.045) !important;
  box-shadow:none !important;
}
.s-brand .hl-num{
  transform:none; font:700 12px/1 var(--mono);
  color:var(--hl-ct,#9c86ae); letter-spacing:-.5px;
}
.s-brand .s-brandtx{ position:relative; z-index:2; text-shadow:0 1px 3px rgba(0,0,0,.55); }
/* 状态态：热=浪头辉光；沸=晃荡加速；冷=褪饱和提亮；冰封/页签隐藏=晃荡静止 */
.s-brand.hl-hot .hl-crest{ box-shadow:0 0 14px rgba(255,45,85,.5); }
.s-brand.hl-boil .hl-crest{ animation-duration:1.3s; }
.s-brand.hl-boil .hl-crest.hl-cb{ animation-duration:1.8s; }
.s-brand.hl-frost .hl-sea{ filter:saturate(.55) brightness(1.18); }
.s-brand.hl-frozen .hl-sea,.s-brand.hl-frozen .hl-crest{ animation-play-state:paused; }
.s-brand.hl-off .hl-sea,.s-brand.hl-off .hl-crest{ animation-play-state:paused !important; }
@media (prefers-reduced-motion: reduce){
  .s-brand .hl-sea,.s-brand .hl-crest{ animation:none !important; }
}


/* ============================================================
   UI v5.5 · 品牌温度计横置 v2 重做（2026-09-11 用户令「丑爆了+上圆下直」）
   v5.4 失败复盘：不透明死色块 + 旋转椭圆浪头突出卡外像肿块 + 卡体裁成
   上圆下直（沿侧栏外圆角只圆了顶部）。整体重做：
   ① 卡体几何还原（overflow/radius 撤），水=内嵌全圆角「浅滩」层
     （inset 3px，四角统一 10px 圆角，不碰卡缘→无上下角不一致问题）；
   ② 水色改上浅下浓渐变（ambient 氛围层非色块）；右缘双水层错相
     blob 形变（border-radius 有机缓动）=水面自然晃荡，取代旋转椭圆肿块；
   ③ 徽标去边框方片 → 太阳光环（径向温度色光晕+白字数字+色辉），
     「太阳之下」主题合一：市场越热太阳越红；
   ④ 90 分警戒竖线保留（更淡，漫过转实线发光）；
     v5.4 的 hl-sea/hl-crest/hlSlosh/hlBob 规则随元素退役作废。
   ============================================================ */
.s-brand{ position:relative; overflow:visible; border-radius:0; }
.s-brand .hl-water{
  position:absolute; top:3px; bottom:3px; left:3px; right:auto; z-index:0;
  width:calc(var(--hl-pctx,0%) - 8px); min-width:0;
  opacity:1; pointer-events:none;
  transition:width 1.2s cubic-bezier(.4,0,.2,1);
}
.s-brand .hl-w1{
  background:linear-gradient(180deg,
    rgba(var(--hl-rgb,107,91,122),.05) 0%,
    rgba(var(--hl-rgb,107,91,122),.15) 55%,
    rgba(var(--hl-rgb,107,91,122),.30) 100%);
  border-radius:10px 58% 42% 10px / 10px 62% 38% 10px;
  animation:hlMorphA 5.6s ease-in-out infinite alternate,
            hlStretch 3.8s ease-in-out infinite alternate;
}
.s-brand .hl-w2{
  width:calc(var(--hl-pctx,0%) - 1px);
  background:linear-gradient(180deg,
    rgba(var(--hl-rgb,107,91,122),.02) 0%,
    rgba(var(--hl-rgb,107,91,122),.07) 60%,
    rgba(var(--hl-rgb,107,91,122),.14) 100%);
  border-radius:10px 44% 56% 10px / 10px 46% 54% 10px;
  animation:hlMorphB 8.2s ease-in-out infinite alternate-reverse;
}
@keyframes hlMorphA{
  from{ border-radius:10px 58% 42% 10px / 10px 62% 38% 10px; }
  to  { border-radius:10px 42% 58% 10px / 10px 38% 62% 10px; }
}
@keyframes hlMorphB{
  from{ border-radius:10px 44% 56% 10px / 10px 46% 54% 10px; }
  to  { border-radius:10px 56% 44% 10px / 10px 54% 46% 10px; }
}
@keyframes hlStretch{ from{ transform:scaleX(1); } to{ transform:scaleX(1.014); } }
/* 90 分警戒竖线：淡琥珀虚线，水位漫过转实线发光 */
.s-brand .hl-gline{
  position:absolute; top:2px; bottom:2px; left:var(--hl-linex,75%); width:0; z-index:1;
  border-left:1px dashed rgba(255,176,32,.32); pointer-events:none;
}
.s-brand.hl-overflow .hl-gline{
  border-left:1px solid rgba(255,176,32,.75);
  box-shadow:0 0 7px rgba(255,176,32,.5);
}
/* 太阳徽标：去边框方片，径向温度色光环+白字数字（热则太阳愈红） */
.s-brand .s-logo{
  position:relative; z-index:2;
  border:none !important; background:transparent !important; box-shadow:none !important;
}
.s-brand .s-logo::before{
  content:''; position:absolute; z-index:-1; left:50%; top:50%;
  width:60px; height:60px; transform:translate(-50%,-50%); border-radius:50%;
  background:radial-gradient(circle,
    rgba(var(--hl-rgb,107,91,122),.50) 0%,
    rgba(var(--hl-rgb,107,91,122),.20) 36%,
    transparent 66%);
}
.s-brand .hl-num{
  transform:none; font:700 13px/1 var(--mono); color:#fff; letter-spacing:-.5px;
  text-shadow:0 0 9px rgba(var(--hl-rgb,107,91,122),.9);
}
.s-brand .s-brandtx{ position:relative; z-index:2; text-shadow:0 1px 3px rgba(0,0,0,.6); }
/* 状态态：热=光环增艳；沸=晃荡加速；冷=褪饱和提亮；冰封/页签隐藏=静止 */
.s-brand.hl-hot .s-logo::before{ filter:saturate(1.18) brightness(1.08); }
.s-brand.hl-boil .hl-w1{ animation-duration:2.4s,2.0s; }
.s-brand.hl-boil .hl-w2{ animation-duration:3.4s; }
.s-brand.hl-frost .hl-water{ filter:saturate(.55) brightness(1.15); }
.s-brand.hl-frozen .hl-water{ animation-play-state:paused; }
.s-brand.hl-off .hl-water{ animation-play-state:paused !important; }
@media (prefers-reduced-motion: reduce){
  .s-brand .hl-water{ animation:none !important; }
}

/* ============================================================
   UI v5.6 · 品牌温度计横置 v3 定稿（2026-09-11 用户三轮令「更丑+要圆角」）
   根因：v4.1 时代 .s-brand 本就是 12px 圆角浮卡，v5.4/v5.5 两轮把
   border-radius 覆盖没了 → 方斑。v3 定稿：
   ① 圆角浮卡还原（radius:12px 同 v4.1 + overflow:hidden 裁水）；
   ② 水清晰可见：上下渐变（.10→.52），不再是若有若无的污渍；
   ③ 右端大圆弧水头（border-radius 46% 弧帽）+ 整水 ±1.4° 轻摆=晃荡
     （纵向外放 8px 防旋转露缝，卡 overflow 裁齐）；w2 前沿更长更淡=纵深；
   ④ 徽标=温度色圆角瓷砖（v4.1 的 10px 圆角）+白字数字+同色辉光；
   ⑤ v5.5 光环 ::before 撤、blob 形变动画撤。
   ============================================================ */
.s-brand{ overflow:hidden; border-radius:12px; }
.s-brand .hl-water{
  position:absolute; top:-8px; bottom:-8px; left:-4px; z-index:0;
  width:calc(var(--hl-pctx,0%) + 8px);
  transform-origin:50% 50%; pointer-events:none;
  transition:width 1.2s cubic-bezier(.4,0,.2,1);
}
.s-brand .hl-w1{
  background:linear-gradient(180deg,
    rgba(var(--hl-rgb,107,91,122),.10) 0%,
    rgba(var(--hl-rgb,107,91,122),.30) 55%,
    rgba(var(--hl-rgb,107,91,122),.52) 100%);
  border-radius:0 46% 46% 0 / 0 48% 48% 0;
  animation:hlLap 3.6s ease-in-out infinite alternate;
}
.s-brand .hl-w2{
  width:calc(var(--hl-pctx,0%) + 16px);
  background:linear-gradient(180deg,
    rgba(var(--hl-rgb,107,91,122),.04) 0%,
    rgba(var(--hl-rgb,107,91,122),.14) 60%,
    rgba(var(--hl-rgb,107,91,122),.24) 100%);
  border-radius:0 44% 44% 0 / 0 46% 46% 0;
  animation:hlLap 5.4s ease-in-out infinite alternate-reverse;
}
@keyframes hlLap{ from{ transform:rotate(-1.4deg); } to{ transform:rotate(1.4deg); } }
/* 警戒竖线微调亮 */
.s-brand .hl-gline{ border-left-color:rgba(255,176,32,.40); }
/* 徽标：温度色瓷砖+白字（v5.5 光环撤） */
.s-brand .s-logo::before{ content:none; }
.s-brand .s-logo{
  background:rgb(var(--hl-rgb,107,91,122)) !important;
  box-shadow:0 0 14px rgba(var(--hl-rgb,107,91,122),.45) !important;
}
.s-brand .hl-num{
  transform:none; font:700 14px/1 var(--mono); color:#fff; letter-spacing:-.5px;
  text-shadow:0 1px 2px rgba(0,0,0,.4);
}
/* 状态态（覆盖 v5.5 双动画时长的 boil 覆盖失效问题） */
.s-brand.hl-boil .hl-water{ animation-duration:1.9s; }
.s-brand.hl-hot .s-logo{ box-shadow:0 0 18px rgba(var(--hl-rgb,107,91,122),.6) !important; }

/* ============================================================
   UI v5.7 · 全系统动效层（2026-09-11 用户令「全系统动效·顶级动效标准」）
   动效语法：一套令牌（时长×缓动），三类动效各归其位——
   ①路由进场：切页瞬间子卡瀑布 rise+fade（一次性编排；数据轮询就地更新不重放）；
   ②微交互：按钮/导航/输入/表格行 140ms 级干脆反馈（只动 transform/opacity，合成器友好）；
   ③环境常驻：LIVE 呼吸光环、toast 弹簧入常、行级数据瀑布——低频克制不抢数据。
   纪律：prefers-reduced-motion 全局熔断（含温度计晃荡一并静止）。
   ============================================================ */
:root{
  --mo-d1:140ms; --mo-d2:240ms; --mo-d3:380ms;
  --eo-out:cubic-bezier(.16,1,.3,1);
  --eo-io:cubic-bezier(.6,.05,.36,1);
  --eo-spring:cubic-bezier(.3,1.45,.45,1);
}
::selection{ background:rgba(var(--ac-rgb),.30); color:#fff; }
::-webkit-scrollbar-thumb{ transition:background .15s; }

/* —— ① 路由进场：#view 子元素瀑布（app.js loadPage 注入后挂 .pg-in 触发）；
      页内视图切换（display 显隐：建户视图/回测页签…）由 UT.moView 挂 .mo-view-in 同享级联 —— */
#view.pg-in > *, .mo-view-in > *{ animation:moRise var(--mo-d3) var(--eo-out) both; }
#view.pg-in > *:nth-child(2), .mo-view-in > *:nth-child(2){ animation-delay:45ms; }
#view.pg-in > *:nth-child(3), .mo-view-in > *:nth-child(3){ animation-delay:90ms; }
#view.pg-in > *:nth-child(4), .mo-view-in > *:nth-child(4){ animation-delay:135ms; }
#view.pg-in > *:nth-child(5), .mo-view-in > *:nth-child(5){ animation-delay:175ms; }
#view.pg-in > *:nth-child(n+6), .mo-view-in > *:nth-child(n+6){ animation-delay:210ms; }
@keyframes moRise{ from{ opacity:0; transform:translateY(10px); } }
/* 行级数据瀑布：前 30 行 12ms 步进级联（2026-09-11 用户报「回测历史下 4 行直接出现」——
   旧限额 10 导致 11+ 行豁然在场与瀑布断层；30 行覆盖中小表全瀑布，步进压半末行 348ms）；
   第 31+ 行统一 348ms 同拍浮现（超大表防卡顿）；轮询重建表排除 */
.pg-in tbody tr{ animation:moRow var(--mo-d2) var(--eo-out) both; animation-delay:348ms; }
.pg-in tbody tr:nth-child(1){ animation-delay:0ms; }
.pg-in tbody tr:nth-child(2){ animation-delay:12ms; }
.pg-in tbody tr:nth-child(3){ animation-delay:24ms; }
.pg-in tbody tr:nth-child(4){ animation-delay:36ms; }
.pg-in tbody tr:nth-child(5){ animation-delay:48ms; }
.pg-in tbody tr:nth-child(6){ animation-delay:60ms; }
.pg-in tbody tr:nth-child(7){ animation-delay:72ms; }
.pg-in tbody tr:nth-child(8){ animation-delay:84ms; }
.pg-in tbody tr:nth-child(9){ animation-delay:96ms; }
.pg-in tbody tr:nth-child(10){ animation-delay:108ms; }
.pg-in tbody tr:nth-child(11){ animation-delay:120ms; }
.pg-in tbody tr:nth-child(12){ animation-delay:132ms; }
.pg-in tbody tr:nth-child(13){ animation-delay:144ms; }
.pg-in tbody tr:nth-child(14){ animation-delay:156ms; }
.pg-in tbody tr:nth-child(15){ animation-delay:168ms; }
.pg-in tbody tr:nth-child(16){ animation-delay:180ms; }
.pg-in tbody tr:nth-child(17){ animation-delay:192ms; }
.pg-in tbody tr:nth-child(18){ animation-delay:204ms; }
.pg-in tbody tr:nth-child(19){ animation-delay:216ms; }
.pg-in tbody tr:nth-child(20){ animation-delay:228ms; }
.pg-in tbody tr:nth-child(21){ animation-delay:240ms; }
.pg-in tbody tr:nth-child(22){ animation-delay:252ms; }
.pg-in tbody tr:nth-child(23){ animation-delay:264ms; }
.pg-in tbody tr:nth-child(24){ animation-delay:276ms; }
.pg-in tbody tr:nth-child(25){ animation-delay:288ms; }
.pg-in tbody tr:nth-child(26){ animation-delay:300ms; }
.pg-in tbody tr:nth-child(27){ animation-delay:312ms; }
.pg-in tbody tr:nth-child(28){ animation-delay:324ms; }
.pg-in tbody tr:nth-child(29){ animation-delay:336ms; }
.pg-in tbody tr:nth-child(30){ animation-delay:348ms; }
.pg-in .sc-table-card tbody tr{ animation:none; }   /* 扫描结果表 pollScan 秒级重建，不重放 */
@keyframes moRow{ from{ opacity:0; transform:translateY(4px); } }

/* —— ② 微交互 —— */
/* 按钮族：悬停轻浮提亮 / 按压回缩（60ms 急回=干脆手感） */
.btn, .bt-btn, .sc-scan-btn{
  transition:color var(--mo-d1) var(--eo-out), border-color var(--mo-d1) var(--eo-out),
    background-color var(--mo-d1) var(--eo-out), box-shadow var(--mo-d1) var(--eo-out),
    transform var(--mo-d1) var(--eo-out), filter var(--mo-d1) var(--eo-out);
}
.btn:hover, .bt-btn:hover, .sc-scan-btn:hover{ transform:translateY(-1px); filter:brightness(1.13); }
.btn:active, .bt-btn:active, .sc-scan-btn:active{ transform:translateY(0) scale(.965); transition-duration:60ms; }
/* 输入族：悬停描边提亮 / 聚焦环渐起 */
select.sc-ctl, input.sc-ctl, .hd-in, .bt-stdrop-sel{
  transition:border-color var(--mo-d1) var(--eo-out), box-shadow var(--mo-d1) var(--eo-out), background-color var(--mo-d1) var(--eo-out);
}
select.sc-ctl:hover, input.sc-ctl:hover, .hd-in:hover, .bt-stdrop-sel:hover{ border-color:rgba(255,255,255,.22); }
select.sc-ctl:focus, input.sc-ctl:focus, .hd-in:focus, .bt-stdrop-sel:focus{
  border-color:rgba(var(--ac-rgb),.55); box-shadow:0 0 0 3px rgba(var(--ac-rgb),.13);
}
/* 导航药丸：悬停轻移出列 + 图标放大就位 / 按压微缩（v4.1 过渡令牌化） */
.nav-itm{
  transition:background var(--mo-d1) var(--eo-out), color var(--mo-d1) var(--eo-out),
    box-shadow var(--mo-d1) var(--eo-out), transform var(--mo-d1) var(--eo-out);
}
.nav-itm:hover{ transform:translateX(3px); }
.nav-itm:active{ transform:translateX(3px) scale(.985); transition-duration:60ms; }
.nav-ic{ transition:transform var(--mo-d1) var(--eo-out), color var(--mo-d1) var(--eo-out); }
.nav-itm:hover .nav-ic{ transform:scale(1.12); }
/* 卡片/表格行悬停过渡已撤（2026-09-11 用户报障「扫描结果行随鼠标移动闪烁」根修）：
   两者叠在 backdrop-filter 毛玻璃卡 + border-collapse 表格上——Chromium 对
   「collapse 表格行背景过渡」与「backdrop-filter 卡内持续重绘」均有闪烁类绘制 bug，
   悬停反馈回到硬切变色（hover 规则本身保留，无过渡即无重绘风暴）。 */
/* 折叠组：缓动令牌化（原 .18s ease → 快出缓停） */
.nav-group-body{ transition:max-height var(--mo-d2) var(--eo-out); }
/* 分段签：状态渐变 */
.seg{ transition:color var(--mo-d1) var(--eo-out), background var(--mo-d1) var(--eo-out),
  border-color var(--mo-d1) var(--eo-out), box-shadow var(--mo-d1) var(--eo-out); }

/* —— ③ 环境常驻 —— */
/* LIVE 呼吸 + 外扩光环（替换生硬 steps 闪烁） */
.dot{ position:relative; animation:moBreath 2.4s var(--eo-io) infinite; }
.dot::after{
  content:''; position:absolute; inset:-4px; border-radius:50%;
  border:1px solid var(--up); opacity:0;
  animation:moHalo 2.4s var(--eo-out) infinite;
}
@keyframes moBreath{ 0%,100%{ opacity:.5; } 50%{ opacity:1; } }
@keyframes moHalo{ 0%{ transform:scale(.45); opacity:.75; } 70%,100%{ transform:scale(2); opacity:0; } }
/* 加载态：整块淡入 + 金点呼吸（替换 steps 闪烁） */
.loading{ animation:moFadeIn var(--mo-d2) var(--eo-out) both; }
.loading .sp{ animation:moBreath 1.1s ease-in-out infinite; }
@keyframes moFadeIn{ from{ opacity:0; } }
/* Toast：右下滑入（弹簧过冲）；滑出由 app.js 内联 transform 收尾 */
.mo-toast{ border-radius:8px; animation:moToastIn var(--mo-d2) var(--eo-spring) both; }
@keyframes moToastIn{ from{ opacity:0; transform:translateY(12px) scale(.96); } }
/* 弹层（下拉菜单等 display 切换型）：整体弹入不级联（display:none→显 时 CSS 动画自动重放）；
   .mo-no-auto = 全局编排器 opt-out 标记（app.js v5.7c 编排器识别） */
.bt-stdrop-menu{ animation:moPop .18s var(--eo-spring); }
@keyframes moPop{ from{ opacity:0; transform:translateY(-5px) scale(.98); } }
/* 方向性横滑交换（UI v5.7d · 左右选择筛选条 · UT.moSwap 编排）：
   右选=旧内容向左滑出(mo-out-l)+新内容自右滑入(mo-in-r)，左选镜像；方向由 --mo-x 传递 */
.mo-out-l{ --mo-x:-24px; } .mo-out-r{ --mo-x:24px; }
.mo-out-l, .mo-out-r{ animation:moOutX .12s var(--eo-io) both; }
@keyframes moOutX{ to{ opacity:0; transform:translateX(var(--mo-x)); } }
.mo-in-r{ --mo-x:120px; } .mo-in-l{ --mo-x:-120px; }
/* 级联梯：多子块=直接子层逐块 45ms 梯（上面先动）；单子块=级联落孙层（板块签基础 pane 等
   唯一包裹容器若只动父块则无上下序——20260914f 用户令「左滑上下顺序应同右滑·上面先动」） */
.mo-in-r > *:not(:only-child), .mo-in-l > *:not(:only-child){ animation:moInX var(--mo-d3) var(--eo-out) both; }
.mo-in-r > *:not(:only-child):nth-child(2), .mo-in-l > *:not(:only-child):nth-child(2){ animation-delay:45ms; }
.mo-in-r > *:not(:only-child):nth-child(3), .mo-in-l > *:not(:only-child):nth-child(3){ animation-delay:90ms; }
.mo-in-r > *:not(:only-child):nth-child(4), .mo-in-l > *:not(:only-child):nth-child(4){ animation-delay:135ms; }
.mo-in-r > *:not(:only-child):nth-child(5), .mo-in-l > *:not(:only-child):nth-child(5){ animation-delay:175ms; }
.mo-in-r > *:not(:only-child):nth-child(n+6), .mo-in-l > *:not(:only-child):nth-child(n+6){ animation-delay:210ms; }
.mo-in-r > :only-child > *, .mo-in-l > :only-child > *{ animation:moInX var(--mo-d3) var(--eo-out) both; }
.mo-in-r > :only-child > *:nth-child(2), .mo-in-l > :only-child > *:nth-child(2){ animation-delay:45ms; }
.mo-in-r > :only-child > *:nth-child(3), .mo-in-l > :only-child > *:nth-child(3){ animation-delay:90ms; }
.mo-in-r > :only-child > *:nth-child(4), .mo-in-l > :only-child > *:nth-child(4){ animation-delay:135ms; }
.mo-in-r > :only-child > *:nth-child(5), .mo-in-l > :only-child > *:nth-child(5){ animation-delay:175ms; }
.mo-in-r > :only-child > *:nth-child(n+6), .mo-in-l > :only-child > *:nth-child(n+6){ animation-delay:210ms; }
@keyframes moInX{ from{ opacity:0; transform:translateX(var(--mo-x)); } }
/* 启动入场：品牌卡升起、导航项整体淡入（仅首屏一次） */
.sidenav .s-brand{ animation:moRise .5s var(--eo-out) both; }
.sidenav .nav-itm{ animation:moFadeIn .4s var(--eo-out) .08s backwards; }

/* —— 无障碍熔断：系统「减少动态效果」时全部动效静止 —— */
@media (prefers-reduced-motion:reduce){
  *, *::before, *::after{
    animation-duration:.01ms !important; animation-delay:0ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important; transition-delay:0ms !important;
  }
}

/* ============================================================
   UI v5.8 · 品牌卡动效改版（2026-09-11 用户令「还是没有动效」+附卡截图）
   ①90 分警戒竖线退役；②底色一拆两块：
     基座 hl-w1=左缘铺到 100/max 位（--hl-x100），常驻呼吸闪烁；
     脉冲 hl-w2=左缘锚当前水位（--hl-pctx），向 100 位冲刺→到位停驻渐隐→循环冲击；
   ③标题「太阳之下 · 量化交易系统」（后缀小字弱色，主字缩码不换行）。
   沸腾档 1.9s 提速 / 冰封·隐藏页签静止 / reduced-motion 熔断 全部继承 v5.5/v5.6 规则。
   ============================================================ */
.s-brand .hl-gline{ display:none; }
.s-brand .hl-w1{
  width:calc(var(--hl-x100,83.33%) + 4px);
  animation:hlBlink 1.8s ease-in-out infinite;
}
@keyframes hlBlink{ 0%,100%{ opacity:1; } 50%{ opacity:.55; } }
.s-brand .hl-w2{
  left:var(--hl-pctx,0%); width:0; z-index:1;
  border-radius:0 42% 42% 0 / 0 46% 46% 0;
  background:linear-gradient(90deg,
    rgba(var(--hl-rgb,107,91,122),.06) 0%,
    rgba(var(--hl-rgb,107,91,122),.30) 62%,
    rgba(var(--hl-rgb,107,91,122),.55) 100%);
  animation:hlSurge 2.4s cubic-bezier(.2,.7,.3,1) infinite;
}
@keyframes hlSurge{
  0%  { width:0; opacity:0; }
  10% { opacity:.95; }
  55% { width:max(0px, calc(var(--hl-x100,83.33%) - var(--hl-pctx,0%))); opacity:.95; }
  74% { width:max(0px, calc(var(--hl-x100,83.33%) - var(--hl-pctx,0%))); opacity:.4; }
  86% { width:max(0px, calc(var(--hl-x100,83.33%) - var(--hl-pctx,0%))); opacity:0; }
  100%{ width:max(0px, calc(var(--hl-x100,83.33%) - var(--hl-pctx,0%))); opacity:0; }
}
.s-brand .s-logo{ position:relative; z-index:3; }   /* 徽标恒在水层之上 */
.s-brand .s-bt{ font-size:13px; letter-spacing:.02em; white-space:nowrap; }
.s-brand .s-bt2{
  font-style:normal; font-size:11px; font-weight:600; color:var(--txt);
  letter-spacing:.04em;
}

/* ============================================================
   UI v5.8b · 冲击脉冲合成器化（2026-09-11 用户报障二连「闪得更频繁·常驻·那一行变白」根修）
   真凶=v5.8 的 hlSurge 用 width 动画：布局属性 2.4s 无限循环=每帧重排+重绘，
   侧栏整体 backdrop-filter(24px) 被强制每帧全页重采样 → GPU 合成高压 →
   远处滚动区（扫描结果行）丢纹理出白帧（「变白」=合成层白帧，行背后并无别物）。
   根修：脉冲宽度恒=满冲程，冲击改 transform:scaleX(0→1)（transform-origin:left），
   纯合成器属性零 layout/paint；hlBlink(opacity) 本就合成器安全。同名 keyframes 就地覆盖。
   ============================================================ */
.s-brand .hl-water{ will-change:transform, opacity; }
.s-brand .hl-w2{
  width:max(0px, calc(var(--hl-x100,83.33%) - var(--hl-pctx,0%)));
  transform:scaleX(0); transform-origin:left center;
}

/* ============================================================
   20260913f · 冲击从最左发起（用户令「冲击应该从最左开始」·附卡截图）
   脉冲左缘改与基座同左缘外放（-4px），仍 scaleX(0→1)+origin:left 纯合成器冲刺。
   20260913g · 冲程终点改当前热度位（用户令「冲击只冲击到热度数值的位置·如 68/120」）：
   脉冲宽度=pctx+4px（score 变化时随基座 width transition 平滑滑到新水位）。
   ============================================================ */
.s-brand .hl-w2{
  left:-4px;
  width:calc(var(--hl-pctx,0%) + 4px);
}
@keyframes hlSurge{
  0%  { transform:scaleX(0); opacity:0; }
  10% { opacity:.95; }
  55% { transform:scaleX(1); opacity:.95; }
  74% { transform:scaleX(1); opacity:.4; }
  86% { transform:scaleX(1); opacity:0; }
  100%{ transform:scaleX(1); opacity:0; }
}

/* ============================================================
   20260913b · 回测历史分页（老板批「1187 行全量插 DOM 卡·改」·一页 50 行）
   20260914g · 翻页条升格卡头居中胶囊组（用户令：计数去重留「共 N 条」/翻页条入
   「回测历史 HISTORY」行中间/造型随系统胶囊审美/换页回表顶）
   ============================================================ */
.bt-hist-pager{
  display:none; align-items:center; gap:5px;
  margin:0 auto;   /* 卡头 flex 内自动居中（介于标题与右侧工具组之间） */
}
.bt-hist-pager.on{ display:inline-flex; }
.bt-hist-pager button{
  font-family:var(--mono); font-size:10px; line-height:1; color:var(--txt2);
  border:1px solid var(--line2); background:rgba(255,255,255,.04); border-radius:999px;
  padding:3px 9px; cursor:pointer;
  transition:color var(--mo-d1) var(--eo-out), border-color var(--mo-d1) var(--eo-out), background-color var(--mo-d1) var(--eo-out);
}
.bt-hist-pager button:hover:not(:disabled){ color:var(--txt); border-color:var(--line3); background:rgba(255,255,255,.07); }
.bt-hist-pager button:disabled{ opacity:.35; cursor:default; }
.bt-hist-pager .bt-hist-pgnum{
  font-family:var(--mono); font-size:10px; color:var(--ac-text);
  letter-spacing:.03em; padding:0 4px; white-space:nowrap;
}

/* ============================================================
   20260913c · 品牌卡两弧统一 + 速率同拍（用户令「两圆弧不一样·更尖的换弧度小的·同步呼吸与冲击速率」）
   根因=基座 46%/48% 与脉冲 42%/46% 参数不同（百分比弧相对各自宽高，观感一尖一浅）；
   修=基座弧对齐脉冲同款 42%/46%（两弧同参数；宽度差保留=脉冲窄弧自然显小）；
   呼吸 hlBlink 1.8s→2.4s 与冲击 hlSurge 同拍同周期（boil 提速 1.9s 仍同治两块）。
   ============================================================ */
.s-brand .hl-w1{
  border-radius:0 42% 42% 0 / 0 46% 46% 0;
  animation-duration:2.4s;
}

/* ============================================================
   20260913e · 两弧改固定像素（用户复令「仍旧是两个不一样的弧度」·附卡截图）
   上一轮参数对齐无效的真因：百分比 border-radius 相对各自宽度——基座宽 160px 弧伸出 67px（巨鼓），
   脉冲宽 51px 弧仅伸 21px，参数相同绝对形状仍天差地别。正解=固定 px 弧：
   两块（基座+脉冲）同用 24px/30px 绝对弧帽——形状逐像素一致且平缓（弧度小）。
   ============================================================ */
.s-brand .hl-w1, .s-brand .hl-w2{
  border-radius:0 24px 24px 0 / 0 30px 30px 0;
}
/* ============================================================
   2026-09-11 老板直派「任务1 任务2 基础 这些还是旧设计，也换成当前系统的风格」：
   任务页签/板块页签换装当前胶囊家族（同 新增任务/免打断/更多▾ 语言）——
   任务页签=中性玻璃胶囊（激活金玻璃金字）；板块页签弃文件夹造型（撤底边框带+金顶条内阴影）
   改「胶囊托盘+分段胶囊」分段控件；小黄点（有改动状态灯）保留随胶囊右上。
   （本块置文件尾，压过前部 .bt-btab 文件夹规则与 .bt-tasktab 旧方块规则）
   ============================================================ */
.bt-ctrl .bt-tasktab{
  gap:7px; padding:4px 12px; border-radius:999px;
  color:var(--txt2); background:rgba(255,255,255,.04); border:1px solid var(--line2);
}
.bt-ctrl .bt-tasktab:hover{ color:var(--txt); border-color:var(--line3); background:rgba(255,255,255,.07); }
.bt-ctrl .bt-tasktab.act{
  color:var(--ac-text); border-color:var(--ac-line);
  background:linear-gradient(90deg,var(--ac-bg-mid),var(--ac-bg-soft));
}
.bt-taskx{ color:var(--txt4); font-size:14px; padding:0 0 0 1px; }
.bt-taskx:hover{ color:#ff2d55; }
.bt-btabbar{ border-bottom:0; padding:6px 8px; gap:4px; background:rgba(255,255,255,.02); border-radius:999px; }
.bt-btab{ padding:4px 14px; border:1px solid transparent; border-radius:999px; color:var(--txt2); }
.bt-btab:hover{ color:var(--txt); background:rgba(255,255,255,.05); }
.bt-btab.act{
  color:var(--ac-text); border-color:var(--ac-line);
  background:linear-gradient(90deg,var(--ac-bg-mid),var(--ac-bg-soft)); box-shadow:none;
}
.bt-btab-dot{ top:3px; right:6px; box-shadow:0 0 6px rgba(255,176,32,.8); }

/* ── 2026-09-11 老板直派「任务1、基础这些还是格格不入…我喜欢放飞这个模块的设计，高度一致，风格统一，
   把其它的都改成这样」：任务页签/新增任务/板块页签 统一对齐 放飞 行的胶囊规格——
   同高 26px（--ctl-h）+同 999px 圆角+同描边语言（未激活=灰框中性玻璃、激活/新增=金玻璃金字）；
   新增任务不再 oversized；板块页签未激活也带框（不再裸文字）；托盘底撤（放飞行即为素行）── */
.bt-ctrl .bt-tasktab{ height:var(--ctl-h); box-sizing:border-box; padding:0 12px; }
.bt-ctrl .bt-taskadd{ height:var(--ctl-h); box-sizing:border-box; padding:0 12px; font-size:11px; display:inline-flex; align-items:center; }
.bt-btabbar{ background:transparent; border-radius:0; padding:6px 2px; gap:8px; }
.bt-btab{ height:var(--ctl-h); box-sizing:border-box; padding:0 14px; display:inline-flex; align-items:center;
  background:rgba(255,255,255,.04); border:1px solid var(--line2); color:var(--txt2); }
.bt-btab:hover{ background:rgba(255,255,255,.07); color:var(--txt); }
.bt-btab.act{ color:var(--ac-text); border-color:var(--ac-line);
  background:linear-gradient(90deg,var(--ac-bg-mid),var(--ac-bg-soft)); }
.bt-btab-dot{ top:2px; right:4px; }

/* ── 20260913r 补强：新增任务胶囊终版（压 .bt-btn 基础灰字/6px 圆角）── */
.bt-ctrl .bt-taskbar .bt-taskadd, .bt-ctrl #btTaskAdd{
  border-radius:999px !important; color:var(--ac-text) !important;
  border:1px solid var(--ac-line) !important;
  background:linear-gradient(90deg,var(--ac-bg-mid),var(--ac-bg-soft)) !important;
  font-weight:600;
}
.bt-ctrl .bt-taskbar .bt-taskadd:hover, .bt-ctrl #btTaskAdd:hover{
  background:var(--ac-bg-strong) !important;
  color:#fff !important;
}

/* ── 2026-09-11 老板直派「回测调优和影子账户里的三段式，第二三段中间的分割线都是在二者中间，不挨着」：
   分割线随行元素被父级内距内缩（回测=bt-rows 14px、影子=sh-ctrl 15px）——负边距通铺到卡缘+
   内距补偿保持内容原位；对齐其它板块的通边分割线 ── */
/* 20260913u 回退：上轮误把标准两页（回测/影子）通边化——标准=分割线随父内距内缩悬空，原样恢复 */

/* ── 2026-09-11 老板直派「基础应该跟最低评分对齐，上下两行中间加分割线像三段式；最低评分/模型/区间/
   买入方式这些改造成放飞子版块那种，风格统一」：
   ①板块页签行 左内距 29px=最低评分盒左缘（14 行距+14 面板内距+1 对齐因子）；
   ②页签行与内容行之间加三段式通边分割线（负边距 ±14 通铺+border-bottom）；
   ③基础行控件胶囊化：bt-f/bt-iv 改 999 圆角+26px 同高（内嵌输入 20px 透明，同放飞行内嵌迷你输入框），
   买入方式原生 select 撤框透底融胶囊，＋区间按钮同规格 ── */
.bt-btabbar{ margin-left:-14px; margin-right:-14px; padding:6px 14px 6px 29px; border-bottom:1px solid rgba(255,255,255,.04); }
.bt-btabpane{ padding-top:8px; }
.bt-row .bt-f{ height:var(--ctl-h); box-sizing:border-box; padding:0 12px; gap:6px; border-radius:999px; }
.bt-row .bt-f .sc-ctl{ height:20px; }
.bt-row .bt-f > select.sc-ctl{ border:none; background:transparent; height:22px; padding:0 2px; }
.bt-row .bt-iv{ height:var(--ctl-h); box-sizing:border-box; padding:0 12px; border-radius:999px; }
.bt-row .bt-iv .sc-ctl{ height:20px; }
.bt-row .bt-addiv{ height:var(--ctl-h); box-sizing:border-box; padding:0 12px; border-radius:999px; display:inline-flex; align-items:center; }

/* ── 2026-09-11 老板直派订正「我是让你改除了回测调优和影子账户其他的页面啊！这俩是标准啊！」：
   其它页面的卡内分段分割线由通边改内缩式（线随内容内缩、不贴卡缘）——对齐 回测/影子 标准：
   持仓 控制卡市道行(14px)/组合决策统计行(12px)；选股 三段卡头(14px)。行转 relative+::before 内缩线 ── */
.hd-ctrl .hd-regime-row{ border-top:0; position:relative; }
.hd-ctrl .hd-regime-row::before{ content:''; position:absolute; top:0; left:14px; right:14px; border-top:1px dashed rgba(255,255,255,.05); }
.hd-ctrl .sc-ctrl-bd + .sc-ctrl-bd{ border-top:0; position:relative; }
.hd-ctrl .sc-ctrl-bd + .sc-ctrl-bd::before{ content:''; position:absolute; top:0; left:14px; right:14px; border-top:1px dashed rgba(255,255,255,.05); }
.hd-sub-main .hd-plan-stats{ border-top:0; position:relative; }
.hd-sub-main .hd-plan-stats::before{ content:''; position:absolute; top:0; left:12px; right:12px; border-top:1px dashed rgba(255,255,255,.07); }
.sc-ctrl .card-hd{ border-top:0; position:relative; }
.sc-ctrl .card-hd::before{ content:''; position:absolute; top:0; left:14px; right:14px; border-top:1px solid rgba(255,255,255,.04); }

/* ── 2026-09-11 老板直派「新增任务、任务1、基础、回测结果、只看界面…没有跟随变色的按钮都随调色盘变色」：
   控件金家族 → 主题令牌（--ac-text/--ac-line/--ac-bg-*），随调色盘换色；
   涨跌绿红等功能色不动（20260910k 纪律延续）── */
.bt-tab.act{ color:var(--ac-text); background:linear-gradient(90deg,var(--ac-bg-mid),var(--ac-bg-soft)); border-color:var(--ac-line); box-shadow:none; }
.bt-srcchip.on{ border-color:var(--ac-line); color:var(--ac-text); background:var(--ac-bg-soft); }
.bt-tasktab.act{ color:var(--ac-text); border-color:var(--ac-line); background:linear-gradient(90deg,var(--ac-bg-mid),var(--ac-bg-soft)); }

/* ── 2026-09-12 老板直派基础行五连：①页签行分割线撤负边距回内缩标准（上版通边出框）②行左内距 15px
   维持 基础=最低评分 对齐 ③最低评分=开关胶囊（v4.16 自动绿/灰态；关=输入淡显，payload min_score 0=不过滤）
   ④区间标签并入首格日期胶囊（bt-iv-lb）⑤模型 bt-stdrop 融胶囊撤框透底（同 买入方式 形式）＋
   买入方式 label/select 对齐（select 11px/line-height 20px）── */
.bt-btabbar{ margin:0; padding:6px 15px; }
.bt-row .bt-ftoggle{ cursor:pointer; }
.bt-row .bt-ftoggle > .bt-score-chk{ display:none; }
.bt-row .bt-ftoggle:not(:has(.bt-score-chk:checked)) .sc-ctl{ opacity:.4; }
.bt-iv .bt-iv-lb{ font-size:11px; color:var(--txt3); white-space:nowrap; cursor:help; }
.bt-row .bt-f .bt-stdrop-sel{ border:none; background:transparent; height:22px; padding:0 2px; text-align:left; }
.bt-row .bt-f > select.sc-ctl{ font-size:11px; line-height:20px; }

/* ── 2026-09-12 老板直派两连根修（选股页·像素取证定案）→ 2026-09-15 老板令返工 ──
   ①「时间行」粘性表头滚动变黑 与 ②「扫描结果」黑白闪 的根因考证见 20260914a（下方注释保留于史）：
   玻璃卡 backdrop-filter 兄弟卡重绘时重采样失效=v5.7/v5.8/v5.8b 三轮清触发源后仍闪的元凶。
   20260915 老板令「智能选股全页面无法穿透背景，也就没了毛玻璃效果，改成跟其他页面相同的效果」：
   卡面恢复全站标准 translucent 白.045（与回测/持仓页同款穿透观感，aurora 透卡可见）；
   但 backdrop-filter 保持 none 不回玻璃——本页背景为平滑 aurora 渐变，无模糊半透面与模糊玻璃
   在此背景上视觉等价 → 穿透回来了、重采样物理不存在=黑白闪不可能复发；
   表格滚动容器与 th-stuck 维持 20260914b 全站统一实底 #1c1f24（回测页同构，无色带问题）。 */
#term.page-screening .card{
  backdrop-filter:none; -webkit-backdrop-filter:none;
  background:rgba(255,255,255,.045);
}

/* ── 2026-09-12 老板直派「不光这一个表格，查所有的表格，许多都有类似的问题」：
   粘性表头六族容器（sc-table-body/sc-hist-body/bt-trades-body/tablewrap/hd-hist-body/b-scroll）
   20260916 老板令再改（「回测历史/交易明细/选股历史/已清仓历史/已卖出历史/每日操作流水/
   全球市场对比/AI研究员…背景都是灰黑色…全改」）：
   容器实底 #1c1f24 退役→transparent——容器区域直显宿主卡玻璃面（白.045 透 aurora），
   与卡体零色差=表头井/表体/滚动三态天然同色；滚动遮字仍由下方 th-stuck 实底配方确定性承担
   （四轮返工定案不动）。backdrop-filter:none 维持（防复活+重采样根除）── */
.sc-table-body, .sc-hist-body, .bt-trades-body, .tablewrap, .hd-hist-body, .b-scroll{
  backdrop-filter:none; -webkit-backdrop-filter:none;
  background:transparent;
}
.sc-table-body.th-stuck thead th, .sc-hist-body.th-stuck thead th,
.bt-trades-body.th-stuck thead th, .tablewrap.th-stuck thead th,
.hd-hist-body.th-stuck thead th, .b-scroll.th-stuck thead th{
  background:#1c1f24;
}

/* ============================================================
   20260914e · 横滑方向可辨增强 + 回测板块签接入（用户报「只会从右往左滑·不区分」）
   探针实锤方向逻辑正确（domtab/fchip 均 [1,-1,1,-1]），观感不分左右的真因=幅度过小：
   1900px 宽内容上进/出仅 28/24px 且 expo-out 前 60ms 走完大半，方向不可读。
   修=进出位移拉到 120px（进入仍在容器 overflow-x:hidden 内被裁=真「滑入画面」）、退出 .12→.16s；
   另：回测任务板块签（基础/模拟/策略…bt-btabpane）由 backtest.js 按签序挂 mo-in-r/l 同款左右滑。
   ============================================================ */
.mo-out-l{ --mo-x:-120px; } .mo-out-r{ --mo-x:120px; }
.mo-out-l, .mo-out-r{ animation:moOutX .16s var(--eo-io) both; }
.mo-in-r{ --mo-x:120px; } .mo-in-l{ --mo-x:-120px; }

/* ============================================================
   20260914h · 组合决策卡收起态下缘呼吸（用户报「收起后下边的边距没了」·附截图）
   根因=卡头内「展开/收起」按钮 30px 高（20260913r 胶囊规格）把设计高度 27px 的
   .card-hd 撑到 38px 且 padding=0——按钮下缘距卡条下缘仅 ~4px，收起成小条后
   视觉「下边距没了」。修=该卡头改内容高+上下 6px 内呼吸（常态/收起态同治）。
   ============================================================ */
.hd-plan .card-hd{
  height:auto; min-height:27px; padding:6px 12px; align-items:center;
}

/* ============================================================
   20260914i · 组合决策资金行胶囊化（用户令：总资金+保存并胶囊/新增总现金+保存同款胶囊/
   市值+浮盈并带框胶囊/盈亏胶囊/动作删/持仓与目标等权胶囊迁入盈亏后）
   规格=999px 胶囊 + 白.04 玻璃底 + var(--line2) 框（同 hd-cash/eval-fold 胶囊家族）；
   信息段间分隔线切分；保存钮=主题令牌 --ac-text（随调色盘）。
   ============================================================ */
.hd-cash-row{ gap:8px; }
.hd-cash-grp{
  display:inline-flex; align-items:center; height:26px;
  border:1px solid var(--line2); background:rgba(255,255,255,.04);
  border-radius:999px; overflow:hidden; white-space:nowrap;
}
.hd-cash-lb{ font-size:10px; color:var(--txt3); padding:0 4px 0 12px; white-space:nowrap; line-height:24px; }
.hd-cash-in{
  height:24px; width:88px; background:transparent; border:none; outline:none;
  font-family:var(--mono); font-size:11px; color:var(--txt);
  padding:0 4px 0 2px; line-height:24px;
}
.hd-cash-in::placeholder{ color:var(--txt4); }
.hd-cash-sv{
  font-family:var(--mono); font-size:10px; line-height:1; color:var(--ac-text);
  background:rgba(var(--ac-rgb),.10); border:none; border-left:1px solid var(--line2);
  height:100%; padding:0 12px; cursor:pointer; white-space:nowrap;
  transition:background-color var(--mo-d1) var(--eo-out), color var(--mo-d1) var(--eo-out);
}
.hd-cash-sv:hover{ background:rgba(var(--ac-rgb),.18); color:var(--txt); }
.hd-ov-chip{ padding:0 4px; gap:0; }
.hd-ov-seg{
  font-size:10px; color:var(--txt3); padding:0 12px; white-space:nowrap;
  display:inline-flex; align-items:center; gap:4px;
}
.hd-ov-seg{
  font-size:10px; color:var(--txt3); padding:0 12px; white-space:nowrap;
  display:inline-flex; align-items:center; gap:4px; line-height:24px;
}
.hd-ov-seg + .hd-ov-seg{ border-left:1px solid var(--line2); }
.hd-ov-seg b{ font-family:var(--mono); font-size:11px; color:var(--txt); line-height:24px; }
.hd-ov-seg b.up{ color:var(--up); } .hd-ov-seg b.down{ color:var(--down); }
/* 20260915g 总资金自动算：只读总资金胶囊值 + 仓位/浮盈子标（随 seg 同基线小一号） */
.hd-cash-eq{ font-family:var(--mono); font-size:11px; color:var(--txt); padding:0 12px 0 2px; line-height:24px; }
.hd-ov-sub{ font-family:var(--mono); font-size:9.5px; color:var(--txt3); line-height:24px; }

/* ============================================================
   20260914k · 展开/收起控件全站统一为「组合决策」卡头式胶囊文字钮
   （用户令「所有的展开收起都改为组合决策这个·很多乱七八糟的设计都统一」·附两截图）
   覆盖：①shadow 三折叠行（影子层总览/账户锁定配置/与现行缺省差异）h3::after ▸/▾ 三角
   →胶囊「展开/收起」（::before content 随 .open 切换，原 2655 区规则就地改写）；
   ②shadow 已卖出历史/每日操作流水/容量观察 + data 数据校验明细 的 b-btn ghost sm → 系统 btn；
   ③data 五域分组组头 .tri ▾ → 右端胶囊钮（::before 随 .closed 切换，data.html 内嵌样式）；
   ④回测个股分析 人工评价折叠 ▶ 展开评价 → 行尾胶囊（eval-fold-tri，见下）。
   交互逻辑（localStorage 记忆/默认态/事件绑定）全部保留，仅视觉与文案统一。
   ============================================================ */
.eval-fold-h{ display:flex; align-items:center; gap:8px; }
.eval-fold-tri{
  font-family:var(--mono); font-size:10px; line-height:1; color:var(--txt2);
  border:1px solid var(--line2); background:rgba(255,255,255,.04); border-radius:999px;
  padding:3px 9px; transition:all var(--mo-d1) var(--eo-out);
}
.eval-fold-h:hover .eval-fold-tri{ color:var(--txt); border-color:var(--line3); background:rgba(255,255,255,.07); }

/* ══ 20260916w 卡头两行制·双半胶囊家族（老板 11:4x 设计令「双行四胶囊」）══
   行1=胶囊①代码|名称(点击跳通达信·失败复制代码)+胶囊②名次|持有天数+动作徽右对齐；
   行2=策略评分/买入/成本/市值盈利 四胶囊；现价不进卡头（实时价格行已有，防三处重复）；
   间距 8px 与 .hd-cards 同族（统一 spacing token 候「卡片间距统一标准」卡落 token 后接管） */
.hd-card-hd.hd-hd2{ display:flex; flex-direction:column; align-items:stretch; gap:6px; padding:6px 10px; }
.hd-hd-row{ display:flex; align-items:center; gap:8px; min-width:0; flex-wrap:wrap; }
.hd-hd-row .hd-sp{ flex:1 1 0; }
.hd-hd-row .hd-act-pill{ margin-left:auto; }
.hd-pill{
  display:inline-flex; align-items:stretch; flex:0 0 auto; max-width:100%;
  height:22px; border:1px solid rgba(255,255,255,.14); border-radius:999px;
  background:rgba(255,255,255,.04); overflow:hidden; white-space:nowrap;
}
.hd-pill>span{ display:inline-flex; align-items:center; padding:0 10px; font-size:11px; }
.hd-pill-l{ color:var(--ac-text,#e6b956); font-weight:700; font-family:var(--mono); border-right:1px solid rgba(255,255,255,.10); }
.hd-pill-r{ color:var(--txt2,#a6b2c4); }
.hd-pill-name{ font-family:inherit; font-weight:600; color:var(--txt,#e8ecf2); }
.hd-pill-neutral{ color:var(--txt3,#8fa3b8); }
.hd-pill-mono{ font-family:var(--mono); }
.hd-pill-full{ color:var(--txt2,#a6b2c4); }
.hd-pill-jump{ cursor:pointer; transition:border-color .12s, background .12s; }
.hd-pill-jump:hover{ border-color:var(--ac-text,#e6b956); background:rgba(255,255,255,.07); }

/* ══ 20260916y P1 毛玻璃+颗粒感 125% 系统缩放（≈1.775 非整数光栅）退化根治 ══
   病灶（管理员取证+20260916k 同病灶族）：颗粒/光晕挂 #term 底层，卡面质感全靠
   backdrop-filter 采样穿透——非整数光栅下 Chromium blur 瓦片采样失准=平板深灰
   （无光斑穿透无颗粒；IAB dpr1 整数光栅不可复现）。
   修=质感预烘焙到卡面自身（老板令方向①颗粒上卡面+②预烘焙光斑底）：
   background-image 层（颗粒+对角光斑渐变）与 backdrop-filter 解耦——光栅病态下
   质感仍在；blur 保留为健康光栅下的增强穿透（不做降级半径，k 轮已验 translateZ 对策）。
   ③ JSON 批量配置弹窗实底 #0b0f15 → 玻璃配方。覆盖面=玻璃卡全家族（矩阵见卡面）。 */
/* 20260918a 全站卡片平底化对齐选股页锚（老板令「智能选股所有卡片不黑也不发白·以此为锚审计全站修复」）：
   锚实测（#term.page-screening 立法页 L3609）=白 .043 平底·无 blur·无纹理；
   各页差异=grain 白噪+白斑渐变（本块 20260916y 预烘焙）+blur(20px) 穿透提亮背后 aurora 光斑
   （回测页四卡发白·本日三轮实验：撤白斑老板无感→深底老板嫌黑→定锚平底化）；
   修=全家族撤纹理撤模糊（白 .043 底保留=锚底色）·选股页自身立法（更高特异性）不受影响。 */
.card, .hd-card, .ws-cat, .ws-card, .hz-kpi, .hz-col, .b-kpi, .b-col{
  background-image: none;
  backdrop-filter: none; -webkit-backdrop-filter: none;
}
.bt-jsonpaste{
  background:
    var(--grain) repeat,
    linear-gradient(160deg, rgba(32,40,55,.90), rgba(13,17,24,.95));
  backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px);
  box-shadow:var(--sh-pop), inset 0 1px 0 rgba(255,255,255,.06);
}


/* ══ 20260916aa 卡片间距统一标准（老板 11:3x 令·影子页先行+全系统审计）══
   标准值=左侧导航栏右缘→页面内容间距（视觉 10px=.content 内距 8+边框 2）——沉淀 token --page-gap。
   影子页先行：.b-col 14px 节奏 + 「与现行缺省差异→账户净值」贴死（sh-fold 例外 mb:0）统一收编 token；
   全系统：#view/.pg-in 纵向节奏 8→token（含 20260916z 滚动条贴右缘的 .content 右距 0 保持不变）。 */
:root{ --page-gap:10px; }
#term[class*="page-"] #view{ gap:var(--page-gap); }
.pg-in{ gap:var(--page-gap); }
.page-shadow .b-wrap .b-col{ margin-bottom:var(--page-gap); }
.b-kpis{ margin-bottom:var(--page-gap); }

/* ══ 20260916ab 仓位指导：动作双半胶囊 + 仓位×市道堆叠柱状图（老板 11:1x 设计令）══ */
.hd-pos-capsule{
  display:inline-flex; align-items:stretch; margin-left:auto;
  border:1px solid var(--line2); border-radius:999px; overflow:hidden;
  height:22px; background:rgba(255,255,255,.04);
}
.hd-pos-capsule>span{ display:inline-flex; align-items:center; padding:0 11px; font-size:11px; font-weight:700; white-space:nowrap; }
.hd-pos-cap-l{ border-right:1px solid var(--line2); }
.hd-pos-cap-r{ border-left:none; }
/* 20260916al 柱状图二轮返工（老板 22:12 实拍令）：①容器左右补 --page-gap 间距（首柱不再贴缘）；
   ③比例数字走全站数字 token var(--mono)+tabular-nums、档位标签显式 var(--sans)——字体统一 */
/* 20260917e 老板四令：①上下部分隔线（仓位指导丨仓位与市道关系）+7深熊行与底部留边距 */
.hd-stage-chart{ margin-top:12px; padding:8px var(--page-gap,10px) 10px; border-top:1px solid var(--line); }
.hd-stage-chart-hd{ display:flex; align-items:baseline; gap:8px; margin-bottom:8px; }
.hd-stc-legend{ display:inline-flex; align-items:center; gap:5px; font-weight:400; letter-spacing:0; }
.hd-stc-legend i{ display:inline-block; width:9px; height:9px; border-radius:2px; }
.hd-stc-cols{ display:flex; align-items:stretch; gap:6px; }
.hd-stc-col{ flex:1 1 0; min-width:0; }
/* 二轮返工②：柱体+右侧竖排数值列 横排组合（数字从柱下移柱右侧·每柱对应） */
.hd-stc-main{ display:flex; align-items:center; justify-content:center; gap:5px; }
.hd-stc-stack{
  width:44px; height:72px; border:1px solid var(--line); border-radius:6px; overflow:hidden;
  display:flex; flex-direction:column; background:rgba(255,255,255,.02);
}
.hd-stc-seg{ width:100%; }
.hd-stc-seg.rest{ background:#3a4450; }
.hd-stc-seg.stock{ background:linear-gradient(90deg,#2fa9c0,#3ec6d9); }
.hd-stc-seg.low{ background:linear-gradient(90deg,#c73e48,#ff2d55); }
.hd-stc-lb{ margin-top:4px; font-family:var(--sans); font-size:10.5px; color:var(--txt3); text-align:center;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* 20260916am 三轮精修（老板 22:25 实拍令·数字标识）：数值列与柱同高同坐标系，
   每个数字绝对定位 top=对应段垂直中心（span translateY(-50%) 居中于该点）——
   零值段自然落边缘（敞口 0→柱顶·红低 0→柱底·不消失不错位）；
   DOM 序/视觉序自上而下=敞口→股票→红低（与柱内堆叠一致·二轮顺序修正）；
   字体 token/边距/柱形 44×72/金框/三色语义保持（al 二轮项不动） */
.hd-stc-vals{ position:relative; width:30px; height:72px; flex:0 0 auto;
  font-family:var(--mono); font-variant-numeric:tabular-nums; font-weight:700; font-size:10.5px;
  white-space:nowrap; }
.hd-stc-vals span{ position:absolute; left:0; transform:translateY(-50%); line-height:1; }
/* 20260916an 四轮微修（老板 23:39 实拍令·数字不破柱缘）：三轮的 translateY(-50%) 中心定位
   在零值段（top 0%/100%）让数字半高越出柱体——加 clamp 钳制：数字中心限定在
   [4.5px, 100%-4.5px]（9px 字号半高），数字盒恒在柱体内；零值段数字边缘恰贴齐
   柱顶/柱底缘线（与柱端平齐），非零段中心对齐不变；横向仍柱右侧不变 */
.hd-stc-col.cur .hd-stc-stack{ border-color:var(--ac-text,#e6b956);
  box-shadow:0 0 0 1px var(--ac-text,#e6b956) inset, 0 0 10px rgba(230,185,86,.25); }
.hd-stc-lb.cur{ color:var(--ac-text,#e6b956); font-weight:700; }

/* ══ 20260916ac 回测结果区自动补位铺满（老板 11:5x 设计令·调序令复序续作）══
   病灶=.bt-overview 网格两行无 grid-template-rows（行按内容收缩）——flex:1 撑起的 pane
   余高沉底=净值曲线/两子卡之下死空间（老板级视口实测残差 17px）。
   修=首行 minmax(240px,1fr)：chart+two 行吃掉全部余高（240 下限保可读性·20260916l 预算制同源），
   对照行 auto；空数据态同样铺满（行高与内容无关）。 */
#term.page-backtest .bt-overview{ grid-template-rows:minmax(240px,1fr) auto; }

/* ══ 20260916ag P1 双文字胶囊垂直对齐全站审计[需求_P1_双文字胶囊垂直对齐全站审计_选股行输入风格统一黑底·老板 22:3x 双设计令] ══
   需求1 病灶：双半胶囊两半字体不同（左=--mono 拉丁·右=--sans 中文回退雅黑），line-height:normal
   时两种字体行框度量不同（真页实测左右文字视觉中心漂移 0.4css px·125% 系统缩放下放大可见）——
   对齐规范沉淀：双半胶囊半区显式 line-height=盒高 22px（行框统一→文字沿同一基线排布，
   20260916m 顶栏 LIVE 条定高行框同先例）；全站审计双文字框组件=hd-pill/hd-pos-capsule 两族
   （b-chip-rg/b-stat 为单行混排、bt-strat-grp 右半为开关非文字、hd-asof 为行级 flex，均不涉） */
.hd-pill>span, .hd-pos-capsule>span{ line-height:22px; }
/* 需求2：智能选股控制行输入对齐持仓行黑底规范——背景 --well 黑井（原 rgba 白.04 玻璃底）、
   边框 --line2（与 .hd-in 同款）；圆角 r-ctl 两族本已统一；仅 .sc-ctrl 控制行域生效
   （参数中心/回测页等他处 sc-ctl 不扰），高度 26px 保持防控制行布局回归 */
.sc-ctrl select.sc-ctl, .sc-ctrl input.sc-ctl{ background:var(--well); border-color:var(--line2); }

/* 20260917a 持仓·盈亏胶囊三段式[老板直令「市值19,082 13.25×1400股 盈利538（2.9%）三段式胶囊」]：
   中段类（市值段与盈利段之间·双侧分隔线与 hd-pill-l 同族） */
.hd-pill-m{ border-left:1px solid rgba(255,255,255,.10); border-right:1px solid rgba(255,255,255,.10); }

/* 20260917c 仓位指导图例两行结构[老板直令「股票 39.6% · ¥58,726 / 目标 20% · ¥29,672 改为两行显示·包括敞口和红低」]：
   目标部分块级换行（行1=段名 实际占比 · ¥金额·行2=目标 X% · ¥金额），去「/」拼接 */
.hd-tsb-tgt{ display:block; margin-top:1px; padding-left:13px; }   /* 20260917e：行2 缩进对齐行1 色点后文字（股票对应目标） */

/* 20260917d 已清仓历史卡头汇总统计[老板直令「表头上加总盈亏/胜率/盈亏比/放飞率」]：
   与单行累计口径同源（Σ放飞腿+清仓腿）；盈亏比无亏损样本显 --；放飞率=放飞股数/总卖出股数 */
.hd-hist-stat{ font-size:10.5px; color:var(--txt3); white-space:nowrap; }
.hd-hist-stat b{ font-family:var(--mono); color:var(--txt); font-weight:700; }

/* ══ 20260918b UI卡三处（组合决策页·老板 10:0x 三令）══
   ①ACTIONS/候选表列宽自适应：table-layout:fixed+固定 th 宽 → 仓位%/通达信按钮被挤；
     改 auto+撤固定宽（td ellipsis 保留防溢出）；
   ②左右各半：hd-sub-main 66.667% → 1:1（仓位指导含 STAGE 图 vs 右列 ACTIONS+候选）；
   ③STAGE × POSITION 标题对齐 hd-sub-hd（12.5px/700+hd-en 9px）·原用全局 hd-t 14px 偏大。 */
.hd-plan-tbl6, .hd-plan-tbl5{ table-layout:auto; }
.hd-plan-tbl6 th:nth-child(n), .hd-plan-tbl6 td:nth-child(n),
.hd-plan-tbl5 th:nth-child(n), .hd-plan-tbl5 td:nth-child(n){ width:auto; }
.hd-plan-tbl6 td:last-child, .hd-plan-tbl5 td:last-child{ white-space:nowrap; }
.hd-sub-main{ flex:1 1 50%; }
.hd-plan-side{ flex:1 1 50%; }
.hd-stage-chart-hd .hd-t{ font-size:12.5px; font-weight:700; }
.hd-stage-chart-hd .hd-en{ font-size:9px; letter-spacing:.16em; margin-left:6px; }

/* 20260918c 柱状图收窄（老板 10:3x 实拍令「柱状图太宽了导致太挤」·布局 1:1 后半宽容器挤爆）：
   柱 44→30px·数字列 30→26px·间距收（72 高与数字 clamp 机制不动） */
.hd-stc-stack{ width:30px; }
.hd-stc-vals{ width:26px; }
.hd-stc-main{ gap:4px; }
.hd-stc-cols{ gap:5px; }


.hd-tsb-g{ display:inline-grid; grid-template-columns:max-content max-content; column-gap:5px; row-gap:1px; text-align:left; vertical-align:top; }
.hd-tsb-g .c1{ white-space:nowrap; color:var(--txt3); }
.hd-tsb-g .c2{ white-space:nowrap; }
.hd-tsb-g .ov{ color:var(--up); }
.hd-tsb-g .hd-tsb-tgt{ padding-left:0; }

/* 20260918e 标题/图例字号统一（老板怒斥修正·只动标题与图例·数据标签已回退原样）：
   图例「股票/红低/敞口」调小到与 POSITION GUIDE 的 hd-en（9px）同级 */
.hd-stc-legend{ font-size:9px; color:var(--txt4); letter-spacing:.1em; font-weight:400; }
.hd-stc-legend i{ width:8px; height:8px; }
/* 柱居中与档名对齐+侧面数字贴柱（老板令）：stack 视觉居中（负 margin 抵消数字列占位）·数字紧贴柱右缘 */
.hd-stc-main{ justify-content:center; gap:2px; }
.hd-stc-stack{ margin-right:calc(-22px - 2px); }
