/* ===== 煤场管理系统 样式 v4.6 ===== */
:root {
  --bg: #f0f2f5; --card: #fff; --text: #1a1a2e; --text2: #64748b;
  --border: #e2e8f0; --primary: #2563eb; --primary-light: #eff6ff;
  --success: #059669; --danger: #dc2626; --warning: #d97706;
  --purple: #7c3aed;
  --radius: 12px; --shadow: 0 2px 8px rgba(0,0,0,0.06);
  --nav-h: 56px; --bottom-h: 60px;
}
* { margin:0; padding:0; box-sizing:border-box; }
body { font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; background:var(--bg); color:var(--text); line-height:1.7; overflow-x:hidden; font-size:14px; }

/* --- Top Nav --- */
.storage-warn { position:fixed; top:var(--nav-h); left:0; right:0; z-index:99; background:#dc2626; color:#fff; font-size:13px; line-height:1.5; padding:8px 16px; text-align:center; box-shadow:0 2px 6px rgba(0,0,0,0.15); }
.storage-warn b { font-weight:700; }

/* --- 模块功能说明条（第77项 · 2026-10-08）-----------------------------------
   替代原先铺在 #modeBanner 里的「同步明细 + 成本口径」长文：随模块切换，
   只显示**当前模块**的一句话功能简介。
   位置：作为 .main 的**第一个子元素** —— 天然落在固定顶栏（--nav-h）之下，
   既不会被顶栏压住，也不会在 .main 的 margin-top 之外多出一段空隙。
   配色刻意做**低调**（灰底细边），与 #modeBanner 的告警色（绿/橙）明确区分 ——
   否则用户会把「说明」当成「告警」。
   显隐由 js/app.js 的 applyModuleDesc() 切换 style.display（与 #modeBanner 同法）。 */
.module-desc { display:flex; margin:0 0 14px; padding:9px 14px; border-radius:8px;
  font-size:13px; line-height:1.65; background:#f6f8fb; border:1px solid #e5eaf2;
  color:#5a6b85; align-items:center; gap:8px; flex-wrap:wrap; }
.module-desc b { font-size:13.5px; color:#1f2d3d; white-space:nowrap; }
.module-desc .md-ico { font-size:15px; line-height:1; }
.module-desc .md-sep { color:#c8d1de; }
@media (max-width:600px) { .module-desc { padding:8px 12px; font-size:12.5px; } }
/* @@COAL-MODDESC-CSS@@ */
.topnav { position:fixed; top:0; left:0; right:0; height:var(--nav-h); background:var(--card); border-bottom:1px solid var(--border); display:flex; align-items:center; padding:0 20px; z-index:100; gap:10px; box-shadow:0 1px 4px rgba(0,0,0,0.04); }
.topnav .logo { font-size:16px; font-weight:700; white-space:nowrap; margin-right:16px; letter-spacing:-0.3px; display:inline-flex; align-items:center; }
.topnav .logo .logo-text { background:linear-gradient(92deg,#f59e0b 0%,#f97316 55%,#2563eb 100%); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
.topnav .nav-tabs { display:flex; gap:4px; overflow:visible; flex:1; scrollbar-width:none; }
.topnav .nav-tabs::-webkit-scrollbar { display:none; }
.topnav .nav-tab { padding:8px 16px; border-radius:8px; font-size:13px; font-weight:500; cursor:pointer; white-space:nowrap; color:var(--text2); border:none; background:none; transition:all .15s; }
.topnav .nav-tab:hover { background:var(--bg); color:var(--primary); }
.topnav .nav-tab.active { background:var(--primary); color:#fff; box-shadow:0 2px 6px rgba(37,99,235,0.25); }
.topnav .nav-actions { display:flex; align-items:center; gap:8px; margin-left:auto; }
.topnav .btn-sm { padding:6px 14px; border-radius:6px; font-size:12px; font-weight:500; cursor:pointer; border:1px solid var(--border); background:var(--card); color:var(--text); transition:all .15s; }
.topnav .btn-sm:hover { background:var(--bg); border-color:#cbd5e1; }
.topnav .btn-sm.primary { background:var(--primary); color:#fff; border-color:var(--primary); }
.topnav .btn-sm.primary:hover { opacity:.9; box-shadow:0 2px 8px rgba(37,99,235,0.3); }

/* --- Main --- */
.main { margin-top:var(--nav-h); padding:20px 24px; min-height:calc(100vh - var(--nav-h) - var(--bottom-h)); max-width:1400px; margin-left:auto; margin-right:auto; }
.section { display:none; }
.section.active { display:block; animation:secFade .25s ease; }
@keyframes secFade { from{opacity:0;transform:translateY(6px);} to{opacity:1;transform:translateY(0);} }

/* --- Cards --- */
.card { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:18px 20px; margin-bottom:16px; box-shadow:var(--shadow); }
.card:hover { box-shadow:0 4px 16px rgba(0,0,0,0.08); }
.card h2 { font-size:16px; margin-bottom:12px; color:var(--text); font-weight:700; display:flex; align-items:center; gap:8px; }
.card h2::before { content:""; display:inline-block; width:4px; height:18px; background:var(--primary); border-radius:2px; }
.card h3 { font-size:14px; margin-bottom:10px; color:var(--text); font-weight:600; }

/* --- KPI --- */
.kpi-row { display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:14px; margin-bottom:16px; }
.kpi-card { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:16px 18px; box-shadow:var(--shadow); position:relative; overflow:hidden; transition:all .2s; }
.kpi-card:hover { transform:translateY(-2px); box-shadow:0 6px 20px rgba(0,0,0,0.1); }
.kpi-card::before { content:""; position:absolute; left:0; top:12px; bottom:12px; width:4px; border-radius:0 2px 2px 0; }
.kpi-card:has(.blue)::before { background:var(--primary); }
.kpi-card:has(.green)::before { background:var(--success); }
.kpi-card:has(.red)::before { background:var(--danger); }
.kpi-card:has(.purple)::before { background:var(--purple); }
.kpi-label { font-size:11.5px; color:var(--text2); margin-bottom:4px; text-transform:uppercase; letter-spacing:.3px; }
.kpi-value { font-size:26px; font-weight:700; line-height:1.2; }
.kpi-value.blue { color:var(--primary); }
.kpi-value.green { color:var(--success); }
.kpi-value.red { color:var(--danger); }
.kpi-value.purple { color:var(--purple); }
.kpi-sub { font-size:11px; color:var(--text2); margin-top:3px; }

/* --- Tables --- */
.table-wrap { overflow-x:auto; border:1px solid var(--border); border-radius:8px; background:var(--card); }
#purTable { min-width:2200px; }
table { width:100%; border-collapse:collapse; font-size:13px; }
thead th { background:#f1f5f9; padding:9px 10px; text-align:center; font-weight:600; border-bottom:2px solid #dde4ed; white-space:nowrap; font-size:12px; color:#475569; position:sticky; top:0; z-index:2; }
thead th.cat { background:var(--primary); color:#fff; font-size:12.5px; padding:8px 10px; letter-spacing:.4px; border-right:1px solid rgba(255,255,255,.12); }
thead th.cat:last-child { border-right:none; }
th.col-ck { width:34px; min-width:34px; }
th.col-s { min-width:90px; }
th.col-m { min-width:100px; }
th.col-n { min-width:80px; text-align:right; }
th.col-act { min-width:55px; }
tbody td { padding:7px 10px; border-bottom:1px solid #f1f5f9; vertical-align:middle; }
tbody tr:nth-child(even) { background:#fafbfd; }
tbody tr:hover { background:#eef2ff; }
tr.totals-row { background:#fef9c3 !important; font-weight:700; border-top:2px solid var(--primary) !important; }
tr.totals-row td { border-top:2px solid var(--primary); padding:9px 10px; font-size:13.5px; color:#1e293b; }
tr.totals-row:hover { background:#fef9c3 !important; }
.text-right { text-align:right; }
.text-center { text-align:center; }
.num { font-family:"SF Pro Display","Segoe UI","DIN Alternate",-apple-system,sans-serif; font-variant-numeric:tabular-nums; font-size:13px; }
.kpi-value { font-family:"SF Pro Display","Segoe UI","DIN Alternate",-apple-system,sans-serif; font-variant-numeric:tabular-nums; }
.stat-val { font-family:"SF Pro Display","Segoe UI","DIN Alternate",-apple-system,sans-serif; font-variant-numeric:tabular-nums; }

/* --- Checkbox --- */
.tbl-cb { width:16px; height:16px; cursor:pointer; accent-color:var(--primary); vertical-align:middle; }
th .tbl-cb { margin:0 auto; }
.cb-col { width:34px; text-align:center; }

/* --- Batch --- */
.batch-bar { display:flex; align-items:center; gap:8px; margin-bottom:10px; padding:8px 12px; background:#fef2f2; border:1px solid #fecaca; border-radius:8px; font-size:12.5px; }
.batch-bar .batch-count { font-weight:700; color:var(--danger); }
.btn-batch-del { padding:5px 12px; border-radius:5px; font-size:12px; font-weight:600; cursor:pointer; border:1px solid var(--danger); background:var(--danger); color:#fff; }
.btn-batch-del:hover { opacity:.9; }
.btn-batch-del:disabled { background:#d1d5db; border-color:#d1d5db; cursor:not-allowed; }
.batch-select-all { color:var(--primary); cursor:pointer; font-weight:600; text-decoration:underline; margin-left:6px; white-space:nowrap; }
.batch-select-all.done { text-decoration:none; cursor:default; }
.batch-total-hint { color:#666; font-size:11px; }

/* --- 批量修改（第166项）---
   ★ 批量修改按钮与批量删除**并列**，但配色刻意不同：
     删除是危险操作（红）· 修改是常规操作（蓝）⇒ 两个按钮不会误点。
   ★ .btn-batch-edit:disabled 与删除按钮同款（灰）—— 「无选中时禁用」是硬要求。 */
.btn-batch-edit { padding:5px 12px; border-radius:5px; font-size:12px; font-weight:600; cursor:pointer; border:1px solid var(--primary); background:var(--primary); color:#fff; }
.btn-batch-edit:hover { opacity:.9; }
.btn-batch-edit:disabled { background:#d1d5db; border-color:#d1d5db; cursor:not-allowed; }

/* 批量修改弹窗 */
.batch-edit-modal { max-width:680px; }
.batch-edit-head { font-size:13px; color:var(--text-secondary, #555); margin-bottom:12px; line-height:1.6; }
.batch-edit-fields { max-height:46vh; overflow-y:auto; border:1px solid #e5e7eb; border-radius:8px; }
.batch-edit-row { display:flex; align-items:center; gap:10px; padding:8px 12px; border-bottom:1px solid #f3f4f6; }
.batch-edit-row:last-child { border-bottom:none; }
.batch-edit-row input[type=checkbox] { width:16px; height:16px; flex:0 0 auto; cursor:pointer; }
.batch-edit-label { flex:0 0 128px; font-size:13px; }
.batch-edit-ctl { flex:1 1 auto; display:flex; align-items:center; gap:8px; }
.batch-edit-ctl input[type=text], .batch-edit-ctl input[type=number], .batch-edit-ctl input[type=date], .batch-edit-ctl select {
  flex:1 1 auto; padding:5px 8px; border:1px solid #d1d5db; border-radius:5px; font-size:13px; }
.batch-edit-row.disabled { opacity:.55; }
.batch-edit-row.disabled .batch-edit-label { color:#9ca3af; }
/* ★【第166项f】日期字段的重大操作提示（服务端 warning，红字跨整行） */
.batch-edit-warning { flex:1 0 100%; font-size:12px; color:#dc2626; line-height:1.5; padding:2px 0 0 0; }
.batch-edit-reason { font-size:11.5px; color:#9ca3af; flex:0 0 auto; }
.batch-edit-foot { display:flex; align-items:center; gap:10px; margin-top:12px; }
.batch-edit-foot .batch-edit-tip { flex:1 1 auto; font-size:12px; color:#92400e; }
.batch-edit-summary { font-size:13px; line-height:1.7; }
.batch-edit-summary .bk-line { display:flex; gap:8px; padding:3px 0; }
.batch-edit-summary .bk-field { font-weight:600; flex:0 0 120px; }
.batch-edit-result { max-height:50vh; overflow-y:auto; font-size:12.5px; line-height:1.7; }
.batch-edit-result .ok-line { color:#15803d; }
.batch-edit-result .fail-line { color:#b91c1c; }

/* --- Badges --- */
.badge { display:inline-block; padding:3px 10px; border-radius:5px; font-size:11px; font-weight:600; }
.badge-blue { background:var(--primary-light); color:var(--primary); }
.badge-green { background:#ecfdf5; color:var(--success); }
.badge-purple { background:#f5f3ff; color:var(--purple); }
.badge-red { background:#fef2f2; color:var(--danger); }
.badge-orange { background:#fffbeb; color:var(--warning); }
.badge-gray { background:#f1f5f9; color:var(--text2); }

/* --- Buttons --- */
.btn { padding:8px 18px; border-radius:6px; font-size:13px; font-weight:500; cursor:pointer; border:1px solid var(--border); background:var(--card); color:var(--text); transition:all .15s; display:inline-flex; align-items:center; gap:6px; }
.btn:hover { background:var(--bg); border-color:#cbd5e1; }
.btn-primary { background:var(--primary); color:#fff; border-color:var(--primary); }
.btn-primary:hover { opacity:.92; box-shadow:0 2px 8px rgba(37,99,235,0.3); }
.btn-success { background:var(--success); color:#fff; border-color:var(--success); }
.btn-success:hover { opacity:.92; }
.btn-danger { background:var(--danger); color:#fff; border-color:var(--danger); }
.btn-danger:hover { opacity:.92; }
.btn-link { padding:3px 10px; border-radius:5px; font-size:12px; font-weight:500; cursor:pointer; border:1px solid var(--border); background:var(--card); color:var(--primary); transition:all .15s; }
.btn-link:hover { background:var(--bg); border-color:var(--primary); }
.btn-del { padding:3px 10px; border-radius:5px; font-size:12px; font-weight:500; cursor:pointer; border:1px solid var(--border); background:var(--card); color:var(--danger); transition:all .15s; }
.btn-del:hover { background:#fef2f2; border-color:var(--danger); }

/* --- More Panel --- */
.more-panel-overlay { display:none; }

/* --- Forms --- */
.form-group { margin-bottom:10px; }
.form-group label { display:block; font-size:12px; color:var(--text2); margin-bottom:4px; font-weight:500; }
.fd-nature-mode-link { text-decoration:none; cursor:pointer; font-weight:400; }
.fd-nature-mode-link:hover { text-decoration:underline; }
.form-group input,.form-group select { width:100%; padding:8px 12px; border:1px solid var(--border); border-radius:6px; font-size:13.5px; background:var(--card); color:var(--text); transition:all .15s; }
.form-group input:focus,.form-group select:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px rgba(37,99,235,.08); }
.form-row { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.form-row-3 { display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; }
.form-row-4 { display:grid; grid-template-columns:1fr 1fr 1fr 1fr; gap:10px; }
.form-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }

/* --- Filters --- */
.filter-bar { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-bottom:12px; }
.filter-bar input,.filter-bar select { padding:7px 12px; border:1px solid var(--border); border-radius:6px; font-size:13px; background:var(--card); min-width:120px; transition:all .15s; }
.filter-bar input:focus,.filter-bar select:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 2px rgba(37,99,235,.06); }

/* --- 独立销售量（吨）录入面板 --- */
.sv-panel { border:1px solid rgba(56,189,248,.30) !important; background:linear-gradient(135deg,#f5faff 0%,#eef6ff 55%,#e9f2ff 100%) !important; box-shadow:0 4px 18px rgba(56,189,248,.10) !important; position:relative; overflow:hidden; }
.sv-panel::before { content:''; position:absolute; left:0; right:0; top:0; height:2px; background:linear-gradient(90deg,#0ea5e9,#6366f1,#f59e0b); opacity:.9; }
.sv-panel::after { content:''; position:absolute; right:-40px; top:-40px; width:130px; height:130px; border-radius:50%; background:radial-gradient(circle,rgba(56,189,248,.12),transparent 70%); pointer-events:none; }
.sv-chip { display:inline-flex; align-items:center; gap:8px; background:#fff; border:1px solid rgba(56,189,248,.32); border-radius:10px; padding:7px 12px; font-size:12.5px; box-shadow:0 2px 8px rgba(15,23,42,.05); transition:all .2s; }
.sv-chip:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(56,189,248,.15); }
.sv-chip .sv-m { font-weight:700; color:#0284c7; }
.sv-chip .sv-t { font-weight:800; color:var(--text); font-variant-numeric:tabular-nums; }
.sv-chip .sv-r { font-size:11px; color:var(--text2); max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sv-chip .sv-del { cursor:pointer; color:var(--text2); font-size:13px; padding:0 2px; }
.sv-chip .sv-del:hover { color:var(--danger); }
.sv-chip.hl { border-color:rgba(14,165,233,.70); box-shadow:0 0 0 2px rgba(56,189,248,.18), 0 4px 12px rgba(56,189,248,.15); }
.sv-chip .sv-unit { font-size:11px; color:var(--text2); }

/* --- Modal --- */
.modal-overlay { display:none; position:fixed; top:0;left:0;right:0;bottom:0; background:rgba(15,23,42,.45); z-index:200; align-items:center; justify-content:center; backdrop-filter:blur(2px); }
.modal-overlay.show { display:flex; }
.modal { background:var(--card); border-radius:14px; padding:28px; width:92%; max-width:640px; max-height:88vh; overflow-y:auto; box-shadow:0 20px 60px rgba(0,0,0,0.18); animation:modalIn .2s ease; }
@keyframes modalIn { from{opacity:0;transform:scale(.96) translateY(10px);} to{opacity:1;transform:scale(1) translateY(0);} }
.modal h3 { font-size:17px; margin-bottom:16px; font-weight:700; color:var(--text); }
.modal-actions { display:flex; gap:10px; justify-content:flex-end; margin-top:18px; }

/* --- Tabs --- */
.tabs { display:flex; gap:0; border-bottom:2px solid var(--border); margin-bottom:14px; }
.tab { padding:8px 18px; font-size:13px; cursor:pointer; border:none; background:none; color:var(--text2); border-bottom:2px solid transparent; margin-bottom:-2px; font-weight:500; transition:all .15s; }
.tab:hover { color:var(--primary); }
.tab.active { color:var(--primary); border-bottom-color:var(--primary); font-weight:600; }

/* --- Charts --- */
.chart-row { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px; }
.chart-box { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:18px; box-shadow:var(--shadow); }
.chart-box.full { grid-column:1/-1; }
.chart-box h3 { font-size:13.5px; margin-bottom:8px; font-weight:600; }
.chart-box canvas { max-height:180px; }

/* --- Bottom Nav (Mobile) --- */
.bottom-nav { display:none; position:fixed; bottom:0; left:0; right:0; height:var(--bottom-h); background:var(--card); border-top:1px solid var(--border); z-index:100; box-shadow:0 -1px 4px rgba(0,0,0,0.04); }
.bottom-nav .bn-inner { display:flex; height:100%; }
.bottom-nav .bn-item { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; font-size:10px; color:var(--text2); cursor:pointer; gap:3px; }
.bottom-nav .bn-item.active { color:var(--primary); }
.bottom-nav .bn-item svg { width:22px; height:22px; }

/* --- Empty --- */
.empty { text-align:center; padding:48px 20px; color:var(--text2); }
.empty svg { width:52px; height:52px; margin-bottom:12px; opacity:.2; }

/* --- Summary row --- */
.summary-row { font-weight:700; background:#f8fafc; border-top:2px solid var(--border); }
.summary-row td { padding:9px 10px; }

/* --- Stat Strip --- */
.stat-strip { display:flex; gap:18px; flex-wrap:wrap; margin-bottom:12px; }
.stat-item { display:flex; align-items:center; gap:6px; font-size:13px; }
.stat-dot { width:9px; height:9px; border-radius:50%; }
.stat-label { color:var(--text2); }
.stat-val { font-weight:600; }

/* --- Section Header & Stock Filter --- */
.section-header { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:12px; }
.stock-filter-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:12px; }

/* --- Report --- */
.report-tabs { display:flex; gap:0; margin:12px 0 16px; border-bottom:2px solid var(--primary); }
.report-tab { padding:9px 24px; border:none; background:transparent; color:#64748b; font-size:13.5px; font-weight:500; cursor:pointer; border-bottom:2px solid transparent; margin-bottom:-2px; transition:all .15s; }
.report-tab.active { color:var(--primary); border-bottom-color:var(--primary); font-weight:700; }
.report-tab:hover { color:var(--primary); }
.xl-card { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); margin-top:14px; overflow:hidden; box-shadow:var(--shadow); }
/* ★★【第124项 2026-10-12 · 哥授权自选】报表底色改 **风化岩灰**（中性色）。
 *   【沿用的第123项结论】报表色系只服务 xl-* 一族（**仅当日报表/累计报表在用**，已核实），
 *     绝不动 --primary（全站主色，40+ 处依赖）。
 *   【为什么从"浅蓝"再进一步到"岩灰"】
 *     第123项把实心深蓝改成浅蓝底 + 深蓝字，解决了"晃眼"，但**蓝色仍在**——
 *     而蓝色在本系统里是**操作色**（编辑/新增按钮、链接、选中态…）。
 *     报表若也用蓝，"看数的地方"与"操作的地方"在视觉上撞色，分不清哪些能点。
 *     换成中性岩灰后：报表=沉稳不打扰（数据自己说话），按钮=蓝色（明确可点）。
 *   【对比度】#2C2C2A 字 / #F1EFE8 底 = **12.6:1**，远高于 AA 的 4.5，
 *     比第123项的 8.01:1 再高一档 —— 数据清晰度是选它的第一理由。
 *   【左边条保留主蓝】标题左侧竖条仍用 var(--primary)：
 *     那一竖条是"分区识别"，用主蓝反而强化了"这是报表分区"的语义，且面积只有 4px。
 */
.xl-card-header { background:#F1EFE8; color:#2C2C2A; padding:10px 18px; display:flex; align-items:center; justify-content:space-between; border-left:4px solid var(--primary); border-bottom:1px solid #D3D1C7; }
.xl-card-header h3 { margin:0; font-size:14px; font-weight:700; }
.xl-card-header span { font-size:12px; color:#5F5E5A; }
.xl-table-wrap { overflow-x:auto; max-height:60vh; overflow-y:auto; }
.xl-table-wrap table { width:100%; border-collapse:collapse; font-size:13px; min-width:700px; }
.xl-table-wrap thead { position:sticky; top:0; z-index:2; }
.xl-table-wrap thead th { background:#F1EFE8; color:#2C2C2A; font-weight:600; padding:8px 10px; border-right:1px solid #E4E2DA; border-bottom:1px solid #D3D1C7; text-align:center; white-space:nowrap; font-size:12px; }
.xl-table-wrap thead th:last-child { border-right:none; }
.xl-table-wrap tbody td { padding:6px 10px; border:1px solid var(--border); text-align:center; white-space:nowrap; }
.xl-table-wrap tbody td.xl-left { text-align:left; }
.xl-table-wrap tbody tr:nth-child(even) { background:#FAF9F6; }
.xl-table-wrap tbody tr:hover { background:#F3F2EC; }
.xl-table-wrap tbody tr.xl-subtotal { background:#F5F4EF !important; font-weight:700; color:#2C2C2A; border-top:1px solid #D3D1C7; border-bottom:1px solid #D3D1C7; }
.xl-table-wrap tbody tr.xl-subtotal td { padding:7px 10px; font-size:13px; }
.xl-table-wrap tbody tr.xl-grandtotal { background:#D3D1C7 !important; color:#2C2C2A !important; font-weight:700; border-top:1px solid #B4B2A9; }
.xl-table-wrap tbody tr.xl-grandtotal td { padding:8px 10px; font-size:13.5px; }
.xl-table-wrap tbody tr.xl-type-header { background:#F7F6F2 !important; font-weight:600; }
.xl-table-wrap tbody tr.xl-type-header td { color:#5F5E5A; font-size:12px; }
.xl-no { color:#aaa; font-size:11px; }
.xl-tag { display:inline-block; background:#eff6ff; color:var(--primary); padding:2px 8px; border-radius:4px; font-size:11px; font-weight:500; }
.btn-export { background:var(--success); color:#fff; border:none; padding:7px 20px; border-radius:5px; cursor:pointer; font-size:13px; font-weight:500; transition:all .15s; }
.btn-export:hover { opacity:.9; box-shadow:0 2px 8px rgba(5,150,105,0.3); }
.btn-refresh { background:#f1f5f9; color:#334155; border:1px solid var(--border); padding:7px 14px; border-radius:5px; cursor:pointer; font-size:12px; margin-left:8px; transition:all .15s; }
.btn-refresh:hover { background:#e2e8f0; }
.report-filter-row { display:flex; align-items:center; gap:10px; padding:8px 0; flex-wrap:wrap; }
.report-filter-row label { font-weight:600; font-size:13px; }
.report-filter-row input[type="date"] { border:1px solid var(--border); padding:7px 10px; border-radius:5px; font-size:13px; }

/* ===== Mobile ===== */
@media (max-width: 768px) {
  .topnav { padding:6px 10px; height:48px; }
  .topnav .nav-tabs { display:none; }
  .topnav .logo { font-size:14px; }
  .topnav .btn-sm { padding:5px 10px; font-size:11px; }
  :root { --nav-h: 48px; }
  .bottom-nav { display:block; height:56px; }
  .bottom-nav .bn-item svg { width:20px; height:20px; }
  .bottom-nav .bn-item span { font-size:9px; }
  :root { --bottom-h: 56px; }
  .main { padding:10px 12px; padding-bottom:calc(var(--bottom-h) + 16px); margin-top:var(--nav-h); max-width:100%; }
  .card { padding:12px; margin-bottom:12px; border-radius:10px; }
  .card h2 { font-size:14px; margin-bottom:8px; }
  .kpi-row { grid-template-columns:repeat(2,1fr); gap:8px; }
  .kpi-card { padding:12px 14px; }
  .kpi-value { font-size:20px; }
  .chart-row { grid-template-columns:1fr; gap:10px; }
  .chart-box { padding:12px; }
  .chart-box canvas { max-height:240px; }
  .table-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; border-radius:6px; }
  table { font-size:11px; min-width:100%; }
  thead th { padding:6px 6px; font-size:10.5px; white-space:nowrap; }
  tbody td { padding:5px 6px; font-size:10.5px; white-space:nowrap; }
  .num { font-size:10.5px; }
  th.col-ck { width:26px; min-width:26px; }
  .tbl-cb { width:14px; height:14px; }
  .tabs { overflow-x:auto; -webkit-overflow-scrolling:touch; flex-wrap:nowrap; white-space:nowrap; scrollbar-width:none; }
  .tabs::-webkit-scrollbar { display:none; }
  .tab { padding:7px 12px; font-size:11.5px; flex-shrink:0; }
  .form-row,.form-row-3,.form-row-4,.form-grid { grid-template-columns:1fr; gap:6px; }
  .form-group { margin-bottom:6px; }
  .form-group label { font-size:11.5px; }
  .form-group input,.form-group select { padding:9px 12px; font-size:14px; border-radius:7px; }
  .filter-bar { flex-direction:column; gap:6px; }
  .filter-bar input,.filter-bar select { width:100%; min-width:unset; padding:8px 12px; font-size:13px; }
  .btn { padding:10px 14px; font-size:13px; border-radius:7px; min-height:40px; }
  .btn-sm { padding:7px 12px; font-size:11.5px; min-height:32px; }
  .modal-overlay.show { align-items:flex-end; }
  .modal { width:100%; max-width:100%; border-radius:16px 16px 0 0; padding:18px; max-height:90vh; overflow-y:auto; }
  .modal h3 { font-size:16px; margin-bottom:12px; }
  .modal-actions { flex-direction:column; }
  .modal-actions .btn { width:100%; }
  .stat-strip { flex-direction:column; gap:4px; }
  .stat-item { font-size:12px; }
  .batch-bar { flex-wrap:wrap; gap:5px; font-size:11.5px; }
  .section-header { flex-wrap:wrap; gap:6px; }
  .stock-filter-row { flex-direction:column; gap:6px; align-items:stretch; }
  .more-panel-overlay { display:none; position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,.5); z-index:210; }
  .more-panel-overlay.show { display:flex; align-items:flex-end; }
  .more-panel { background:var(--card); border-radius:16px 16px 0 0; width:100%; padding:20px 16px 24px; max-height:70vh; overflow-y:auto; }
  .more-panel h4 { font-size:15px; margin-bottom:12px; text-align:center; color:var(--text2); }
  .more-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
  .more-item { display:flex; flex-direction:column; align-items:center; gap:6px; padding:12px 6px; border-radius:10px; cursor:pointer; background:var(--bg); }
  .more-item:active { background:var(--primary-light); transform:scale(.96); }
  .more-item svg { width:26px; height:26px; color:var(--primary); }
  .more-item span { font-size:11px; color:var(--text); font-weight:500; }
  .more-close { display:block; width:100%; margin-top:14px; padding:12px; border-radius:8px; border:1px solid var(--border); background:var(--card); font-size:14px; cursor:pointer; color:var(--text2); }
}
@media (max-width: 400px) {
  .kpi-row { grid-template-columns:1fr 1fr; gap:6px; }
  .kpi-value { font-size:17px; }
  .kpi-card { padding:10px 12px; }
  .more-grid { grid-template-columns:repeat(2,1fr); }
}

/* ===== 3层导航：面包屑路径 ===== */
.breadcrumb { display:flex; align-items:center; gap:6px; flex:1; }
.br-item {
  padding:6px 12px; border-radius:7px; font-size:13.5px; font-weight:500;
  cursor:pointer; white-space:nowrap; color:var(--text2); border:none;
  background:none; transition:all .15s;
}
.br-item:hover { background:var(--bg); color:var(--primary); }
.br-item.home { font-weight:600; }
.br-item.current { color:var(--primary); font-weight:700; cursor:default; }
.br-item.current:hover { background:none; }
.br-sep { color:var(--border); font-size:14px; user-select:none; }
.nav-actions { display:flex; align-items:center; gap:8px; margin-left:auto; }


/* ===== 首页三大类卡片 ===== */
.cat-cards { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:8px; }
.cat-card {
  background:var(--card); border:2px solid var(--border); border-radius:14px;
  padding:24px 22px; cursor:pointer; transition:all .2s;
  box-shadow:var(--shadow); position:relative; overflow:hidden;
  display:flex; flex-direction:column; gap:12px;
}
.cat-card:hover { transform:translateY(-3px); box-shadow:0 8px 24px rgba(0,0,0,0.12); }
.cat-card::before {
  content:""; position:absolute; top:0; left:0; right:0; height:4px;
}
.cat-card.biz { border-color:#bae6fd; }
.cat-card.biz::before { background:linear-gradient(90deg,#38bdf8,#6366f1); }
.cat-card.fin { border-color:#fed7aa; }
.cat-card.fin::before { background:linear-gradient(90deg,#f59e0b,#f97316); }
.cat-card.analysis { border-color:#a7f3d0; }
.cat-card.analysis::before { background:linear-gradient(90deg,#34d399,#0ea5e9); }

.cat-card-top { display:flex; align-items:center; justify-content:space-between; }
.cat-card-icon { font-size:36px; line-height:1; }
.cat-card-arrow { font-size:20px; color:var(--border); transition:all .2s; }
.cat-card:hover .cat-card-arrow { transform:translateX(4px); color:var(--primary); }
.cat-card h2 { font-size:20px; font-weight:700; margin:0; color:var(--text); }
.cat-card .cat-subs { font-size:13px; color:var(--text2); }
.cat-card .cat-stats { display:grid; grid-template-columns:repeat(2,1fr); gap:6px; margin-top:auto; }
.cat-card .cat-stat { background:var(--bg); border-radius:8px; padding:8px 10px; }
.cat-card .cat-stat-val { font-size:16px; font-weight:700; color:var(--text); font-family:"SF Pro Display","Segoe UI","DIN Alternate",sans-serif; }
.cat-card .cat-stat-lbl { font-size:10.5px; color:var(--text2); margin-top:2px; }

/* ===== 驾驶舱首页（v2） ===== */
.dash-wrap { display:flex; flex-direction:column; gap:18px; position:relative;
  background-image:radial-gradient(rgba(56,189,248,.06) 1px, transparent 1.5px);
  background-size:26px 26px; border-radius:18px; }

/* 首页分区标题（经营总览 / 工作台入口） */
.dash-sec-head { display:flex; align-items:center; gap:10px; margin:4px 0 -6px; }
.dash-sec-head h3 { font-size:15px; font-weight:700; margin:0; color:var(--text); display:flex; align-items:center; gap:8px; letter-spacing:.2px; }
.dash-sec-head .dsh-dot { width:8px; height:8px; border-radius:50%; background:linear-gradient(135deg,#38bdf8,#6366f1);
  box-shadow:0 0 8px rgba(56,189,248,.65); animation:dshPulse 2.4s ease-in-out infinite; }
@keyframes dshPulse { 0%,100%{box-shadow:0 0 6px rgba(56,189,248,.45);} 50%{box-shadow:0 0 13px rgba(56,189,248,.95);} }
.dash-sec-head .dsh-line { flex:1; height:1px; background:linear-gradient(90deg,rgba(56,189,248,.45),rgba(251,191,36,.25),transparent); }
.dash-sec-head .dsh-tag { font-size:10px; letter-spacing:2.5px; color:var(--text2); font-weight:600; white-space:nowrap; }
.dash-sec-head .dsh-idx { display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px; border-radius:7px; font-size:11px; font-weight:800; letter-spacing:.5px;
  background:linear-gradient(135deg,#0ea5e9,#6366f1); color:#fff; box-shadow:0 3px 10px rgba(56,189,248,.35), inset 0 0 0 1px rgba(255,255,255,.18);
  transition:box-shadow .25s, transform .25s; }
.dash-sec-head:hover .dsh-idx { box-shadow:0 4px 16px rgba(56,189,248,.65), inset 0 0 0 1px rgba(255,255,255,.25); transform:translateY(-1px) scale(1.05); }

/* 全局极淡科技光晕背景（左上冰蓝 / 右下淡金） */
body::before { content:''; position:fixed; inset:0; z-index:-1; pointer-events:none;
  background:
    radial-gradient(ellipse 55% 40% at 88% 0%, rgba(56,189,248,.06) 0%, transparent 60%),
    radial-gradient(ellipse 45% 38% at 4% 100%, rgba(251,191,36,.05) 0%, transparent 60%); }

/* Hero 欢迎横幅（黑金能源·科技煤场） */
.dash-hero { position:relative; overflow:hidden; border-radius:18px; padding:26px 28px; color:#fff;
  background:
    radial-gradient(ellipse 50% 85% at 88% 10%, rgba(251,191,36,.27) 0%, transparent 58%),
    radial-gradient(ellipse 45% 85% at 5% 96%, rgba(56,189,248,.34) 0%, transparent 60%),
    radial-gradient(ellipse 40% 70% at 97% 90%, rgba(139,92,246,.30) 0%, transparent 62%),
    linear-gradient(118deg,#081a33 0%,#123a63 46%,#1f2b6b 100%);
  box-shadow:0 14px 40px rgba(10,30,70,.32), inset 0 0 0 1px rgba(125,211,252,.24); }
.dash-hero::before { content:''; position:absolute; right:-60px; top:-80px; width:260px; height:260px; border-radius:50%;
  background:radial-gradient(circle,rgba(251,191,36,.14),transparent 65%); }
.dash-hero::after { content:''; position:absolute; inset:0; pointer-events:none;
  background-image:linear-gradient(rgba(125,211,252,.07) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(125,211,252,.07) 1px,transparent 1px);
  background-size:34px 34px;
  -webkit-mask-image:linear-gradient(90deg,#000,transparent 82%);
  mask-image:linear-gradient(90deg,#000,transparent 82%); }
/* Hero 扫描线（自上而下循环扫过） */
/* Hero logo */
.dash-hero-logo { position:relative; z-index:1; text-align:center; margin-bottom:10px; }
.dash-hero-logo img { height:90px; width:auto; border-radius:12px; box-shadow:0 0 24px rgba(255,255,255,.25), 0 4px 12px rgba(0,0,0,.25); background:rgba(255,255,255,.08); padding:4px; }
/* 第75项：hero logo 位改为文字牌（原 base64 图已删）——样式与第71项试用版一致 */
.dash-hero-logo .brand-plate { display:inline-block; padding:10px 24px; border-radius:14px; font-size:26px; font-weight:800; letter-spacing:1.5px; color:#fff; background:linear-gradient(135deg,rgba(255,255,255,.18),rgba(255,255,255,.06)); border:1px solid rgba(255,255,255,.3); text-shadow:0 2px 12px rgba(0,0,0,.4); }
@media (max-width:600px) { .dash-hero-logo .brand-plate { font-size:19px; padding:8px 16px; } }
@media (max-width:600px) { .dash-hero-logo img { height:64px; } }
.dash-hero-scan { position:absolute; left:0; right:0; height:2px; z-index:2; pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(125,211,252,.75),transparent);
  animation:dashScan 5.5s ease-in-out infinite; }
@keyframes dashScan { 0%{top:-4%;opacity:0;} 8%{opacity:.9;} 50%{top:102%;opacity:.55;} 92%{opacity:0;} 100%{top:102%;opacity:0;} }
/* Hero 底部能量流（金色↔青色往复流光） */
.dash-hero-beam { position:absolute; left:0; right:0; bottom:0; height:3px; z-index:2; pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(251,191,36,.85),rgba(125,211,252,.85),transparent);
  background-size:200% 100%; animation:dashBeam 4.2s linear infinite; }
@keyframes dashBeam { 0%{background-position:200% 0;} 100%{background-position:-200% 0;} }
.dash-hero-art { position:absolute; right:14px; bottom:0; width:240px; height:116px; z-index:0; opacity:.9; pointer-events:none;
  animation:heroArtPulse 5s ease-in-out infinite; }
@keyframes heroArtPulse { 0%,100%{opacity:.85;} 50%{opacity:1; filter:drop-shadow(0 0 12px rgba(251,191,36,.18));} }
.dash-hero-greet { position:relative; z-index:1; display:flex; align-items:center; gap:10px; font-size:24px; font-weight:800; letter-spacing:-.3px; margin:0 0 4px;
  background:linear-gradient(92deg,#fef3c7 0%,#fbbf24 42%,#7dd3fc 100%);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
.dash-hero-sub { position:relative; z-index:1; font-size:13.5px; opacity:.88; color:#b6c2d8; }
.dash-hero-chips { position:relative; z-index:1; display:flex; gap:8px; margin-top:16px; flex-wrap:wrap; }
.dash-chip { background:rgba(255,255,255,.08); border:1px solid rgba(148,163,184,.30); padding:4px 13px; border-radius:999px; font-size:12px; backdrop-filter:blur(4px); color:#dbe4f2; }

/* Hero 今日运营速览条（玻璃拟态数据带） */
.dash-hero-strip { position:relative; z-index:1; display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-top:18px;
  background:rgba(255,255,255,.07); border:1px solid rgba(148,163,184,.26); border-radius:14px; padding:12px 16px;
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); box-shadow:inset 0 1px 0 rgba(255,255,255,.10); }
.dash-hs-item { display:flex; align-items:center; gap:10px; min-width:0; }
.dash-hs-ico { width:38px; height:38px; border-radius:11px; display:flex; align-items:center; justify-content:center; font-size:18px; flex-shrink:0;
  background:rgba(255,255,255,.10); border:1px solid rgba(125,211,252,.28); box-shadow:0 2px 8px rgba(2,6,23,.25), inset 0 1px 0 rgba(255,255,255,.08); }
.dash-hs-info { min-width:0; }
.dash-hs-val { font-size:19px; font-weight:800; color:#fff; font-family:"SF Pro Display","Segoe UI","DIN Alternate",sans-serif; font-variant-numeric:tabular-nums; line-height:1.15; white-space:nowrap; text-shadow:0 1px 8px rgba(56,189,248,.25); }
.dash-hs-lbl { font-size:10.5px; color:#a9bdd9; margin-top:2px; letter-spacing:.6px; white-space:nowrap; }
.dash-hs-sep { width:1px; height:32px; background:rgba(148,163,184,.22); align-self:center; }

/* KPI 总览 */
.dash-kpis { display:grid; grid-template-columns:repeat(6,1fr); gap:14px; }
.dash-kpi { position:relative; background:linear-gradient(160deg,#ffffff 0%,#f8fafc 100%); border:1px solid rgba(148,163,184,.22); border-radius:16px;
  padding:16px 18px; overflow:hidden; box-shadow:0 2px 10px rgba(15,23,42,.05); transition:all .22s; }
/* 每张 KPI 卡独立科技色系：背景微染 + 顶部能量线 + 角光晕 + 悬浮同色发光 */
.dash-kpi::after { content:''; position:absolute; left:0; top:0; right:0; height:3px;
  background:linear-gradient(90deg,transparent,var(--kline),rgba(251,191,36,.4),transparent); }
.dash-kpi::before { content:''; position:absolute; left:10px; top:6px; width:78px; height:78px; border-radius:50%; pointer-events:none;
  background:radial-gradient(circle,var(--kglow),transparent 70%); opacity:0; transition:opacity .3s; }
.dash-kpi:hover::before { opacity:1; }
.dash-kpi:hover { transform:translateY(-3px); border-color:var(--kbd); box-shadow:0 12px 30px rgba(15,23,42,.14), 0 0 0 1px var(--kbd), 0 0 24px var(--kshadow); }
.dash-kpi:nth-child(1),.dash-kpi:nth-child(2) { --kline:rgba(59,130,246,.75); --kglow:rgba(59,130,246,.17); --kbd:rgba(59,130,246,.5); --kshadow:rgba(59,130,246,.15); background:linear-gradient(160deg,#ffffff,#f0f7ff); }
.dash-kpi:nth-child(3),.dash-kpi:nth-child(4) { --kline:rgba(16,185,129,.75); --kglow:rgba(16,185,129,.17); --kbd:rgba(16,185,129,.5); --kshadow:rgba(16,185,129,.15); background:linear-gradient(160deg,#ffffff,#effcf6); }
.dash-kpi:nth-child(5) { --kline:rgba(139,92,246,.75); --kglow:rgba(139,92,246,.17); --kbd:rgba(139,92,246,.5); --kshadow:rgba(139,92,246,.15); background:linear-gradient(160deg,#ffffff,#f8f4ff); }
.dash-kpi:nth-child(6) { --kline:rgba(6,182,212,.75); --kglow:rgba(6,182,212,.17); --kbd:rgba(6,182,212,.5); --kshadow:rgba(6,182,212,.15); background:linear-gradient(160deg,#ffffff,#effcfd); }
.dash-kpi .k-ico { width:40px; height:40px; border-radius:11px; display:flex; align-items:center; justify-content:center; font-size:19px; margin-bottom:10px; box-shadow:0 3px 10px rgba(15,23,42,.06); transition:transform .25s ease; }
.dash-kpi:hover .k-ico { transform:scale(1.12) rotate(-4deg); }
.dash-kpi .k-ico.b-blue { background:linear-gradient(135deg,#eff6ff,#dbeafe); }
.dash-kpi .k-ico.b-green { background:linear-gradient(135deg,#ecfdf5,#d1fae5); }
.dash-kpi .k-ico.b-purple { background:linear-gradient(135deg,#f5f3ff,#ede9fe); }
.dash-kpi .k-ico.b-red { background:linear-gradient(135deg,#fef2f2,#fee2e2); }
.dash-kpi .k-ico.b-orange { background:linear-gradient(135deg,#fffbeb,#fef3c7); }
.dash-kpi .k-ico.b-cyan { background:linear-gradient(135deg,#ecfeff,#cffafe); }
.dash-kpi .k-lbl { font-size:12px; color:var(--text2); font-weight:500; }
.dash-kpi .k-val { font-size:27px; font-weight:800; line-height:1.2; margin-top:2px;
  font-family:"SF Pro Display","Segoe UI","DIN Alternate",sans-serif; font-variant-numeric:tabular-nums; }
.dash-kpi .k-val.c-blue { color:#2563eb; }
.dash-kpi .k-val.c-green { color:#059669; }
.dash-kpi .k-val.c-purple { color:#7c3aed; }
.dash-kpi .k-val.c-red { color:#dc2626; }
.dash-kpi .k-val.c-orange { color:#d97706; }
.dash-kpi .k-val.c-cyan { color:#0891b2; }
.dash-kpi .k-sub { font-size:11px; color:var(--text2); margin-top:3px; }
.dash-kpi .k-glow { position:absolute; right:-18px; top:-18px; width:76px; height:76px; border-radius:50%; opacity:.10; }

/* 中部双栏：趋势 + 快捷操作 */
.dash-mid { display:grid; grid-template-columns:1.6fr 1fr; gap:16px; }
.dash-panel { position:relative; background:linear-gradient(170deg,#ffffff,#f8fafc); border:1px solid var(--border); border-radius:16px; padding:18px 20px; box-shadow:0 2px 10px rgba(15,23,42,.05); overflow:hidden; }
.dash-panel::before { content:''; position:absolute; left:20px; right:20px; top:0; height:2px;
  background:linear-gradient(90deg,transparent,rgba(56,189,248,.5),transparent); }
.dash-panel::after { content:''; position:absolute; right:-26px; bottom:-26px; width:130px; height:130px; border-radius:50%; pointer-events:none;
  background:radial-gradient(circle,rgba(56,189,248,.09),transparent 70%); }
.dash-panel-trend::after { background:radial-gradient(circle,rgba(56,189,248,.11),transparent 70%); }
.dash-panel-quick::after { background:radial-gradient(circle,rgba(251,191,36,.10),transparent 70%); }
.dash-panel-head { display:flex; align-items:baseline; justify-content:space-between; margin-bottom:12px; }
.dash-panel-head h3 { font-size:15px; font-weight:700; margin:0; color:var(--text); }
.dash-panel-head .psub { font-size:11.5px; color:var(--text2); }

/* 月度进销趋势 v2（网格刻度 + 数据标签 + 汇总条） */
.trend-box { position:relative; }
.trend-sum { display:flex; gap:20px; margin-bottom:10px; font-size:11.5px; color:var(--text2); align-items:center; flex-wrap:wrap; }
.trend-sum b { font-size:14px; color:var(--text); font-family:"SF Pro Display","Segoe UI","DIN Alternate",sans-serif; font-variant-numeric:tabular-nums; margin:0 2px; }
.tr-dot { display:inline-block; width:9px; height:9px; border-radius:3px; margin-right:5px; vertical-align:-1px; }
.tr-dot.pur { background:linear-gradient(135deg,#38bdf8,#2563eb); box-shadow:0 0 6px rgba(37,99,235,.55); }
.tr-dot.sale { background:linear-gradient(135deg,#34d399,#059669); box-shadow:0 0 6px rgba(5,150,105,.55); }
.trend-chart { position:relative; height:172px; padding:10px 8px 0; border:1px solid rgba(56,189,248,.22); border-radius:12px;
  background:
    repeating-linear-gradient(0deg, transparent 0 38px, rgba(125,211,252,.11) 38px 39px),
    repeating-linear-gradient(90deg, transparent 0 38px, rgba(125,211,252,.05) 38px 39px),
    radial-gradient(ellipse 85% 60% at 85% 0%, rgba(56,189,248,.17) 0%, transparent 62%),
    linear-gradient(180deg,#0d2138 0%,#0a1a2f 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06), inset 0 0 32px rgba(2,10,25,.45);
  overflow:hidden; }
.trend-chart::before { content:''; position:absolute; left:10px; right:10px; top:0; height:2px; z-index:2;
  background:linear-gradient(90deg,transparent,rgba(56,189,248,.75),rgba(251,191,36,.5),transparent); }
.trend-chart::after { content:''; position:absolute; left:6px; top:6px; width:70px; height:70px; border-radius:50%; pointer-events:none;
  background:radial-gradient(circle,rgba(56,189,248,.10),transparent 70%); }
.tr-cols { position:relative; z-index:1; display:flex; align-items:flex-end; gap:6px; height:100%; }
.tr-col { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:flex-end; height:100%; min-width:0;
  padding:0 2px 2px; border-radius:8px; transition:background .2s; }
.tr-col:hover { background:rgba(56,189,248,.13); }
.tr-v { font-size:9.5px; color:#9ec3ea; font-weight:600; line-height:1.15; transition:color .2s, transform .2s; font-variant-numeric:tabular-nums; text-shadow:0 1px 3px rgba(2,10,25,.6); }
.tr-col:hover .tr-v { color:#7dd3fc; }
.tr-bar { width:min(20px, 58%); border-radius:6px 6px 2px 2px; transition:height .5s ease, filter .2s, box-shadow .2s; position:relative; }
.tr-bar.pur { background:linear-gradient(180deg,#93c5fd,#2563eb); box-shadow:0 0 9px rgba(59,130,246,.35); }
.tr-bar.sale { background:linear-gradient(180deg,#34d399,#059669); box-shadow:0 0 9px rgba(16,185,129,.35); }
.tr-bar::before { content:''; position:absolute; top:2px; left:25%; right:25%; height:3px; border-radius:3px;
  background:rgba(255,255,255,.55); }
.tr-col:hover .tr-bar { filter:brightness(1.18); }
.tr-m { font-size:10.5px; color:#8aa9cd; margin-top:5px; white-space:nowrap; transition:color .2s; font-weight:500; }
.tr-col:hover .tr-m { color:#7dd3fc; font-weight:700; }
.tr-col:last-child .tr-m { color:#7dd3fc; font-weight:700; }
.tr-col:last-child .tr-bar.pur { box-shadow:0 0 14px rgba(37,99,235,.5); }
.tr-col:last-child .tr-bar.sale { box-shadow:0 0 14px rgba(5,150,105,.5); }
.mb-empty { color:#6d87a8; font-size:12.5px; text-align:center; padding:46px 0; }
.mb-legend { display:flex; gap:16px; justify-content:flex-end; margin-top:10px; font-size:11.5px; color:var(--text2);
  background:linear-gradient(160deg,#f1f5f9,#f8fafc); border:1px solid rgba(148,163,184,.18); border-radius:999px; padding:5px 16px; width:fit-content; margin-left:auto; }
.mb-legend i { display:inline-block; width:10px; height:10px; border-radius:3px; margin-right:5px; vertical-align:-1px; }
.mb-legend .lg-pur i { background:#2563eb; }
.mb-legend .lg-sale i { background:#059669; }

/* 快捷操作 */
.quick-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:10px; }
.quick-action { display:flex; flex-direction:column; align-items:center; gap:6px; padding:14px 8px;
  background:linear-gradient(165deg,var(--qa1),var(--qa2)); border:1px solid var(--qabd); border-radius:12px; cursor:pointer;
  font-size:12.5px; color:var(--text); font-weight:500; transition:all .18s; position:relative; overflow:hidden; }
.quick-action::before { content:''; position:absolute; left:14px; right:14px; top:0; height:2px;
  background:linear-gradient(90deg,transparent,var(--qaline),transparent); opacity:0; transition:opacity .18s; }
.quick-action:hover::before { opacity:1; }
.quick-action:hover { border-color:var(--qabd2); color:var(--qatx); transform:translateY(-2px); box-shadow:0 6px 16px var(--qaglow); }
.quick-action .qa-ico { width:38px; height:38px; border-radius:11px; display:flex; align-items:center; justify-content:center; font-size:19px; line-height:1; transition:transform .2s ease; box-shadow:0 3px 8px rgba(15,23,42,.08); }
.quick-action:hover .qa-ico { transform:scale(1.14); }
.quick-action:nth-child(1) .qa-ico { background:linear-gradient(135deg,#dbeafe,#bfdbfe); }
.quick-action:nth-child(2) .qa-ico { background:linear-gradient(135deg,#d1fae5,#a7f3d0); }
.quick-action:nth-child(3) .qa-ico { background:linear-gradient(135deg,#ede9fe,#ddd6fe); }
.quick-action:nth-child(4) .qa-ico { background:linear-gradient(135deg,#ffedd5,#fed7aa); }
.quick-action:nth-child(5) .qa-ico { background:linear-gradient(135deg,#cffafe,#a5f3fc); }
.quick-action:nth-child(6) .qa-ico { background:linear-gradient(135deg,#fef9c3,#fde68a); }
.quick-action:nth-child(7) .qa-ico { background:linear-gradient(135deg,#e0f2fe,#bae6fd); }
.quick-action:nth-child(8) .qa-ico { background:linear-gradient(135deg,#fee2e2,#fecaca); }
/* 快捷按钮逐项科技色：背景微染 + 顶部能量线 + 同色悬浮 */
.quick-action:nth-child(1) { --qa1:#f0f6ff; --qa2:#e3eefd; --qabd:rgba(59,130,246,.22); --qaline:rgba(59,130,246,.65); --qabd2:rgba(59,130,246,.5); --qatx:#2563eb; --qaglow:rgba(59,130,246,.18); }
.quick-action:nth-child(2) { --qa1:#ecfdf5; --qa2:#d3f5e4; --qabd:rgba(16,185,129,.22); --qaline:rgba(16,185,129,.65); --qabd2:rgba(16,185,129,.5); --qatx:#059669; --qaglow:rgba(16,185,129,.18); }
.quick-action:nth-child(3) { --qa1:#f6f4ff; --qa2:#e9e4fd; --qabd:rgba(139,92,246,.22); --qaline:rgba(139,92,246,.65); --qabd2:rgba(139,92,246,.5); --qatx:#7c3aed; --qaglow:rgba(139,92,246,.18); }
.quick-action:nth-child(4) { --qa1:#fff8ec; --qa2:#fdeeda; --qabd:rgba(245,158,11,.25); --qaline:rgba(245,158,11,.65); --qabd2:rgba(245,158,11,.5); --qatx:#d97706; --qaglow:rgba(245,158,11,.18); }
.quick-action:nth-child(5) { --qa1:#eefcfe; --qa2:#d6f3fb; --qabd:rgba(6,182,212,.22); --qaline:rgba(6,182,212,.65); --qabd2:rgba(6,182,212,.5); --qatx:#0891b2; --qaglow:rgba(6,182,212,.18); }
.quick-action:nth-child(6) { --qa1:#fffcf0; --qa2:#fcf0c8; --qabd:rgba(234,179,8,.25); --qaline:rgba(234,179,8,.65); --qabd2:rgba(234,179,8,.5); --qatx:#ca8a04; --qaglow:rgba(234,179,8,.18); }
.quick-action:nth-child(7) { --qa1:#f0f8ff; --qa2:#ddedfa; --qabd:rgba(14,165,233,.22); --qaline:rgba(14,165,233,.65); --qabd2:rgba(14,165,233,.5); --qatx:#0284c7; --qaglow:rgba(14,165,233,.18); }
.quick-action:nth-child(8) { --qa1:#fff5f5; --qa2:#fde4e4; --qabd:rgba(244,63,94,.22); --qaline:rgba(244,63,94,.65); --qabd2:rgba(244,63,94,.5); --qatx:#e11d48; --qaglow:rgba(244,63,94,.18); }

/* 首页板块卡片增强 */
.cat-card { border-radius:16px; box-shadow:0 4px 16px rgba(15,23,42,.06); transition:box-shadow .25s, transform .25s; }
.cat-card.biz { background:linear-gradient(172deg,#ffffff,#eef6ff); }
.cat-card.fin { background:linear-gradient(172deg,#ffffff,#fff9ec); }
.cat-card.analysis { background:linear-gradient(172deg,#ffffff,#effcf6); }
.cat-card:hover { box-shadow:0 16px 36px rgba(15,23,42,.14), 0 0 0 1px rgba(56,189,248,.25), 0 0 26px rgba(56,189,248,.10); }
.cat-card.biz:hover { box-shadow:0 16px 36px rgba(15,23,42,.14), 0 0 0 1px rgba(59,130,246,.30), 0 0 26px rgba(59,130,246,.12); }
.cat-card.fin:hover { box-shadow:0 16px 36px rgba(15,23,42,.14), 0 0 0 1px rgba(245,158,11,.32), 0 0 26px rgba(245,158,11,.12); }
.cat-card.analysis:hover { box-shadow:0 16px 36px rgba(15,23,42,.14), 0 0 0 1px rgba(16,185,129,.30), 0 0 26px rgba(16,185,129,.12); }
.cat-card:hover::before { filter:brightness(1.15); }
.cat-card .cat-card-icon { width:52px; height:52px; border-radius:13px; display:flex; align-items:center; justify-content:center; font-size:26px; box-shadow:0 4px 12px rgba(15,23,42,.08); transition:transform .25s ease; }
.cat-card:hover .cat-card-icon { transform:scale(1.1) rotate(-5deg); }
.cat-card.biz .cat-card-icon { background:linear-gradient(135deg,#eff6ff,#dbeafe); }
.cat-card.fin .cat-card-icon { background:linear-gradient(135deg,#fffbeb,#fef3c7); }
.cat-card.analysis .cat-card-icon { background:linear-gradient(135deg,#ecfdf5,#d1fae5); }
.cat-card .cat-stat { transition:background .2s ease, transform .2s ease, box-shadow .2s ease; }
.cat-card:hover .cat-stat { background:#fff; transform:translateY(-1px); box-shadow:0 3px 10px rgba(15,23,42,.07); }

@media (max-width:1100px) {
  .dash-kpis { grid-template-columns:repeat(3,1fr); }
  .dash-mid { grid-template-columns:1fr; }
}
@media (max-width:600px) {
  .dash-kpis { grid-template-columns:repeat(2,1fr); gap:10px; }
  .dash-hero { padding:20px 18px; }
  .dash-hero-greet { font-size:19px; }
  .dash-kpi { padding:13px 14px; }
  .dash-kpi .k-val { font-size:20px; }
  .quick-grid { gap:8px; }
  .dash-sec-head .dsh-tag { display:none; }
  .dash-sec-head .dsh-idx { width:19px; height:19px; border-radius:6px; font-size:10px; }
  .dash-hero-art { opacity:.5; width:150px; animation:none; }
  .dash-hero-strip { grid-template-columns:repeat(2,1fr); gap:12px 14px; padding:12px; }
  .dash-hs-sep { display:none; }
  .dash-hs-val { font-size:16px; }
  .dash-hs-ico { width:34px; height:34px; font-size:16px; }
  .trend-chart { height:150px; padding:8px 4px 0; }
  .tr-bar { width:min(13px, 48%); }
  .tr-v { font-size:8px; }
  .tr-m { font-size:9.5px; margin-top:4px; }
  .trend-sum { gap:12px; font-size:11px; }
  .trend-sum b { font-size:12.5px; }
}


/* ===== 二级子模块卡片 ===== */
.sub-cards { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:14px; margin-top:8px; }
.sub-card {
  background:var(--card); border:1px solid var(--border); border-radius:12px;
  padding:20px 18px; cursor:pointer; transition:all .18s;
  box-shadow:var(--shadow); display:flex; align-items:center; gap:14px;
}
.sub-card:hover { transform:translateY(-2px); box-shadow:0 6px 18px rgba(0,0,0,0.1); border-color:var(--primary); }
.sub-card-icon { font-size:28px; width:48px; height:48px; display:flex; align-items:center; justify-content:center; border-radius:10px; flex-shrink:0; }
.sub-card-icon.blue { background:#eff6ff; }
.sub-card-icon.purple { background:#f5f3ff; }
.sub-card-icon.green { background:#ecfdf5; }
.sub-card-icon.orange { background:#fffbeb; }
.sub-card-icon.red { background:#fef2f2; }
.sub-card-icon.cyan { background:#ecfeff; }
.sub-card-icon.teal { background:#f0fdfa; }
.sub-card-info { flex:1; min-width:0; }
.sub-card-info h3 { font-size:15px; font-weight:600; color:var(--text); margin-bottom:4px; }
.sub-card-info p { font-size:12px; color:var(--text2); margin:0; }
.sub-card-stats { display:flex; gap:16px; margin-top:8px; }
.sub-card-stats .scs { text-align:center; }
.sub-card-stats .scs-v { font-size:18px; font-weight:700; color:var(--primary); }
.sub-card-stats .scs-l { font-size:10.5px; color:var(--text2); }
.sub-card-arrow { font-size:18px; color:var(--border); transition:all .18s; }
.sub-card:hover .sub-card-arrow { color:var(--primary); transform:translateX(3px); }

/* ===== 分类页标题 ===== */
.cat-header { display:flex; align-items:center; gap:12px; margin-bottom:16px; }
.cat-header h2 { font-size:22px; font-weight:700; margin:0; }
.cat-header .cat-header-icon { font-size:30px; }

/* Breadcrumb in top nav */
.breadcrumb .br-item { font-size:13px; padding:5px 10px; }
.breadcrumb .br-sep { font-size:12px; margin:0 2px; }

@media (max-width: 768px) {
  .cat-cards { grid-template-columns:1fr; gap:12px; }
  .sub-cards { grid-template-columns:1fr; gap:10px; }
  .cat-card { padding:18px 16px; }
  .cat-card h2 { font-size:17px; }
  .cat-card-icon { font-size:28px; }
  .sub-card { padding:14px; }
  .sub-card-stats { gap:10px; }
  .sub-card-stats .scs-v { font-size:15px; }
}

/* Back button in sub-modules */

/* Back button in sub-modules */
.back-bar { display:none; align-items:center; gap:12px; margin-bottom:14px; }
.back-bar .back-btn {
  padding:7px 14px; border-radius:8px; font-size:13px; font-weight:500; cursor:pointer;
  border:1px solid var(--border); background:var(--card); color:var(--text);
  display:inline-flex; align-items:center; gap:6px; transition:all .15s;
}
.back-bar .back-btn:hover { background:var(--bg); border-color:var(--primary); color:var(--primary); }
.back-bar .back-btn svg { width:16px; height:16px; }
.back-bar .section-title { font-size:17px; font-weight:700; color:var(--text); }


/* ===== Login/Auth Overlay (黑金能源·科技煤场主题) ===== */
.auth-overlay { position:fixed; top:0; left:0; right:0; bottom:0; z-index:9999; display:flex; align-items:center; justify-content:center;
  background:
    radial-gradient(ellipse 85% 65% at 15% 0%, rgba(56,189,248,.26) 0%, transparent 58%),
    radial-gradient(ellipse 75% 60% at 88% 100%, rgba(251,191,36,.18) 0%, transparent 58%),
    radial-gradient(ellipse 60% 70% at 72% 18%, rgba(129,140,248,.16) 0%, transparent 55%),
    linear-gradient(160deg,#0c2a55 0%,#12406f 42%,#1a5b96 100%);
  overflow-y:auto; padding:20px; }
/* 科技网格背景 */
.auth-overlay::after { content:''; position:absolute; inset:0; pointer-events:none;
  background-image:linear-gradient(rgba(56,189,248,.055) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(56,189,248,.055) 1px,transparent 1px);
  background-size:44px 44px;
  -webkit-mask-image:radial-gradient(ellipse 90% 80% at 50% 40%,#000 30%,transparent 75%);
  mask-image:radial-gradient(ellipse 90% 80% at 50% 40%,#000 30%,transparent 75%); }
/* 光晕漂移 */
.auth-overlay::before { content:''; position:absolute; top:-50%; left:-50%; width:200%; height:200%; pointer-events:none;
  background:radial-gradient(circle at 30% 35%,rgba(56,189,248,.16) 0%,transparent 45%),
             radial-gradient(circle at 72% 65%,rgba(251,191,36,.12) 0%,transparent 45%);
  animation:authFloat 9s ease-in-out infinite alternate; }
@keyframes authFloat { from{transform:translate(0,0);} to{transform:translate(26px,-18px);} }
/* 煤颗粒漂浮层 */
.coal-bg { position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:0; }
.coal-dust { position:absolute; border-radius:50%;
  background:radial-gradient(circle at 32% 30%,#475569 0%,#1e293b 55%,#0f172a 100%);
  box-shadow:0 0 6px rgba(56,189,248,.30); opacity:.85; animation:coalDrift 13s ease-in-out infinite; }
.coal-dust.cd2 { animation-duration:9s; animation-direction:reverse; opacity:.65; }
.coal-dust.cd3 { animation-duration:17s; opacity:.5; }
@keyframes coalDrift {
  0%{transform:translate(0,0);} 25%{transform:translate(26px,-16px);}
  50%{transform:translate(-18px,12px);} 75%{transform:translate(20px,18px);}
  100%{transform:translate(-12px,-8px);} }
/* 登录卡片：玻璃拟态 + 金青渐变描边 */
.auth-card { position:relative; z-index:1; width:100%; max-width:430px;
  background:linear-gradient(rgba(24,46,80,.56),rgba(24,46,80,.56)) padding-box,
             linear-gradient(140deg,rgba(125,211,252,.80),rgba(129,140,248,.45) 45%,rgba(251,191,36,.75)) border-box;
  border:1px solid transparent; backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
  border-radius:22px; padding:36px 32px;
  box-shadow:0 24px 70px rgba(2,20,50,.45), 0 0 46px rgba(56,189,248,.18), inset 0 1px 0 rgba(255,255,255,.18); }
.auth-card::before { content:''; position:absolute; top:0; left:14%; right:14%; height:1px; pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(56,189,248,.75),rgba(251,191,36,.75),transparent); }
/* Logo：发光煤块 */
.auth-logo { text-align:center; margin-bottom:22px; }
.auth-logo .icon { display:inline-flex; width:76px; height:76px; align-items:center; justify-content:center; margin-bottom:10px;
  filter:drop-shadow(0 0 14px rgba(56,189,248,.5)) drop-shadow(0 0 30px rgba(251,191,36,.22));
  animation:coalLogoFloat 4s ease-in-out infinite; }
.auth-logo .icon.sm { width:52px; height:52px; margin-bottom:6px; }
@keyframes coalLogoFloat { 0%,100%{transform:translateY(0);} 50%{transform:translateY(-5px);} }
.auth-logo h1 { font-size:23px; font-weight:800; letter-spacing:.4px; margin:0; line-height:1.35;
  background:linear-gradient(92deg,#fde68a 0%,#f59e0b 28%,#f97316 52%,#38bdf8 78%,#7dd3fc 100%);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; color:transparent; }
.auth-logo p { font-size:12px; color:#a9c2e0; margin:6px 0 0; letter-spacing:2.5px; }
.auth-logo p b { color:#fbbf24; font-weight:600; letter-spacing:1px; }
/* Tabs */
.auth-tabs { display:flex; gap:0; margin-bottom:20px; background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.22); border-radius:11px; padding:4px; }
.auth-tab { flex:1; padding:9px; border:none; background:none; color:#b7cbe8; font-size:13px; font-weight:500; cursor:pointer; border-radius:8px; transition:all .2s; text-align:center; }
.auth-tab.active { background:linear-gradient(90deg,#0ea5e9,#6366f1); color:#fff; box-shadow:0 2px 14px rgba(56,189,248,.4); }
/* Fields */
.auth-field { margin-bottom:16px; }
.auth-field label { display:block; font-size:12px; color:#b7cbe8; margin-bottom:6px; font-weight:500; letter-spacing:.5px; }
.auth-field input { width:100%; padding:12px 14px; background:rgba(255,255,255,.11); border:1px solid rgba(255,255,255,.30); border-radius:10px;
  font-size:14px; color:#f1f5f9; transition:all .22s; box-shadow:inset 0 1px 3px rgba(2,20,50,.18); }
.auth-field input::placeholder { color:#83a0c6; }
.auth-field input:focus { outline:none; border-color:rgba(125,211,252,.85); background:rgba(125,211,252,.10); box-shadow:0 0 0 3px rgba(56,189,248,.16), inset 0 1px 3px rgba(2,20,50,.14); }
.auth-code-row { display:flex; gap:10px; }
.auth-code-row input { flex:1; }
.auth-code-btn { padding:0 16px; background:rgba(56,189,248,.18); border:1px solid rgba(125,211,252,.50); border-radius:10px;
  color:#bae6fd; font-size:12.5px; font-weight:500; cursor:pointer; white-space:nowrap; transition:all .2s; min-height:44px; }
.auth-code-btn:hover { background:rgba(56,189,248,.28); box-shadow:0 0 12px rgba(56,189,248,.28); }
.auth-code-btn:disabled { opacity:.45; cursor:not-allowed; }
.auth-code-display { margin-top:8px; padding:10px 14px; background:rgba(16,185,129,.16); border:1px solid rgba(52,211,153,.50); border-radius:9px;
  font-size:13px; color:#a7f3d0; text-align:center; }
.auth-code-display b { font-size:20px; letter-spacing:4px; color:#a7f3d0; }
/* Role select */
.auth-role-select { display:flex; gap:8px; margin-bottom:16px; }
.auth-role-btn { flex:1; padding:10px; border:1px solid rgba(255,255,255,.28); background:rgba(255,255,255,.08); border-radius:10px;
  color:#b7cbe8; font-size:13px; cursor:pointer; transition:all .2s; text-align:center; }
.auth-role-btn .role-icon { display:block; font-size:20px; margin-bottom:4px; }
.auth-role-btn.active { border-color:rgba(251,191,36,.75); background:linear-gradient(135deg,rgba(251,191,36,.22),rgba(245,158,11,.12)); color:#fcd34d; box-shadow:0 0 14px rgba(251,191,36,.20); }
/* 主按钮：能源金渐变 + 流光扫过 */
.auth-btn { width:100%; padding:13px; background:linear-gradient(92deg,#f59e0b 0%,#f97316 55%,#f59e0b 100%); color:#fff; border:none; border-radius:11px;
  font-size:15.5px; font-weight:700; letter-spacing:6px; cursor:pointer; transition:all .22s; margin-top:4px;
  box-shadow:0 6px 20px rgba(245,158,11,.28); position:relative; overflow:hidden; }
.auth-btn::after { content:''; position:absolute; top:0; left:-70%; width:50%; height:100%; transform:skewX(-22deg);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent); animation:authBtnShine 3.2s ease-in-out infinite; }
@keyframes authBtnShine { 0%{left:-70%;} 55%{left:130%;} 100%{left:130%;} }
.auth-btn:hover { background:linear-gradient(92deg,#fbbf24 0%,#f97316 55%,#fbbf24 100%); box-shadow:0 8px 28px rgba(245,158,11,.4), 0 0 18px rgba(56,189,248,.2); transform:translateY(-1px); }
.auth-btn:disabled { opacity:.55; cursor:not-allowed; transform:none; box-shadow:none; }
/* Remember */
.auth-remember { display:flex; align-items:center; justify-content:space-between; margin:2px 0 14px; }
.auth-remember label { display:flex; align-items:center; gap:7px; font-size:13px; color:#b7cbe8; cursor:pointer; user-select:none; }
.auth-remember input[type="checkbox"] { width:16px; height:16px; accent-color:#38bdf8; cursor:pointer; margin:0; }
.auth-remember .rm-tip { font-size:11.5px; color:#8ba6c9; }
/* Links */
.auth-links { display:flex; justify-content:space-between; margin-top:16px; }
.auth-link { font-size:12.5px; color:#9db8da; cursor:pointer; text-decoration:none; transition:color .2s; }
.auth-link:hover { color:#7dd3fc; text-shadow:0 0 10px rgba(56,189,248,.4); }
/* Error / Success 暗色适配 */
.auth-error { padding:10px 14px; background:rgba(220,38,38,.16); border:1px solid rgba(248,113,113,.50); border-radius:9px;
  font-size:12.5px; color:#fecaca; margin-bottom:14px; display:none; }
.auth-success { padding:10px 14px; background:rgba(16,185,129,.16); border:1px solid rgba(52,211,153,.50); border-radius:9px;
  font-size:12.5px; color:#a7f3d0; margin-bottom:14px; display:none; }
.auth-step { display:none; }
.auth-step.active { display:block; }
.auth-back { font-size:12.5px; color:#9db8da; cursor:pointer; margin-bottom:14px; display:inline-block; transition:color .2s; }
.auth-back:hover { color:#7dd3fc; }

/* 账号开通提示（B 方案 · 自助注册下线后替代原注册表单）
   暗色登录页配色，与 .auth-error / .auth-success 同一族 */
.auth-notice { padding:14px 16px; background:rgba(56,189,248,.13); border:1px solid rgba(125,211,252,.42);
  border-radius:10px; font-size:12.5px; line-height:1.85; color:#cfe6ff; margin-bottom:16px; }
.auth-notice b { color:#fbbf24; font-weight:600; }
.auth-notice .tip-sub { display:block; margin-top:6px; color:#9db8da; font-size:12px; line-height:1.7; }

/* 找回面板内嵌样式覆盖（暗色适配）—— 注册表单已于 2026-09-20 按 B 方案下线 */
#fpQuestion { background:rgba(255,255,255,.11) !important; border:1px solid rgba(255,255,255,.30) !important; color:#f1f5f9 !important; }
/* 登录页移动端适配 */
@media (max-width:768px) {
  .auth-card { padding:26px 20px; }
  .auth-logo h1 { font-size:18px; }
  .auth-logo .icon { width:60px; height:60px; }
}
/* User badge in topnav */
.user-badge { display:flex; align-items:center; gap:6px; padding:5px 12px; background:var(--primary-light); border-radius:7px; font-size:12px; color:var(--primary); font-weight:600; }
.user-badge .role-tag { font-size:10px; padding:1px 6px; border-radius:4px; }
.user-badge .role-tag.admin { background:var(--primary); color:#fff; }
.user-badge .role-tag.user { background:var(--success); color:#fff; }
.user-logout { padding:5px 10px; border:1px solid var(--border); border-radius:6px; font-size:12px; cursor:pointer; background:var(--card); color:var(--text2); transition:all .15s; }
.user-logout:hover { background:#fef2f2; color:var(--danger); border-color:#fecaca; }
/* User management modal */
.user-mgmt-table { width:100%; border-collapse:collapse; font-size:13px; }
.user-mgmt-table th { background:#f1f5f9; padding:8px 10px; text-align:left; font-weight:600; font-size:12px; color:#475569; border-bottom:2px solid #e2e8f0; }
.user-mgmt-table td { padding:7px 10px; border-bottom:1px solid #f1f5f9; }
.user-mgmt-table tr:hover { background:#f8fafc; }
/* Permission-restricted overlay on buttons */
.perm-locked { position:relative; opacity:.5; pointer-events:none; }
.perm-locked::after { content:'🔒'; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); font-size:14px; }
/* ===== System Settings (权限/系统设置) ===== */
.settings-toolbar { display:flex; justify-content:space-between; align-items:center; margin-bottom:14px; flex-wrap:wrap; gap:8px; }
.settings-hint { font-size:12px; color:var(--text2); }
.status-badge { display:inline-block; padding:2px 8px; border-radius:10px; font-size:11px; font-weight:600; }
.status-badge.on { background:#ecfdf5; color:#16a34a; }
.status-badge.off { background:#fef2f2; color:#dc2626; }
.user-act { display:flex; gap:6px; flex-wrap:wrap; align-items:center; }
.user-act .btn-sm { font-size:11px; padding:3px 8px; }
.perm-section-title { font-size:12.5px; font-weight:600; color:#475569; margin:14px 0 8px; display:flex; align-items:center; gap:6px; }
.perm-grid { display:grid; grid-template-columns:repeat(4, 1fr); gap:8px; }
.perm-grid.ops { grid-template-columns:repeat(2, 1fr); }
.perm-item { display:flex; align-items:center; gap:7px; padding:8px 10px; border:1px solid var(--border); border-radius:8px; font-size:12.5px; cursor:pointer; background:var(--card); transition:all .15s; user-select:none; }
.perm-item:hover { border-color:var(--primary); background:var(--primary-light); }
.perm-item.checked { border-color:var(--primary); background:var(--primary-light); color:var(--primary); font-weight:600; }
.perm-item input { accent-color:var(--primary); width:15px; height:15px; cursor:pointer; }
.perm-item .perm-ic { font-size:14px; }
.perm-item .perm-lb { flex:1; }
.perm-actions { display:flex; gap:10px; justify-content:flex-end; margin-top:18px; flex-wrap:wrap; }
.perm-actions .btn { font-size:12.5px; }
.perm-tip { font-size:11.5px; color:#94a3b8; margin-top:10px; line-height:1.6; }
@media (max-width:768px) {
  .perm-grid { grid-template-columns:repeat(2, 1fr); }
  .perm-grid.ops { grid-template-columns:1fr; }
  .user-act { flex-direction:column; align-items:flex-start; }
}

/* ===== 第⑤项（2026-09-21）· 系统设置页签 + 我的公司 =====================
   刻意用新的 class 名（settings-tabs / settings-tab / company-*），
   不覆盖任何既有选择器 —— 这一段的加入不该改变系统设置里原有那一屏的任何像素。 */
.settings-tabs { display:flex; gap:6px; margin:-4px 0 14px; border-bottom:1px solid var(--border, #e5e7eb); }
.settings-tab {
  background:transparent; border:none; border-bottom:2px solid transparent;
  padding:9px 14px; font-size:13.5px; color:#64748b; cursor:pointer; border-radius:6px 6px 0 0;
}
.settings-tab:hover { background:#f1f5f9; color:#0f172a; }
.settings-tab.active { color:var(--primary, #2563eb); border-bottom-color:var(--primary, #2563eb); font-weight:600; }
.company-form { padding:4px 0 2px; }
.company-grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:12px; }
.company-field { margin-bottom:12px; }
.company-field label { display:block; font-size:12.5px; color:#475569; margin-bottom:5px; font-weight:600; }
.company-field input {
  width:100%; box-sizing:border-box; padding:8px 10px; font-size:13px;
  border:1px solid #d7dde5; border-radius:6px; background:#fff; color:#0f172a;
}
.company-field input:focus { outline:none; border-color:var(--primary, #2563eb); box-shadow:0 0 0 3px rgba(37,99,235,.10); }
.company-field input:disabled { background:#f8fafc; color:#94a3b8; cursor:not-allowed; }
.company-req { color:#dc2626; }
.company-tip { font-size:11.5px; color:#94a3b8; margin-top:4px; line-height:1.6; }
.company-meta { font-size:11.5px; color:#94a3b8; margin-top:6px; line-height:1.7; }
.company-meta code { background:#f1f5f9; padding:1px 5px; border-radius:4px; }
@media (max-width:768px) {
  .company-grid { grid-template-columns:1fr; }
  .settings-tabs { margin-top:0; }
}

/* ===== 第⑤项（2026-09-21）· 「我的公司」页签激活时藏起「用户与权限」那一屏 ====
   为什么用 CSS 类而不是逐个改 inline style：那四个元素的 display 由**既有 JS** 管
   （userMgmtServerHint 只在服务端模式才亮），动 inline style 会与它打架、且退出
   页签时要还原成"原来是啥"，多一份状态就多一个 bug 面。
   加 !important 是因为「页签切显隐」是此刻**最高优先级**的显示意图。 */
#settingsModal.co-tab #settingsUsersBar,
#settingsModal.co-tab #userMgmtServerHint,
#settingsModal.co-tab #settingsUsersTable,
#settingsModal.co-tab #settingsUsersTip { display:none !important; }

/* ★★ 「我的公司」页签**真正亮出来**的那一句（2026-09-21 补：第⑤项自检抓到的缺陷）。
   上面那条只把「用户与权限」藏了；而 #settingsPaneCompany 在 index.html 里带的是
   **inline** 的 style="display:none" —— inline 样式不会被普通规则覆盖，
   所以"只藏不亮"的结果是：点「我的公司」一片空白（用户屏没了、公司屏也没出来）。
   带 !important 才压得过 inline（author 样式表里 !important 的声明 > 不带 !important
   的 inline 声明）—— 与上面那条同一种手法、同一个理由。
   ★ 光靠"结构都在"的静态判据抓不到它：当时 C8（容器在、默认 none）、C12（样式块已加）、
     C13（显隐走 CSS 类）**各自全都 PASS** ⇒ 补 C25 组合判据 + 144 相位四·7（computedStyle）。 */
#settingsModal.co-tab #settingsPaneCompany { display:block !important; }