
/* ===== V9.3 渲染版 · 视觉规范 §3 ===== */
:root{
  --bg:#fdf6f6;--card:#ffffff;--line:#f2e3e3;
  --ink:#2b1c1c;--ink2:#6f5b5b;--ink3:#806b6b;
  --accent:#e53935;--accent2:#c62828;--accent-soft:#fdecea;
  --header-bg:linear-gradient(135deg,#7a1512 0%,#c62828 55%,#e53935 100%);
  --up:#d63a3a;--down:#087f5b;--warn:#cf3f0f;--gold:#9a6700;--radius:14px;
}
body.bg-dark{
  --bg:#241e20;--card:#2f282a;--line:#4a3d40;--ink:#f0e6e6;--ink2:#c3a9ad;--ink3:#9c8488;--accent-soft:#3f2c2e;--up:#ff8080;--down:#10bd85;--warn:#ff922b;--gold:#cf9d1f;   /* 2026-09-21 晚用户反馈「夜间太深」: 暖黑全组提亮一档(#150f10→#241e20 系, 深度≈站内海军蓝暗色); 语义色按新卡底 #2f282a 重校(up/down/gold≈5.8-5.9:1, warn 6.4:1); --ink/--ink2 不动=图表 JS 硬编码(#c3a9ad)同源; 2026-09-17 审计#47 口径与 "--accent 由切换器管" 不变 */
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
body{background:var(--bg);color:var(--ink);font-family:"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;font-size:13px;line-height:1.45}
.up{color:var(--up)}.down{color:var(--down)}.flat{color:var(--ink2)}.warn{color:var(--warn)}
.logo-croc{filter:hue-rotate(-115deg) saturate(1.7) brightness(.98);display:inline-block}
/* loading 遮罩 */
#loading{position:fixed;inset:0;background:var(--bg);z-index:200;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;transition:opacity .4s}
#loading.off{opacity:0;pointer-events:none}
#loading .croc{font-size:46px;animation:bob 1.2s ease-in-out infinite}
#loading .tip{color:var(--ink2);font-size:12px}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
/* netErr 浮条 + failBanner */
#netErr{display:none;position:sticky;top:0;z-index:90;background:#b02a2a;color:#fff;font-size:12px;padding:6px 14px;justify-content:space-between;align-items:center}
#netErr.show{display:flex}
#netErr button{background:rgba(255,255,255,.2);color:#fff;border:1px solid rgba(255,255,255,.5);border-radius:6px;padding:2px 10px;cursor:pointer;font-size:11.5px}
/* header 吸顶高密度 —— 2026-09-14 顶栏背景可设置: chip 用变量, 浅色顶栏 .header-light 覆写深字 */
header{position:sticky;top:0;z-index:80;background:var(--header-bg);color:var(--h-ink,#fff);padding:8px 20px;box-shadow:0 2px 8px rgba(0,0,0,.25)}
header.header-light{--h-ink:#2a313c;--hchip-bg:rgba(0,0,0,.06);--hchip-bd:rgba(0,0,0,.2);--hchip-bgH:rgba(0,0,0,.12)}
.hwrap{max-width:1400px;margin:0 auto;display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between}
.hleft{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;min-width:0;flex:1 1 100%}
.hrow2{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 100%;position:relative;flex-wrap:wrap}   /* relative=分组下拉 .pnav-drop 的定位基准; 09-22 加 wrap: 行2装不下时徽标组整行落下(右对齐), 取代旧行为"按钮条收缩、nowrap按钮溢出盒外压到徽章底下"(手机端系统×已连接重合的根因) */
.hrow2 .pagenav{flex:1 1 auto;min-width:max-content}   /* 行2: 分组按钮条吃剩余宽度(按钮靠左), 徽标组右侧 flex:none; 09-22 补 min-width 地板=max-content(原 min-width:0 让它缩到内容以下) */
.hrow2 .hright{flex-wrap:nowrap;flex:0 0 auto;margin-left:auto}   /* 徽标组内部禁折行(徽章逐颗掉行); margin-left:auto=整组落行时保持右对齐(单行时 pagenav 吃满剩余宽, 此属性无副作用) */
.hleft h1{font-size:16px;font-weight:700;letter-spacing:.5px}
.hleft .ver-badge{font-size:10px;background:var(--hchip-bg,rgba(255,255,255,.18));border:1px solid var(--hchip-bd,rgba(255,255,255,.35));border-radius:9px;padding:1px 8px}
.hleft .motto{font-size:11px;opacity:.75}
/* 审阅模式(2026-10-08 用户拍板合并): 唯一开关=整页 R 档(主人IP/审阅JWT)。P/M 档=body.review-off
   隐「内嵌」链 + srcOpen() 拦下(只留详情页与卡内交互); R 档放行(ey-mode.js 琥珀顶栏宣告身份, 无本地开关) */
body.review-off .emb{display:none!important}
body.review-off .src-jump{cursor:default!important}
/* 全站页跳转 pagenav v2(2026-09-21 下午用户拍板「分类+简洁」): 17 页平铺横滚 → 三分组下拉
   (💰交易·盘中 / 🔬研究·盘后 / 🛠系统·工具); 与 topnav(页内锚点)并立。链接为静态 HTML, JS 只管开合(见 header 后脚本) */
.pagenav{display:flex;align-items:center;gap:2px;background:var(--hchip-bg,rgba(255,255,255,.16));border:1px solid var(--hchip-bd,transparent);border-radius:10px;padding:2px;margin-left:4px;max-width:100%;flex:1 1 100%;min-width:0}
.pnav-btn{border:none;background:transparent;color:var(--h-ink,#fff);font-size:12px;padding:3px 10px;border-radius:8px;cursor:pointer;white-space:nowrap;opacity:.92;display:inline-flex;align-items:center;gap:3px}
.pnav-btn:hover{background:rgba(255,255,255,.14);opacity:1}
header.header-light .pnav-btn:hover{background:var(--hchip-bgH,rgba(0,0,0,.12))}
.pnav-btn.on{background:#fff;color:var(--accent);font-weight:700;opacity:1}
header.header-light .pnav-btn.on{background:var(--accent);color:#fff}
.pnav-caret{font-size:9px;opacity:.7}
.pnav-drop{display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:90;width:min(340px,100%);background:var(--card,#fff);color:var(--ink,#2b1c1c);border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 28px rgba(0,0,0,.22);padding:10px 12px}
.pnav-drop.on{display:block}
.pnav-pane{display:none}
.pnav-pane.on{display:block}
.pnav-lab{font-size:10.5px;color:var(--ink3);margin:0 0 6px;letter-spacing:.5px}
.pnav-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:6px}
.pnav-grid a{display:flex;align-items:center;gap:5px;color:var(--ink,#2b1c1c);font-size:12px;padding:7px 9px;border-radius:9px;background:var(--bg);border:1px solid var(--line);text-decoration:none;white-space:nowrap}
.pnav-grid a:hover{border-color:var(--accent);color:var(--accent)}
/* 主题跳转 topnav(09-15 v9b 借鉴): 白底胶囊按钮, 点击滚到分区+滚动高亮; 浅色顶栏(header-light)自动换深色字 */
.topnav{display:inline-flex;align-items:center;gap:2px;background:var(--hchip-bg,rgba(255,255,255,.16));border:1px solid var(--hchip-bd,transparent);border-radius:10px;padding:2px;margin-left:4px}
.topnav button{border:none;background:transparent;color:var(--h-ink,#fff);font-size:12px;padding:3px 10px;border-radius:8px;cursor:pointer;white-space:nowrap;opacity:.92}
.topnav button.on{background:#fff;color:var(--accent);font-weight:700;opacity:1}
header.header-light .topnav button.on{background:var(--accent);color:#fff}
/* 跳转锚点让位吸顶顶栏: 顶栏实为两行(标题行+分组菜单行, 桌面实测 81px, 窄屏折行更高), 旧值 66px
   按单行顶栏(约52px)时代写成, 落点恒被压住十几个px → 下面 topnav 脚本按 header.offsetHeight+10 动态改写;
   此处静态值仅作无 JS 兜底 */
#hero,#cardRisk,#cardSent,#sec-detail{scroll-margin-top:92px}
/* 2026-09-21 审美整改(P1): 手机端顶栏原折 5 行约 330px 吸顶盖正文 → ≤640 收成一行(约 40px):
   只留 logo+版本徽标+连接/休市徽标+⚙; motto/topnav/页跳转链接/评分来源/数据时间/刷新收编
   (页跳转 ⚙ 与卡头入口可达; 数据日期由各卡数据日期 chip 承担; 手动刷新用浏览器下拉/地址栏) */
@media(max-width:640px){
  header{padding:6px 12px}
  /* 09-21 用户反馈「顶端那些跳转呢」: .topnav 从隐藏清单摘出, 改单行横滚保留(页跳转 a.hbtn 仍收 ⚙; 保留 P1 防折行收益) */
  .hleft .motto,.hright>a.hbtn,#srcBadge,#dataTime,#dateBadge,#btnRefresh{display:none!important}
  .topnav{display:inline-flex!important;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .topnav::-webkit-scrollbar{display:none}
  /* 分组按钮窄屏缩一档(chip 档 ≥10px 达标); 3 组按钮必放下, pagenav 不再横滚 */
  .pnav-btn{padding:3px 8px;font-size:11.5px;gap:2px}
  .hleft h1{font-size:14px}
  .hright{gap:5px}
  /* 09-22 重合修复配套: 行2 空间预算 = 分组按钮(~176-204px) + 徽章组(~191px), 360-430 档装不下
     → 连接徽章收成状态点(点色=状态: 绿已连/黄警告/红错误, 桌面端仍显文字), 省回 ~42px 让 ≥360 保持单行;
     320 档仍放不下时由 .hrow2 的 wrap 兜底(徽章组整行落下, 不再重叠) */
  #connBadge{gap:0;padding:2px 7px}
  #connBadge #connTxt{display:none}
}
@media(max-width:400px){.pnav-caret{display:none}}   /* 极窄屏再省一截, 防按钮条挤压右侧徽标 */
.hright{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;background:var(--hchip-bg,rgba(255,255,255,.16));border:1px solid var(--hchip-bd,rgba(255,255,255,.25));border-radius:10px;padding:2px 9px;white-space:nowrap}
.badge .dot{width:7px;height:7px;border-radius:50%;background:#adb5bd}
.badge.live .dot{background:#69db7c;box-shadow:0 0 6px #69db7c;animation:blink 1.2s infinite}
.badge.closed .dot{background:#adb5bd}
.badge.warn .dot{background:#ffd43b}
.badge.err .dot{background:#ff8787;box-shadow:0 0 6px #ff8787}
@keyframes blink{50%{opacity:.35}}
.hright a{color:#fff;text-decoration:none;font-size:12px;opacity:.9}
.hright a:hover{opacity:1;text-decoration:underline}
.hbtn{background:var(--hchip-bg,rgba(255,255,255,.16));border:1px solid var(--hchip-bd,rgba(255,255,255,.35));color:inherit;border-radius:8px;padding:3px 11px;font-size:11.5px;cursor:pointer}
.hbtn:hover{background:var(--hchip-bgH,rgba(255,255,255,.28))}
/* 双取色器 */
.bg-picker{display:flex;align-items:center;gap:4px}
.bg-picker .sw{width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.55);cursor:pointer;padding:0;transition:.15s}
.bg-picker .sw:hover{transform:scale(1.18)}
.bg-picker .sw.on{box-shadow:0 0 0 2px #ffd43b,0 0 6px #ffd43b}
/* 设置面板色板(2026-09-14: 顶栏/页面背景/主题 全收进 ⚙ 设置弹窗, 弹窗浅底用深边框变体) */
.set-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:11px 0}
.set-lab{font-size:11.5px;color:var(--ink2);width:60px;flex:none;font-weight:600}
.set-sw{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.set-sw .sw{width:22px;height:22px;border-radius:6px;border:2px solid var(--line);cursor:pointer;padding:0;transition:.15s}
.set-sw .sw:hover{transform:scale(1.12)}
.set-sw .sw.on{box-shadow:0 0 0 2px var(--accent),0 0 5px var(--accent)}
.set-sw .sw.none{background:repeating-linear-gradient(45deg,#eee,#eee 3px,#ccc 3px,#ccc 6px)}
.set-note{font-size:10.5px;color:var(--ink3);margin-top:8px;line-height:1.5}
/* main */
main{max-width:1400px;margin:10px auto;padding:0 14px 24px;display:flex;flex-direction:column;gap:10px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 1px 2px rgba(120,40,40,.04);transition:box-shadow .2s}
.card:hover{box-shadow:0 2px 8px rgba(120,40,40,.08)}
.card-h{padding:6px 12px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:10px}
/* 2026-09-14: 卡头标题曾被长副标题挤成逐字竖排(手机端「避险情绪」= 避/险/情/绪 四行) →
   标题永不被压缩(flex:0 0 auto), 副标题可缩/可换行; 窄屏整体允许换行(卡头变两行, 不挤竖排) */
.card-h h2{font-size:13px;font-weight:700;color:var(--accent);display:flex;align-items:center;gap:6px;flex:0 0 auto}
.card-h .sub{font-size:11px;color:var(--ink3);min-width:0}
/* 数据源角标(2026-09-24 用户令「所有数据标清来源」): 每张卡/每块数据标题旁的小字 chip, 标 主源→备源 链; 悬停 title 给口径明细。
   仅审阅模式显示(2026-09-24 用户拍板): 关(默认)=body.review-off 直接隐藏, 开=随「审阅」徽标一起出现。字号 10px=frontend_check 角标 chip 下限档 */
.src-tag{font-size:10px;font-weight:400;color:var(--ink3);border:1px solid var(--line);border-radius:4px;padding:0 4px;line-height:15px;white-space:nowrap;flex:0 0 auto;letter-spacing:.3px;opacity:.95}
body.review-off .src-tag{display:none}
/* 2026-10-08 用户拍板: 指数卡来源角标(idx-src)同收审阅档; 唯恒生科技「延迟15min」数据诚实标记保持公开(idx-keep 豁免); 数据源健康度面板入口一并收审阅档; .ey-preview-pub 同款=审阅档预览保真 */
body.review-off .idx-src{display:none}
body.review-off .idx-src.idx-keep{display:inline-block}
body.review-off .health-toggle{display:none}
/* 2026-10-08 用户令: 结构信号条(空仓观望/下沿之下/区间/止损)与技术指标「通道」页签收审阅档 */
body.review-off .idx-sig{display:none}
/* 2026-10-08 用户令: 会员预览(ey-preview-mem, 三态预览v2)与普通预览同口径 —— 收审阅档的元素两态都不出现 */
.ey-preview-pub .idx-sig,.ey-preview-mem .idx-sig{display:none}
/* 2026-10-08 用户令: 数据源标记全站收审阅档(rk-pf-src=资金势力雷达卡数据源行) */
body.review-off .rk-pf-src{display:none}
body.review-off .src-only-tag{display:none}
.ey-preview-pub .src-only-tag,.ey-preview-mem .src-only-tag{display:none}
.ey-preview-pub .rk-pf-src{display:none}
.ey-preview-mem .rk-pf-src{display:none}
.ey-preview-pub .idx-src,.ey-preview-mem .idx-src{display:none}
.ey-preview-pub .idx-src.idx-keep,.ey-preview-mem .idx-src.idx-keep{display:inline-block}
.ey-preview-pub .health-toggle,.ey-preview-mem .health-toggle{display:none}
/* 2026-10-08 用户令: 原始 JSON 入口(点卡开源)仅审阅模式 —— 预览态去掉手型光标暗示(点击由 srcOpen 拦截) */
.ey-preview-pub .src-jump,.ey-preview-mem .src-jump{cursor:default!important}
.card-h h2 .src-tag{margin-left:2px}
.kd-title .src-tag,.rot-title .src-tag,.ext-div .src-tag{margin-left:6px}
/* 卡片头里的徽标(顶栏徽标是深底白字, 卡头浅底需反转配色) 2026-09-12 */
.card-h .badge{background:var(--bg);border-color:var(--line);color:var(--ink2)}
/* 内嵌读数特殊标识(2026-09-12): 跨模块内嵌点统一金框「内嵌」标 —— 点标新开原始JSON供数据审核, 点行/卡进详情页 */
.emb{display:inline-flex;align-items:center;font-size:10px;line-height:1;color:var(--gold);border:1px dashed var(--gold);border-radius:7px;padding:2px 5px;margin-left:6px;cursor:pointer;text-decoration:none;white-space:nowrap;opacity:.9}
.emb:hover{opacity:1;background:rgba(184,134,11,.14)}
.card-b{padding:9px 12px}
/* hero 双卡 §4.4 */
/* 2026-09-13 用户要求: 综合得分率+资金势力速览合并一栏 → hero 两格=合并卡|右栏
   2026-09-15 用户拍板: 盘面总述与"得分率走势×关键指数"合并成右栏的上下两栏(上=走势, 下=总述)
   两块贴合(gap:0)成一整块面板: 上卡平底且无下边线, 由下卡的上边线当分隔线(免双线) */
.hero{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:stretch}
.hero-right{display:flex;flex-direction:column;gap:0;min-width:0}
.hero-right>.card{min-width:0}
.hero-right>.card:first-child{border-radius:var(--radius) var(--radius) 0 0;border-bottom:0}
.hero-right>.card+.card{border-radius:0 0 var(--radius) var(--radius)}
/* 2026-09-13 三次改版(用户要求): 资金势力移到综合得分率下方同级堆叠, 不再左右分栏; 雷达放大, 总分/格局在雷达下方 meta 行 */
.hero-merge{display:flex;flex-direction:column;min-width:340px}
.hero-merge>.score-box{padding-bottom:8px}
.hm-force{flex:1;display:flex;flex-direction:column;min-width:0;border-top:1px solid var(--line)}
.hm-force .card-h{padding-left:10px}
.hm-force .quick-body{flex:1}
.force-meta{text-align:center;font-size:11.5px;color:var(--ink2);padding:2px 8px 6px}
/* 盘面总述栏 2026-09-13 二次改版(用户要求): 三面分组(信号面/资金面/情绪面) + 行式省空间(标题左·结论右, 补充信息入悬停)
   2026-09-15 三次改版(用户拍板): 四个主题(信号面/资金面/情绪面/仓位配比)各成一卡, 宽屏一行 4 列(右栏已够宽, 不挤);
   窄档 2 列/超窄 1 列。行式排版不变(标题左·结论右·补充信息入悬停) */
.hero-brief{display:flex;flex-direction:column;flex:1}   /* flex:1 = 吃掉右栏余高, 四卡随之等高 */
.hero-brief .card-b{flex:1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:8px 10px;min-width:0}
.bg-card{background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:6px 9px 7px;display:flex;flex-direction:column;min-width:0}
.bg-t{font-size:11px;font-weight:700;color:var(--gold);letter-spacing:.5px;padding-bottom:3px;margin-bottom:3px;border-bottom:1px solid var(--line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bg-rows{flex:1;display:flex;flex-direction:column;justify-content:space-between}   /* 行数少的主题(信号面/仓位配比)把行匀开撑满卡高, 不留一大块空底 */
@media(max-width:1200px){.hero-brief .card-b{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:380px){.hero-brief .card-b{grid-template-columns:1fr}}
/* 1011 用户令: 仓位配比卡收审阅档 —— 非审阅档剩三卡: 宽屏 3 列等宽不留第 4 列空位;
   ≤1200px 仍 2 列, 第三卡(情绪面)通栏避免"2+1 孤卡"; ≤380px 单列本就通栏, 规则无害 */
.hero-brief .card-b.brief-3col{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:1200px){.hero-brief .card-b.brief-3col .bg-card:nth-child(3){grid-column:1/-1}}
.brief-row{display:flex;align-items:baseline;gap:8px;padding:3px 0;border-bottom:1px dashed var(--line)}
.brief-row:last-child{border-bottom:none;padding-bottom:0}
.brief-row .bt{font-size:10.5px;color:var(--ink2);flex:none}
.brief-row .bv{font-size:11.5px;font-weight:700;line-height:1.35;color:var(--ink);margin-left:auto;text-align:right}
.brief-row .bv.miss{font-weight:400}
/* ④ 仓位配比块(2026-09-13): 长线/短线双 bar 紧凑排版(2026-09-15 起独立成第 4 张卡) */
.brief-pos{display:flex;flex-direction:column;gap:4px;padding:2px 0 0}
.brief-pos .ps-row{gap:7px}
.brief-pos .pos-bar{height:11px}
.brief-pos .ps-v{font-size:12px;min-width:36px}
.brief-pos .brief-sum{font-size:10.5px;color:var(--ink2);text-align:right}
.brief-pos .brief-sum b{color:var(--ink)}
.brief-row.up .bv{color:var(--up)}
.brief-row.down .bv{color:var(--down)}
.brief-row.gold .bv{color:var(--gold)}
.brief-row .bv.rk-hi{color:#26a69a}
.brief-row .bv.rk-mid{color:#ffa726}
.brief-row .bv.rk-lo{color:#ef5350}
/* 仓位卡 2026-09-13(用户要求): 底部合计条拆长线/短线两条独立 bar */
.pos-split{display:flex;flex-direction:column;gap:6px;margin-top:2px}
.ps-row{display:flex;align-items:center;gap:8px}
.ps-row .ps-l{font-size:11px;color:var(--ink2);width:30px;flex:none;font-weight:600}
.ps-row .pos-bar{flex:1;min-width:0}
.ps-row .ps-v{font-size:12.5px;min-width:42px;text-align:right;font-family:"DIN Alternate","Segoe UI",sans-serif}
.score-box{display:flex;flex-direction:column;align-items:center;padding:12px 12px 10px}
.score-box .ver{font-size:11px;color:var(--ink3);letter-spacing:1.5px}
.score-big{font-size:44px;font-weight:800;line-height:1.08;margin:2px 0;font-family:"DIN Alternate","Segoe UI",sans-serif}
.score-big small{font-size:17px;font-weight:600}
.score-sub{color:var(--ink2);font-size:11.5px}
.score-state{margin-top:6px;font-size:13.5px;font-weight:700;padding:2px 14px;border-radius:14px;background:var(--accent-soft);color:var(--accent2)}
.score-pos{margin-top:5px;font-size:12.5px}
.score-pos b{color:var(--ink)}
.score-tags{margin-top:4px;display:flex;gap:5px;flex-wrap:wrap;justify-content:center}
.score-tags .tag{font-size:10.5px;border:1px solid var(--line);border-radius:9px;padding:1px 8px;color:var(--ink2);background:var(--bg)}
.score-strategy{margin-top:3px;font-size:11px;color:var(--ink2);text-align:center}
.gauge{width:92%;height:7px;background:var(--accent-soft);border-radius:5px;margin-top:8px;overflow:hidden}
.gauge i{display:block;height:100%;border-radius:5px;transition:width .8s ease;background:linear-gradient(90deg,var(--accent2),var(--accent))}
.gauge-marks{width:92%;display:flex;justify-content:space-between;font-size:10px;color:var(--ink3);margin-top:2px}
.gauge-cap{width:92%;font-size:10.5px;color:var(--ink3);text-align:right;line-height:1.4}   /* 2026-09-21 审美整改: 分区刻度语义注记(40 观望/60 做多), 手机档随 :578 提到 11px */
.veto{margin-top:8px;width:100%;background:#fdecea;border:1px solid #f5c2c0;color:#b02a2a;border-radius:8px;padding:6px 10px;font-size:11.5px;font-weight:600;text-align:center}
.cbox{width:100%;display:flex;gap:6px;justify-content:center;flex-wrap:wrap;margin-top:8px}
.cbox input{width:96px;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:4px 8px;font-size:12px;color:var(--ink);text-align:center}
.cbox button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:4px 14px;font-size:12px;font-weight:700;cursor:pointer}
.cbox button:disabled{opacity:.5}
/* hero 右 走势 */
.live-strip{display:flex;flex-direction:column;gap:3px;font-size:12.5px;padding:2px 4px 8px}
.live-strip .ls-row{display:flex;flex-wrap:wrap;gap:6px 16px}
/* 2026-09-14: 指数行 5→6 只(加中证1000)。6 只一行需卡宽 ~692px(=视口≥1350 时 hero 右列宽 786px),
   故按视口给三档: ≥1350 一行(与原 5 只一行同样式) / 其余 3 列定尺(3×2, 避免 5+1 折行) / 手机 2 列 */
.live-strip .ls-row.ls-idx{display:grid;grid-template-columns:repeat(6,max-content);gap:6px 16px}
@media(max-width:1349px){.live-strip .ls-row.ls-idx{grid-template-columns:repeat(3,max-content)}}
/* 2026-09-15: 走势卡并入右栏后 641-900 档只剩半栏宽, 3 列 max-content(≈362px)顶破卡宽 → 验收尺 W=700 报 +26px,
   故 3→2 列下提到 ≤900(与 hero 两栏档对齐; 标题栏已另有 ≤900 换行规则) */
@media(max-width:900px){.live-strip .ls-row.ls-idx{grid-template-columns:repeat(2,max-content)}}
.live-strip .lab{color:var(--ink3);font-size:11px;margin-right:3px}
.live-strip b{font-variant-numeric:tabular-nums}
.lv-dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px;vertical-align:-.5px}
.chart-note{font-size:10px;color:var(--ink3);margin-top:4px}
.mode-pills{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.mode-pills button{border:none;background:transparent;color:var(--ink2);padding:3px 12px;font-size:11.5px;cursor:pointer}
.mode-pills button.on{background:var(--accent);color:#fff;font-weight:700}
.day-sel{background:var(--card);color:var(--ink2);border:1px solid var(--line);border-radius:8px;padding:3px 6px;font-size:11px}
.trend-ctl{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto}
/* 2026-09-15: 走势卡并入右栏后, 641-900 档只有半栏宽 —— 卡头「标题+页签+日期选单」撑不住会顶宽整页
   (验收尺 W=700 报 +45px); 故换行规则由 ≤640 放宽到 ≤900(与 hero 两栏档对齐): 页签占第二行、说明占第三行 */
@media(max-width:900px){.card-h.trend-h{flex-wrap:wrap}.card-h.trend-h .sub{flex-basis:100%;order:3}}
#chartScore{min-height:270px;height:300px;width:100%}
/* 核心指数 §4.5 */
.idx-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(126px,1fr));gap:8px}
.idx{padding:7px 10px;border-radius:8px;background:var(--bg);border:1px solid var(--line);display:flex;flex-direction:column;gap:1px}
.idx .nm{font-size:11.5px;color:var(--ink2);display:flex;justify-content:space-between;align-items:center}
.idx .px{font-size:15.5px;font-weight:700}
.idx .pc{font-size:12px;font-weight:600}
.idx .am{font-size:10px;color:var(--ink3)}
.idx-tag{font-size:10px;color:var(--ink3);border:1px solid var(--line);border-radius:6px;padding:0 5px}
.idx-src{font-size:10px;background:#fff3c4;color:#8a6d1a;border:1px solid #e8cf7a;border-radius:6px;padding:0 5px}
/* 结构信号条(2026-09-29): 仿「获得信息差」指数信号卡, 数据=ta_daily.json(缠论笔端点区间/通道状态/RSI6), 盘后日频 */
.idx-sig{border-top:1px dashed var(--line);margin-top:5px;padding-top:4px;font-size:10.5px;color:var(--ink3);display:flex;flex-direction:column;gap:2px;line-height:1.5}
/* 2026-10-08 用户令: 信号行显示不全被裁——nowrap/ellipsis 改可换行; 不用 break-all(数字被拦腰断行), 数值串作整 token 换行 */
.idx-sig .l1,.idx-sig .l2{display:flex;align-items:center;gap:2px 6px;flex-wrap:wrap;white-space:normal;line-height:1.45}
.idx-badge{font-size:9.5px;padding:0 5px;border-radius:8px;border:1px solid var(--line);color:var(--ink2);flex:0 0 auto}
.idx-badge.gold{color:#c9a227;border-color:rgba(201,162,39,.5)}
.idx-badge.red{color:var(--up);border-color:rgba(214,58,58,.5)}
.idx-badge.green{color:var(--down);border-color:rgba(8,127,91,.5)}
.idx-click{cursor:pointer}
.idx.idx-sel{border-color:#42a5f5 !important;box-shadow:0 0 0 1px rgba(66,165,245,.45)}
.pill-div{font-size:9.5px;color:var(--ink3);border-left:1px solid var(--line);padding-left:6px;margin-left:2px;align-self:center;white-space:nowrap}
/* 仓位 §4.6 */
.pos-main{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.pos-pct{font-size:30px;font-weight:800;font-family:"DIN Alternate","Segoe UI",sans-serif;min-width:96px;text-align:center}
.pos-bar{flex:1;min-width:220px;height:20px;border-radius:8px;overflow:hidden;display:flex;background:var(--accent-soft)}
.pos-bar i{display:block;height:100%;transition:width .6s}
.pos-bar .atk{background:linear-gradient(90deg,var(--accent2),var(--accent))}
.pos-bar .def{background:linear-gradient(90deg,#e0a800,#e8b341)}
.pos-bar .csh{background:#dee2e6}
.pos-legend{display:flex;gap:14px;font-size:11.5px;color:var(--ink2);flex-wrap:wrap}
/* 仓位卡「盘中参考」行(2026-09-16 一阶段 observe 双轨; 2026-10-08 二阶段: 主卡 who-new-wins 已接管主值, 本行保留=与定稿差异+变更次数) */
.pos-live{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;font-size:11.5px;color:var(--ink2);margin-top:6px;padding:5px 8px;border:1px dashed var(--line);border-radius:8px}
.pos-live b{font-size:12.5px;color:var(--ink);font-variant-numeric:tabular-nums}
.pos-live .pl-tag{font-weight:700;color:var(--accent);white-space:nowrap}
.pos-live .pl-d{color:#ffa726;font-weight:700}
.pos-live .pl-same{color:var(--ink3)}
.pos-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px;vertical-align:-1px}
.pos-warns{width:100%;display:flex;flex-direction:column;gap:3px;margin-top:4px}
/* 2026-09-13 仓位卡换源 V2: 长线/短线左右两栏(卡片其余样式沿用原 pos-* 图样) */
.pos-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pos-col{border:1px solid rgba(128,128,128,.16);border-radius:10px;padding:10px 12px;min-width:0}
.pos-col-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:5px}
.pos-pct.sm{font-size:26px;min-width:64px;text-align:left}
@media(max-width:760px){.pos-cols{grid-template-columns:1fr}}
.pos-warns .w{background:#fff4e6;border:1px solid #ffd8a8;color:#d9480f;border-radius:8px;padding:3px 10px;font-size:11px}
.pos-info{flex:1;min-width:170px;font-size:11.5px;color:var(--ink2)}
/* 盘面关键数据 §4.7: 三组(盘面结构/资金流向/基差) 2026-09-12 */
.kd-grid{display:grid;grid-template-columns:1.15fr 1fr 1.05fr;gap:10px;align-items:stretch}
.kd-panel{border:1px solid var(--line);border-radius:10px;padding:8px 12px;background:var(--bg);min-width:0}
.kd-title{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;font-weight:800;padding-left:7px;border-left:3px solid var(--accent);line-height:1.25}
.kd-title .mode-pills button{padding:1px 9px;font-size:10px}
.kd-title .sub{font-weight:400;font-size:10px;color:var(--ink3);margin-left:6px}
.kd-rows .row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:5.5px 0;border-top:1px dashed var(--line)}
.kd-rows .row:first-child{border-top:none}
.kd-rows .rk{font-size:11px;color:var(--ink3);flex:none}
.kd-rows .rv{text-align:right;min-width:0}
.kd-rows .rv .v{font-size:14px;font-weight:700;display:block}
.kd-rows .rv .v small{font-size:10px;font-weight:400;color:var(--ink2);margin-left:3px}
.kd-rows .rv .s{font-size:10px;color:var(--ink3);display:block;margin-top:1px}
.kd-rows .rv .s .up{color:var(--up)}.kd-rows .rv .s .down{color:var(--down)}
/* 指数共振三指数同行: clamp 自适应字号(手机~10px/桌面14px)+nowrap(2026-09-14 用户要求) */
.kd-rows .rv .v.kd-idx3{font-size:clamp(10px,2.6vw,14px);white-space:nowrap}
.kd-chips{display:flex;flex-wrap:wrap;gap:5px;margin:6px 0 4px}
.kd-chips .chip{border:1px solid var(--line);border-radius:7px;padding:2px 8px;font-size:11px;color:var(--ink2);cursor:pointer}
.kd-chips .chip:hover{border-color:var(--accent)}
.kd-chips .chip.on{border-color:var(--accent);color:var(--accent);font-weight:700}
.kd-chips .chip.on b{color:var(--accent)}
.kd-chips .chip b{font-size:12.5px;color:var(--ink)}
.kd-chart{height:140px;width:100%}
.kd-note{font-size:10px;color:var(--ink3);margin-top:2px;line-height:1.4}
/* 龙队动向触发标识: 仅触发抄底/减持时挂在「资金流向」卡头, 无动作不显示(2026-09-12 用户要求) */
.nt-flag{display:none;margin-left:2px;padding:1px 8px;border-radius:9px;font-size:10px;font-weight:800;color:#fff;letter-spacing:.3px}
/* 主动性买盘全史图入口(2026-09-28): 行名文字超链接 → /buyflow-history.html, 主值副标不动 */
.kd-rows .rk a.bl-link{color:inherit;text-decoration:none;border-bottom:1px dashed var(--ink3);cursor:pointer}
.kd-rows .rk a.bl-link:hover{color:var(--accent);border-bottom-color:var(--accent)}
.nt-flag.buy{display:inline-block;background:var(--up);animation:blink 1.2s infinite}
.nt-flag.sup{display:inline-block;background:var(--down)}
@media(max-width:900px){.kd-grid{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.kd-grid{grid-template-columns:1fr}}
/* 主线判断×大团圆并排行(2026-09-19): 两卡左右等分整行, ≤700 随 kd-grid 落单列 */
.mlty-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;grid-column:1/-1;min-width:0;align-items:stretch}
@media(max-width:700px){.mlty-row{grid-template-columns:1fr}}
/* 避险情绪读数 §RISK: 第三视角(总分+五维) 2026-09-12 */
/* 港股流动性 §HKLIQ: 盘后采集卡, 两列指标行+底部组合结论(同"结论单独一栏放底部"口味) 2026-09-13 */
.hkl-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px 18px}
.hkl-row{display:flex;justify-content:space-between;align-items:baseline;gap:6px;border-bottom:1px dashed var(--line);padding:3px 0}
/* 2026-09-14 数值列对齐(用户报"行与行之间数据没对齐, 和文字混杂"): 三列定尺右缘对齐 ——
   [标签 flex(可缩可省略)][数值 min-width 右对齐][说明定宽右对齐]; 说明保持可换行(不截断), 数值 min-width
   而非固定宽: 兼容「恒指 / 科指」这类双值行(超宽时挤标签而非溢出) */
.hkl-row .hkl-l{color:var(--ink3);font-size:11px;white-space:nowrap;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.hkl-row b{font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:74px;flex:none;text-align:right}
.hkl-row .hkl-s{font-size:10.5px;color:var(--ink3);text-align:right;width:118px;flex:0 1 auto}
.hkl-verdict{margin-top:6px;font-size:12px;font-weight:700;border-top:1px solid var(--line);padding-top:5px;display:flex;justify-content:space-between;gap:8px}
.hkl-verdict .hkl-v-rule{font-weight:400;color:var(--ink3);font-size:10.5px}
/* 港股流动性并入外盘卡(2026-09-13): 分节标题行 + 恒科沽空行(点行进 /hstech-ss.html) */
.ext-div{display:flex;align-items:baseline;gap:8px;margin:10px 0 5px;padding-top:8px;border-top:1px solid var(--line);font-size:12.5px;font-weight:800;color:var(--accent)}
.ext-div .sub{font-weight:400;font-size:10.5px;color:var(--ink3);flex:1;min-width:0;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 2026-09-14 手机端横向溢出修复(用户报「右侧一大段空白侧边栏」): 上一行 .sub 的 nowrap 使本行
   最小宽度≈标题+副标题+徽标 425px, 把外盘卡撑到 445px(手机视口仅 390); 而单行 flex 容器的行宽
   取各行项最大 → 同列所有卡片一起被撑成 445px, 文档可横向平移, 右移后露出空白页底。
   ≤640px 副标题改整行换行(不再省略号截断), 卡宽交还视口 */
@media(max-width:640px){.ext-div{flex-wrap:wrap}.ext-div .sub{flex:1 1 100%;text-align:left;white-space:normal}}
/* 护栏(2026-09-14): 卡片宽度按容器定尺 —— 单张卡内容超宽只溢出它自己, 不再连累同列其他卡 */
main>.card{min-width:0;width:100%}
.hkl-ss{margin-top:7px;padding-top:6px;border-top:1px dashed var(--line)}
.hkl-ss .am{font-size:11.5px;color:var(--ink2)}
.hkl-ss .am b{font-size:13px}
/* 科技联动 TLI 行(2026-09-15 建; 2026-09-16 自外盘卡迁入盘面结构面板 #kdStruct 之后; 19:30 盘后产出 observe 不进评分): 沿用 rk-jqe-l 行式 标签|主值|说明 */
.tli-line{margin-top:7px;padding-top:6px;border-top:1px dashed var(--line);display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:11.5px;color:var(--ink2);cursor:pointer}
.tli-line b{font-size:13px;color:var(--ink)}
.tli-line .rk-jqe-l{flex:0 0 auto}

/* 避险卡(2026-09-12 晚重排): 总分块+五维等宽条阵两段式, 结论单独一行放底部(用户口味) */
.rk-grid{display:flex;gap:16px 22px;align-items:stretch;flex-wrap:wrap}
.rk-total{flex:none;width:132px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--accent-soft);border-radius:12px;padding:10px 8px}
.rk-num{font-size:40px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.rk-lab{font-size:10.5px;color:var(--ink3);margin-top:4px}
.rk-dims{flex:1;min-width:280px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px 14px;align-content:center}
.rk-dim{min-width:0}
.rk-dim-h{display:flex;justify-content:space-between;gap:6px;font-size:10.5px;color:var(--ink3);margin-bottom:4px}
.rk-dim-h b{color:var(--ink2);font-weight:600}
.rk-bar{height:6px;background:var(--line);border-radius:3px;overflow:hidden}
.rk-bar i{display:block;height:100%;border-radius:3px}
.rk-bar i.hi{background:#26a69a}.rk-bar i.mid{background:#ffa726}.rk-bar i.lo{background:#ef5350}
.rk-miss{font-style:normal;color:#ef5350}
.rk-foot{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line);display:flex;gap:8px 12px;align-items:baseline;flex-wrap:wrap}
.rk-foot .rk-verdict-t{font-size:15px;font-weight:800;line-height:1.3}
.rk-foot .rk-verdict-p{font-size:12px;font-weight:700;color:var(--ink)}
.rk-foot .rk-verdict-h{font-size:10.5px;color:var(--ink3);flex:1;min-width:200px;line-height:1.45}
/* 恐贪指数对照行(韭圈儿, T-1日频, 不参与评分; 悬停看6成分) 2026-09-12 */
.rk-jqe{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;font-size:11.5px;color:var(--ink3)}
.rk-jqe .rk-jqe-l{font-size:11px;font-weight:600;color:var(--ink3)}
.rk-jqe b{font-size:14px;font-variant-numeric:tabular-nums;line-height:1}
@media(max-width:760px){.rk-dims{grid-template-columns:1fr 1fr}.rk-total{width:100%}}
/* 避险区 2026-09-13 二次改版: 一分为二成两张同级卡并排(左=赚钱效应 右=避险情绪); 外壳 id=cardRisk 供文章截图(构图与旧合并卡一致) */
.risk-split{display:grid;grid-template-columns:minmax(340px,29fr) 41fr;gap:10px;align-items:stretch}
@media(max-width:900px){.risk-split{grid-template-columns:1fr}}
/* 赚钱效应紧凑版(口径同资金势力页§9, 档位换算沿用已验收前端口径) */
.rk-pf-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.rk-pf-score{font-size:23px;font-weight:800;font-family:"DIN Alternate","Segoe UI",sans-serif}
.rk-pf-grade{font-size:12.5px;font-weight:700}
.rk-pf-good{color:#22c55e}.rk-pf-fair{color:#eab308}.rk-pf-poor{color:#ef4444}
.rk-pf-panic{color:#d63031;background:rgba(214,48,49,.12);border-radius:8px;padding:1px 10px}
.rk-pf-scale{position:relative;height:12px;border-radius:6px;margin:10px 4px 2px;display:flex;overflow:visible}
.rk-pf-scale i{display:block;height:100%;opacity:.35}
.rk-pf-scale .s1{background:#ef4444;border-radius:6px 0 0 6px}
.rk-pf-scale .s2{background:#eab308}
.rk-pf-scale .s3{background:#84cc16}
.rk-pf-scale .s4{background:#22c55e;border-radius:0 6px 6px 0}
.rk-pf-needle{position:absolute;top:-3px;width:4px;height:18px;background:#fff;box-shadow:0 0 0 2px var(--ink);border-radius:2px;transform:translateX(-50%);transition:left .6s}
.rk-pf-marks{display:flex;justify-content:space-between;font-size:10px;color:var(--ink3);padding:0 4px}
.rk-pf-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-top:8px}
.rk-pf-card{border:1px solid var(--line);border-radius:8px;padding:4px 8px;background:var(--bg);min-width:0}
.rk-pf-card .k{font-size:10px;color:var(--ink3)}
.rk-pf-card .v{font-size:14.5px;font-weight:700;margin-top:1px}
.rk-pf-card .s{font-size:10px;color:var(--ink3)}
.rk-pf-cross{border:1px solid var(--line);border-radius:8px;padding:4px 9px;font-size:11px;margin-top:7px}
.rk-pf-cross.ok{border-color:#22c55e;color:#22c55e}
.rk-pf-cross.warn{border-color:#eab308;color:#eab308}
.rk-pf-cross.bad{border-color:#ef4444;color:#ef4444}
.rk-pf-src{font-size:10px;color:var(--ink3);margin-top:5px}
@media(max-width:520px){.rk-pf-grid{grid-template-columns:1fr 1fr}}
.m{border:1px solid var(--line);border-radius:8px;padding:7px 10px;background:var(--bg)}
.m .k{font-size:11px;color:var(--ink3)}
.m .v{font-size:16px;font-weight:700;margin-top:1px}
.m .s{font-size:10.5px;color:var(--ink3)}
/* 同类指标合并格(2026-09-13): 外盘/自选一格一类多行读数省空间, 点卡跳转规则见 renderExternal/renderWatch */
.mm .mm-r{display:flex;align-items:baseline;gap:6px;border-top:1px dashed var(--line);padding:3px 0 1px;margin-top:2px}
.mm .mm-r:first-of-type{border-top:none;margin-top:3px}
.mm .mm-l{flex:1;min-width:max-content;font-size:10.5px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}  /* 2026-09-16 标签不裁字(原 min-width:0 曾让 ≥1440 汇率格「离岸人民币」被值列挤裁 2px); 挤压交给软裁的说明列 */
/* 2026-09-14 数值列对齐: 行内重排为 [标签 1fr][说明][数值定宽右对齐] —— 数值收在最右(结论位)、说明紧贴其左,
   两列右缘都由「容器右缘 − 定尺」决定 → 同一格内所有行的数字落在同一竖列(改前实测 8 个不同右缘, 无法扫读) */
.mm .mm-v{flex:none;font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;order:3;min-width:54px;text-align:right}
.mm .mm-s{flex:0 1 auto;min-width:0;max-width:52%;font-size:10px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;order:2;text-align:right}  /* 2026-09-16 可缩(原 flex:none): 标签有地板后挤压必须有人吸收, 否则行溢出→数值列错位; 说明列本就软裁(省略号) */
.mm .mm-p{flex:none;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;order:2}  /* 2026-09-20 行内涨跌幅(数据型读数, 定尺不裁): 11px 满足手机端 ≥11px 地板; order=2 与说明列同组、DOM 序在其后 → 视觉落在说明与主值之间 */
/* 2026-09-21 审美整改(P2): 手机端总述/外盘等 mm 行值列过窄折行破碎(「+10 分」孤字/说明折 4 行) → ≤640 标签独占一行、说明+值第二行右对齐 */
@media(max-width:640px){
  .mm .mm-r{flex-wrap:wrap}
  .mm .mm-l{flex:1 1 100%;min-width:0;white-space:normal}
  .mm .mm-s{max-width:100%;margin-left:auto}   /* 说明+值整组右靠, mm-s 右缘=值列左缘, 全卡成列(验收尺列齐) */
}
.ts-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:3px}
.ts-chip{background:var(--accent-soft);border:1px solid var(--line);border-radius:8px;padding:2px 8px;white-space:nowrap}
.ts-chip i{font-style:normal;font-size:10px;color:var(--ink3);margin-right:4px}
.ts-chip b{font-size:13px}
.ts-date{font-size:10px;color:var(--ink3);font-weight:400;margin-left:6px}
.ratio-bar{display:flex;height:6px;border-radius:3px;overflow:hidden;margin-top:4px}
.ratio-bar i{display:block;height:100%}
.ratio-bar .u{background:var(--up)}.ratio-bar .d{background:var(--down)}
/* charts 区 */
.charts{display:grid;grid-template-columns:1fr 1fr;gap:10px}
/* 2026-09-13 教训(屡犯): 同行两卡必须等高 — 禁 align-self:start, 卡内 flex 拉伸补白 */
.charts>.card{display:flex;flex-direction:column;min-width:0}   /* 2026-10-08: 基础规则即 min-width:0(原仅≤640有) —— 网格项默认 auto 最小宽被港股行定尺顶大, 901-1035 档左卡抢右卡 50px, 自选卡宏观块说明行被裁(实证 1000 档 506/456) */
.charts>.card .card-b{flex:1}
.chart{height:230px;width:100%}
/* 自选/外盘小格复用 m-grid 3列; 2026-09-13 自选卡固定3列(国债全宽格会把 auto-fit 撑成5列挤窄合并格) */
.ext-grid,.watch-grid{display:grid;gap:6px}
/* 2026-09-20 ext-grid 基础档(≥1440)收成 2 列: 卡宽~390px 时 auto-fit minmax(112px) 排 3 列每格仅 ~126px,
   合并行(标签+行内涨跌+定宽值)最小 ~165px 放不下 → 数值盒溢出格子错位(验收尺 1440/1600/1920 FAIL);
   641–1439 档自 v454 起就是 2 列, 此处对齐同一方案; 第 3 格起占满整行与该档同款 */
.ext-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.ext-grid>.mm:nth-child(n+3){grid-column:1/-1}
/* 2026-10-08 跨卡同层级标题行对齐(用户: "相同层级的标题要行对齐 在一条线上"): cell 改列布局+行距 auto 匀开 ——
   自然高度时 auto 间距=0 零影响; 被 syncCardRows 的 min-height 拉高时行距均匀生长(仿 .bg-rows「行匀开不留空底」先例);
   左卡 card-b 改列布局是 #extFoot margin-top:auto 钉底的前提 */
#cardExternal .card-b{display:flex;flex-direction:column}
.ext-grid>.m,.ext-grid>.mm,.watch-grid>.m,.watch-grid>.mm{display:flex;flex-direction:column}
.ext-grid .mm-r ~ .mm-r,.watch-grid .mm-r ~ .mm-r{margin-top:auto}
#watchGrid>.m>.v{margin-top:auto}#watchGrid>.m>.s{margin-bottom:auto}   /* 微盘股独值格: 值组在标题下居中, 免拉高后底部一大块空 */
.watch-grid{grid-template-columns:repeat(auto-fit,minmax(112px,1fr))}
#watchGrid{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:700px){#watchGrid{grid-template-columns:1fr 1fr}}
/* 表格 */
table{width:100%;border-collapse:collapse;font-size:11.5px}
th{text-align:center;color:var(--ink2);font-weight:600;padding:4px 6px;border-bottom:1px solid var(--line);font-size:11px}
td{padding:4px 6px;border-bottom:1px dashed var(--line)}
tr:last-child td{border-bottom:none}
td.num,th.num{text-align:center;font-variant-numeric:tabular-nums}
.miss{color:var(--ink2)}
.prev-day{color:var(--ink3);opacity:.55}   /* 2026-09-14: "前一交易日"声明专属更浅色, 与当日信息一眼区分 */
/* 2026-09-14 用户报"融资余额没有标记前一交易日": 值级标记(推荐方案: 淡一档 + 值前「昨」角标) ——
   卡头脚注仍是权威声明(带日期), 角标只负责"扫行时一眼看出这行不是今天的" */
.prev-tag{display:inline-block;font-size:10px;line-height:1;color:var(--ink3);border:1px solid var(--line);
  border-radius:5px;padding:1px 4px;margin-right:4px;vertical-align:1px;opacity:.8;font-weight:600}
.prev-tag.stale{border-style:dashed;color:var(--warn);border-color:var(--warn);opacity:.95}   /* 差>=2天: 标真实日期, 虚线橙提示比"昨"更旧 */
.kd-rows .row.prev .rk{opacity:.62}
.kd-rows .row.prev .rv .v{opacity:.88}   /* 淡一档但不夺红绿: 色相与方向仍一眼可辨 */
.brief-row.prev .bt{opacity:.62}.brief-row.prev .bv{opacity:.88}       /* 盘面总述行 */
.rk-pf-card.prev .k{opacity:.62}.rk-pf-card.prev .v{opacity:.88}       /* 赚钱效应小格 */
.rk-jqe.prev .rk-jqe-l{opacity:.62}.rk-jqe.prev b{opacity:.88}         /* 韭圈儿对照轨 */
/* 六维 sys-grid §4.10 */
.sys-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;align-items:stretch}
.sys{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--bg)}
/* 2026-09-14 六维并入综合得分率卡(用户拍板): 2×3 迷你格整块可点进 struct-v9.html, 独立卡已删 */
.sys-jump{margin-top:9px;border-top:1px dashed var(--line);padding-top:8px;cursor:pointer}
.sys-jump:hover .sys{border-color:var(--accent)}
.sys-jump .sys{padding:5px 8px}
.sys-jump .sys .t{font-size:11px;margin-bottom:3px}
.sys .t{display:flex;justify-content:space-between;font-size:12px;font-weight:700;margin-bottom:4px}
.sys .t .sc{color:var(--accent);font-variant-numeric:tabular-nums}
.item{display:grid;grid-template-columns:118px 1fr 78px;gap:8px;padding:5px 0;border-top:1px dashed var(--line);align-items:center}
.item:first-of-type{border-top:none}
.item .nm{font-size:11.5px;font-weight:600}
.item .nm i{font-style:normal;font-size:10px;color:var(--ink3);display:block;font-weight:400}
.item .dt{font-size:11px;color:var(--ink2)}
.item .dt .note{color:var(--ink3);font-size:10px;display:block;margin-top:1px}
.item .sc{text-align:right}
.item .sc b{font-size:13.5px}
.item .sc span{color:var(--ink3);font-size:10.5px}
.item.miss{color:var(--ink2)}
.miss-tag{display:inline-block;font-size:10px;border:1px solid var(--line);border-radius:6px;padding:0 5px;color:var(--ink3);margin-left:4px}
.pbar{height:5px;background:var(--accent-soft);border-radius:3px;margin-top:3px;overflow:hidden}
.pbar i{display:block;height:100%;border-radius:3px;background:var(--accent2);transition:width .6s}
.item.miss .pbar i{background:var(--ink3)}
/* 涨停梯队 §4.11 */
.topmark{background:#fff4e6;border:1px solid #ffd8a8;border-radius:8px;padding:6px 10px;display:flex;flex-wrap:wrap;gap:4px 14px;align-items:baseline;font-size:11.5px;margin-bottom:8px}
.topmark .tm-tag{background:var(--accent);color:#fff;border-radius:6px;padding:1px 8px;font-size:10.5px;font-weight:700}
.topmark .tm-down{border-color:#f5c2c0;background:#fff5f5}
/* 最高标 开板/裂板 红色预警(2026-09-14) */
.tm-crack-name{color:#e03131}
.v.tm-crack{font-weight:700}
.tm-crack-tag{display:inline-block;background:#e03131;color:#fff;border-radius:4px;padding:0 6px;font-size:10px;font-weight:700;margin-left:4px;vertical-align:middle;white-space:nowrap}
/* 2026-09-14 用户要求: 跌停板开板=利好(红▲) / 涨停板裂板=利空(绿▼), 两侧标识必须可分 */
.tm-crack-tag.ck-bull{background:var(--up)}
.tm-crack-tag.ck-bear{background:var(--down)}
.tm-crack-name.ck-bull{color:var(--up)}
.tm-crack-name.ck-bear{color:var(--down)}
.ztTable td,.ztTable th{padding:4px 6px}
.lb{display:inline-block;min-width:32px;text-align:center;font-weight:800;color:#fff;border-radius:6px;padding:1px 0;font-size:11px}
.lb.b1{background:#adb5bd}.lb.b2{background:#f08c00}.lb.b3{background:#cf3f0f}
.lb:not(.b1):not(.b2):not(.b3){background:var(--up)}
/* 涨停行业分布横条 */
.ztind .row{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:11.5px}
.ztind .row .n{width:92px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ztind .row .bar{flex:1;height:9px;background:var(--accent-soft);border-radius:5px;overflow:hidden}
.ztind .row .bar i{display:block;height:100%;background:linear-gradient(90deg,var(--accent2),var(--accent));border-radius:5px}
.ztind .row .c{width:26px;text-align:right;font-weight:700}
/* 资金轮动 */
.rot-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.sent-grid{grid-template-columns:430px 1fr}
.sent-left{display:flex;gap:12px;align-items:stretch;min-width:0}
.sent-txt{flex:1;min-width:0}
.sent-vline{border-left:1px dashed var(--line)}
.sent-thermo{flex:none;width:96px;display:flex;align-items:center;justify-content:center}
.sent-tabs{position:absolute;top:6px;right:10px;display:flex;gap:4px;z-index:2}
.sent-tabs button{font-size:10.5px;border:1px solid var(--line);background:var(--card);border-radius:9px;padding:1px 9px;cursor:pointer;color:var(--ink2)}
.sent-tabs button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
@media(max-width:700px){.rot-grid,.sent-grid{grid-template-columns:1fr}}
.rot-panel{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--bg)}
.sent-chip{display:inline-block;font-size:10.5px;border:1px solid var(--line);border-radius:9px;padding:1px 7px;margin:2px 3px 0 0;background:var(--bg)}
/* 温度计左栏(2026-09-12 晚重排): 大数字+四格统计(看多/看空/极端/样本) 代替松散文字行 */
.sent-hero{display:flex;align-items:baseline;gap:8px}
.sent-num{font-size:34px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.sent-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:8px 0 4px}
.sent-stats .ss{background:var(--bg);border-radius:9px;padding:5px 2px;text-align:center}
.sent-stats .ss b{display:block;font-size:14px;font-variant-numeric:tabular-nums}
.sent-stats .ss span{font-size:10px;color:var(--ink3)}
.sent-src{font-size:10.5px;color:var(--ink3);margin-top:5px;line-height:1.45}
/* 金融热词(2026-10-08 金融相关性门槛) → 情绪线标题条 (桌面: 放不下的标签由 JS 裁掉; 手机: 独占一行横向滚动) */
.hw-strip{flex:1;min-width:0;display:flex;align-items:center;gap:4px;overflow:hidden;white-space:nowrap;margin:0 8px}
.hw-lab{font-size:10.5px;color:var(--ink3);flex:0 0 auto;margin-right:2px}
.hw-chip{font-size:10.5px;border:1px solid var(--line);border-radius:9px;padding:0 7px;line-height:17px;background:var(--bg);color:var(--ink2);flex:0 0 auto}
.hw-chip b{color:var(--accent);font-weight:700;margin-left:3px;font-variant-numeric:tabular-nums}
/* 温度计卡头(2026-09-12 排版优化): 热词条固定折到第二行整行铺开, 桌面/窄屏一致 */
.card-h.sent-h{flex-wrap:wrap;row-gap:4px}
.card-h.sent-h .hw-strip{flex-basis:100%;order:3;overflow-x:auto;margin:0;padding-bottom:2px;scrollbar-width:none}
.card-h.sent-h .hw-strip::-webkit-scrollbar{display:none}
.rot-title{font-weight:700;font-size:12.5px;margin-bottom:6px}
.rot-title.t-in{color:var(--up)}
.rot-title.t-out{color:var(--down)}
.rot-row{display:flex;gap:8px;align-items:baseline;font-size:11.5px;padding:3px 0}
.rot-row .rk{width:14px;color:var(--ink3);flex-shrink:0}
.rot-row .nm{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rot-row .pc{width:60px;text-align:right;font-variant-numeric:tabular-nums;flex-shrink:0}
.rot-row .amt{width:76px;text-align:right;font-weight:700;font-variant-numeric:tabular-nums;flex-shrink:0}

/* 健康度折叠面板 §4.12 */
.health-toggle{width:100%;text-align:left;background:var(--card);border:none;border-top:1px solid var(--line);color:var(--ink2);font-size:12px;padding:8px 12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center}
.health-panel{display:none;padding:0 12px 10px}
.health-panel.show{display:block}
.hsrc{font-size:11px}
.hsrc .st-ok{color:#2b8a3e}.hsrc .st-warn{color:#cf3f0f}.hsrc .st-err,.hsrc .st-down{color:#c92a2a}.hsrc .st-unknown{color:var(--ink3)}
/* footer */
footer{max-width:1400px;margin:0 auto;padding:0 14px 24px;color:var(--ink3);font-size:11px;line-height:1.65}
footer .disc{background:#fdecea;border:1px solid #f5c2c0;color:#b02a2a;border-radius:8px;padding:6px 12px;margin-bottom:6px}
/* 弹窗 §4.14 */
.modal-mask{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:150;align-items:center;justify-content:center}
/* 09-21 用户令「点常用功能对应标签页悬浮最前面」: 预警/手机弹窗 DOM 在 settingsModal 之前, 同 z-index 被其盖住 → 提层 */ 
#alertModal,#phoneModal{z-index:170}
.modal-mask.show{display:flex}
.modal{background:var(--card);border-radius:12px;width:min(420px,92vw);max-height:84vh;overflow:auto;padding:16px 18px;box-shadow:0 10px 40px rgba(0,0,0,.3)}
.modal h3{font-size:14.5px;color:var(--accent);margin-bottom:10px;display:flex;justify-content:space-between;align-items:center}
.modal h3 .x{cursor:pointer;color:var(--ink3);font-weight:400;font-size:16px}
.modal label{display:block;font-size:12px;color:var(--ink2);margin:8px 0 3px}
.modal input,.modal select{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:6px 9px;font-size:12.5px;color:var(--ink)}
.modal .mrow{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
.modal .mrow button{border:none;border-radius:8px;padding:6px 16px;font-size:12.5px;font-weight:700;cursor:pointer;background:var(--accent);color:#fff}
.modal .mrow button.ghost{background:var(--bg);color:var(--ink2);border:1px solid var(--line);font-weight:400}
/* 会员表单(2026-10-07 member-boundary 主题2): 双模式页签+错误行+登录后状态条 —— 均只经 hash 门控可达 */
.mem-tabs{display:flex;gap:6px;margin-bottom:4px}
.mem-tabs button{flex:1;border:1px solid var(--line);background:var(--bg);color:var(--ink2);border-radius:8px;padding:5px 0;font-size:12px;cursor:pointer}
.mem-tabs button.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700}
.mem-err{color:#c92a2a;font-size:12px;min-height:16px;margin-top:6px}
#memStrip{position:fixed;right:12px;bottom:12px;z-index:140;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:6px 12px;font-size:11.5px;color:var(--ink2);box-shadow:0 4px 14px rgba(0,0,0,.14)}
/* 六维格→引擎计算位置弹层(2026-09-19) */
.modal.wide{width:min(960px,94vw)}
.sys-g{cursor:pointer;transition:border-color .15s}
.sys-g:hover{border-color:var(--accent)}
.sc-meta{font-size:11px;color:var(--ink3);margin-bottom:6px}
.sc-item{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:4.5px 0;border-top:1px dashed var(--line);font-size:11.5px}
.sc-item:first-child{border-top:none}
.sc-item .si-l{min-width:0}
.sc-item .si-d{font-size:10px;color:var(--ink3);display:block;margin-top:1px;word-break:break-all}
.sc-item .si-v{flex:none;font-weight:700;font-variant-numeric:tabular-nums}
.sc-src-h{font-size:10.5px;color:var(--ink3);margin:10px 0 4px}
.sc-pre{background:#1e222b;color:#cdd3e0;border-radius:8px;padding:10px 12px;font-size:11px;line-height:1.5;overflow:auto;max-height:46vh;margin:0;white-space:pre}
.sc-pre .ln{display:inline-block;width:3.4em;color:#5b6478;user-select:none}
/* 手机访问二维码 */
.qr-url{font-variant-numeric:tabular-nums}
/* toast */
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:70px;background:var(--ink);color:var(--bg);padding:8px 18px;border-radius:20px;font-size:12.5px;opacity:0;transition:.3s;pointer-events:none;z-index:160}
.toast.show{opacity:1}
/* 响应式 §3 */
/* cbox-pink/cp-btn 手填重算样式已随组件删除(2026-09-13) */
.mini5{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.mini5 .b{border:1px solid var(--line);border-radius:8px;padding:6px 4px;text-align:center;background:var(--bg)}
.mini5 .v{font-size:17px;font-weight:800;font-family:"DIN Alternate","Segoe UI",sans-serif}
.mini5 .l{font-size:10px;color:var(--ink3)}
/* 资金势力速览 2026-09-13 塞进 hero 行三卡中间(综合得分率|速览|得分率走势×关键指数): 竖排=五方五格+格局行+雷达撑满 */
.quick-body{display:flex;flex-direction:column;gap:6px}
.quick-body #partyRadar{flex:1;min-height:240px}
.leg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:7px}
.leg{border:1px solid var(--line);border-radius:8px;padding:7px 9px;background:var(--bg)}
.leg .t{display:flex;justify-content:space-between;font-size:12px;font-weight:700;margin-bottom:4px}
.leg .row{display:flex;justify-content:space-between;font-size:10.5px;color:var(--ink2);padding:1px 0}
.leg .chips{margin-top:5px;display:flex;gap:5px;flex-wrap:wrap}
.chip{border:1px solid var(--line);border-radius:10px;padding:1px 8px;font-size:10px;background:var(--bg);color:var(--ink2)}
.chip.ok{border-color:#b2f2bb;background:#ebfbee;color:#2b8a3e}
.chip.bad{border-color:#ffc9c9;background:#fff5f5;color:#c92a2a}
@media(max-width:1100px){.m-grid{grid-template-columns:repeat(3,1fr)}.sys-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.hero{grid-template-columns:1fr 1fr}.charts{grid-template-columns:minmax(0,1fr)}.sys-grid{grid-template-columns:repeat(2,minmax(0,1fr))}   /* 2026-09-14 并入score卡后保持2列(原1fr是独立大卡时代降列, 已删) */.mini5{grid-template-columns:repeat(3,1fr)}}   /* 2026-09-15: 删「.hero .hero-brief{grid-column:1/-1}」——总述已并入右栏(hero-right), 不再是 .hero 的直接网格项 */
@media(max-width:640px){
  .hero{grid-template-columns:1fr}
  .hero-merge{flex-direction:column;min-width:0}   /* 2026-09-14: 原 min-width:340px 在 320px 屏撑破整页 */
  /* 2026-09-14 手机端横向溢出: 港股流动性两列行(报价+说明 nowrap)挤不下 → 单列, 与 ext/watch 同口径 */
  .hkl-grid{grid-template-columns:1fr}
  .hm-l{flex-basis:auto;border-bottom:1px solid var(--line)}
  .hm-r{border-left:none}
  header{padding:6px 10px}
  .hleft h1{font-size:14px}.hleft .motto{display:none}
  main{padding:0 8px 18px;margin:8px auto;gap:8px}
  .card-b{padding:8px 9px}
  .score-big{font-size:38px}
  .m-grid{grid-template-columns:repeat(2,1fr)}
  .idx-grid{grid-template-columns:repeat(2,1fr)}
  /* A-P0(2026-10-06): idx 小格 .nm 名字+角标 nowrap 弹性行的 min-content 撑破 1fr 轨道 → 390 视口横向溢出 +129px(验收尺实证); 根修=网格项去 auto 最小尺寸(1fr 自带 minmax(auto) 下限被 idx-sig 信号条 nowrap 文本撑爆), 允许换行收缩+名字超长省略 */
  .idx-grid>.idx{min-width:0}
  .idx .nm{flex-wrap:wrap;min-width:0}
  .idx .nm>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%}
  /* 2026-09-14 用户反馈手机端外盘文字显示不全: 3列×112px 时 mm-l/mm-s 全被省略号裁 → 单列全宽 */
  .ext-grid,.watch-grid{grid-template-columns:1fr}
  #watchGrid{grid-template-columns:1fr}   /* 2026-09-14: 上一行的 class 规则被 #watchGrid 的 ID 规则(≤700 两列)压住, 320px 屏挤破整页, 这里同权重补回单列 */
  .charts>.card{min-width:0}   /* 网格项默认 min-width:auto=内容最小宽, 会把 1fr 轨道顶宽 → 显式 0 让轨道说了算 */
  .item{grid-template-columns:96px 1fr 64px;gap:6px}
  #chartScore{height:220px}
  /* 兜底(2026-09-14): 手机上整页禁横向平移 —— 万一将来又有 nowrap 长文本撑宽某卡,
     表现为该卡内容被裁(一眼可见), 而不是整页右移露出空白页底(用户报的"空白侧边栏") */
  body{overflow-x:clip}
  /* ===== 手机端字号档(2026-09-14 用户: "手机端文字可读性没优化" + "双端要同时适配") =====
     双端各定各的档: 桌面保持紧凑不动, 手机把"承载数据/状态"的文字抬到 ≥11px、角标 ≥10px,
     不再把桌面的小字等比缩小。字号一动行高与定尺列宽就变 → 改完必须复跑验收尺(手机 5 档) */
  .mm .mm-s,.kd-rows .rv .s,.hkl-row .hkl-s,.m .s,.sent-stats .ss span,.sent-src,.rk-pf-card .s,
  .rk-pf-src,.rk-pf-marks,.chart-note,.kd-note,.idx .am,.item .nm i,.item .dt .note,.leg .row{font-size:11px}
  .mm .mm-l{font-size:11.5px}
  .prev-day,.ts-date{font-size:10.5px}
  .emb,.idx-src,.idx-tag,.chip,.ver-badge,.prev-tag{font-size:10px}   /* 角标类: 刻意小一档(9→10px) */
  /* 补充档(2026-09-14 二轮, 验收尺扫出的漏网真数据): 合并格标题/图表页签/指数量程刻度/说明行 */
  .kd-title .sub,.m .k,.mini5 .l,.rk-pf-card .k,.brief-row .bt,.rk-dim-h,.gauge-marks,.gauge-cap{font-size:11px}
  .kd-title .mode-pills button{font-size:11px}   /* 原规则(0,2,1)比 .mode-pills button(0,1,1) 更具体, 必须同形覆盖 */
  .ts-chip i{font-size:10.5px}
  /* 指数共振三指数同行(nowrap): clamp 下限随主档上抬, 仍不许折行 */
  .kd-rows .rv .v.kd-idx3{font-size:clamp(10.5px,2.8vw,14px)}
}
@media(max-width:560px){.m-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:380px){.m-grid{grid-template-columns:1fr}.idx-grid{grid-template-columns:1fr}
  /* 2026-09-14: 320px 屏 hkl 行最小宽(标签 nowrap 满宽+数值+说明)会超卡宽 → 说明栏收窄改换行(不裁标签) */
  .hkl-row .hkl-s{width:88px}
  /* 2026-09-14: 320px 屏温度计四格统计每格只剩 ~31px("38%"占 30px 挤到贴边) → 改 2×2 */
  .sent-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* 2026-09-14 数值列对齐(中窄屏 641–1439): 合并格排 3 列时每格只剩 ~181-214px, 标签被挤成两三个字 →
   该档改 2 列(每格 ≥275px), 第 3 格起占满整行(同自选卡国债格做法, 免末行留半个空档) */
@media(min-width:641px) and (max-width:1439px){
  .ext-grid,#watchGrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ext-grid>.mm:nth-child(n+3),#watchGrid>.mm:nth-child(n+3){grid-column:1/-1}
}
/* 数值列对齐(桌面两栏档 901–1439): 外盘卡只剩半宽, 港股流动性行 2 列时每行仅 ~224-260px,
   数值+说明+标签三列排不下(说明被截/标签被压) → 该档港股行改单列 */
@media(min-width:901px) and (max-width:1439px){.hkl-grid{grid-template-columns:minmax(0,1fr)}}
/* 2026-10-08 存量FAIL修①: 901-1199 档(两卡半宽) ext-div 说明行 nowrap 裁切(hklSub 实测 cw238/sw329, 1200 档压线 cw330≈sw329) → 该档说明改可换行(说明类可牺牲口径), 1200+ 档维持单行省略号 */
@media(min-width:901px) and (max-width:1199px){.ext-div .sub{white-space:normal}}
/* 2026-10-08 存量FAIL修②: ≤430 档 TOP20 卡头 h2 反竖排不收缩(flex:0 0 auto)把 .sub 挤到 ~12px 宽, b#atRatio(不可断行 38px)溢出卡外 +5px(320 档验收尺实证) → 该卡头允许换行, 副标整行落下(同 ≤640 .ext-div 先例) */
@media(max-width:430px){.card-h.sub-wrap{flex-wrap:wrap}.card-h.sub-wrap .sub{flex:1 1 100%;text-align:left}}
/* ===== 技术指标卡(2026-09-20): 布局仿同花顺/东财 —— 主图K线读数行在上, 副图tab+读数行贴图 ===== */
.ta-val{font-size:11px;color:var(--ink2);line-height:1.55;min-height:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ta-val .tv{margin-right:10px}
.ta-subrow{display:flex;align-items:center;gap:10px;margin-top:4px;flex-wrap:wrap}
.ta-subrow .mode-pills{flex-wrap:wrap;row-gap:2px}
/* 2026-09-21 审美整改(P2): 手机端副图 16 个 tab 折 3 行占图表约 1/4 高 → 单行横向滚动(常用 VOL/MACD/KDJ/RSI 在前) */
@media(max-width:640px){
  .ta-subrow .mode-pills{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%}
  .ta-subrow .mode-pills::-webkit-scrollbar{display:none}
  .ta-subrow .mode-pills>*{white-space:nowrap;flex:0 0 auto}
}
.ta-subrow .ta-val{flex:1;min-width:200px}
#taChart{height:430px;margin-top:2px}
#tsChart{height:400px;margin-top:2px}
@media(max-width:700px){#taChart{height:360px}#tsChart{height:330px}.ta-subrow .ta-val{flex-basis:100%}}
