/* 大飞移动端 · 夜间交易终端（配色/字号对齐同花顺期货通夜间主题实测值） */
:root{
  /* 底色：#111314 页面 / #182125 次级 / #1B1B1E 卡片 / #27272C 卡片浮层 */
  --bg:#111314; --bg2:#182125; --card:#1b1b1e; --card2:#27272c; --line:#323232; --line2:#3d3d42;
  --ink:#ffffff; --ink2:#999999; --ink3:#666666;
  /* 涨跌：实测 red_E93030 / curve_fall_color_green 0E8936 */
  --up:#e93030; --up-hi:#ff2436; --down:#0e8936; --down-hi:#00d176;
  --accent:#3d76b8; --accent-hi:#4691ee; --warn:#e0a33a;
  /* 字号：以 16 为基准等比（对应 Apk 内 font_sp_18 = 16sp） */
  --fs-xs:11px; --fs-sm:12px; --fs-md:14px; --fs-lg:16px; --fs-xl:18px;
  --safe-b: env(safe-area-inset-bottom, 0px);
}
*{box-sizing:border-box; -webkit-tap-highlight-color:transparent;}
html,body{height:100%;}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  font-size:var(--fs-md); overflow:hidden;
}
button{font-family:inherit; border:none; background:none; color:inherit; cursor:pointer;}
input{font-family:inherit; background:none; border:none; color:var(--ink); outline:none;}

/* hidden 属性优先级最高，防止 display:flex 覆盖 UA 默认的 display:none */
[hidden]{display:none !important;}

