/* ============================================================
 * 币圈合约 AI 智能体 · 样式表
 * 三端适配：桌面 ≥1200 / 平板 768-1199 / 手机 ≤767
 * ============================================================ */

/* ===== 设计令牌：黑夜（默认） ===== */
:root,[data-theme="dark"]{
  --bg:#06090f; --bg2:#0a1019; --bg3:#0d1520; --panel:#0f1826; --panel2:#152032; --panel3:#1d2b42;
  --border:#1e2c45; --border2:#33486e; --text:#eaf0f8; --dim:#94a3b8; --dim2:#5c6f88;
  --up:#16c784; --down:#f6465d; --accent:#2dd4bf; --accent2:#38bdf8; --warn:#f0b90b; --hold:#8fa1b8;
  --gold:#f0b90b; --glow:rgba(45,212,191,.14); --shadow:0 10px 36px rgba(0,0,0,.5);
  --track:#1b2942; --grad:linear-gradient(135deg,#0e9a8b,#0e7490,#0369a1); --gridline:#15223a;
  --star:#f0b90b; --mono:ui-monospace,"Cascadia Code",Consolas,monospace; color-scheme:dark;
}
/* ===== 白昼 ===== */
[data-theme="light"]{
  --bg:#f3f5fa; --bg2:#e9edf5; --bg3:#e1e7f0; --panel:#ffffff; --panel2:#f2f5fa; --panel3:#e5ebf3;
  --border:#d9e1ec; --border2:#b4c2d6; --text:#131a29; --dim:#5a6a80; --dim2:#8b99ac;
  --up:#0da06a; --down:#e03e55; --accent:#0e9a8b; --accent2:#0284c7; --warn:#b45309; --hold:#70809a;
  --gold:#d97706; --glow:rgba(14,154,139,.12); --shadow:0 10px 30px rgba(30,50,90,.12);
  --track:#e6ecf5; --grad:linear-gradient(135deg,#0e9a8b,#0284c7); --gridline:#e9eef6;
  --star:#d97706; color-scheme:light;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  background:var(--bg); color:var(--text);
  font-family:"Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,-apple-system,sans-serif;
  font-size:14px; line-height:1.55; -webkit-font-smoothing:antialiased;
  transition:background .25s,color .25s; overflow-x:hidden;
}
::selection{background:rgba(45,212,191,.28)}
a{color:var(--accent2);text-decoration:none}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
.up{color:var(--up)} .down{color:var(--down)} .warn-c{color:var(--warn)}
.dim{color:var(--dim)} .dim2{color:var(--dim2)} .accent{color:var(--accent)}
button{font-family:inherit}

/* ===== 布局骨架 ===== */
.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}
.body{display:flex;flex:1;overflow:hidden;min-height:0}
.main{flex:1;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}
.view{display:none;padding:20px 22px 60px;max-width:1720px;margin:0 auto;width:100%}
.view.active{display:block;animation:fade .18s ease}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

/* ============================================================
 * 顶栏
 * ============================================================ */
