/* 福建新奥 · 影子策略站 v5 —— 依据《前端设计图鉴》企业蓝令牌重构（左侧单一切换栏，右侧全打通） */
/* 外壳（颜色、字体、圆角、阴影、缓动）与涌源官网一致：外壳用 --navy/--fr 一组；数据配色（--br 买入蓝、卖出红、盈亏红绿、口径色、状态色）单独一组不变。 */
@font-face{font-family:"YY Inter";src:url("fonts/yy-inter.woff2?v=db939613dd") format("woff2");font-weight:300 700;font-display:swap;unicode-range:U+0020-007E,U+00A0-00BF,U+00D7,U+2009,U+2212,U+2030}
@font-face{font-family:"YY Serif";src:url("fonts/yy-serif-board.woff2?v=0cd2544813") format("woff2");font-weight:700;font-display:swap}
:root{
  --sans:"YY Inter",-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",system-ui,sans-serif;
  --mono:var(--sans);   /* 数字与西文：Inter 等宽数字 */
  --code:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;   /* 代码、接口路径、版本号 */
  --serif:"YY Serif","Noto Serif SC","Source Han Serif SC","Songti SC",serif;   /* 看板标题 */
  --bg:#F4F7FB;--bg2:#EDF2F8;--sf:#ffffff;--sf2:#F8FAFD;--hov:#F1F5FA;
  --ln:#E3E9F1;--ln2:#D3DCE8;--tx:#0E2841;--tx2:#5D6A7C;--tx3:#8C97A8;
  --navy:#0E2841;--fr:#394E9A;--fr-h:#2E4186;--fr-soft:#EAF1FA;--accent:#639BD3;   /* 外壳：标题、选中、链接、强调 */
  --br:#2a78d6;--br-h:#1c5cab;--br-soft:#e8f1fb;--br-ink:#ffffff;
  --ok:#0ca30c;--ok-tx:#006300;--ok-soft:#e7f5e7;
  --wa:#c98500;--wa-tx:#8a5b00;--wa-soft:#fdf3de;
  --er:#d03b3b;--er-tx:#b02a2a;--er-soft:#fbeaea;
  --c1:#2a78d6;--c2:#eb6834;--c3:#1baf7a;--c4:#eda100;--c5:#e87ba4;--c6:#008300;--c7:#4a3aa7;--c8:#e34948;
  --grid:#e9edf4;--r1:4px;--r2:8px;--r3:12px;
  --sh1:none;   /* 卡片只留细描边，阴影只给浮层与悬停中的块 */
  --sh2:0 8px 22px -10px rgba(14,40,65,.24);
  --sh3:0 16px 44px -14px rgba(14,40,65,.3);
  --ease:cubic-bezier(.16,1,.3,1);--ease-io:cubic-bezier(.65,0,.35,1);--d1:.15s;--d2:.3s;--d3:.6s;   /* 进入与展开、往返；悬停 / 切换与展开 / 首次绘图 */
  --nav-w:56px;
  --gain-tx:#b02a2a;--loss-tx:#006300;
  --buy:#2a78d6;--pause:#c98500;--done:#1baf7a;--hold:#98a4b8;--wait:#d5dbe6;--sell:#d03b3b;
  --gain:#e34948;--loss:#1baf7a;
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--tx);font-family:var(--sans);font-size:13px;line-height:1.55;letter-spacing:0;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;min-height:100%}
a{color:var(--fr);text-decoration:none}
button{font-family:inherit;font-size:inherit;cursor:pointer}
h1,h2,h3,h4{margin:0;font-weight:600}
::selection{background:var(--br);color:#fff}
:focus-visible{outline:2px solid var(--br);outline-offset:2px}
.num,.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.tab{font-variant-numeric:tabular-nums}
.muted{color:var(--tx2)}.faint{color:var(--tx3)}.small{font-size:11.5px}.tiny{font-size:10.5px}
.right{text-align:right}.nowrap{white-space:nowrap}.hidden{display:none!important}
html[data-pnl="green"]{--gain:#1baf7a;--loss:#e34948;--gain-tx:#006300;--loss-tx:#b02a2a}
.pos{color:var(--gain-tx)}.neg{color:var(--loss-tx)}
.up{color:var(--gain-tx)}.dn{color:var(--loss-tx)}
.good{color:var(--ok-tx)}.bad{color:var(--er-tx)}
.flex{display:flex;gap:8px;align-items:center}.flex.between{justify-content:space-between}.flex.wrap{flex-wrap:wrap}
.col{display:flex;flex-direction:column;gap:10px}
.grid{display:grid;gap:10px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.mt{margin-top:10px}.mt8{margin-top:8px}.mt12{margin-top:12px}
.hr{height:1px;background:var(--ln);margin:8px 0}
.sp{flex:1 0 8px}

/* ============ 页面壳：左栏 + 全打通内容 ============ */
.app{display:grid;grid-template-columns:var(--nav-w) minmax(0,1fr);min-height:100vh}
.sidenav{position:sticky;top:0;height:100vh;width:56px;background:color-mix(in srgb,var(--sf) 88%,var(--bg));border-right:1px solid var(--ln);padding:12px 8px 14px;display:flex;flex-direction:column;gap:2px;overflow:hidden;z-index:40;transition:width var(--d1) var(--ease),box-shadow var(--d1) var(--ease)}
/* 展开前后左栏各元素的高度与纵向位置不变：只加宽、显示文字，行高与内边距两种状态一致 */
/* 品牌行（与数据地图一致）：收起时只有新奥圆形标志；展开时标志右侧淡入“客户名称 · 系统名称”与公司名。行高固定 40px，标志位置两种状态不变 */
.sidenav .brand{display:flex;align-items:center;gap:10px;height:40px;padding:0 6px;margin:0 0 10px;box-sizing:border-box;flex:none;white-space:nowrap;overflow:hidden}
.sidenav .brand .mk{width:28px;height:28px;flex:none;display:block}
.sidenav .brand .full{display:flex;flex-direction:column;gap:2px;min-width:0;opacity:0;transition:opacity .25s var(--ease)}
.sidenav .brand .full b{font-size:13px;line-height:16px;font-weight:600;letter-spacing:.02em;color:var(--navy)}
.sidenav .brand .full small{font-size:11px;line-height:14px;color:var(--tx3);letter-spacing:.04em;font-weight:400}
.sidenav.open .brand .full{opacity:1;transition-delay:.08s}
/* 含节假日：顶栏最右端的统一开关（30×17，钮 13；轨道与钮都是圆角矩形，圆角 4px / 3px；开为主体色，关为浅灰）；悬停只变色 */
.holsw{display:inline-flex;align-items:center;gap:7px;flex:none;margin-left:auto;border:0;background:none;padding:3px 0 3px 6px;font:inherit;font-size:12px;color:var(--tx2);white-space:nowrap;cursor:pointer;transition:color var(--d1) var(--ease)}
.topinfo~.holsw{margin-left:0}
.holsw .tk{position:relative;display:block;width:30px;height:17px;border-radius:4px;background:var(--ln2);flex:none;transition:background var(--d1) var(--ease)}
.holsw .tk u{position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:3px;background:#fff;box-shadow:0 1px 2px rgba(14,40,65,.25);transition:left var(--d1) var(--ease)}
.holsw.on .tk{background:var(--fr)}.holsw.on .tk u{left:15px}
.holsw:hover{color:var(--fr)}.holsw:hover .tk{background:color-mix(in srgb,var(--ln2) 62%,var(--fr))}.holsw.on:hover .tk{background:var(--fr-h)}
/* 左侧浮动卡片里的“含节假日”：与“盈亏颜色”同一行式（行高 32px，文字靠左、上下居中，开关靠右），无外框；侧栏收起时整组隐藏 */
.sidenav .navtg .tgl.holr{min-height:32px;box-sizing:border-box}
.sidenav .navtg .tgl.holr .holsw{flex:1;margin:0;padding:0;border:0;background:none;box-shadow:none;justify-content:space-between;text-align:left;font-size:11.5px;color:var(--tx2)}
.sidenav .navtg .tgl.holr .holsw .t{margin:0;font-size:11.5px;line-height:18px;letter-spacing:0;color:inherit}
.sidenav .navtg .tgl.holr .holsw:hover{color:var(--fr)}
/* 侧栏文字始终排版、收起时被裁掉；展开时淡入（展开与收起的停留延迟在 core.js） */
.sidenav a .lb{white-space:nowrap;line-height:18px;opacity:0;transition:opacity var(--d1) var(--ease)}
.sidenav .navst .it .l{display:none}.sidenav .navst .t{visibility:hidden}
.sidenav .navst .it{justify-content:center}
.sidenav .navtg{display:none;margin-top:10px;padding:10px 0 0;border-top:1px solid var(--ln)}
.sidenav .navtg .t{font-size:10px;color:var(--tx3);letter-spacing:.16em;margin:0 10px 4px}
.tgl{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 10px;font-size:11.5px;color:var(--tx2);cursor:pointer;white-space:nowrap}
.sw{width:34px;height:20px;border-radius:4px;background:var(--ln2);position:relative;flex:none;transition:background var(--d1) var(--ease)}
.sw i{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:3px;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:left var(--d1) var(--ease)}
.sw.on{background:var(--ok)}.sw.on i{left:16px}
.brandchip{font-size:13px;font-weight:650;color:var(--navy);padding:0 14px 0 2px;border-right:1px solid var(--ln2);letter-spacing:.06em;white-space:nowrap;flex:none}
.calh .dc.hol .v,.calh .dc.hol .s2 b{color:var(--tx2)}
.calh .dc.pad{opacity:.55}.calh .dc.pad .dn b{color:var(--tx3)}
.topinfo .wx.avg .lab{display:inline-block;min-width:32px}.topinfo .wx.avg .f{display:inline-block;min-width:50px}.topinfo .wx.avg .f.t{min-width:96px}
.calh .dc.holhide{overflow:hidden;cursor:pointer}
.holmask{position:absolute;inset:0;background:rgba(112,122,140,.62);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:inherit;color:#fff;z-index:2}
.holmask b{font-size:13px;font-weight:650;letter-spacing:.08em;text-shadow:0 1px 2px rgba(0,0,0,.25)}
.holmask span{font-size:11px;color:#111;background:rgba(255,255,255,.88);padding:0 7px;border-radius:4px;font-variant-numeric:tabular-nums;line-height:1.5}
.calh.small .holmask{gap:1px}.calh.small .holmask b{font-size:11px}.calh.small .holmask span{font-size:10px;padding:0 5px}
.wx.avg.flip{animation:wxin .35s var(--ease)}@keyframes wxin{from{opacity:.15;transform:translateY(-3px)}to{opacity:1;transform:none}}
.sidenav .grp{font-size:10px;color:var(--tx3);letter-spacing:.16em;padding:12px 10px 4px;display:flex;align-items:center;gap:8px}
.sidenav .grp::after{content:"";flex:1;height:1px;background:var(--ln)}
.sidenav a{display:flex;align-items:center;gap:9px;padding:7px 10px;height:32px;box-sizing:border-box;line-height:18px;border-radius:8px;color:var(--tx2);font-size:13px;position:relative;transition:background var(--d1) var(--ease),color var(--d1) var(--ease);white-space:nowrap}
.sidenav a .ic{width:18px;height:18px;flex:none;display:grid;place-items:center}
.sidenav a .ic svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.sidenav a:hover{background:var(--hov);color:var(--tx)}
.sidenav a.on{background:var(--fr-soft);color:var(--fr);font-weight:600}
.sidenav .navst{margin-top:14px;padding:10px 10px 0;border-top:1px solid var(--ln)}
.sidenav .navst .t{font-size:10px;line-height:14px;color:var(--tx3);letter-spacing:.16em;margin-bottom:6px;white-space:nowrap;overflow:hidden}
.sidenav .navst .it{display:flex;align-items:center;gap:7px;font-size:11.5px;line-height:16px;color:var(--tx2);height:22px;padding:0;box-sizing:border-box;white-space:nowrap;min-width:0}
.sidenav .navst .it .l{overflow:hidden;text-overflow:ellipsis;min-width:0}
.sidenav .navst .it i{width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 2px var(--ok-soft);flex:none;transition:background var(--d2) var(--ease),box-shadow var(--d2) var(--ease)}
.sidenav .navst .it i.warn{background:var(--wa);box-shadow:0 0 0 2px var(--wa-soft)}.sidenav .navst .it i.off{background:var(--ln2);box-shadow:none}.sidenav .navst .it i.err{background:var(--er);box-shadow:0 0 0 2px var(--er-soft)}
.sidenav .navst .it i.run{background:var(--br);box-shadow:0 0 0 2px var(--br-soft)}   /* 不用无限循环的脉冲 */
.sidenav .navst .it .s{margin-left:auto;font-size:10px;color:var(--tx3);font-family:var(--mono);flex:none}
.sidenav .foot{margin-top:auto;padding:10px 10px 0;font-size:10.5px;color:var(--tx3);line-height:1.6}
.content{min-width:0;padding:12px 18px 40px}
.content.fixed{height:100vh;overflow:hidden;display:flex;flex-direction:column;gap:0;padding:10px 14px 10px}
.content.fixed #view{flex:1;min-height:0;display:flex;flex-direction:column;margin-top:10px;overflow:hidden}
.content.fixed #view.scroll{overflow:auto;display:block}
.content.fixed #view>.ov,.content.fixed #view>.hv{height:100%;min-height:0;flex:1}
.page-head{display:none}

/* ============ 卡片 ============ */
.card{background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);display:flex;flex-direction:column;min-width:0;position:relative}
.card .hd{display:flex;align-items:center;gap:9px;padding:8px 14px;border-bottom:1px solid var(--ln);min-height:38px;flex-wrap:wrap;row-gap:6px}
.card .hd h3,.card .hd b.t{font-size:13.5px;font-weight:650;letter-spacing:.03em;white-space:nowrap;color:var(--navy)}
.card .hd .term{font-size:11px;color:var(--tx3);letter-spacing:.02em;white-space:nowrap;line-height:1.3}   /* 单位写成标题后的浅灰小字，不套框 */
.card .hd .sub{font-size:11px;color:var(--tx3);font-weight:400}
.card .bd{padding:12px 14px}
.card .bd.tight{padding:6px 8px 4px}
.card .bd.flush{padding:0}
.card .ft{padding:8px 14px 9px;font-size:11.5px;line-height:1.7;color:var(--tx3);background:color-mix(in srgb,var(--sf2) 46%,transparent);border-top:1px solid color-mix(in srgb,var(--ln) 72%,transparent);border-radius:0 0 calc(var(--r2) - 1px) calc(var(--r2) - 1px)}
.card .fill{flex:1;min-height:0;position:relative}
.card .fill .ch{position:absolute;inset:0;min-height:0}

/* ============ 图表基座 ============ */
.ch{width:100%;min-height:240px;position:relative}
.ch.tall{min-height:520px}.ch.mid{min-height:340px}.ch.short{min-height:180px}
.ch svg text{font-variant-numeric:tabular-nums!important;letter-spacing:.01em}
.empty{display:grid;place-items:center;height:100%;min-height:100px;color:var(--tx3);font-size:12px;text-align:center;padding:10px}
/* 图例项（放在卡片头部，点一下隐藏、再点显示；隐藏的项留在原位变灰：色块空心、文字变浅；主线固定） */
.lg{display:flex;gap:2px;flex-wrap:wrap;align-items:center;font-size:11.5px;color:var(--tx2)}
.lg-it{display:inline-flex;align-items:center;gap:6px;cursor:pointer;padding:2px 7px;user-select:none;transition:opacity var(--d1) var(--ease),background var(--d1) var(--ease);white-space:nowrap;border-radius:var(--r1)}
.lg-it:hover{background:var(--hov)}
.lg-it.off{color:var(--tx3)}
.lg-it.fixed{cursor:default}
.lg-it.fixed:hover{background:none}
.lg-it .k,.lg-ck .k{width:10px;height:10px;border-radius:3px;background:var(--c);box-shadow:inset 0 0 0 1px rgba(15,23,42,.06);flex:none}
.lg-it .k.line,.lg-ck .k.line{width:14px;height:0;border-top:2.5px solid var(--c);border-radius:1px;background:none;box-shadow:none}
.lg-it .k.dash,.lg-ck .k.dash{border-top-style:dashed}
.lg-it .k.dot,.lg-ck .k.dot{width:8px;height:8px;border-radius:50%}
.lg-it .k.soft,.lg-ck .k.soft{opacity:.9}
/* 其余标记：倒三角、水平短线、竖线、线加实心点、底色区 */
.lg .k.tri,.k.tri{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:8px solid var(--c);border-radius:0;background:none;box-shadow:none}
.lg .k.hline,.k.hline{width:14px;height:3px;border-radius:1px;background:var(--c);box-shadow:none}
.lg .k.vline,.k.vline{width:2px;height:12px;border-radius:1px;background:var(--c);box-shadow:none}
.lg .k.ldot,.k.ldot{position:relative;width:16px;height:0;border-top:2px solid var(--c);border-radius:0;background:none;box-shadow:none}
.k.ldot::after{content:"";position:absolute;left:5px;top:-4.5px;width:7px;height:7px;border-radius:50%;background:var(--c)}
.k.ldot.dash{border-top-style:dashed}
.lg .k.area,.k.area{width:12px;height:10px;border-radius:2px;background:var(--c);box-shadow:none}
.lg-it.off .k{background:transparent;box-shadow:inset 0 0 0 1.5px var(--c)}
.lg-it.off .k.line,.lg-it.off .k.tri,.lg-it.off .k.triu,.lg-it.off .k.ldot{box-shadow:none;opacity:.4}
.lg-it.off .k.hline,.lg-it.off .k.vline{background:var(--c);box-shadow:none;opacity:.4}
.lg-it.off .k.ldot::after{background:var(--sf);box-shadow:inset 0 0 0 1.5px var(--c)}
/* 悬浮层（ECharts 用 className 挂到 body） */
.cv-tipbox{background:color-mix(in srgb,var(--sf) 94%,transparent)!important;border:1px solid color-mix(in srgb,var(--ln) 80%,transparent)!important;border-radius:4px!important;padding:8px 12px!important;min-width:128px;box-shadow:0 8px 24px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.08)!important;backdrop-filter:blur(6px);font-size:12px!important;color:var(--tx)!important;font-family:var(--sans)!important;line-height:1.6!important}
.cv-tipbox{position:absolute!important;left:0;top:0;pointer-events:none!important;z-index:30}
.cv-tipbox:not([style]),.cv-tipbox[style=""]{visibility:hidden!important;opacity:0!important}
.cv-tipbox .tt{font-size:10.5px;letter-spacing:.02em;margin-bottom:4px;color:var(--tx3);font-weight:500}
.cv-tipbox .tr{display:flex;align-items:center;gap:7px;font-size:12px;line-height:1.8;padding:0}
.cv-tipbox .tr i{width:8px;height:8px;border-radius:2px;flex:none;display:inline-block}
.cv-tipbox .tr b{margin-left:auto;font-variant-numeric:tabular-nums;padding-left:16px;font-weight:650;font-size:12.5px;white-space:nowrap}
.cv-tipbox .tr.dim{color:var(--tx3)}
.cv-tipbox .tn{font-size:11px;color:var(--tx3);margin-top:3px;max-width:260px;white-space:normal}

/* ============ 指标卡 ============ */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.kpi{background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);padding:11px 14px 9px;display:flex;flex-direction:column;gap:1px;box-shadow:var(--sh1);min-width:0}
.kpi .kl{font-size:11.5px;color:var(--tx2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi .kv{font-size:24px;font-weight:650;line-height:1.2;letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--tx)}
.kpi .kv small{font-size:12px;font-weight:500;color:var(--tx3);margin-left:3px;letter-spacing:0}
.kpi .kd{font-size:11px;display:flex;align-items:center;gap:5px;color:var(--tx3);flex-wrap:wrap;line-height:1.5}
.kpi .kd b{font-weight:600}
.kpi.gain .kv{color:var(--gain-tx)}.kpi.loss .kv{color:var(--loss-tx)}
.kpi.hero{background:var(--fr-soft);border-color:transparent}
.kpi.hero .kv{font-size:32px}
.kpi.sm .kv{font-size:18px}.kpi.sm{padding:8px 12px 7px}
/* 紧凑数字行（日内动态：不占空间） */
.kstrip{display:flex;flex-wrap:wrap;gap:4px 20px;align-items:baseline;padding:7px 14px;background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2)}
.kstrip .k{display:flex;align-items:baseline;gap:6px;min-width:0}
.kstrip .lb{font-size:11.5px;color:var(--tx2);white-space:nowrap}
.kstrip .vl{font-weight:600;font-size:13px;font-variant-numeric:tabular-nums;white-space:nowrap}
.kstrip .vl small{font-size:10.5px;color:var(--tx3);font-weight:400;margin-left:2px}
.kstrip .nt{font-size:10.5px;color:var(--tx3);white-space:nowrap}
.kstrip .k.na .vl{color:var(--tx3);font-weight:500}

/* ============ 原子控件 ============ */
.chip{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 8px;font-size:11px;font-weight:600;border-radius:var(--r1);background:var(--sf2);color:var(--tx2);white-space:nowrap;line-height:1;border:1px solid transparent}
.chip.buy{background:var(--br-soft);color:var(--br)}.chip.pause{background:var(--wa-soft);color:var(--wa-tx)}.chip.done{background:var(--ok-soft);color:var(--ok-tx)}
.chip.hold{background:var(--bg2);color:var(--tx2)}.chip.wait{background:var(--sf);color:var(--tx3);font-weight:500;border-color:var(--ln)}.chip.sell{background:var(--er-soft);color:var(--er-tx)}
.chip.neutral{background:var(--bg2);color:var(--tx2);font-weight:500}.chip.warn{background:var(--wa-soft);color:var(--wa-tx)}.chip.ok{background:var(--ok-soft);color:var(--ok-tx)}.chip.err{background:var(--er-soft);color:var(--er-tx)}
.chip.sm{height:17px;padding:0 6px;font-size:10px}
/* 卡片标题行里的状态：小圆点 + 文字，需要处理的用琥珀色 */
.card .hd .chip{height:auto;padding:0;border:0;background:none;gap:6px;font-size:11px;font-weight:500;color:var(--tx2)}
.card .hd .chip::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--tx3);flex:none}
.card .hd .chip.warn,.card .hd .chip.pause{color:var(--wa-tx)}.card .hd .chip.warn::before,.card .hd .chip.pause::before{background:var(--wa)}
.card .hd .chip.ok,.card .hd .chip.done{color:var(--ok-tx)}.card .hd .chip.ok::before,.card .hd .chip.done::before{background:var(--ok)}
.card .hd .chip.err{color:var(--er-tx)}.card .hd .chip.err::before{background:var(--er)}
.btn{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border:1px solid var(--ln2);background:var(--sf);border-radius:var(--r1);color:var(--navy);font-size:12px;transition:border-color var(--d1) var(--ease),color var(--d1) var(--ease),background var(--d1) var(--ease);white-space:nowrap;line-height:1.4}
.btn:hover{border-color:var(--fr);color:var(--fr)}
.btn.pri,.btn.primary{background:var(--fr);border-color:var(--fr);color:#fff}
.btn.pri:hover,.btn.primary:hover{background:var(--fr-h);border-color:var(--fr-h);color:#fff}
.btn.sm{padding:2px 8px;font-size:11px}
.seg,.dsel{position:relative;display:inline-flex;border:1px solid transparent;border-radius:var(--r1);padding:3px;gap:2px;background:var(--bg2);flex:none}
.seg:empty,.dsel:empty{display:none}   /* 没有选项的分段选择不占位（如策略参考历史实绩时的页签） */
.seg button,.dsel button{position:relative;z-index:1;border:0;background:none;border-radius:3px;padding:4px 12px;font-size:12px;color:var(--tx2);white-space:nowrap;transition:color var(--d1) var(--ease);line-height:1.4}
.seg button:hover,.dsel button:hover{color:var(--fr)}
.seg button.on,.dsel button.on{color:var(--fr);font-weight:600}
.seg-th{position:absolute;left:0;top:3px;height:calc(100% - 6px);width:0;border-radius:3px;background:var(--sf);box-shadow:0 1px 2px rgba(14,40,65,.08),0 0 0 1px var(--ln);pointer-events:none;z-index:0;opacity:0;transition:transform var(--d2) var(--ease),width var(--d2) var(--ease),opacity var(--d1) var(--ease)}
.seg.sm button,.dsel.sm button{padding:2px 9px;font-size:11px}
select,input[type=text]{font-family:inherit;font-size:12px;padding:4px 26px 4px 10px;border:1px solid var(--ln2);border-radius:var(--r1);background:var(--sf) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%238d9ab2' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;-webkit-appearance:none;color:var(--tx);line-height:1.4;max-width:100%}
select:hover{border-color:var(--br)}
input[type=text]{background-image:none;padding-right:10px;border-radius:var(--r1)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--ln);padding:0 8px}
.tabs button{padding:8px 14px;font-size:12.5px;color:var(--tx2);border:none;background:none;position:relative;transition:color var(--d1) var(--ease)}
.tabs button:hover{color:var(--br)}
.tabs button.on{color:var(--br);font-weight:600}
.tabs button.on::after{content:"";position:absolute;left:12px;right:12px;bottom:-1px;height:2px;background:var(--br);border-radius:1px}
.tabpane{display:none}.tabpane.on{display:block}
.lgrow{height:auto;min-height:28px;padding:5px 14px 0;overflow:visible}.lgrow .lg{flex-wrap:wrap;white-space:normal;justify-content:flex-start}
table.tb{width:100%;border-collapse:collapse;font-size:12.5px}
table.tb th{background:var(--sf2);color:var(--tx2);font-weight:600;font-size:11.5px;text-align:left;padding:7px 12px;border-bottom:1px solid var(--ln);white-space:nowrap;position:sticky;top:0;z-index:1;letter-spacing:.02em}
table.tb td{padding:6px 12px;border-bottom:1px solid var(--ln);white-space:nowrap;vertical-align:middle}
table.tb tbody tr:last-child td{border-bottom:none}
table.tb tbody tr{transition:background var(--d1) var(--ease)}
table.tb tbody tr:hover td{background:var(--hov)}
table.tb tr.sel td{background:var(--br-soft)}
table.tb td.num,table.tb th.num{text-align:right;font-variant-numeric:tabular-nums}
table.tb.compact th,table.tb.compact td{padding:4px 10px;font-size:12px}
table.tb td.wrap{white-space:normal}
.tbwrap{overflow:auto;max-height:380px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:12.5px;margin:0}
.kv dt{color:var(--tx2);white-space:nowrap}.kv dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}.kv dd.txt{font-family:var(--sans)}
.kvl{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:12.5px;padding:10px 14px;margin:0}
.kvl dt{color:var(--tx2);white-space:nowrap}.kvl dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}.kvl dd.txt{font-family:var(--sans)}
.kvl .grp{grid-column:1/3;border-top:1px solid var(--ln);margin-top:4px;padding-top:6px;font-size:10.5px;color:var(--tx3);letter-spacing:.08em}
.kvl .grp.first{border:0;margin:0;padding:0;font-size:13px;color:var(--tx);font-weight:600;letter-spacing:.02em;display:flex;align-items:center;gap:8px}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--tx2);align-items:center}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:middle;box-shadow:inset 0 0 0 1px rgba(15,23,42,.06)}
.legend i.ln{height:0;width:14px;border-top:2.5px solid currentColor;border-radius:1px;box-shadow:none;background:none!important}
.note{background:var(--sf2);border:1px solid var(--ln);border-radius:var(--r1);padding:6px 10px;font-size:11.5px;color:var(--tx2);line-height:1.6}
.reason{background:var(--fr-soft);padding:7px 12px;font-size:12px;line-height:1.6;border-radius:var(--r1);color:var(--tx)}
.reason.pause{border-left-color:var(--pause)}.reason.done{border-left-color:var(--done)}.reason.hold{border-left-color:var(--hold)}.reason.wait{border-left-color:var(--ln2)}
.explain{background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);padding:10px 16px;font-size:12.5px;line-height:1.8;color:var(--tx2)}
.explain b{color:var(--tx);font-weight:600}
.drawer{position:fixed;top:0;right:0;width:620px;max-width:96vw;height:100vh;background:var(--sf);border-left:1px solid var(--ln);box-shadow:var(--sh3);z-index:50;transform:translateX(100%);transition:transform var(--d2) var(--ease);display:flex;flex-direction:column}
.drawer.open{transform:none}
.drawer .hd{padding:12px 18px;border-bottom:1px solid var(--ln);display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px}
.drawer .bd{padding:14px 18px;overflow:auto;flex:1;font-size:12.5px}
.mask{position:fixed;inset:0;background:rgba(9,14,26,.32);z-index:40;display:none}.mask.open{display:block}

