/* TurboFlow 跟单 · 视觉系统
   主题: 深色精密工具界面, 信息密度高但呼吸感好
   原则: 颜色克制, 间距成档, 等宽用于数字和日志
*/

:root{
  --bg:        #0b0d10;
  --bg-soft:   #101317;
  --panel:     #14181d;
  --panel-2:   #181d23;
  --border:    #232a32;
  --border-strong: #2f3842;
  --hover:     #1c232b;
  --fg:        #e7ecf2;
  --fg-2:      #b8c1cb;
  --mut:       #7c8794;
  --mut-2:     #5b6470;
  --grn:       #2fbf71;
  --grn-soft:  #11321f;
  --red:       #ef5350;
  --red-soft:  #321314;
  --yel:       #e3b341;
  --yel-soft:  #2f2613;
  --blu:       #5aa9ff;
  --blu-soft:  #112233;
  --accent:    #7adfd6;
  --accent-2:  #4dcfc4;
  --accent-soft:#0e2a2a;
  --ring:      0 0 0 2px rgba(122,223,214,.25);
  --shadow-1:  0 1px 0 rgba(255,255,255,.02), 0 1px 2px rgba(0,0,0,.4);
  --shadow-2:  0 8px 24px rgba(0,0,0,.45);
  --r-sm: 6px;
  --r:    8px;
  --r-lg: 12px;
  --side-w: 232px;
  --top-h:  52px;
}