.topbar{
  display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px;
  min-height:60px; padding:9px 14px 8px;
  background:linear-gradient(180deg,var(--bg2),var(--bg));
  border-bottom:1px solid var(--border); flex-shrink:0; z-index:30;
}
.brand{display:flex;align-items:center;gap:11px;min-width:0;flex:0 1 auto}
.brand-logo{
  width:38px;height:38px;border-radius:11px;flex-shrink:0;display:grid;place-items:center;
  background:var(--grad);border:1px solid var(--border2);box-shadow:0 0 16px var(--glow);
}
.brand-logo svg{width:20px;height:20px;stroke:#eafffb}
.brand-txt{min-width:0}
.brand h1{font-size:15.5px;font-weight:900;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand small{display:block;font-size:10.5px;color:var(--dim);font-weight:400;white-space:nowrap}

.top-right{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:nowrap;flex-shrink:0}
.refresh-timer{font-size:11px;color:var(--dim2);font-family:var(--mono);white-space:nowrap}
.src-badge{
  font-size:11px;padding:3px 9px;border-radius:20px;white-space:nowrap;
  border:1px solid var(--border2);background:var(--panel);color:var(--accent2);
}
.src-badge.proxy{border-color:rgba(22,199,132,.45);color:var(--up)}
.src-badge.direct{border-color:rgba(240,185,11,.45);color:var(--warn)}
.theme-toggle{margin-left:2px}

.top-sub{display:flex;align-items:center;gap:8px;width:100%;padding:5px 0 2px;min-width:0}
.ex-wrap{display:flex;overflow-x:auto;flex:1;min-width:0;gap:5px;scrollbar-width:thin;align-items:center}
.ex-wrap::-webkit-scrollbar{height:3px}
.ex-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;padding-left:2px}
.exstatus{display:flex;gap:5px;align-items:center;overflow-x:auto;max-width:100%;scrollbar-width:thin}
.exstatus::-webkit-scrollbar{height:3px}

.ex-pill{
  display:flex;align-items:center;gap:5px;padding:4px 10px;border-radius:20px;
  border:1px solid var(--border);background:var(--panel);font-size:11.5px;color:var(--dim);
  cursor:pointer;user-select:none;transition:.15s;white-space:nowrap;flex-shrink:0;
}
.ex-pill .dot{width:7px;height:7px;border-radius:50%;background:var(--dim2);flex-shrink:0}
.ex-pill.ok .dot,.ex-pill.ws .dot{background:var(--up);box-shadow:0 0 6px var(--up)}
.ex-pill.bad .dot{background:var(--down)}
.ex-pill.melt .dot{background:var(--warn)}
.ex-pill.ok,.ex-pill.ws{color:var(--text)}
.ex-pill.on{border-color:var(--border2);color:var(--text)}
.ex-pill.off{opacity:.4}
.ex-pill:hover{border-color:var(--accent2)}

select,button,input,textarea{
  font-family:inherit;font-size:13px;color:var(--text);
  background:var(--panel);border:1px solid var(--border);border-radius:9px;padding:6px 10px;outline:none;
}
select:focus,button:focus,input:focus,textarea:focus{border-color:var(--accent2)}
select option{background:var(--panel2)}
.btn{cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:9px}
.btn:hover{border-color:var(--accent2);color:var(--accent2)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-primary{background:var(--grad);border-color:var(--border2);color:#eafffb;font-weight:600}
.btn-primary:hover{filter:brightness(1.15);color:#fff}
.btn-danger{background:rgba(246,70,93,.12);border-color:rgba(246,70,93,.4);color:var(--down)}
.btn-sm{padding:4px 10px;font-size:12px;border-radius:7px}
.icon-btn{width:36px;height:36px;display:grid;place-items:center;padding:0;border-radius:10px;flex-shrink:0}
.icon-btn svg{width:18px;height:18px;stroke:currentColor}
.hamburger{display:none}
.btn-row{display:flex;gap:10px;flex-wrap:wrap}

/* ===== 监测开关 / 收藏徽章 ===== */
.monitor-pill{
  display:flex;align-items:center;gap:7px;padding:4px 11px;border-radius:20px;font-size:12px;
  border:1px solid var(--border);background:var(--panel);color:var(--dim);
  cursor:pointer;user-select:none;white-space:nowrap;flex-shrink:0;
}
.monitor-pill .sw{width:28px;height:16px;border-radius:10px;background:var(--track);position:relative;transition:.2s;flex-shrink:0}
.monitor-pill .sw::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--dim2);transition:.2s}
.monitor-pill.on{color:var(--text);border-color:rgba(22,199,132,.4)}
.monitor-pill.on .sw{background:var(--up)}
.monitor-pill.on .sw::after{left:14px;background:#fff}
.fav-badge{
  display:inline-flex;align-items:center;gap:5px;padding:4px 11px;border-radius:20px;font-size:12px;
  border:1px solid var(--border);background:var(--panel);color:var(--gold);cursor:pointer;white-space:nowrap;flex-shrink:0;
}
.fav-badge .star{color:var(--gold)}
.ex-sel-mobile{display:none;padding:4px 8px;border-radius:8px;font-size:12px;flex-shrink:0;max-width:110px}

/* ============================================================
 * 信号条
 * ============================================================ */
.sigtape{
  display:flex;gap:8px;align-items:center;padding:7px 16px;
  background:var(--bg3);border-bottom:1px solid var(--border);
  overflow-x:auto;flex-shrink:0;scrollbar-width:thin;
}
.sigtape::-webkit-scrollbar{height:3px}
.sigtape .t-label{font-size:11px;color:var(--accent2);font-weight:700;white-space:nowrap;flex-shrink:0}
.tape-item{
  display:flex;gap:6px;align-items:center;font-size:12px;color:var(--dim);white-space:nowrap;
  border:1px solid var(--border);border-radius:20px;padding:2px 10px;background:var(--panel);flex-shrink:0;cursor:pointer;
}
.tape-item:hover{border-color:var(--accent2)}
.tape-item b{font-family:var(--mono);color:var(--text)}
.tape-item.alert{border-color:var(--accent2);box-shadow:0 0 10px var(--glow)}
.chg-up{color:var(--up)} .chg-down{color:var(--down)}

/* ============================================================
 * 侧边栏
 * ============================================================ */
.sidebar{
  width:230px;flex-shrink:0;background:var(--bg2);border-right:1px solid var(--border);
  display:flex;flex-direction:column;padding:14px 10px;gap:3px;overflow-y:auto;
}
.nav-item{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;color:var(--dim);
  cursor:pointer;font-size:13.5px;transition:.12s;border:1px solid transparent;white-space:nowrap;
}
.nav-item svg{width:16px;height:16px;stroke:currentColor;flex-shrink:0}
.nav-item:hover{color:var(--text);background:var(--panel)}
.nav-item.active{color:var(--accent);background:var(--panel2);border-color:var(--border2);font-weight:600}
.sidebar .risk-tag{
  margin-top:auto;font-size:11px;color:var(--dim2);padding:10px 12px;
  border-top:1px dashed var(--border);line-height:1.7;
}
.overlay{display:none}

/* ============================================================
 * 视图通用
 * ============================================================ */
.view-title{font-size:22px;font-weight:900;margin-bottom:4px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.view-title .badge{font-size:11px;font-weight:600;padding:2px 9px;border-radius:20px;background:var(--panel3);color:var(--accent2);border:1px solid var(--border2)}
.view-sub{color:var(--dim);font-size:13px;margin-bottom:18px;line-height:1.7}
.grid{display:grid;gap:14px}
.card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:16px;margin-bottom:0}
.card.sec{margin-top:14px}
.card h3{font-size:14px;font-weight:700;margin-bottom:12px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.card h3 .tag{font-size:11px;font-weight:500;color:var(--dim);border:1px solid var(--border2);padding:1px 7px;border-radius:20px}
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.chart-md{width:100%;height:240px;min-height:220px}
.chart-lg{width:100%;height:380px;min-height:340px}
.empty{padding:28px 16px;text-align:center;color:var(--dim2);font-size:13px;line-height:1.8}

/* 分段控件 */
.range-seg,.seg{display:flex;gap:0;border:1px solid var(--border);border-radius:9px;overflow:hidden;flex-wrap:wrap}
.range-seg button,.seg button{
  padding:6px 13px;border:none;border-radius:0;background:var(--panel);color:var(--dim);
  cursor:pointer;font-size:12.5px;white-space:nowrap;
}
.range-seg button:hover,.seg button:hover{color:var(--text);background:var(--panel2)}
.range-seg button.on,.seg button.on{background:var(--grad);color:#eafffb;font-weight:600}

.search-box{position:relative;flex:1;min-width:160px;max-width:280px}
.search-box input{width:100%;padding-left:32px}
.search-box svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:14px;height:14px;stroke:var(--dim)}

/* KPI */
.kpi-row,.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:13px 15px;position:relative;overflow:hidden}
.kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--grad)}
.kpi .k-label{font-size:11.5px;color:var(--dim);margin-bottom:5px}
.kpi .k-val{font-size:19px;font-weight:800;font-family:var(--mono);font-variant-numeric:tabular-nums;word-break:break-all}
.kpi .k-sub{font-size:11px;color:var(--dim2);margin-top:3px}

/* ============================================================
 * 总览表格
 * ============================================================ */
.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:14px;background:var(--panel);-webkit-overflow-scrolling:touch}
table{width:100%;border-collapse:collapse;min-width:1000px;font-size:13px}
thead th{
  position:sticky;top:0;background:var(--panel2);color:var(--dim);font-weight:600;text-align:right;
  padding:11px 12px;font-size:12px;border-bottom:1px solid var(--border);white-space:nowrap;
  cursor:pointer;user-select:none;z-index:2;
}
thead th:hover{color:var(--text)}
thead th.l{text-align:left}
tbody td{padding:9px 12px;border-bottom:1px solid var(--gridline);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
tbody tr:hover{background:var(--panel2)}
tbody tr.signal-row{cursor:pointer}
td.l,th.l{text-align:left}
.sym{font-weight:700;color:var(--text);display:flex;align-items:center;gap:8px}
.star{color:var(--dim2);cursor:pointer;font-size:16px;line-height:1;transition:.15s;background:none;border:none;padding:2px}
.star:hover{color:var(--star)}
.star.on{color:var(--star);text-shadow:0 0 8px rgba(240,185,11,.5)}
.sym .ex-badge{font-size:10px;padding:1px 6px;border-radius:4px;background:var(--panel3);color:var(--dim);border:1px solid var(--border2)}
.change-up{color:var(--up)} .change-down{color:var(--down)} .change-flat{color:var(--dim)}
.signal-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:20px;font-size:11.5px;font-weight:700;white-space:nowrap}
.signal-chip.long{background:rgba(22,199,132,.14);color:var(--up);border:1px solid rgba(22,199,132,.35)}
.signal-chip.short{background:rgba(246,70,93,.14);color:var(--down);border:1px solid rgba(246,70,93,.35)}
.signal-chip.hold{background:rgba(139,152,169,.12);color:var(--dim);border:1px solid rgba(139,152,169,.3)}
.signal-chip .conf{font-family:var(--mono);opacity:.9}
.mono-badge{font-size:11px;color:var(--dim2);background:var(--panel3);padding:1px 6px;border-radius:4px;white-space:nowrap}
.pager{display:flex;align-items:center;gap:10px;justify-content:flex-end;margin-top:12px;font-size:13px;color:var(--dim);flex-wrap:wrap}
.pageinfo{font-family:var(--mono)}

