/* ═══ quant 页调色板令牌（【20260922】跟随主题） ═══
   本页样式表原先写死深色系（约 250 处 hex），加上 tailwind.config 的
   10 色调色板（生成 446 处工具类），浅色主题下整页就是一块深色孤岛。
   现在统一走 --q-* 令牌：深色默认 = 原值（深色渲染不变），浅色由
   html[data-theme="light"] 覆盖。改色只动下面两个块。
   另给每个令牌一份 --q-*-rgb（r g b 三元组）：Tailwind 的
   <alpha-value> 占位符吃这种写法，bg-panel/10 这类带透明度的工具类才能跟随主题。 */
:root {
  /* quant 页调色板令牌：深色默认（= 改造前各写死值） */
  --q-bg:              #0a0f17;  --q-bg-rgb: 10 15 23; /* 页面底 */
  --q-bg-deep:         #070b12;  --q-bg-deep-rgb: 7 11 18; /* 更深底 */
  --q-bg-ink:          #0d141e;  --q-bg-ink-rgb: 13 20 30; /* 输入框/浮层底 */
  --q-panel:           #0f1822;  --q-panel-rgb: 15 24 34; /* 卡片底 */
  --q-panel-2:         #0c121b;  --q-panel-2-rgb: 12 18 27; /* 次级卡片底 */
  --q-line:            #16202e;  --q-line-rgb: 22 32 46; /* 卡片描边 */
  --q-line-soft:       #1f2c3e;  --q-line-soft-rgb: 31 44 62; /* 滚动条/发丝线 */
  --q-line-2:          #28384a;  --q-line-2-rgb: 40 56 74; /* 次级描边 */
  --q-line-3:          #36465a;  --q-line-3-rgb: 54 70 90; /* 强描边 */
  --q-fg:              #f1f5f9;  --q-fg-rgb: 241 245 249; /* 主文字 */
  --q-fg-2:            #9aa1ab;  --q-fg-2-rgb: 154 161 171; /* 次级文字 */
  --q-fg-3:            #64748b;  --q-fg-3-rgb: 100 116 139; /* 弱文字 */
  --q-fg-4:            #cbd5e1;  --q-fg-4-rgb: 203 213 225; /* 稍亮次级文字 */
  --q-acc:             var(--accent); /* 主强调（绿） */
  --q-acc-2:           #a7f3d0;  --q-acc-2-rgb: 167 232 228; /* 强调渐变第二色 */
  --q-acc-ink:         #04211f;  --q-acc-ink-rgb: 4 33 31; /* 强调底上的字 */
  --q-up:              #4ade80;  --q-up-rgb: 74 222 128; /* 涨/正向 */
  --q-warn:            #fbbf24;  --q-warn-rgb: 251 191 36; /* 警示（黄） */
  --q-warn-2:          #fb923c;  --q-warn-2-rgb: 251 146 60; /* 次级警示（橙） */
  --q-danger:          #ff5b6e;  --q-danger-rgb: 255 91 110; /* 危险（红） */
  --q-danger-2:        #ef4444;  --q-danger-2-rgb: 239 68 68; /* 危险 2 */
  --q-danger-3:        #f87171;  --q-danger-3-rgb: 248 113 113; /* 危险 3 */
  --q-danger-soft:     #fca5a5;  --q-danger-soft-rgb: 252 165 165; /* 危险（浅） */
  --q-vio:             #a78bfa;  --q-vio-rgb: 167 139 250; /* 紫 */
  --q-blue:            #60a5fa;  --q-blue-rgb: 96 165 250; /* 蓝 */
  --q-pink:            #e879f9;  --q-pink-rgb: 232 121 249; /* 品红 */
  --q-pink-2:          #f472b6;  --q-pink-2-rgb: 244 114 182; /* 粉 */
  --q-sky:             #0ea5e9;  --q-sky-rgb: 14 165 233; /* 天蓝 */
  --q-sky-2:           #38bdf8;  --q-sky-2-rgb: 56 189 248; /* 天蓝 2 */
}

