
.gly-top{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0}
.gly-stat{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius-sm);padding:8px 16px;font-size:13px;color:var(--text-2)}
.gly-stat b{color:var(--text);font-size:15px;margin-right:2px}
.cmp-go{margin-left:auto;background:var(--accent);color:var(--accent-fg);border:none;border-radius:var(--radius-sm);padding:8px 16px;font-size:13px;font-weight:bold;cursor:pointer;white-space:nowrap}
.cmp-go:hover{background:var(--accent-hover)}
.gly-tool{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:10px 0}
.gly-tool select{padding:6px 10px;border:1px solid var(--input-border);border-radius:var(--radius-sm);background:var(--input-bg);color:var(--text);font-size:13px}
.gly-tool label{font-size:12px;color:var(--text-3)}
.gly-dsc{font-size:11px;color:var(--text-3);line-height:1.7;margin:4px 0 10px}
.gly-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));gap:14px}
@media(max-width:860px){.gly-grid{grid-template-columns:1fr}}
#cardWrap{overflow-wrap:anywhere}            /* 长因子代码/英文串（f_ROC/f_MA/… 无空格）窄屏换行，防整页横向溢出 */
.gly-grid .gcard .ftr{margin-top:auto}       /* 网格等高：按钮/收藏沉到卡片底 */
.gcard{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius);padding:14px 16px;display:flex;flex-direction:column;gap:8px;cursor:pointer;}
.gcard:hover{border-color:var(--accent)}
.gcard .h{display:flex;align-items:flex-start;gap:8px}
.gcard .h .nm{font-size:15px;font-weight:bold;color:var(--text);flex:1;line-height:1.35}
.gcard .h .en{font-size:11px;color:var(--text-3);display:block;font-weight:normal}
.badge{font-size:12px;padding:2px 9px;border-radius:10px;white-space:nowrap;flex-shrink:0}
.b-ok{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent)}
.b-insp{background:var(--bg-soft);color:var(--text-2);border:1px solid var(--card-border)}
.b-pend{background:#f6e9c9;color:#7a5400;border:1px solid #d9b56a}  /* 实底化：原 rgba 半透明底审计算 1:1 且视觉糊 */
[data-theme="dark"] .b-pend{background:#3a3018;color:#e6a23c;border-color:#6b5520}
.gcard .inst{font-size:11px;color:var(--text-3)}
.gcard .logic{font-size:12.5px;color:var(--text-2);line-height:1.7}
.mscore{margin-left:auto;text-align:right;flex-shrink:0}
.mscore .v{font-size:15px;font-weight:bold;color:var(--warn)}
.mscore .l{font-size:11px;color:var(--text-3)}
.metrics{display:flex;gap:6px;flex-wrap:wrap;font-size:11px}
.metrics .m{background:var(--bg-soft);border:1px solid var(--card-border);border-radius:var(--radius-sm);padding:4px 8px;text-align:center;min-width:52px}
.metrics .m .mv{font-weight:bold;color:var(--text);font-size:12px}
.metrics .m .ml{color:var(--text-3);font-size:11px}
.effbox{display:flex;align-items:center;gap:10px}
.effring{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:15px;color:#fff;flex-shrink:0;border:3px solid #fff}
.effring small{font-size:9px;font-weight:normal;opacity:.85}
.ftr{display:flex;gap:8px;align-items:center;margin-top:2px}
.ftr .btn{background:var(--btn-bg);color:var(--text-2);border:1px solid var(--btn-border);border-radius:var(--radius-sm);padding:6px 12px;font-size:12px;cursor:pointer}
.ftr .btn:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.ftr .btn.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}
.ftr .btn.primary:hover{background:var(--accent-hover)}
.ftr .btn:disabled{opacity:.45;cursor:not-allowed}
.ftr .sp{flex:1}
.fav{cursor:pointer;font-size:16px;user-select:none;color:var(--text-3)}
.fav.on{color:#e6a23c}
.gdet{display:none;border-top:1px dashed var(--card-border);padding-top:10px;font-size:12px;color:var(--text-2);line-height:1.8;cursor:auto}
.gcard.open .gdet{display:block}
.gdet .sec{font-weight:bold;color:var(--text);margin:6px 0 2px;font-size:12px}
.chips{display:flex;flex-wrap:wrap;gap:4px}
.chip{font-size:10.5px;font-family:Consolas,monospace;padding:1px 7px;border-radius:10px;border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text-2);}
.chip.wpos{color:var(--down,#0a7d33)}
.chip.wneg{color:var(--up,#d93026)}
.evrow{display:flex;gap:6px;font-size:11px;color:var(--text-3)}
.evrow b{color:var(--text-2);min-width:56px}
table.gbt{width:100%;border-collapse:collapse;font-size:11px;margin-top:4px}
table.gbt td,table.gbt th{border-bottom:1px solid var(--card-border);padding:3px 6px;text-align:right}
table.gbt th{color:var(--text-3);font-weight:normal;font-size:10.5px}
table.gbt td:first-child,table.gbt th:first-child{text-align:left}
.up{color:var(--down,#0a7d33)}.down{color:var(--up,#d93026)}
.foot{font-size:10.5px;color:var(--text-3);margin-top:18px;line-height:1.8;border-top:1px solid var(--card-border);padding-top:10px}
.gly-empty{color:var(--text-3);font-size:13px;padding:40px;text-align:center}
.sortbar{display:inline-flex;gap:2px;border:1px solid var(--input-border);border-radius:var(--radius-sm);overflow:hidden}
.sortbar button{background:var(--input-bg);color:var(--text-2);border:none;padding:6px 14px;font-size:12px;cursor:pointer}
.sortbar button.on{background:var(--accent);color:var(--accent-fg)}
/* ===== 对比台 ===== */
.cmp-view{display:none}
.cmp-top{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0}
.cmp-top .btn{background:var(--btn-bg);color:var(--text-2);border:1px solid var(--btn-border);border-radius:var(--radius-sm);padding:7px 14px;font-size:13px;cursor:pointer;white-space:nowrap}
.cmp-top .btn:hover{color:var(--accent);border-color:var(--accent)}
.cmp-top .btn.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}
.cmp-top .btn.primary:disabled{opacity:.5;cursor:not-allowed}
.cmp-tool{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0 10px;font-size:12px;color:var(--text-2)}
.hseg{display:inline-flex;gap:2px;border:1px solid var(--input-border);border-radius:var(--radius-sm);overflow:hidden}
.hseg button{background:var(--input-bg);color:var(--text-2);border:none;padding:5px 12px;font-size:12px;cursor:pointer}
.hseg button.on{background:var(--accent);color:var(--accent-fg)}
.cchips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.cchip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--card-border);border-radius:14px;background:var(--bg-soft);color:var(--text-2);font-size:12px;padding:3px 10px;cursor:pointer;user-select:none}
.cchip i{width:9px;height:9px;border-radius:50%;display:inline-block;flex-shrink:0}
.cchip.off{opacity:.35;text-decoration:line-through}
.cchip .x{color:var(--text-3);font-weight:bold;margin-left:2px}
.cchip .x:hover{color:var(--up)}
.cmp-card{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius);padding:12px 14px;margin-bottom:12px}
.cmp-card .t{font-size:13px;font-weight:bold;color:var(--text);margin-bottom:8px}
.cmp-legend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:11px;color:var(--text-2);margin-bottom:6px}
.clg{cursor:pointer;display:inline-flex;align-items:center;gap:5px;padding:2px 6px;border-radius:10px}
.clg:hover{background:var(--bg-soft)}
.clg.off{opacity:.35;text-decoration:line-through}
.clg i{width:8px;height:8px;border-radius:50%;display:inline-block}
.cmp-note{font-size:11px;color:var(--text-3);margin:6px 0;line-height:1.7}
table.ct{width:100%;border-collapse:collapse;font-size:12px}
table.ct th,table.ct td{border-bottom:1px solid var(--card-border);padding:5px 8px;text-align:right;white-space:nowrap}
table.ct th{color:var(--text-3);font-weight:normal;font-size:11px;cursor:pointer;user-select:none}
table.ct th:hover{color:var(--accent)}
table.ct th .ar{font-size:9px;color:var(--accent)}
table.ct td:first-child,table.ct th:first-child{text-align:left}
table.ct .nmc{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--text)}
table.ct .nmc i{width:9px;height:9px;border-radius:50%;display:inline-block;flex-shrink:0}
.cmp-loading{color:var(--accent);font-size:12px;padding:6px 0}
.cmp-err{color:var(--up);font-size:12px;padding:6px 0}
/* 窄屏横向滚动容器（表宽>视口时只滚表格，不撑破整页） */
.cmp-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
#cmpTableWrap,#gridTableWrap{overflow-x:auto}
.cmp-tool select{min-width:0}
.empty-note{color:var(--text-3);font-size:12px;padding:18px;text-align:center}
/* ===== 参数网格热力图（L2#9） ===== */
table.grmat{border-collapse:separate;border-spacing:3px;font-size:11px}
table.grmat th{color:var(--text-3);font-weight:normal;font-size:10.5px;padding:2px 6px;text-align:center;white-space:nowrap}
table.grmat th.rot{writing-mode:vertical-lr;transform:rotate(180deg);max-height:120px;padding:6px 2px}
table.grmat td.rh{color:var(--text-2);font-size:11px;padding:2px 8px;text-align:right;white-space:nowrap}
.gcell{min-width:86px;min-height:44px;border-radius:6px;cursor:pointer;text-align:center;padding:5px 8px;transition:box-shadow .12s;position:relative;user-select:none;border:2px solid transparent}
.gcell:hover{box-shadow:0 0 0 2px var(--accent)}
.gcell.sel{border-color:var(--accent)}
.gcell .v{font-size:13.5px;font-weight:bold;line-height:1.25}
.gcell .w{font-size:9.5px;opacity:.85;line-height:1.2}
.gcell.dim{opacity:.45}
.grmat td.gst{font-size:11px;color:var(--text-3);text-align:center;padding:20px}
/* ===== 三态页签（唯一入口，替代旧统计条里的隐藏按钮） ===== */
.vtabs{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0 6px}
.vtabs button{background:var(--btn-bg);color:var(--text-2);border:1px solid var(--btn-border);border-radius:var(--radius-sm);padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}
.vtabs button:hover{color:var(--accent);border-color:var(--accent)}
.vtabs button.on{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}
@media(max-width:560px){
  .vtabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
  .vtabs button{padding:8px 2px;font-size:12px;text-align:center;min-width:0}
}
/* ===== 卡片流首屏「PK 速览」（核心结论不点也能看到） ===== */
.cmp-snap{background:var(--card);border:1px solid var(--card-border);border-left:3px solid var(--accent);border-radius:var(--radius);padding:10px 14px;margin:6px 0 12px}
.snap-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--text);margin-bottom:8px}
.snap-h b{font-size:13.5px}
.snap-sub{font-size:11px;color:var(--text-3);font-weight:normal}
.snap-go{margin-left:auto;background:var(--accent);color:var(--accent-fg);border:none;border-radius:var(--radius-sm);padding:5px 12px;font-size:12px;font-weight:bold;cursor:pointer;white-space:nowrap}
.snap-go:hover{background:var(--accent-hover)}
.snap-rows{display:flex;flex-direction:column;gap:5px}
.snap-row{display:grid;grid-template-columns:46px minmax(0,1fr) minmax(50px,1.5fr) 64px;align-items:center;gap:8px;font-size:12px}
.snap-tag{font-size:10px;font-weight:bold;color:var(--accent-fg);background:var(--accent);border-radius:9px;text-align:center;padding:1px 0;white-space:nowrap}
.snap-row:last-child .snap-tag{background:var(--text-3)}
.snap-nm{color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.snap-bar{background:var(--bg-soft);border-radius:4px;height:12px;overflow:hidden;min-width:0}
.snap-bar i{display:block;height:100%;background:var(--accent);opacity:.75;border-radius:4px}
.snap-v{text-align:right;font-weight:bold;color:var(--text)}
.snap-row.neg .snap-v{color:var(--down)}
.snap-row.neg .snap-bar i{background:var(--down);opacity:.6}
@media(max-width:560px){
  .snap-row{grid-template-columns:42px minmax(0,1fr) minmax(36px,.9fr) 58px;gap:5px;font-size:11.5px}
  .snap-go{margin-left:0}
}
/* 图例长名不换行（实测「均线/多头·趋势跟随」「多因子均衡·IC加权」被硬断成 2~3 行） */
.clg-nm{display:inline-block;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
@media(max-width:560px){.clg-nm{max-width:110px}}
