.bm-mode-tabs{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
.bm-mode{flex:1;min-width:140px;display:flex;align-items:center;justify-content:center;gap:8px;padding:11px 14px;border:1px solid rgba(48,54,61,.6);border-radius:10px;cursor:pointer;font-size:.88rem;color:#9CA3AF;background:rgba(10,14,23,.6);transition:all .2s;user-select:none}
.bm-mode input{display:none}
.bm-mode:has(input:checked){border-color:rgba(37,99,235,.6);color:var(--cyan);background:rgba(37,99,235,.08);box-shadow:0 0 18px rgba(37,99,235,.12)}
.bm-input-row{display:flex;gap:8px;align-items:center}
.bm-input-row input{flex:1;min-width:0}
.bm-fill{flex-shrink:0;padding:7px 12px;border:1px solid rgba(139,92,246,.45);background:rgba(139,92,246,.12);color:#C4B5FD;border-radius:8px;cursor:pointer;font-size:.78rem;white-space:nowrap;transition:all .2s}
.bm-fill:hover{background:rgba(139,92,246,.25);color:#E9D5FF}
.bm-file-input{width:100%;padding:10px;border:1px dashed rgba(48,54,61,.7);border-radius:10px;color:#9CA3AF;font-size:.82rem;background:rgba(10,14,23,.5);cursor:pointer}
.bm-file-hint{font-size:.76rem;color:var(--t2);margin:6px 2px 0;line-height:1.6}
.bm-file-info{font-size:.78rem;color:var(--t2);margin:6px 2px 0}
.bm-file-info.ok{color:#34d399}
.bm-file-info.err{color:#f87171}
.bm-progress-card{background:var(--card);border:1px solid rgba(37,99,235,.15);border-radius:14px;padding:24px 26px;margin-bottom:28px;backdrop-filter:blur(14px)}
.bm-progress-head{display:flex;align-items:center;gap:10px;color:var(--t1);font-size:.95rem;margin-bottom:16px}
.bm-progress-track{height:10px;background:rgba(255,255,255,.06);border-radius:999px;overflow:hidden}
.bm-progress-fill{width:0;height:100%;background:linear-gradient(90deg,var(--cyan),var(--purple));border-radius:999px;transition:width .45s ease}
.bm-progress-meta{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-size:.78rem;color:var(--t2);flex-wrap:wrap;gap:8px}
.bm-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(37,99,235,.25);border-top-color:var(--cyan);border-radius:50%;animation:spin .8s linear infinite;vertical-align:-3px}
.bm-cost{background:rgba(37,99,235,.08);border:1px solid rgba(37,99,235,.2);color:var(--cyan);border-radius:10px;padding:12px 16px;font-size:.85rem;margin-bottom:20px}
.bm-cost-test{background:rgba(139,92,246,.1);border-color:rgba(139,92,246,.3);color:#C4B5FD}
.bm-error{background:rgba(248,113,113,.1);border:1px solid rgba(248,113,113,.35);color:#fca5a5;border-radius:10px;padding:12px 16px;font-size:.85rem;margin-bottom:20px}
.bm-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}
.bm-tab{padding:8px 16px;border:1px solid rgba(48,54,61,.6);background:rgba(10,14,23,.6);color:#9CA3AF;border-radius:999px;cursor:pointer;font-size:.82rem;transition:all .2s}
.bm-tab:hover{color:#D1D5DB;border-color:rgba(37,99,235,.35)}
.bm-tab.active{background:rgba(37,99,235,.12);border-color:rgba(37,99,235,.6);color:var(--cyan);font-weight:600}
.bm-panel{display:none}
.bm-panel.active{display:block}
.bm-body{padding:2px 0 6px}
.bm-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:20px}
.bm-card{background:rgba(10,14,23,.55);border:1px solid rgba(48,54,61,.5);border-radius:12px;padding:16px;text-align:center}
.bm-card-v{font-size:1.5rem;font-weight:700;color:var(--cyan);margin-bottom:6px;word-break:break-all}
.bm-card-l{font-size:.78rem;color:var(--t2)}
.bm-chart-wrap{background:rgba(10,14,23,.55);border:1px solid rgba(48,54,61,.5);border-radius:12px;padding:14px;margin-bottom:20px}
.bm-chart{width:100%}
.bm-actions{display:flex;justify-content:flex-end;margin-top:6px}
.bm-btn{padding:7px 14px;border:1px solid rgba(37,99,235,.4);background:rgba(37,99,235,.08);color:var(--cyan);border-radius:8px;cursor:pointer;font-size:.78rem;transition:all .2s}
.bm-btn:hover{background:rgba(37,99,235,.2)}
.bm-btn:disabled{opacity:.5;cursor:not-allowed}
.bm-note{font-size:.82rem;color:var(--t2);line-height:1.7;background:rgba(10,14,23,.45);border:1px solid rgba(48,54,61,.45);border-radius:10px;padding:12px 14px;margin-bottom:20px}
.bm-data-hint{font-size:.76rem;color:var(--t2);line-height:1.6;margin:-8px 0 18px}
.bm-cluster-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;background:rgba(10,14,23,.45);border:1px solid rgba(48,54,61,.45);border-radius:10px;padding:10px 14px;margin:-8px 0 18px;font-size:.78rem;color:#9CA3AF;line-height:1.7}
.bm-cluster-legend-title{font-weight:600;color:var(--cyan);flex-shrink:0}
.bm-cluster-legend-item{display:inline-flex;align-items:center;gap:6px;color:#D1D5DB;white-space:nowrap}
.bm-cluster-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.bm-cluster-legend-more{color:var(--t2)}
body.light .bm-cluster-legend{background:rgba(255,255,255,.75);border-color:rgba(180,140,80,.2);color:#8B7355}
body.light .bm-cluster-legend-title{color:#0D9488}
body.light .bm-cluster-legend-item{color:#374151}
body.light .bm-cluster-legend-more{color:#8B7355}
.bm-sec-title{font-size:.9rem;font-weight:600;color:var(--t1);margin:6px 0 10px}
.bm-table-wrap{background:rgba(10,14,23,.55);border:1px solid rgba(48,54,61,.5);border-radius:12px;padding:14px;margin-bottom:20px;overflow-x:auto}
.bm-table{width:100%;border-collapse:collapse;font-size:.8rem;color:#D1D5DB;min-width:480px}
.bm-table th{text-align:left;padding:9px 10px;color:var(--t2);font-weight:500;border-bottom:1px solid rgba(48,54,61,.6);white-space:nowrap}
.bm-table td{padding:9px 10px;border-bottom:1px solid rgba(48,54,61,.35);line-height:1.6}
.bm-table tr:last-child td{border-bottom:none}
.bm-table-narrow{min-width:0;max-width:420px}
.bm-rank{color:var(--cyan);font-weight:600;width:34px}
.bm-arrow{color:var(--purple);text-align:center;width:30px}
.bm-monospace{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.74rem}
.bm-yk-count{color:var(--cyan);font-size:.72rem;margin-left:4px}
.bm-title-item{font-size:.82rem;color:#D1D5DB;line-height:1.7;padding:5px 0}
.bm-doi{color:var(--cyan);text-decoration:none;font-size:.76rem}
.bm-doi:hover{text-decoration:underline}
.bm-control-wrap{margin-bottom:20px}
.bm-control{background:rgba(10,14,23,.55);border:1px solid rgba(48,54,61,.5);border-radius:12px;padding:14px 16px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.bm-control-label{font-size:.8rem;color:#9CA3AF}
.bm-control input[type=range]{flex:1;min-width:120px;accent-color:var(--cyan)}
.bm-control-val{font-size:.8rem;color:var(--cyan);font-weight:600;min-width:34px;text-align:right}
.bm-interp{margin-bottom:20px}
.bm-int{font-size:.82rem;padding:9px 18px}
.bm-interp-text{margin-top:12px}
.bm-loading{display:flex;align-items:center;gap:10px;color:#9CA3AF;font-size:.82rem}
.bm-interp-body{background:rgba(10,14,23,.55);border:1px solid rgba(37,99,235,.15);border-left:3px solid var(--cyan);border-radius:10px;padding:16px 18px;font-size:.85rem;color:#D1D5DB;line-height:1.9;white-space:pre-wrap}
.bm-interp-err{color:#fca5a5;font-size:.8rem;background:rgba(248,113,113,.08);border:1px solid rgba(248,113,113,.3);border-radius:8px;padding:10px 14px}
.bm-modal{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9990;background:rgba(0,0,0,.7);display:flex;justify-content:center;align-items:center;padding:20px}
.bm-modal-box{background:rgba(7,20,40,.98);border:1px solid rgba(37,99,235,.2);border-radius:16px;padding:26px 28px;max-width:560px;width:100%;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.5);position:relative}
.bm-modal-close{position:absolute;top:14px;right:14px;background:none;border:none;color:var(--t2);font-size:1.1rem;cursor:pointer;padding:6px 10px}
.bm-modal-close:hover{color:var(--t1)}
.bm-modal-title{font-size:1.05rem;font-weight:700;color:var(--cyan);margin-bottom:16px}
.bm-node-detail{max-height:52vh;overflow-y:auto}
.bm-node-title{font-size:.95rem;color:var(--t1);margin-bottom:6px;word-break:break-all}
.bm-node-sub{font-size:.78rem;color:var(--t2);margin-bottom:12px}
.bm-node-row{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border-bottom:1px solid rgba(48,54,61,.4);font-size:.82rem;gap:12px}
.bm-node-row:last-child{border-bottom:none}
.bm-node-name{color:#D1D5DB;word-break:break-all}
.bm-node-w{color:var(--cyan);white-space:nowrap;flex-shrink:0}
.bm-kw-list{font-size:.82rem;color:#D1D5DB;line-height:1.9}
@media (max-width:720px){
  .bm-mode{min-width:120px}
  .bm-control{flex-direction:column;align-items:stretch}
  .bm-control-val{text-align:left}
}
/* ================================================================
   由模板内联 style 属性外移的语义化类（2026-08-15）
   保持与原内联样式逐条一致，渲染效果不变
   ================================================================ */
.bm-bg-canvas{position:fixed;top:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:.25}
.bm-bg-grid{position:fixed;top:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(37,99,235,.012) 2px,rgba(37,99,235,.012) 4px)}
.bm-main{position:relative;z-index:1}
.bm-hero{text-align:center;padding:60px 24px 40px}
.bm-hero-icon{font-size:4rem;margin-bottom:16px;animation:flt 3s ease-in-out infinite}
.bm-hero-title{font-size:2.4rem;font-weight:700;color:var(--t1);margin:0 0 12px}
.bm-hero-sub{font-size:1rem;color:var(--cyan);max-width:700px;margin:0 auto 8px}
.bm-hero-desc{font-size:.92rem;color:var(--t2);max-width:740px;margin:0 auto;line-height:1.8}
.bm-layout{max-width:1100px;margin:0 auto 60px;padding:0 24px;display:grid;grid-template-columns:1fr 340px;gap:32px}
.bm-main-col{min-width:0}
.bm-panel-card{background:var(--card);border:1px solid var(--bdr);border-radius:16px;padding:28px;margin-bottom:28px;backdrop-filter:blur(14px)}
.bm-panel-title{font-size:1.1rem;color:var(--t1);margin:0 0 20px}
.bm-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.bm-hidden{display:none}
.bm-actions-row{display:flex;gap:12px;margin-top:8px;flex-wrap:wrap}
.bm-aside{position:sticky;top:80px;align-self:start}
.bm-aside-card{background:rgba(7,20,40,.6);border:1px solid var(--bdr);border-radius:10px;padding:18px;margin-bottom:16px}
.bm-aside-title{font-size:.9rem;color:var(--t1);margin:0 0 10px}
.bm-aside-text{font-size:.82rem;color:var(--t2);line-height:1.6;margin:0}
.bm-bottom-wrap{max-width:1100px;margin:0 auto;padding:0 24px}
.bm-content-card{background:var(--card);border:1px solid var(--bdr);border-radius:16px;padding:28px;margin-bottom:28px;backdrop-filter:blur(14px);line-height:1.8;color:#D1D5DB}
.bm-faq-card{background:var(--card);border:1px solid var(--bdr);border-radius:16px;padding:28px;backdrop-filter:blur(14px);line-height:1.8;color:#D1D5DB}
.bm-login-modal{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background:rgba(0,0,0,.7);justify-content:center;align-items:center}
.bm-login-box{background:rgba(7,20,40,.98);border:1px solid rgba(37,99,235,.2);border-radius:16px;padding:40px;text-align:center;max-width:400px;width:90%;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.bm-login-icon{font-size:3rem;margin-bottom:16px}
.bm-login-title{color:var(--t1);margin:0 0 8px;font-size:1.2rem}
.bm-login-text{color:var(--t2);font-size:.88rem;margin:0 0 24px;line-height:1.6}
.bm-login-btn{display:inline-block;padding:12px 40px;background:var(--cyan);color:var(--bg);border-radius:10px;text-decoration:none;font-weight:600;font-size:.95rem}
.bm-login-cancel{display:block;margin:16px auto 0;background:none;border:none;color:var(--t2);cursor:pointer;font-size:.82rem;padding:8px 24px}

/* DNA SPACE 文献计量学工具页样式（2026-08-15 由模板内联样式外移，铁律：style 不写模板） */
/* ════════════════════════════════════════════════════════════════════════
   ── 全站浅色主题联动 body.light (2026-08-15) ──
   浅色参考值与 tpl_var_页面头部.css 的 body.light 体系保持一致：
   页面底 #FAF5EE / 正文 #374151 / 标题 #1F2937 / 次要 #8B7355 /
   卡片 rgba(255,252,247,.94) / 边框 rgba(180,140,80,.2) / 主色 #0D9488
   ════════════════════════════════════════════════════════════════════════ */

/* 1) 页面主体与 hero 文字层级 */
body.light .bm-main,body.light .bm-hero{color:#374151}
body.light .bm-hero-title{color:#1F2937}
body.light .bm-hero-sub{color:#0D9488}
body.light .bm-hero-desc{color:#8B7355}

/* 2) 主卡片面：背景 / 边框 / 阴影 */
body.light .bm-panel-card,body.light .bm-aside-card,body.light .bm-content-card,
body.light .bm-faq-card,body.light .bm-progress-card,body.light .bm-login-box{
  background:rgba(255,252,247,.94);
  border-color:rgba(180,140,80,.2);
}
body.light .bm-panel-card,body.light .bm-content-card,body.light .bm-faq-card,
body.light .bm-progress-card{box-shadow:0 4px 24px rgba(120,90,40,.08)}
body.light .bm-aside-card{box-shadow:none}
body.light .bm-login-box{box-shadow:0 20px 60px rgba(120,90,40,.18)}

/* 3) 卡片标题 / 正文 / 次要文字 */
body.light .bm-panel-title,body.light .bm-aside-title,body.light .bm-sec-title,
body.light .bm-progress-head,body.light .bm-node-title,body.light .bm-login-title{color:#1F2937}
body.light .bm-content-card,body.light .bm-faq-card,body.light .bm-table,
body.light .bm-title-item,body.light .bm-interp-body,body.light .bm-node-name,
body.light .bm-kw-list{color:#374151}
body.light .bm-aside-text,body.light .bm-file-hint,body.light .bm-file-info,
body.light .bm-progress-meta,body.light .bm-card-l,body.light .bm-note,
body.light .bm-table th,body.light .bm-login-text,body.light .bm-node-sub,
body.light .bm-modal-close,body.light .bm-login-cancel,body.light .bm-loading,
body.light .bm-control-label,body.light .bm-data-hint{color:#8B7355}
body.light .bm-modal-close:hover{color:#1F2937}

/* 4) cyan 主色元素 → 深青 #0D9488（浅底可读） */
body.light .bm-cost,body.light .bm-card-v,body.light .bm-rank,
body.light .bm-yk-count,body.light .bm-doi,body.light .bm-node-w,body.light .bm-control-val,
body.light .bm-modal-title,body.light .bm-tab.active,body.light .bm-mode:has(input:checked){color:#0D9488}
body.light .bm-cost{background:rgba(13,148,136,.1);border-color:rgba(13,148,136,.25)}
body.light .bm-tab.active,body.light .bm-mode:has(input:checked){background:rgba(13,148,136,.1);border-color:#0D9488;box-shadow:0 0 18px rgba(13,148,136,.12)}
body.light .bm-spinner{border-color:rgba(13,148,136,.3);border-top-color:#0D9488}
body.light .bm-interp-body{border-left-color:#0D9488}

/* 5) 紫色强调元素 → 深紫 #7C3AED */
body.light .bm-arrow{color:#7C3AED}
body.light .bm-cost-test{background:rgba(124,58,237,.08);border-color:rgba(124,58,237,.25);color:#7C3AED}
body.light .bm-fill{color:#7C3AED;background:rgba(124,58,237,.08);border-color:rgba(124,58,237,.3)}
body.light .bm-fill:hover{background:rgba(124,58,237,.15);color:#6D28D9}

/* 6) 模式 / 页签按钮 */
body.light .bm-mode,body.light .bm-tab{background:rgba(255,255,255,.75);border-color:rgba(180,140,80,.3);color:#5B6472}
body.light .bm-tab:hover{color:#374151;border-color:rgba(180,140,80,.4)}

/* 7) 表单控件（.fg 内已有 header 规则覆盖，此处兜底 .bm-* 类） */
body.light .bm-file-input{background:#fff;color:#374151;border-color:rgba(180,140,80,.25)}
body.light .bm-control input[type=range]{accent-color:#0D9488}

/* 8) 文件信息 / 错误提示（浅底可读红/绿） */
body.light .bm-file-info.ok{color:#059669}
body.light .bm-file-info.err{color:#DC2626}
body.light .bm-error{background:rgba(220,38,38,.06);border-color:rgba(220,38,38,.25);color:#DC2626}
body.light .bm-interp-err{color:#DC2626;background:rgba(220,38,38,.06);border-color:rgba(220,38,38,.25)}

/* 9) 次级面板面：图表 / 表格 / 控制条 / 解读区 / 提示 */
body.light .bm-card,body.light .bm-chart-wrap,body.light .bm-table-wrap,
body.light .bm-control,body.light .bm-note,body.light .bm-interp-body{
  background:rgba(255,255,255,.75);border-color:rgba(180,140,80,.2)
}
body.light .bm-progress-track{background:rgba(180,140,80,.15)}
body.light .bm-table th{border-color:rgba(180,140,80,.2)}
body.light .bm-table td{border-color:rgba(180,140,80,.15)}
body.light .bm-node-row{border-color:rgba(180,140,80,.15)}

/* 10) 操作按钮 */
body.light .bm-btn{color:#0D9488;background:rgba(13,148,136,.1);border-color:rgba(13,148,136,.35)}
body.light .bm-btn:hover{background:rgba(13,148,136,.18)}

/* 11) 登录按钮（深青底白字，浅底可读） */
body.light .bm-login-btn{background:#0D9488;color:#fff}

/* 12) 弹窗 */
body.light .bm-modal-box{background:rgba(255,255,255,.98);border-color:rgba(180,140,80,.25);box-shadow:0 20px 60px rgba(120,90,40,.18)}

/* 13) 背景装饰降低存在感 */
body.light .bm-bg-canvas{opacity:.1}
body.light .bm-bg-grid{opacity:.35}

/* ════════════════════════════════════════════════════════════════════════
   ── 结果区：左侧导航 + 右侧单主图框 + 全屏 (2026-08-15) ──
   阶段4b：13 个 tab 容器改为「侧栏点选 → 主图框渲染当前视图」；
   主图框右上角工具条含 高清下载 / 生成解读 / 全屏 三个按钮。
   ════════════════════════════════════════════════════════════════════════ */
.bm-viewer{display:flex;gap:16px;align-items:flex-start}
.bm-viewer-nav{flex:0 0 148px;display:flex;flex-direction:column;gap:6px;position:sticky;top:90px;max-height:72vh;overflow-y:auto;padding:2px}
.bm-viewer-nav-item{text-align:left;padding:9px 14px;border:1px solid rgba(48,54,61,.6);background:rgba(10,14,23,.6);color:#9CA3AF;border-radius:9px;cursor:pointer;font-size:.82rem;transition:all .2s;white-space:nowrap;line-height:1.4}
.bm-viewer-nav-item:hover{color:#D1D5DB;border-color:rgba(37,99,235,.35)}
.bm-viewer-nav-item.active{background:rgba(37,99,235,.12);border-color:rgba(37,99,235,.6);color:var(--cyan);font-weight:600}
.bm-viewer-main{flex:1;min-width:0;display:flex;flex-direction:column;background:rgba(7,20,40,.45);border:1px solid var(--bdr);border-radius:14px;padding:16px}
.bm-viewer-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.bm-viewer-title{font-size:1.05rem;font-weight:700;color:var(--t1)}
.bm-viewer-actions{display:flex;gap:8px;flex-wrap:wrap}
.bm-viewer-act{font-size:.8rem;padding:7px 13px}
.bm-viewer-chart{min-height:280px}
.bm-viewer-main.bm-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:9990;background:#0a0e17;overflow:auto;border:none;border-radius:0;padding:18px 22px}
.bm-interp-result{margin-top:2px}

/* 浅色主题适配 */
body.light .bm-viewer-main{background:rgba(255,252,247,.94);border-color:rgba(180,140,80,.2)}
body.light .bm-viewer-title{color:#1F2937}
body.light .bm-viewer-nav-item{background:rgba(255,255,255,.75);border-color:rgba(180,140,80,.3);color:#5B6472}
body.light .bm-viewer-nav-item:hover{color:#374151;border-color:rgba(180,140,80,.4)}
body.light .bm-viewer-nav-item.active{background:rgba(13,148,136,.1);border-color:#0D9488;color:#0D9488}
body.light .bm-viewer-main.bm-fullscreen{background:#fff}

/* 小屏：侧栏改为顶部横向滚动导航 */
@media (max-width:860px){
  .bm-viewer{flex-direction:column;align-items:stretch}
  .bm-viewer-nav{flex:none;flex-direction:row;flex-wrap:nowrap;overflow-x:auto;position:static;max-height:none;padding-bottom:6px}
  .bm-viewer-nav-item{flex:0 0 auto;white-space:nowrap}
}

/* 预计消耗提示 */
.bm-cost-hint{margin:0 0 12px;font-size:.82rem;color:#6B7280;line-height:1.6}
body.light .bm-cost-hint{color:#8B7355}