/* 手机卡片（默认隐藏） */
.ov-cards{display:none;gap:10px;flex-direction:column}
.ov-card{
  display:grid;grid-template-columns:28px 1fr auto auto;gap:10px;align-items:center;
  background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:11px 13px;cursor:pointer;
}
.oc-star{background:none;border:none;color:var(--dim2);font-size:17px;cursor:pointer;padding:0}
.oc-star.on{color:var(--star)}
.oc-mid{min-width:0}
.oc-sym{font-weight:700;font-size:14px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.oc-ex{font-size:10px;padding:1px 6px;border-radius:4px;background:var(--panel3);color:var(--dim);border:1px solid var(--border2);font-weight:400}
.oc-sub{display:flex;gap:10px;font-size:11px;color:var(--dim2);margin-top:2px;flex-wrap:wrap}
.oc-right{text-align:right}
.oc-price{font-family:var(--mono);font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}
.oc-chg{font-size:12px;font-family:var(--mono)}
.oc-sig{min-width:56px;text-align:right}

/* 扫描进度条 */
#scanbar{display:none;align-items:center;gap:10px;margin-bottom:12px;font-size:12px;color:var(--dim2)}
#scanbar .track{flex:1;height:6px;border-radius:3px;background:var(--track);overflow:hidden;max-width:520px}
#scanbar .track i{display:block;height:100%;width:0;background:var(--grad);transition:width .15s}

/* ============================================================
 * 品种分析
 * ============================================================ */
.sym-select-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:16px}
.sym-select-row input[type=text]{flex:0 1 240px}
.quick{display:flex;gap:6px;flex-wrap:wrap}
.quick .q{
  font-size:12px;padding:5px 11px;border-radius:20px;cursor:pointer;border:1px solid var(--border);
  color:var(--dim);display:flex;gap:5px;align-items:center;white-space:nowrap;
}
.quick .q:hover{border-color:var(--accent2);color:var(--accent2)}
.tf-tabs{display:flex;gap:4px;margin:14px 0 10px}
.tf-tabs button{padding:6px 16px;border-radius:8px;border:1px solid var(--border);background:var(--panel);color:var(--dim);cursor:pointer;font-size:13px}
.tf-tabs button.on{background:var(--panel3);color:var(--accent);border-color:var(--accent2)}
.chart-box{height:400px;width:100%;min-height:300px}
.live-price{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.live-price .lp-big{font-size:30px;font-weight:900;font-family:var(--mono);font-variant-numeric:tabular-nums}
.indicators{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:10px;margin-top:14px}
.ind-card{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:10px 12px}
.ind-card .i-name{font-size:11px;color:var(--dim);margin-bottom:4px}
.ind-card .i-val{font-size:15px;font-weight:600;font-family:var(--mono);font-variant-numeric:tabular-nums;word-break:break-all}
.ind-card .i-sub{font-size:11px;color:var(--dim2);margin-top:2px}
.deriv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.deriv-item{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:11px 13px}
.deriv-item .d-name{font-size:11px;color:var(--dim)}
.deriv-item .d-val{font-size:16px;font-weight:700;font-family:var(--mono);margin-top:3px;word-break:break-all}

.signal-card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:18px;margin-top:16px;border-top:3px solid var(--accent)}
.signal-head{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin-bottom:14px}
.sig-action{font-size:16px;font-weight:800;padding:6px 16px;border-radius:8px}
.sig-action.long{background:rgba(22,199,132,.16);color:var(--up);border:1px solid rgba(22,199,132,.4)}
.sig-action.short{background:rgba(246,70,93,.16);color:var(--down);border:1px solid rgba(246,70,93,.4)}
.sig-action.hold{background:rgba(139,152,169,.14);color:var(--dim);border:1px solid rgba(139,152,169,.35)}
.conf-line{display:flex;align-items:center;gap:10px}
.conf-line .bar{width:170px;max-width:44vw;height:8px;border-radius:4px;background:var(--track);overflow:hidden}
.conf-line .bar i{display:block;height:100%;background:var(--grad);border-radius:4px}
.sig-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;margin-bottom:14px}
.sig-cell{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:10px 12px}
.sig-cell .s-name{font-size:11px;color:var(--dim)}
.sig-cell .s-val{font-size:16px;font-weight:700;font-family:var(--mono);margin-top:3px;word-break:break-all}
.sig-cell .s-note{font-size:11px;color:var(--dim2);margin-top:2px}
.sig-block{margin-top:12px;border-top:1px dashed var(--border2);padding-top:12px}
.sig-block h4{font-size:12.5px;color:var(--dim);margin-bottom:6px;font-weight:600}
.sig-reason{font-size:13px;color:var(--text);background:var(--panel2);border-left:3px solid var(--accent);padding:10px 12px;border-radius:0 8px 8px 0;line-height:1.8;white-space:pre-wrap;word-break:break-word}
.invalid-box{background:rgba(240,185,11,.08);border:1px solid rgba(240,185,11,.4);border-radius:8px;padding:10px 12px;color:var(--warn);font-size:13px;line-height:1.8}
.strategy-tags{display:flex;flex-wrap:wrap;gap:6px}
.strategy-tags span{font-size:11.5px;padding:3px 9px;border-radius:20px;background:var(--panel3);color:var(--dim);border:1px solid var(--border2)}
.deriv-step{font-size:12px;color:var(--dim2);background:var(--panel2);padding:10px 12px;border-radius:8px;white-space:pre-wrap;font-family:var(--mono);line-height:1.7}
.memo{margin-top:10px;font-size:12px;color:var(--accent2)}

/* ============================================================
 * AI 信号 / 信号状态条
 * ============================================================ */
.sig-status{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin:0 0 12px;padding:10px 14px;border:1px solid var(--border);border-radius:12px;background:var(--panel2);font-size:12px;color:var(--dim2)}
.ss-item{display:inline-flex;align-items:center;gap:5px}
.ss-item b{color:var(--text);font-weight:600}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:var(--border);flex-shrink:0}
.dot.on{background:var(--up);box-shadow:0 0 8px rgba(22,199,132,.7);animation:dotPulse 1.6s infinite}
@keyframes dotPulse{0%,100%{opacity:1}50%{opacity:.4}}