/* ---------- 登录 ---------- */
.login{
  position:fixed; inset:0; display:flex; flex-direction:column; justify-content:center;
  padding:0 28px; gap:14px;
  background:radial-gradient(120% 80% at 50% 0%, #1b1b1e 0%, #111314 60%);
}
.brand{text-align:center; margin-bottom:18px;}
.logo{
  width:62px; height:62px; margin:0 auto 12px; border-radius:16px;
  background:linear-gradient(140deg,#4691ee,#3d76b8); color:#fff;
  display:flex; align-items:center; justify-content:center; font-size:22px; font-weight:700;
  box-shadow:0 8px 24px rgba(70,145,238,.28);
}
.brand .title{font-size:21px; font-weight:700; letter-spacing:.04em;}
.brand .sub{font-size:11px; color:var(--ink3); letter-spacing:.18em; margin-top:6px;}
.field{background:var(--card); border:1px solid var(--line); border-radius:12px; padding:10px 14px;}
.field label{display:block; font-size:11px; color:var(--ink2); margin-bottom:3px;}
.field input{width:100%; font-size:16px; padding:2px 0;}
.btn-primary{
  height:48px; border-radius:12px; font-size:16px; font-weight:600; color:#fff;
  background:linear-gradient(135deg,#4691ee,#3d76b8);
}
.btn-primary:active{opacity:.85;}
.btn-primary.buy{background:linear-gradient(135deg,#e93030,#c22525);}
.btn-primary.sell{background:linear-gradient(135deg,#0e8936,#0a6b2a);}
.login-err{min-height:18px; color:var(--up); font-size:12px; text-align:center;}
.disclaimer{font-size:11px; color:var(--ink3); text-align:center; line-height:1.7; margin-top:8px;}

/* ---------- 框架 ---------- */
.app{display:flex; flex-direction:column; height:100%;}
.topbar{
  display:flex; justify-content:space-between; align-items:center;
  padding:calc(8px + env(safe-area-inset-top,0px)) 14px 8px;
  background:var(--bg2); border-bottom:1px solid var(--line);
}
.tb-name{font-size:15px; font-weight:600;}
.tb-code{font-size:11px; color:var(--ink3); margin-top:1px;}
.tb-r{text-align:right;}
.tb-last{font-size:20px; font-weight:700; line-height:1.1;}
.tb-chg{font-size:11px; margin-top:2px; color:var(--ink2);}
.up{color:var(--up);} .down{color:var(--down);} .flat{color:var(--ink2);}

#main{flex:1; overflow:hidden; position:relative;}
.page{display:none; height:100%; overflow-y:auto; -webkit-overflow-scrolling:touch; padding:10px 12px 18px; scrollbar-width:none;}
.page::-webkit-scrollbar{display:none;}
.page.active{display:block;}

.tabbar{
  display:flex; border-top:1px solid var(--line); background:var(--bg2);
  padding-bottom:var(--safe-b);
}
.tabbar button{flex:1; display:flex; flex-direction:column; align-items:center; gap:2px; padding:7px 0 6px; color:var(--ink3); font-size:10px;}
.tabbar button i{
  font-size:15px; font-style:normal; width:30px; height:22px;
  display:flex; align-items:center; justify-content:center; border-radius:8px;
}
.tabbar button.on{color:var(--accent-hi);}
.tabbar button.on i{background:rgba(70,145,238,.18);}

/* ---------- 自选（对齐同花顺行情页截图版式） ---------- */
#page-watch{padding:0; display:none; flex-direction:column;}
#page-watch.active{display:flex;}

/* 顶部分类 Tab */
.cat-bar{
  display:flex; align-items:center; gap:18px; padding:10px 14px 8px;
  background:var(--bg); border-bottom:1px solid var(--line);
  overflow-x:auto; white-space:nowrap; flex:none;
}
.cat-bar button{font-size:15px; color:var(--ink2); flex:none;}
.cat-bar button.on{color:var(--ink); font-weight:700; font-size:17px;}

/* 横滚区隐藏滚动条（对齐 App 观感） */
.idx-row, .cat-bar, .info-tabs{scrollbar-width:none;}
.idx-row::-webkit-scrollbar, .cat-bar::-webkit-scrollbar, .info-tabs::-webkit-scrollbar{display:none;}

/* 快捷卡片横滚 */
.idx-row{display:flex; gap:8px; padding:8px 12px; overflow-x:auto; flex:none; background:var(--bg);}
.idx-card{
  flex:0 0 118px; background:var(--card); border-radius:10px; padding:8px 10px;
}
.idx-card:active{background:var(--card2);}
.idx-card .in{font-size:12px; color:var(--ink2);}
.idx-card .iv{margin-top:3px; display:flex; flex-direction:column; gap:1px;}
.idx-card .ivp{font-size:15px; font-weight:600; font-variant-numeric:tabular-nums;}
.idx-card em{font-style:normal; font-size:10.5px; font-variant-numeric:tabular-nums;}

/* 列表工具行：画线/网格 · 分时预览 · 排序 */
.list-tools{
  display:flex; align-items:center; padding:7px 12px; gap:14px; flex:none;
  border-bottom:1px solid var(--line); background:var(--bg);
}
.lt-ic{font-size:14px; color:var(--ink2); padding:2px 4px;}
.lt-title{flex:1; text-align:center; font-size:13px; color:var(--ink2);}
.lt-sort{font-size:12px; color:var(--accent-hi);}

/* 行：名称+代码 | 分时缩略图 | 色块价+涨跌幅 */
.wrow{
  display:grid; grid-template-columns:1fr 84px 86px 22px; align-items:center;
  gap:6px; padding:9px 10px 9px 12px; border-bottom:1px solid var(--line);
}
.wrow:active{background:var(--card);}
.wcell-l{min-width:0;}
.wcell-m{display:flex; align-items:center; justify-content:center; min-width:0;}
.wcell-m .oi{font-size:11px; color:var(--ink3); font-variant-numeric:tabular-nums; white-space:nowrap;}
.star{
  font-size:14px; color:var(--ink3); padding:4px 0; line-height:1;
}
.star.on{color:var(--warn);}
.wrow .nm{font-size:var(--fs-lg); font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.wrow .cd{font-size:var(--fs-xs); color:var(--ink3); margin-top:1px;}
.wrow canvas.spark{width:84px; height:36px; display:block;}

/* 分组头（总览按板块 / 国内按品种） */
.grp-h{
  display:flex; align-items:center; gap:7px; padding:8px 12px;
  background:var(--card2); border-bottom:1px solid var(--line);
  position:sticky; top:0; z-index:2;
}
.grp-h:active{background:var(--card);}
.gh-ar{font-style:normal; font-size:11px; color:var(--ink3); width:10px;}
.gh-t{font-size:12.5px; color:var(--ink); font-weight:600;}
.gh-n{font-size:10.5px; color:var(--ink3); background:var(--bg); border-radius:8px; padding:1px 6px;}

/* 搜索行 */
.search-row{
  display:flex; gap:8px; align-items:center; padding:7px 12px; flex:none;
  background:var(--bg); border-bottom:1px solid var(--line);
}
.search-row[hidden]{display:none !important;}
.search-row input{
  flex:1; height:34px; border-radius:8px; background:var(--card);
  border:1px solid var(--line2); padding:0 12px; font-size:13.5px; color:var(--ink);
  font-family:inherit; outline:none; min-width:0;
}
.search-row input::placeholder{color:var(--ink3);}
.search-row button{font-size:13px; color:var(--accent-hi); flex:none; padding:4px 2px;}
.wcell-r{display:flex; flex-direction:column; align-items:flex-end; gap:3px;}
.wrow .px{
  min-width:84px; text-align:center; font-size:15px; font-weight:600;
  color:#fff; border-radius:5px; padding:4px 6px;
  font-variant-numeric:tabular-nums;
}
.wrow .px.up{background:var(--up);}
.wrow .px.down{background:var(--down);}
.wrow .px.flat{background:var(--card2); color:var(--ink2);}
.wrow .cg{font-size:12px; font-variant-numeric:tabular-nums;}
.watch-list{scrollbar-width:none;}
.watch-list::-webkit-scrollbar{display:none;}
.empty{color:var(--ink3); font-size:12px; text-align:center; padding:22px 0;}

/* ---------- 品种详情（价格头 + 图表 + 信息 Tab + 工具条） ---------- */
#page-chart{padding:0; display:none; flex-direction:column;}
#page-chart.active{display:flex;}

/* 价格头：大字价 + 3×2 信息格 */
.cp-head{display:flex; align-items:stretch; padding:8px 12px; background:var(--bg); border-bottom:1px solid var(--line); flex:none;}
.cp-l{display:flex; flex-direction:column; justify-content:center; margin-right:14px; min-width:108px;}
.cp-name{font-size:12.5px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--ink2);}
.cp-last{font-size:24px; font-weight:700; line-height:1.15; font-variant-numeric:tabular-nums;}
.cp-chg{font-size:12px; margin-top:1px; font-variant-numeric:tabular-nums;}
.cp-grid{flex:1; display:grid; grid-template-columns:repeat(3,1fr); gap:2px 10px; align-content:center;}
.cp-grid div{display:flex; justify-content:space-between; font-size:11px;}
.cp-grid span{color:var(--ink3);}
.cp-grid b{font-weight:500; font-variant-numeric:tabular-nums; max-width:88px; white-space:nowrap; overflow:hidden;}

.period-bar{display:flex; padding:0 4px; background:var(--bg2); border-bottom:1px solid var(--line); overflow-x:auto; flex:none;}
.period-bar button{
  flex:1 0 auto; position:relative; padding:10px 10px 9px;
  font-size:13px; color:var(--ink2); background:none;
}
.period-bar button.on{color:var(--ink); font-weight:600;}
.period-bar button.on::after{
  content:''; position:absolute; left:50%; bottom:1px; transform:translateX(-50%);
  width:18px; height:2px; border-radius:2px; background:var(--accent-hi);
}
.chart-wrap{flex:1; position:relative; min-height:0;}
#chart{width:100%; height:100%; display:block; touch-action:none;}

/* ---------- 盘口侧栏（对齐通达信手机版：五档/一档 + 成交明细，可收起） ---------- */
.pk-toggle{
  position:absolute; right:8px; top:8px; z-index:6;
  display:flex; align-items:center; gap:4px;
  padding:5px 10px; border-radius:14px;
  background:rgba(27,27,30,0.88); border:1px solid var(--line);
  font-size:11px; color:var(--ink2);
}
.pk-toggle span{font-size:9px; color:var(--ink3);}
.pk-panel{
  position:absolute; right:0; top:0; bottom:0; z-index:5;
  width:140px; display:flex; flex-direction:column;
  background:rgba(17,19,20,0.94); border-left:1px solid var(--line);
  font-size:11px; font-variant-numeric:tabular-nums;
}
.pk-head{
  display:flex; align-items:center; gap:6px;
  padding:6px 8px; border-bottom:1px solid var(--line);
  background:var(--bg2); flex:none;
}
.pk-head b{flex:1; font-size:11px; font-weight:600; color:var(--ink);}
.pk-head button{font-size:10px; color:var(--ink2); padding:2px 5px; border:1px solid var(--line); border-radius:4px;}
.pk-head #pkClose{border:none; padding:2px 2px; font-size:12px;}
.pk-ladder{flex:none; padding:3px 0; border-bottom:1px solid var(--line);}
.pk-row{display:flex; align-items:center; padding:2px 8px; line-height:16px;}
.pk-row .lb{width:26px; color:var(--ink3); font-size:10px; flex:none;}
.pk-row .pv{flex:1; text-align:right; font-weight:500;}
.pk-row .vv{width:34px; text-align:right; color:var(--ink2); font-size:10px; flex:none;}
.pk-row.mid{border-top:1px solid var(--line2); border-bottom:1px solid var(--line2); margin:2px 0;}
.pk-row.mid .lb{color:var(--warn);}
.pk-th{
  display:flex; align-items:center; justify-content:space-between;
  padding:4px 8px; font-size:10px; color:var(--ink3); flex:none;
  background:var(--bg2);
}
.pk-th i{font-style:normal; color:var(--ink3); opacity:0.8;}
.pk-ticks{flex:1; overflow-y:auto; overflow-x:hidden; -webkit-overflow-scrolling:touch; padding-bottom:4px;}
.pk-trow{display:flex; align-items:baseline; padding:1px 8px; line-height:15px; gap:3px;}
.pk-trow span{white-space:nowrap; overflow:hidden;}
.pk-trow .tm{width:30px; color:var(--ink3); font-size:9px; flex:none;}
.pk-trow .tp{flex:1; text-align:right; font-weight:500;}
.pk-trow .tv{width:20px; text-align:right; font-size:10px; flex:none;}
.pk-trow .tg{width:28px; text-align:right; font-size:9px; flex:none;}
.pk-trow .to{width:18px; text-align:right; font-size:9px; color:var(--ink3); flex:none;}
.pk-empty{padding:14px 8px; text-align:center; color:var(--ink3); font-size:10px;}
.chart-tip, .indicator-tags{font-size:var(--fs-xs); color:var(--ink3); padding:5px 12px;}
.indicator-tags{display:flex; gap:10px; border-top:1px solid var(--line); padding-bottom:6px;}
.indicator-tags .muted{color:var(--ink3);}

/* 信息 Tab：命名与顺序取自 APK assets/tabconfig 国内期货分组 */
.info-tabs{
  display:flex; align-items:center; gap:16px; padding:0 12px;
  border-top:1px solid var(--line); background:var(--bg2); flex:none;
  overflow-x:auto; white-space:nowrap;
}
.info-tabs button{padding:8px 0 7px; font-size:12px; color:var(--ink2); flex:none; position:relative;}
.info-tabs button.on{color:var(--ink); font-weight:600;}
.info-tabs button.on::after{
  content:''; position:absolute; left:50%; bottom:0; transform:translateX(-50%);
  width:14px; height:2px; border-radius:2px; background:var(--accent-hi);
}

/* K 线底部工具条（结构来自 bottitemconfig.json 的 defaultCommon） */
.kline-toolbar{
  display:flex; align-items:center; background:var(--bg2); border-top:1px solid var(--line);
  padding-bottom:var(--safe-b); flex:none;
}
.kline-toolbar button{
  flex:1; padding:8px 0 7px; font-size:var(--fs-xs); color:var(--ink2);
  display:flex; flex-direction:column; align-items:center; gap:2px;
}
.kline-toolbar button i{font-size:16px; font-style:normal; line-height:1.2;}
.kline-toolbar button:active{background:var(--card2); color:var(--ink);}
/* 闪电下单：蓝色大按钮（同花顺详情页样式） */
.kline-toolbar button.flash{
  flex:1.6; margin:6px 8px 6px 12px; padding:10px 0; border-radius:9px;
  background:var(--accent-hi); color:#fff; font-size:14px; font-weight:600;
  flex-direction:row; justify-content:center; gap:0;
}
.kline-toolbar button.flash:active{opacity:.85;}

/* ---------- 交易 ---------- */
/* 盘口（一档：卖/买 + 手数） */
.pk-mode{font-size:11px; color:var(--accent-hi);}
.pk{display:grid; grid-template-columns:1fr 1fr; gap:8px;}
.pk-row{
  display:flex; align-items:baseline; gap:8px; padding:8px 10px;
  background:var(--card2); border-radius:8px; font-variant-numeric:tabular-nums;
}
.pk-t{font-size:12px; padding:1px 6px; border-radius:4px; color:#fff;}
.pk-t.sell{background:var(--down);}
.pk-t.buy{background:var(--up);}
.pk-row b{font-size:16px; flex:1; text-align:center;}
.pk-v{font-size:11px; color:var(--ink2);}
.card{background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px; margin-bottom:10px;}
.card-h{font-size:13px; font-weight:600; margin-bottom:8px; display:flex; justify-content:space-between;}
.muted{color:var(--ink3); font-weight:400; font-size:11px;}
.seg{display:flex; gap:6px; margin-bottom:8px;}
.seg button{flex:1; height:38px; border-radius:9px; background:#1e2b39; color:var(--ink2); font-size:14px;}
.seg button.on.buy{background:var(--up); color:#fff;}
.seg button.on.sell{background:var(--down); color:#fff;}
.seg.small button{height:32px; font-size:13px;}
.seg.small button.on{background:#2a3b4e; color:var(--ink);}
.row{display:flex; gap:8px;}
.field.inline{flex:1; border-radius:9px; padding:7px 10px;}
.field.inline label{font-size:10px;}
.field.inline input{font-size:16px; font-variant-numeric:tabular-nums;}
.stepper{display:flex; align-items:center; gap:4px;}
.stepper button{width:26px; height:26px; border-radius:7px; background:#243343; color:var(--ink); font-size:15px; line-height:1;}
.stepper input{flex:1; text-align:center; font-size:16px; min-width:0;}
.check{display:flex; align-items:center; gap:6px; font-size:12px; color:var(--ink2); margin:10px 0 4px;}
.check input{width:15px; height:15px; accent-color:var(--accent);}
.est{font-size:11.5px; color:var(--ink3); margin-bottom:8px; min-height:16px;}
#ordBtn{width:100%; height:46px; margin-top:2px;}
.kv{display:flex; justify-content:space-between; font-size:13px; padding:5px 0; color:var(--ink2);}
.kv b{color:var(--ink); font-variant-numeric:tabular-nums;}
.mini-list .it{display:flex; justify-content:space-between; padding:7px 0; border-bottom:1px solid var(--line); font-size:13px;}
.mini-list .it:last-child{border-bottom:none;}
.note{font-size:11.5px; color:var(--ink3); line-height:1.8; margin:0;}
.btn-ghost{width:100%; height:44px; border-radius:12px; border:1px solid var(--line); color:var(--ink2); background:transparent; font-size:14px;}

/* ---------- toast ---------- */
.toast{
  position:fixed; left:50%; bottom:88px; transform:translateX(-50%) translateY(12px);
  background:rgba(24,35,47,.96); border:1px solid var(--line); color:var(--ink);
  padding:9px 16px; border-radius:20px; font-size:12.5px; max-width:82vw;
  opacity:0; pointer-events:none; transition:.22s; z-index:99; text-align:center;
}
.toast.show{opacity:1; transform:translateX(-50%) translateY(0);}
.toast.err{border-color:#7a2b26; color:#ffb3ad;}

/* ---------- 底部工具面板（「更多」） ---------- */
.sheet-mask{
  position:fixed; inset:0; background:rgba(0,0,0,.6);
  display:flex; align-items:flex-end; z-index:60;
}
.sheet-mask[hidden]{display:none !important;}
.sheet{
  width:100%; background:var(--card); border-radius:14px 14px 0 0;
  padding:12px 14px calc(14px + var(--safe-b)); border-top:1px solid var(--line2);
}
.sheet-h{
  display:flex; justify-content:space-between; align-items:center;
  font-size:var(--fs-md); font-weight:600; margin-bottom:10px;
}
.sheet-x{font-size:var(--fs-sm); color:var(--ink2); padding:4px 6px;}
.sheet-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:8px;}
.sheet-grid button{
  padding:12px 0; background:var(--card2); border-radius:8px;
  font-size:var(--fs-sm); color:var(--ink);
}
.sheet-grid button:active{background:var(--line);}

/* ---------- 交易页（对齐同花顺期货通交易页截图） ---------- */
#page-trade{padding:0; display:none; flex-direction:column;}
#page-trade.active{display:flex;}
#page-trade{scrollbar-width:none;}
#page-trade::-webkit-scrollbar{display:none;}
.acct-strip{display:flex; align-items:baseline; padding:10px 14px 4px; gap:22px; flex:none;}
.acct-strip div{display:flex; align-items:baseline; gap:6px;}
.acct-strip span{font-size:12px; color:var(--ink2);}
.acct-strip b{font-size:15px; font-weight:600; font-variant-numeric:tabular-nums;}
.acct-strip i{font-style:normal; font-size:11px; color:var(--ink3);}
.acct-strip div:last-child{margin-left:auto;}

.mini-strip{margin:2px 12px 8px; flex:none;}
.ms-info{display:flex; gap:14px; font-size:11.5px; color:var(--ink2); margin-bottom:4px;}
.ms-info b{font-weight:500; font-variant-numeric:tabular-nums;}
.warn-c{color:var(--warn);}
#msChart{width:100%; height:32px; display:block;}

.ord-grid{display:flex; gap:10px; padding:0 12px; flex:none;}
.og-l{flex:1.35; display:flex; flex-direction:column; gap:8px; min-width:0;}
.og-code{
  border:1px solid var(--line2); border-radius:10px; height:44px;
  font-size:15px; color:var(--ink); background:var(--card);
  text-align:left; padding:0 12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.og-row{display:flex; border:1px solid var(--line2); border-radius:10px; overflow:hidden; height:44px; background:var(--card);}
.og-btn{width:38px; font-size:18px; color:var(--accent-hi); flex:none;}
.og-mid{flex:1; position:relative; display:flex; align-items:center; min-width:0;}
.og-mid input{width:100%; text-align:center; font-size:16px; font-variant-numeric:tabular-nums; padding:0 30px;}
.og-tag{position:absolute; right:5px; bottom:3px; font-size:9px; color:var(--ink3); pointer-events:none;}
.og-row > input{flex:1; text-align:center; font-size:16px; min-width:0; font-variant-numeric:tabular-nums;}

.og-r{flex:1; display:flex; flex-direction:column; gap:5px; justify-content:center; min-width:104px;}
.pk3{display:flex; align-items:center; gap:6px; font-size:13px; font-variant-numeric:tabular-nums;}
.pk3 span{width:17px; height:17px; border-radius:4px; color:#fff; font-size:11px; display:flex; align-items:center; justify-content:center; flex:none;}
.pk3 .h1{background:var(--accent);}
.pk3 .h2{background:var(--down);}
.pk3 .h3{background:var(--up);}
.pk3 b{flex:1; text-align:right; font-weight:500;}
.pk3 i{font-style:normal; font-size:11px; color:var(--ink3); width:24px; text-align:right;}

.og-calc{padding:7px 14px 0; font-size:11.5px; color:var(--ink2); flex:none;}
.og-calc b{color:var(--ink); font-weight:600;}
.og-calc .sep{display:inline-block; width:14px;}

.quick-btns{display:flex; gap:10px; padding:10px 12px 8px; flex:none;}
.qb{
  flex:1; height:52px; border-radius:10px; color:#fff;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px;
  font-size:12px;
}
.qb b{font-size:15px; font-weight:700; font-variant-numeric:tabular-nums;}
.qb.buy{background:var(--up);}
.qb.sell{background:var(--down);}
.qb.flat{background:var(--accent);}
.qb:active{opacity:.85;}

.sub-tabs{display:flex; padding:0 8px; border-bottom:1px solid var(--line); flex:none;}
.sub-tabs button{flex:1; padding:9px 0 8px; font-size:14px; color:var(--ink2); position:relative;}
.sub-tabs button.on{color:var(--ink); font-weight:600;}
.sub-tabs button.on::after{
  content:''; position:absolute; left:50%; bottom:0; transform:translateX(-50%);
  width:22px; height:3px; border-radius:2px; background:var(--accent-hi);
}
.sub-head, .srow{
  display:grid; grid-template-columns:1fr 34px 58px 50px 72px 36px;
  gap:2px; align-items:center; padding:8px 10px; font-size:12px;
}
.sub-head{color:var(--ink3); font-size:11px; border-bottom:1px solid var(--line); flex:none;}
.srow{border-bottom:1px solid var(--line); font-variant-numeric:tabular-nums;}
.srow span{white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.sub-list{flex:1; overflow-y:auto; scrollbar-width:none;}
.sub-list::-webkit-scrollbar{display:none;}
.sact{text-align:right;}
.sact button{padding:4px 10px; border-radius:6px; font-size:11px; color:#fff;}
.close-b{background:var(--accent);}
.cancel-b{background:var(--card2); color:var(--ink2) !important; border:1px solid var(--line);}

/* 确认弹层 */
.confirm-box{
  width:78%; max-width:320px; background:var(--card);
  border:1px solid var(--line2); border-radius:14px; padding:18px 16px 14px;
}
.cb-title{text-align:center; font-size:16px; font-weight:600; margin-bottom:8px;}
.cb-detail{text-align:center; font-size:13px; color:var(--ink2); margin-bottom:16px; line-height:1.6;}
.cb-btns{display:flex; gap:10px;}
.cb-btns button{flex:1; height:40px; border-radius:9px; font-size:14px;}
#cbNo{background:var(--card2); color:var(--ink2);}
#cbYes{background:var(--accent-hi); color:#fff; font-weight:600;}

/* ---------- 「我的」页菜单（对齐模拟交易管理页截图） ---------- */
.me-acct{padding:14px;}
.me-id{display:flex; align-items:center; gap:12px;}
.me-ava{
  width:44px; height:44px; border-radius:50%; background:var(--accent);
  color:#fff; font-size:19px; font-weight:700;
  display:flex; align-items:center; justify-content:center; flex:none;
}
.me-nm{font-size:17px; font-weight:700;}
.me-sub{font-size:11.5px; color:var(--ink3); margin-top:2px;}
.me-sub .up{color:var(--up);}
.me-menu{padding:0;}
.mrow{
  display:flex; align-items:center; gap:11px; width:100%;
  padding:14px 14px; font-size:15px; color:var(--ink); text-align:left;
  border-bottom:1px solid var(--line);
}
.mrow:last-child{border-bottom:none;}
.mrow:active{background:var(--card2);}
.mrow i{font-style:normal; font-size:17px; width:22px; text-align:center; flex:none;}
.mrow .ar{margin-left:auto; color:var(--ink3); font-size:18px;}
.mrow.todo{color:var(--ink2);}
.mrow .tag-new{
  font-size:9px; color:#fff; background:var(--up); border-radius:8px;
  padding:1.5px 6px; font-weight:600; letter-spacing:.5px;
}
.mrow.fb{background:var(--card); border:1px solid var(--line); border-radius:12px; margin-bottom:10px;}

/* ---------- 通用二级页 ---------- */
#subpage{
  position:fixed; inset:0; z-index:50;
  background:var(--bg); display:flex; flex-direction:column;
}
#subpage[hidden]{display:none;}
.sp-head{
  display:flex; align-items:center; padding-top:calc(10px + env(safe-area-inset-top, 0px));
  border-bottom:1px solid var(--line); flex:none; background:var(--bg);
}
.sp-head button{font-size:24px; color:var(--ink2); width:52px; padding:8px 0;}
.sp-head span{flex:1; text-align:center; font-size:16.5px; font-weight:600; color:var(--ink);}
.sp-head .sp-ph{width:52px;}
.sp-body{flex:1; overflow-y:auto; padding:12px 12px calc(18px + var(--safe-b)); scrollbar-width:none;}
.sp-body::-webkit-scrollbar{display:none;}

/* 统计卡片（账户分析） */
.stat-grid{display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:12px;}
.stat-card{background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px;}
.stat-card .st-t{font-size:11.5px; color:var(--ink3);}
.stat-card .st-v{font-size:19px; font-weight:700; margin-top:4px; font-variant-numeric:tabular-nums;}
.stat-card .st-v.up{color:var(--up);}
.stat-card .st-v.down{color:var(--down);}
.stat-card .st-s{font-size:10.5px; color:var(--ink3); margin-top:3px;}

/* 账单按日行 */
.bill-h, .bill-r{
  display:grid; grid-template-columns:86px 1fr 62px 62px;
  gap:4px; align-items:center; padding:10px 6px; font-size:12.5px;
}
.bill-h{color:var(--ink3); font-size:11px; border-bottom:1px solid var(--line);}
.bill-r{border-bottom:1px solid var(--line); font-variant-numeric:tabular-nums;}
.bill-h span:nth-child(n+3), .bill-r span:nth-child(n+3){text-align:right;}
.bill-sum{padding:10px 6px; font-size:12px; color:var(--ink2); border-bottom:1px solid var(--line2);}

/* 结算记录（账户分析页：每日 15:00 盯市） */
.stl-h, .stl-r{
  display:grid; grid-template-columns:52px 1fr 70px 58px 66px;
  gap:4px; align-items:center; padding:9px 4px; font-size:12px;
  font-variant-numeric:tabular-nums;
}
.stl-h{color:var(--ink3); font-size:10.5px; border-bottom:1px solid var(--line);}
.stl-r{border-bottom:1px solid var(--line);}
.stl-h span:nth-child(n+2), .stl-r span:nth-child(n+2){text-align:right;}

/* 银期转账 */
.tr-tabs{display:flex; background:var(--card); border-radius:10px; padding:4px; margin-bottom:14px;}
.tr-tabs button{flex:1; padding:9px 0; border-radius:8px; font-size:14px; color:var(--ink2);}
.tr-tabs button.on{background:var(--accent); color:#fff;}
.tr-amount{background:var(--card); border:1px solid var(--line2); border-radius:10px; padding:12px 14px; margin-bottom:12px;}
.tr-amount label{font-size:12px; color:var(--ink2); display:block; margin-bottom:6px;}
.tr-amount input{
  width:100%; background:none; border:none; color:var(--ink); font-size:26px;
  font-weight:700; font-family:inherit; outline:none; font-variant-numeric:tabular-nums;
}
.tr-quick{display:flex; gap:8px; margin-bottom:14px;}
.tr-quick button{flex:1; padding:8px 0; background:var(--card); border-radius:8px; font-size:12.5px; color:var(--ink2);}
.tr-quick button:active{background:var(--line);}

/* 设置行 */
.set-row{
  display:flex; align-items:center; padding:14px; gap:10px;
  border-bottom:1px solid var(--line);
}
.set-row:last-child{border-bottom:none;}
.set-row .st-l{flex:1;}
.set-row .st-n{font-size:14.5px; color:var(--ink);}
.set-row .st-d{font-size:11px; color:var(--ink3); margin-top:2px;}
.set-row input[type=number]{
  width:76px; background:var(--card2); border:1px solid var(--line2); border-radius:8px;
  color:var(--ink); font-size:15px; padding:7px 8px; text-align:center; font-family:inherit; outline:none;
}
/* 开关 */
.sw{position:relative; width:46px; height:27px; flex:none;}
.sw input{opacity:0; width:0; height:0;}
.sw i{
  position:absolute; inset:0; border-radius:14px; background:var(--line); transition:.18s;
}
.sw i::before{
  content:''; position:absolute; width:21px; height:21px; border-radius:50%;
  background:#fff; top:3px; left:3px; transition:.18s;
}
.sw input:checked + i{background:var(--accent);}
.sw input:checked + i::before{transform:translateX(19px);}

/* 意见反馈弹层 */
.fb-ta{
  width:100%; height:96px; background:var(--card2); border:1px solid var(--line2);
  border-radius:9px; color:var(--ink); font-size:13.5px; padding:10px;
  font-family:inherit; resize:none; outline:none; margin-bottom:14px;
}
.fb-ta::placeholder{color:var(--ink3);}

/* ================= 量化交易（我的页 → 量化交易） ================= */
.mrow.q{color:var(--ink);}
.mrow.q i{color:var(--accent-hi);}

/* 顶部状态卡 */
.qhero{
  background:linear-gradient(160deg,#1d2029,#1b1b1e);
  border:1px solid var(--line2); border-radius:14px; padding:13px 14px; margin-bottom:12px;
}
.qhero.live{border-color:#2f5a8f; box-shadow:0 0 0 1px rgba(70,145,238,.18) inset;}
.qh-top{display:flex; align-items:flex-start; gap:10px;}
.qh-l{flex:1; min-width:0;}
.qh-st{display:flex; align-items:center; gap:7px; font-size:16px; font-weight:700;}
.qdot{width:8px; height:8px; border-radius:50%; background:var(--ink3); display:inline-block; flex:none;}
.qhero.live .qdot{background:var(--down-hi); box-shadow:0 0 8px rgba(0,209,118,.7);}
.qh-sub{font-size:11.5px; color:var(--ink2); margin-top:5px; line-height:1.5;}
.qh-sw{
  flex:none; min-width:66px; height:34px; border-radius:9px; font-size:13.5px; font-weight:600;
  background:var(--accent-hi); color:#fff;
}
.qh-sw.stop{background:rgba(233,48,48,.16); color:#ff6b6b; border:1px solid #7a2b26;}
.qh-foot{
  display:flex; justify-content:space-between; gap:8px; margin-top:10px; padding-top:9px;
  border-top:1px solid var(--line); font-size:10.5px; color:var(--ink3);
}
.qh-err{margin-top:8px; font-size:11px; color:#ff8a80;}

/* 区块 */
.qsec{background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px; margin-bottom:12px;}
.qsec-h{
  display:flex; align-items:center; justify-content:space-between;
  font-size:14px; font-weight:600; color:var(--ink); margin-bottom:10px;
}
.qsec-h em{font-style:normal; font-size:11px; color:var(--ink3); font-weight:400; margin-left:6px;}
.qsec-b{
  font-size:12px; color:var(--accent-hi); padding:4px 8px; border-radius:7px;
  background:rgba(70,145,238,.12);
}

/* 合约卡 */
.qitem{border:1px solid var(--line); border-radius:10px; padding:10px 11px; margin-bottom:9px; background:var(--bg2);}
.qitem:last-child{margin-bottom:0;}
.qitem.on{border-color:#2f5a8f;}
.qi-hd{display:flex; align-items:center; justify-content:space-between; gap:8px;}
.qi-nm{font-size:14.5px; font-weight:600;}
.qi-nm em{font-style:normal; font-size:11px; color:var(--ink3); margin-left:6px; font-variant-numeric:tabular-nums;}
.qi-sig{display:flex; align-items:center; gap:6px; margin-top:9px; flex-wrap:wrap;}
.qp{display:flex; align-items:center; gap:4px; padding:2px 7px; border-radius:6px; background:var(--card2);}
.qp b{font-size:10.5px; color:var(--ink3); font-weight:400;}
.qp i{font-style:normal; font-size:13px; font-weight:700;}
.qp i.up{color:var(--up);} .qp i.down{color:var(--down);} .qp i.flat{color:var(--ink2);}
.qres{font-size:11px; padding:2px 8px; border-radius:6px; background:var(--card2); color:var(--ink2);}
.qres.up{background:rgba(233,48,48,.16); color:#ff6b6b;}
.qres.down{background:rgba(14,137,54,.18); color:var(--down-hi);}
.qi-meta{margin-top:8px; font-size:11.5px;}
/* 收盘价口径提示：信号取自哪几根已收线 K 线 */
.qi-cf{margin-top:6px; font-size:10.5px; color:var(--ink3); font-variant-numeric:tabular-nums;}
.qpos{font-variant-numeric:tabular-nums;}
.qi-note{margin-top:6px; font-size:11px; color:var(--ink3);}
.qi-foot{display:flex; align-items:center; gap:8px; margin-top:9px;}
.qi-lock{font-size:10.5px; color:var(--warn); flex:1;}
.qi-lock.off{color:var(--ink3);}
.qi-b{font-size:11.5px; color:var(--ink2); padding:4px 9px; border-radius:6px; background:var(--card2); margin-left:auto;}
.qi-b.rm{color:#ff8080; margin-left:0;}
.sw.sm{width:38px; height:22px;}
.sw.sm i::before{width:16px; height:16px; top:3px; left:3px;}
.sw.sm input:checked + i::before{transform:translateX(16px);}

/* 参数表单 */
.qform{margin-bottom:10px;}
.qrow{display:flex; align-items:center; gap:10px; padding:7px 0; border-bottom:1px solid var(--line);}
.qrow:last-child{border-bottom:none;}
.qrow > label{width:64px; flex:none; font-size:12.5px; color:var(--ink2);}
.qrow select, .qrow input{
  flex:1; min-width:0; height:34px; background:var(--card2); border:1px solid var(--line2);
  border-radius:8px; color:var(--ink); font-size:13px; padding:0 8px; font-family:inherit;
  outline:none; appearance:none; -webkit-appearance:none;
}
.qrow input{text-align:center;}
.q3{flex:1; display:flex; gap:6px; min-width:0;}
.q3 select{flex:1;}
.q3 input{flex:1; min-width:0;}
.q3 input::-webkit-outer-spin-button, .q3 input::-webkit-inner-spin-button{-webkit-appearance:none; margin:0;}
.qapply{width:100%; height:42px; font-size:14px;}
.q-note{padding:8px 2px 0; line-height:1.6;}

/* 日志 */
.qlog-wrap{max-height:230px; overflow-y:auto; scrollbar-width:none;}
.qlog-wrap::-webkit-scrollbar{display:none;}
.qlog{display:flex; gap:8px; padding:6px 0; border-bottom:1px solid var(--line); font-size:11.5px; line-height:1.5;}
.qlog:last-child{border-bottom:none;}
.qlog .qt{color:var(--ink3); font-variant-numeric:tabular-nums; flex:none;}
.qlog .qm{flex:1; color:var(--ink2); word-break:break-all;}
.qlog.up .qm{color:#ff8a80;}
.qlog.down .qm{color:#6fd39a;}
.qlog.err .qm{color:#ffb3ad;}

/* 回测 */
.qbt-tb{border-top:1px solid var(--line);}
.qbt-h, .qbt-r{
  display:grid; grid-template-columns:1.5fr 46px 58px 72px 58px; gap:4px;
  align-items:center; padding:8px 2px; font-size:12px; font-variant-numeric:tabular-nums;
}
.qbt-h{color:var(--ink3); font-size:10.5px; border-bottom:1px solid var(--line);}
.qbt-r{border-bottom:1px solid var(--line);}
.qbt-h span:nth-child(n+2), .qbt-r span:nth-child(n+2){text-align:right;}
.qbt-sub{margin-top:12px; font-size:11.5px; color:var(--ink3); padding-bottom:4px;}
.qbt-th, .qbt-tr{
  display:grid; grid-template-columns:22px 34px 1fr 1fr 64px; gap:4px;
  padding:6px 2px; font-size:11px; font-variant-numeric:tabular-nums;
  border-bottom:1px solid var(--line);
}
.qbt-th{color:var(--ink3); font-size:10.5px;}
.qbt-th span:nth-child(n+2), .qbt-tr span:nth-child(n+2){text-align:right;}
.qbt-tr .muted{color:var(--ink3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}

/* 添加合约面板 */
.qp-sheet{max-height:78vh; display:flex; flex-direction:column;}
.qp-search{margin-bottom:9px;}
.qp-search input{
  width:100%; height:38px; background:var(--card2); border:1px solid var(--line2);
  border-radius:9px; color:var(--ink); font-size:14px; padding:0 11px; font-family:inherit; outline:none;
}
.qp-list{flex:1; overflow-y:auto; scrollbar-width:none; min-height:120px;}
.qp-list::-webkit-scrollbar{display:none;}
.qp-row{
  display:flex; align-items:center; gap:8px; width:100%; padding:11px 8px;
  border-bottom:1px solid var(--line); text-align:left;
}
.qp-row.on{opacity:.45;}
.qp-n{flex:1; font-size:13.5px; color:var(--ink);}
.qp-n em{font-style:normal; font-size:9.5px; color:var(--accent-hi); margin-left:5px;}
.qp-c{font-size:11.5px; color:var(--ink3); font-variant-numeric:tabular-nums;}
.qp-a{font-size:13px; color:var(--accent-hi); width:42px; text-align:right;}
.qp-tip{font-size:10.5px; color:var(--ink3); padding-top:9px; text-align:center;}