html[data-theme="light"] {
  /* quant 页浅色覆盖：对齐 style.css 浅色令牌体系 */
  --q-bg:              #f6f8fa;  --q-bg-rgb: 246 248 250; /* 页面底 */
  --q-bg-deep:         #eaeff5;  --q-bg-deep-rgb: 234 239 245; /* 更深底 */
  --q-bg-ink:          #e9eef4;  --q-bg-ink-rgb: 233 238 244; /* 输入框/浮层底 */
  --q-panel:           #ffffff;  --q-panel-rgb: 255 255 255; /* 卡片底 */
  --q-panel-2:         #f2f5f9;  --q-panel-2-rgb: 242 245 249; /* 次级卡片底 */
  --q-line:            #dbe2ea;  --q-line-rgb: 219 226 234; /* 卡片描边 */
  --q-line-soft:       #d5dde6;  --q-line-soft-rgb: 213 221 230; /* 滚动条/发丝线 */
  --q-line-2:          #cfd8e3;  --q-line-2-rgb: 207 216 227; /* 次级描边 */
  --q-line-3:          #c3ccd8;  --q-line-3-rgb: 195 204 216; /* 强描边 */
  --q-fg:              #1a2233;  --q-fg-rgb: 26 34 51; /* 主文字 */
  --q-fg-2:            #5b6675;  --q-fg-2-rgb: 91 102 117; /* 次级文字 */
  --q-fg-3:            #6b7785;  --q-fg-3-rgb: 107 119 133; /* 弱文字 */
  --q-fg-4:            #33404f;  --q-fg-4-rgb: 51 64 79; /* 稍亮次级文字 */
  --q-acc:             #10b981; /* 主强调（绿） */
  --q-acc-2:           var(--accent-deep);  --q-acc-2-rgb: 0 121 107; /* 强调渐变第二色 */
  --q-acc-ink:         #ffffff;  --q-acc-ink-rgb: 255 255 255; /* 强调底上的字 */
  --q-up:              #15803d;  --q-up-rgb: 21 128 61; /* 涨/正向 */
  --q-warn:            #b45309;  --q-warn-rgb: 180 83 9; /* 警示（黄） */
  --q-warn-2:          #c2410c;  --q-warn-2-rgb: 194 65 12; /* 次级警示（橙） */
  --q-danger:          #dc2626;  --q-danger-rgb: 220 38 38; /* 危险（红） */
  --q-danger-2:        #dc2626;  --q-danger-2-rgb: 220 38 38; /* 危险 2 */
  --q-danger-3:        #b91c1c;  --q-danger-3-rgb: 185 28 28; /* 危险 3 */
  --q-danger-soft:     #b91c1c;  --q-danger-soft-rgb: 185 28 28; /* 危险（浅） */
  --q-vio:             #6d28d9;  --q-vio-rgb: 109 40 217; /* 紫 */
  --q-blue:            #1d4ed8;  --q-blue-rgb: 29 78 216; /* 蓝 */
  --q-pink:            #a21caf;  --q-pink-rgb: 162 28 175; /* 品红 */
  --q-pink-2:          #be185d;  --q-pink-2-rgb: 190 24 93; /* 粉 */
  --q-sky:             #0369a1;  --q-sky-rgb: 3 105 161; /* 天蓝 */
  --q-sky-2:           #0284c7;  --q-sky-2-rgb: 2 132 199; /* 天蓝 2 */
}

  body { font-family: -apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif; }
  /* 按需求隐藏「模拟盘」(Paper Trading) 模块入口：侧栏项 + 机会卡「加入模拟盘」按钮。
     仅隐藏可点入口，底层 JS/接口不删，避免牵动 5000 行逻辑与事件绑定。 */
  #nav-paper, .opp-paper-btn { display: none !important; }
  /* 统一滚动条（全站一致：暗色细条） */
  ::-webkit-scrollbar { width:6px; height:6px; }
  ::-webkit-scrollbar-track { background:transparent; }
  ::-webkit-scrollbar-thumb { background:var(--q-line-soft); border-radius:3px; }
  ::-webkit-scrollbar-thumb:hover { background:var(--q-line-2); }
  .num { font-family: Consolas,"JetBrains Mono",monospace; font-variant-numeric:tabular-nums; }
  .live-dot { width:8px; height:8px; border-radius:50%; background:var(--q-acc); box-shadow:0 0 6px var(--q-acc); animation:pulse 2s infinite; }
  @keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.4} }
  .log-box::-webkit-scrollbar { width:6px; }
  .log-box::-webkit-scrollbar-thumb { background:var(--q-line-soft); border-radius:3px; }  /* 左侧导航 */
  /* 【2026-09-18】左侧选择栏规格统一：与「信号台」/pages/signals-hub.html 的 .hub-nav 逐值对齐
     （宽 222px｜高 calc(100vh - 57px)｜内边距 16px 10px｜条目 46px = 11px 12px + 13.5px/1.5 + 22px 图标
       ｜图标盒 22px、svg 14px｜条目间距 4px｜容器内部滚动 overflow-y:auto）。
     仅对齐几何与排版；配色沿用本页既有（.on 描边/辉光、border-right 色）未改。 */
  /* 【20260923 用户要求】左侧栏背景与「信号台」.hub-nav 统一为纯黑（原为透明 → 透出 --q-bg #14161b 灰）。
     【20261002d 恢复】曾误改为横向标签条，按用户指令恢复原左侧栏。 */
  .side-nav { width:222px; flex:0 0 222px; background:var(--bg); border-right:1px solid rgba(125,165,215,.14); padding:16px 10px; position:sticky; top:57px; align-self:flex-start; height:calc(100vh - 57px); overflow-y:auto; }
  .nav-page { display:flex; align-items:center; gap:11px; font-size:13px; color:var(--q-fg-2); padding:11px 12px;
              cursor:pointer; border-radius:11px; position:relative; transition:.2s; margin-bottom:4px;
              border:1px solid transparent; font-weight:500; }
  .nav-page:hover { color:var(--q-fg); background:linear-gradient(135deg, rgba(var(--accent-rgb),.08), rgba(var(--accent-rgb),.02)); border-color:rgba(var(--accent-rgb),.2); }
  .nav-page:active { transform:scale(.97); }
  .nav-page.on { color:var(--q-acc); background:linear-gradient(135deg, rgba(var(--accent-rgb),.16), rgba(var(--accent-rgb),.04));
                 border-color:rgba(var(--accent-rgb),.35); box-shadow:0 0 14px rgba(var(--accent-rgb),.12), inset 0 0 18px rgba(var(--accent-rgb),.05); }
  .nav-page.on::before { content:""; position:absolute; left:-10px; top:22%; bottom:22%; width:3px;
                         background:linear-gradient(180deg,var(--q-acc),var(--q-sky)); border-radius:2px; box-shadow:0 0 8px var(--q-acc); }
  .nav-page .np-ico { width:22px; height:22px; border-radius:6px; display:flex; align-items:center; justify-content:center;
                      flex:none; transition:.2s; }
  .nav-page .np-ico svg { width:14px; height:14px; }
  .nav-page:hover .np-ico { background:rgba(var(--accent-rgb),.12); }
  .nav-page.on .np-ico { background:rgba(var(--accent-rgb),.2); color:var(--q-acc); }
  /* 【2026-09-18 已撤回】曾把内容宽度收成 760px → 现为满屏（max-width:none）。原注释：
     （只作用于本页主内容容器 #app main；不动 web/core/style.css 全局定义） */
  #app main { max-width:none; }
  .view { display:none; }
  /* 订阅透明锁：半透明遮罩盖在内容上，不拦截顶栏/侧边导航，可继续浏览其他页面 */
  .quant-lock-mask { position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
    background:rgba(7,11,18,.6); backdrop-filter:blur(2px); z-index:40; }
  .quant-lock-inner { text-align:center; max-width:420px; padding:34px 40px; border-radius:18px;
    background:rgba(15,24,34,.92); border:1px solid rgba(var(--accent-rgb),.35); box-shadow:0 16px 48px rgba(0,0,0,.5); }
  .quant-lock-icon { color:var(--q-acc); margin-bottom:12px; }
  .quant-lock-title { font-size:16px; font-weight:800; color:var(--q-fg); margin-bottom:8px; }
  .quant-lock-desc { font-size:13px; color:var(--q-fg-2); line-height:1.6; margin-bottom:20px; }
  .quant-lock-btn { background:linear-gradient(90deg,var(--q-acc),var(--q-acc-2)); color:var(--q-acc-ink); border:none;
    border-radius:10px; padding:11px 34px; font-size:14px; font-weight:800; cursor:pointer; transition:.15s; }
  .quant-lock-btn:hover { filter:brightness(1.08); }
  .view.on { display:block; }
  /* 【2026-09-18 v3】三页统一底边（自选监控 / 套利模型 / 借贷监控）
     做法：三个视图作为「弹性列容器」，容器高度由 JS fitViews() 按同一套算法给值
     （= 视口高 − 该视图内容区顶 − 16），因此三页底边严格落在同一条水平线上。
     借贷监控不再用 calc((100vh - 260px)/2) 这个错常量（260 少算了顶栏+上边距，
     底部会停在半空），它的「底部位置」改由与另两页一致的算法算出并回填到自己身上。 */
  .view.flex-col.on { display:flex; flex-direction:column; }
  #view-watch, #view-addr, #view-arb, #view-lend { height:auto; overflow-y:auto; overflow-x:hidden; }
  #view-watch.on, #view-arb.on, #view-lend.on { display:flex; flex-direction:column; }
  /* CSS 兜底高度：JS fitViews() 跑之前的首帧、或脚本异常时仍保持三页同底边。
     105 = 顶栏 57 + main 上内边距 16 + 块间距 16 + 下内边距 16；
     自选监控再多一块顶部指标卡（约 92）+ 间距 16。 */
  #view-arb.on, #view-lend.on { height:calc(100vh - 105px); }
  #view-watch.on { height:calc(100vh - 213px); }
  /* 自选监控：成绩单固定 312px，下面三列填满剩余高度 */
  #view-watch > .desk-scorecard { flex:none; }
  #watch-grid { flex:1 1 0; min-height:0; }
  /* 套利模型：单网格填满；中列两卡按原 460:340 比例分两行，左右跨行卡自动等高 */
  #view-arb > .grid { flex:1 1 0; min-height:0; grid-template-rows:1.35fr 1fr; }
  #view-arb > .grid > * { min-height:0; }
  /* 借贷监控：两排网格各占一半（中间 12px 为 mt-3），五张卡随行拉满 */
  #view-lend > .grid { flex:1 1 0; min-height:0; }
  #view-lend > .grid > * { min-height:0; }
  #lend-cefi-card, #lend-defi-card { display:flex; flex-direction:column; }
  #lend-ref-cefi, #lend-ref-defi { flex:1; min-height:0; overflow-y:auto; }
  /* 窄屏（<1280）三列堆叠：交回内容高度，不做拉伸 */
  @media (max-width:1279px) {
    #view-watch.on, #view-arb.on, #view-lend.on { display:block; height:auto; }
    #view-watch > .desk-scorecard { flex:none; }
    #watch-grid, #view-arb > .grid, #view-lend > .grid { flex:none; height:auto; min-height:0; grid-template-rows:none; }
    #view-arb > .grid > *, #view-lend > .grid > * { min-height:0; height:auto; }
    #lend-ref-cefi, #lend-ref-defi { flex:none; overflow-y:visible; }
  }
  #view-watch::-webkit-scrollbar, #view-arb::-webkit-scrollbar, #view-lend::-webkit-scrollbar, #view-addr::-webkit-scrollbar { width:5px; }
  #view-watch::-webkit-scrollbar-thumb, #view-arb::-webkit-scrollbar-thumb, #view-lend::-webkit-scrollbar-thumb, #view-addr::-webkit-scrollbar-thumb { background:var(--q-line-soft); border-radius:3px; }
  .meme-row { padding:10px 2px; border-bottom:1px solid var(--q-panel); }
  .meme-row:last-child { border-bottom:none; }
  .meme-tag { display:inline-flex; align-items:center; gap:5px; font-size:10px; font-weight:700;
              padding:2px 9px; border-radius:999px; letter-spacing:.3px; }
  .meme-tag.breakout { background:rgba(74,222,128,.13); color:var(--q-acc); border:1px solid rgba(74,222,128,.3); }
  .meme-tag.quiet { background:rgba(251,191,36,.12); color:var(--q-warn); border:1px solid rgba(251,191,36,.3); }
  .meme-tag.dump { background:rgba(248,113,113,.13); color:var(--q-danger); border:1px solid rgba(248,113,113,.3); }
  .meme-tag.rh { background:rgba(232,121,249,.13); color:var(--q-pink); border:1px solid rgba(232,121,249,.35); }
  .meme-tag.heat { background:rgba(251,191,36,.13); color:var(--q-warn); border:1px solid rgba(251,191,36,.35); }
  .meme-src { font-size:9px; padding:1px 7px; border-radius:999px; border:1px solid;
              font-weight:700; letter-spacing:.3px; flex:none; }