.mem-list{display:flex;flex-direction:column;gap:10px;max-height:640px;overflow-y:auto}
.mem-item{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:11px 13px}
.mem-top{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:8px}
.mem-top b{font-size:14px}
.mem-top .tag{font-size:11px;padding:1px 8px;border-radius:20px;background:var(--panel3);color:var(--dim);border:1px solid var(--border2)}
.mem-top .tag.ok{color:var(--up);border-color:rgba(22,199,132,.4)}
.mem-top .tag.bad{color:var(--down);border-color:rgba(246,70,93,.4)}
.mem-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(88px,1fr));gap:8px}
.mem-cell{background:var(--panel);border-radius:7px;padding:6px 8px;text-align:center}
.mem-cell .n{font-size:10px;color:var(--dim2)}
.mem-cell .v{font-size:12.5px;font-weight:600;font-family:var(--mono);margin-top:2px;word-break:break-all}
.mem-bot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}
.mk{display:inline-flex;gap:6px}

/* ============================================================
 * 策略知识库 / AI 策略分析
 * ============================================================ */
.strategy-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;align-content:start}
.strategy-card{background:var(--panel);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:11px;padding:12px 14px}
.strategy-card.s-core{border-left-color:var(--up)}
.strategy-card.s-major{border-left-color:var(--accent)}
.strategy-card.s-aux{border-left-color:var(--dim)}
.strategy-card .s-top{display:flex;align-items:center;gap:8px;justify-content:space-between;flex-wrap:wrap;margin-bottom:6px}
.strategy-card .s-desc{font-size:12.5px;color:var(--dim);line-height:1.75}
.strategy-card .s-meta{display:flex;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--dim2);margin-top:8px}
.strategy-card .tag{font-size:11px;padding:1px 8px;border-radius:20px;background:var(--panel3);color:var(--dim);border:1px solid var(--border2)}
.strategy-card .s-tag-core{color:var(--up);border-color:rgba(22,199,132,.4);background:rgba(22,199,132,.08)}
.strategy-card .s-tag-major{color:var(--accent);border-color:rgba(45,212,191,.4);background:rgba(45,212,191,.08)}
.strategy-card .s-tag-aux{color:var(--dim)}
.strategy-card .s-weight{display:flex;align-items:center;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--border2)}
.strategy-card .s-weight input[type=range]{flex:1;height:6px;appearance:none;-webkit-appearance:none;background:linear-gradient(to right,var(--up) 0%,var(--warn) 60%,var(--down) 100%);border-radius:3px;outline:none}
.strategy-card .s-weight input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:var(--accent);border:2px solid var(--panel);cursor:pointer;box-shadow:0 0 0 1px var(--border)}
.strategy-card .s-weight input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--accent);border:2px solid var(--panel);cursor:pointer}
.strategy-card .s-weight b{font-size:14px;color:var(--accent);min-width:36px;text-align:right}
/* 权重修改确认按钮 */
.strategy-card .s-weight .sw-confirm{display:inline-flex;align-items:center;gap:4px;margin-left:auto;flex-shrink:0}
.btn-xs{font-size:11px;padding:3px 10px;border-radius:6px;cursor:pointer;border:1px solid transparent;transition:all .15s}
.btn-xs.btn-primary{background:var(--up);color:#000;font-weight:600}
.btn-xs.btn-primary:hover{opacity:.85}
.btn-xs.btn-secondary{background:var(--panel2);color:var(--dim);border-color:var(--border)}
.btn-xs.btn-secondary:hover{background:var(--panel3);color:var(--text)}

.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
.field{display:flex;flex-direction:column;gap:5px}
.field label{font-size:12px;color:var(--dim)}
.field textarea{min-height:86px;resize:vertical;line-height:1.6}
.metric-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.metric-item{background:var(--panel2);border:1px solid var(--border);border-radius:9px;padding:9px 11px}
.metric-item .m-name{font-size:11.5px;color:var(--dim)}
.metric-item .m-val{font-size:15px;font-weight:700;font-family:var(--mono);margin-top:2px;word-break:break-all}
.metric-item .m-sub{margin-top:2px}
.custom-list{display:flex;flex-direction:column;gap:10px;max-height:420px;overflow-y:auto}
.wh-item{background:var(--panel2);border:1px solid var(--border);border-radius:9px;padding:10px 12px;font-size:12.5px}
.wt-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.wt-tags span{font-size:10.5px;padding:1px 7px;border-radius:20px;background:var(--panel3);color:var(--dim2);font-family:var(--mono)}
.analysis-box{margin-top:14px;border-top:1px dashed var(--border2);padding-top:14px}
.score-ring{display:grid;grid-template-columns:minmax(120px,170px) 1fr;gap:16px;align-items:center;margin-bottom:14px}
.score-num{font-size:52px;font-weight:900;text-align:center;font-family:var(--mono);line-height:1}
.score-num.good{color:var(--up)} .score-num.mid{color:var(--warn)} .score-num.bad{color:var(--down)}
.verdict{padding:11px 14px;border-radius:9px;font-size:13px;line-height:1.85}
.verdict.good{background:rgba(22,199,132,.1);border:1px solid rgba(22,199,132,.35);color:var(--up)}
.verdict.mid{background:rgba(240,185,11,.1);border:1px solid rgba(240,185,11,.35);color:var(--warn)}
.verdict.bad{background:rgba(246,70,93,.1);border:1px solid rgba(246,70,93,.35);color:var(--down)}

/* ============================================================
 * 交易信号库 / 自学习 / 风控
 * ============================================================ */
.date-fields{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.trade-list{display:flex;flex-direction:column;gap:10px}
.trade-item{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:11px 13px}
.trade-head{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.trade-head b{font-size:14px}
.trade-mid{display:flex;gap:6px 14px;flex-wrap:wrap;font-size:11.5px;color:var(--dim2);margin-top:8px}
.trade-mid b{color:var(--text);font-family:var(--mono);font-weight:600}
.trade-bot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}
.tag.open{color:var(--accent2)} .tag.win{color:var(--up)} .tag.lose{color:var(--down)}
.status-tag{font-size:11.5px;font-family:var(--mono);font-weight:600}
.status-tag.win{color:var(--up)} .status-tag.lose{color:var(--down)} .status-tag.open{color:var(--dim2)}

.env-tag{font-size:12px;padding:4px 12px;border-radius:20px;background:var(--panel3);color:var(--accent2);border:1px solid var(--border2)}
.calc-result{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-top:12px}
.calc-result.ok{border-color:rgba(22,199,132,.35)}
.calc-head{font-size:13px;font-weight:700;margin-bottom:8px;color:var(--accent)}
.calc-step{font-size:12.5px;color:var(--dim);line-height:1.9;font-family:var(--mono);word-break:break-word}
.calc-warn{margin-top:8px;font-size:12px;color:var(--warn);line-height:1.75}
.rule-list{list-style:none;display:flex;flex-direction:column;gap:8px}
.rule-list li{font-size:12.5px;color:var(--dim);background:var(--panel2);border-left:3px solid var(--accent);padding:9px 12px;border-radius:0 8px 8px 0;line-height:1.75}
.bad-list li{border-left-color:var(--down)}
.bug-box{font-size:12.5px;color:var(--dim2);line-height:1.85;white-space:pre-wrap;background:var(--panel2);padding:12px 14px;border-radius:9px}
.pos-item{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--panel2);border:1px solid var(--border);border-radius:9px;padding:9px 12px;margin-bottom:8px;font-size:13px}
.disc-box{margin-top:14px;background:rgba(240,185,11,.08);border:1px solid rgba(240,185,11,.35);border-radius:12px;padding:14px 16px;font-size:12.5px;color:var(--dim);line-height:1.9}
.warn-line{font-size:13px;font-weight:700;color:var(--warn);margin-bottom:6px}
.flow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.flow-node{background:var(--panel2);border:1px solid var(--border2);border-radius:9px;padding:8px 12px;text-align:center;min-width:96px}
.flow-node b{display:block;font-size:12px}
.flow-node small{font-size:10px;color:var(--dim2)}
.flow-arrow{color:var(--accent2);font-weight:700}

/* ============================================================
 * 弹窗 / Toast / Footer
 * ============================================================ */
.modal-mask{
  position:fixed;inset:0;background:rgba(0,0,0,.62);backdrop-filter:blur(3px);
  display:none;align-items:center;justify-content:center;z-index:200;padding:16px;
}
.modal-mask.show{display:flex;animation:fade .15s ease}
.alert-modal{
  width:min(600px,100%);max-height:88vh;overflow-y:auto;background:var(--panel);
  border:1px solid var(--border2);border-radius:16px;box-shadow:var(--shadow);position:relative;
}
.am-flash{position:absolute;top:0;left:0;right:0;height:3px;background:var(--grad);animation:flash 1.2s ease infinite}
@keyframes flash{0%,100%{opacity:1}50%{opacity:.25}}
.am-head{display:flex;align-items:center;gap:11px;padding:14px 16px;border-bottom:1px solid var(--border)}
.am-title{font-size:15px;font-weight:800;flex:1}
.am-x{cursor:pointer;color:var(--dim);padding:4px;border-radius:6px;display:grid;place-items:center}
.am-x:hover{color:var(--text);background:var(--panel2)}
.am-x svg{width:16px;height:16px}
.am-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:8px;padding:14px 16px 0}
.am-cell{background:var(--panel2);border-radius:9px;padding:8px 10px;text-align:center}
.am-cell .n{font-size:10.5px;color:var(--dim2)}
.am-cell .v{font-size:14px;font-weight:700;font-family:var(--mono);margin-top:3px;word-break:break-all}
.am-reason{margin:14px 16px 0;font-size:12.5px;color:var(--dim);background:var(--panel2);border-left:3px solid var(--accent);padding:10px 12px;border-radius:0 8px 8px 0;line-height:1.8;white-space:pre-wrap;word-break:break-word}
.am-actions{display:flex;gap:10px;justify-content:center;padding:16px}
.am-btn{min-width:110px;justify-content:center}
#alertBody .signal-head{padding:14px 16px 0}