*,*::before,*::after{ box-sizing:border-box; }
html,body{ height:100%; }
body{
  margin:0;
  background:var(--bg);
  color:var(--fg);
  font:13.5px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,
       "PingFang SC","Microsoft YaHei",sans-serif;
  font-feature-settings:"cv11","ss01","tnum";
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
button,input,select,textarea{ font:inherit; color:inherit; }
button{ background:none; border:0; cursor:pointer; }
a{ color:var(--accent); text-decoration:none; }
a:hover{ text-decoration:underline; }
::-webkit-scrollbar{ width:10px; height:10px; }
::-webkit-scrollbar-thumb{ background:#222a32; border-radius:6px; border:2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover{ background:#2c3640; }
::-webkit-scrollbar-track{ background:transparent; }

/* 顶栏 */
.topbar{
  position:sticky; top:0; z-index:50;
  height:var(--top-h);
  display:flex; align-items:center; gap:14px;
  padding:0 18px;
  background:linear-gradient(180deg, rgba(11,13,16,.95), rgba(11,13,16,.82));
  backdrop-filter:saturate(140%) blur(8px);
  -webkit-backdrop-filter:saturate(140%) blur(8px);
  border-bottom:1px solid var(--border);
}
.brand{ display:flex; align-items:center; gap:10px; font-weight:600; letter-spacing:.2px; }
.brand .mark{
  width:22px; height:22px; border-radius:6px;
  background:radial-gradient(circle at 30% 30%, var(--accent), #2a8a83 70%, #1a4d49);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.12), 0 0 0 1px var(--border);
}
.brand small{ color:var(--mut); font-weight:400; margin-left:4px; font-size:11.5px; }
.topbar .spacer{ flex:1; }

.kpi{
  display:flex; align-items:baseline; gap:6px;
  padding:6px 12px;
  background:var(--panel);
  border:1px solid var(--border);
  border-radius:var(--r);
}
.kpi .lab{ font-size:11px; color:var(--mut); text-transform:uppercase; letter-spacing:.5px; }
.kpi .val{ font-size:14px; font-weight:600; font-variant-numeric:tabular-nums; }
.kpi .val.pos{ color:var(--grn); }
.kpi .val.neg{ color:var(--red); }
.kpi .val.muted{ color:var(--mut); }

.status-pill{
  display:inline-flex; align-items:center; gap:6px;
  font-size:12px; padding:4px 10px; border-radius:999px;
  background:var(--panel); border:1px solid var(--border);
}
.status-pill .dot{ width:7px; height:7px; border-radius:50%; background:var(--mut); }
.status-pill .dot.on{ background:var(--grn); box-shadow:0 0 0 3px rgba(47,191,113,.15); }
.status-pill .dot.off{ background:var(--red); }
.status-pill.dry .dot{ background:var(--blu); box-shadow:0 0 0 3px rgba(90,169,255,.15); }
.status-pill.live .dot{ background:var(--grn); box-shadow:0 0 0 3px rgba(47,191,113,.15); }

/* 布局 */
.shell{
  display:grid;
  grid-template-columns:var(--side-w) 1fr;
  min-height:calc(100vh - var(--top-h));
}
@media(max-width:900px){
  .shell{ grid-template-columns:1fr; }
  .sidebar{ display:none; }
}

.sidebar{
  border-right:1px solid var(--border);
  background:var(--bg-soft);
  padding:14px 10px;
  position:sticky; top:var(--top-h);
  height:calc(100vh - var(--top-h));
  overflow:auto;
}
.nav{ display:flex; flex-direction:column; gap:2px; }
.nav .group{
  font-size:10.5px; text-transform:uppercase; letter-spacing:.8px;
  color:var(--mut-2);
  padding:14px 10px 6px;
}
.nav button{
  display:flex; align-items:center; gap:10px;
  width:100%; text-align:left;
  padding:8px 10px; border-radius:var(--r-sm);
  color:var(--fg-2); font-size:13px;
}
.nav button:hover{ background:var(--hover); color:var(--fg); }
.nav button.active{
  background:var(--panel-2);
  color:var(--fg);
  box-shadow:inset 0 0 0 1px var(--border);
}
.nav button .ic{ width:16px; height:16px; opacity:.85; flex:0 0 16px; }
.nav button .badge{
  margin-left:auto; font-size:10.5px;
  padding:1px 6px; border-radius:999px;
  background:var(--accent-soft); color:var(--accent);
}

.main{ padding:18px 22px 80px; max-width:1400px; }
.view{ display:none; }
.view.active{ display:block; }

.view-head{
  display:flex; align-items:flex-end; gap:14px;
  margin-bottom:14px; flex-wrap:wrap;
}
.view-head h2{ margin:0; font-size:18px; font-weight:600; letter-spacing:.1px; }
.view-head .desc{ color:var(--mut); font-size:12.5px; }
.view-head .spacer{ flex:1; }

/* 卡片 */
.card{
  background:var(--panel);
  border:1px solid var(--border);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-1);
}
.card.pad{ padding:16px; }
.card .card-h{
  display:flex; align-items:center; gap:8px;
  padding:12px 14px;
  border-bottom:1px solid var(--border);
}
.card .card-h h3{
  margin:0; font-size:12.5px; font-weight:600;
  color:var(--fg-2); letter-spacing:.4px; text-transform:uppercase;
}
.card .card-h .spacer{ flex:1; }
.card .card-h .small{ font-size:11.5px; color:var(--mut); }
.card .card-b{ padding:14px; }

.grid{ display:grid; gap:14px; }
.grid.cols-2{ grid-template-columns:1fr 1fr; }
.grid.cols-3{ grid-template-columns:repeat(3,1fr); }
.grid.cols-4{ grid-template-columns:repeat(4,1fr); }
@media(max-width:1100px){ .grid.cols-3,.grid.cols-4{ grid-template-columns:repeat(2,1fr); } }
@media(max-width:720px){ .grid.cols-2,.grid.cols-3,.grid.cols-4{ grid-template-columns:1fr; } }

/* 表单 */
.field{ display:flex; flex-direction:column; gap:6px; }
.field > label{ font-size:11.5px; color:var(--mut); }
.input, .select, .textarea{
  width:100%;
  background:var(--bg-soft);
  border:1px solid var(--border);
  border-radius:var(--r);
  padding:8px 10px;
  font:12.5px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color:var(--fg);
  transition:border-color .12s, box-shadow .12s, background .12s;
}
.input:focus, .select:focus, .textarea:focus{
  outline:none;
  border-color:var(--accent-2);
  box-shadow:var(--ring);
  background:#0e1216;
}
.textarea{ min-height:64px; resize:vertical; }
.select{ appearance:none; -webkit-appearance:none;
  background-image:linear-gradient(45deg, transparent 50%, var(--mut) 50%),
                     linear-gradient(135deg, var(--mut) 50%, transparent 50%);
  background-position:calc(100% - 14px) 50%, calc(100% - 9px) 50%;
  background-size:5px 5px, 5px 5px; background-repeat:no-repeat;
  padding-right:28px;
}
.field .hint{ font-size:11px; color:var(--mut); }
.field .hint.ok{ color:var(--grn); }
.field .hint.err{ color:var(--red); }
.field .hint.warn{ color:var(--yel); }

.switch{
  display:inline-flex; align-items:center; gap:8px;
  font-size:12.5px; color:var(--fg-2);
  user-select:none; cursor:pointer;
}
.switch input{ display:none; }
.switch .track{
  width:30px; height:18px; border-radius:999px;
  background:#2a323b; position:relative; transition:background .15s;
}
.switch .track::after{
  content:""; position:absolute; top:2px; left:2px;
  width:14px; height:14px; border-radius:50%;
  background:#cfd6df; transition:transform .15s;
}
.switch input:checked + .track{ background:var(--accent-2); }
.switch input:checked + .track::after{ transform:translateX(12px); background:#04201f; }

/* 按钮 */
.btn{
  display:inline-flex; align-items:center; gap:6px;
  padding:7px 12px; border-radius:var(--r);
  background:var(--panel-2); color:var(--fg);
  border:1px solid var(--border);
  font-size:12.5px; font-weight:500;
  transition:background .12s, border-color .12s, color .12s, transform .05s;
}
.btn:hover{ background:var(--hover); border-color:var(--border-strong); }
.btn:active{ transform:translateY(1px); }
.btn:focus-visible{ outline:none; box-shadow:var(--ring); }
.btn:disabled{ opacity:.45; cursor:not-allowed; }
.btn .ic{ width:14px; height:14px; }

.btn.primary{ background:var(--accent); color:#04201f; border-color:var(--accent); }
.btn.primary:hover{ background:var(--accent-2); border-color:var(--accent-2); }
.btn.danger{ background:#2a1416; color:var(--red); border-color:#3a1b1e; }
.btn.danger:hover{ background:#3a1a1d; }
.btn.ghost{ background:transparent; }
.btn.mini{ padding:3px 8px; font-size:11.5px; border-radius:5px; }
.btn.sm{  padding:5px 10px; font-size:12px; }
.btn-row{ display:flex; gap:8px; flex-wrap:wrap; }

/* 表格 */
.table{ width:100%; border-collapse:separate; border-spacing:0; font-size:12.5px; }
.table th, .table td{ padding:9px 12px; text-align:left; border-bottom:1px solid var(--border); }
.table th{
  color:var(--mut); font-weight:500; font-size:11px;
  text-transform:uppercase; letter-spacing:.5px;
  background:var(--bg-soft);
  position:sticky; top:0;
}
.table tbody tr:hover{ background:var(--hover); }
.table tbody tr:last-child td{ border-bottom:0; }
.table .num{ font-variant-numeric:tabular-nums; text-align:right; }
.table .nowrap{ white-space:nowrap; }
.table-wrap{ overflow:auto; border-radius:var(--r); border:1px solid var(--border); background:var(--panel); }
.table-empty{ padding:18px; text-align:center; color:var(--mut); font-size:12.5px; }

.t-grn{ color:var(--grn); } .t-red{ color:var(--red); } .t-yel{ color:var(--yel); }
.t-blu{ color:var(--blu); } .t-mut{ color:var(--mut); } .t-acc{ color:var(--accent); }
.t-mono{ font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; }
.pos{ color:var(--grn); } .neg{ color:var(--red); }
.flash-up{ animation:flashUp .9s ease-out; }
.flash-dn{ animation:flashDn .9s ease-out; }
@keyframes flashUp{ 0%{background:rgba(47,191,113,.18);} 100%{background:transparent;} }
@keyframes flashDn{ 0%{background:rgba(239,83,80,.18);} 100%{background:transparent;} }

/* 标签 */
.tag{
  display:inline-flex; align-items:center; gap:4px;
  padding:1px 7px; border-radius:4px; font-size:11px; font-weight:500;
  background:var(--panel-2); color:var(--fg-2);
  border:1px solid var(--border);
}
.tag.long{ background:var(--grn-soft); color:var(--grn); border-color:rgba(47,191,113,.25); }
.tag.short{ background:var(--red-soft); color:var(--red); border-color:rgba(239,83,80,.25); }
.tag.turboflow{ background:#0e1f29; color:#7ec4ff; border-color:#143046; }
.tag.hibt{ background:#1d1626; color:#c79cff; border-color:#2b1f3a; }

.st{
  display:inline-block; padding:1px 7px; border-radius:4px;
  font-size:11px; font-weight:500;
  background:var(--panel-2); color:var(--fg-2);
  border:1px solid var(--border);
}
.st.success{ background:var(--grn-soft); color:var(--grn); border-color:rgba(47,191,113,.25); }
.st.failed { background:var(--red-soft); color:var(--red); border-color:rgba(239,83,80,.25); }
.st.pending,.st.placing,.st.delaying{ background:var(--blu-soft); color:var(--blu); border-color:rgba(90,169,255,.25); }
.st.skipped,.st.cancelled{ background:#1a1d22; color:var(--mut); }

.suspect{ color:var(--red); font-weight:600; }

/* 子账号卡 */
.sub-card{
  background:var(--panel-2);
  border:1px solid var(--border);
  border-radius:var(--r);
  padding:12px 12px 10px;
  margin-bottom:10px;
}
.sub-card .top{
  display:flex; gap:10px; align-items:center; flex-wrap:wrap;
  margin-bottom:8px;
}
.sub-card .top .grow{ flex:1; min-width:120px; }
.sub-card .top input.label{ font-weight:600; }
.sub-card .meta{
  display:flex; gap:12px; flex-wrap:wrap;
  font-size:11.5px; color:var(--mut);
}
.sub-card .meta b{ color:var(--fg-2); font-weight:500; }
.sub-card .grid{
  display:grid; grid-template-columns:repeat(auto-fit, minmax(150px,1fr));
  gap:8px 12px;
  margin-top:4px;
}
.sub-card .chk{ font-size:11.5px; min-height:16px; margin-top:4px; }

/* 日志 */
.log-toolbar{
  display:flex; gap:8px; align-items:center; flex-wrap:wrap;
  padding:10px 12px; border-bottom:1px solid var(--border);
  background:var(--bg-soft); border-radius:var(--r-lg) var(--r-lg) 0 0;
}
.log-toolbar .input,.log-toolbar .select{ padding:5px 8px; font-size:12px; }
.log{
  height:380px; overflow:auto;
  background:#08090b;
  padding:10px 12px;
  font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  border-radius:0 0 var(--r-lg) var(--r-lg);
}
.log .row{ white-space:pre-wrap; padding:2px 0; }
.log .row:hover{ background:rgba(255,255,255,.02); }
.log .t{ color:var(--mut-2); margin-right:8px; }
.log .l-ok   { color:var(--grn); }
.log .l-err  { color:var(--red); }
.log .l-warn { color:var(--yel); }
.log .l-trade{ color:var(--accent); font-weight:600; }
.log .l-dry  { color:var(--blu); }
.log .l-info { color:var(--fg-2); }
.log .l-tick { color:#6e7681; }
.log .l-debug{ color:#4d5662; }
.log .logtag{
  display:inline-block; background:#181c22; color:var(--accent);
  border:1px solid var(--border);
  border-radius:3px; padding:0 5px; margin-right:5px; font-size:10.5px;
}
.log .det{ color:var(--mut); margin-left:4px; }

/* 概览 KPI */
.metric{ padding:14px 16px; }
.metric .lab{ color:var(--mut); font-size:11.5px; text-transform:uppercase; letter-spacing:.5px; }
.metric .big{ font-size:30px; font-weight:600; font-variant-numeric:tabular-nums; margin-top:4px; letter-spacing:-.5px; }
.metric .sub{ font-size:11.5px; color:var(--mut); margin-top:4px; }
.metric .big.pos{ color:var(--grn); }
.metric .big.neg{ color:var(--red); }

.banner{
  display:flex; align-items:flex-end; gap:28px; flex-wrap:wrap;
}
.banner .stat{ display:flex; flex-direction:column; gap:2px; }
.banner .stat .lab{ font-size:11px; color:var(--mut); text-transform:uppercase; letter-spacing:.5px; }
.banner .stat .v{ font-size:18px; font-weight:600; font-variant-numeric:tabular-nums; }
.banner .stat .v.pos{ color:var(--grn); }
.banner .stat .v.neg{ color:var(--red); }

/* warn box */
.warnbox{
  display:flex; align-items:center; gap:10px;
  background:var(--yel-soft);
  border:1px solid rgba(227,179,65,.25);
  color:#f0d27e;
  padding:9px 12px; border-radius:var(--r);
  font-size:12.5px;
  margin-bottom:14px;
}
.warnbox.live{
  background:var(--grn-soft);
  border-color:rgba(47,191,113,.25);
  color:#9ce0b1;
}
.warnbox b{ font-weight:600; }

/* empty 状态 */
.empty{
  text-align:center; padding:28px 12px;
  color:var(--mut); font-size:12.5px;
}

/* 通用小工具 */
.row{ display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.mt-1{ margin-top:6px; } .mt-2{ margin-top:10px; } .mt-3{ margin-top:14px; } .mt-4{ margin-top:20px; }
.mb-1{ margin-bottom:6px; } .mb-2{ margin-bottom:10px; } .mb-3{ margin-bottom:14px; }
.muted{ color:var(--mut); }
.small{ font-size:11.5px; color:var(--mut); }
.mono{ font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; }
.nowrap{ white-space:nowrap; }
.right{ text-align:right; }
.gap-1{ gap:6px; } .gap-2{ gap:10px; } .gap-3{ gap:14px; }
.between{ display:flex; justify-content:space-between; align-items:center; }

.row-enter{ animation:rowIn .25s ease-out; }
@keyframes rowIn{ from{opacity:0; transform:translateY(-2px);} to{opacity:1; transform:none;} }

/* drawer */
.drawer-mask{
  position:fixed; inset:0; background:rgba(0,0,0,.5);
  z-index:80; opacity:0; pointer-events:none; transition:opacity .18s;
}
.drawer-mask.open{ opacity:1; pointer-events:auto; }
.drawer{
  position:fixed; top:0; right:0; bottom:0;
  width:min(560px, 92vw);
  background:var(--panel);
  border-left:1px solid var(--border);
  box-shadow:var(--shadow-2);
  transform:translateX(100%); transition:transform .2s;
  z-index:81; display:flex; flex-direction:column;
}
.drawer.open{ transform:translateX(0); }
.drawer .head{
  display:flex; align-items:center; gap:8px;
  padding:12px 14px; border-bottom:1px solid var(--border);
}
.drawer .head h3{ margin:0; font-size:14px; font-weight:600; }
.drawer .body{ flex:1; overflow:auto; padding:14px; }
.drawer .foot{ padding:10px 14px; border-top:1px solid var(--border); display:flex; gap:8px; justify-content:flex-end; }

/* chips */
.chips{ display:flex; gap:6px; flex-wrap:wrap; }
.chip{
  font-size:11.5px; padding:3px 8px; border-radius:999px;
  background:var(--panel-2); color:var(--fg-2);
  border:1px solid var(--border);
  display:inline-flex; align-items:center; gap:5px;
}
.chip b{ color:var(--fg); font-weight:500; }

.section-title{
  display:flex; align-items:center; gap:8px;
  font-size:11.5px; text-transform:uppercase; letter-spacing:.6px;
  color:var(--mut); margin:6px 0 10px;
}
.section-title .bar{ flex:1; height:1px; background:var(--border); }

/* 紧凑配置网格 */
.config-grid{
  display:grid; grid-template-columns:repeat(4, 1fr); gap:10px 14px;
}
@media(max-width:900px){ .config-grid{ grid-template-columns:repeat(2,1fr); } }
@media(max-width:540px){ .config-grid{ grid-template-columns:1fr; } }
.config-grid .field{ min-width:0; }
.config-grid .input{ font-size:12px; padding:6px 8px; }

/* 引擎大开关 */
.power{
  display:flex; align-items:center; gap:10px;
  padding:8px 14px; border-radius:var(--r);
  background:var(--panel); border:1px solid var(--border);
}
.power .label{ font-size:12px; color:var(--mut); }

/* ===========================================================
   实时行情页 · 极简交易所风 (两图 + 数据栏)
   =========================================================== */
#view-realtime{
  --bg:#0b0e11;
  --panel:#181a1f;
  --panel-2:#1e2229;
  --border:#2a2e36;
  --fg:#eaecef;
  --fg-2:#b7bdc6;
  --mut:#848e9c;
  --grn:#02c076;
  --grn-soft:#0d2a1f;
  --red:#f6465d;
  --red-soft:#2a1217;
  --blu:#436bff;
  background:var(--bg);
  padding:0 0 24px;
}
#view-realtime .view-head{ padding:16px 22px 10px; margin-bottom:0; }
#view-realtime .view-head h2{ font-size:16px; font-weight:600; }
#view-realtime .view-head .desc{ font-size:12px; }

.t-amber{ color:#f0b429; }

/* ---- 实时状态 (右上) ---- */
.rt-clock{
  display:inline-flex; align-items:center; gap:6px;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:12px; color:var(--fg-2);
  padding:5px 12px; border-radius:4px;
  background:var(--panel); border:1px solid var(--border);
}
.rt-clock .pulse{
  width:6px; height:6px; border-radius:50%;
  background:var(--grn);
  animation:rtpulse 1.4s ease-out infinite;
}
@keyframes rtpulse{
  0%  { box-shadow:0 0 0 0 rgba(2,192,118,.6); }
  70% { box-shadow:0 0 0 8px rgba(2,192,118,0); }
  100%{ box-shadow:0 0 0 0 rgba(2,192,118,0); }
}

/* ---- 主体: 左两图(垂直堆叠) / 右数据栏 ---- */
.rt-main{
  display:grid;
  grid-template-columns: 1fr 320px;
  gap:10px;
  padding:0 22px;
}
@media(max-width:1100px){
  .rt-main{ grid-template-columns:1fr; }
  .rt-side{ position:static !important; }
}
@media(max-width:720px){
  .rt-main{ padding:0 12px; }
}

/* 左: 两图垂直堆叠 */
.rt-charts{
  display:flex; flex-direction:column; gap:10px;
  min-width:0;
}
.rt-chart-card{
  background:var(--panel);
  border:1px solid var(--border);
  border-radius:6px;
  overflow:hidden;
  display:flex; flex-direction:column;
}
.rt-chart-head{
  display:flex; align-items:baseline; gap:14px;
  padding:14px 18px 10px;
  flex-wrap:wrap;
}
.rt-chart-head .pair{
  font-size:18px; font-weight:600;
  display:inline-flex; align-items:center; gap:8px;
}
.rt-chart-head .pair .badge{
  font-size:10.5px; font-weight:400;
  padding:1px 6px; border-radius:3px;
  background:var(--panel-2); color:var(--mut);
  border:1px solid var(--border);
}
.rt-chart-head .price{
  font-size:22px; font-weight:600;
  font-variant-numeric:tabular-nums;
  letter-spacing:-.3px;
  transition:color .25s;
}
.rt-chart-head .price.up{   color:var(--grn); }
.rt-chart-head .price.down{ color:var(--red); }
.rt-chart-head .pct{
  font-size:13px; font-weight:500;
  font-variant-numeric:tabular-nums;
  padding:2px 8px; border-radius:3px;
}
.rt-chart-head .pct.up{   background:var(--grn-soft); color:var(--grn); }
.rt-chart-head .pct.down{ background:var(--red-soft); color:var(--red); }
.rt-chart-head .meta{
  margin-left:auto; display:flex; gap:14px;
  font-size:11.5px; color:var(--mut);
  font-variant-numeric:tabular-nums;
}
.rt-chart-head .meta b{ color:var(--fg-2); font-weight:500; }

/* 时间窗 tabs 紧贴右上 */
.rt-tabs{
  display:inline-flex; gap:2px;
  margin-left:8px;
}
.rt-tabs button{
  padding:3px 9px; font-size:11.5px; font-weight:500;
  color:var(--mut);
  background:transparent; border-radius:3px;
  border:1px solid transparent;
  transition:background .12s, color .12s, border-color .12s;
}
.rt-tabs button:hover{ color:var(--fg-2); }
.rt-tabs button.active{
  background:var(--panel-2); color:var(--fg);
  border-color:var(--border);
}

/* canvas 区域 */
.rt-canvas-wrap{
  position:relative;
  height:340px;
}
.rt-canvas{
  display:block; width:100%; height:100%;
}

/* hover tooltip */
.rt-hover{
  position:absolute; pointer-events:none;
  background:rgba(24,26,31,.97);
  border:1px solid var(--border);
  border-radius:4px;
  padding:8px 10px;
  font:11.5px ui-monospace,monospace;
  box-shadow:0 4px 14px rgba(0,0,0,.5);
  opacity:0; transition:opacity .12s;
  z-index:5; white-space:nowrap;
  line-height:1.55;
  color:var(--fg-2);
}
.rt-hover.show{ opacity:1; }
.rt-hover .t{ color:var(--mut); }
.rt-hover .v{ color:var(--fg); font-weight:600; }
.rt-hover .v.up{   color:var(--grn); }
.rt-hover .v.down{ color:var(--red); }

/* ---- 右侧: 数据栏 ---- */
.rt-side{
  display:flex; flex-direction:column; gap:10px;
  position:sticky; top:12px;
  align-self:start;
  max-height:calc(100vh - 80px);
  min-height:0;
}

/* KPI 块 (胜率/盈亏) */
.rt-data{
  background:var(--panel);
  border:1px solid var(--border);
  border-radius:6px;
  padding:18px;
}
.rt-data + .rt-data{ margin-top:0; }
.rt-data .lab{
  font-size:12px; color:var(--mut);
  text-transform:uppercase; letter-spacing:.5px;
  margin-bottom:10px;
}
.rt-data .big{
  font-size:30px; font-weight:600;
  font-variant-numeric:tabular-nums;
  letter-spacing:-.5px;
  line-height:1.1;
  transition:color .25s;
}
.rt-data .sub{
  font-size:12px; color:var(--mut);
  margin-top:6px;
  font-variant-numeric:tabular-nums;
}
.rt-data .row{
  display:flex; gap:12px;
  margin-top:8px;
  font-size:12px; color:var(--mut);
}
.rt-data .row b{ color:var(--fg-2); font-weight:500; }

/* 持仓侧栏 */
.rt-pos-card{
  background:var(--panel);
  border:1px solid var(--border);
  border-radius:6px;
  overflow:hidden;
  display:flex; flex-direction:column;
  flex:1; min-height:0;
}
.rt-pos-card .head{
  display:flex; align-items:center; gap:8px;
  padding:12px 16px;
  border-bottom:1px solid var(--border);
  font-size:12px; font-weight:500;
  color:var(--fg-2);
  text-transform:uppercase; letter-spacing:.5px;
}
.rt-pos-card .head .count{
  margin-left:auto; font-size:11px; color:var(--mut);
  font-weight:400; text-transform:none; letter-spacing:0;
}
.rt-pos-card .body{ overflow-y:auto; flex:1; min-height:0; }

.rt-pos{
  padding:10px 16px;
  border-bottom:1px solid var(--border);
  display:flex; flex-direction:column; gap:5px;
}
.rt-pos:last-child{ border-bottom:0; }
.rt-pos:hover{ background:var(--panel-2); }
.rt-pos .row1{
  display:flex; align-items:center; gap:6px;
  font-size:12.5px;
}
.rt-pos .row1 .sym{ font-weight:600; min-width:30px; }
.rt-pos .row1 .tag{
  font-size:10.5px; font-weight:500;
  padding:1px 6px; border-radius:2px;
  border:1px solid var(--border);
  background:var(--panel-2); color:var(--fg-2);
}
.rt-pos .row1 .tag.long{  background:var(--grn-soft); color:var(--grn); border-color:rgba(2,192,118,.3); }
.rt-pos .row1 .tag.short{ background:var(--red-soft); color:var(--red); border-color:rgba(246,70,93,.3); }
.rt-pos .row1 .src{
  font-size:10px; color:var(--mut);
  border:1px solid var(--border); border-radius:2px;
  padding:1px 5px;
}
.rt-pos .row1 .state{
  margin-left:auto; font-size:11px; font-weight:500;
  padding:1px 6px; border-radius:2px;
}
.rt-pos .row1 .state.win{  background:var(--grn-soft); color:var(--grn); }
.rt-pos .row1 .state.lose{ background:var(--red-soft); color:var(--red); }
.rt-pos .row1 .state.flat{ color:var(--mut); }
.rt-pos .row2{
  display:flex; align-items:center; gap:8px;
  font-size:11px; color:var(--mut);
  font-variant-numeric:tabular-nums;
}
.rt-pos .row2 .cd{
  margin-left:auto; font-family:ui-monospace,monospace;
  font-weight:500; color:var(--fg-2);
}
.rt-bar{
  height:2px; border-radius:1px;
  background:var(--border); overflow:hidden;
}
.rt-bar > i{
  display:block; height:100%;
  background:var(--mut);
  transition:width .5s linear, background .3s;
}
.rt-bar > i.win{  background:var(--grn); }
.rt-bar > i.lose{ background:var(--red); }

.rt-pos-empty{
  padding:36px 16px; text-align:center;
  color:var(--mut); font-size:12px;
}