/* 【20261007b】.tbl 规范已上收至 style.css 单一来源（全站表格统一 P0），
   此处不再重复定义 —— 三处拷贝各自漂移（本文件 10.5/11.5px、addr/meme 页内
   10.5/11.5px 硬编码）正是"各页表格长得不一样"的根源。 */

  /* 决策台：左侧交易对列表 */
  .desk-symlist { width:200px; flex:none; background:var(--bg); border:1px solid var(--q-line); border-radius:12px;
                  display:flex; flex-direction:column; overflow:hidden; position:sticky; top:70px; max-height:calc(100vh - 90px); }
  /* 自选监控页：交易对模块（原决策分析左侧列表）纵向嵌入左列 */
  .watch-symlist { width:100% !important; position:static !important; top:auto !important; max-height:none !important; height:100%; }
  .watch-symlist .dsl-body { flex:1; overflow-y:auto; }
  /* 交易对栏表头（自选交易对 + 决策分析弹窗按钮） */
  .dsl-head-bar { display:flex; align-items:center; gap:8px; padding:10px 12px; border-bottom:1px solid var(--q-panel);
                  font-size:12px; font-weight:700; color:var(--q-fg); flex:none; }
  .dsl-analyze-btn { margin-left:auto; display:flex; align-items:center; gap:4px; font-size:10px; padding:3px 10px;
                     border-radius:7px; border:1px solid rgba(var(--accent-rgb),.45); background:transparent; color:var(--q-acc);
                     cursor:pointer; font-weight:600; transition:.15s; }
  .dsl-analyze-btn:hover { background:rgba(var(--accent-rgb),.1); }
  /* 决策分析弹窗：完整控制台（策略/因子/回测/路径/风控/结论），弹窗内下拉条阅读 */
  .modal-desk-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
  .modal-desk-grid .dcell { display:flex; min-width:0; }
  .modal-desk-grid .dcell .sub-panel { flex:1; display:flex; flex-direction:column; padding:14px 18px; min-width:0;
               overflow:hidden; background:var(--q-panel); border:1px solid var(--q-line); border-radius:10px; min-height:210px; }
  .modal-desk-grid .dcell .sub-panel > b { flex:none; font-size:13px; color:var(--q-acc); }
  .modal-desk-grid #desk-factors .frow { flex:1; display:flex; align-items:center; gap:10px; margin:0; min-height:0; }
  .modal-desk-grid #desk-backtest canvas { margin-top:auto; max-height:150px; }
  .modal-desk-grid #desk-backtest .desk-metrics { gap:8px; margin-top:20px; flex-wrap:nowrap; }
  .modal-desk-grid #desk-backtest .dm { padding:6px 12px; min-width:0; flex:1; }
  .modal-desk-grid #desk-path .vd-path { flex:1; display:flex; flex-direction:column; justify-content:flex-start;
        margin-top:20px; font-size:13px; line-height:2.2; word-break:break-word; overflow-wrap:anywhere; color:var(--q-fg); min-height:0; }
  .modal-desk-grid #desk-path .vd-path > div { margin-bottom:14px; }
  .modal-desk-grid #desk-risk .risk-note { margin:20px 0 8px; padding:8px 10px; font-size:12px; line-height:1.7; }
  .modal-desk-grid #desk-risk .frow { margin:24px 0 8px; }
  .modal-desk-grid #desk-risk .pos-note { margin:auto auto 20px; width:55%; text-align:center; padding:8px 10px;
        font-size:13px; font-weight:800; color:var(--q-acc); border:1px dashed rgba(74,222,128,.4);
        border-radius:8px; background:rgba(74,222,128,.06); }
  /* 决策结论卡（控制台一部分，弹窗内置于风控下方） */
  #desk-verdict-wrap { flex:none; min-height:96px; display:flex; flex-direction:column;
        background:var(--q-panel); border:1px solid var(--q-line); border-radius:10px; padding:10px 16px; margin-top:12px; }
  #desk-verdict-wrap .vd-head { flex:none; display:flex; align-items:center; gap:8px; margin-bottom:4px; }
  #desk-verdict-wrap .vd-head b { font-size:12px; color:var(--q-acc); }
  #desk-verdict-wrap .vd-head .tag { font-size:9px; padding:1.5px 8px; border-radius:999px;
        background:var(--q-bg); color:var(--q-fg-3); border:1px solid var(--q-line); }
  #desk-verdict-wrap #desk-verdict { flex:1; display:flex; align-items:center; min-height:0; }
  /* HYPE/Meme 监控 tab 切换（与决策台 Funding/Spread 一致） */
  .hm-switch { display:flex; background:var(--q-bg-deep); border:1px solid var(--q-line); border-radius:9px; padding:2px; }
  .hm-sw-item { font-size:11px; padding:4px 12px; border-radius:7px; border:none; background:transparent;
                color:var(--q-fg-2); cursor:pointer; font-weight:600; transition:.15s; }
  .hm-sw-item:hover { color:var(--q-fg); }
  .hm-sw-item.on { background:var(--q-acc); color:var(--q-acc-ink); }
  /* 模块放大按钮（点击弹窗缩放查看，内容同步变大） */
  .zbtn { flex:none; width:22px; height:22px; border-radius:6px; border:1px solid var(--q-line); background:var(--q-bg);
          color:var(--q-fg-2); cursor:pointer; display:inline-flex; align-items:center; justify-content:center;
          font-size:11px; line-height:1; transition:.15s; padding:0; }
  .zbtn:hover { color:var(--q-fg); border-color:var(--q-acc); background:var(--q-panel); }
  /* 地址监控小块（5 列 · 加高 · 大字 · 带 logo） */
  .addr-cell { cursor:pointer; border:1px solid var(--q-line); border-radius:12px; padding:10px 11px; background:var(--q-bg);
               transition:border-color .15s, transform .15s; display:flex; flex-direction:column; min-height:170px; }
  .addr-cell:hover { border-color:var(--q-pink); transform:translateY(-1px); }
  .addr-flash { animation: addrFlash 2.5s ease; }
  @keyframes addrFlash { 0% { border-color:var(--q-pink); background:rgba(232,121,249,.14); } 100% { border-color:var(--q-line); background:var(--q-bg); } }
  /* 决策台：因子卡迁出后，回测独占第一行 */
  .desk-grid #desk-backtest { grid-column:1 / -1; }
  /* 套利信号分类筛选 chips（与信号台一致） */
  .cat-chips { display:flex; gap:6px; padding:8px 12px; border-bottom:1px solid var(--q-line); flex:none; flex-wrap:wrap; }
  .cat-chip { font-size:11px; padding:3px 12px; border-radius:999px; border:1px solid var(--q-line); color:var(--q-fg-2);
              background:transparent; cursor:pointer; transition:.15s; font-weight:600; }
  .cat-chip:hover { border-color:var(--q-acc); color:var(--q-fg); }
  .cat-chip.on { color:var(--q-acc-ink); background:var(--q-acc); border-color:var(--q-acc); font-weight:700; }
  .dsl-head { display:flex; align-items:center; gap:8px; padding:11px 14px; border-bottom:1px solid var(--q-panel);
              font-size:12px; font-weight:700; color:var(--q-fg); flex:none; }
  .dsl-search { display:flex; align-items:center; gap:8px; flex:none; padding:10px; border-bottom:1px solid var(--q-panel); }
  .dsl-search input { flex:1; min-width:0; padding:8px 12px; background:var(--q-bg-deep); color:var(--q-fg); border:1px solid var(--q-line);
                      border-radius:9px; font-size:12px; outline:none; transition:.15s; }
  .dsl-search input:focus { border-color:rgba(var(--accent-rgb),.5); box-shadow:0 0 0 3px rgba(var(--accent-rgb),.08); }
  .dsl-search input::placeholder { color:var(--q-line-3); }
  .dsl-cnt { font-size:10px; color:var(--q-fg-2); font-family:Consolas,monospace; background:var(--q-panel); border-radius:999px; padding:1px 8px; }
  .dsl-body { flex:1; overflow-y:auto; padding:8px; }
  .dsl-body::-webkit-scrollbar { width:5px; }
  .dsl-body::-webkit-scrollbar-thumb { background:var(--q-line-soft); border-radius:3px; }
  .dsl-item { display:flex; align-items:center; gap:8px; padding:8px 9px; border-radius:8px; cursor:pointer;
              transition:.12s; border:1px solid transparent; margin-bottom:3px; }
  .dsl-item:hover { background:rgba(var(--accent-rgb),.06); border-color:rgba(var(--accent-rgb),.15); }
  .dsl-item.on { background:linear-gradient(135deg, rgba(var(--accent-rgb),.22), rgba(var(--accent-rgb),.08));
                 border-color:rgba(var(--accent-rgb),.5); box-shadow:0 0 10px rgba(var(--accent-rgb),.1); }
  .dsl-item.on .dsl-sym { color:var(--q-acc); font-weight:700; }
  /* 自选色块（绿色方块，与前页添加自选一致） */
  .dsl-fav { flex:none; width:16px; height:16px; border-radius:5px; border:1.5px solid var(--q-line-2);
             cursor:pointer; transition:.15s; display:flex; align-items:center; justify-content:center; }
  .dsl-fav:hover { border-color:var(--q-acc); transform:scale(1.15); }
  .dsl-fav.fav { background:var(--q-acc); border-color:var(--q-acc); box-shadow:0 0 6px rgba(var(--accent-rgb),.5); }
  .dsl-sym { flex:1; font-size:11px; font-weight:600; color:var(--q-fg-4); font-family:Consolas,monospace; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .dsl-empty { color:var(--q-fg-3); font-size:11px; text-align:center; padding:20px 10px; }
  /* AI 分析 */
  .ai-overview { font-size:12px; color:var(--q-fg); line-height:1.7; padding:8px 12px; background:rgba(var(--accent-rgb),.06);
                 border:1px solid rgba(var(--accent-rgb),.2); border-radius:9px; margin-bottom:8px; }
  .ai-sec-t { font-size:11px; color:var(--q-acc); font-weight:700; margin:10px 0 4px; display:flex; align-items:center; gap:6px; }
  .ai-sec-t::before { content:""; width:4px; height:12px; background:linear-gradient(180deg,var(--q-acc),var(--q-sky)); border-radius:2px; }
  .ai-list { margin:0; padding-left:18px; font-size:12px; color:var(--q-fg-4); line-height:1.8; }
  .ai-adv { font-size:12px; color:var(--q-fg-4); line-height:1.9; background:var(--q-panel); border:1px solid var(--q-line); border-radius:9px; padding:8px 12px; }
  .ai-adv b { color:var(--q-warn); font-weight:600; }
  .ai-pair { display:inline-block; font-size:10px; font-family:Consolas,monospace; color:var(--q-acc); background:rgba(var(--accent-rgb),.08);
             border:1px solid rgba(var(--accent-rgb),.3); border-radius:6px; padding:1px 7px; margin:1px 3px 1px 0; }
  .ai-line { font-size:12px; color:var(--q-fg-4); line-height:1.8; }
  .ai-risk { color:var(--q-danger-soft); }
  .ai-concl { font-size:12px; color:var(--q-acc); font-weight:600; line-height:1.7; padding:8px 12px; background:rgba(74,222,128,.06);
              border:1px solid rgba(74,222,128,.2); border-radius:9px; }
  /* 二元机会（价值面/套利面） */
  .ai-modes { display:flex; flex-direction:column; gap:6px; }
  .ai-mode { font-size:12px; line-height:1.7; padding:7px 10px; border-radius:8px; }
  .ai-mode b { display:block; font-size:11px; margin-bottom:2px; letter-spacing:.5px; }
  .ai-mode.mortal { color:var(--q-acc); background:rgba(var(--accent-rgb),.07); border:1px solid rgba(var(--accent-rgb),.25); }
  .ai-mode.mortal b { color:var(--q-acc); }
  .ai-mode.cheater { color:var(--q-warn); background:rgba(251,191,36,.07); border:1px solid rgba(251,191,36,.25); }
  .ai-mode.cheater b { color:var(--q-warn); }
  /* AI 滚动条与网站一致（暗色细条，同交易对列表） */
  #ai-box::-webkit-scrollbar { width:5px; }
  #ai-box::-webkit-scrollbar-thumb { background:var(--q-line-soft); border-radius:3px; }
  #ai-box::-webkit-scrollbar-thumb:hover { background:var(--q-line-2); }
  #ai-box::-webkit-scrollbar-track { background:transparent; }

  /* 决策工作台 */
  .desk-wrap { background:var(--q-bg); border:1px solid var(--q-line); border-radius:12px; padding:12px 12px 0; }
  .desk-top { display:flex; align-items:stretch; gap:12px; margin-bottom:10px; }
  .desk-head { flex:1; min-width:0; display:flex; align-items:center; gap:12px;
               justify-content:space-between; background:var(--q-panel); border:1px solid var(--q-line);
               border-radius:12px; padding:9px 16px; }
  .desk-head .dt { font-size:16px; font-weight:800; flex:none; color:var(--q-fg); font-family:Consolas,monospace; }
  /* 策略切换开关（类似自选/全局） */
  .desk-switch { display:flex; background:var(--q-bg-deep); border:1px solid var(--q-line); border-radius:9px; padding:2px; margin-left:auto; }
  .desk-sw-item { font-size:11px; padding:5px 14px; border-radius:7px; border:none; background:transparent;
                  color:var(--q-fg-2); cursor:pointer; font-weight:600; transition:.15s; }
  .desk-sw-item:hover { color:var(--q-fg); }
  .desk-sw-item.on { background:var(--q-acc); color:var(--q-acc-ink); }
  /* 四框 2×2 网格（固定规格：第一排因子/回测高，第二排路径/风控矮；位置固定不随窗口缩放） */
  .desk-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; grid-template-rows:340px 330px; }
  .desk-grid .dcell { min-width:0; display:flex; }
  .desk-grid .dcell .sub-panel { flex:1; display:flex; flex-direction:column; padding:14px 18px; height:100%;
               min-width:0; overflow:hidden; background:var(--q-panel); border:1px solid var(--q-line); border-radius:10px; }
  .desk-grid .sub-panel > b { flex:none; font-size:13px; color:var(--q-acc); }
  /* 因子：分数+等级独立一行（desk-score），5 因子条弹性拉伸填满 */
  .desk-grid #desk-factors .frow { flex:1; display:flex; align-items:center; gap:10px; margin:0; min-height:0; }
  /* 回测：指标区顶部，净值曲线贴底 */
  .desk-grid #desk-backtest canvas { margin-top:auto; max-height:180px; }
  .desk-grid #desk-backtest .desk-metrics { gap:8px; margin-top:24px; flex-wrap:nowrap; }
  .desk-grid #desk-backtest .dm { padding:6px 12px; min-width:0; flex:1; }
  .desk-grid #desk-backtest .bt-sub { font-size:10px; margin:6px 0 !important; }
  /* 执行路径：四句紧密结合，下移与回测一致，字号放大，行距两倍 */
  .desk-grid #desk-path .vd-path { flex:1; display:flex; flex-direction:column; justify-content:flex-start;
        margin-top:24px; font-size:13px; line-height:2.4; word-break:break-word; overflow-wrap:anywhere; color:var(--q-fg); min-height:0; }
  .desk-grid #desk-path .vd-path > div { margin-bottom:16px; }
  /* 风控：费率反转（上）→ 建议仓位（中）→ 建议分批（底部贴底） */
  .desk-grid #desk-risk .risk-note { margin:24px 0 8px; padding:8px 10px; font-size:12px; line-height:1.7; }
  .desk-grid #desk-risk .frow { margin:32px 0 8px; }
  .desk-grid #desk-risk .pos-note { margin:auto auto 24px; width:55%; text-align:center; padding:8px 10px;
        font-size:13px; font-weight:800; color:var(--q-acc); border:1px dashed rgba(74,222,128,.4);
        border-radius:8px; background:rgba(74,222,128,.06); }
  .desk-score { display:flex; align-items:center; gap:10px; margin:8px 0; flex:none; }
  .desk-score .big { font-size:24px; font-weight:900; }
  .desk-score .lvl { font-size:11px; padding:2px 9px; border-radius:999px; border:1px solid currentColor; }
  .frow { display:flex; align-items:center; gap:8px; margin:3px 0; font-size:11px; }
  .frow span { flex:0 0 110px; color:var(--q-fg-2); }
  .frow b { flex:0 0 56px; text-align:right; font-weight:700; font-family:Consolas,monospace; }
  .fbar { flex:1; height:6px; background:var(--q-bg); border-radius:4px; overflow:hidden; }
  .fbar i { display:block; height:100%; border-radius:4px; background:var(--q-acc); }
  .risk-note { font-size:12px; color:var(--q-warn); background:rgba(251,191,36,.07); border:1px solid rgba(251,191,36,.25);
               border-radius:8px; padding:8px 10px; display:flex; align-items:flex-start; gap:6px; }
  .risk-note svg { flex:none; margin-top:2px; }
  .desk-metrics { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
  .dm { background:var(--q-bg); border:1px solid var(--q-line); border-radius:8px; padding:6px 12px; min-width:70px; text-align:center; }
  .dm span { display:block; font-size:10px; color:var(--q-fg-2); }
  .dm b { font-size:14px; font-weight:800; font-family:Consolas,monospace; }
  .dempty { flex:1; display:flex; align-items:center; justify-content:center; color:var(--q-fg-2); font-size:12px; }
  .hint { color:var(--q-fg-2); font-size:12px; }
  /* 观望判定卡（右侧） */
  #desk-verdict .verdict { display:flex; align-items:center; gap:12px; padding:10px 14px;
                           border-radius:10px; border:1px solid var(--q-line); position:relative; }
  .verdict.enter { border-color:rgba(74,222,128,.45); background:rgba(74,222,128,.07); }
  .verdict.watch { border-color:rgba(251,191,36,.5); background:rgba(251,191,36,.06); }
  .verdict.hold { border-color:rgba(138,150,160,.4); background:rgba(138,150,160,.06); }
  .vd-icon { flex:none; }
  .vd-right { flex:1; display:flex; flex-direction:column; gap:3px; }
  .vd-right .vd-top { font-size:15px; font-weight:900; color:var(--q-fg); }
  .vd-right .vd-reason { font-size:11px; line-height:1.5; margin:0; color:var(--q-fg-2); }
  /* 信号远期成绩单 */
  .desk-scorecard { background:var(--q-panel); border:1px solid var(--q-line); border-radius:12px; padding:10px 16px;
                    height:312px; overflow-y:auto; }   /* 固定高度：拉高容纳两排数据卡，超出内部滚动 */
  .desk-scorecard::-webkit-scrollbar { width:5px; }
  .desk-scorecard::-webkit-scrollbar-thumb { background:var(--q-line-soft); border-radius:3px; }
  .desk-scorecard .sc-head { display:flex; justify-content:space-between; align-items:center; gap:10px; }
  .desk-scorecard .sc-head > b { font-size:13px; color:var(--q-acc); }
  .desk-scorecard .sc-head-r { display:flex; align-items:center; gap:8px; flex:none; }
  .desk-scorecard .sc-switch { display:flex; background:var(--q-bg-deep); border:1px solid var(--q-line); border-radius:8px; padding:2px; }
  .desk-scorecard .sc-sw-item { font-size:11px; padding:3px 12px; border-radius:6px; border:none; background:transparent;
                                color:var(--q-fg-2); cursor:pointer; font-weight:600; transition:.15s; }
  .desk-scorecard .sc-sw-item:hover { color:var(--q-fg); }
  .desk-scorecard .sc-sw-item.on { background:var(--q-acc); color:var(--q-acc-ink); }
  .desk-scorecard .sc-add-btn { display:flex; align-items:center; gap:5px; font-size:11px; padding:4px 12px;
                                border-radius:8px; border:1px solid rgba(var(--accent-rgb),.45); background:transparent;
                                color:var(--q-acc); cursor:pointer; font-weight:600; transition:.15s; }
  .desk-scorecard .sc-add-btn:hover { background:rgba(var(--accent-rgb),.1); }
  .desk-scorecard .sc-info-btn { flex:none; display:flex; align-items:center; gap:5px; background:var(--q-bg);
                                 border:1px solid var(--q-line); color:var(--q-fg-2); border-radius:8px; padding:4px 11px;
                                 font-size:11px; cursor:pointer; font-weight:600; }
  .desk-scorecard .sc-info-btn:hover { color:var(--q-fg); border-color:var(--q-acc); }
  .desk-scorecard .sc-track { display:flex; justify-content:space-between; align-items:center; gap:10px;
                              font-size:11px; color:var(--q-fg-2); margin-top:1px; }
  .desk-scorecard .sc-track .win { text-align:right; }
  .desk-scorecard .sc-row { display:grid; gap:10px; margin-top:8px; }
  .desk-scorecard .sc-col { min-width:0; background:var(--q-bg); border:1px solid var(--q-line);
                            border-radius:10px; padding:8px 12px; transition:.12s; }
  .desk-scorecard .sc-col:hover { border-color:var(--q-line-2); }
  .desk-scorecard .sc-col h5 { font-size:11px; font-weight:800; margin-bottom:6px; color:var(--q-fg);
                               display:flex; justify-content:space-between; align-items:center; gap:8px;
                               padding-bottom:5px; border-bottom:1px solid var(--q-line); }
  .desk-scorecard .sc-col h5 .n { color:var(--q-fg-3); font-size:10px; font-weight:600; flex:none;
                                  background:var(--q-bg-deep); border:1px solid var(--q-line); border-radius:999px; padding:0 7px; }
  .desk-scorecard .sc-kv { display:flex; justify-content:space-between; font-size:11px; line-height:1.7; }
  .desk-scorecard .sc-kv span { color:var(--q-fg-3); flex:none; }
  .desk-scorecard .sc-kv b { font-variant-numeric:tabular-nums; }
  .desk-scorecard .sc-kv b.o { color:var(--q-warn); }
  .desk-scorecard .sc-kv b.g { color:var(--q-acc); }
  .desk-scorecard .sc-kv b.r { color:var(--q-danger); }
  .desk-scorecard .sc-empty { margin-top:6px; color:var(--q-fg-3); font-size:11px; line-height:1.6; }
  /* 口径说明弹窗 */
  .sc-modal-mask { position:fixed; inset:0; background:rgba(7,11,18,.62); z-index:1000; display:flex;
                   align-items:center; justify-content:center; padding:20px; }
  .sc-modal { background:var(--q-bg); border:1px solid var(--q-line); border-radius:14px; max-width:560px;
              width:100%; max-height:72vh; display:flex; flex-direction:column; overflow:hidden;
              box-shadow:0 20px 60px rgba(0,0,0,.6); }
  .sc-modal .sc-mhead { display:flex; justify-content:space-between; align-items:center; padding:14px 18px;
                        border-bottom:1px solid var(--q-line); flex:none; }
  .sc-modal .sc-mhead b { font-size:14px; color:var(--q-acc); }
  .sc-modal .sc-mclose { flex:none; width:30px; height:30px; border-radius:8px; background:var(--q-panel);
                         border:1px solid var(--q-line); color:var(--q-fg-2); font-size:18px; line-height:1; cursor:pointer; }
  .sc-modal .sc-mbody { overflow-y:auto; padding:14px 18px 18px; font-size:12px; line-height:1.8; color:var(--q-fg); }
  .sc-modal .sc-mbody h6 { font-size:12px; color:var(--q-fg-2); font-weight:700; margin:14px 0 3px; }
  .sc-modal .sc-mbody h6:first-child { margin-top:0; }
  .sc-modal .sc-mbody .warn { color:var(--q-warn); }
  .sc-hero { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:10px 13px;
             background:var(--q-bg-deep); border:1px solid var(--q-line); border-radius:10px; margin-bottom:4px; }
  .sc-hero-l b { font-size:12px; color:var(--q-acc); font-weight:700; }
  .sc-hero-r { font-size:11px; color:var(--q-fg-2); text-align:right; }
  .sc-sec { display:flex; gap:7px; align-items:flex-start; }
  .sc-sec .sc-ic { flex:none; width:20px; height:20px; margin-top:12px; border-radius:6px;
                   background:rgba(var(--accent-rgb),.08); border:1px solid rgba(var(--accent-rgb),.2);
                   display:flex; align-items:center; justify-content:center; color:var(--q-acc); }
  .sc-sec .sc-ic svg { width:11px; height:11px; }
  @media (max-width:900px) { .desk-scorecard .sc-row { flex-direction:column; } .desk-top { flex-direction:column; } }
  /* 决策台响应式：拖拽浏览器自适应（与自选监控视图一致） */
  @media (max-width:1280px) {
    .desk-right { width:320px; }
    .desk-symlist { width:170px; }
    #desk-main-col { min-width:0; }
    .desk-grid { grid-template-rows:auto auto; }
    .desk-grid .dcell .sub-panel { min-height:260px; }
  }
  @media (max-width:1100px) {
    .desk-row { flex-wrap:wrap; }
    #desk-main-col { width:100%; min-width:0; }
    .desk-symlist { width:100% !important; max-height:200px !important; position:static !important; }
    .desk-symlist .dsl-body { display:flex; flex-wrap:wrap; gap:6px; padding:8px; }
    .desk-symlist .dsl-item { width:calc(25% - 6px); margin-bottom:0; }
    .desk-symlist .dsl-search { display:none; }
    .desk-right { width:100% !important; margin-top:12px; }
    .desk-grid { grid-template-columns:1fr; }
  }
  /* ===== 添加自选弹窗 ===== */
  .wl-mask { position:fixed; inset:0; background:rgba(7,11,18,.74); z-index:900; display:flex;
             align-items:center; justify-content:center; padding:20px; backdrop-filter:blur(4px); }
  .wl-modal { background:var(--q-bg); border:1px solid var(--q-line); border-radius:16px; width:660px; max-width:96vw;
              max-height:82vh; display:flex; flex-direction:column; overflow:hidden;
              box-shadow:0 24px 80px rgba(0,0,0,.75), 0 0 0 1px rgba(var(--accent-rgb),.06) inset; }
  .wl-head { display:flex; align-items:center; gap:10px; padding:15px 20px; border-bottom:1px solid var(--q-panel); flex:none; }
  .wl-head .wl-logo { width:30px; height:30px; border-radius:9px; background:rgba(var(--accent-rgb),.12);
                      border:1px solid rgba(var(--accent-rgb),.3); display:flex; align-items:center; justify-content:center; flex:none; }
  .wl-head .wl-logo svg { color:var(--q-acc); }
  .wl-head b { font-size:14px; color:var(--q-fg); font-weight:700; }
  .wl-sub { font-size:11px; color:var(--q-fg-2); font-family:Consolas,monospace; }
  .wl-x { flex:none; width:28px; height:28px; margin-left:auto; border-radius:8px; background:transparent;
          border:1px solid transparent; color:var(--q-fg-3); font-size:18px; line-height:1; cursor:pointer; transition:.15s; }
  .wl-x:hover { color:var(--q-fg); background:var(--q-panel); border-color:var(--q-line); }
  .wl-tabs { display:flex; gap:6px; padding:14px 20px 0; flex:none; flex-wrap:wrap; }
  .wl-tab { display:flex; align-items:center; gap:6px; font-size:12px; padding:6px 14px; border-radius:999px;
            border:1px solid var(--q-line); color:var(--q-fg-2); cursor:pointer; background:transparent; transition:.15s; font-weight:500; }
  .wl-tab svg { width:13px; height:13px; }
  .wl-tab .n { opacity:.55; font-size:10px; font-family:Consolas,monospace; }
  .wl-tab:hover { color:var(--q-fg); border-color:var(--q-line-3); background:var(--q-panel); }
  .wl-tab.on { color:var(--q-acc); border-color:rgba(var(--accent-rgb),.45); background:rgba(var(--accent-rgb),.08); font-weight:600; }
  .wl-search { display:flex; align-items:center; gap:8px; margin:12px 20px 0; padding:8px 13px; flex:none;
               background:var(--q-bg-deep); border:1px solid var(--q-line); border-radius:10px; transition:.15s; }
  .wl-search:focus-within { border-color:rgba(var(--accent-rgb),.5); box-shadow:0 0 0 3px rgba(var(--accent-rgb),.08); }
  .wl-search svg { color:var(--q-fg-3); flex:none; }
  .wl-search input { flex:1; min-width:0; background:transparent; border:none; outline:none;
                     color:var(--q-fg); font-size:12px; }
  .wl-search input::placeholder { color:var(--q-line-3); }
  .wl-search-clear { flex:none; width:18px; height:18px; border-radius:50%; background:var(--q-panel); color:var(--q-fg-3);
                     font-size:11px; line-height:18px; text-align:center; cursor:pointer; display:none; }
  .wl-search-clear:hover { color:var(--q-fg); }
  .wl-body { flex:1; overflow-y:auto; padding:12px 20px 16px; min-height:180px; }
  .wl-body::-webkit-scrollbar { width:6px; }
  .wl-body::-webkit-scrollbar-thumb { background:var(--q-line-soft); border-radius:3px; }
  .wl-item { display:flex; align-items:center; gap:10px; padding:8px 12px; border:1px solid var(--q-line);
             border-radius:10px; cursor:pointer; margin-bottom:6px; background:var(--q-panel); transition:.12s; }
  .wl-item:hover { border-color:var(--q-line-3); background:var(--q-panel); }
  .wl-item.on { border-color:rgba(var(--accent-rgb),.4); background:rgba(var(--accent-rgb),.08); }
  .wl-item .wl-check { flex:none; width:17px; height:17px; border-radius:5px; border:1.5px solid var(--q-line-2);
                       display:flex; align-items:center; justify-content:center; transition:.15s; }
  .wl-item.on .wl-check { background:var(--q-acc); border-color:var(--q-acc); }
  .wl-item.on .wl-check svg { display:block; }
  .wl-item .wl-sym { font-weight:700; font-size:12px; color:var(--q-fg); font-family:Consolas,monospace; flex:none; }
  .wl-item .wl-lbl { font-size:11px; color:var(--q-fg-2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; }
  .wl-item .wl-kind { flex:none; font-size:9px; padding:1.5px 7px; border-radius:999px; border:1px solid var(--q-line);
                      color:var(--q-fg-3); font-family:Consolas,monospace; }
  .wl-item.on .wl-kind { color:var(--q-acc); border-color:rgba(var(--accent-rgb),.35); }
  .wl-foot { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:13px 20px;
             border-top:1px solid var(--q-panel); flex:none; background:var(--q-bg); }
  .wl-tip { font-size:10px; color:var(--q-fg-3); }
  .wl-actions { display:flex; gap:8px; }
  .wl-btn { display:flex; align-items:center; gap:6px; font-size:12px; padding:8px 18px; border-radius:9px; cursor:pointer;
            font-weight:600; border:1px solid var(--q-line); background:var(--q-panel); color:var(--q-fg-2); transition:.15s; }
  .wl-btn svg { width:13px; height:13px; }
  .wl-btn:hover { color:var(--q-fg); border-color:var(--q-line-3); }
  .wl-btn.wl-lock { background:linear-gradient(135deg,var(--q-acc),var(--q-acc)); color:var(--q-acc-ink); border-color:transparent; }
  .wl-btn.wl-lock:hover { filter:brightness(1.1); }
  .wl-btn:disabled { opacity:.5; cursor:not-allowed; }
  .wl-empty { color:var(--q-fg-3); font-size:12px; text-align:center; padding:40px 0; }
  .wl-noresult { color:var(--q-fg-3); font-size:12px; text-align:center; padding:50px 0; }
  .wl-noresult b { color:var(--q-fg-2); }
  /* 数据统计卡片：可点击 */
  .stat-card { cursor:pointer; transition:.15s; position:relative; }
  .stat-card:hover { border-color:var(--q-acc) !important; box-shadow:0 0 10px rgba(var(--accent-rgb),.12); transform:translateY(-1px); }
  .stat-card:hover .text-mute { color:var(--q-fg-4); }
  /* 数据明细弹窗行 */
  .dm-hint { font-size:11px; color:var(--q-fg-2); margin-bottom:10px; }
  .dm-row { display:flex; align-items:center; gap:10px; padding:8px 12px; border:1px solid var(--q-line); border-radius:9px;
            margin-bottom:6px; background:var(--q-panel); }
  .dm-row:hover { border-color:var(--q-line-3); }
  .dm-sym { flex:1; font-size:12px; font-weight:700; color:var(--q-fg); font-family:Consolas,monospace; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .dm-sub { font-size:10px; color:var(--q-fg-2); flex:none; max-width:40%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .dm-val { flex:none; font-size:12px; font-weight:800; font-family:Consolas,monospace; }
  .dm-val.text-danger { color:var(--q-danger); }
  .dm-val.text-warn { color:var(--q-warn); }
  .dm-val.text-main { color:var(--q-acc); }

/* ===== 代币监控 · 行情表（2026-09-21 重排）=====================================
   窄容器（默认列宽实测 387px）：两行卡片 —— 主行「代币 · 价格 · 涨跌」，
   明细行「成交 · 市值 · 持有人」，明细值前用 ::before 打 9px 小标签，
   避免数字互相粘连（旧版正是这里糊成一团，launchpad 徽标被挤成竖排单字）。
   宽容器（点 ⤢ 放大后 ≥640px）：切单行六列真表格 + 一行表头。
   断点用容器查询 ⇒「放大 = 自动展开」不需要 JS 参与。 */
#meme-tokens-panel { container-type: inline-size; }
.tok-head { display: none; }
.tok {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  grid-template-areas: "id price chg" "vol mcap hold";
  align-items: center; column-gap: 14px; row-gap: 2px;
  padding: 8px 2px; border-bottom: 1px solid var(--q-line-soft);
  font-size: 12px; line-height: 1.5;
}
.tok:last-child { border-bottom: none; }
.tok-id { grid-area: id; display: flex; align-items: center; gap: 6px; min-width: 0; }
/* 市值分层徽标（4~5 个汉字）不许被 flex 压缩成竖排单字：锁尺寸 + 不换行，
   空间不够时让 .tok-sym 走省略号。 */
.tok-id > .mcap-tier { flex: none; white-space: nowrap; }
.tok-sym { font-family: Consolas, monospace; font-weight: 700; color: var(--q-fg);
           min-width: 0; flex: 0 1 auto;
           white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tok-lp { font-size: 9.5px; color: var(--q-fg-3); flex: none; }
.tok-c { font-family: Consolas, monospace; white-space: nowrap; text-align: right; color: var(--q-fg-4); }
.tok-price { grid-area: price; color: var(--q-fg); }
.tok-vol { grid-area: vol; text-align: left; color: var(--q-fg-2); }
.tok-chg { grid-area: chg; font-weight: 700; }
.tok-chg.up { color: var(--q-acc); }
.tok-chg.down { color: var(--q-danger); }
.tok-mcap { grid-area: mcap; color: var(--q-fg-2); }
.tok-hold { grid-area: hold; color: var(--q-fg-2); }
.tok-c::before {
  content: attr(data-l); font-size: 9px; letter-spacing: .04em; color: var(--q-fg-3);
  margin-right: 4px; font-family: "Segoe UI", "PingFang SC", sans-serif; font-weight: 400;
}
/* 主行只保留两个数：价格（$ 前缀已表意）不挂标签，涨跌挂最短的「24h」——
   少 3 个字，主行左侧（代码 + 徽标）就能多出约 30px，徽标不再挤。 */
.tok-price::before { content: none; }
.tok-chg::before { content: "24h"; }
@container (min-width: 640px) {
  .tok-head {
    display: grid; grid-template-columns: minmax(200px, 1.6fr) repeat(5, minmax(92px, 1fr));
    column-gap: 12px; padding: 0 2px 7px; border-bottom: 1px solid var(--q-line-soft);
    font-size: 10px; letter-spacing: .06em; text-transform: uppercase; color: var(--q-fg-3);
  }
  .tok-head .tok-h { text-align: right; }
  .tok-head .tok-h-id { text-align: left; }
  .tok {
    grid-template-columns: minmax(200px, 1.6fr) repeat(5, minmax(92px, 1fr));
    grid-template-areas: "id price vol chg mcap hold";
    row-gap: 0; padding: 7px 2px; font-size: 13px;
  }
  .tok-vol { text-align: right; }
  .tok-c::before { display: none; }
}