#toast{
  position:fixed;left:50%;bottom:40px;transform:translateX(-50%) translateY(20px);
  background:var(--panel3);color:var(--text);border:1px solid var(--border2);border-radius:10px;
  padding:10px 20px;font-size:13px;z-index:300;opacity:0;pointer-events:none;transition:.25s;
  box-shadow:var(--shadow);max-width:90vw;text-align:center;
}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
footer{
  position:fixed;bottom:0;left:0;right:0;text-align:center;font-size:11px;color:var(--dim2);
  background:linear-gradient(0deg,var(--bg),transparent);padding:6px 10px;pointer-events:none;z-index:20;
}

/* 滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border2);border-radius:5px}
::-webkit-scrollbar-thumb:hover{background:var(--accent)}

/* ============================================================
 * 平板：768 – 1199
 * ============================================================ */
@media (max-width:1199px){
  .sidebar{width:190px;padding:12px 8px}
  .nav-item{font-size:13px;padding:9px 10px;gap:8px}
  .view{padding:18px 16px 56px}
  .view-title{font-size:20px}
  .brand h1{font-size:14.5px}
  table{min-width:920px}
  .chart-md{height:220px}
}

/* ============================================================
 * 手机：≤767
 * ============================================================ */
@media (max-width:767px){
  .app{height:100dvh}
  .topbar{padding:8px 10px 6px;gap:6px 8px;min-height:0}
  .hamburger{display:grid}
  .brand h1{font-size:13.5px}
  .brand small{font-size:9.5px}
  .brand-logo{width:32px;height:32px;border-radius:9px}
  .brand-logo svg{width:17px;height:17px}
  .top-right{gap:6px}
  .refresh-timer{font-size:10px;max-width:96px;overflow:hidden;text-overflow:ellipsis}
  .src-badge{font-size:10px;padding:2px 7px}
  .icon-btn{width:32px;height:32px}
  .top-sub{padding:4px 0 2px;gap:6px}
  .ex-sel-mobile{display:block}
  .ex-wrap{display:none}
  .ex-actions{padding-left:0;gap:6px;margin-left:auto}
  .monitor-pill{font-size:11px;padding:3px 8px}
  .fav-badge{font-size:11px;padding:3px 8px}
  #refreshSel{font-size:11px;padding:4px 6px;max-width:78px}
  .sigtape{padding:6px 10px}

  /* 侧边栏抽屉 */
  .sidebar{
    position:fixed;top:0;left:0;bottom:0;width:250px;z-index:120;
    transform:translateX(-100%);transition:transform .22s ease;
    box-shadow:var(--shadow);padding-top:16px;
  }
  .sidebar.open{transform:translateX(0)}
  .overlay{display:block;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:110;opacity:0;pointer-events:none;transition:.2s}
  .overlay.show{opacity:1;pointer-events:auto}

  .view{padding:14px 12px 56px}
  .view-title{font-size:18px}
  .view-sub{font-size:12px;margin-bottom:14px}
  .card{padding:13px;border-radius:12px}
  .kpi-row,.stat-grid{grid-template-columns:repeat(2,1fr);gap:9px}
  .kpi{padding:11px 12px}
  .kpi .k-val{font-size:16px}
  .toolbar{gap:8px}
  .search-box{max-width:none;flex:1 1 100%}
  #ovSort{flex:1 1 auto}
  .range-seg,.seg{width:100%}
  .range-seg button,.seg button{flex:1;text-align:center;padding:7px 6px;font-size:11.5px}
  .btn-row .btn{flex:1;justify-content:center}

  /* 总览：表格 → 卡片 */
  .table-wrap{display:none}
  .ov-cards{display:flex}
  .ov-card{grid-template-columns:26px 1fr auto;gap:8px;padding:10px 12px}
  .oc-sig{grid-column:2 / -1;text-align:left;margin-top:2px}
  .pager{justify-content:center;gap:8px;font-size:12px}
  #scanbar .track{max-width:none}

  .form-grid{grid-template-columns:1fr;gap:10px}
  .sym-select-row{gap:8px}
  .sym-select-row input[type=text]{flex:1 1 100%;order:1}
  #symExchange{order:2;flex:1}
  #symGo{order:3}
  .quick{order:4;width:100%}
  .quick .q{font-size:11.5px;padding:4px 9px}
  .chart-box{height:300px;min-height:260px}
  .chart-md{height:210px;min-height:190px}
  .chart-lg{height:300px;min-height:270px}
  .live-price .lp-big{font-size:25px}
  .indicators{grid-template-columns:repeat(2,1fr);gap:8px}
  .ind-card .i-val{font-size:13.5px}
  .deriv-grid{grid-template-columns:repeat(2,1fr)}
  .sig-grid{grid-template-columns:repeat(2,1fr)}
  .mem-grid{grid-template-columns:repeat(3,1fr)}
  .mem-list{max-height:none}
  .score-ring{grid-template-columns:1fr;gap:10px}
  .score-num{font-size:42px}
  .grid[style*="1.4fr"],.grid[style*="1.2fr"],.grid[style*="1.1fr"]{grid-template-columns:1fr !important}
  .conf-line .bar{width:120px}
  .am-grid{grid-template-columns:repeat(3,1fr);gap:6px;padding:12px 12px 0}
  .am-cell .v{font-size:12.5px}
  .flow-node{min-width:0;flex:1 1 auto;padding:6px 9px}
  .flow-arrow{display:none}
  #toast{bottom:56px;font-size:12px;padding:9px 14px}
  footer{font-size:10px;padding:4px 8px}
  .date-fields{width:100%}
  .date-fields input{flex:1}
  .stat-grid{grid-template-columns:repeat(2,1fr)}
}