/* ============ 交易台：顶行 / 时间轴 / 小时页签 / 进度行 ============ */
.topline{display:flex;align-items:center;gap:10px;min-height:34px;flex-wrap:nowrap;min-width:0}
.topline>select{flex:none}
.topline .dsel{flex:none}
.topline .lbl{font-size:11.5px;color:var(--tx2);white-space:nowrap}
.taxisrow{padding:0 2px}
.taxis{display:flex;align-items:stretch;gap:3px;height:26px;position:relative;min-width:0;box-sizing:border-box}
.taxis .tb{flex:1;border-radius:4px;background:#e2e7f0;cursor:pointer;position:relative;min-width:0;opacity:.62;transition:opacity var(--d1) var(--ease)}
.taxis .tb.pre,.taxis .tb.first,.taxis .tb.close,.taxis .tb.post{flex:1.35;background:#dde3ee}
.taxis .tb.pre.on,.taxis .tb.first.on,.taxis .tb.close.on,.taxis .tb.post.on{background:#c5d6ee}
.taxis .tb.on{background:#c0d7f4}
.taxis .tb.on.h1{background:#9cc1ef}.taxis .tb.on.h2{background:#6fa3e4}.taxis .tb.on.h3{background:var(--br)}
.taxis .tb.pause{background:#f2e2b8}.taxis .tb.on.pause{background:#e7c87a}
/* 时间与阶段名写在块内；未选中的块整体半透明，选中的块不透明、字加粗 */
.taxis .tb:hover{opacity:.85}
.taxis .tb.cur{opacity:1}
.taxis .tb .lb{position:absolute;inset:0;display:grid;place-items:center;font-size:11px;font-family:var(--mono);color:var(--tx);white-space:nowrap;overflow:hidden;pointer-events:none}
.taxis .tb.pre .lb,.taxis .tb.first .lb,.taxis .tb.close .lb,.taxis .tb.post .lb{font-family:var(--sans);font-weight:600;letter-spacing:.04em}
.taxis .tb.cur .lb{font-weight:700}
.taxis .tb.on.h3 .lb{color:#fff}
.htabs{display:flex;gap:4px;align-items:center;flex-wrap:nowrap;overflow:auto;padding:2px 0;scrollbar-width:none}
.htabs::-webkit-scrollbar{display:none}
.htabs .ht{border:1px solid var(--ln);background:var(--sf);border-radius:var(--r1);padding:3px 4px;font-size:11px;font-family:var(--mono);color:var(--tx2);cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;gap:4px;transition:all var(--d1) var(--ease);line-height:1.2;flex:1 1 0;min-width:0}
.htabs .ht:hover{border-color:var(--br);color:var(--br)}
.htabs .ht.on{background:var(--br);border-color:var(--br);color:#fff}
.htabs .ht.ovtab{font-family:var(--sans);font-weight:600;color:var(--tx);padding:3px 14px;flex:0 0 auto}
.htabs .ht.ovtab.on{color:#fff}
.htabs .ht i{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--wait)}
.htabs .ht i.B{background:var(--buy)}.htabs .ht i.P{background:var(--pause)}.htabs .ht i.D{background:var(--done)}.htabs .ht i.H{background:var(--hold)}
.htabs .ht.on i{box-shadow:0 0 0 1.5px rgba(255,255,255,.75)}
.pline{display:flex;gap:18px;align-items:center;font-size:12px;color:var(--tx2);padding:7px 14px;background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);flex-wrap:wrap;row-gap:4px}
.pline b{color:var(--tx);font-variant-numeric:tabular-nums;font-weight:600}
.pline .pb{width:140px;height:5px;background:var(--bg2);border-radius:1px;overflow:hidden;display:inline-block;vertical-align:middle}
.pline .pb i{display:block;height:100%;background:var(--br);border-radius:1px;transition:width var(--d2) var(--ease)}
.pline .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ok);vertical-align:middle;margin-right:5px;box-shadow:0 0 0 2px var(--ok-soft)}
.pline .dot.warn{background:var(--wa);box-shadow:0 0 0 2px var(--wa-soft)}.pline .dot.off{background:var(--ln2);box-shadow:none}.pline .dot.err{background:var(--er);box-shadow:0 0 0 2px var(--er-soft)}
.pline .it{white-space:nowrap}

/* 算法流程条：输入 → 首笔 → 推理 → 输出 */
.pipe{display:flex;align-items:stretch;background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);padding:5px 8px;overflow:hidden;gap:0}
.pipe .st{flex:1;display:flex;align-items:center;gap:9px;padding:3px 12px;position:relative;min-width:0}
.pipe .st+.st::before{content:"";position:absolute;left:0;top:18%;bottom:18%;width:1px;background:var(--ln)}
.pipe .ball{width:22px;height:22px;border-radius:50%;border:2px solid var(--ln2);display:grid;place-items:center;font-size:11px;color:var(--tx3);flex:none;font-variant-numeric:tabular-nums;background:var(--sf);font-weight:600;position:relative}
.pipe .st.done .ball{border-color:var(--br);color:var(--br);background:var(--br-soft)}
.pipe .st.on .ball{border-color:var(--br);background:var(--br);color:#fff}
.pipe .st.on .ball::after{content:"";position:absolute;inset:-5px;border-radius:50%;border:2px solid color-mix(in srgb,var(--br) 35%,transparent)}
.pipe .st.warn .ball{border-color:var(--wa);color:var(--wa-tx);background:var(--wa-soft)}
.pipe .lb{display:flex;flex-direction:column;min-width:0;line-height:1.3}
.pipe .lb b{font-size:12px;color:var(--tx);white-space:nowrap;font-weight:600}
.pipe .lb b .n{font-variant-numeric:tabular-nums}
.pipe .lb span{font-size:10.5px;color:var(--tx3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pipe .st.on .lb b{color:var(--br)}.pipe .st.warn .lb b{color:var(--wa-tx)}
.pipe .models{flex:1.25;display:flex;align-items:center;gap:14px;padding:3px 12px;position:relative;flex-wrap:wrap;row-gap:2px;font-size:11.5px;color:var(--tx2)}
.pipe .models::before{content:"";position:absolute;left:0;top:18%;bottom:18%;width:1px;background:var(--ln)}
.pipe .models .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ok);vertical-align:middle;margin-right:5px;box-shadow:0 0 0 2px var(--ok-soft)}
.pipe .models .dot.warn{background:var(--wa);box-shadow:0 0 0 2px var(--wa-soft)}.pipe .models .dot.off{background:var(--ln2);box-shadow:none}
.pipe .models .it{white-space:nowrap}
/* 提示条：建议计数 + 市场深度预警 */
.alerts{display:flex;align-items:center;gap:14px;background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);padding:7px 14px;flex-wrap:wrap;font-size:12px;color:var(--tx2);row-gap:6px;min-height:38px}
.alerts .cnt{display:flex;gap:14px;white-space:nowrap}
.alerts .cnt b{color:var(--tx);font-variant-numeric:tabular-nums;font-weight:600}
.alerts .dw{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-left:auto}
.alerts .dw .lab{font-weight:600;color:var(--wa-tx);white-space:nowrap}
.alerts .dw .lab.ok{color:var(--ok-tx)}
.alerts .dw .chip{cursor:pointer;font-variant-numeric:tabular-nums}
.alerts .dw .chip:hover{filter:brightness(.95)}
/* 顶部右侧：时钟与天气 */
.topinfo{margin-left:auto;display:flex;gap:6px;align-items:center;font-size:11.5px;color:var(--tx2);flex-wrap:nowrap;justify-content:flex-end;min-width:0;overflow:hidden;white-space:nowrap}
.topinfo>*{flex:none}
.topinfo .wx.avg .lab{font-weight:700;color:var(--tx);margin-right:2px}
.topinfo .wx.avg small{font-weight:500;color:var(--tx3)}
.topinfo .clock{display:flex;align-items:baseline;gap:8px;padding:3px 12px;border:1px solid var(--ln);border-radius:var(--r1);background:var(--sf)}
.topinfo .clock b{font-size:15px;font-weight:650;color:var(--tx);font-variant-numeric:tabular-nums;letter-spacing:.02em}
.topinfo .clock span{white-space:nowrap}
.topinfo .wx{display:flex;align-items:center;gap:10px;padding:3px 12px;border:1px solid var(--ln);border-radius:var(--r1);background:var(--sf);white-space:nowrap}
.topinfo .wx b{color:var(--tx);font-variant-numeric:tabular-nums;font-weight:600}
.topinfo .wx .ic{width:16px;height:16px;display:inline-grid;place-items:center}
.topinfo .wx .ic svg{width:16px;height:16px;stroke:var(--c4);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
/* ============ 交易台：总览 24 块 ============ */
.ov{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-auto-rows:minmax(0,1fr);gap:8px;height:min(calc(100vh - 192px),820px);min-height:540px}
.hb{background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);padding:6px 10px 5px 12px;display:flex;flex-direction:column;gap:1px;min-height:0;overflow:hidden;cursor:pointer;font-size:11.5px;color:var(--tx2);box-shadow:var(--sh1);position:relative;transition:transform var(--d1) var(--ease),box-shadow var(--d1) var(--ease),border-color var(--d1) var(--ease)}
.hb::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:0 3px 3px 0;background:var(--wait)}
.hb.B::before{background:var(--buy)}.hb.P::before{background:var(--pause)}.hb.D::before{background:var(--done)}.hb.H::before{background:var(--hold)}
.hb:hover{box-shadow:var(--sh2);border-color:color-mix(in srgb,var(--br) 45%,var(--ln))}
.hb.sel{border-color:var(--br);box-shadow:0 0 0 2px var(--br-soft)}
.hb .r1{display:flex;justify-content:space-between;align-items:center;gap:4px;line-height:1.3;flex:none}
.hb .r1 .hh{font-weight:650;color:var(--tx);font-size:13px;font-variant-numeric:tabular-nums}
.hb .r1 .hh span{font-weight:400;color:var(--tx3);font-size:10px;margin-left:4px}
.hb .r2{display:flex;justify-content:space-between;align-items:baseline;gap:4px;line-height:1.15;flex:none}
.hb .r2 .px{font-size:20px;font-weight:650;color:var(--tx);letter-spacing:-.01em;font-variant-numeric:tabular-nums;flex:none}
.hb .r2 .dl{font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}
.hb .r3{display:flex;justify-content:space-between;font-size:11px;color:var(--tx2);gap:4px;white-space:nowrap}
.hb .r3 b{color:var(--tx);font-weight:600;font-variant-numeric:tabular-nums}
.hb .r3 .edge.good{color:var(--ok-tx)}.hb .r3 .edge.bad{color:var(--er-tx)}
.hb .spw{position:relative;flex:1 1 30px;min-height:20px;width:100%;margin:1px 0}
.hb .spw .spark{position:absolute;inset:0;width:100%;height:100%;display:block}
.hb .sl{position:absolute;font-size:9px;line-height:1.25;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--tx2);background:color-mix(in srgb,var(--sf) 86%,transparent);padding:0 3px;border-radius:3px;white-space:nowrap;pointer-events:none;transform:translate(3px,-50%);z-index:1}
.hb .sl.f{color:var(--tx);font-weight:600}
.hb .sl.tr{left:auto;right:2px;top:0;transform:none}.hb .sl.tl{left:2px;top:0;transform:none}.hb .sl.br{left:auto;right:2px;bottom:0;transform:none}.hb .sl.bl{left:2px;bottom:0;transform:none}
.hb .sl.h{color:var(--er-tx)}.hb .sl.l{color:var(--ok-tx)}
.hb .r4{font-size:11.5px;color:var(--tx);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hb .r4 b{font-variant-numeric:tabular-nums;font-weight:600}
.hb .r4.P{color:var(--wa-tx)}.hb .r4.D{color:var(--ok-tx)}.hb .r4.H{color:var(--tx2)}
.hb .pb{height:4px;border-radius:0 1px 1px 0;background:var(--bg2);position:relative;overflow:hidden;flex:none;margin:2px 0 1px}
.hb .pb i{position:absolute;left:0;top:0;bottom:0;background:#b9c6d8;border-radius:0 1px 1px 0}
.hb .pb i.f{background:var(--c3)}
.hb .r5{display:flex;justify-content:space-between;font-size:10.5px;color:var(--tx3);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}
.hb .r5 b{color:var(--tx);font-weight:600}
.hb .act{margin-top:1px;padding:3px 9px;border-radius:6px;font-size:12px;font-weight:600;background:var(--sf2);color:var(--tx2);display:flex;justify-content:space-between;align-items:center;gap:6px;white-space:nowrap;line-height:1.3;min-height:24px;flex:none}
.hb .act b{font-size:13.5px;font-variant-numeric:tabular-nums;font-weight:650}
.hb .act small{font-weight:500;font-size:10.5px;opacity:.85}
.hb .act.B{background:var(--br);color:#fff;box-shadow:0 1px 3px color-mix(in srgb,var(--br) 35%,transparent)}
.hb .act.P{background:var(--wa-soft);color:var(--wa-tx)}
.hb .act.D{background:var(--ok-soft);color:var(--ok-tx)}
.hb .act.H{background:var(--bg2);color:var(--tx2)}
.hb .act.W,.hb .act.N{background:var(--sf2);color:var(--tx3);font-weight:500}
.hb .why{font-size:10.5px;color:var(--tx3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4;flex:none;min-height:15px}
.hb .dep{display:flex;justify-content:space-between;gap:4px;font-size:10.5px;color:var(--tx3);white-space:nowrap;flex:none;line-height:1.4;min-height:15px;overflow:hidden}
.hb .dep b{color:var(--tx2);font-weight:600;font-variant-numeric:tabular-nums}
.hb .dep .pct{color:var(--tx2);font-variant-numeric:tabular-nums}
.hb .dep .pct.warn{color:var(--wa-tx);font-weight:700}
.hb .dep .pct.watch{color:var(--wa-tx)}
.hb .dep .pct.ok{color:var(--ok-tx)}
.hb .dep .rng{color:var(--tx3);font-variant-numeric:tabular-nums;min-width:0;overflow:hidden;text-overflow:ellipsis}.hb .dep>span:first-child{flex:none}
.hb .dep.d2 .lv{font-weight:600}.hb .dep.d2 .lv.ok{color:var(--ok-tx)}.hb .dep.d2 .lv.watch{color:var(--wa-tx)}.hb .dep.d2 .lv.warn{color:var(--wa-tx)}
.hb .dbar{height:3px;border-radius:0 1px 1px 0;background:var(--bg2);position:relative;flex:none;margin:0 0 1px}
.hb .dbar i{position:absolute;left:0;top:0;bottom:0;border-radius:0 1px 1px 0;background:var(--br)}
.hb .dbar.watch i,.hb .dbar.warn i{background:var(--wa)}
.hb.dwarn{border-color:color-mix(in srgb,var(--wa) 55%,var(--ln));box-shadow:0 0 0 2px var(--wa-soft)}
.hb .why b{color:var(--tx2);font-weight:600;font-variant-numeric:tabular-nums}
.hb .r2 .cmp{font-size:10.5px;color:var(--tx3);text-align:right;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.hb .r2 .cmp b{font-variant-numeric:tabular-nums;font-weight:600}
.hb .pb2{height:7px;border-radius:0 1px 1px 0;background:var(--bg2);position:relative;overflow:visible;flex:none;margin:3px 0 2px}
.hb .pb2 i{position:absolute;left:0;top:0;bottom:0;border-radius:0 1px 1px 0}
.hb .pb2 i.b{background:#b9c6d8}.hb .pb2 i.f{background:var(--br)}
.hb .pb2 i.t{width:2px;background:var(--tx);border-radius:1px;top:-2px;bottom:-2px}
.hb.D .pb2 i.f{background:var(--c3)}
.hb{justify-content:space-between}
.hb .kv{display:grid;grid-template-columns:1fr 1fr;gap:0 4px;line-height:1.3;font-size:10.5px}
/* 小时视图 */
.hv{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:10px;height:min(calc(100vh - 192px),820px);min-height:540px}
.hv .left{display:flex;flex-direction:column;gap:10px;min-height:0}
.hv .left .card.chart{flex:0 0 40%;min-height:220px}
.hv .left .card.mkt{flex:1;min-height:0}
.hv .mk3{display:grid;grid-template-columns:1fr .95fr 1.3fr;flex:1;min-height:0}
.hv .mk3>div{min-height:0;overflow:auto;display:flex;flex-direction:column;border-left:1px solid var(--ln)}
.hv .mk3>div:first-child{border-left:none}
.hv .mk3 .t{font-size:10.5px;color:var(--tx3);letter-spacing:.1em;padding:7px 12px 2px;flex:none}
.hv .mk3 .bookv{padding:2px 12px 8px}
.hv .mk3 .bookv .lv{grid-template-columns:30px 1fr 58px 50px;gap:6px;padding:1px 0;font-size:11.5px}
.hv .mk3 .bookv .mid{font-size:11px;gap:8px}
.hv .mk3 .tape{padding:2px 10px 8px;font-size:11px}
.hv .mk3 .tape .r{grid-template-columns:46px 1fr 46px;gap:6px;white-space:nowrap}
.hv .mk3 .olist table.tb td{padding:3px 6px;font-size:11px}
.hv .mk3 .olist .chip.sm{padding:0 4px}
.hv .mk3 .olist{padding:0}
.hv .side{display:flex;flex-direction:column;gap:10px;min-height:0}
.hv .side .card{flex:none}
.hv .side .card.grow{flex:1;min-height:0;overflow:auto}
/* 小时视图：策略原因 */
.gates{display:flex;flex-direction:column;gap:5px;padding:8px 14px 10px}
.gates .g{display:grid;grid-template-columns:20px 1fr;gap:8px;align-items:start;font-size:12px;line-height:1.4}
.gates .g i{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:10px;color:#fff;background:var(--ln2);font-style:normal;margin-top:1px}
.gates .g.ok i{background:var(--c3)}.gates .g.stop i{background:var(--wa)}.gates .g.on i{background:var(--br)}.gates .g.na i{background:var(--ln2)}
.gates .g b{display:block;color:var(--tx);font-weight:600}
.gates .g span{color:var(--tx2);font-size:11.5px;font-variant-numeric:tabular-nums}
.gates .g.final{background:var(--br-soft);border-radius:6px;padding:6px 8px;margin:2px -8px 0}
.gates .g.final.stop{background:var(--wa-soft)}.gates .g.final.ok{background:var(--ok-soft)}
/* 实时滚单 */
table.tb.rt{font-size:11.5px}
table.tb.rt th{padding:5px 8px;font-size:10.5px}
table.tb.rt td{padding:3px 6px;line-height:1.3;white-space:nowrap}
table.tb.rt th{padding:5px 6px}
table.tb.rt tr{cursor:pointer}
table.tb.rt tr.sel td{background:var(--br-soft)}
table.tb.rt .h{font-family:var(--mono);font-weight:600;color:var(--tx)}
table.tb.rt .bq{color:var(--ok-tx)}table.tb.rt .sq{color:var(--er-tx)}
table.tb.rt .dep{display:inline-block;height:8px;border-radius:2px;vertical-align:middle;margin:0 4px}
table.tb.rt .dep.b{background:#cfeee0}table.tb.rt .dep.s{background:#f6d5d3}
table.tb.rt .me{display:inline-block;padding:0 5px;border-radius:3px;background:var(--br);color:#fff;font-size:9.5px;line-height:14px;margin-left:3px;font-weight:600}
table.tb.rt .me.s{background:var(--er)}
.bookv{padding:6px 14px 8px}
.bookv .lv{display:grid;grid-template-columns:36px 1fr 66px 60px;align-items:center;gap:8px;font-size:12px;font-variant-numeric:tabular-nums;padding:2px 0;color:var(--tx)}
.bookv .lv .n{color:var(--tx3);font-size:11px}
.bookv .lv .bar{height:12px;border-radius:0 3px 3px 0;min-width:0}
.bookv .lv.s .bar{background:#f6d5d3;justify-self:end;border-radius:3px 0 0 3px}.bookv .lv.b .bar{background:#cfeee0}
.bookv .lv .p{text-align:right;font-weight:600}.bookv .lv.s .p{color:var(--er-tx)}.bookv .lv.b .p{color:var(--ok-tx)}
.bookv .lv .q{text-align:right;color:var(--tx2)}
.bookv .lv .me{display:inline-block;padding:0 5px;border-radius:3px;background:var(--br);color:#fff;font-size:9.5px;line-height:14px;margin-left:4px;font-weight:600;vertical-align:middle}
.bookv .mid{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-top:1px solid var(--ln);border-bottom:1px solid var(--ln);margin:4px 0;font-size:11.5px;color:var(--tx2);flex-wrap:wrap}
.bookv .mid b{color:var(--tx);font-variant-numeric:tabular-nums}
.olist{padding:0;overflow:auto;flex:1;min-height:0}
/* 盘前 */
.pre{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.pre .ch{min-height:300px}
.checks{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;font-size:12px;padding:10px 14px;margin:0}
.checks .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ok);margin-right:6px;vertical-align:middle;box-shadow:0 0 0 2px var(--ok-soft)}
.checks .dot.warn{background:var(--wa);box-shadow:0 0 0 2px var(--wa-soft)}.checks .dot.off{background:var(--ln2);box-shadow:none}
.checks dt{color:var(--tx2);white-space:nowrap}.checks dd{margin:0}
.sec{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:10px}

/* ============ 效益分析：日历热度图 ============ */
.calh{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.calh .wd{font-size:11px;color:var(--tx3);text-align:center;padding:0 0 2px;letter-spacing:.1em}
.calh .dc{position:relative;min-height:94px;border:1px solid var(--ln);border-radius:var(--r2);padding:7px 10px 6px;cursor:pointer;display:flex;flex-direction:column;gap:1px;transition:transform var(--d1) var(--ease),box-shadow var(--d1) var(--ease),border-color var(--d1) var(--ease);--t:0%;background:color-mix(in srgb,var(--hc,var(--br)) var(--t),var(--sf));min-width:0}
.calh .dc:hover{box-shadow:var(--sh2);border-color:color-mix(in srgb,var(--br) 45%,var(--ln))}
.calh .dc.sel{border-color:var(--tx);box-shadow:0 0 0 2px color-mix(in srgb,var(--tx) 14%,transparent)}
.calh .dc.na{background:var(--sf2);cursor:default;color:var(--tx3)}
.calh.rollcal .dc{background:color-mix(in srgb,var(--hc,var(--br)) var(--t),var(--mb,var(--sf)))}
.calh.rollcal .dc.mB{--mb:#f1f4f9;border-color:#d8dfe9}
.calh.rollcal .dc.na{background:color-mix(in srgb,var(--mb,var(--sf2)) 60%,var(--sf2))}
.calh.rollcal .dc.ms .dn b{color:var(--fr)}
.calh.rollcal .dc.ms .dn b{color:var(--br)}
.calh.rollcal .dc.me{border-right:3px solid var(--ln2)}
.calh .wd.we{color:var(--br)}
.calh.small{gap:4px}
.calh.small .wd{font-size:10px;padding-bottom:0}
.calh.small .dc{min-height:48px;padding:3px 6px 4px;border-radius:6px;gap:0}
.calh.small .dc .dn{font-size:10px;white-space:nowrap;line-height:1.3}
.calh.small .dc .dn .mk{font-size:8.5px}
.calh.small .dc .v{font-size:12px;margin-top:1px;line-height:1.15}
.calh.small .dc .v small{font-size:9px}
.calh.small .dc .s2{font-size:9.5px;line-height:1.2;grid-template-columns:auto 1fr;gap:0 4px;white-space:nowrap;margin-top:2px}
.calh.small .dc .s2 span{color:var(--tx3)}
.calh.small .dc:hover{transform:none}
.calh.small.strip .dc{min-height:46px;padding:3px 7px 3px}
.calh.small.strip .dc .s2{display:flex;gap:0 8px;white-space:nowrap;margin-top:1px}
.calh.small.strip .dc .s2 span::after{content:""}
.calnav{display:inline-flex;align-items:center;gap:2px}
.calnav .rng{font-family:var(--mono);font-size:11px;color:var(--tx2);padding:0 8px;white-space:nowrap}
.calnav button{border:1px solid var(--ln2);background:var(--sf);border-radius:var(--r1);padding:2px 10px;font-size:11px;color:var(--tx2);line-height:1.4}
.calnav button:hover{color:var(--br);border-color:var(--br)}
.calnav button:disabled{opacity:.4;cursor:default;color:var(--tx3);border-color:var(--ln)}
.calh .dc.na:hover{transform:none;box-shadow:none;border-color:var(--ln)}
.calh .dc.empty{border:none;background:transparent;cursor:default;box-shadow:none;min-height:0}
.calh .dc.dim{background:var(--sf2);border-style:dashed;color:var(--tx3)}
.calh .dc.dim .dn b,.calh .dc.dim .v,.calh .dc.dim .s2,.calh .dc.dim .s2 b{color:var(--tx3);font-weight:500}
.calh .dc.dim.na{cursor:default}.calh .dc.dim.na:hover{transform:none;box-shadow:none;border-color:var(--ln)}
.calh .dc .dn{font-family:var(--mono);font-size:11px;color:var(--tx3);display:flex;justify-content:space-between;align-items:center;gap:4px}
.calh .dc .dn b{color:var(--tx);font-weight:600}
.calh .dc .dn .mk{font-size:9.5px;letter-spacing:.06em;white-space:nowrap}
.calh .dc .v{font-size:18px;font-weight:650;letter-spacing:-.01em;font-variant-numeric:tabular-nums;line-height:1.2;margin-top:3px;white-space:nowrap;color:var(--tx)}
.calh .dc .v small{font-size:10.5px;font-weight:500;color:var(--tx3);margin-left:2px;letter-spacing:0}
.calh .dc .s{font-size:10.5px;color:var(--tx3);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:auto}
.calh .dc .s2{display:grid;grid-template-columns:auto 1fr;gap:0 6px;font-size:10.5px;color:var(--tx3);font-variant-numeric:tabular-nums;margin-top:auto;line-height:1.45}
.calh .dc .s2 b{font-weight:500;color:var(--tx2);text-align:right;white-space:nowrap}
.calh .dc .s2 span{white-space:nowrap}
.calh .dc .v.zero{color:var(--tx3);font-weight:500}
.calh .dc.strong .s2,.calh .dc.strong .s2 b{color:rgba(255,255,255,.85)}
.calh .dc.strong,.calh .dc.strong .dn,.calh .dc.strong .dn b,.calh .dc.strong .v,.calh .dc.strong .v small,.calh .dc.strong .s{color:#fff}
.calh .dc.strong .dn{color:rgba(255,255,255,.8)}.calh .dc.strong .s{color:rgba(255,255,255,.82)}
.calx{grid-column:1/-1;border:1px solid var(--ln);border-radius:var(--r2);background:var(--sf2);padding:12px 14px 14px;animation:xin .22s var(--ease);position:relative;margin:2px 0 4px}
.calx::before{content:"";position:absolute;top:-7px;left:var(--ax,50%);width:12px;height:12px;background:var(--sf2);border-left:1px solid var(--ln);border-top:1px solid var(--ln);transform:translateX(-50%) rotate(45deg)}
@keyframes xin{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.calx .xh{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-bottom:10px;row-gap:6px}
.calx .xh .d{font-size:14px;font-weight:650}
.calx .xh .xk{display:flex;align-items:baseline;gap:6px;font-size:12px;color:var(--tx2);white-space:nowrap}
.calx .xh .xk b{font-size:16px;font-weight:650;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.calx .xh .x{margin-left:auto;border:none;background:none;color:var(--tx3);font-size:16px;line-height:1;padding:2px 6px;border-radius:var(--r1)}
.calx .xh .x:hover{background:var(--hov);color:var(--tx)}
.xh24{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:6px}
.xb{border:1px solid var(--ln);border-radius:6px;padding:6px 9px 5px;display:flex;flex-direction:column;gap:0;min-height:78px;position:relative;font-size:11px;color:var(--tx3);--t:0%;background:color-mix(in srgb,var(--hc,var(--br)) var(--t),var(--sf));min-width:0}
.xb .h{font-family:var(--mono);font-size:11px;color:var(--tx2);display:flex;justify-content:space-between;align-items:center;gap:4px}
.xb .h .chip{height:15px;padding:0 5px;font-size:9.5px}
.xb .v{font-size:15px;font-weight:650;color:var(--tx);font-variant-numeric:tabular-nums;line-height:1.25;margin-top:2px;white-space:nowrap}
.xb .s{font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
.xb .s2{display:grid;grid-template-columns:auto 1fr;gap:0 6px;font-size:10.5px;color:var(--tx3);font-variant-numeric:tabular-nums;margin-top:auto;line-height:1.4}
.xb .s2 b{font-weight:500;color:var(--tx2);text-align:right;white-space:nowrap}
.xb.strong .s2,.xb.strong .s2 b{color:rgba(255,255,255,.85)}
.xb.na{background:var(--sf2);border-style:dashed}
.xb.na .v{color:var(--tx3);font-size:12px;font-weight:500}
.xb.strong,.xb.strong .h,.xb.strong .v,.xb.strong .s{color:#fff}
.xb.strong .h{color:rgba(255,255,255,.8)}.xb.strong .s{color:rgba(255,255,255,.82)}
.xnote{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:10px}
.xnote .c{border:1px solid var(--ln);border-radius:6px;padding:7px 10px;background:var(--sf)}
.xnote .c .l{font-size:10.5px;color:var(--tx2)}.xnote .c .v{font-size:16px;font-weight:650;font-variant-numeric:tabular-nums;line-height:1.3}.xnote .c .s{font-size:10.5px;color:var(--tx3)}
.months{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.mcard{background:var(--sf);border:1px solid var(--ln);border-radius:var(--r2);padding:10px 14px 9px;box-shadow:var(--sh1);display:flex;flex-direction:column;gap:2px}
.mcard .l{font-size:11.5px;color:var(--tx2);display:flex;justify-content:space-between}
.mcard .v{font-size:22px;font-weight:650;letter-spacing:-.01em;font-variant-numeric:tabular-nums;line-height:1.2}
.mcard .v small{font-size:11px;font-weight:500;color:var(--tx3);margin-left:3px}
.mcard .bars{display:flex;flex-direction:column;gap:3px;margin-top:6px;font-size:10.5px;color:var(--tx3)}
.mcard .bars .b{display:grid;grid-template-columns:52px 1fr 64px;gap:6px;align-items:center}
.mcard .bars .b i{display:block;height:6px;border-radius:0 1px 1px 0;background:var(--bg2);position:relative;overflow:hidden}
.mcard .bars .b i b{position:absolute;top:0;bottom:0;border-radius:0 1px 1px 0}
.mcard .bars .b span:last-child{text-align:right;font-variant-numeric:tabular-nums;color:var(--tx2)}

/* ============ 多段持仓条与图例 ============ */
/* 持仓条从左端零点起，底槽与最外一段只圆右端 */
.pb3{height:7px;border-radius:0 1px 1px 0;background:var(--bg2);position:relative;overflow:visible;flex:none;margin:3px 0 2px;display:flex}
.pb3 i{display:block;height:100%}
.pb3 i.c1{background:#b9c6d8}.pb3 i.c2{background:#8fd3c0}.pb3 i.c5{background:#f2c66d}.pb3 i.c3{background:var(--br)}.pb3 i.c4{background:#ef7d7a}
.pb3 i:last-of-type{border-radius:0 1px 1px 0}
.pb3 .tk{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--tx);border-radius:1px}
.pb3.big{height:10px;margin:6px 0 4px;border-radius:0 2px 2px 0}
.pb3.hum{height:4px;margin:0 0 2px;opacity:.95}.hb .pb3.hum{margin-top:-1px}.pb3.big.hum{height:6px;margin-top:0}
.ovleg{display:flex;gap:16px;align-items:center;font-size:11px;color:var(--tx3);padding:4px 4px 0;flex:none;flex-wrap:wrap}
.ovleg i{display:inline-block;width:12px;height:6px;border-radius:1px;margin-right:5px;vertical-align:middle}
.ovleg .tk{display:inline-block;width:2px;height:10px;background:var(--tx);margin-right:5px;vertical-align:middle}
.kstrip.flat{border:0;border-radius:0;background:none;padding:6px 14px 2px}
.dtop{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:10px;align-items:stretch}
@media (max-width:1100px){.dtop{grid-template-columns:1fr}}

/* ============ 日期类型 ============ */
.dtype{display:inline-flex;align-items:center;gap:6px;padding:3px 12px;border-radius:var(--r1);font-size:11.5px;font-weight:600;border:1px solid var(--ln);background:var(--sf);color:var(--tx2);white-space:nowrap;line-height:1.4}
.dtype small{font-weight:500;font-size:10.5px;opacity:.85}
.dtype.weekend{background:var(--br-soft);color:var(--br);border-color:transparent}
.dtype.adjust{background:var(--wa-soft);color:var(--wa-tx);border-color:transparent}
.dtype.holiday{background:linear-gradient(90deg,#ff8a4c,#e8532a);color:#fff;border-color:transparent;box-shadow:0 2px 8px rgba(232,83,42,.35);font-weight:650}
.dtype.holiday i{width:7px;height:7px;border-radius:50%;background:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.35)}
.dtype.holiday small{opacity:.9}
.dtype.big{font-size:12.5px;padding:4px 14px}
/* 盘前要点 */
.pts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:10px 12px 12px}
.pt{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:start;border:1px solid var(--ln);border-radius:8px;padding:8px 12px;background:var(--sf2);min-width:0}
.pt .ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;background:var(--br-soft);color:var(--br);flex:none}
.pt .ic svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.pt.warn .ic{background:var(--wa-soft);color:var(--wa-tx)}.pt.hot .ic{background:#fdebd3;color:#c2410c}.pt.ok .ic{background:var(--ok-soft);color:var(--ok-tx)}.pt.hol .ic{background:#fdebd3;color:#e8532a}.pt.gray .ic{background:var(--bg2);color:var(--tx2)}
.pt b{display:block;font-size:12.5px;font-weight:650;line-height:1.4}
.pt span{font-size:11.5px;color:var(--tx2);line-height:1.5;display:block}
.pt.wide{grid-column:1/-1}
/* 天气地图（盘前 / 日历 / 单日分析）：上一行权重切换，左地图（空白区放全省平均与地市明细），右曲线 */
.wx{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);gap:6px 8px;padding:4px 6px 6px}
.wx .wxbar{grid-column:1/-1;display:flex;align-items:center;gap:8px;padding:0 4px;min-height:26px}
.wx .wxbar .lb{font-size:10.5px;color:var(--tx3);white-space:nowrap}
.wx .wxbar .src{margin-left:auto;font-size:10.5px;color:var(--tx3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.wx .map{position:relative;min-height:470px;border-radius:8px;background:linear-gradient(180deg,#f7f9fc,#eef3fa);overflow:hidden}
.wx .map .ch{position:absolute;inset:0;min-height:0}
.wx .cc{position:absolute;transform:translate(-50%,-50%);background:rgba(255,255,255,.94);border:1px solid var(--ln);border-radius:7px;padding:3px 7px 4px;font-size:10.5px;line-height:1.35;box-shadow:var(--sh1);cursor:pointer;white-space:nowrap;z-index:3;transition:box-shadow var(--d1) var(--ease),border-color var(--d1) var(--ease),transform var(--d1) var(--ease)}
.wx .cc:hover,.wx .cc.hl{border-color:var(--br);box-shadow:var(--sh2);z-index:5}
.wx .cc.on{border-color:var(--tx);box-shadow:0 0 0 2px color-mix(in srgb,var(--tx) 14%,transparent),var(--sh2)}
.wx .cc .n{display:flex;align-items:center;gap:4px;font-weight:650;font-size:11.5px;color:var(--tx)}
.wx .cc .n svg{width:15px;height:15px;stroke:var(--tx2);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.wx .cc .r{display:flex;justify-content:space-between;gap:6px;color:var(--tx3);font-variant-numeric:tabular-nums}
.wx .cc .r b{color:var(--tx);font-weight:600;margin-left:auto}
.wx .cc .r .d{font-size:9.5px;min-width:30px;text-align:right}
.wx .cc .r .d.up{color:var(--er-tx)}.wx .cc .r .d.dn{color:var(--ok-tx)}.wx .cc .r .d.eq{color:var(--tx3)}
.wx .fx{position:absolute;top:10px;width:calc(64% - 177px);min-width:150px;max-width:240px;background:rgba(255,255,255,.95);border:1px solid var(--ln);border-radius:8px;padding:7px 10px 8px;font-size:10.5px;z-index:2;box-shadow:var(--sh1);line-height:1.45}
.wx .fxr{right:10px}.wx .fxc{top:180px;min-height:232px}
.wx .fx .dph{display:flex;align-items:center;gap:6px}
.wx .fx .dph svg{width:16px;height:16px;stroke:var(--tx2);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.wx .fx .dph b{font-size:12px;font-weight:650;white-space:nowrap}
.wx .fx .dps{color:var(--tx3);font-size:10px;margin:1px 0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wx .fx.idle .dps{white-space:normal;line-height:1.5}
.wx .fx .dpr{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;align-items:baseline}
.wx .fx .dpr span{color:var(--tx3);white-space:nowrap}
.wx .fx .dpr b{font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right;overflow:hidden;text-overflow:ellipsis}
.wx .fx .dpr b .d{font-size:9.5px;font-weight:600;margin-left:3px}
.wx .fx .dpr b .d.up{color:var(--er-tx)}.wx .fx .dpr b .d.dn{color:var(--ok-tx)}.wx .fx .dpr b .d.eq{color:var(--tx3);font-weight:500}
.wx .fx .wb{display:grid;grid-template-columns:auto 1fr auto;gap:2px 6px;align-items:center;font-size:10px;color:var(--tx2);margin-top:5px}
.wx .fx .wb i{display:block;height:5px;border-radius:1px;background:var(--br)}
.wx .fx .wb b{font-variant-numeric:tabular-nums;font-weight:600}
/* 地图右上角的地市滚板（G10）：标题行“各地市”与小方点，下面一页一市，底部一行全省气温范围；当前一页的地市标签加深 */
.wx .wtk .tkh{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:-2px -4px 4px 0;color:var(--tx3);font-size:10px}
.wx .wtk .tkd{flex-wrap:wrap;justify-content:flex-end}
.wx .wtk .dph span{color:var(--tx3);font-size:10.5px;white-space:nowrap}
.wx .wtk .dph{margin-bottom:3px}
.wx .wtk .tkf{margin-top:6px;padding-top:5px;border-top:1px dashed var(--ln);color:var(--tx3)}.wx .wtk .tkf b{color:var(--tx);font-weight:600;font-variant-numeric:tabular-nums}
.wx .cc.tk{border-color:var(--tx2);z-index:4}
.wx .curve{display:flex;flex-direction:column;min-height:0;min-width:0}
.wx .hd2{display:flex;align-items:center;gap:8px;padding:2px 6px 0;font-size:12px;font-weight:600;flex-wrap:wrap}
.wx .hd2 .sub{font-weight:400;color:var(--tx3);font-size:11px}
.wx .hd2 .lg{margin-left:auto}
.wx .curve .ch{flex:1;min-height:420px}
.wx.stack{grid-template-columns:1fr}
.wx.stack .map{min-height:430px}
.wx.stack .curve .ch{min-height:220px}
@media (max-width:1180px){.wx{grid-template-columns:1fr}}
.spw .spd{position:absolute;width:6px;height:6px;border-radius:50%;border:1.5px solid #fff;transform:translate(-50%,-50%);box-shadow:0 0 0 1px rgba(15,23,42,.06);pointer-events:none;z-index:2}
.spw .spd.m{width:5px;height:5px}
/* 滚板（统一构件 G10，S.ticker）：每页 3 秒；小方点手动切换（可见 7px 方块、圆角 1px，点击区 13px）；换页 160ms 淡入 */
.tkp.in{animation:tkin .16s var(--ease) both}
@keyframes tkin{from{opacity:0}to{opacity:1}}
.tkd{display:flex;align-items:center;gap:0}
.tkd button{width:13px;height:13px;padding:0;border:3px solid transparent;border-radius:4px;background:var(--ln2);background-clip:content-box;cursor:pointer;flex:none}
.tkd button:hover{background-color:var(--tx3)}.tkd button.on{background-color:var(--tx2)}
.tkd button:focus-visible{outline:2px solid var(--br);outline-offset:-1px}
@media (prefers-reduced-motion:reduce){.tkp.in{animation:none}}
/* G8 迷你曲线上的最高 / 最低 / 最新值标签（S.spark 的 ext 选项） */
.spw .spd.x{width:5px;height:5px;border-width:1px}
.spw .spx{position:absolute;transform:translate(5px,-50%);font-size:10px;line-height:11px;font-weight:650;color:var(--tx);white-space:nowrap;pointer-events:none;z-index:3;font-variant-numeric:tabular-nums;text-shadow:0 0 2px var(--sf,#fff),0 0 2px var(--sf,#fff),0 0 1px var(--sf,#fff)}
.spw .spx.lf{transform:translate(calc(-100% - 5px),-50%)}

/* ============ 热力矩阵（单日分析） ============ */
.heat{display:grid;gap:2px;font-size:9.5px;font-family:var(--mono)}
.heat .c{height:18px;display:grid;place-items:center;border-radius:3px;color:var(--tx);cursor:pointer;overflow:hidden;white-space:nowrap;transition:filter var(--d1) var(--ease);font-variant-numeric:tabular-nums}
.heat .c:hover{filter:brightness(.94)}
.heat .c.B{background:#cfe0f7;color:#1c5cab}.heat .c.P{background:#fbe9c6;color:#8a5b00}.heat .c.D{background:#d5f0e6;color:#0f6f52}.heat .c.H{background:#eef1f6;color:var(--tx3)}.heat .c.W{background:var(--sf2);color:var(--tx3);box-shadow:inset 0 0 0 1px var(--ln)}
.heat .c.future{background:var(--sf2);color:var(--tx3);box-shadow:inset 0 0 0 1px var(--ln)}.heat .c.now{outline:2px solid var(--br);outline-offset:-2px}
.heat .rl{display:grid;place-items:center;color:var(--tx2);font-size:9.5px}.heat .hl{display:grid;place-items:center;color:var(--tx3);font-size:9px;height:16px}
.heat.pm{gap:2px 3px;font-size:10.5px}.heat.pm .c{height:20px;border-radius:4px}.heat.pm .c.N{background:var(--sf2);color:var(--tx3);box-shadow:inset 0 0 0 1px var(--ln)}.heat.pm .rl{font-size:10.5px}.heat.pm .hl{font-size:10px;height:18px}

/* ============ 月历（日历页） ============ */
.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal .dh{font-size:11px;color:var(--tx3);text-align:center;letter-spacing:.1em}
.cal .d{border:1px solid var(--ln);border-radius:var(--r2);min-height:60px;padding:6px 9px;background:var(--sf);cursor:pointer;font-size:11px;transition:transform var(--d1) var(--ease),box-shadow var(--d1) var(--ease),border-color var(--d1) var(--ease)}
.cal .d .tiny{font-size:9.5px;letter-spacing:.08em}
.cal .d:hover{box-shadow:var(--sh2);border-color:color-mix(in srgb,var(--br) 45%,var(--ln))}
.cal .d.sel{border-color:var(--tx);box-shadow:0 0 0 2px color-mix(in srgb,var(--tx) 14%,transparent)}
.cal .d.na{background:var(--sf2);color:var(--tx3);cursor:default}.cal .d.na:hover{transform:none;box-shadow:none;border-color:var(--ln)}
.cal .d.dim{background:var(--sf2);border-style:dashed}.cal .d.dim .dn,.cal .d.dim .m{color:var(--tx3);font-weight:500}
.cal .d .dn{font-weight:600;font-family:var(--mono);color:var(--tx)}
.cal .d .m{font-variant-numeric:tabular-nums;font-size:13px;font-weight:600;margin-top:2px}
.cal .d .b{height:4px;border-radius:1px;margin-top:5px;background:var(--bg2);overflow:hidden}
.cal .d .b i{display:block;height:100%;border-radius:1px}

/* ============ 产品板与盘口（单日分析） ============ */
.board{display:grid;grid-template-columns:98px repeat(24,minmax(0,1fr));gap:3px;font-size:10px}
.board .rh{display:flex;flex-direction:column;justify-content:center;font-size:11px;color:var(--tx2);padding-left:4px;line-height:1.35}.board .rh b{color:var(--tx)}
.board .hh{text-align:center;color:var(--tx3);font-family:var(--mono);font-size:10px}
.board .p{border:1px solid var(--ln);border-radius:5px;padding:3px 2px 4px;text-align:center;cursor:pointer;background:var(--sf);font-variant-numeric:tabular-nums;position:relative;min-height:38px;transition:border-color var(--d1) var(--ease),box-shadow var(--d1) var(--ease)}
.board .p:hover{border-color:var(--br);box-shadow:var(--sh1)}.board .p.sel{border-color:var(--tx);box-shadow:0 0 0 2px color-mix(in srgb,var(--tx) 14%,transparent)}.board .p.na{background:var(--sf2);color:var(--tx3)}
.board .p .pr{font-weight:600;font-size:11px;color:var(--tx)}.board .p .dl{font-size:9.5px}
.board .p .vb{position:absolute;left:3px;right:3px;bottom:2px;height:2px;background:var(--bg2);border-radius:0 1px 1px 0}.board .p .vb i{display:block;height:100%;background:var(--br);border-radius:0 1px 1px 0}
.board .p .co{position:absolute;top:3px;right:3px;width:5px;height:5px;border-radius:50%;background:var(--c2)}
.board .p .od{position:absolute;top:3px;left:3px;width:5px;height:5px;border-radius:1px;background:var(--c7)}
.book{display:grid;grid-template-columns:1fr auto 1fr;gap:3px 6px;font-size:11px;font-variant-numeric:tabular-nums;align-items:center}
.book .lv{display:flex;align-items:center;gap:5px}.book .lv.b{justify-content:flex-end}.book .lv .bar{height:9px;border-radius:2px}
.book .lv.s .bar{background:#f6d5d3}.book .lv.b .bar{background:#cfeee0}.book .mid{text-align:center;color:var(--tx3);font-size:10px}

/* ============ 响应式 ============ */
@media (max-width:1400px){.xh24{grid-template-columns:repeat(6,minmax(0,1fr))}}
@media (max-width:1100px){.content.fixed{height:auto;overflow:auto}.content.fixed #view{overflow:visible;display:block}.ov{height:auto;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:176px}.hv{grid-template-columns:1fr;height:auto}.hv .card.d1{min-height:420px}.pre,.sec{grid-template-columns:1fr}.content.fixed{height:auto;overflow:auto}.months{grid-template-columns:1fr}.xnote{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:820px){.app{grid-template-columns:1fr}.sidenav{position:static;height:auto;flex-direction:row;padding:6px;gap:4px;border-right:0;border-bottom:1px solid var(--ln)}.sidenav .brand,.sidenav .grp,.sidenav .foot{display:none}.sidenav a::before{display:none}.ov{grid-template-columns:repeat(2,minmax(0,1fr))}.g2,.g3,.g4{grid-template-columns:1fr}.calh{gap:4px}.calh .dc{min-height:64px;padding:5px 7px}.calh .dc .v{font-size:14px}.xh24{grid-template-columns:repeat(3,minmax(0,1fr))}.board{grid-template-columns:50px repeat(24,minmax(0,1fr))}}
@media (max-height:860px){.hb .why{display:none}.hb .r2 .px{font-size:19px}.hb .sl{font-size:8.5px}.hb .dep{font-size:10px}}
@media (max-width:1400px){.hb .r5 span:last-child{display:none}.hb .r2 .px{font-size:18px}.hb .r5{font-size:10px}.hb .r2 .cmp .lb{display:none}}
/* 可视高度偏矮（16:9 笔记本缩放 125%、1366×768 等扣掉浏览器栏与任务栏后）：收紧 H 块行距；再矮时收起深度行与迷你线标注 */
@media (max-height:800px){.content.fixed{padding-top:8px;padding-bottom:6px}.content.fixed #view{margin-top:6px}.htabs.mt8{margin-top:6px}.ov{gap:6px}.hb{padding:4px 9px 3px 11px}.hb .r1{line-height:1.2}.hb .r2{line-height:1.05}.hb .r2 .px{font-size:17px}.hb .act{min-height:20px;padding:2px 8px;font-size:11.5px}.hb .act b{font-size:12.5px}.hb .dep{min-height:13px;line-height:1.25}.hb .spw{min-height:16px}.hb .r5{line-height:1.25}}
@media (max-height:700px){.hb .dep.d2{display:none}.hb .spw{min-height:12px}.hb .sl{display:none}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* 日历翻页：无外框的实线箭头 */
.calnav button.arr{border:0;background:transparent;padding:2px 6px;border-radius:6px;color:var(--tx2);display:inline-grid;place-items:center;line-height:0;transition:color var(--d1) var(--ease),background var(--d1) var(--ease),transform var(--d1) var(--ease)}
.calnav button.arr svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.calnav button.arr:hover:not(:disabled){color:var(--br);background:var(--br-soft)}
.calnav button.arr:disabled{color:var(--ln2);cursor:default;background:transparent}
.calnav .rng{min-width:96px;text-align:center}

/* 指标卡右侧盈亏比例 */
.kpi{position:relative}
.kpi .kr{position:absolute;right:14px;top:50%;transform:translateY(-50%)}
.kpi .kr .wl{display:flex;flex-direction:column;align-items:flex-end;gap:1px;line-height:1.25;white-space:nowrap}
.kpi .kr .wl small{font-size:10.5px;color:var(--tx3);letter-spacing:.04em}
.kpi .kr .wl b{font-size:16px;font-weight:650;font-variant-numeric:tabular-nums}
.kpi .kr .wl b.na{color:var(--tx3);font-weight:500}
.kpi.hero .kr{right:16px}

/* 盈亏颜色：两个实心方块显示当前配色，旋转箭头对调 */
.tgl.pl{cursor:default}
.tgl.pl .plsq{display:inline-flex;gap:4px;margin-left:auto;margin-right:6px}
.tgl.pl .sq{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:4px;color:#fff;font-size:11.5px;font-weight:650;line-height:1;transition:background var(--d2) var(--ease)}
.tgl.pl .sq.g{background:var(--gain)}.tgl.pl .sq.l{background:var(--loss)}
.tgl.pl .rot{border:0;background:transparent;padding:2px;border-radius:6px;color:var(--tx2);display:inline-grid;place-items:center;line-height:0;cursor:pointer}
.tgl.pl .rot svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;transition:transform var(--d1) var(--ease)}
.tgl.pl .rot:hover{color:var(--br);background:var(--br-soft)}
.tgl.pl .rot.spin svg{animation:rotsw .45s var(--ease)}
@keyframes rotsw{from{transform:rotate(0)}to{transform:rotate(360deg)}}

.dsel .dlab{font-size:13px;color:var(--tx2);padding:0 4px 0 8px;white-space:nowrap;line-height:1}

/* 滚撮日按钮组：垂直居中、字号加大 */
.dsel{display:inline-flex;align-items:center;gap:2px}
.dsel button{font-size:13px;padding:5px 12px;line-height:1.3}

/* 当前显示的数据来源；接口探活不代表实时业务数据。 */
.navsource{font-size:11px;line-height:1.5;color:var(--tx3);padding:6px 0;overflow-wrap:anywhere}.navsource small{display:block;font-size:10px}
.sidenav .navsource{display:none}

/* 决策日：按钮点开后横向展开一周，每天一个小块，样式与时间轴一致；没有场次的日子置灰 */
.topline{position:relative}
/* 日期与时段按钮：与选择类下拉（.dd，G2）同一种触发器——圆角 4px、1px var(--ln2) 边框、右端“竖分隔线 + 双折线”指示区（S.ddIcon），打开时折线翻转向内收拢 */
.dpick{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 6px 0 10px;border:1px solid var(--ln2);border-radius:4px;background:var(--sf);color:var(--tx2);font:inherit;font-size:12.5px;cursor:pointer;white-space:nowrap;flex:none;transition:border-color 160ms cubic-bezier(.2,.8,.2,1)}
.topline .dpick{height:30px}
.dpick b{font-family:var(--mono);font-weight:600;color:var(--tx)}
.dpick .ddi{margin-left:2px}
.dweek{position:absolute;top:calc(100% + 6px);z-index:55;display:flex;align-items:stretch;gap:3px;padding:6px;background:var(--sf);border:1px solid var(--ln);border-radius:10px;box-shadow:var(--sh3)}
.dweek[hidden]{display:none}
.dweek button{border:0;border-radius:4px;font:inherit;cursor:pointer;transition:opacity var(--d1) var(--ease)}
.dweek .wk{width:24px;background:transparent;color:var(--tx2);font-size:16px;line-height:1}
.dweek .wk:hover{background:var(--hov)}
.dweek .wk:disabled{opacity:.3;cursor:default;background:transparent}
.dweek .dd{width:88px;height:28px;display:flex;align-items:center;justify-content:center;gap:5px;background:#c0d7f4;color:var(--tx);opacity:.62;white-space:nowrap}
.dweek .dd b{font-family:var(--mono);font-size:12px;font-weight:500}
.dweek .dd span{font-size:11px;color:var(--tx2)}
.dweek .dd.has:hover{opacity:.85}
.dweek .dd.cur{opacity:1;background:#9cc1ef}
.dweek .dd.cur b,.dweek .dd.cur span{font-weight:700;color:var(--tx)}
.dweek .dd:disabled{background:#e2e7f0;opacity:.55;cursor:default}
.dweek .dd:disabled b,.dweek .dd:disabled span{color:var(--tx3)}
/* 退出登录：固定在左栏底部 */
.sidenav .navout{margin-top:auto}
.sidenav .navout[hidden]{display:none}

/* ================= 2026-10-21 统一构件（三套交易决策平台共用；减少动态效果时直接切换） ================= */
/* G2 选择类下拉：触发器 + 双折线指示区；菜单在触发器下方 4px，盖在内容上，下方放不下时向上弹出或限高 */
.dd{position:relative;display:inline-flex;flex:none}
.ddb{display:inline-flex;align-items:center;gap:8px;height:28px;padding:0 6px 0 10px;border:1px solid var(--ln2);border-radius:4px;background:var(--sf);color:var(--tx);font:inherit;font-size:12.5px;cursor:pointer;white-space:nowrap;transition:border-color 160ms cubic-bezier(.2,.8,.2,1)}
.topline .ddb{height:30px}
.ddt{min-width:0;overflow:hidden;text-overflow:ellipsis}
.ddi{display:inline-flex;align-items:center;gap:5px;color:var(--tx3);flex:none;transition:color 160ms cubic-bezier(.2,.8,.2,1)}
.ddi::before{content:"";width:1px;height:14px;background:var(--ln)}
.ddi svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
.ddi path{transform-box:fill-box;transform-origin:center;transition:transform 160ms cubic-bezier(.2,.8,.2,1)}
.ddb:hover,.dpick:hover{border-color:color-mix(in srgb,var(--fr) 45%,var(--ln2))}
.ddb:hover .ddi,.dpick:hover .ddi{color:var(--fr)}
.dd.open .ddb,.dpick.open{border-color:var(--fr)}
.dd.open .ddi,.dpick.open .ddi{color:var(--fr)}
.dd.open .ddi path,.dpick.open .ddi path{transform:scaleY(-1)}
.ddm{position:absolute;left:0;top:calc(100% + 4px);z-index:70;min-width:100%;overflow:auto;overscroll-behavior:contain;padding:4px;background:var(--sf);border:1px solid var(--ln2);border-radius:6px;box-shadow:0 8px 24px rgba(14,40,65,.12)}
.ddm.up{top:auto;bottom:calc(100% + 4px)}
.ddm[hidden]{display:none}
.ddo{display:grid;grid-template-columns:16px minmax(0,1fr);align-items:center;gap:6px;width:100%;height:28px;padding:0 12px 0 6px;border:0;border-radius:4px;background:transparent;color:var(--tx);font:inherit;font-size:12.5px;text-align:left;cursor:pointer;white-space:nowrap}
.ddo:hover,.ddo:focus-visible{background:var(--hov);outline:0}
.ddo .ck{width:16px;height:16px;fill:none;stroke:var(--fr);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;visibility:hidden}
.ddo.on{color:var(--fr);font-weight:600}.ddo.on .ck{visibility:visible}
.ddo:disabled{color:var(--tx3);cursor:default;background:transparent}
.ddg{height:24px;line-height:24px;padding:0 8px 0 28px;font-size:11px;font-weight:600;color:var(--tx3);cursor:default}
.ddsep{height:1px;margin:4px 2px;background:var(--ln)}
/* 原生 <select>（仅遗留处）：去掉系统样式，换成同一种双折线指示 */
select{-webkit-appearance:none;appearance:none;border-radius:4px;background:var(--sf) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none' stroke='%238d9ab2' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 6.4 8 3.4l3 3'/%3E%3Cpath d='M5 9.6l3 3 3-3'/%3E%3C/g%3E%3C/svg%3E") no-repeat right 6px center/16px 16px;padding-right:28px}

/* G1 顶部筛选栏吸顶：静止时与原来一样；页面一滚动进入停靠态（底色、下沿、阴影），总高 44px，控件尺寸与位置不变 */
html{scroll-padding-top:56px}
.content>.topline.stickybar,.stickybar{position:sticky;top:0;z-index:50;margin:-4px -18px -5px;padding:4px 18px 4px;border-bottom:1px solid transparent;background:transparent;transition:background-color 180ms cubic-bezier(.2,.8,.2,1),box-shadow 180ms cubic-bezier(.2,.8,.2,1),border-color 180ms cubic-bezier(.2,.8,.2,1)}
.content>.topline.stickybar.docked,.stickybar.docked{background:var(--bg);border-bottom-color:var(--ln);box-shadow:0 4px 12px rgba(14,40,65,.06)}

/* G14 弹窗打开时背后页面不滚动：根元素锁定（补滚动条宽度），弹窗内部滚动不外溢 */
html.scroll-lock{overflow:hidden}
html.scroll-lock body{padding-right:var(--sbw,0px)}
.hovl,.pfm,.hpanel,.pfm-box,.dw,.dwin{overscroll-behavior:contain}

@media (prefers-reduced-motion: reduce){.ddi path,.ddi,.ddb,.dpick,.stickybar{transition:none}}
/* G7 提示框里缺数的时刻写“无数据” */
.cv-tipbox .tr.nd b{color:var(--tx3);font-weight:400}
/* G4 HTML 表头的日期：日数下方第二行小字写月份（第一格与每月 1 日） */
.dtk small,.dx small,.cd small,.covm .cd small{display:block;font-size:9px;line-height:10px;color:var(--tx3);font-weight:400}
