/* 锐智设计令牌 — 漂浮窗终端 · cybertruck/starlink 座舱美学 */
:root{
  --bg:#0f1923;--bg2:#0b131b;--accent:#00b4d8;--accent-dim:rgba(0,180,216,.15);
  --green:#22c55e;--blue:#3b82f6;--yellow:#eab308;--red:#ef4444;
  --text:#e8ecf0;--text2:#8899aa;--text3:#556677;
  --panel:rgba(255,255,255,.04);--pb:rgba(255,255,255,.08);--glass:rgba(15,25,35,.85);
  --P:#fff;--pt:#1a2330;--pt3:#9ca3af;--pbg:#f5f7fa;--R:12px;--R-sm:6px;
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Noto Sans SC',system-ui,sans-serif;background:var(--bg);color:var(--text);height:100vh;overflow:hidden;user-select:none}

/* 顶栏 */
.topbar{position:fixed;top:0;left:0;right:0;height:54px;z-index:500;display:flex;align-items:center;gap:14px;padding:0 18px;background:var(--glass);backdrop-filter:blur(20px);border-bottom:1px solid var(--pb)}
.logo{font-size:16px;font-weight:700;letter-spacing:2px;white-space:nowrap}
.logo span{font-weight:300;color:var(--text2);font-size:11px;margin-left:6px}
.sbar{flex:1 1 120px;min-width:90px;max-width:340px;height:34px;background:var(--panel);border:1px solid var(--pb);border-radius:17px;padding:0 14px;display:flex;align-items:center;gap:8px}
.quickbar{flex-shrink:0}.arrangebar{flex-shrink:0}.logo{flex-shrink:0}
.sbar input{background:none;border:none;color:var(--text);font-size:12px;font-family:inherit;outline:none;flex:1}
.sbar input::placeholder{color:var(--text3)}
.quickbar{display:flex;gap:6px;margin-left:auto}
.qbtn{height:30px;padding:0 12px;border-radius:15px;background:var(--panel);border:1px solid var(--pb);color:var(--text2);font-size:11px;font-family:inherit;cursor:pointer;transition:.15s;white-space:nowrap}
.qbtn:hover{border-color:var(--accent);color:var(--accent)}
.qbtn.accent{background:var(--accent-dim);border-color:var(--accent);color:var(--accent);font-weight:600}

/* 地图底层画布 */
#map-base{position:fixed;top:54px;left:0;right:0;bottom:0;background:var(--bg2);background-image:radial-gradient(circle at 60% 40%,rgba(0,180,216,.04),transparent 60%)}
#map-base svg{display:block}
.map-empty{position:absolute;top:40%;left:0;right:0;text-align:center;color:var(--text3);font-size:14px}
.nd{cursor:pointer}.nd:hover circle{opacity:1}.nd text{pointer-events:none}
.rl{cursor:pointer}.rl:hover{opacity:.7!important;stroke-width:2.4}
.legend{position:fixed;bottom:12px;left:12px;z-index:400;background:var(--glass);backdrop-filter:blur(10px);border:1px solid var(--pb);border-radius:var(--R-sm);padding:7px 12px;font-size:10px;color:var(--text2)}
.legend b{color:var(--accent)}

/* 漂浮卡 */
#cardContainer{position:fixed;inset:54px 0 0 0;pointer-events:none;z-index:300}
.card{position:fixed;pointer-events:auto;background:var(--P);border-radius:var(--R);box-shadow:0 10px 40px rgba(0,0,0,.45);border:1px solid #e5e7eb;display:flex;flex-direction:column;max-height:calc(100vh - 90px);overflow:hidden;min-width:280px}
.card.front{box-shadow:0 16px 54px rgba(0,0,0,.55)}
.c-head{padding:9px 12px;border-bottom:1px solid #eef1f4;cursor:grab;display:flex;align-items:center;gap:8px;background:var(--pbg);flex-shrink:0}
.c-icon{width:22px;height:22px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0}
.c-icon.airport{background:#dbeafe;color:#1d4ed8}.c-icon.route{background:#dcfce7;color:#15803d}.c-icon.signal{background:#fef3c7;color:#92400e}
.c-icon.plan{background:#ede9fe;color:#6d28d9}.c-icon.watch{background:#fee2e2;color:#b91c1c}.c-icon.news{background:#e0f2fe;color:#0369a1}.c-icon.vault{background:#fef9c3;color:#a16207}.c-icon.ai{background:#cffafe;color:#0891b2}
.c-title{flex:1;font-size:12px;font-weight:700;color:var(--pt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.c-sub{font-size:9px;color:var(--pt3)}
.c-close{width:22px;height:22px;border:none;background:none;color:var(--pt3);cursor:pointer;font-size:13px;border-radius:50%;flex-shrink:0}
.c-close:hover{background:#fee2e2;color:#b91c1c}
.c-body{flex:1;overflow-y:auto;padding:11px 13px;font-size:11px;color:var(--pt)}
.sec{font-size:10px;font-weight:700;color:#475569;margin:11px 0 6px;letter-spacing:.5px}
.source{font-size:8px;color:var(--pt3);margin-top:8px;border-top:1px solid #eef1f4;padding-top:5px}
/* 操作工具条：与统计格子/青色强调同语言(starlink 亮色座舱) */
.c-actions{display:flex;flex-wrap:wrap;gap:6px;margin:9px 0 2px}
.cab{
  font-size:10.5px;font-weight:600;letter-spacing:.2px;
  padding:6px 11px;
  background:var(--pbg);color:#0369a1;
  border:1px solid #e3e8ef;border-radius:var(--R-sm);
  cursor:pointer;font-family:inherit;
  display:inline-flex;align-items:center;gap:4px;
  transition:background .14s,border-color .14s,color .14s,box-shadow .14s;
}
.cab:hover{background:#eaf4fb;border-color:var(--accent);color:#0e7490;box-shadow:0 0 0 1px rgba(0,180,216,.18)}
.cab:active{background:#dff0f8}
.cab-primary{background:var(--accent);border-color:var(--accent);color:#fff}
.cab-primary:hover{background:#0098bb;border-color:#0098bb;color:#fff;box-shadow:0 2px 9px rgba(0,180,216,.32)}

/* 机场卡 */
.ac-stats{display:flex;gap:8px}
.ac-stats>div{flex:1;text-align:center;background:var(--pbg);border-radius:6px;padding:8px 4px}
.ac-stats b{font-size:18px;color:#0369a1}.ac-stats span{display:block;font-size:8px;color:var(--pt3);margin-top:2px}
.rlist{max-height:300px;overflow-y:auto}
.rli{display:flex;align-items:center;gap:8px;padding:6px 4px;border-bottom:1px solid #f1f5f9;cursor:pointer;border-radius:4px}
.rli:hover{background:#f0f7ff}
.rli-to{font-weight:700;min-width:42px}.rli-f{color:#0369a1;font-size:10px;min-width:42px;font-variant-numeric:tabular-nums}
.rli-b{font-size:9px;font-weight:700;flex:1}.rli-intl{font-size:8px;padding:1px 5px;border-radius:8px;background:#e0f2fe;color:#0369a1}
.rli-watch{background:none;border:none;cursor:pointer;opacity:.4;font-size:11px}.rli-watch:hover{opacity:1}

/* OD 信号卡 */
.od-rate{display:flex;align-items:center;justify-content:space-between;border:1px solid;border-radius:8px;padding:8px 10px;margin-bottom:8px}
.od-tier{font-size:14px;font-weight:700}.od-conf{font-size:9px;color:var(--pt3)}
.od-cur{font-size:11px;color:#475569;margin-bottom:4px}
.sig{padding:7px 8px;border-radius:6px;background:var(--pbg);margin-bottom:5px}
.sig.na{opacity:.6}
.sig-n{font-size:10px;font-weight:600;color:#334155}.sig-v{float:right;font-size:11px;font-weight:700;color:#0369a1}
.sig.na .sig-v{color:var(--pt3)}
.sig-r{font-size:9px;color:#64748b;margin-top:3px;clear:both}
/* 可展开信号行 */
.sig-expandable{cursor:pointer;user-select:none}
.sig-expandable:hover{background:#e8f0fe}
.sig-expand-btn{float:right;font-size:9px;color:#94a3b8;margin-left:4px;margin-top:1px}
.sig-detail{padding-top:6px;clear:both}
.sig-detail-inner{font-size:9px;color:#475569;background:#f8fafc;border-radius:4px;padding:6px 8px;border:1px solid #e2e8f0;line-height:1.6}
.sig-comp-chips{display:flex;flex-wrap:wrap;gap:3px;margin-top:5px}
.chip-drill{cursor:pointer;background:#dbeafe;color:#1d4ed8}
.chip-drill:hover{background:#bfdbfe}
.mb-row-drill{cursor:pointer}
.mb-row-drill:hover .mb-l{color:#3b82f6}
.od-reasons{font-size:10px;color:#475569;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:6px 8px;margin-top:6px}

/* 评估卡 */
.sub2{font-size:10px;color:var(--pt3);margin-bottom:6px}
.ta{width:100%;border:1px solid #e5e7eb;border-radius:6px;padding:7px;font-size:11px;font-family:inherit;color:var(--pt);resize:vertical}
.as-card{border:1px solid #eef1f4;border-radius:6px;padding:8px;margin-top:6px;cursor:pointer}
.as-card:hover{background:#f0f7ff}.as-act{font-size:9px;padding:1px 6px;border-radius:8px;background:#ede9fe;color:#6d28d9}
.as-cur{font-size:9px;color:#64748b;margin-top:3px}

/* 提醒卡 */
.wa-row{display:flex;align-items:center;gap:8px;padding:7px;border-bottom:1px solid #f1f5f9}
.wa-od{font-weight:700;min-width:80px}.wa-alert{flex:1;font-size:10px;color:#b45309;font-weight:600}
.wa-ok{flex:1;font-size:10px;color:var(--pt3)}.wa-del{background:none;border:none;color:var(--pt3);cursor:pointer;font-size:13px}
.locked{padding:14px;text-align:center;font-size:11px;color:var(--pt3)}

/* 资讯卡 */
.news-it{display:block;padding:8px;border-bottom:1px solid #f1f5f9;text-decoration:none;color:var(--pt)}
.news-it:hover{background:#f0f7ff}.news-t{font-size:11px;font-weight:600;line-height:1.4}.news-m{font-size:9px;color:var(--pt3);margin-top:3px}
.news-lang{display:inline-block;font-size:8px;font-weight:700;padding:0 3px;border-radius:3px;margin-right:4px;vertical-align:middle;line-height:14px}
.news-lang-zh{background:#dbeafe;color:#1d4ed8}.news-lang-en{background:#dcfce7;color:#15803d}
.loading2{padding:24px;text-align:center;color:var(--pt3);font-size:11px}

/* 金库卡 */
.vrole{font-size:10px;color:#475569;margin-bottom:8px}
.vb{font-size:10px;padding:3px 8px;border:1px solid #e5e7eb;border-radius:10px;background:#fff;cursor:pointer;margin-left:4px}
.vb.on{background:#fef9c3;border-color:#a16207;color:#a16207;font-weight:700}
.vnote{font-size:9px;color:#a16207;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:6px 8px;margin-bottom:6px}
.vi{width:100%;border:1px solid #e5e7eb;border-radius:6px;padding:6px;font-size:11px;margin-bottom:5px;font-family:inherit}
.vrec{padding:6px;border-bottom:1px solid #f1f5f9;font-size:10px}.vrec span{color:#64748b}
.vsw{display:flex;align-items:center;gap:6px;font-size:10px;color:#475569}
.krc-deny{color:#b91c1c;font-size:11px;padding:8px;background:#fee2e2;border-radius:6px;margin-top:6px}
.krc-ok{color:#15803d;font-size:11px;padding:8px;background:#dcfce7;border-radius:6px;margin-top:6px}

/* AI 卡 */
.ai-msgs{height:300px;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding-bottom:6px}
.ai-welcome{font-size:11px;color:var(--pt3);text-align:center;padding:16px 8px}
.ai-msg{max-width:88%;padding:7px 10px;border-radius:10px;font-size:11px;line-height:1.5}
.ai-msg.user{align-self:flex-end;background:#dbeafe;color:#1e3a8a}
.ai-msg.bot{align-self:flex-start;background:var(--pbg);color:var(--pt)}
.ai-text{white-space:pre-wrap}.ai-src{font-size:8px;color:var(--pt3);margin-top:4px}
.dots{color:var(--pt3)}
.ai-foot{display:flex;gap:6px;margin-top:8px;border-top:1px solid #eef1f4;padding-top:8px}
.ai-in{flex:1;border:1px solid #e5e7eb;border-radius:16px;padding:6px 12px;font-size:11px;font-family:inherit;outline:none}
.ai-send{width:32px;border:none;border-radius:50%;background:var(--accent);color:#fff;cursor:pointer}

/* tooltip + toast */
.tooltip{position:fixed;z-index:600;background:var(--glass);backdrop-filter:blur(12px);border:1px solid var(--pb);border-radius:6px;padding:6px 9px;font-size:10px;color:var(--text);pointer-events:none;display:none;max-width:240px}
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:700;background:var(--glass);backdrop-filter:blur(12px);border:1px solid var(--accent);color:var(--accent);padding:8px 16px;border-radius:20px;font-size:12px;animation:fadein .2s}
@keyframes fadein{from{opacity:0}to{opacity:1}}

/* === v2 排列+交互打磨 === */
.arrangebar{display:flex;gap:4px;margin-left:8px;padding-left:8px;border-left:1px solid var(--pb)}
.abtn{width:30px;height:30px;border-radius:8px;background:var(--panel);border:1px solid var(--pb);color:var(--text2);font-size:13px;cursor:pointer}
.abtn:hover{border-color:var(--accent);color:var(--accent)}
.c-min{width:22px;height:22px;border:none;background:none;color:var(--pt3);cursor:pointer;font-size:11px;border-radius:50%}
.c-min:hover{background:#e0f2fe;color:#0369a1}
.c-resize{position:absolute;right:2px;bottom:2px;width:14px;height:14px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 50%,var(--pt3) 50%,var(--pt3) 60%,transparent 60%,transparent 70%,var(--pt3) 70%,var(--pt3) 80%,transparent 80%);opacity:.5}
.card.mini{display:none}
#dock{position:fixed;left:0;right:0;bottom:0;z-index:450;display:flex;gap:6px;padding:6px 12px;flex-wrap:wrap;pointer-events:none}
.dock-chip{pointer-events:auto;background:var(--glass);backdrop-filter:blur(10px);border:1px solid var(--pb);color:var(--text2);font-size:10px;padding:5px 12px;border-radius:14px;cursor:pointer;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dock-chip:hover{border-color:var(--accent);color:var(--accent)}
#links{position:fixed;top:54px;left:0;pointer-events:none;z-index:280}
/* 趋势小图 */
.mb-row{display:flex;align-items:center;gap:6px;margin:3px 0}
.mb-l{font-size:9px;color:#64748b;min-width:48px}
.mb-track{flex:1;height:8px;background:#eef2f7;border-radius:4px;overflow:hidden}
.mb-fill{height:100%;border-radius:4px}
.mb-v{font-size:9px;color:#334155;min-width:24px;text-align:right;font-variant-numeric:tabular-nums}
.chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.chip{font-size:8px;padding:2px 6px;border-radius:8px;background:#eff6ff;color:#1d4ed8}
.mini-note{font-size:8px;color:var(--pt3);margin-top:5px}
.dest-econ{font-size:11px;color:#a16207;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:6px 8px;margin-bottom:6px}
/* CapEx 四维势能 (资本镜头) */
.capex-block{border-left:3px solid #8b5cf6;padding-left:4px}
.capex-header{display:flex;align-items:center;gap:6px;margin-bottom:6px}
.capex-score{font-size:13px;font-weight:800;color:#7c3aed;margin-left:auto}
.capex-conf{font-size:9px;padding:1px 5px;border-radius:8px;background:#f3e8ff;color:#6d28d9}
.conf-高{background:#dcfce7;color:#15803d}.conf-中{background:#fef9c3;color:#854d0e}.conf-低{background:#fee2e2;color:#991b1b}
.capex-dims{display:flex;flex-direction:column;gap:3px}
.capex-dim,.capex-dim.na{display:flex;align-items:center;gap:5px}
.capex-dim-n{font-size:9px;color:#64748b;min-width:64px}
.capex-dim-track{flex:1;height:6px;background:#eef2f7;border-radius:3px;overflow:hidden}
.capex-dim-fill{height:100%;border-radius:3px;transition:width .3s}
.capex-dim-v{font-size:9px;color:#334155;min-width:24px;text-align:right;font-variant-numeric:tabular-nums}
.capex-dim.na .capex-dim-v{color:var(--pt3)}
.capex-dim.na .capex-dim-track{opacity:0.3}

/* === v3 地图缩放·中文搜索·归组 === */

/* 地图 cursor */
#map-base svg{cursor:grab}
#map-base svg:active{cursor:grabbing}

/* 卡头色条 */
.card-group-bar{height:3px;width:100%;border-radius:var(--R) var(--R) 0 0;flex-shrink:0}

/* 组操作按钮 */
.c-group{width:22px;height:22px;border:none;background:none;color:var(--pt3);cursor:pointer;font-size:12px;border-radius:50%;flex-shrink:0}
.c-group:hover{background:rgba(0,180,216,.15);color:var(--accent)}

/* 组操作菜单 */
.group-menu{position:fixed;z-index:800;background:var(--glass);backdrop-filter:blur(16px);border:1px solid var(--pb);border-radius:10px;padding:8px;min-width:160px;box-shadow:0 8px 32px rgba(0,0,0,.5)}
.gm-title{font-size:10px;color:var(--text2);padding:2px 8px 6px;border-bottom:1px solid var(--pb);margin-bottom:4px;letter-spacing:.4px}
.gm-btn{display:block;width:100%;text-align:left;padding:6px 10px;border:none;background:none;color:var(--text);font-size:11px;font-family:inherit;cursor:pointer;border-radius:6px}
.gm-btn:hover{background:var(--panel)}
.gm-close{color:var(--red)}
.gm-close:hover{background:rgba(239,68,68,.12)}
.gm-cancel{color:var(--text2);margin-top:2px;border-top:1px solid var(--pb);padding-top:8px}

/* 中文搜索下拉 */
.search-dropdown{position:fixed;z-index:800;background:var(--glass);backdrop-filter:blur(20px);border:1px solid var(--pb);border-radius:10px;box-shadow:0 8px 32px rgba(0,0,0,.5);display:none;overflow:hidden;max-height:280px;overflow-y:auto}
.sd-item{display:flex;align-items:center;gap:8px;padding:8px 14px;cursor:pointer;transition:.1s}
.sd-item:hover{background:var(--accent-dim)}
.sd-iata{font-size:12px;font-weight:700;color:var(--accent);min-width:36px;font-family:monospace}
.sd-name{font-size:11px;color:var(--text);flex:1}
.sd-city{font-size:10px;color:var(--text2)}
.sd-empty{padding:12px 16px;font-size:11px;color:var(--text3);text-align:center}

/* === 完整性清单卡 === */
.cov-stats{display:flex;gap:6px;margin-bottom:4px}
.cov-stat{flex:1;text-align:center;background:var(--pbg);border-radius:6px;padding:7px 4px}
.cov-stat b{font-size:16px;color:#0369a1;display:block}
.cov-stat span{font-size:8px;color:var(--pt3)}
.cov-table{width:100%;border-collapse:collapse;margin-top:4px}
.cov-table th{font-size:9px;color:#475569;font-weight:700;text-align:left;padding:4px 6px;border-bottom:1px solid #eef1f4;letter-spacing:.4px}
.cov-table td{font-size:10px;padding:5px 6px;border-bottom:1px solid #f1f5f9;vertical-align:middle}
.cov-table tr:last-child td{border-bottom:none}
.cov-badge{display:inline-block;font-size:8px;font-weight:700;padding:2px 6px;border-radius:8px;white-space:nowrap}
.cov-badge.full{background:#dcfce7;color:#15803d}
.cov-badge.partial{background:#fef3c7;color:#92400e}
.cov-badge.pending{background:#f1f5f9;color:#64748b}
.cov-badge.none{background:#fee2e2;color:#b91c1c}
.cov-cov{font-size:9px;color:#64748b}
.cov-note{font-size:9px;color:#94a3b8;font-style:italic}
.cov-gaps{margin-top:4px}
.cov-gap-row{display:flex;align-items:center;gap:8px;padding:5px 4px;border-bottom:1px solid #f1f5f9}
.cov-gap-row:last-child{border-bottom:none}
.cov-gap-iata{font-weight:700;min-width:38px;font-size:11px;color:#0369a1}
.cov-gap-by{font-size:9px;color:#64748b;min-width:52px}
.cov-gap-flags{display:flex;gap:4px}
.cov-flag{font-size:8px;padding:2px 5px;border-radius:6px;white-space:nowrap}
.cov-flag.ok{background:#dcfce7;color:#15803d}
.cov-flag.miss{background:#fee2e2;color:#b91c1c}

/* === 数据地盘总览（完整性清单卡顶部摘要） === */
.ds-overview{background:var(--pbg);border-radius:8px;padding:10px 12px;margin-bottom:8px;border:1px solid #e2e8f0}
.ds-headline{display:flex;align-items:baseline;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.ds-big-num{font-size:28px;font-weight:800;color:#0369a1;line-height:1}
.ds-big-label{font-size:10px;color:var(--pt3);line-height:1.2}
.ds-divider{width:1px;height:28px;background:#e2e8f0;flex-shrink:0}
.ds-chips{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}
.ds-chip{font-size:8px;padding:2px 7px;border-radius:10px;background:#f1f5f9;color:#334155;border:1px solid #e2e8f0;white-space:nowrap}
.ds-status-bar{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ds-status-summary{font-size:10px;font-weight:700;color:#0369a1;white-space:nowrap}
.ds-status-badges{display:flex;gap:4px;flex-wrap:wrap}
.ds-sbadge{font-size:8px;font-weight:700;padding:2px 7px;border-radius:8px;white-space:nowrap}
.ds-sbadge.full{background:#dcfce7;color:#15803d}
.ds-sbadge.partial{background:#fef3c7;color:#92400e}
.ds-sbadge.pending{background:#f1f5f9;color:#64748b}
.ds-sbadge.none{background:#fee2e2;color:#b91c1c}

/* === M3 扫描器/对比/潜力榜卡 === */
.scan-tabs{display:flex;gap:4px;margin-bottom:8px;border-bottom:1px solid var(--pb);padding-bottom:6px}
.scan-tab{font-size:10px;padding:4px 10px;border:1px solid var(--pb);border-radius:10px;background:var(--pbg);color:var(--text2);cursor:pointer;font-family:inherit;transition:.1s}
.scan-tab:hover{border-color:var(--accent);color:var(--accent)}
.scan-tab.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
/* 机场范围筛选行 — scan card & ranking card */
.scan-scope-row{display:flex;align-items:center;gap:6px;margin-bottom:8px;padding:5px 8px;background:var(--pbg);border:1px solid #e5e7eb;border-radius:6px}
.scan-scope-lbl{font-size:10px;color:#475569;font-weight:600;white-space:nowrap;flex-shrink:0}
.scan-scope-input{flex:1;min-width:0;background:#fff;border:1px solid #d1d5db;border-radius:5px;color:var(--pt);font-size:11px;font-family:inherit;padding:3px 8px;outline:none;transition:.15s;text-transform:uppercase}
.scan-scope-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(0,180,216,.15)}
.scan-scope-input::placeholder{color:var(--pt3);text-transform:none;font-size:10px}
.scan-scope-btn{flex-shrink:0;font-size:10px;padding:4px 10px;border:1px solid #dbeafe;border-radius:6px;background:#f0f7ff;color:#0369a1;cursor:pointer;font-family:inherit;font-weight:600;transition:.1s;white-space:nowrap}
.scan-scope-btn:hover{background:#dbeafe;border-color:var(--accent);color:var(--accent)}
.scan-tbl{width:100%;border-collapse:collapse;font-size:10px}
.scan-tbl th{font-size:9px;color:#475569;font-weight:700;text-align:left;padding:4px 5px;border-bottom:1px solid #eef1f4;white-space:nowrap}
.scan-tbl td{padding:5px 5px;border-bottom:1px solid #f1f5f9;vertical-align:middle}
.scan-tbl tr:last-child td{border-bottom:none}
.scan-tbl tr:hover td{background:#f8fafc}
.scan-tbl tr.drill-row{cursor:pointer}.scan-tbl tr.drill-row:hover td{background:#e8f4fd;color:var(--text)}
.scan-meta{font-size:9px;color:#94a3b8;margin-bottom:6px}
.scan-note{font-size:9px;color:#a16207;background:#fffbeb;border:1px solid #fde68a;border-radius:5px;padding:5px 8px;margin-top:8px}
.cmp-lbl{font-size:9px;color:#64748b;font-weight:600;white-space:nowrap;min-width:70px}
.cmp-th-drill{cursor:pointer;color:var(--accent);text-decoration:underline dotted;transition:.1s}.cmp-th-drill:hover{color:var(--accent);opacity:.75}
.tbl-export-row{display:flex;justify-content:flex-end;margin-top:5px}
.btn-export{font-size:9px;padding:2px 9px;border:1px solid var(--pb);border-radius:8px;background:var(--pbg);color:var(--text2);cursor:pointer;font-family:inherit;transition:.1s}
.btn-export:hover{border-color:var(--accent);color:var(--accent)}
/* ── 模型工作台 ── */
.wb-layout{display:flex;gap:0;height:100%;min-height:320px}
.wb-left{width:180px;min-width:150px;border-right:1px solid var(--pb);overflow-y:auto;padding-right:6px;flex-shrink:0}
.wb-right{flex:1;overflow-y:auto;padding-left:10px}
.wb-placeholder{color:var(--pt3);font-size:11px;padding:20px 0;text-align:center}
.wb-model-row{display:flex;align-items:center;gap:5px;padding:5px 6px;border-radius:5px;cursor:pointer;font-size:10px;transition:.1s}
.wb-model-row:hover{background:var(--accent-dim)}
.wb-model-row.on{background:var(--accent-dim);border-left:2px solid var(--accent);padding-left:4px}
.wb-mid{flex:1;font-weight:600;color:var(--text2);font-family:monospace;font-size:9px}
.wb-mver{font-size:8px;color:#94a3b8}
.wb-mkind{font-size:7px;font-weight:700;padding:1px 5px;border-radius:6px;white-space:nowrap}
.wb-kind-formula{background:#dbeafe;color:#1d4ed8}
.wb-kind-bands{background:#fce7f3;color:#be185d}
.wb-kind-rules{background:#d1fae5;color:#065f46}
.wb-kind-params{background:#fef3c7;color:#92400e}
.wb-detail-header{display:flex;align-items:center;gap:6px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--pb)}
.wb-did{font-size:14px;font-weight:700;color:var(--accent);font-family:monospace}
.wb-params-tbl{width:100%;border-collapse:collapse;font-size:10px;margin-bottom:8px}
.wb-params-tbl th{font-size:9px;color:#475569;font-weight:700;text-align:left;padding:4px 5px;border-bottom:1px solid #eef1f4}
.wb-params-tbl td{padding:4px 5px;border-bottom:1px solid #f1f5f9;vertical-align:middle}
.wb-pk{color:#64748b;font-family:monospace;white-space:nowrap}
.wb-val-input,.wb-band-max,.wb-band-score,.wb-band-label,.wb-rule-when{background:var(--pbg);border:1px solid var(--pb);border-radius:4px;color:var(--text2);font-size:10px;padding:3px 6px;font-family:inherit;width:100%;box-sizing:border-box}
.wb-val-input:focus,.wb-band-max:focus,.wb-band-score:focus,.wb-band-label:focus,.wb-rule-when:focus{outline:none;border-color:var(--accent)}
.wb-rule-then{background:var(--pbg);border:1px solid var(--pb);border-radius:4px;color:var(--text2);font-size:9px;padding:3px 6px;font-family:monospace;box-sizing:border-box;width:100%}
.wb-rule-then:focus{outline:none;border-color:var(--accent)}
.wb-var{background:#f1f5f9;color:#0369a1;font-size:9px;padding:1px 4px;border-radius:3px;font-family:monospace}
.wb-actions{display:flex;gap:6px;margin:10px 0 8px;padding-bottom:8px;border-bottom:1px solid var(--pb)}
.wb-note{font-size:9px;color:#94a3b8;margin:4px 0;font-style:italic}
.wb-desc{background:linear-gradient(135deg,#1e293b,#0f172a);border-left:3px solid var(--accent);border-radius:6px;padding:8px 12px;font-size:11px;color:#cbd5e1;line-height:1.6;margin-bottom:10px}
.wb-param-hint{font-size:9px;color:#64748b;line-height:1.5;margin-top:2px;font-style:italic;max-width:320px}
.wb-param-hints-block{background:#0f172a;border-radius:5px;padding:6px 10px;margin:4px 0 8px;display:flex;flex-direction:column;gap:3px}
.wb-json-pre{background:var(--pbg);border:1px solid var(--pb);border-radius:5px;padding:8px;font-size:9px;font-family:monospace;overflow-x:auto;white-space:pre-wrap;word-break:break-all;color:var(--text2);margin:6px 0;max-height:160px;overflow-y:auto}
.wb-codesign-row{display:flex;gap:6px;align-items:center;margin:4px 0 8px}
.wb-intent-input{flex:1;background:var(--pbg);border:1px solid var(--pb);border-radius:6px;color:var(--text2);font-size:10px;padding:5px 10px;font-family:inherit}
.wb-intent-input:focus{outline:none;border-color:var(--accent)}

/* === M5 右键菜单 === */
#ctxmenu{position:fixed;z-index:900;background:var(--glass);backdrop-filter:blur(16px);border:1px solid var(--pb);border-radius:10px;padding:6px;min-width:150px;box-shadow:0 8px 32px rgba(0,0,0,.55);display:none}
#ctxmenu.visible{display:block}
.ctx-title{font-size:9px;color:var(--text3);padding:2px 8px 5px;border-bottom:1px solid var(--pb);margin-bottom:3px;letter-spacing:.4px}
.ctx-btn{display:block;width:100%;text-align:left;padding:6px 10px;border:none;background:none;color:var(--text);font-size:11px;font-family:inherit;cursor:pointer;border-radius:6px;white-space:nowrap}
.ctx-btn:hover{background:var(--accent-dim);color:var(--accent)}
.ctx-sep{height:1px;background:var(--pb);margin:3px 4px}

/* === M5 工作区保存/恢复 === */
.wsbtn{height:30px;padding:0 10px;border-radius:8px;background:var(--panel);border:1px solid var(--pb);color:var(--text2);font-size:11px;font-family:inherit;cursor:pointer;white-space:nowrap}
.wsbtn:hover{border-color:var(--accent);color:var(--accent)}

/* === M5 联动色组升级 === */
.card-group-bar{cursor:pointer;transition:height .15s}
.card[data-group].group-hl .card-group-bar{height:5px;box-shadow:0 0 6px currentColor}
.card-group-bar.pinned{height:5px;outline:2px solid currentColor;outline-offset:-1px}
.group-pin-label{font-size:8px;font-weight:700;padding:1px 5px;border-radius:0 0 4px 0;position:absolute;top:0;left:0;opacity:.85;pointer-events:none;color:#fff}

/* —— 登录门（客户试用版）—— */
.login-gate{position:fixed;inset:0;z-index:9999;background:radial-gradient(circle at 50% 35%,#0f1923,#070c12);display:flex;align-items:center;justify-content:center}
.login-card{width:320px;background:var(--P);border:1px solid #e5e7eb;border-radius:14px;box-shadow:0 20px 70px rgba(0,0,0,.5);padding:34px 30px 26px;text-align:center}
.login-logo{font-size:24px;font-weight:700;letter-spacing:3px;color:var(--pt)}
.login-logo span{font-size:11px;font-weight:300;letter-spacing:2px;color:var(--pt3);margin-left:4px}
.login-tag{font-size:11px;color:var(--pt3);margin:6px 0 22px}
.login-in{width:100%;height:40px;padding:0 13px;margin-bottom:11px;border:1px solid #dbe2ea;border-radius:8px;font-size:13px;font-family:inherit;color:var(--pt);outline:none;transition:border-color .14s}
.login-in:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(0,180,216,.12)}
.login-err{min-height:16px;font-size:11px;color:#dc2626;margin-bottom:4px}
.login-btn{width:100%;height:40px;background:var(--accent);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;letter-spacing:4px;cursor:pointer;font-family:inherit;transition:background .14s,box-shadow .14s}
.login-btn:hover{background:#0098bb;box-shadow:0 4px 16px rgba(0,180,216,.35)}
.login-hint{font-size:10px;color:var(--pt3);margin-top:16px;letter-spacing:.5px}

/* —— 客户需求：所有数据块可选中/复制（覆盖全局 user-select:none）—— */
.c-body, .c-body *{user-select:text}
.ai-msgs, .ai-msgs *{user-select:text}
input, textarea, .ai-in{user-select:text}
/* UI chrome 保持不可选(拖拽/点击不误选) */
button, .qbtn, .abtn, .wsbtn, .cab, .c-head, .c-title, .c-icon, .legend, .topbar > .logo{user-select:none}