/* 超窄屏 */
@media (max-width:400px){
  .kpi-row,.stat-grid{grid-template-columns:1fr}
  .indicators,.deriv-grid,.sig-grid{grid-template-columns:1fr 1fr}
  .mem-grid{grid-template-columns:repeat(2,1fr)}
  .am-grid{grid-template-columns:repeat(2,1fr)}
}

/* ============================================================
 * 平板：481 ~ 1024 自适应
 * ============================================================ */
@media (min-width:481px) and (max-width:1024px){
  .app{height:100dvh}
  .topbar{padding:10px 14px 8px;gap:8px 10px;min-height:0}
  .brand h1{font-size:15px}
  .brand small{font-size:10px}
  .brand-logo{width:34px;height:34px;border-radius:10px}
  .ex-sel-mobile{display:block}
  .ex-wrap{display:none}
  .sidebar{width:200px;padding:12px 8px}
  .nav-item{font-size:13px;padding:9px 10px;gap:8px}
  .view{padding:18px 16px 56px}
  .view-title{font-size:21px}
  .card{padding:14px 16px;border-radius:13px}
  .kpi-row,.stat-grid{grid-template-columns:repeat(3,1fr);gap:11px}
  table{min-width:920px}
  .chart-md{height:230px}
  .indicators{grid-template-columns:repeat(3,1fr)}
  .deriv-grid{grid-template-columns:repeat(3,1fr)}
  .sig-grid{grid-template-columns:repeat(3,1fr)}
  .grid[style*="1.4fr"],.grid[style*="1.2fr"],.grid[style*="1.1fr"]{grid-template-columns:1fr 1fr !important}
  .strategy-grid{grid-template-columns:repeat(2,1fr)}
}

/* ============================================================
 * 手机：≤ 480  APP 风格（iOS / Android 仿原生）
 * ============================================================ */
