
/* 本地数字字体：开源 D-DIN（DIN-PRO 风格），随项目部署，不依赖系统字体。 */
@font-face{font-family:"DIN-PRO Numbers";src:url("/assets/fonts/D-DIN.woff2") format("woff2");font-style:normal;font-weight:300 500;font-display:swap}
@font-face{font-family:"DIN-PRO Numbers";src:url("/assets/fonts/D-DIN-Bold.woff2") format("woff2");font-style:normal;font-weight:600 800;font-display:swap}
/* === 令牌层：完全对齐 style-3-mint.html === */
:root{
  --bg:#f4f5f3;--card:#ffffff;--card-soft:#f8f9f7;
  --ink:#111412;--ink2:#3c423e;--sub:#5d645f;--dim:#6b726d;--faint:#c3c8c2;
  --line:#e7e9e4;--line-strong:#d5d8d1;
  --mint:#0e7c4a;--mint-deep:#0a5c37;--mint-soft:#edf6f0;--mint-mid:#bcdcc9;
  /* 涨红/跌绿/琥珀此前对页面底 #f4f5f3 或各自淡色 chip 底低于 AA 4.5（up 4.0/3.88、dn 4.22/4.12、amber 3.7）；
     各加深一档到"最鲜活且三种底(card/bg/对应 soft)均 ≥4.5"：up #c43a3a / dn #0f7a45 / amber #8f6515。soft 底不变。
     由 tests/rule.test.mjs 用 WCAG 公式实算锁住（锁阈值不锁具体 hex）。2026-09-24 走查。 */
  --up:#c43a3a;--up-soft:#fceeee;--dn:#0f7a45;--dn-soft:#e8f5ee;
  --blue:#3a6ea8;--blue-soft:#eef3f9;--violet:#6d5bc7;--violet-soft:#f2f0fc;
  --amber:#8f6515;--amber-soft:#f9f2e2;--amber-line:#ead9b4;
  --acc-line:#c8e6d4;             /* 强调区描边（KPI 读数区 / 选中态） */
  --gray:#8a847c;--gray-soft:#f1eee9;   /* 横盘 / 中性 */
  --info:#5b7391;--info-soft:#edf1f5;   /* 中性信息 */
  --shadow-sm:0 1px 2px rgba(17,20,18,.05),0 2px 8px -2px rgba(17,20,18,.05);
  --shadow-md:0 1px 2px rgba(17,20,18,.05),0 16px 40px -24px rgba(17,20,18,.18);
  --r-md:14px;--r-lg:18px;--r-xl:22px;


  /* ══════════ Design Tokens v2 · 墨绿精密仪器 ══════════ */
  /* 表面层级（5 档） */
  --card-hover:#fafbfa;          /* 卡片悬浮微亮 */
  --card-inset:#f1f3ef;          /* 卡内嵌套块 */
  --hover-bg:#f7faf4;            /* 行/项 hover（淡松绿，与强调色同族） */
  --active-bg:#e8ebe4;           /* 按压态 */
  --disabled-bg:#e5e8e1;         /* 禁用底 */
  /* 分隔线层级（3 档） */
  --hairline:#eef0ea;            /* 表格内行线（最浅） */
  /* 字号阶梯 */
  --fs-display:28px; --fs-h1:18px; --fs-h2:15px; --fs-h3:13.5px;
  --fs-body:13px; --fs-small:12px; --fs-caption:11px; --fs-micro:10px;
  /* 数字专用字号 */
  --fs-num-xl:28px; --fs-num-lg:22px; --fs-num-md:14.5px; --fs-num-sm:12.5px;
  /* 字重 */
  --w-4:400; --w-5:500; --w-6:600; --w-7:700;
  /* 字距 / 行高 */
  --ls-caps:0; --ls-num:0;
  --lh-tight:1.2; --lh-snug:1.4; --lh:1.6; --lh-loose:1.75;
  /* 动效 */
  --dur-fast:120ms; --dur:180ms; --dur-slow:280ms;
  --ease:cubic-bezier(.2,0,0,1);
  /* 阴影层级（4 档） */
  --shadow-xs:0 1px 2px rgba(17,20,18,.05);
  --shadow-lift:0 2px 4px rgba(17,20,18,.04),0 12px 32px -16px rgba(17,20,18,.16);
  --shadow-pop:0 4px 12px rgba(17,20,18,.06),0 24px 56px -24px rgba(17,20,18,.22);
  --focus-ring:2px solid var(--ink);
}

/* === 基础 === */
html{background:var(--bg);scroll-behavior:smooth}
body{
  font-family:var(--sans) !important;
  background:var(--bg) !important;
  color:var(--ink) !important;font-size:13px !important;line-height:1.5 !important;
  font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1;padding:0 var(--sp-6) var(--sp-7) !important;
  max-width:1440px;margin:0 auto;min-width:0 !important;
}
::selection{background:var(--mint-mid)}
:focus-visible{outline:2.5px solid var(--ink);outline-offset:2px;border-radius:8px}
/* 数字承载元素统一使用本地 D-DIN（DIN-PRO 风格，随项目部署）；中文标签仍用苹方/系统字体，避免拉丁字体破坏中文排版。 */
:is(table,.pill,.phase,.tag,.qtag,.summary,.envcell,.market-index,.pricebox,.r2meta,.r2legend,.r2-num,.rbprice,.rb-score,.zpct,.dp,.rv-m,.rv-row,.rv-date,.rv-ret,.gm,.gatenote,.ba-badge,.ba-meta,.ba-concl,.ba-cmd,.ba-lock,.ba-odds,.ba-chips,.chipprices,.chiplegend,.chipkv,.pct,#cd,#poolMeta,#zoneAt,#buildTag){font-family:var(--num);font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1}
input[inputmode="decimal"],input[type="number"]{font-family:var(--num);font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:99px}
::-webkit-scrollbar-thumb:hover{background:var(--dim)}

/* === 刊头 .top === */
.top{
  position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:8px;
  padding:12px 24px !important;margin:0 -24px 22px !important;
  background:rgba(243,244,241,.86) !important;
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-bottom:0 !important;border-radius:0 !important;
  box-shadow:none !important;
}
.top h1{font-size:14px !important;font-weight:600;letter-spacing:.3px;color:var(--ink) !important}
/* 雷达 Logo（26-09-13）：内联 SVG 雷达图形，尺寸与标题文字同高，不再是大色块 */
.top h1 .logo{
  width:16px !important;height:16px !important;color:var(--mint) !important;
  vertical-align:-2px !important;background:none !important;box-shadow:none !important;
  border-radius:0 !important;place-items:normal;font-size:0;
}
.top h1::after{content:"ULTRA-SHORT RADAR";display:block;font-size:10px;color:var(--dim);letter-spacing:1.6px;font-weight:400;margin-left:10px}
.top .right{gap:10px !important;color:var(--dim) !important;font-size:12.5px !important}

/* === 胶囊 .pill === */
.pill{
  padding:5px 12px !important;border-radius:99px !important;
  font-size:11.5px !important;color:var(--sub) !important;
  background:transparent !important;border:none !important;
  font-weight:400 !important;letter-spacing:0 !important;text-transform:none !important;
  transition:.15s;
}
.pill:hover{color:var(--ink) !important;background:var(--card) !important}
.pill.live{background:var(--ink) !important;color:#fff !important;font-weight:500 !important;border:none !important}
.pill.wait{background:var(--amber-soft) !important;color:var(--amber) !important;border:none !important}
.pill.off{color:var(--dim) !important;background:transparent !important;border:none !important}

/* === 按钮：三级尺寸规范；所有实心蓝按钮统一白字与完整状态 === */
/* M（中号）= 默认 */
button{
  background:var(--ink) !important;color:#fff !important;
  border:none !important;border-radius:99px !important;
  padding:var(--sp-1) var(--sp-3) !important;font-size:11.5px !important;font-weight:500 !important;
  min-height:28px !important;transition:.15s;line-height:1.5;
}
button:hover{background:#000 !important;color:#fff !important;transform:translateY(-1px);opacity:1 !important}
button:active{background:#33312d !important;color:#fff !important;transform:translateY(0)}
button:focus-visible{outline:2px solid var(--ink) !important;outline-offset:2px}
button:disabled{background:var(--faint) !important;color:var(--sub) !important;opacity:1 !important;cursor:not-allowed !important;pointer-events:none;transform:none}
/* L（大号）= 主操作 */
#refreshBtn,.batch-btn,.ba-toolbar button,.ocr-foot button:not(.ghost),
#syncPanel .sbtns button:not(.ghost){
  padding:7px 16px !important;font-size:12.5px !important;min-height:32px !important;
}
/* S（小号）= 辅助/内联 */
.snap-btn,.p2-actions button,.ba-head button,#syncPanel .sbtns button.ghost,
#syncPanel .sync-undo button,.del{
  padding:3px 10px !important;font-size:10.5px !important;min-height:22px !important;
}
#refreshBtn{background:var(--card) !important;color:var(--ink) !important;border:1px solid var(--line-strong) !important;border-radius:99px !important}
#refreshBtn:hover{background:var(--card-soft) !important;color:var(--ink) !important;border-color:var(--ink) !important}
#refreshBtn:active{background:#000 !important;color:#fff !important;border-color:#000 !important}
#refreshBtn:disabled{background:var(--card-soft) !important;color:var(--faint) !important;border-color:var(--line) !important}
/* 云同步 / 导出配置 / 导入配置 / 恢复默认池：与「手动刷新」同款白底胶囊按钮（26-09-13）
   ⚠ .batch-btn 也带 icon-text 类，但它不在本次改动范围内，必须 :not() 排除，不能顺手改掉 */
#syncBtn,.bar .icon-text:not(.batch-btn){
  background:var(--card) !important;color:var(--ink) !important;border:1px solid var(--line-strong) !important;border-radius:99px !important;
  padding:6px 14px !important;font-size:12px !important;min-height:32px !important}
#syncBtn:hover,.bar .icon-text:not(.batch-btn):hover{background:var(--card-soft) !important;color:var(--ink) !important;border-color:var(--ink) !important}
#syncBtn:active,.bar .icon-text:not(.batch-btn):active{background:#000 !important;color:#fff !important;border-color:#000 !important}
#syncBtn:disabled,.bar .icon-text:not(.batch-btn):disabled{background:var(--card-soft) !important;color:var(--faint) !important;border-color:var(--line) !important}

/* === 输入框 === */
input{
  background:var(--card) !important;border:1px solid var(--line) !important;
  border-radius:99px !important;padding:5px 12px !important;
  font-size:11.5px !important;color:var(--ink) !important;
  box-shadow:var(--shadow-sm);
}
input:focus{border-color:var(--line-strong) !important;outline:none !important;box-shadow:var(--shadow-sm),0 0 0 3px rgba(14,124,74,.14) !important}
input::placeholder{color:var(--dim) !important}

/* 个股池工具条的输入与操作控件采用同一高度，避免主按钮与搜索框视觉错位。 */
.bar input,.bar button{height:32px !important;min-height:32px !important}

/* === 卡片 .zcard / .zone === */
.zcard,.envfull{
  background:var(--card) !important;
  border:1px solid var(--line) !important;
  border-radius:var(--r-lg) !important;
  padding:20px 24px !important;
  box-shadow:var(--shadow-sm) !important;
  margin-bottom:20px !important;
  transition:.18s;position:relative;overflow:hidden;
}
.zcard:hover{transform:translateY(-2px);box-shadow:var(--shadow-md) !important}
.zcard.hot{background:var(--card) !important;border-color:var(--line) !important;box-shadow:var(--shadow-sm) !important;color:var(--ink) !important;border-left:3px solid var(--mint-mid) !important}
.zcard.hot h4,.zcard.hot .zr1 b,.zcard.hot .p-now{color:var(--ink) !important}
.zcard.hot::after{content:none}
.zone{background:transparent !important;border:none !important;box-shadow:none !important;padding:0 !important;margin-bottom:24px !important}
.zcard h4{font-size:15px !important;font-weight:600;letter-spacing:-.1px;color:var(--ink) !important;margin-bottom:14px !important}

/* === Q 标签 === */
.qtag{
  display:inline-flex;align-items:center;
  width:22px;height:22px;border-radius:8px !important;
  background:var(--ink) !important;color:#fff !important;
  font-size:10.5px !important;font-weight:600 !important;
  padding:0 !important;margin-right:8px !important;
  border:none !important;justify-content:center;
}

/* === 结论区标题 === */
.zone-head{margin-bottom:16px !important;padding-bottom:0 !important;border-bottom:none !important}
.zone-head b{font-size:15px !important;font-weight:600;letter-spacing:-.1px;color:var(--ink) !important}
.zone-head b::before{content:none !important}
.zone-head .sub{color:var(--dim) !important;font-size:11.5px !important;min-width:0 !important}

/* === Banner === */
.banner{border-radius:var(--r-md) !important;padding:10px 14px !important;font-size:12px !important;font-weight:500 !important;margin-bottom:10px !important;border:1px solid !important}
.banner.bad{color:var(--up) !important;border-color:var(--up-soft) !important;background:var(--up-soft) !important}
.banner.warn{color:var(--amber) !important;border-color:var(--amber-line) !important;background:var(--amber-soft) !important}
.banner.good{color:var(--dn) !important;border-color:var(--dn-soft) !important;background:var(--dn-soft) !important}

/* === 表格 === */
.tblwrap{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-lg) !important;box-shadow:var(--shadow-sm) !important;overflow:auto !important;margin-bottom:16px !important}
table{background:transparent !important;border:none !important;border-radius:0 !important}
th,td{padding:14px 16px !important;border-bottom:1px solid var(--hairline) !important;font-size:12.5px !important;white-space:nowrap}
th{
  font-size:10.5px !important;font-weight:600;color:var(--dim) !important;
  text-align:left !important;letter-spacing:.3px;
  background:var(--card-soft) !important;border-bottom:1px solid var(--line) !important;
}
th:hover{color:var(--ink) !important}
th.sort-active{color:var(--mint-deep) !important;background:var(--mint-soft) !important}
.sort-arrow{color:var(--mint) !important}
tbody tr{transition:background .12s}
tbody tr:last-child td{border-bottom:0 !important}
tr:hover td{background:var(--hover-bg) !important}
#tbl tbody tr:first-child td{background:transparent !important}
#tbl tbody tr:first-child td:first-child{box-shadow:none}

/* === 涨跌色 === */
.up,.pos{color:var(--up) !important}
.down,.neg{color:var(--dn) !important}
.cal-tbl .pos{color:var(--up) !important}
.cal-tbl .neg{color:var(--dn) !important}
.rv-row .rv-out.w{color:var(--up) !important}
.rv-row .rv-out.s{color:var(--dn) !important}