@media (max-width:480px){
  :root{
    --app-radius: 14px;
    --app-card-bg: var(--panel);
    --app-fs-lg: 17px;
    --app-fs-md: 14.5px;
  }
  body{background:var(--bg);-webkit-tap-highlight-color:transparent}
  .app{height:100dvh;display:flex;flex-direction:column}
  /* —— 顶栏：胶囊式、紧凑 —— */
  .topbar{
    padding:max(8px,env(safe-area-inset-top)) 12px 8px;
    gap:8px 10px;background:var(--panel);border-bottom:1px solid var(--border);
    backdrop-filter:saturate(140%) blur(8px);
  }
  .hamburger{display:grid}
  .brand h1{font-size:14.5px;font-weight:700;letter-spacing:.2px}
  .brand small{display:none}
  .brand-logo{width:30px;height:30px;border-radius:8px}
  .brand-logo svg{width:16px;height:16px}
  .top-right{gap:6px}
  .refresh-timer{font-size:10.5px;max-width:84px;overflow:hidden;text-overflow:ellipsis;color:var(--dim)}
  .src-badge{font-size:10px;padding:2px 6px}
  .icon-btn{width:32px;height:32px;border-radius:9px;background:var(--panel2)}
  .top-sub{padding:6px 12px 4px;gap:6px;border-bottom:1px solid var(--border);background:var(--panel)}
  .ex-sel-mobile{display:block}
  .ex-wrap{display:none}
  .monitor-pill{font-size:11px;padding:3px 9px}
  .fav-badge{font-size:11px;padding:3px 9px}
  /* —— 侧边栏改为顶部抽屉：覆盖 ≤767 已有样式 —— */
  .sidebar{
    position:fixed;top:0;left:0;bottom:0;width:260px;z-index:120;
    transform:translateX(-100%);transition:transform .22s ease;
    box-shadow:var(--shadow);padding-top:max(20px,env(safe-area-inset-top));
    border-right:1px solid var(--border);
  }
  .sidebar.open{transform:translateX(0)}
  .overlay{display:block;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:110;opacity:0;pointer-events:none;transition:.2s}
  .overlay.show{opacity:1;pointer-events:auto}
  /* —— 主区留出底部 Tab 高度 + 安全区 —— */
  .layout{flex:1;overflow:hidden;display:flex;min-height:0}
  main{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:calc(70px + env(safe-area-inset-bottom))}
  .view{padding:14px 12px 12px;animation:slideIn .22s ease}
  .view-title{font-size:var(--app-fs-lg);font-weight:800;letter-spacing:.3px;margin-bottom:4px}
  .view-sub{font-size:12.5px;margin-bottom:12px;color:var(--dim)}
  .view-sub::before{content:""}
  /* —— 卡片大圆角、状态色块、APP 化 —— */
  .card{padding:14px;border-radius:var(--app-radius);background:var(--app-card-bg);
    box-shadow:0 1px 0 rgba(255,255,255,.02) inset, 0 1px 2px rgba(0,0,0,.18);
    margin-bottom:12px;border:1px solid var(--border)}
  .card h3{font-size:14.5px;font-weight:700}
  .kpi{padding:12px 13px;border-radius:13px}
  .kpi .k-val{font-size:18px;font-weight:800}
  .kpi .k-name{font-size:11.5px}
  .kpi-row,.stat-grid{grid-template-columns:repeat(2,1fr);gap:9px}
  .toolbar{gap:8px}
  .search-box{max-width:none;flex:1 1 100%}
  .range-seg,.seg{width:100%;border-radius:10px;background:var(--panel2);padding:3px}
  .range-seg button,.seg button{flex:1;text-align:center;padding:7px 6px;font-size:12px;border-radius:8px}
  /* —— 总览表格 → 卡片 —— */
  .table-wrap{display:none}
  .ov-cards{display:flex}
  .ov-card{grid-template-columns:30px 1fr auto;gap:10px;padding:11px 13px;border-radius:13px;background:var(--panel);border:1px solid var(--border);margin-bottom:8px}
  .oc-sig{grid-column:2 / -1;text-align:left;margin-top:4px}
  /* —— 品种分析：紧凑表 + 大字价格 —— */
  .sym-select-row{gap:8px;flex-wrap:wrap}
  .sym-select-row input[type=text]{flex:1 1 100%;order:1;font-size:14.5px;height:42px;border-radius:10px;background:var(--panel2);border:1px solid var(--border);padding:0 12px}
  #symExchange{order:2;flex:1;height:42px;border-radius:10px;background:var(--panel2);border:1px solid var(--border);padding:0 10px;color:var(--text)}
  #symGo{order:3;height:42px;padding:0 18px;border-radius:10px;font-weight:700;background:var(--grad);color:#fff;border:0}
  .quick{order:4;width:100%;margin-top:4px}
  .quick .q{font-size:11.5px;padding:5px 10px;border-radius:8px;background:var(--panel2);border:1px solid var(--border)}
  .live-price{padding:8px 4px 12px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
  .live-price .lp-big{font-size:30px;font-weight:800;letter-spacing:-.5px}
  .live-price .mono-badge{font-size:10.5px;padding:2px 7px;border-radius:6px;background:var(--panel2);border:1px solid var(--border);color:var(--dim)}
  .tf-tabs{display:flex;gap:4px;margin:6px 0 10px;background:var(--panel2);padding:3px;border-radius:9px}
  .tf-tabs button{flex:1;padding:7px 0;font-size:12.5px;font-weight:600;border-radius:7px;background:transparent;color:var(--dim);border:0}
  .tf-tabs button.on{background:var(--accent);color:#fff}
  .chart-box{height:280px;min-height:240px;border-radius:12px;overflow:hidden}
  .chart-md{height:200px;min-height:180px}
  .chart-lg{height:280px;min-height:240px}
  /* —— 指标卡 2 列网格、大字号 —— */
  .indicators{grid-template-columns:repeat(2,1fr);gap:8px}
  .ind-card{border-radius:11px;padding:10px 11px}
  .ind-card .i-name{font-size:10.5px}
  .ind-card .i-val{font-size:13.5px}
  .ind-card .i-sub{font-size:10.5px}
  .deriv-grid{grid-template-columns:repeat(2,1fr)}
  .deriv-item{border-radius:11px;padding:10px 11px}
  /* —— 信号弹窗：底部 Sheet 风格 —— */
  .modal-mask{padding:0;align-items:flex-end}
  .alert-modal{
    width:100%;max-width:100%;border-radius:18px 18px 0 0;
    padding-bottom:calc(20px + env(safe-area-inset-bottom));
    max-height:88dvh;animation:sheetUp .25s ease;
  }
  .am-head{border-radius:18px 18px 0 0}
  .am-flash{height:3px}
  .sig-grid{grid-template-columns:repeat(2,1fr)}
  .sig-cell{border-radius:10px}
  .am-grid{grid-template-columns:repeat(2,1fr);gap:6px;padding:10px 12px 0}
  .am-cell{border-radius:9px;padding:8px 9px}
  .am-cell .n{font-size:10.5px}
  .am-cell .v{font-size:12.5px}
  .am-actions{padding:0 12px 8px;gap:8px}
  .am-actions .am-btn{height:42px;border-radius:11px;font-size:13.5px}
  /* —— 记忆库紧凑网格 —— */
  .mem-grid{grid-template-columns:repeat(2,1fr);gap:6px}
  .mem-item{border-radius:11px;padding:10px 11px}
  .mem-cell{border-radius:7px}
  .mem-list{max-height:none}
  /* —— 策略卡 1 列 —— */
  .strategy-grid{grid-template-columns:1fr;gap:10px}
  .strategy-card{border-radius:13px;padding:12px 13px}
  /* —— 风险规则：全屏卡片堆叠 —— */
  .risk-grid{grid-template-columns:1fr;gap:10px}
  .form-grid{grid-template-columns:1fr;gap:10px}
  /* —— KPI 数字大、表格行高 —— */
  .score-ring{grid-template-columns:1fr;gap:10px}
  .score-num{font-size:46px;font-weight:900;letter-spacing:-1px}
  .grid[style*="1.4fr"],.grid[style*="1.2fr"],.grid[style*="1.1fr"]{grid-template-columns:1fr !important}
  .conf-line .bar{width:120px;height:7px}
  .flow-node{min-width:0;flex:1 1 auto;padding:7px 9px;border-radius:8px;font-size:11.5px}
  .flow-arrow{display:none}
  #toast{bottom:calc(74px + env(safe-area-inset-bottom));font-size:12px;padding:9px 14px;border-radius:10px}
  footer{display:none}  /* APP 模式隐藏页脚，由底部 Tab 顶替 */
  .date-fields{width:100%}
  .date-fields input{flex:1}
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .pager{justify-content:space-between;gap:6px;font-size:12px;padding:6px 0}
  .pager .btn{font-size:12px;padding:6px 12px;border-radius:9px}
  .btn{padding:8px 12px;border-radius:9px;font-size:12.5px}
  .btn-primary{background:var(--grad);color:#fff;border:0;font-weight:600}
  /* —— 底部 Tab 栏（APP 风格） —— */
  .app-tabbar{
    position:fixed;left:0;right:0;bottom:0;z-index:100;
    background:var(--panel);
    border-top:1px solid var(--border);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));
    display:grid;grid-template-columns:repeat(5,1fr);
    backdrop-filter:saturate(140%) blur(12px);
  }
  .app-tabbar .tab{
    display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:2px;padding:6px 0;color:var(--dim);font-size:10.5px;font-weight:500;
    background:transparent;border:0;cursor:pointer;transition:color .15s ease;
  }
  .app-tabbar .tab svg{width:22px;height:22px;stroke-width:1.8}
  .app-tabbar .tab.on{color:var(--accent)}
  .app-tabbar .tab.on svg{stroke-width:2.2}
  .app-tabbar .tab .badge-dot{
    position:absolute;top:4px;right:50%;transform:translateX(12px);
    width:6px;height:6px;border-radius:50%;background:var(--up);
  }
  .app-tabbar .tab{position:relative}
}

/* APP 风格动画 */
@keyframes sheetUp{from{transform:translateY(100%)}to{transform:translateY(0)}}
@keyframes slideIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}

/* 桌面/平板隐藏 Tab 栏（仅手机显示） */
@media (min-width:481px){
  .app-tabbar{display:none !important}
}