/* === 标签 === */
.tag{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px !important;border-radius:6px !important;
  font-size:11px !important;font-weight:500 !important;
  background:var(--card-soft) !important;border:1px solid var(--line) !important;color:var(--sub) !important;
}
.tag.x{background:var(--up-soft) !important;color:var(--up) !important;border-color:transparent !important}
/* 题材/分类标签 = 中性信息：强调靠墨色与字重，不占用语义色，也不占用强调色 */
.tag.t{background:var(--card-inset) !important;color:var(--ink) !important;border-color:var(--line) !important;font-weight:600 !important}
.tm-now{background:var(--blue-soft) !important;color:var(--blue) !important;border-color:transparent !important}
.tm-dip{background:var(--amber-soft) !important;color:var(--amber) !important;border-color:transparent !important}
.tm-brk{background:var(--violet-soft) !important;color:var(--violet) !important;border-color:transparent !important}
.r2t .ws-early{background:var(--blue-soft) !important;color:var(--blue) !important;border-color:transparent !important}
.r2t .ws-mid{background:var(--up-soft) !important;color:var(--up) !important;border-color:transparent !important}
.r2t .ws-late{background:var(--amber-soft) !important;color:var(--amber) !important;border-color:transparent !important}
.r2t .ws-flat{background:#f0f1ee !important;color:var(--ink2) !important;border-color:transparent !important}
.r2t .ws-down{background:var(--dn-soft) !important;color:var(--dn) !important;border-color:transparent !important}
/* 市场阶段：严格红涨绿跌（A股口径）。上行阶段用红、下行阶段用绿，强度靠底色与描边深浅区分，中性态用灰 */
.phase{
  background:var(--card-soft) !important;border:1px solid transparent !important;
  color:var(--ink2) !important;border-radius:6px !important;
  font-size:11px !important;font-weight:600 !important;padding:2px 10px !important;
}
.phase.p-crash{background:var(--dn-soft) !important;color:var(--dn) !important;border-color:rgba(18,134,79,.28) !important}  /* 急跌·最深下行 */
.phase.p-bear{background:var(--card-soft) !important;color:var(--dn) !important;border-color:rgba(18,134,79,.18) !important} /* 阴跌·次深下行 */
.phase.p-flat{background:var(--card-inset) !important;color:var(--ink2) !important;border-color:var(--line) !important}      /* 横盘·中性 */
.phase.p-bull{background:var(--up-soft) !important;color:var(--up) !important;border-color:rgba(214,69,69,.2) !important}   /* 上涨 */
.phase.p-mania{background:var(--up-soft) !important;color:var(--up) !important;border-color:rgba(214,69,69,.45) !important} /* 狂热·加速上涨 */

/* === r2t 打分表 === */
.r2wrap{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-lg) !important;box-shadow:var(--shadow-sm) !important;overflow-x:auto !important}
.r2t{background:transparent !important}
.r2t th,.r2t td{border-bottom:1px solid var(--hairline) !important;padding:12px 12px !important}
.r2t th{background:var(--card-soft) !important;color:var(--dim) !important;font-size:10.5px !important;font-weight:600;letter-spacing:.3px;border-bottom:1px solid var(--line) !important}
.r2t th:nth-child(1),.r2t td:nth-child(1),.r2t th:nth-child(2),.r2t td:nth-child(2){background:var(--card-soft) !important}
.r2t td:nth-child(1),.r2t td:nth-child(2){background:var(--card) !important}
.r2wrap tr:hover td:nth-child(1),.r2wrap tr:hover td:nth-child(2){background:var(--hover-bg) !important}
.r2-num{font-weight:600 !important;font-size:12.5px !important;color:var(--ink) !important}
.r2harsh{background:var(--up-soft) !important;border:1px solid rgba(214,69,69,.2) !important;border-radius:var(--r-md) !important;color:var(--up) !important;padding:10px 14px !important}
.r2meta{color:var(--dim) !important;font-size:11.5px !important}
.r2meta b{color:var(--ink) !important}
.r2legend{background:var(--card-soft) !important;border-left:3px solid var(--mint) !important;color:var(--sub) !important;border-radius:0 10px 10px 0}
.r2rebound{border-top:1px solid var(--line) !important}
.r2pick{
  background:var(--card-soft) !important;border:1px solid var(--line) !important;
  border-radius:var(--r-lg) !important;padding:20px 22px !important;
  box-shadow:var(--shadow-sm) !important;position:relative;overflow:hidden;
  transition:.18s;
}
.r2pick::before{content:none !important}
.r2pick::after{content:none}
.r2pick:hover{transform:translateY(-2px);box-shadow:var(--shadow-md) !important}
.r2pick .zr1 b{font-size:14.5px !important;font-weight:600;letter-spacing:-.1px;color:var(--ink) !important}
.p-line .p-now{font-size:23px !important;font-weight:600;letter-spacing:-.6px;color:var(--ink) !important}
.p-line .pl-lab{color:var(--dim) !important;font-size:11.5px}

/* === 价格芯片 === */
.pricebox .kv2{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:10px !important;padding:6px 11px !important}
.pricebox .kv2:hover{border-color:var(--line-strong) !important;background:var(--card) !important}
.pricebox .kv2 span{color:var(--dim) !important;font-size:11px}
.pricebox .kv2 b{color:var(--ink) !important}
.pricebox .kv-buy{background:var(--card-soft) !important;border-color:var(--line) !important;border-left:2px solid var(--mint-mid) !important}
.pricebox .kv-buy b{color:var(--ink) !important}

/* === 排行 === */
.cgrid3{gap:16px !important}
.q3rank{color:var(--ink) !important;font-weight:600}
.q3name{color:var(--ink) !important}
.q3code{color:var(--dim) !important}
.q3score{color:var(--ink) !important;font-weight:600;font-size:14.5px;letter-spacing:-.2px}
.q3price{color:var(--ink2) !important}
.q3row{border-bottom:1px solid var(--hairline) !important}
.q3list{column-rule:1px solid var(--line) !important}
.zitem{border-bottom:1px solid var(--hairline) !important}
.zitem .zr1{color:var(--ink2) !important}
.zitem .zr1 b{color:var(--ink) !important;font-weight:600}
.zitem .zrr{color:var(--dim) !important}
.zitem .zr1 .dp{background:var(--card-soft) !important;color:var(--dim) !important;border:1px solid var(--line);border-radius:6px;padding:1px 6px}
.zrow{border-bottom:1px solid var(--hairline) !important}
.zrow .idx{color:var(--ink) !important;font-weight:600}

/* === 验证闭环（26-10-09 股民化改版：三级层级重排 + 字号按 DESIGN §3.1 取档） ===
   一级 4 张结果卡：数字用 --fs-num-xl(28px)，字距用 --ls-num(-.2px)，底色 --mint-soft + --acc-line 边（DESIGN §5.4）
   二级 6 张执行/风险卡：数字 --fs-num-lg(22px)
   三级 .rv-mini 文字条：不做成卡片，只做一条虚线说明
   标签一律允许折行，绝不出现"日K模拟净收益（扣…"这种被省略号截掉的读法 */
.rv-kpi .rv-m,.rv-m,.rv-mini .rv-m{
  background:var(--card-soft) !important;border:1px solid var(--line) !important;
  border-radius:var(--r-md) !important;
}
.rv-kpi .rv-m{padding:10px 13px !important;background:var(--mint-soft) !important;border-color:var(--acc-line) !important}
.rv-m span{color:var(--sub) !important;font-size:11px !important;font-weight:500;letter-spacing:0;text-transform:none;white-space:normal;line-height:1.3}
/* 数字字号一律在「Unified Visual Spec v2 · 数字族」那一层定档（DESIGN §6.4：组件层不抢字号），
   本块只定颜色。原先这里也写一遍 font-size，结果被后写的统一层覆盖，
   两级指标的数字实际同大——层级白搭，且留下两条读不出效果的死规则。 */
.rv-m b{color:var(--ink) !important}
/* 红涨绿跌：仅带 up/down 方向的收益类数字上色（笔均扣费后/扣费前/赚时亏时等），率值与计数保持中性 */
.rv-m b.up,.rv-kpi .rv-m b.up,.rv-stats .rv-m b.up{color:var(--up) !important}
.rv-m b.down,.rv-kpi .rv-m b.down,.rv-stats .rv-m b.down{color:var(--dn) !important}
.rv-m .rv-sub{color:var(--dim) !important;font-size:10.5px !important}
.rv-lede{color:var(--sub) !important}
.rv-lede b{color:var(--ink) !important}
.rv-mini{border:1px dashed var(--line-strong) !important;background:var(--card-soft) !important;color:var(--dim) !important}
.rv-mini b{color:var(--ink2) !important}
.rv-fn{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:var(--r-md) !important;padding:12px 14px !important}
.rv-fallback{color:var(--amber) !important}
.rv-fallback b{color:var(--ink) !important}
.rv-src{border:1px solid var(--line) !important;color:var(--dim) !important;background:var(--card) !important;border-radius:6px}
.rv-details{border-top:1px solid var(--line) !important}
.rv-row{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:10px !important}
.rv-row:hover{background:var(--hover-bg) !important;border-color:var(--line-strong) !important}
.rv-row .rv-out{font-size:11px;font-weight:600}
.rv-row .rv-name{color:var(--ink) !important;font-weight:600}
.rv-row .rv-date{color:var(--dim) !important}
.rv-row .rv-ret{color:var(--ink) !important;font-weight:600}
.rv-row .rv-ext{color:var(--dim) !important}
.rv-sec{color:var(--ink) !important;font-weight:600;font-size:14px;margin:12px 0 6px !important}
.rv-sec::before{content:none !important}
/* 统计表一张一张通栏软底卡：表头 --dim、行线 --hairline，"怎么看"用次级灰但不糊成一片 */
.rv-table-block{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:var(--r-inner) !important;padding:10px 12px 6px !important}
.rv-how{color:var(--dim) !important}
.cal-tbl{background:transparent !important;border:none !important}
.cal-tbl th,.cal-tbl td{border-bottom:1px solid var(--hairline) !important;padding:8px 10px !important;color:var(--ink2)}
.cal-tbl th{color:var(--dim) !important;font-size:10.5px !important;font-weight:600;border-bottom:1px solid var(--line) !important}
.cal-tbl tbody tr:hover{background:var(--hover-bg) !important}
.rv-scenario,.p2-lab{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-md) !important}
.rv-scenario summary,.p2-lab>summary,.rv-scenario .rv-flat-title,.p2-lab>.rv-flat-title{color:var(--ink) !important;font-weight:600;font-size:13px}
.rv-scenario-table th,.rv-scenario-table td{border-top:1px solid var(--hairline) !important}
.rv-scenario-table th{color:var(--dim) !important;font-size:10.5px !important}
.rv-scenario-detail-grid span{background:var(--card-soft) !important;color:var(--dim) !important;border:1px solid var(--line);border-radius:8px}
.rv-scenario-detail-grid b{color:var(--ink) !important}
.p2-table th,.p2-table td{border-bottom:1px solid var(--hairline) !important}
.p2-table th{color:var(--dim) !important}

/* === 决策 gatebar === */
.gatebar{border-radius:var(--r-md) !important;padding:10px 14px !important;border:1px solid var(--line) !important;box-shadow:var(--shadow-sm) !important;background:var(--card) !important;gap:6px !important}
.gatebar.go{background:var(--dn-soft) !important;border-color:rgba(18,134,79,.2) !important}
.gatebar.care{background:var(--amber-soft) !important;border-color:var(--amber-line) !important}
.gatebar.stop{background:var(--up-soft) !important;border-color:rgba(214,69,69,.2) !important}
.gatebar.go .gl{color:var(--dn) !important;font-weight:600;font-size:14px}
.gatebar.care .gl{color:var(--amber) !important;font-weight:600;font-size:14px}
.gatebar.stop .gl{color:var(--up) !important;font-weight:600;font-size:14px}
.gatebar .gw{color:var(--dim) !important;font-size:10px !important}
.gm{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:var(--r-md) !important;padding:12px 14px !important}
.gm span{color:var(--sub) !important;font-size:11px !important;font-weight:500;text-transform:none;letter-spacing:0}
.gm b{font-size:24px !important;font-weight:600;color:var(--ink) !important;letter-spacing:-.5px}
.gm.up b{color:var(--up) !important}
.gm.down b{color:var(--dn) !important}
.gatenote{color:var(--dim) !important}
.gatenote.warn{color:var(--amber) !important}
.holdform{border-top:0 !important}
.holdform input{background:var(--card) !important;border:1px solid var(--line) !important;color:var(--ink) !important;border-radius:10px !important}
.holdform button{background:var(--card) !important;border:1px solid var(--line) !important;color:var(--ink) !important;border-radius:99px !important;padding:6px 14px !important;font-size:12px !important;font-weight:500 !important}
.holdform button:hover{border-color:var(--line-strong) !important;background:var(--card-soft) !important}
.holdverdict{font-size:18px !important;font-weight:600}
.holdverdict.v-stop{color:var(--up) !important}
.holdverdict.v-reduce{color:var(--amber) !important}
.holdverdict.v-hold{color:var(--dn) !important}
.holdverdict.v-add{color:var(--up) !important}
.holdladder li{border-bottom:1px solid var(--hairline) !important;color:var(--ink2) !important}

/* === 价位芯片 / 检查 / 筹码 === */
.lvchip{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:6px !important;color:var(--ink2) !important;padding:2.5px 8px !important;font-size:10.5px !important;font-weight:500}
.lvchip.sup{border-color:#b5e8c4 !important;color:#177a3e !important;background:#f0fbf3 !important}
.lvchip.res{border-color:#f3c1c3 !important;color:#c0353a !important;background:#fdf1f1 !important}
.lvchip i{color:var(--dim) !important}
.chk{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:6px !important;color:var(--sub) !important;padding:2.5px 8px !important;font-size:10.5px !important}
.chk.hit{color:var(--amber) !important;border-color:var(--amber-line) !important;background:var(--amber-soft) !important}
.chk.safe{color:var(--dn) !important;border-color:rgba(18,134,79,.3) !important;background:var(--dn-soft) !important}
.gchip{padding:2.5px 8px !important;border-radius:6px !important;border:1px solid var(--line) !important;font-size:10.5px !important;font-weight:500}
/* 逆势反弹的安全闸标签：现在只渲染「未过」(.g-bad 红底红字) 与「缺数据」(.g-na 灰底)。
   ——26-09-14 用户最终要求："去掉所有的通过标签展示，都通过了，展示就没有意义了"，
   所以通过态根本不出现在 DOM 里（见 rebItemHtml 的 gchip），四项全通过时整行连容器一起不渲染。
   .g-ok 这条保留：它是「通过态」在站内的唯一样式定义（白底黑字，对齐 #refreshBtn 规范），
   当前没有实例，若日后别处需要展示通过态，直接用 .gchip.g-ok 即可，不必重新试色。 */
.gchip.g-ok{color:var(--ink) !important;background:var(--card) !important;border-color:var(--line-strong) !important}
.gchip.g-bad{color:var(--up) !important;background:var(--up-soft) !important;border-color:rgba(214,69,69,.2) !important}
.gchip.g-na{color:var(--dim) !important;background:var(--card-soft) !important;border-color:var(--line) !important}
.chipbar{background:var(--line) !important}
.chipbar.win{background:var(--up) !important}
.chipbar.lose{background:var(--dn) !important}
.chipaxis{color:var(--dim) !important}
.chipkv span{background:var(--card-soft) !important;border:1px solid var(--line) !important;color:var(--sub) !important;border-radius:8px}
.chipkv .warn{border-color:rgba(214,69,69,.3) !important;color:var(--up) !important;background:var(--up-soft) !important}
.decblk{border-top:1px solid var(--line) !important}
.decblk-t{color:var(--dim) !important;font-size:11px !important;font-weight:600;letter-spacing:.5px;text-transform:none}
.probwhy{color:var(--sub) !important}
.probwhy details>summary{color:var(--ink) !important;font-weight:600}
.probwhy .pwi.plus b{color:var(--up) !important}
.probwhy .pwi.minus b{color:var(--dn) !important}

/* === 环境卡 === */
/* 26-09-14：两段改上下后，分隔线由左竖线改为顶边横线。这条 !important 的左竖线必须显式改成 0 ——
   否则它会盖住基础层刚改好的横向分隔，在下段左边画出一条悬空的竖线（手机单列时尤其明显）。 */
.envsec+.envsec{border-left:0 !important;border-top:1px solid var(--line) !important;padding-left:0}
.envsec-t,.envgrp-t{color:var(--dim) !important;font-size:11px !important;font-weight:600;letter-spacing:.5px;text-transform:none}
.envcell .el{color:var(--dim) !important;font-size:11px !important}
.envcell .ev{color:var(--ink) !important;font-weight:600 !important}
.q1-state{background:var(--card-soft) !important;color:var(--ink) !important;border:1px solid var(--line) !important;border-left:3px solid var(--mint-mid) !important;border-radius:var(--r-md) !important;padding:10px 14px !important;font-size:12.5px !important;font-weight:600 !important}
.q1-state.good{background:var(--dn-soft) !important;color:var(--dn) !important;border-color:rgba(18,134,79,.2) !important}
.q1-state.bad{background:var(--up-soft) !important;color:var(--up) !important;border-color:rgba(214,69,69,.2) !important}
.phase-detail{color:var(--sub) !important;border-bottom:1px solid var(--line) !important;font-size:11.5px !important}
.phase-detail b{color:var(--ink) !important;font-weight:600}

/* === 市场指数 === */
.market-index{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:var(--r-md) !important}
.market-index-name{color:var(--dim) !important;font-size:11px !important;font-weight:500;text-transform:none;letter-spacing:0}
.market-index-price{color:var(--ink) !important;font-weight:600;font-size:17px !important;letter-spacing:-.3px}
.market-index-meta{color:var(--dim) !important}
.market-index-meta .amount{color:var(--ink2) !important;font-weight:600}
.market-breadth{border-top:1px solid var(--line) !important;color:var(--dim) !important}
.market-breadth b{color:var(--ink) !important}

/* === 摘要 / 页脚 === */
.summary{border-radius:var(--r-lg) !important;padding:18px 24px !important;font-size:12.5px !important;line-height:1.7 !important;background:var(--card) !important;border:1px solid var(--line) !important;box-shadow:var(--shadow-sm) !important}
.summary b{color:var(--ink) !important;font-weight:600;font-size:14px !important}
.foot{color:var(--dim) !important;font-size:11px !important;border-top:0 !important;padding-top:14px !important;margin-top:24px !important}
.foot-line b{color:var(--ink) !important;font-weight:600}
.foot-line b::before{content:none !important}
.fn{color:var(--dim) !important;font-size:11px !important;border-top:1px solid var(--line) !important;padding-top:10px !important;margin-top:12px !important}
.fn2{color:var(--faint) !important;font-size:10.5px !important}

/* === 搜索建议 / 同步面板 / OCR / toast === */
#sug{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-md) !important;box-shadow:var(--shadow-md) !important}
#sug div{border-bottom:1px solid var(--hairline);color:var(--ink)}
#sug div:last-child{border-bottom:none}
#sug div:hover{background:var(--hover-bg) !important;color:var(--ink)}
#syncPanel{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-lg) !important;box-shadow:var(--shadow-md) !important}
#syncPanel .st{color:var(--sub) !important}
#syncPanel .st b{color:var(--ink) !important}
#syncPanel .sync-health{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:10px !important}
#syncPanel .sync-health b{color:var(--ink) !important}
#syncPanel .sync-health span{color:var(--dim) !important}
#syncPanel .sync-health.ok .sync-dot{background:var(--dn)}
#syncPanel .sync-health.pending .sync-dot{background:var(--amber)}
#syncPanel .sync-health.fail .sync-dot{background:var(--up)}
#syncPanel .sync-health.conflict{background:var(--amber-soft) !important;border-color:var(--amber-line) !important}
#syncPanel .sync-undo{background:var(--amber-soft) !important;border-color:var(--amber-line) !important;color:var(--amber) !important}
#syncPanel .sync-undo b{color:var(--ink) !important}
#syncPanel .sbtns button.ghost,#syncPanel .sync-undo button.ghost{background:var(--card) !important;color:var(--sub) !important;border:1px solid var(--line) !important}
.del{background:#fff !important;color:var(--ink) !important;border:none !important;box-shadow:0 1px 3px rgba(17,20,18,.12);min-width:18px !important;min-height:18px !important;width:18px;height:18px;padding:0 !important;font-size:10px !important;border-radius:50% !important;display:inline-flex;align-items:center;justify-content:center;margin-left:12px;vertical-align:middle;line-height:1}
.del:hover{background:var(--up-soft) !important;color:var(--up) !important;box-shadow:0 1px 4px rgba(214,69,69,.15)}
.ocr-modal{background:rgba(17,20,18,.35) !important}
.ocr-box{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-xl) !important;box-shadow:var(--shadow-md) !important}
.ocr-head,.ocr-foot{border-color:var(--line) !important}
.ocr-head b{color:var(--ink) !important;font-weight:600}
.ocr-close{color:var(--dim) !important}
.ocr-close:hover{color:var(--ink) !important}
.ocr-tag{color:var(--dim) !important}
.ocr-row{border-bottom:1px solid var(--hairline) !important;color:var(--ink)}
.ocr-row .nm{color:var(--ink) !important;font-weight:600}
.ocr-foot .msg{color:var(--dim) !important}
.ocr-progress .bar{background:var(--line) !important;border-radius:99px}
.ocr-progress .bar i{background:var(--mint) !important}
.ocr-progress .pct{color:var(--dim) !important}
.toast{background:var(--ink) !important;color:#fff !important;border:none !important;border-radius:12px !important;padding:9px 18px !important;box-shadow:var(--shadow-md) !important;font-size:12.5px !important}

/* === BA 弹窗 === */
.ba-modal{background:rgba(17,20,18,.35) !important;backdrop-filter:none !important}
.ba-card{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-xl) !important;box-shadow:var(--shadow-md) !important;color:var(--ink) !important;max-height:94dvh !important}
/* 报告顶部操作栏固定在弹窗滚动容器内，向下阅读时始终保留股票名、观察和导出入口。 */
.ba-head{position:sticky !important;top:0;z-index:12;border-bottom:1px solid var(--line) !important;background:var(--card) !important}
.ba-progress{position:sticky !important;top:0;z-index:13}
.ba-head .ba-stock{color:var(--ink) !important;font-weight:600;font-size:16px !important}
.ba-badge{background:var(--mint-soft) !important;color:var(--mint-deep) !important;border:1px solid var(--acc-line) !important;padding:3px 10px !important;font-size:11px !important;font-weight:600;border-radius:6px !important}
.ba-head button{background:var(--card) !important;color:var(--ink) !important;border:1px solid var(--line) !important;border-radius:99px !important;font-size:12px !important;font-weight:500}
.ba-head button:hover{border-color:var(--line-strong) !important;background:var(--card-soft) !important}
.ba-meta{color:var(--dim) !important}
.ba-meta-top{margin-bottom:5px !important}
.ba-meta-name{color:var(--ink2) !important;min-width:0;max-width:100%;overflow-wrap:anywhere}
.ba-meta-last{color:var(--ink) !important}
.ba-meta-chg.up{color:#e8533f !important}
.ba-meta-chg.down{color:#2ea66b !important}
.ba-meta-sub{color:var(--dim) !important}
.ba-meta-sub b{color:var(--ink2) !important}
/* .ba-profile mint 段 light 覆盖同上废弃（10:15） */

.ba-concl{background:var(--card) !important;border-bottom:1px solid var(--line) !important;color:var(--ink) !important}
.ba-concl th,.ba-concl td{border-color:var(--line) !important;color:var(--ink2)}
.ba-concl th{color:var(--dim) !important;font-size:10.5px !important;font-weight:600;background:var(--card-soft)}
.ba-concl .ba-hl{color:var(--mint-deep) !important;font-weight:600}
.ba-progress{background:var(--line) !important;height:3px}
.ba-progress i{background:var(--mint) !important}
.ba-sec{border:1px solid var(--line) !important;border-radius:var(--r-md) !important;background:var(--card) !important}
/* 买入分析结论栏：浅色改造漏网（原 #1e1e36 深紫黑底）收口为浅色卡片 */
.ba-concl{background:var(--card-soft) !important;border-bottom:1px solid var(--line) !important}
.ba-concl table tr{background:transparent !important;border:1px solid var(--line) !important}
.ba-concl th{color:var(--dim) !important;text-align:left !important}
.ba-concl td{text-align:right !important}
.ba-progress{background:var(--line) !important}
.ba-sec{border-top:1px solid var(--line) !important;overflow:hidden !important}
.ba-sec-head{background:var(--card-soft) !important;color:var(--ink) !important;border-bottom:1px solid var(--line)}
.ba-sec-head .ba-cnt{color:var(--dim) !important}
.ba-sec-head .ba-arr{color:var(--dim) !important}
.ba-sec-body{color:var(--ink2) !important;background:var(--card) !important}
.ba-sec-body table{background:transparent !important}
.ba-sec-body th,.ba-sec-body td{border:1px solid var(--line) !important;color:var(--ink2)}
.ba-sec-body th{background:var(--card-soft) !important;color:var(--dim) !important;font-size:10.5px !important;font-weight:600}
/* 全局对齐规则：数值一律右对齐 + 等宽 D-DIN；标签列左对齐 */
.ba-sec-body td{text-align:right !important}
.ba-sec-body th{text-align:left !important}
.r2t td:not(:nth-child(2)){text-align:right !important}
.r2t th:not(:nth-child(2)){text-align:right !important}
.rb-rank,.ba-cnt{font-family:var(--num);font-variant-numeric:tabular-nums lining-nums}
.hsItem .hsCode{font-family:var(--num);font-variant-numeric:tabular-nums lining-nums}
.ba-sec-body tr:nth-child(even){background:transparent !important}
.ba-sec-body code{background:var(--card-soft) !important;color:var(--ink) !important;border:1px solid var(--line)}
.ba-sec-body h3,.ba-sec-body h4{color:var(--ink) !important;font-weight:600}
.ba-strategy-hook>div{background:var(--mint-soft) !important;border:1px solid var(--acc-line) !important;border-radius:var(--r-md) !important}
.ba-strategy-hook b{color:var(--mint-deep) !important;font-size:11px !important;font-weight:600;text-transform:none;letter-spacing:0}
.ba-strategy-hook span{color:var(--ink2) !important}
.ba-toolbar{background:var(--card) !important;border-top:0 !important;overflow-x:auto !important;overflow-y:hidden !important;justify-content:flex-start !important;scrollbar-width:none}.ba-toolbar::-webkit-scrollbar{display:none}.ba-toolbar button{flex:0 0 auto !important;white-space:nowrap !important}
.ba-toolbar button{background:var(--card) !important;color:var(--ink) !important;border:1px solid var(--line) !important;border-radius:99px !important;font-size:12px !important;font-weight:500}.ba-toolbar #baWatchTop{background:var(--ink) !important;border-color:var(--ink) !important;color:#fff !important;font-weight:600 !important}
.ba-toolbar button:hover{background:var(--card-soft) !important;color:var(--ink) !important}
.ba-toolbar button:active{background:var(--line) !important;color:var(--ink) !important}
.ba-toolbar button:disabled{background:var(--disabled-bg) !important;color:var(--sub) !important;cursor:not-allowed !important}
.ba-empty{color:var(--faint) !important}
.ba-disclaimer{color:var(--dim) !important;border-top:1px solid var(--line) !important}
/* 分析中（26-09-14）：点「分析」到报告流回来之前，卡里其实没有任何可看的内容——
   这时结论区是一条空横线、正文是空 padding、"同板块横向比较"只会说"还没加载"、
   底部免责声明同样是以信息量为零的套话，加上此刻点了没反应的「全部展开/收起」，
   一共五处纯占位。is-loading 期间统一藏掉，只留标题栏 + 一行状态文字（见 setStage）。
   等到正文第一段流进来（renderBody）或任务收尾（done / fail / handleError），
   JS 摘掉 is-loading，这些区块原样出现——所以「报告出完之后的界面」一个字都没动。
   加载态不是报告页：仅剩一行状态时不保留“报告纸”高度，避免形成大面积空白。
   宽度同步收为状态卡，报告内容开始流入后自动恢复完整阅读宽度。 */
.ba-card.is-loading #baConcl,
.ba-card.is-loading #baBody,
.ba-card.is-loading #baPeerCompare,
.ba-card.is-loading .ba-disclaimer,
.ba-card.is-loading #baToggleAll{display:none !important}
.ba-card.is-loading{width:min(92vw,760px) !important;min-height:0 !important}
.ba-card.is-loading .ba-meta{padding-bottom:14px !important}
.ba-load-status{display:flex;align-items:center;gap:9px;color:var(--ink2);font-size:12px;line-height:1.35}.ba-load-status i{width:7px;height:7px;flex:0 0 auto;border-radius:50%;background:var(--mint-deep);animation:baLoadPulse 1.15s ease-in-out infinite}.ba-load-status b,.ba-load-status small{display:block}.ba-load-status b{font-weight:600;color:var(--ink2)}.ba-load-status small{margin-top:1px;color:var(--dim);font-size:10.5px}@keyframes baLoadPulse{50%{opacity:.38;transform:scale(.72)}}
@media(prefers-reduced-motion:reduce){.ba-load-status i{animation:none}}
@media(max-width:640px){.ba-card.is-loading{height:auto !important;max-height:calc(100dvh - (var(--page-gutter) * 2)) !important}}
/* 同板块比较卡：真正的数据要等分析报告落地后才会去取，在那之前它只能写一句"还没加载"。
   与其让它先占一行空话、再被真实数据替换，不如干脆让它空着手时不出现（is-pending），
   renderPeerComparison 拿到结果的第一件事就是摘掉这个标记。 */
.peer-compare.is-pending{display:none !important}
.ba-dec{background:var(--mint-soft) !important;border:1px solid var(--acc-line) !important;border-left:3px solid var(--mint-deep) !important}
.ba-cmd{color:var(--dim) !important}
.ba-cmd b{color:var(--ink) !important;font-size:20px !important;font-weight:600}
.ba-lock{color:var(--dim) !important;border:1px solid var(--line) !important;background:var(--card-soft) !important;border-radius:6px !important;padding:2px 10px !important;font-size:11px !important}
.ba-odds{color:var(--ink2) !important;border:1px solid var(--line) !important;background:var(--card-soft) !important;border-radius:6px !important;padding:3px 12px !important}
.ba-chips .kv2{background:var(--card-soft) !important;border:1px solid var(--line) !important;border-radius:10px !important;color:var(--ink2) !important}
.ba-chips .kv2 span{color:var(--dim) !important;font-size:11px !important;font-weight:500;text-transform:none;letter-spacing:0}
.ba-chips .kv2 b{color:var(--ink) !important}
.ba-chips .kv2.ba-kv-hl{border-color:var(--acc-line) !important;background:var(--mint-soft) !important}
.ba-chips .kv2.ba-kv-hl b{color:var(--mint-deep) !important}
.ba-chips .kv-when.tdy{color:var(--blue) !important;border:1px solid rgba(47,111,237,.2) !important;background:var(--blue-soft) !important}
.ba-chips .kv-when.nx{color:var(--dim) !important;border:1px solid var(--line) !important;background:var(--card-soft) !important}

/* === BA 首屏信息收口：紧凑、先决策后证据 === */
.peer-compare{margin:6px 14px !important;padding:8px 10px !important;border:1px solid var(--line) !important;border-radius:10px !important;background:var(--card-soft) !important}
.peer-compare h3{margin:0 0 2px !important;color:var(--ink) !important;font-size:12px !important;font-weight:600}
.peer-compare>.dim{font-size:11px !important;line-height:1.4;color:var(--dim) !important}
.ba-concl{padding:7px 14px 9px !important;background:var(--card) !important}
.ba-cockpit{grid-template-columns:minmax(230px,.9fr) minmax(330px,1.55fr) minmax(205px,.95fr) !important;gap:6px !important;margin:0 0 6px !important}
.ba-cockpit-card{padding:6px 8px !important;border:1px solid var(--line) !important;border-radius:8px !important;background:var(--card-soft) !important}
.ba-cockpit-card:last-child{grid-column:1/-1;padding:5px 8px !important}
.ba-cockpit-label{margin-bottom:2px !important;color:var(--dim) !important;font-size:10px !important;line-height:1.25}
.ba-cockpit-main{gap:6px !important;color:var(--ink2) !important;font-size:11.5px !important;line-height:1.25 !important}
.ba-cockpit-main small{color:var(--dim) !important;font-size:10.5px !important}
.ba-risk-dot{width:7px !important;height:7px !important;box-shadow:none !important;background:var(--dn) !important}
.ba-risk-dot.yellow{background:var(--amber) !important}.ba-risk-dot.red{background:var(--up) !important}
.ba-exec-grid{gap:4px !important}
.ba-exec-grid>div{min-width:0;padding-left:7px;border-left:1px solid var(--line)}
.ba-exec-grid>div:first-child{padding-left:0;border-left:0}
.ba-exec-grid span{color:var(--dim) !important;font-size:9.5px !important}
.ba-exec-grid b{margin-top:0 !important;color:var(--ink) !important;font-size:11.5px !important}
.ba-source-health{gap:5px !important}
.ba-source{padding:0 !important;border:0 !important;color:var(--dn) !important;font-size:10.5px !important}
.ba-source.partial{color:var(--amber) !important}.ba-source.unavailable{color:var(--up) !important}
.ba-dec{padding:8px 10px !important;border-radius:10px !important}
.ba-dec-head{justify-content:flex-start !important;gap:7px !important;margin-bottom:6px !important}
.ba-cmd{gap:5px !important;font-size:11px !important;line-height:1.2}
.ba-cmd b{font-size:18px !important;letter-spacing:0 !important}
.ba-lock,.ba-odds{padding:2px 7px !important;font-size:10.5px !important;line-height:1.35}
.ba-odds{margin-left:auto}
.ba-chips{display:grid !important;grid-template-columns:repeat(auto-fit,minmax(155px,1fr)) !important;gap:5px !important;margin-top:0 !important}
.ba-chips .kv2{min-width:0;justify-content:space-between;padding:4px 8px !important;border-radius:7px !important;font-size:11px !important;line-height:1.3}
.ba-chips .kv2 span{font-size:10px !important}
.ba-chips .kv2 b{font-size:12px !important;white-space:nowrap}
.ba-chips .kv-signal{grid-column:1/-1;justify-content:flex-start;background:transparent !important;border:0 !important;padding:0 1px 2px !important}
.ba-chips .kv-signal b{font-size:12.5px !important}
.ba-chips .kv-entry{position:relative;padding-right:88px !important}
.ba-chips .kv-when{position:absolute;right:5px;top:50%;transform:translateY(-50%);margin:0;padding:1px 5px !important;font-size:9.5px !important;font-style:normal}
/* 当前判断区：中等宽度自动收为两列，不再把执行价位硬压成竖排。
   26-09-14：exec-grid 的两列与第 3 格去边线已提到「驾驶舱紧凑化」基础档（三列宽屏同样适用），
   这里的两条同名规则随即冗余，删掉；原 row-gap:7px 一直是被后面 gap:3px 覆盖的死规则，一并清掉。 */
@media (max-width:1180px){
  .ba-cockpit{grid-template-columns:repeat(2,minmax(0,1fr)) !important}
  .ba-cockpit-card:last-child{grid-column:auto !important}
}
@media (max-width:780px){
  .ba-cockpit{grid-template-columns:minmax(0,1fr) !important}
  .ba-chips{grid-template-columns:repeat(2,minmax(0,1fr)) !important}
  .ba-chips .kv-signal{grid-column:1/-1}
}
@media (max-width:480px){
  .ba-chips{grid-template-columns:minmax(0,1fr) !important}
  .ba-chips .kv-signal{grid-column:auto}
}
.watch-actions{display:flex !important;align-items:center !important;gap:7px !important;margin-top:6px !important}
.watch-actions .ba-watch{min-height:25px !important;padding:4px 11px !important;border:0 !important;border-radius:99px !important;background:var(--ink) !important;color:#fff !important;font-size:10.5px !important;font-weight:600}
.watch-actions>button:not(.ba-watch){min-height:25px !important;padding:4px 9px !important;border:1px solid var(--line) !important;border-radius:99px !important;background:var(--card) !important;color:var(--dim) !important;font-size:10.5px !important}
.watch-actions .dim{font-size:10.5px !important;color:var(--dim) !important}
@media (max-width:900px){
  .ba-cockpit{grid-template-columns:repeat(2,minmax(0,1fr)) !important}
  .ba-cockpit-card:last-child{grid-column:auto}
  .ba-chips{grid-template-columns:repeat(2,minmax(0,1fr)) !important}
  .ba-chips .kv-signal{grid-column:1/-1}
  .ba-chips .kv-entry{padding-right:82px !important}
}
@media (max-width:640px){
  .peer-compare{margin:6px 10px !important}
  .ba-concl{padding:7px 10px 9px !important}
  .ba-cockpit{grid-template-columns:minmax(0,1fr) !important}
  .ba-cockpit-card:last-child{grid-column:auto}
  .ba-chips{grid-template-columns:minmax(0,1fr) !important}
  .ba-chips .kv-signal{grid-column:auto}
  .ba-chips .kv-entry{padding-right:86px !important}
  .watch-actions{flex-wrap:wrap !important}
}

/* === 分析按钮 / 快照 === */
.ba-btn{background:var(--ink) !important;color:#fff !important;border:none !important;border-radius:99px !important;padding:var(--sp-1) var(--sp-3) !important;font-size:10.5px !important;font-weight:500 !important;min-height:24px !important}
.ba-btn:hover{background:#000 !important;color:#fff !important;transform:translateY(-1px)}
.ba-btn:active{background:var(--ink2) !important;color:#fff !important;transform:translateY(0)}
.ba-btn:disabled,.ba-btn.ba-busy,.ba-btn.ba-limited{background:var(--disabled-bg) !important;color:var(--sub) !important;opacity:1 !important}
.snap-btn{background:var(--card) !important;color:var(--sub) !important;border:1px solid var(--line) !important;border-radius:8px !important;padding:3px 10px !important;font-size:10.5px !important;font-weight:500;min-height:22px !important}
.snap-btn:hover{color:var(--ink) !important;border-color:var(--line-strong) !important;background:var(--card-soft) !important}

/* === 顶部条 === */
#cd{color:var(--dim) !important;font-size:12px !important}
/* 数据源徽标改纯文本（26-09-13）：去掉胶囊底色/边框/悬停反色，只留文字 */
#srcPill,#srcPill.live,#srcPill.wait,#srcPill.off,#srcPill:hover{
  background:transparent !important;border:none !important;border-radius:0 !important;
  padding:2px 0 !important;min-height:0 !important;box-shadow:none !important;color:var(--sub) !important;font-weight:400 !important}
.medal{font-size:14px;line-height:1}
.n1{color:#f0b429}.n2{color:#9ca3af}.n3{color:#d69c64}
.hsItem{color:var(--ink) !important;background:var(--card) !important}
.hsItem:hover{background:var(--hover-bg) !important;color:var(--ink) !important}
.hsItem .hsCode{color:var(--dim) !important}
.holdSuggest{background:var(--card) !important;border:1px solid var(--line) !important;border-radius:var(--r-md) !important;box-shadow:var(--shadow-md) !important}
.p2-actions button,.p2-actions .snap-btn{font-size:11px !important;padding:4px 10px !important;min-height:24px !important}
.r2rebound-h .qtag{background:var(--amber) !important;color:#1a1206 !important}
.r2fail-t{color:var(--dim) !important}
.r2pick .tag.tm{font-size:11px !important;padding:3px 10px !important}

/* === 硬覆盖：源文件残留暗色 === */
.zitem{border-bottom:1px solid var(--hairline) !important}
.zlist .zitem:last-child,.zlist .zitem.zitem--column-last{border-bottom:0 !important}
.q3row{border-bottom:1px solid var(--hairline) !important}
.q3list .q3row:last-child{border-bottom:0 !important}
.ocr-row{border-bottom:1px solid var(--hairline) !important}
.holdladder li{border-bottom:1px solid var(--hairline) !important}
.zrow{border-bottom:1px solid var(--hairline) !important}
.zrow:last-child{border-bottom:0 !important}
.r2harsh{background:var(--up-soft) !important;border:1px solid rgba(214,69,69,.2) !important}
.r2fail-t,.r2meta{color:var(--dim) !important}
.phase-detail{border-bottom:1px solid var(--line) !important}
.r2t th,.r2t td{border-bottom:1px solid var(--hairline) !important}
th,td{border-bottom:1px solid var(--hairline) !important}
.cal-tbl th,.cal-tbl td{border-bottom:1px solid var(--hairline) !important}
.rv-scenario-table th,.rv-scenario-table td{border-top:1px solid var(--hairline) !important}
.p2-table th,.p2-table td{border-bottom:1px solid var(--hairline) !important}
/* 强调色收口：深松绿仅保留「进度点缀 / 排序激活 / KPI 读数 / 品牌角标」四处（DESIGN §2.5），
   其余强调一律靠字阶与墨色，避免绿色扩散成第三语义色 */
.ba-badge,.ba-concl .ba-hl,.ba-cmd b,
.ba-strategy-hook b,.probwhy details>summary,
.zrow .idx,.q3rank,.r2-num,.acc{color:var(--ink) !important}
.ba-progress i,.ocr-progress .bar i{background:var(--mint) !important}   /* 进度点缀：深松绿合规保留 */
.pricebox .kv-buy b{color:var(--up) !important}                     /* 买入价：A股买入方向=红 */

/* === 分区留白 === */
.envfull{margin-bottom:20px !important}
.zone{margin-bottom:24px !important}
.summary{margin-bottom:20px !important}
.bar{margin:16px 0 !important;gap:8px !important}
.tblwrap{margin-bottom:20px !important}
.banner{margin-bottom:14px !important}
.r2picks{gap:14px !important;margin-top:14px !important}
  /* 三级层间距（26-10-09 改版）：一级 4 张、二级 6 张各占整行，中间不再切左右两栏，
     所以原先那套"右栏压小字号 + 标签省略号截断"的规则一并删掉——标签被截成
     "日K模拟净收益（扣…"读不全，是上一版最实在的排版问题。
     数字档仍从字阶里取：一级 --fs-num-xl(28) / 二级 --fs-num-lg(22)，两档差就是层级本身。 */
  .rv-kpi{gap:10px !important;padding:4px 0 10px !important}
  .rv-stats{gap:8px !important;padding:0 0 10px !important}
  .rv-stats .rv-m{padding:8px 10px !important}
  .rv-mini{gap:3px 14px !important;padding:8px 11px !important;margin:0 0 14px !important}
  .rv-tables{gap:12px !important;margin:0 0 14px !important}
  .rv-details .rv-sec{margin:14px 0 6px !important}
  @media (max-width:640px){
    .rv-kpi{gap:8px !important}
    .rv-stats .rv-m{padding:7px 9px !important}
  }
.rv-rows{gap:14px !important}
.gategrid{gap:14px !important;margin:14px 0 !important}
#reviewCard h4{color:var(--ink) !important}
#reviewCard .rv-caret{color:var(--dim) !important}
#reviewCard .rv-caret:hover{color:var(--ink) !important}

/* === 深色残留补丁：白底上不可见的白色元素 === */
*{scrollbar-color:rgba(17,20,18,.22) transparent}
.chipplot{border-left:1px solid var(--line-strong) !important}
.chiprow::before{border-top:1px solid rgba(17,20,18,.06) !important}
.chiprow.is-zone{background:rgba(17,20,18,.045) !important}
.chiprow.is-avg::before{border-top-color:var(--ink) !important}
.r2t td:nth-child(2){border-right:1px solid var(--line) !important}

/* === 响应式 === */
@media (max-width:1280px){
  body{padding:0 var(--sp-5) calc(var(--sp-6) + var(--sp-1)) !important}
  .top{padding:var(--sp-3) var(--sp-5) !important;margin:0 calc(var(--sp-5) * -1) var(--sp-4) !important}
}
@media (max-width:768px){
  body{padding:0 var(--sp-4) var(--sp-5) !important}
  .top{padding:var(--sp-2) var(--sp-4) !important;margin:0 calc(var(--sp-4) * -1) var(--sp-3) !important}
  .zcard,.envfull,.r2pick{padding:14px 16px !important;border-radius:14px !important}
}
@media (max-width:480px){
  body{font-size:14px !important}
  .top h1{font-size:14px !important}
  th,td{padding:8px 6px !important}
  .pill{padding:6px 12px !important;font-size:12px !important}
}
@media (prefers-reduced-motion: reduce){
  *{animation:none!important;transition:none!important}
  html{scroll-behavior:auto}
}

/* ══════════════════════════════════════════════════════════
   Unified Visual Spec v2 —— 全组件规格拉齐层
   原则：标签 6px 小圆角 · 按钮 99px 胶囊 · 数字一律 D-DIN
         衬线仅限品牌 · 虚线表从属 · 实线表结构
   ══════════════════════════════════════════════════════════ */

/* ---- 1. 标签族：统一 6px 圆角 / micro 字号 / 两档 padding ---- */
.tag,.lvchip,.chk,.gchip,.phase,.chip,.badge,.timing,
.zitem .zr1 .dp,.rv-src,.r2t .tm,.r2t .ws,.tag[class*="tm-"],.tag[class*="ws-"]{
  border-radius:var(--r-tag) !important;
  font:600 var(--fs-micro)/1.5 var(--sans) !important;
  letter-spacing:.02em !important;
  padding:2px 8px !important;
  transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease) !important;
}
/* 带符号/状态的标签稍大一档（caption 档） */
.tm-now,.tm-dip,.tm-brk,.tag.t,.tag.tm,.timing,.phase{
  padding:2.5px 10px !important;
  font-size:var(--fs-caption) !important;
}

/* ---- 2. 标题族：三级字阶统一 ---- */
.zone-head b{font:600 var(--fs-h1)/var(--lh-tight) var(--sans) !important;letter-spacing:-.2px !important}
.zcard h4{font:600 var(--fs-h2)/var(--lh-tight) var(--sans) !important;letter-spacing:-.1px !important;margin-bottom:var(--sp-3) !important}
.rv-sec{font:600 var(--fs-h2)/var(--lh-tight) var(--sans) !important;letter-spacing:-.1px !important}
.gm span,.rv-m span,.kpi-lbl{font:500 var(--fs-caption)/var(--lh-snug) var(--sans) !important;letter-spacing:.01em !important}

/* ---- 3. 数字族：D-DIN · tabular lining · 负字距 ----
   26-10-09 战绩复盘卡改版：指标读数按层级分两档取字阶，不再一律用 XL。
   一级（.rv-kpi 四张结果卡）--fs-num-xl 28；二级（.rv-stats 六张执行/风险卡）--fs-num-lg 22。
   原先两级同为 28px，六张次要卡片跟四张结果卡一样响，"每轮必看"和"需要时看"分不出来。 */
.rv-m b{font:600 var(--fs-num-lg)/var(--lh-tight) var(--num) !important;letter-spacing:var(--ls-num) !important;font-variant-numeric:tabular-nums lining-nums !important}
.rv-kpi .rv-m b{font:600 var(--fs-num-xl)/var(--lh-tight) var(--num) !important;letter-spacing:var(--ls-num) !important;font-variant-numeric:tabular-nums lining-nums !important}
.gm b{font:600 var(--fs-num-lg)/var(--lh-tight) var(--num) !important;letter-spacing:var(--ls-num) !important;font-variant-numeric:tabular-nums lining-nums !important}
.p-line .p-now{font:600 23px/var(--lh-tight) var(--num) !important;letter-spacing:-.5px !important}
.q3score,.r2-num,.score{font:600 var(--fs-num-md)/var(--lh-snug) var(--num) !important;letter-spacing:-.2px !important;font-variant-numeric:tabular-nums lining-nums !important}
.summary b{font:600 var(--fs-num-md)/1 var(--num) !important;letter-spacing:-.2px !important}

/* ---- 4. 表格：行 hover 统一过渡 / 表头字距 ---- */
th,td{transition:background-color var(--dur-fast) var(--ease) !important}
th{letter-spacing:.02em !important}
table.mkt tbody tr:hover td,tr:hover td{background:var(--hover-bg) !important}

/* ---- 统一图标系统：Material Symbols 风格，本地 SVG sprite ---- */
.mi-sprite{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}
.mi{width:16px;height:16px;display:inline-block;vertical-align:-3px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}
.mi-xs{width:12px;height:12px;vertical-align:-2px}.mi-sm{width:14px;height:14px}.mi-md{width:18px;height:18px}.mi-lg{width:20px;height:20px}
.icon-text{display:inline-flex;align-items:center;gap:5px}
button .mi{pointer-events:none}
.icon-only{display:inline-flex;align-items:center;justify-content:center;padding:0 !important;width:32px;height:32px;min-width:32px;border-radius:50% !important}
.icon-only:hover .mi{transform:scale(1.04)}.icon-only:active .mi{transform:scale(.94)}
.icon-only:disabled .mi{opacity:.55}
.medal{display:inline-flex !important;align-items:center;justify-content:center;width:22px;height:22px;margin-right:2px !important;border:1px solid var(--line);border-radius:50%;color:var(--ink2);background:var(--card)}
.medal .mi{width:13px;height:13px}.m1 .medal{border-color:rgba(184,126,18,.35);color:#9a6810}.m2 .medal{color:#68706b}.m3 .medal{color:#9a5d2f}
.sort-arrow{display:inline-flex;align-items:center;margin-left:3px;color:currentColor}.sort-arrow .mi{width:12px;height:12px}
.r2-detail>summary::before{content:none !important}.r2-detail>summary{display:flex;align-items:center;gap:4px}.r2-detail>summary .mi{transition:transform var(--dur-fast) var(--ease)}.r2-detail[open]>summary .mi{transform:rotate(90deg)}
.ba-arr{display:inline-flex}.ba-arr .mi{transition:transform var(--dur-fast) var(--ease)}.ba-sec[data-open="1"] .ba-arr .mi{transform:rotate(180deg)}
.ocr-close,.ba-head .icon-only{color:var(--ink2) !important}
@media(max-width:640px){.icon-only{width:36px;height:36px;min-width:36px}.mi{width:17px;height:17px}}

/* ---- TOP3 决策卡：紧凑层级（11:43 截图反馈） ---- */
.r2picks{gap:10px !important;margin-top:10px !important}
.r2pick{padding:14px 16px !important}
.r2pick .zr1{min-height:24px;align-items:center !important}
.r2pick .zr1 b{font-size:15px !important}
.r2-tags{gap:4px !important}
.r2-core{display:grid;grid-template-columns:minmax(112px,.42fr) minmax(0,1.58fr);gap:12px;align-items:center;margin-top:8px}
.r2-core .p-line{margin:0 !important;align-items:baseline;flex-wrap:wrap;gap:6px}
.r2-core .p-now{font-size:26px !important;line-height:1 !important}
.r2-core .r2-summary{margin:0 !important;padding:7px 10px !important;background:var(--card) !important;border:1px solid var(--line) !important;border-left:3px solid var(--accent) !important;border-radius:8px !important}
.r2-core .r2-summary.sum-strong{border-left-color:var(--up) !important}.r2-core .r2-summary.sum-weak{border-left-color:var(--down) !important}.r2-core .r2-summary.sum-risk{border-left-color:var(--danger) !important}.r2-core .r2-summary.sum-watch{border-left-color:var(--warn) !important}
.r2-core .sum-lab{margin:0 0 2px !important;font-size:10px !important}
.r2-core .sum-text{font-size:12px !important;line-height:1.45 !important}
.r2-core .r2-judges,.r2-core .r2-evidence{display:none !important}
.trade-state{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 8px;align-items:center;margin-top:7px;padding:8px 10px;border:1px solid var(--line);border-left:4px solid var(--warn);border-radius:8px;background:var(--card)}
.trade-state b{font-size:12px;white-space:nowrap}.trade-state span{min-width:0;overflow-wrap:anywhere;font-size:12px;line-height:1.45;color:var(--ink2)}.trade-state em{grid-column:2;min-width:0;overflow-wrap:anywhere;font-style:normal;font-size:10.5px;color:var(--dim)}
.trade-state.ts-green{border-left-color:#16845b}.trade-state.ts-yellow{border-left-color:var(--warn)}.trade-state.ts-red{border-left-color:var(--danger)}
.risk-facts{display:flex;gap:8px;align-items:flex-start;margin-top:6px;padding:6px 9px;border:1px dashed var(--line);border-radius:8px;background:var(--card-soft)}.risk-facts>b{font-size:10.5px;white-space:nowrap;color:var(--dim)}.risk-facts>span{min-width:0;display:flex;gap:4px;flex-wrap:wrap}.risk-facts i{max-width:100%;overflow-wrap:anywhere;font-style:normal;font-size:10px;padding:2px 6px;border-radius:4px;color:var(--danger);background:var(--up-soft)}.risk-facts .rf-safe{font-size:10.5px;color:var(--dim)}
.pricebox{display:grid !important;grid-template-columns:minmax(0,1.35fr) minmax(0,.78fr) minmax(0,1fr) minmax(0,1fr) !important;gap:6px !important;margin:8px 0 0 !important}
.pricebox .kv2{display:grid !important;grid-template-columns:auto minmax(0,1fr);align-items:baseline;gap:2px 6px;padding:7px 9px !important;background:var(--card) !important}
.pricebox .kv2 span{margin:0 !important;font-size:9.5px !important;line-height:1.2}
.pricebox .kv2 b{font-size:13px !important;line-height:1.25;white-space:nowrap}
.pricebox .kv-buy{background:var(--up-soft) !important;border-color:rgba(214,69,69,.24) !important;border-left:3px solid var(--up) !important}
.pricebox .kv-buy b{font-size:15px !important;color:var(--up) !important}
.pricebox .kv-stop{border-left:3px solid var(--dn) !important}.pricebox .kv-stop b{color:var(--dn) !important}
.pricebox .kv-target{border-left:3px solid var(--mint-mid) !important}
.pricebox .kv-risk{grid-column:1/-1;display:flex !important;padding:5px 9px !important;background:transparent !important;border-style:dashed !important}
.pricebox .kv-risk b{font-size:11px !important}
.r2-detail{margin-top:7px !important;padding-top:6px !important}
.r2-detail>details>summary{font-weight:600;color:var(--ink2) !important}
@media(max-width:640px){
  .r2-core{grid-template-columns:minmax(0,1fr);gap:7px}
  .r2-core .r2-summary{padding:8px 10px !important}
  .trade-state{grid-template-columns:minmax(0,1fr);gap:2px}.trade-state em{grid-column:1}.risk-facts{display:block}.risk-facts>span{margin-top:4px}
  .pricebox{grid-template-columns:repeat(2,minmax(0,1fr)) !important}
  .pricebox .kv-buy{grid-column:1/-1}
}

/* ---- 5. 交互与动效统一 ---- */
button,a,.fchip{transition-duration:var(--dur-fast) !important;transition-timing-function:var(--ease) !important}
.zcard,.r2pick,.gm,.rv-m,.rv-row,.market-index,.kpi,.card{transition-duration:var(--dur) !important;transition-timing-function:var(--ease) !important}
:is(a,button,input,[tabindex]):focus-visible{outline:var(--focus-ring) !important;outline-offset:2px !important}

/* ---- 6. 卡片浮起 / 浮层阴影统一 ---- */
.zcard:hover,.r2pick:hover{box-shadow:var(--shadow-lift) !important}
#sug,#syncPanel,.holdSuggest{box-shadow:var(--shadow-pop) !important;border-radius:var(--r-lg) !important}

/* ---- 7. 布局节奏令牌化（26-09-13：模块间距整体收紧一档，zone 32→16、卡片/摘要 24→16） ---- */
.zone{margin-bottom:var(--sp-4) !important}
.zcard,.envfull{margin-bottom:var(--sp-4) !important}
.summary,.tblwrap{margin-bottom:var(--sp-4) !important}
/* 硬筛结果并入股票表卡片（26-09-13）：不再是独立一张卡，改为表卡顶部的吸顶条 */
/* 筛选结果条不再粘滞：它和下方表头 #tbl th{position:sticky;top:0;z-index:4} 同钉滚动容器 .tblwrap 的 top:0，
   实测各宽度都纵向叠压（表头 z4 盖掉筛选条顶部一行；且筛选条高度随宽度变化，手机 85px、桌面 42px，
   没法用一个固定 top 偏移修干净）。真正需要在滚动时常驻的是列名表头，不是"N 只"计数条 —— 去掉它的 sticky，
   让它随内容滚走，重叠即消除，窄屏也少占一行竖向空间。其余外观（描边/内距）不变。2026-09-24 真实 Chrome+CDP 复测 overlap=false。 */
.tblwrap>.summary{margin-bottom:0 !important;padding:10px 16px !important;border:0 !important;border-bottom:1px solid var(--line) !important;border-radius:0 !important;box-shadow:none !important}
.banner{margin-bottom:var(--sp-3) !important}
.bar{margin:var(--sp-4) 0 !important}

/* ---- 8. 正文排印微调 ---- */
.zitem .zrr,.lead,.gatenote{line-height:var(--lh) !important}
.reason,.fn,.foot{line-height:var(--lh-loose) !important}
.zone-head .sub,.fn,.gatenote,.rv-fallback{color:var(--sub) !important}

/* ══════════ Layout Density Pass —— 排版密度优化 ══════════
   原则：压扁「说明性文字带」、回收「单行拆三行」、收紧「表格与卡内边距」，
   只动间距与字号，不动结构。 */

/* 1. Q2 头部 meta：三行各占一行 → 行内串联（省 2 行） */
.r2meta{font-size:11px !important;line-height:1.6 !important;margin:4px 0 8px !important}
.r2meta .mi{display:inline-block !important;margin:0 4px 2px 0 !important;width:13px !important;height:13px !important;vertical-align:-2px !important}
/* Q2 口径说明是文本行，不应复用 SVG 图标 .mi：图标固定 13px 宽会把整段中文挤成竖排。 */
.r2meta .r2meta-line{display:block !important;width:auto !important;height:auto !important;margin:0 0 3px !important;vertical-align:baseline !important;overflow-wrap:anywhere}

/* 2. Q6b 逆势反弹：说明段收扁（原 11px/1.65 逐段堆叠） */
.rbnote{font-size:10.5px !important;line-height:1.55 !important;margin-top:6px !important;color:var(--dim) !important}
.rbnote+.rbnote{margin-top:4px !important}

/* 3. 验证卡片：标题、正文与表格使用统一安全边距，避免内容贴边 */
.p2-table th,.p2-table td{padding:5px 8px !important;font-size:10.5px !important}
.p2-table td:last-child,.p2-table th:last-child{max-width:460px;overflow:hidden;text-overflow:ellipsis}
.rv-scenario,.p2-lab{padding:0 !important;overflow:hidden}
.rv-scenario summary,.p2-lab>summary{padding:10px 12px !important;min-height:42px;box-sizing:border-box}
.rv-scenario-note{padding:0 12px 10px !important}
.rv-scenario-table{width:calc(100% - 24px) !important;margin:0 12px}
.rv-scenario-detail{padding:12px 12px 6px !important}
.rv-scenario-empty{margin:0 12px 12px !important}
.p2-body{padding:0 12px 12px !important}
.p2-actions{margin-top:0 !important}
.p2-note{font-size:10.5px !important;line-height:1.55 !important;margin-bottom:6px !important}

/* 4. 策略验证闭环：环比行与说明带收紧 */
.rv-fallback{font-size:10.5px !important;line-height:1.6 !important;padding:4px 0 0 !important}
.rv-fn{padding:10px 12px !important;margin-top:10px !important}
.rv-sec{margin:14px 0 6px !important}

/* 5. 表格密度：主表 14×16→12×14，打分表 12×12→10×10 */
th,td{padding:12px 14px !important}
.r2t th,.r2t td{padding:10px 10px !important}
.q3t th,.q3t td{padding:5px 8px !important}

/* 6. 卡片与列表呼吸微收（仍保 24px 分区节奏） */
.zcard,.envfull{padding:18px 22px !important}
.r2pick{padding:18px 20px !important}
.gm{padding:10px 12px !important}
.cgrid3{gap:14px !important}
.r2picks{gap:12px !important;margin-top:10px !important}
.rv-kpi .rv-m{padding:12px 14px !important}
.zcard h4{margin-bottom:var(--sp-3) !important}

/* 7. 说明/判定行：行高与字号统一收紧一档 */
.gatenote{font-size:11px !important;line-height:1.55 !important;margin-top:4px !important}
.phase-detail{line-height:1.6 !important;font-size:11px !important;margin-bottom:6px !important}
.q1-state{padding:8px 12px !important;margin-bottom:6px !important}
.r2legend{padding:4px 10px !important;font-size:10.5px !important;line-height:1.55 !important}
.summary{padding:14px 18px !important;line-height:1.7 !important}
.holdform{margin-top:8px !important;padding-top:8px !important;gap:8px !important}
.decblk{margin-top:5px !important;padding-top:5px !important}
.foot{margin-top:20px !important;padding-top:12px !important}
body{padding-bottom:40px !important}

/* ---- 9. 截断修补与消融表列宽 ---- */
/* Q4/Q5 首行统一，Q5 概率信息放入详情行 */
#declineCard .zrr .dp{display:inline-block;margin-right:4px}
/* 因子消融表：列宽拥抱内容，消掉「相对基准→说明」间空洞 */
.p2-table{width:auto !important;min-width:0 !important}
.p2-table th:first-child,.p2-table td:first-child{min-width:72px}
.p2-table td:last-child{padding-left:24px !important}
/* gate 判定条微收 */
.q1-state{padding:7px 12px !important}

/* ---- 10. Q4/Q5 双列窄栏：行内允许换行，名称不收缩 ---- */
.zitem .zr1{flex-wrap:wrap !important;row-gap:2px !important}
.zitem .zr1 b{flex:0 0 auto !important;min-width:0 !important}

/* ---- 11. 工具条右组防溢出：允许换行 ---- */
.bar>span[style*="margin-left:auto"]{flex-wrap:wrap !important;row-gap:6px !important;max-width:100% !important}
.bar>span[style*="margin-left:auto"] button{flex:0 0 auto}

/* ---- 12. 因子消融表：fixed 布局，说明列吃满剩余宽 ---- */
.cal-tbl.cal-ablation{table-layout:fixed}
.cal-tbl.cal-ablation th:nth-child(1){width:96px}
.cal-tbl.cal-ablation th:nth-child(2),
.cal-tbl.cal-ablation th:nth-child(3),
.cal-tbl.cal-ablation th:nth-child(4),
.cal-tbl.cal-ablation th:nth-child(5){width:110px}
.cal-tbl.cal-ablation td:last-child{color:var(--sub) !important}

/* 消融表数值列右对齐 */
.cal-tbl.cal-ablation td:nth-child(n+2),.cal-tbl.cal-ablation th:nth-child(n+2){text-align:right !important}
.cal-tbl.cal-ablation td:last-child,.cal-tbl.cal-ablation th:last-child{text-align:left !important}

/* ---- 13. Q2 候补池（不可逆淘汰 / 下一交易日窗口 / 数据缺失待复核）：三列软底卡（26-10-10）
   为什么重排：这一栏每条未通过项都带「实际/阈值/差距/数据截至」四个数，多列并排时一句长文本要吃
   4~5 行、日期从连字符处断成两截，同一行三只票长短不一看着像错位。现在：
   ① 桌面三列封顶（列数分级见基础层）；② 每只票一张软底卡，同行三张等高；
   ③ 字段名与"数据截至"在同一行的两端对齐，实际/阈值/差距另起一行按格排，数值用等宽数字纵向可比。
   颜色只承载层级，不新增涨跌语义（红色在本页表示上涨，淘汰项一律用中性灰阶，避免误读成"利好"）。 */
.r2fail .r2fail-list .zitem{min-width:0;border:1px solid var(--line) !important;background:var(--card-soft);border-radius:10px;padding:8px 10px 9px}
.r2fail .r2fail-list .zitem .zr1 b{font-size:13px;max-width:none}
.r2fail .r2fail-list .zitem .ff-code{color:var(--dim);font-size:11px}
.r2fail .r2fail-list .zitem .zpct{font-size:13px}
.r2fail .r2fail-t{color:var(--ink2) !important;font-size:12px;font-weight:600;margin-top:12px}
.r2fail .r2fail-t .ff-n{color:var(--dim);font-weight:400}
.r2fail-sub{color:var(--dim);font-size:11px;line-height:1.55;margin:2px 0 8px}
.ff{display:grid;gap:0}
.r2fail .r2fail-list .zitem .ff{margin-top:6px}
.ff-row{min-width:0;display:grid;gap:1px}
.ff-row+.ff-row{margin-top:6px;padding-top:6px;border-top:1px solid var(--hairline)}
.ff-h{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:2px 10px;min-width:0}
.ff-k{color:var(--ink2);font-size:11.5px;font-weight:600;min-width:0;overflow-wrap:anywhere}
.ff-ds{color:var(--dim);font-size:10.5px;white-space:nowrap;flex:0 0 auto}
.ff-v{display:flex;flex-wrap:wrap;gap:2px 14px;color:var(--dim);font-size:11.5px;min-width:0}
.ff-v b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1}
.ff-plain{color:var(--sub);font-size:11.5px;line-height:1.6}
.ff-next .ff-v b{font-weight:500;color:var(--ink2)}

/* ══════════════════════════════════════════════════════════
   Mobile Adaptation v2 —— 手机端新风格统一适配层
   必须位于覆盖层最末：覆盖基础层里无媒体守卫的 !important 规则
   ══════════════════════════════════════════════════════════ */

@media (max-width:900px){
  .top h1::after{display:none !important}          /* 副标在窄屏换行难看 */
}

@media (max-width:768px){
  .top{position:static !important}                  /* 手机不吸顶，省 58px 首屏 */
  .zcard,.envfull{padding:14px 16px !important;border-radius:14px !important}
  .r2pick{padding:14px 16px !important}
  .gatebar{padding:14px 16px !important}
  .summary{padding:12px 14px !important}
  th,td{padding:10px 10px !important}
  .r2t th,.r2t td{padding:8px 8px !important}
  .zone{margin-bottom:var(--sp-4) !important}
  .zcard,.envfull{margin-bottom:var(--sp-3) !important}
  /* 26-10-09：这两条把一级/二级数字压成同一个 24px，正是"层级分不出来"的根因，删掉后
     由统一层按字阶分档（一级 28 / 二级 22）；实测 360px 单列下 "+12.5%" 也不撑破卡片 */
  .gm b{font-size:22px !important}
  .p-line .p-now{font-size:21px !important}
  .zone-head b{font-size:16px !important}
  .zcard h4{font-size:14px !important}
}

@media (max-width:480px){
  body{font-size:13.5px !important;padding:0 12px 32px !important}
  /* 顶栏通栏：负边距抵消 body 的安全区留白，内容再用同样的安全区收回，避免横屏刘海遮挡 */
  .top{margin-inline:calc(-1 * max(12px,env(safe-area-inset-left,0px))) calc(-1 * max(12px,env(safe-area-inset-right,0px))) !important;margin-block:0 12px !important;padding:10px max(12px,env(safe-area-inset-right,0px)) 10px max(12px,env(safe-area-inset-left,0px)) !important}
  .top h1{font-size:15px !important}
  .top h1 .logo{width:17px !important;height:17px !important;vertical-align:-2.5px !important}

  /* 触控目标回归 32px+（桌面 S/M/L 分级在手机统一放大一档） */
  button{min-height:32px !important;padding:6px 14px !important}
  #refreshBtn,.batch-btn,.ba-toolbar button,.ocr-foot button:not(.ghost),
  #syncPanel .sbtns button:not(.ghost){min-height:36px !important}
  .ba-btn{min-height:40px !important;font-size:11.5px !important;padding:7px 12px !important}
  .snap-btn,.p2-actions button,.ba-head button{min-height:40px !important;font-size:11px !important}
  .del{width:40px !important;height:40px !important;min-width:40px !important;min-height:40px !important;font-size:11px !important;margin-left:6px !important}
  input{min-height:32px !important;font-size:13px !important}
  .pill{padding:4px 10px !important;font-size:11px !important}

  /* 标签手机可读性：micro→caption 档 */
  .tag,.lvchip,.chk,.gchip,.badge,.zitem .zr1 .dp,.rv-src{font-size:11px !important;padding:2.5px 8px !important}
  .tm-now,.tm-dip,.tm-brk,.tag.t,.tag.tm,.timing,.phase{font-size:11.5px !important;padding:3px 9px !important}

  /* 表格密度：手机一档 */
  th,td{padding:9px 8px !important;font-size:12px !important}
  th{font-size:10px !important}

  /* Q4/Q5 双列窄栏：保持换行修复 */
  .zitem .zr1{flex-wrap:wrap !important;row-gap:2px !important}
  .zitem .zr1 b{flex:0 0 auto !important;max-width:9em !important}
  /* Q2 候补池卡片（覆盖层第 13 节）在手机档跟着升一档字号：单列通栏，读的是行不是列 */
  .ff-k{font-size:12.5px}
  .ff-v,.ff-v b,.ff-plain{font-size:12.5px}
  .ff-ds{font-size:11.5px}
  .r2fail .r2fail-list .zitem .zr1 b{font-size:13.5px}
  .r2fail .r2fail-list{row-gap:7px}

  /* ===== r2t 打分表 ≤480 卡片模式恢复（对抗基础层 !important）===== */
  .r2wrap{overflow:visible !important}
  .r2t th,.r2t td{padding:4px 0 !important;border-bottom:none !important;border-right:none !important;background:transparent !important;box-shadow:none !important}
  .r2t thead{display:none !important}
  .r2t tr{display:block !important;width:100% !important;border:1px solid var(--line) !important;border-radius:12px !important;margin:8px 0 !important;padding:10px 12px !important;background:var(--card-soft) !important;box-shadow:none !important}
  .r2t td{display:flex !important;align-items:baseline !important;justify-content:flex-start !important;gap:10px !important;white-space:normal !important;text-align:left !important;max-width:none !important}
  .r2t td:nth-child(1),.r2t td:nth-child(2),.r2t td:nth-child(3){position:static !important;background:transparent !important;box-shadow:none !important;width:auto !important;min-width:0 !important;max-width:none !important}
  .r2t td:nth-child(2){flex-wrap:wrap !important;font-size:14px !important;font-weight:700 !important;padding-bottom:5px !important;border-bottom:1px solid var(--hairline) !important;margin-bottom:4px !important}
  .r2t td::before{content:attr(data-label) !important;color:var(--sub) !important;font-size:11px !important;text-align:left !important;flex:0 0 6.8em !important}
  .r2t td b{font-size:14px !important}
  .r2t .tag.t{border:none !important;background:none !important;padding:0 !important;margin-left:6px !important;font-size:16px !important;vertical-align:-2px !important}
  .r2t td.ba-cell{justify-content:flex-start !important;padding-top:6px !important}
  .r2t td.ba-cell::before{display:none !important}
  /* 状态列：桌面端无标签显示「—」，卡片模式没有信息就不占一行 */
  .r2t td.r2-st-empty{display:none !important}
  .r2t td.r2-tgt{min-width:0 !important;padding:3px 0 !important}
  .r2t .tg-main{font-size:13px !important}
  .r2t .tg-sub{font-size:10.5px !important;white-space:nowrap !important}

  /* 主表 5 列精简（沿用原生规则）+ 容器 */
  #tbl{min-width:360px !important;font-size:12px !important}
  .tblwrap{max-height:58vh !important}

  /* KPI 与标题 */
  /* 同上：手机档不再压平两级字号，一级 28 / 二级 22 在手机上也分得出来
     （一级最宽的读数是"29.5%"六个字，360px 单列卡装得下，实测无横向溢出） */
  .zone-head b{font-size:15px !important}
  .q1-state{font-size:12px !important}
  .rv-sec{font-size:13.5px !important}
  .holdverdict{font-size:16px !important}
}

/* ══════════════════════════════════════════════════════════
   Global Safe Gutter v1 —— 全站页边距硬规范
   1) 页面级内容始终留出安全边距；2) 断点只改变 token，不允许归零；
   3) 遮罩层可覆盖视口，但弹窗内容、提示与浮层必须落在安全区内。
   ══════════════════════════════════════════════════════════ */
body{padding-inline-start:max(var(--page-gutter),env(safe-area-inset-left)) !important;padding-inline-end:max(var(--page-gutter),env(safe-area-inset-right)) !important;padding-block-start:0 !important}
.top{top:0;margin-inline:0 !important;padding-inline:0 !important}
#syncPanel{max-width:calc(100vw - (var(--page-gutter) * 2))}
.ocr-modal,.ba-modal{padding:max(var(--page-gutter),env(safe-area-inset-top)) max(var(--page-gutter),env(safe-area-inset-right)) max(var(--page-gutter),env(safe-area-inset-bottom)) max(var(--page-gutter),env(safe-area-inset-left))}
.ocr-box{width:min(680px,100%);max-height:calc(100dvh - (var(--page-gutter) * 2))}
.toast{max-width:calc(100vw - (var(--page-gutter) * 2));bottom:max(var(--sp-5),calc(var(--sp-4) + env(safe-area-inset-bottom)))}

@media (max-width:1280px){
  :root{--page-gutter:var(--sp-5)}
}
@media (max-width:768px){
  :root{--page-gutter:var(--sp-4)}
}
@media (max-width:640px){
  #sug{width:100%;min-width:0}
  .ba-modal{align-items:center;justify-content:center}
  .ba-card{width:100%;max-width:100%;height:calc(100dvh - (var(--page-gutter) * 2));max-height:calc(100dvh - (var(--page-gutter) * 2));border:1px solid var(--line) !important;border-radius:var(--r-lg) !important}
  #syncPanel{
    position:fixed;left:max(var(--page-gutter),env(safe-area-inset-left));right:max(var(--page-gutter),env(safe-area-inset-right));
    top:auto;bottom:max(var(--page-gutter),env(safe-area-inset-bottom));width:auto;max-width:none;max-height:calc(100dvh - (var(--page-gutter) * 2));overflow:auto;
  }
}
@media (max-width:480px){
  :root{--page-gutter:var(--sp-4)}
  body{padding-inline-start:max(var(--page-gutter),env(safe-area-inset-left)) !important;padding-inline-end:max(var(--page-gutter),env(safe-area-inset-right)) !important;padding-block-start:0 !important}
  .top{margin-inline:0 !important;padding-inline:0 !important}
}

/* ══════════ 验证统计区：紧凑可读专项 ══════════
   只压缩统计区的留白与重复标题，不改数据、口径、交互或色彩。 */
.rv-scenario,.p2-lab{margin:12px 0 10px !important}
.rv-scenario summary,.p2-lab>summary{min-height:36px !important;padding:8px 10px !important;font-size:12.5px !important}
.rv-scenario-note{padding:0 10px 7px !important;font-size:10.5px !important;line-height:1.48 !important}
.rv-scenario-table{width:calc(100% - 20px) !important;margin:0 10px !important;font-size:10.5px !important}
.rv-scenario-table th,.rv-scenario-table td{padding:4px 7px !important}
.rv-scenario-detail{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 16px;padding:8px 10px 6px !important}
.rv-scenario-case{min-width:0;padding-top:0}
.rv-scenario-case h5{margin:0 0 5px !important;font-size:10.5px !important;line-height:1.35 !important}
.rv-scenario-detail-grid{margin:0 !important}
.rv-scenario-detail-grid span{padding:5px 7px !important;font-size:10px !important;line-height:1.25 !important}
.rv-scenario-detail-grid b{font-size:11px !important;margin-top:1px !important}
/* 走势明细改为横向三列；单条信息截断而非换行，避免纵向堆成一长列。 */
.rv-scenario-recent{grid-template-columns:repeat(3,minmax(0,1fr)) !important;gap:3px 10px !important;line-height:1.35 !important}
.rv-scenario-recent>div{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv-scenario-empty{padding:6px 0 !important;font-size:10.5px !important;line-height:1.45 !important}
@media (max-width:900px){.rv-scenario-recent{grid-template-columns:repeat(2,minmax(0,1fr)) !important}}
@media (max-width:640px){.rv-scenario-detail{grid-template-columns:minmax(0,1fr) !important}.rv-scenario-recent{grid-template-columns:minmax(0,1fr) !important}}
.rv-scenario-recent{gap:2px !important;font-size:10px !important;line-height:1.4 !important}
.p2-body{padding:0 10px 10px !important}
.p2-note{font-size:10.5px !important;line-height:1.45 !important;margin-bottom:5px !important}
.p2-grid{gap:10px 14px !important}
.p2-module:nth-child(n+3){padding-top:8px !important}
.p2-module h5{margin-bottom:4px !important;font-size:11px !important}
.p2-table th,.p2-table td{padding:4px 6px !important;font-size:10.5px !important;line-height:1.35 !important}
.p2-table td:last-child{padding-left:14px !important}
@media (max-width:700px){
  .rv-scenario-detail{grid-template-columns:minmax(0,1fr);gap:8px}
  .rv-scenario-case+.rv-scenario-case{border-top:1px solid var(--hairline);padding-top:8px}
  .p2-grid{gap:9px !important}
  .p2-module:nth-child(n+2){padding-top:8px !important}
}
@media (max-width:480px){
  .rv-scenario summary,.p2-lab>summary{padding:8px 9px !important}
  .rv-scenario-note,.p2-body{padding-left:9px !important;padding-right:9px !important}
  .rv-scenario-table{width:calc(100% - 18px) !important;margin-inline:9px !important}
  .p2-actions{margin-left:14px !important}
}

/* ══════ 触控放大：大屏手机横屏 / 小平板 / 平板竖屏 / 折叠屏（481–834px） ══════
   手机放大规则只写到 ≤480，481 以上既拿不到手机放大、又不是真正的鼠标桌面，
   按钮停在 24–28px 高，手指容易点偏。用 min-width:481 限定区间，避免把手机上
   已放大的 40px 覆盖回小尺寸（后写的 CSS 会赢，不限区间就是回归）。 */
@media (min-width:481px) and (max-width:834px){
  .ba-btn{min-height:36px !important;padding:6px 12px !important;font-size:11.5px !important}
  .snap-btn{min-height:36px !important;padding:6px 12px !important;font-size:11px !important}
  .p2-actions button{min-height:36px !important}
  /* 特异性必须对齐 1215 行的 :not(.batch-btn)，否则后写也赢不了 */
  #syncBtn,.bar .icon-text:not(.batch-btn){min-height:36px !important}
  /* 顶栏的「观察提醒 / 手动刷新」不在 .bar 内，需单独覆盖 */
  .top .right .icon-text{min-height:36px !important}
  /* 闭环卡头（展开/收起）默认只有 22px 高，平板竖屏手指点不到 */
  #reviewCard h4[role="button"]{min-height:34px !important}
  input{min-height:34px !important}
}

/* ══════════ Global Table Standard v1 · 股票池基准 ══════════
   所有数据表复用同一套节奏：浅色表头、细分隔线、统一行高、斑马纹与悬停反馈。
   只约束视觉层，不改变字段、列序、数据、排序、筛选、滚动或移动端信息结构。
   业务表若有独立的手机卡片模式，仅保留该模式的布局转换。
   ══════════════════════════════════════════════════════════════ */
:root{
  --table-head-bg:var(--card-soft);
  --table-row-bg:var(--card);
  --table-row-alt:var(--card-hover);
  --table-row-hover:var(--hover-bg);
  --table-row-selected:var(--mint-soft);
  --table-line:var(--hairline);
  --table-head-line:var(--line);
  --table-cell-x:12px;
  --table-cell-y:11px;
  --table-head-size:10.5px;
  --table-body-size:12px;
  --table-row-min:40px;
}
/* 统一外框：股票池的白底、细描边、圆角和轻阴影成为所有表格容器的共同基准。 */
.tblwrap,.r2wrap,.rv-tables .cal-scroll,.p2-scroll,.ba-sec-body table{
  background:var(--card) !important;
  border:1px solid var(--line) !important;
  border-radius:var(--r-lg) !important;
  box-shadow:var(--shadow-sm) !important;
}
.tblwrap,.r2wrap,.rv-tables .cal-scroll,.p2-scroll{overflow:auto !important}
/* 所有表格共享同一套单元格尺寸、字体、底色和分隔线。 */
#tbl,.r2t,.cal-tbl,.p2-table,.rv-scenario-table,.ba-sec-body table{
  width:100%;
  background:transparent !important;
  border-collapse:separate !important;
  border-spacing:0 !important;
  table-layout:auto;
}
#tbl th,#tbl td,.r2t th,.r2t td,.cal-tbl th,.cal-tbl td,.p2-table th,.p2-table td,.rv-scenario-table th,.rv-scenario-table td,.ba-sec-body table th,.ba-sec-body table td{
  min-height:var(--table-row-min);
  padding:var(--table-cell-y) var(--table-cell-x) !important;
  border:0 !important;
  border-bottom:1px solid var(--table-line) !important;
  background:var(--table-row-bg) !important;
  color:var(--ink2);
  font-size:var(--table-body-size) !important;
  line-height:1.45 !important;
  vertical-align:middle;
  white-space:nowrap;
}
/* 手机端主表紧凑化（2026-09-24 真实 Chrome+CDP 实测修复）：
   上面共享单元格规则是 `font-size/padding: var(--table-body-size)/var(--table-cell-*) !important`，
   而旧的手机媒体查询改的是 `#tbl{font-size}` 与 `#tbl th,#tbl td{padding}`（无 !important）——
   实测从 390px 到 1440px 单元格恒为 12px / padding 11px 12px，紧凑意图全落空、手机比平板还宽。
   正确做法是在 #tbl 上重声明这几个 Custom Property：属性会继承给单元格，绕开 !important 之争。
   仅作用主表，不改 .r2t/明细表（它们不在 #tbl 下）。旧的 #tbl{font-size}/padding 行自此对单元格失效，保留不删以免动到该块其它规则。 */
@media (max-width:480px){#tbl{--table-body-size:11.5px;--table-cell-x:4px;--table-cell-y:3px;--table-head-size:10px}}
@media (min-width:481px) and (max-width:640px){#tbl{--table-body-size:12px;--table-cell-x:6px;--table-cell-y:5px}}
#tbl th,.r2t th,.cal-tbl th,.p2-table th,.rv-scenario-table th,.ba-sec-body table th{
  min-height:36px;
  background:var(--table-head-bg) !important;
  color:var(--dim) !important;
  font-size:var(--table-head-size) !important;
  font-weight:600 !important;
  line-height:1.35 !important;
  letter-spacing:.2px;
  text-align:right;
  position:sticky;
  top:0;
  z-index:4;
}
/* 主行情表每一列统一左对齐：表头与对应数据从同一水平位置起始，所有行保持一致。 */
#tbl th,#tbl td,#tbl th.l,#tbl td.l,#tbl th.c,#tbl td.c{text-align:left !important}
.r2t th:first-child,.r2t td:first-child,.cal-tbl th:first-child,.cal-tbl td:first-child,.p2-table th:first-child,.p2-table td:first-child,.ba-sec-body table th:first-child,.ba-sec-body table td:first-child{text-align:left !important}
/* M10 复盘卡三类表（.cal-tbl / .p2-table / .rv-scenario-table）非首列：表头与数据格同向右对齐。
   根因：上方「=== 表格 ===」段的全局 `th{text-align:left !important}` 压过了本段 `th{text-align:right}`（无 !important），
   而数据格 td 在 base.css 里是 `:not(:first-child){text-align:right}`，于是表头靠左、数字靠右，整列错位（2026-10-22 实测：三类表共 11 张全中招）。
   特异性 (0,2,1) 高于全局 th，低于 `.cal-tbl.cal-ablation th:last-child`(0,3,1)，所以消融表「最后一列靠左」的例外仍然生效。 */
.cal-tbl th:not(:first-child),.p2-table th:not(:first-child),.rv-scenario-table th:not(:first-child){text-align:right !important}
/* 斑马纹只作用于数据行，表头和股票池的空态不染色。 */
#tbl tbody tr:nth-child(even) td,.r2t tbody tr:nth-child(even) td,.cal-tbl tbody tr:nth-child(even) td,.p2-table tbody tr:nth-child(even) td,.rv-scenario-table tbody tr:nth-child(even) td,.ba-sec-body table tbody tr:nth-child(even) td{background:var(--table-row-alt) !important}
#tbl tbody tr:hover td,.r2t tbody tr:hover td,.cal-tbl tbody tr:hover td,.p2-table tbody tr:hover td,.rv-scenario-table tbody tr:hover td,.ba-sec-body table tbody tr:hover td{background:var(--table-row-hover) !important}
#tbl tbody tr[aria-selected="true"] td,#tbl tbody tr.selected td,#tbl tbody tr.is-selected td,.r2t tbody tr[aria-selected="true"] td,.r2t tbody tr.selected td,.r2t tbody tr.is-selected td,.cal-tbl tbody tr[aria-selected="true"] td,.cal-tbl tbody tr.selected td,.p2-table tbody tr[aria-selected="true"] td,.p2-table tbody tr.selected td{background:var(--table-row-selected) !important}
#tbl tbody tr:last-child td,.r2t tbody tr:last-child td,.cal-tbl tbody tr:last-child td,.p2-table tbody tr:last-child td,.rv-scenario-table tbody tr:last-child td,.ba-sec-body table tbody tr:last-child td{border-bottom:0 !important}
/* 空数据状态：沿用股票池的克制留白，保证“无数据”与真实数据行有明确区别。 */
#tbl tbody tr:only-child td[colspan],.r2t tbody tr:only-child td[colspan],.cal-tbl tbody tr:only-child td[colspan],.p2-table tbody tr:only-child td[colspan],.rv-scenario-table tbody tr:only-child td[colspan],.ba-sec-body table tbody tr:only-child td[colspan]{padding:28px 16px !important;text-align:center !important;color:var(--dim) !important;background:var(--card) !important;font-size:12px !important}
/* 分页若由后续业务表接入，直接沿用股票池的间距、文字与当前页强调态。 */
.table-pagination,.pagination,.pager{display:flex;align-items:center;justify-content:flex-end;gap:6px;margin-top:10px;color:var(--dim);font-size:11px}
.table-pagination button,.pagination button,.pager button{min-width:28px;min-height:28px;padding:4px 8px !important;background:var(--card) !important;color:var(--ink2) !important;border:1px solid var(--line) !important;border-radius:8px !important}
.table-pagination button:hover,.pagination button:hover,.pager button:hover,.table-pagination .is-current,.pagination .is-current,.pager .is-current{background:var(--mint-soft) !important;color:var(--mint-deep) !important;border-color:var(--acc-line) !important}
.table-pagination button:disabled,.pagination button:disabled,.pager button:disabled{background:var(--card-soft) !important;color:var(--faint) !important;border-color:var(--line) !important}
/* 移动端保留既有 Q2/BA 卡片化信息结构，仅把颜色、字体和状态继续接入统一令牌。 */
@media (max-width:480px){
  .r2t th,.r2t td{padding:4px 0 !important;border-bottom:0 !important;background:transparent !important;min-height:0}
  .r2t tr{background:var(--card-soft) !important;border-color:var(--line) !important}
  .ba-sec-body table th,.ba-sec-body table td{padding:5px 0 !important;background:transparent !important;border-bottom:1px dashed var(--table-line) !important;min-height:0}
  .ba-sec-body table tr{background:transparent !important}
}

/* === 结论区重排（26-09-11）：Q3 通栏、Q4/Q5 一行两列、Q6/Q6b 独立成卡 === */
#rankCard{margin:var(--sp-2) 0 0}
#rankCard .q3t{font-size:12px}
.cgrid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-2);margin:var(--sp-2) 0 0}
.cgrid2>.zcard{min-width:0}
#excludedCard{margin:var(--sp-2) 0 0}
#reboundCard{margin:var(--sp-2) 0 0}
#reboundCard .rblist{margin-top:2px}
@media (max-width:640px){.cgrid2{grid-template-columns:minmax(0,1fr)}}

/* === 指数去重（26-09-11）：近3日累计并入指数卡，环境条款只留一条结论 === */
.market-index-cum{font-size:10.5px;line-height:1.3;margin:2px 0 1px;color:var(--sub)}
.market-index-cum.warn{font-weight:600}
.envclause{padding:7px 9px;margin:0 0 5px;border:1px dashed var(--line);border-radius:8px;background:var(--card-soft);min-width:0}
.envclause .el{white-space:normal;overflow-wrap:anywhere;color:var(--dim);font-size:11.5px;line-height:1.45}
@media (max-width:640px){.envclause .el{font-size:12px}}

/* === 驾驶舱紧凑化（26-09-12）：压纵向、提密度、弱化次要描述 ===
   26-09-14 二轮「纵向空间压缩」（老板截图：六张卡整体过高、卡内下半截空着）。实测定位到两件事：
   ① 1440 档驾驶舱是三列，第三列「执行价位」卡只有 291px 宽，而 .ba-exec-grid 用的
      repeat(auto-fit,minmax(150px,1fr)) 在这个宽度下只放得下 1 列 —— 于是买入区/止损/T1T2/当前判断
      四个短字段被硬压成竖排 4 行，把整行撑到 211px。这正是 1680 行那条注释想避免的情况
      （"不再把执行价位硬压成竖排"），只是当时的 media 查询只覆盖到 ≤1180px，最宽的三列档漏了。
      改法：直接把 repeat(2,minmax(0,1fr)) 写进基础档，与 900/1100/768 档既有设计拉齐 → 该卡 211→134。
   ② 第一行由「执行价位」卡定高，它旁边的状态格与风险灯卡内容只有 49~87px，
      grid 默认 stretch 会把这些格子连同格内元素一起拉高（.ba-state-line 的两行也被摊开，
      每个小格被撑到 94~109px）。加 align-content:start 后格内元素按内容收拢。
   实测（无头，伪造报告，1440×900）：驾驶舱 340.1 → 253.3px（−25.5%）；
   验证 1440/1100/900/768/600/390 六档、含 6 条支持证据的长内容压力档：零横向溢出、字段不换行、
   900/768 档 exec-grid 本就是两列（不受影响），手机档因同一处对齐调整同步变矮 18~22px。 */
.ba-state-line{grid-template-columns:repeat(2,minmax(0,1fr)) !important;gap:4px !important;margin-bottom:4px !important;align-content:start !important}
.ba-state-item{padding:3px 6px !important;border-radius:6px !important}
.ba-state-item span{font-size:9.5px !important;line-height:1.2}
.ba-state-item b{font-size:11.5px !important;margin-top:0 !important;line-height:1.3}
.ba-cockpit{gap:4px !important;margin:0 0 3px !important}
.ba-cockpit-card{padding:4px 7px !important}
.ba-exec-grid{gap:3px !important;grid-template-columns:repeat(2,minmax(0,1fr)) !important}
/* 两个字段一行后，第 3 个字段是下一行的首个，不能再带行首那条竖分隔线（与 ≤1180 档同一处理） */
.ba-exec-grid>div:nth-child(3){padding-left:0 !important;border-left:0 !important}
.ba-exec-grid b{font-size:11px !important}
.ba-evidence-grid{margin-top:4px !important;gap:4px !important}
.ba-evidence{padding:3px 6px !important}
.ba-evidence ul{margin:2px 0 0 !important;font-size:10.5px !important;line-height:1.3 !important}
.ba-price-path{margin:3px 0 0 !important}
/* 价格刻度尺的 4 个节点各是「名称+价格」两行，行距收到 1.15；圆点与那根连接线的尺寸、位置一律不动
   （线在 top:9px 是与 10px 圆点的圆心对齐的，动圆点就要同步动线，不值这点高度）。 */
.ba-price-node{line-height:1.15 !important}
/* 26-10-10：价格路径在浅色主题下原本是"四个孤点 + 看不见的标签"——基础层的标签色、连线色
   都是深色主题遗留（白半透明），节点描边还是 #1e1e36。这里补齐浅色，并把节点颜色按语义重排：
   止损=琥珀（预警）、买入区=蓝（信息/立即）、目标=红（A股上行方向），不再用绿色表示目标价。 */
.ba-price-node{color:var(--sub) !important;font-size:10.5px !important;word-break:keep-all}   /* 中文不在词中间断行：实测"（备用观/察，不执行）"会被劈开 */
.ba-price-node b{color:var(--ink) !important;font-weight:600;font-size:11.5px}
.ba-price-path:before{background:var(--line-strong) !important}
.ba-price-node i{border-color:var(--card) !important}
.ba-price-node.stop i{background:var(--amber) !important}
.ba-price-node.entry i{background:var(--blue) !important}
.ba-price-node.target i{background:var(--up) !important}
/* 数据源健康标签：纵向内边距 2→1，四个标签并排时不至把卡片顶高 */
.ba-source{padding:1px 5px !important}

/* === 报告全文视图（26-09-12）：头部真正贴顶、左右页边距放宽、段落与行距拉开 === */
/* 容器 padding 归零，改由 shell/head 自己控制：否则 sticky top:0 之上会露出一条
   容器内边距形成的空隙，正文从头部上方穿过（截图里顶部那段空白） */
.ba-full-view{padding:0 !important}
.ba-full-shell{width:min(1160px,100%) !important;padding:0 clamp(28px,8vw,110px) !important}
.ba-full-head{position:sticky !important;top:0 !important;z-index:12 !important;
  padding:12px clamp(28px,8vw,110px) !important;margin:0 0 14px !important;
  background:var(--bg,#151525) !important;border-bottom:1px solid var(--border) !important}
.ba-full-summary,.ba-full-body,.ba-full-review,.ba-full-peer{
  padding:16px clamp(14px,3vw,30px) !important;line-height:1.65 !important}
.ba-full-body h2,.ba-full-body h3,.ba-full-body h4{margin:16px 0 8px !important;line-height:1.5 !important}
.ba-full-body p{margin:0 0 8px !important}
.ba-full-body ul,.ba-full-body ol{margin:0 0 8px !important;padding-left:22px !important}
.ba-full-body li{margin:0 0 4px !important;line-height:1.65 !important}
/* 窄屏回收到适度边距，避免上面的宽页边距把手机正文挤成一条（媒体查询必须在基础规则之后） */
@media (max-width:640px){
  .ba-full-shell{padding:0 14px !important}
  .ba-full-head{padding:10px 14px !important}
  .ba-full-summary,.ba-full-body,.ba-full-review,.ba-full-peer{padding:12px !important;line-height:1.65 !important}
}

/* Q2 候选卡响应式兜底：此前三等分轨道允许被压到接近 0px，宽度临界时中文会逐字竖排，进而把整张卡撑成空白长页。
   以明确断点收口：宽屏三列、1000px 以下两列、手机一列；卡片高度只由自身内容决定。 */
.r2picks.pick-n2,.r2picks.pick-n3{align-items:start}
.r2picks .r2pick{min-width:0;min-height:0;overflow-wrap:normal}
@media (max-width:1000px) and (min-width:641px){
  .r2picks.pick-n3{grid-template-columns:repeat(2,minmax(0,1fr)) !important}
}
@media (max-width:640px){
  .r2picks.pick-n2,.r2picks.pick-n3{grid-template-columns:minmax(0,1fr) !important}
}

/* Layout contract: this final layer owns spacing, alignment and responsive geometry. */
:root{
  --section-gap:16px;--surface-padding:16px;--control-height:36px;
  --num:"DIN-PRO Numbers","DIN Pro","DIN Alternate",Arial,"PingFang SC","Microsoft YaHei",sans-serif;
}
*{letter-spacing:0 !important;scrollbar-color:var(--line-strong) transparent}
body{line-height:var(--lh) !important;padding-bottom:48px !important}
:is(.top,.zone,.zcard,.bar,.tblwrap,.envsec,.envgrp,.r2pick,.rv-table-block,.ba-cockpit-card){min-width:0}
.top{gap:12px !important;padding-block:12px !important;margin-block:0 16px !important;justify-content:flex-start;align-items:center}
.top h1{font-size:18px !important;line-height:1.4;flex-shrink:0;gap:8px}
.top h1::after{margin-left:8px;font-size:10px}
.top h1 .logo{width:20px !important;height:20px !important}
.top .right{min-width:0;flex-wrap:wrap;justify-content:flex-end;gap:8px 12px !important}
.top .right>:is(span,button){flex-shrink:0}
.pill{display:inline-flex;align-items:center;min-height:28px;border-radius:6px !important;line-height:1.5}
button{min-height:var(--control-height) !important;border-radius:8px !important;line-height:1.5 !important;font-family:var(--sans)}
button:hover,button:active,.zcard:hover,.r2pick:hover{transform:none !important}
.zcard:hover,.r2pick:hover{box-shadow:var(--shadow-sm) !important}
:is(.top,.bar) button{height:var(--control-height) !important;min-height:var(--control-height) !important}
:is(#refreshBtn,#syncBtn,.bar .icon-text,.ba-head button,.ba-toolbar button,.holdform button,.watch-actions button){border-radius:8px !important}
input:not([type="checkbox"]):not([type="radio"]):not([type="file"]){min-width:0;min-height:var(--control-height) !important;border-radius:8px !important;font-size:13px !important;padding:7px 12px !important;box-shadow:none !important}
input:focus-visible{outline:var(--focus-ring) !important;outline-offset:2px}
.icon-only{width:var(--control-height) !important;height:var(--control-height) !important;min-width:var(--control-height) !important;padding:0 !important;flex-shrink:0}
.del{margin-left:0 !important;background:transparent !important;color:var(--dim) !important;box-shadow:none !important}
.del:hover{background:var(--up-soft) !important;color:var(--up) !important}
.zone{display:grid;gap:var(--section-gap);margin:0 0 var(--section-gap) !important}
.zcard,.envfull{padding:var(--surface-padding) !important;margin-bottom:var(--section-gap) !important;overflow:visible;border-radius:var(--r-control) !important}
.zone>.zcard,.cgrid2>.zcard,.cgrid3>.zcard{margin:0 !important}
.cgrid2,.cgrid3{gap:var(--section-gap) !important;margin:var(--section-gap) 0 !important;align-items:start}
#excludedCard{margin:0 0 var(--section-gap) !important}
.zcard h4{display:flex;align-items:center;flex-wrap:wrap;gap:8px;line-height:1.6 !important;margin-bottom:8px !important;font-size:15px !important}
.qtag{flex:0 0 28px;width:28px;height:28px;margin:0 !important;border-radius:6px !important}
.zcard h4 .phase{float:none;margin-left:auto;max-width:100%;white-space:normal}
#reviewCard .rv-caret{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;width:24px;height:24px;float:none;margin:0 0 0 auto;align-self:center;line-height:1}
#reviewCard h4 .rv-head-actions{position:static;float:none !important;display:flex !important;flex-wrap:wrap;gap:8px !important;min-width:0;max-width:100%;margin:0 !important}
#reviewCard.collapsed h4{margin-bottom:0 !important}
.empty{line-height:1.7;overflow-wrap:anywhere}
.phase-detail{padding-bottom:8px !important;margin-bottom:8px !important;line-height:1.7 !important}
.q1-state{margin-bottom:8px;padding:8px 12px !important;border-radius:6px !important}
.envcols{gap:12px !important}
.envsec+.envsec{margin-top:0;padding-top:12px !important}
.envsec-t,.envgrp-t{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin-bottom:6px !important;line-height:1.5}
.envgrp+.envgrp{margin-top:12px}
.market-index-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:8px 0}
.market-index{display:block;padding:8px !important;min-width:0}
.market-index-name{font-size:12px;white-space:normal;line-height:1.5}
.market-index-price{font-size:22px !important;line-height:1.3;margin:2px 0}
.market-index-meta{flex-wrap:wrap;gap:4px 8px;font-size:12px;line-height:1.5}
.market-index-meta .amount.up{color:var(--up) !important}
.market-index-meta .amount.down{color:var(--dn) !important}
.market-index-cum{margin-top:4px;font-size:11px;line-height:1.6;overflow-wrap:anywhere}
.market-breadth{padding-top:8px;gap:6px 12px;line-height:1.7;font-size:12px}
.envgrid-us,.envgrid-ap{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px 20px}
.envcell{padding:4px 0;border-bottom:1px solid var(--hairline)}
.envcell .el{white-space:normal;overflow:visible;line-height:1.5;min-height:18px}
.envcell .ev{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 8px;margin-top:2px;font-size:16px !important;line-height:1.5;overflow-wrap:normal}
.envcell .ev>span{white-space:nowrap;font-size:13px}
.r2picks{gap:12px !important;margin-top:12px !important;align-items:start}
.r2picks .r2pick{padding:12px !important;border-radius:8px !important;overflow:visible}
.r2-core{grid-template-columns:minmax(0,1fr);gap:8px;margin-top:8px}
.r2-core .r2-summary{padding:0;min-width:0}
.r2-core .sum-text{font-size:13px !important;line-height:1.7 !important;overflow-wrap:anywhere}
.r2-evidence li{white-space:normal;overflow:visible;line-height:1.7}
.trade-state{gap:6px 10px;padding:8px 10px;margin-top:8px}
.trade-state.ts-green{border-left-color:var(--dn)}
.risk-facts{flex-wrap:wrap;gap:6px;padding:6px 0;background:transparent !important;border:0;border-top:1px dashed var(--line);border-radius:0}
.pricebox{grid-template-columns:repeat(2,minmax(0,1fr)) !important;gap:8px !important;margin-top:8px !important}
.pricebox .kv2{display:flex !important;flex-direction:column;align-items:flex-start;gap:4px;padding:6px 0 !important;background:transparent !important;border:0 !important;border-top:1px solid var(--line) !important;border-radius:0 !important}
.pricebox .kv2 span{font-size:11px !important;line-height:1.5}
.pricebox .kv2 b{font-size:15px !important;white-space:normal;overflow-wrap:anywhere;line-height:1.5}
.zitem{padding:6px 0;min-width:0}
.zitem .zr1{gap:4px 8px;align-items:baseline;line-height:1.6}
.zitem .zr1 b{max-width:none !important;white-space:normal;overflow-wrap:anywhere}
.zitem .zrr{font-size:12px !important;line-height:1.7;margin-top:6px;overflow-wrap:anywhere}
.zitem .zr1 .zpct{flex-shrink:0}
.r2fail .r2fail-list{gap:8px}
.r2fail .r2fail-list .zitem{padding:8px;border-radius:8px}
.ff-v{gap:4px 12px;line-height:1.7}
.ff-ds{white-space:normal;overflow-wrap:anywhere}
.gatebar{padding:8px 12px !important;gap:6px 12px !important;border-radius:8px !important;line-height:1.7}
.gatebar .gw{font-size:12px !important;overflow-wrap:anywhere}
.holdform{gap:8px !important;align-items:center;flex-wrap:wrap;margin-top:12px !important}
.holdform input{height:var(--control-height) !important}
.rv-kpi,.rv-stats{gap:8px !important;padding:4px 0 12px !important}
.rv-m,.rv-kpi .rv-m,.rv-stats .rv-m{padding:12px 14px !important;border-radius:8px !important;min-width:0}
.rv-m b{max-width:100%;white-space:normal;overflow-wrap:anywhere}
.rv-m span{line-height:1.6 !important}
.rv-sec{margin:16px 0 8px !important;line-height:1.6;flex-wrap:wrap}
.rv-how,.rv-lede,.rv-fn{font-size:12px !important;line-height:1.7 !important}
.rv-scenario-recent>div{white-space:normal;overflow:visible;overflow-wrap:anywhere}
.bar{gap:12px !important;margin:16px 0 12px !important;align-items:center}
#searchBox{flex:1 1 300px;min-width:0;max-width:420px}
#q{width:100% !important;height:var(--control-height) !important}
.bar>.pool-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-left:auto;min-width:0;max-width:100%}
#poolMeta{font-size:12px;line-height:1.5;white-space:normal}
.tblwrap{border-radius:8px !important;margin-bottom:16px !important;scrollbar-gutter:stable}
.tblwrap>.summary{position:sticky;left:0;z-index:5;padding:12px 16px !important;line-height:1.7 !important}
#tbl{--table-cell-x:12px;--table-cell-y:10px}
#tbl th:nth-child(n+4):not(:last-child),#tbl td:nth-child(n+4):not(:last-child){text-align:right !important}
#tbl th.c,#tbl td.ba-cell{text-align:center !important}
.r2wrap{box-shadow:none !important;border-radius:8px !important}
.r2t th,.r2t td{padding:10px 12px !important;line-height:1.6 !important}
.r2t th.c,.r2t td.ba-cell{text-align:center !important}
.foot{margin:16px 0 !important;padding:0 !important;font-size:12px !important;line-height:1.8;max-width:none;overflow-wrap:anywhere}
.foot-line+.foot-line{margin-top:8px}
.ba-card,.ocr-box{border-radius:var(--r-control) !important}
.ba-head,.ba-meta,.ba-concl,.ba-body,.ba-toolbar,.ba-disclaimer{padding-inline:16px !important}
.ba-head{gap:8px 12px;padding-block:12px;flex-wrap:wrap;align-items:center}
.ba-head button,.ba-toolbar button{min-height:var(--control-height) !important}
.ba-head .ba-stock{line-height:1.5;white-space:normal;overflow-wrap:anywhere;min-width:0}
.ba-badge{background:var(--card-inset) !important;color:var(--ink2) !important;border-color:var(--line) !important;white-space:normal}
.ba-meta{padding-block:12px !important;line-height:1.7}
.ba-meta-top{flex-wrap:wrap;gap:6px 12px}
.ba-meta-chg.up{color:var(--up) !important}.ba-meta-chg.down{color:var(--dn) !important}
.ba-concl{position:static !important;padding-block:12px !important}
.ba-cockpit{grid-template-columns:repeat(2,minmax(0,1fr)) !important;gap:8px !important;margin:0 0 8px !important;align-items:start}
.ba-cockpit-card,.ba-state-item,.ba-evidence{padding:8px !important;min-width:0}
.ba-cockpit-card:last-child{grid-column:auto !important}
.ba-state-line{gap:8px !important;margin:0 !important}
.ba-state-item span,.ba-cockpit-label,.ba-exec-grid span{font-size:12px !important;line-height:1.6 !important}
.ba-state-item{background:var(--card-soft);border-color:var(--line)}
.ba-state-item span{color:var(--sub) !important}
.ba-state-item b{color:var(--ink) !important}
.ba-state-item.blocked b{color:var(--up) !important}
.ba-state-item.ready b{color:var(--dn) !important}
.ba-state-item b,.ba-exec-grid b{font-size:13px !important;line-height:1.6 !important;overflow-wrap:anywhere;white-space:normal}
.ba-cockpit-main{font-size:13px !important;line-height:1.7 !important}
.ba-cockpit-main small{font-size:12px !important;line-height:1.7 !important}
.ba-exec-grid{gap:6px !important}
.ba-exec-grid>div{padding:0 !important;border:0 !important}
.ba-evidence-grid{gap:8px !important;margin-top:0 !important}
.ba-evidence ul{font-size:12px !important;line-height:1.8 !important;margin-top:4px !important}
.ba-price-path{margin-top:8px !important;gap:8px}
.ba-price-node{font-size:11px !important;line-height:1.6 !important;overflow-wrap:anywhere;word-break:normal}
.ba-source-health{flex-wrap:wrap;gap:8px !important}
.ba-source{font-size:12px !important;line-height:1.6 !important}
.ba-dec{padding:12px 0 !important;background:transparent !important;border-radius:0 !important;border:0 !important;border-top:1px solid var(--line) !important}
.ba-dec-head{flex-wrap:wrap;gap:8px 12px !important;margin-bottom:8px !important}
.ba-cmd{flex-wrap:wrap;line-height:1.6 !important}
.ba-chips{grid-template-columns:repeat(2,minmax(0,1fr)) !important;gap:8px !important}
.ba-chips .kv2{display:flex;align-items:flex-start;flex-wrap:wrap;gap:6px 12px;padding:8px !important;line-height:1.7 !important;background:var(--card-soft) !important;border:1px solid var(--line) !important}
.ba-chips .kv2 span{font-size:12px !important}.ba-chips .kv2 b{font-size:14px !important;color:var(--ink) !important;white-space:normal;overflow-wrap:anywhere}
.ba-chips .kv-signal{background:transparent !important;border:0 !important;padding:4px 0 !important}
.ba-chips .kv-entry b{color:var(--up) !important}
.ba-chips .kv-entry{padding-right:12px !important}
.ba-chips .kv-when{position:static;transform:none;max-width:100%;font-size:11px !important;line-height:1.6;white-space:normal}
.ba-body{padding-block:12px !important}
.ba-sec{margin-bottom:12px;border-radius:8px !important}
.ba-sec-head{padding:8px 12px;gap:8px;line-height:1.6}
.ba-sec-body{padding:12px !important;line-height:1.8 !important;overflow-wrap:anywhere}
.ba-sec-body table{max-width:100%;table-layout:auto}
.ba-sec-body th,.ba-sec-body td{white-space:normal !important;overflow-wrap:anywhere;line-height:1.6 !important;text-align:left !important}
.ba-empty{color:var(--sub) !important}
.ba-strategy-hook{gap:8px;margin-bottom:12px}
.ba-strategy-hook>div{padding:12px;border-radius:8px !important}
.ba-strategy-hook span{font-size:12px;line-height:1.7}
.ba-full-shell{padding:0 var(--page-gutter) !important}
.ba-full-head{padding:12px 0 !important;gap:12px;flex-wrap:wrap;align-items:center}
.ba-full-head h2{font-size:18px;line-height:1.6;min-width:0;overflow-wrap:anywhere}
.ba-full-summary,.ba-full-body,.ba-full-review,.ba-full-peer{margin:0 !important;padding:16px 0 !important;border-radius:0 !important;border:0 !important;border-bottom:1px solid var(--line) !important;background:transparent !important}
.ba-execution-note{margin:8px 0;font-size:12px;line-height:1.65;overflow-wrap:anywhere;color:var(--ink2)}
.ba-full-body table{width:100%;table-layout:fixed;border-collapse:collapse;margin:8px 0;font-size:12px}
.ba-full-body th,.ba-full-body td{padding:6px 8px;white-space:normal;overflow-wrap:anywhere;vertical-align:top;text-align:left;border-bottom:1px solid var(--line)}
@media(max-width:640px){
  .ba-full-body table thead{display:none}
  .ba-full-body table,.ba-full-body tbody,.ba-full-body tr{display:block;width:100%}
  .ba-full-body tr{padding:8px 0;border-top:1px solid var(--line)}
  .ba-full-body td{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:8px;padding:5px 0;border-bottom:0}
  .ba-full-body td::before{content:attr(data-label);color:var(--sub);font-weight:600}
}
#sug{top:calc(100% + 6px);max-height:min(320px,calc(var(--visual-height,100dvh) * .4));overflow-y:auto;overscroll-behavior:contain}
#sug [role="option"]{min-height:44px;align-items:center;gap:12px}
#sug [role="option"]>span:first-child{min-width:0;overflow-wrap:anywhere}
#sug [role="option"]>span:last-child{flex-shrink:0}
.holdSuggest{width:100%;min-width:0;max-height:min(260px,calc(var(--visual-height,100dvh) * .4));overscroll-behavior:contain}
.holdSuggest .hsItem{display:flex;width:100%;min-height:44px !important;gap:12px;padding:8px 12px !important;border:0 !important;border-radius:0 !important;background:var(--card) !important;color:var(--ink) !important;text-align:left;white-space:normal}
.holdSuggest .hsCode{flex-shrink:0}
.sync-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}
.sync-head b{font-size:15px}
.sync-head button{background:var(--card) !important;color:var(--ink) !important;border:1px solid var(--line) !important}
#syncPanel .st{overflow-wrap:anywhere}
.watch-panel{padding:16px;border-radius:8px;overscroll-behavior:contain}
.watch-panel .watch-head{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:4px 8px;align-items:center;position:sticky;top:-16px;padding:8px 0;background:var(--card);z-index:1}
.watch-head b{grid-column:1;grid-row:1;line-height:1.5;overflow-wrap:anywhere}
.watch-head span{grid-column:1;grid-row:2}
.watch-head button{margin:0;grid-row:1/3;border-radius:8px !important}
.watch-head button:first-of-type{grid-column:2}
.watch-head button:last-of-type{grid-column:3}
.watch-panel :is(.watch-detail,.watch-note,.watch-item,.watch-alert,.watch-history){overflow-wrap:anywhere}
.watch-status{border-radius:6px}
.ba-modal,.ocr-modal{--overlay-y:calc(max(var(--page-gutter),env(safe-area-inset-top)) + max(var(--page-gutter),env(safe-area-inset-bottom)));top:var(--visual-top,0px);bottom:auto;height:var(--visual-height,100dvh)}
.ocr-modal{z-index:240}
.ba-card,.ocr-box{max-height:calc(var(--visual-height,100dvh) - var(--overlay-y)) !important;overscroll-behavior:contain}
.ocr-body{min-height:0;overscroll-behavior:contain}
.ocr-head,.ocr-foot{flex-shrink:0}
.ocr-head .ocr-close{border-radius:8px !important;background:var(--card) !important;color:var(--ink) !important;border:1px solid var(--line) !important}
.ocr-row .nm{white-space:normal;overflow:visible;overflow-wrap:anywhere}
.ocr-row .dim{flex-shrink:0}
.gm b>span{display:inline !important;white-space:nowrap;margin-left:2px}
.ba-full-view{top:var(--visual-top,0px);bottom:auto;height:var(--visual-height,100dvh);overscroll-behavior:contain}
.ba-full-head button{border-radius:8px !important}
.ba-full-head h2{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px}
.ba-full-head .ba-full-name{min-width:0;overflow-wrap:anywhere}
.ba-full-head .ba-full-code,.ba-full-head .ba-full-type{font-size:13px;font-weight:500;color:var(--sub);white-space:nowrap}
.ba-full-code{font-family:var(--num)}
.ba-full-shell{padding-top:env(safe-area-inset-top) !important;padding-bottom:max(16px,env(safe-area-inset-bottom)) !important}
@media(max-width:1100px){
  .market-index-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .bar>.pool-actions{flex-basis:100%;margin-left:0;justify-content:flex-end}
}
@media(max-width:768px){
  :root{--control-height:40px}
  .top{gap:8px 12px !important;padding-block:12px !important;margin-bottom:16px !important}
  .top .right{flex-basis:100%;width:100%;margin-left:0;justify-content:flex-start}
  .cgrid2{grid-template-columns:minmax(0,1fr)}
  .zlist{columns:1}
  #reviewCard h4 .rv-head-actions{flex-basis:100%;width:auto;justify-content:flex-start}
  .bar>.pool-actions{justify-content:flex-start}
  .ba-cockpit,.ba-chips{grid-template-columns:minmax(0,1fr) !important}
  .ba-head,.ba-meta,.ba-concl,.ba-body,.ba-toolbar,.ba-disclaimer{padding-inline:16px !important}
  .ba-head{display:grid;grid-template-columns:minmax(0,1fr) auto;padding-block:12px !important}
  .ba-head .ba-stock{grid-column:1;grid-row:1}
  .ba-head .ba-badge{grid-column:1;grid-row:2;justify-self:start}
  .ba-head .ba-spacer{display:none}
  .ba-head>.icon-only:last-child{grid-column:2;grid-row:1;align-self:start}
  .ba-head #baToggleAll{grid-column:2;grid-row:2}
  .ba-head .ba-toolbar{grid-column:1/-1;grid-row:3;padding:0 !important;max-width:100%}
  .ba-evidence-grid{grid-template-columns:minmax(0,1fr) !important}
}
@media(max-width:640px){
  .market-index-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .envgrid-us,.envgrid-ap{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}
  .r2picks .r2pick{padding:12px !important}
  #searchBox{flex-basis:100%;max-width:none}
  .bar>.pool-actions{width:100%;gap:8px !important;order:3}
  .tblwrap #tbl td:nth-child(2){width:132px;min-width:132px;max-width:160px;white-space:normal !important;overflow:visible;text-overflow:clip}
  .tblwrap #tbl td:nth-child(2)>b{display:block;white-space:normal;overflow-wrap:anywhere}
  .tblwrap #tbl td:nth-child(2)>.dim{display:block;white-space:nowrap;font-family:var(--num)}
  #syncPanel{padding:16px}
  .tblwrap{scrollbar-gutter:auto}
  .holdform{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .holdform .hold-title,.holdform .holdCodeWrap,.holdform button,.holdform .hold-help{grid-column:1/-1}
  .holdform input,.holdCodeWrap input{width:100% !important;max-width:100%}
  .ba-chips .kv-signal{grid-column:1/-1}
  .ba-toolbar{flex-wrap:nowrap;overflow-x:auto !important;gap:8px !important}
  .ba-full-head h2{order:2;flex-basis:100%}
  .ba-card{height:calc(var(--visual-height,100dvh) - var(--overlay-y)) !important}
  #syncPanel{bottom:auto;top:calc(var(--visual-top,0px) + var(--visual-height,100dvh) - max(var(--page-gutter),env(safe-area-inset-bottom)));transform:translateY(-100%);max-height:calc(var(--visual-height,100dvh) - max(var(--page-gutter),env(safe-area-inset-top)) - max(var(--page-gutter),env(safe-area-inset-bottom)))}
}
@media(max-width:768px),(hover:none) and (pointer:coarse){
  :root{--control-height:40px}
  input:not([type="checkbox"]):not([type="radio"]):not([type="file"]){font-size:16px !important}
  .watch-panel{top:calc(var(--visual-top,0px) + max(16px,env(safe-area-inset-top)));right:max(var(--page-gutter),env(safe-area-inset-right));width:min(380px,calc(100vw - max(var(--page-gutter),env(safe-area-inset-left)) - max(var(--page-gutter),env(safe-area-inset-right))));max-height:calc(var(--visual-height,100dvh) - max(16px,env(safe-area-inset-top)) - max(16px,env(safe-area-inset-bottom)))}
  .watch-actions button,.watch-panel button{min-height:var(--control-height) !important}
  .tblwrap #tbl th{height:44px;min-height:44px}
  .ba-head .ba-toolbar{overflow:visible !important;flex-wrap:nowrap;justify-content:flex-start}
  .ba-toolbar .icon-text{width:var(--control-height);min-width:var(--control-height);height:var(--control-height);padding:0 !important;flex:0 0 var(--control-height);justify-content:center}
  .ba-toolbar .icon-text span{display:none}
}
@media(max-width:320px){
  .ba-head .ba-toolbar{gap:4px !important;flex-wrap:wrap}
}
@media(max-height:480px){
  .ba-head,.ba-full-head{position:static !important}
  .ba-head{padding-block:8px !important;row-gap:4px}
  .ba-head .ba-stock{font-size:14px;line-height:1.4}
}
@media(max-width:480px){
  .top h1{font-size:17px !important}
  .market-index-price{font-size:20px !important}
  .trade-state{grid-template-columns:minmax(0,1fr)}
  .trade-state em{grid-column:1}
  .r2t th,.r2t td{padding:6px 0 !important}
  .r2t td{flex-wrap:wrap;gap:4px 10px !important;text-align:left !important}
  .r2t td::before{flex:0 0 7em !important;line-height:1.6}
  .r2t td:not([data-label])::before,.r2t td[data-label=""]::before{display:none !important}
  .r2t td.ba-cell{justify-content:flex-start !important}
  .r2wrap{overflow:visible !important;border:0 !important;background:transparent !important}
  .r2t tr{padding:12px !important;border-radius:8px !important}
  .ba-sec-body table td{flex-wrap:wrap;gap:4px 12px}
  .ba-sec-body table td::before{font-size:12px;line-height:1.6}
}