/* ==================== 账户 / 登录门禁 / 广告 ==================== */
.userbox{display:flex;align-items:center;gap:8px;margin-left:6px;padding-left:10px;border-left:1px solid var(--border)}
.user-name{font-size:12.5px;color:var(--txt);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.auth-gate{position:fixed;inset:0;z-index:9999;background:var(--bg);display:flex;align-items:center;justify-content:center}
.gate-inner{display:flex;flex-direction:column;align-items:center}
.gate-spin{width:30px;height:30px;border:3px solid var(--border2);border-top-color:var(--accent);border-radius:50%;animation:sp .8s linear infinite;margin-top:18px}
@keyframes sp{to{transform:rotate(360deg)}}
.ad-mask{position:fixed;inset:0;z-index:8000;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:20px}
.ad-modal{background:var(--panel);border:1px solid var(--border);border-radius:16px;max-width:420px;width:100%;overflow:hidden;box-shadow:0 24px 70px rgba(0,0,0,.5)}
.ad-head{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border)}
.ad-tag{font-size:11px;padding:2px 8px;border-radius:20px;background:var(--panel2);color:var(--dim2);border:1px solid var(--border2)}
.ad-x{background:transparent;border:none;color:var(--dim);font-size:16px;cursor:pointer;padding:2px 6px}
.ad-x:hover{color:var(--txt)}
.ad-body{padding:0}
.ad-img{width:100%;display:block;max-height:240px;object-fit:cover}
.ad-title{font-size:16px;font-weight:700;padding:14px 16px 4px}
.ad-title-link{text-decoration:none;color:var(--txt)}
.ad-content{font-size:13px;color:var(--dim);padding:8px 16px 16px;line-height:1.7}

/* ==================== AI 策略分析 5 面板 ==================== */
.lab-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.lab-tab{padding:9px 16px;border-radius:10px;border:1px solid var(--border);background:var(--panel);color:var(--dim);cursor:pointer;font-size:13.5px;transition:.15s}
.lab-tab.on{background:var(--accent);color:#05231e;border-color:var(--accent);font-weight:600}
.lab-panel{display:none}
.lab-panel.on{display:block}
.kb-item{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 16px;margin-bottom:12px}
.kb-head{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.kb-head b{font-size:14px}
.kb-cat{font-size:11px;padding:2px 9px;border-radius:20px;background:var(--accent2);color:#fff;font-weight:600}
.kb-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.kb-content{font-size:12.5px;color:var(--dim);line-height:1.75}
.rep-list{margin-top:8px;border-top:1px dashed var(--border);padding-top:8px}
.rep-item{font-size:11.5px;color:var(--dim2);padding:3px 0}

/* 移动端：账户区/工具栏自适应 */
@media (max-width:767px){
  .userbox{border-left:none;padding-left:0;margin-left:0}
  .user-name{max-width:76px}
}

/* ============ v3 升级：实时渲染防跳动 ============ */
.num, [data-p], .oc-price, .lp-big, .tape-item b, .mono-badge, td.num {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}
#ovBody td[data-p], #ovBody td[data-g] { min-width: 86px; }
.oc-price { min-width: 84px; text-align: right; }
.oc-chg { min-width: 74px; text-align: right; }
.lp-big { min-width: 120px; display: inline-block; }
#sigtape .tape-item b { display: inline-block; min-width: 68px; text-align: right; }

/* ============ API 线路速度表 ============ */
.line-row { display: flex; gap: 10px; padding: 7px 4px; border-bottom: 1px solid var(--border); align-items: baseline; flex-wrap: wrap; }
.line-row.dim { opacity: .6; }
.lr-ex { min-width: 72px; font-weight: 600; font-size: 12.5px; }
.lr-urls { display: flex; flex-wrap: wrap; gap: 6px; }
.lr-url { font-size: 11.5px; padding: 2px 9px; border-radius: 6px; border: 1px solid var(--border); color: var(--dim); }
.lr-url.ok { color: var(--up); border-color: rgba(22,199,132,.4); }
.lr-url.mid { color: var(--warn); border-color: rgba(240,185,11,.4); }
.lr-url.bad { color: var(--down); border-color: rgba(246,70,93,.4); }
.lr-url.off { opacity: .35; text-decoration: line-through; }
.lr-url b { font-variant-numeric: tabular-nums; }
.lr-url i { color: var(--accent); font-style: normal; font-weight: 700; }
.line-note { font-size: 11px; color: var(--dim2); padding: 8px 2px 2px; }

/* ============ 品种分析：关键价位 / 图表参数 ============ */
.lvl-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; }
.lvl-item { background: var(--panel); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; }
.lv-n { font-size: 11px; font-weight: 700; }
.lv-v { font-size: 15px; font-weight: 700; margin-top: 3px; font-variant-numeric: tabular-nums; }
.lv-s { font-size: 10.5px; color: var(--dim2); margin-top: 2px; }
.chart-cfg { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; padding: 8px 4px 2px; font-size: 12px; color: var(--dim); }
.chart-cfg .cc-title { font-weight: 700; color: var(--text); }
.chart-cfg label { display: flex; gap: 5px; align-items: center; }
.chart-cfg input { width: 62px; }

/* ============ 策略知识库 v2 卡片 ============ */
.fg-badge { font-size: 10.5px; padding: 1px 8px; border-radius: 6px; }
.manual-tag { background: rgba(240,185,11,.14); color: var(--warn); border: 1px solid rgba(240,185,11,.4); }
.s-v2-row { display: flex; gap: 12px; flex-wrap: wrap; margin: 8px 0; }
.s-bw { flex: 1; min-width: 180px; }
.bw-label { font-size: 11px; color: var(--dim); }
.bw-label b { color: var(--text); font-variant-numeric: tabular-nums; }
.bw-track { position: relative; height: 8px; border-radius: 5px; background: var(--panel); border: 1px solid var(--border); overflow: hidden; margin-top: 4px; }
.bw-track i { display: block; height: 100%; background: linear-gradient(90deg, #0e7490, #2dd4bf); }
.rm-frame { position: absolute; top: 0; left: 0; height: 100%; border-right: 2px solid var(--gold); background: rgba(240,185,11,.12); }
.s-ledger { display: flex; gap: 10px; flex-wrap: wrap; font-size: 11px; color: var(--dim2); align-items: center; }
.sl-item b { color: var(--text); font-variant-numeric: tabular-nums; }
.sl-item i { font-style: normal; color: var(--warn); font-size: 10px; }
.sl-item .neg { color: var(--down); }
.regime-light { font-size: 11px; }
.regime-light.green { color: var(--up); }
.regime-light.gray { color: var(--dim2); }
.regime-light.red { color: var(--down); }
.tag.veto { background: rgba(246,70,93,.14); color: var(--down); border: 1px solid rgba(246,70,93,.4); }
.neg { color: var(--down) !important; }

/* ============ 策略级记账表 ============ */
.ledger-head { font-size: 12.5px; color: var(--dim); margin-bottom: 8px; }
.ledger-table { border: 1px solid var(--border); border-radius: 10px; overflow: hidden; font-size: 12px; }
.lt-row { display: grid; grid-template-columns: 1.3fr .6fr .7fr 1fr 1fr .8fr 1.4fr; gap: 6px; padding: 7px 12px; border-bottom: 1px solid var(--border); align-items: center; }
.lt-row:last-child { border-bottom: none; }
.lt-row.lt-head { background: var(--panel); color: var(--dim2); font-size: 11px; font-weight: 700; }
@media (max-width: 767px) {
  .lt-row { grid-template-columns: 1.2fr .6fr 1fr 1fr; }
  .lt-row span:nth-child(5), .lt-row span:nth-child(6), .lt-row span:nth-child(7) { display: none; }
  .lt-row.lt-head span:nth-child(5), .lt-row.lt-head span:nth-child(6), .lt-row.lt-head span:nth-child(7) { display: none; }
}
