
/* ============ 设计系统 v4.0（Arco Design 语言 · 大厂中后台标准）============
   核心：克制。单一主色贯穿 + 4 级严谨灰度 + 高信息密度，不用装饰性彩色。 */
:root{
  /* —— 用户指定设计 token（直接使用）—— */
  --page-bg:#F7F9FC;
  --card-bg:rgba(255,255,255,0.82);
  --card-blur:blur(10px);
  --card-border:1px solid rgba(226,232,240,0.65);
  --card-shadow:0 2px 14px rgba(0,0,0,0.04);
  /* v1.7.17 主色提亮：蓝底组件（按钮/选中态/头像/气泡）统一用亮蓝 #3B7DFF；
     白底上的主色文字/图标改用 --primary-ink（深蓝 #2563EB），保证对比度与可读性 */
  --primary:#3b7dff;
  --primary-ink:#2563eb;
  --primary-light:rgba(59,125,255,0.08);
  --primary-hover:#2f6bec;
  --text-title:#1e293b;
  --text-body:#475569;
  --text-placeholder:#94a3b8;
  --success:#10b981;
  --warning:#f59e0b;
  --error:#ef4444;
  --page-padding-x:32px;
  --block-margin:24px;
  --card-gap:20px;
  --card-padding:20px;
  --inner-gap:16px;
  /* —— 兼容系统原有变量（映射到上方 token）—— */
  --primary-l:#2f6bec;
  --primary-d:#245bd4;
  --primary-bg:rgba(59,125,255,0.08);
  --primary-bg-h:rgba(59,125,255,0.14);
  --text:#1e293b;
  /* v1.2.92 修复：--text1 全站被引用 45+ 处（app.css / merchants.js / public/index.html 等）却从未定义，
     导致 var(--text1) 全部失效、文字颜色回退到继承值（标题/数字/正文深浅失控）。
     现补齐为与 --text 同值的一级文字色，保持与既有 token 体系一致。 */
  --text1:#1e293b;
  --text2:#475569;
  --text3:#94a3b8;
  --text4:#cbd5e1;
  --bg:#F7F9FC;
  --card:rgba(255,255,255,0.82);
  --fill:#f1f5f9;
  --fill-l:#f8fafc;
  --border:#e2e8f0;
  --border-l:#eef2f7;
  --success-bg:#ecfdf5;
  --warning-bg:#fffbeb;
  --danger:#ef4444;
  --danger-bg:#fef2f2;
  --info:#3b7dff;--purple:#7c3aed;--teal:#0d9488;
  --shadow-sm:0 1px 2px rgba(15,23,42,.04);
  --shadow:0 2px 8px rgba(15,23,42,.05);
  --shadow-md:0 4px 16px rgba(15,23,42,.08);
  --shadow-lg:0 12px 32px rgba(15,23,42,.12);
  --shadow-hover:0 8px 24px rgba(15,23,42,.10);
  --radius-sm:6px;--radius:14px;--radius-lg:14px;--radius-xl:16px;
  --sidebar-w:232px;--topbar-h:52px;
  --table-row-h:44px;--btn-h:40px;
}
/* 增改6：门店ID 一键复制按钮 */
.id-copy-btn{display:inline-flex;align-items:center;justify-content:center;margin-left:3px;padding:1px;border:none;background:transparent;color:var(--text2);cursor:pointer;border-radius:4px;line-height:0;transition:color .15s,background .15s}
.id-copy-btn:hover{color:var(--primary-ink);background:#EEF1FD}
/* v1.2.97：复制图标统一由 CSS mask 提供（按钮内容留空即可，不再放文字或内联 SVG） */
.id-copy-btn::before{
  content:'';display:block;width:12px;height:12px;flex-shrink:0;
  background-color:currentColor;
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><rect x='9' y='9' width='13' height='13' rx='2'/><path d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'/></svg>") center/contain no-repeat;
  mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><rect x='9' y='9' width='13' height='13' rx='2'/><path d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'/></svg>") center/contain no-repeat;
}
/* 旧的内联 SVG/文字统一隐藏，避免与 ::before 图标叠加显示两个 */
.id-copy-btn svg{display:none}
.id-copy-btn{font-size:0}
/* v1.2.97：全站门店名称统一可点击样式（点击在原页弹窗展示商家档案） */
.arch-name-link{color:var(--primary-ink);cursor:pointer;text-decoration:none;font-weight:600}
.arch-name-link:hover{text-decoration:underline;color:#165DFF}
.arch-id-copy{display:inline-flex;align-items:center;white-space:nowrap}
.arch-id-copy .id-copy-btn{margin-left:4px}
/* 渠道/合伙人「解绑」按钮（独立样式，勿复用 id-copy-btn，其已被复制图标占用） */
.unbind-btn{margin-left:4px;cursor:pointer;color:var(--danger);font-size:11px;white-space:nowrap}
.unbind-btn:hover{text-decoration:underline}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;overflow:hidden}
/* v1.7.26 字体大小缩放：zoom 作用于滚动容器内的 .view 与弹窗层（scrollHeight 随放大内容正确增长，
   底部翻页可达）；不在根元素上 zoom——根元素 zoom 会让页面渲染高度超出视口、被 overflow:hidden 裁掉 */
#content > .view,
.modal-overlay{zoom:var(--fs-zoom,1)}
body{font-family:-apple-system,BlinkMacSystemFont,"Inter","Segoe UI",Roboto,"Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-variant-numeric:tabular-nums;letter-spacing:-0.005em}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}
::-webkit-scrollbar-track{background:transparent}

/* ============ 布局 ============ */
#app{display:flex;height:100vh}
#sidebar{width:var(--sidebar-w);background:#1D2129;color:var(--text3);display:flex;flex-direction:column;flex-shrink:0;transition:transform .3s;z-index:100}
#sidebar .logo{padding:0 20px;font-size:16px;font-weight:600;color:#fff;border-bottom:1px solid rgba(255,255,255,.06);display:flex;align-items:center;gap:10px;height:56px;flex-shrink:0}
#sidebar .logo svg{width:24px;height:24px;flex-shrink:0}
/* v1.8.18 顶部折叠按钮：简约、悬停浅蓝、折叠后居中旋转 180° */
#sidebar .collapse-btn.top{margin:0 0 0 auto;padding:0;border:none;background:transparent;color:#86909C;width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s,color .15s,transform .3s;flex-shrink:0}
#sidebar .collapse-btn.top:hover{background:rgba(255,255,255,.1);color:#fff}
#sidebar .collapse-btn.top svg{width:16px;height:16px;transition:transform .3s}
#sidebar.collapsed .collapse-btn.top{margin:0 auto}
#sidebar.collapsed .collapse-btn.top svg{transform:rotate(180deg)}
#sidebar .nav{flex:1;overflow-y:auto;padding:8px 0}
#sidebar .nav-group{margin-bottom:4px}
/* v1.8.19 分组手风琴：板块标题可点击展开/收起，箭头随状态旋转，菜单高度过渡丝滑 */
/* v1.8.21 板块标题主题化：字号加大加粗 + 主题蓝竖条点缀（贴合深色侧栏与主色体系），不再灰暗难辨 */
#sidebar .nav-group-title{padding:10px 20px 6px;font-size:12px;font-weight:600;color:#C9CDD4;letter-spacing:.6px;display:flex;align-items:center;gap:7px;cursor:pointer;user-select:none;transition:color .15s}
#sidebar .nav-group-title::before{content:'';width:3px;height:12px;border-radius:2px;background:var(--primary);flex-shrink:0}
#sidebar .nav-group-title:hover{color:#fff}
#sidebar .nav-group-title .nav-group-arrow{width:12px;height:12px;flex-shrink:0;margin-left:auto;transition:transform .25s cubic-bezier(.4,0,.2,1)}
#sidebar .nav-group.nav-collapsed .nav-group-arrow{transform:rotate(-90deg)}
#sidebar .nav-group-title span{flex:1}
/* v1.8.19 手风琴动画优化（修复超级管理员大量菜单项时展开/收起卡顿）：
   grid-template-rows 0fr↔1fr 过渡由合成器计算，避免 max-height 逐帧布局重排；
   内层 .nav-group-inner 负责裁剪 */
#sidebar .nav-group-items{display:grid;grid-template-rows:0fr;transition:grid-template-rows .26s cubic-bezier(.4,0,.2,1)}
#sidebar .nav-group:not(.nav-collapsed) .nav-group-items{grid-template-rows:1fr}
#sidebar .nav-group-inner{overflow:hidden;min-height:0}
#sidebar .nav-item{display:flex;align-items:center;gap:10px;padding:9px 20px;cursor:pointer;color:#C9CDD4;font-size:14px;transition:background .15s,color .15s;border-left:3px solid transparent;line-height:20px}
/* v1.5.33 侧边栏待处理红点 */
#sidebar .nav-dot{width:8px;height:8px;border-radius:50%;background:#F53F3F;margin-left:auto;flex-shrink:0;
  box-shadow:0 0 6px rgba(245,63,63,.8);animation:navDotPulse 2s ease-in-out infinite}
@keyframes navDotPulse{0%,100%{opacity:1}50%{opacity:.45}}
#sidebar .nav-item.active .nav-dot{background:#fff;box-shadow:none;animation:none}
#sidebar .nav-item:hover{background:rgba(255,255,255,.06);color:#fff}
/* 选中态：实心主色背景（Arco / Ant Design Pro 标志） */
#sidebar .nav-item.active{background:var(--primary);color:#fff;border-left-color:transparent;font-weight:500}
#sidebar .nav-item.active:hover{background:var(--primary-l)}
#sidebar .nav-item svg{width:16px;height:16px;flex-shrink:0;opacity:.9}
#sidebar .sidebar-footer{padding:12px 20px;border-top:1px solid rgba(255,255,255,.06);font-size:11px;color:#86909C}

#main{flex:1;display:flex;flex-direction:column;overflow:hidden}
#topbar{height:var(--topbar-h);background:var(--card);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:16px;flex-shrink:0;box-shadow:0 1px 2px rgba(0,0,0,.03)}
#topbar .menu-toggle{display:none;cursor:pointer;padding:6px}
#topbar .menu-toggle svg{width:24px;height:24px}
#topbar .search-box{flex:1;max-width:400px;position:relative}
#topbar .search-box input{width:100%;height:36px;border:1px solid var(--border);border-radius:8px;padding:0 12px 0 38px;font-size:13px;background:var(--bg);transition:border-color .2s}
#topbar .search-box input:focus{outline:none;border-color:var(--primary);background:#fff}
#topbar .search-box svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--text2)}
#topbar .topbar-right{display:flex;align-items:center;gap:12px;margin-left:auto}
#topbar .role-badge{padding:4px 10px;border-radius:6px;font-size:12px;font-weight:600}
#topbar .role-badge.admin{background:#dbeafe;color:#245bd4}
#topbar .role-badge.ops{background:#dcfce7;color:#166534}
#topbar .role-badge.signer{background:#fef3c7;color:#92400e}
#topbar .role-badge.viewer{background:#f1f5f9;color:#475569}
#topbar .role-select{height:34px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff;cursor:pointer}
#topbar .user-info{display:flex;align-items:center;gap:8px;font-size:13px}
#topbar .user-avatar{width:32px;height:32px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600}
#topbar .data-actions{display:flex;gap:8px}
#topbar .btn-icon{width:34px;height:34px;border:1px solid var(--border);border-radius:8px;background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}
#topbar .btn-icon:hover{border-color:var(--primary);color:var(--primary-ink)}
#topbar .btn-icon svg{width:16px;height:16px}

#content{flex:1;overflow-y:auto;padding:20px}
.view{display:none}
.view.active{display:block}
.view-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:10px}
.view-title{font-size:20px;font-weight:600;color:var(--text);letter-spacing:-0.01em}
.view-subtitle{font-size:13px;color:var(--text3);margin-top:4px}

/* ============ 组件 ============ */
/* 卡片：白底 + 1px 细边框 + 8px 圆角，无阴影（Arco 卡片默认无阴影，靠边框区分） */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-bottom:16px;transition:border-color .2s,box-shadow .2s}
.card:hover{border-color:#DCDEE3;box-shadow:var(--shadow)}
.card-title{font-size:15px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:8px;color:var(--text)}
.card-title .badge{margin-left:auto;font-size:12px;padding:2px 8px;border-radius:var(--radius-sm);background:var(--fill);color:var(--text2);font-weight:400}

/* 按钮：高 32px，圆角 6px，hover 只改色不位移（大厂克制原则） */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 15px;border-radius:var(--radius-sm);font-size:14px;font-weight:400;cursor:pointer;border:1px solid transparent;transition:all .15s;white-space:nowrap;line-height:1;text-decoration:none}
.btn:active{opacity:.85}
.btn:focus-visible{outline:2px solid var(--primary-l);outline-offset:1px}
.btn svg{width:14px;height:14px}
/* v1.7.17 主按钮：纵向微渐变（上浅下深，观感更轻盈）+ 顶部高光 + 柔和投影；hover 变深而非变亮 */
.btn-primary{background:linear-gradient(180deg,#5a8cff 0%,var(--primary) 100%);color:#fff;box-shadow:0 1px 2px rgba(59,125,255,.22),inset 0 1px 0 rgba(255,255,255,.18)}
.btn-primary:hover{background:linear-gradient(180deg,#4a7df5 0%,var(--primary-hover) 100%);box-shadow:0 3px 10px rgba(59,125,255,.28),inset 0 1px 0 rgba(255,255,255,.16)}
.btn-primary:active{opacity:1;background:var(--primary-hover);box-shadow:inset 0 1px 3px rgba(16,42,100,.20)}
.btn-outline{background:#fff;border-color:var(--border);color:var(--text2)}
.btn-outline:hover{border-color:var(--primary);color:var(--primary-ink);background:var(--primary-bg)}
.btn-success{background:var(--success);color:#fff}
.btn-success:hover{opacity:.9}
.btn-danger{background:var(--danger);color:#fff}
.btn-danger:hover{opacity:.9}
.btn-warning{background:var(--warning);color:#fff}
.btn-warning:hover{opacity:.9}
.btn-sm{height:28px;padding:0 11px;font-size:13px}
.btn-lg{height:40px;padding:0 20px;font-size:15px}

/* 标签：小圆角 4px（大厂用小圆角，非 pill），柔和背景 */
.tag{display:inline-flex;align-items:center;padding:1px 8px;border-radius:var(--radius-sm);font-size:12px;font-weight:400;white-space:nowrap;line-height:18px}
.tag-success{background:var(--success-bg);color:#009A29}
.tag-warning{background:var(--warning-bg);color:#D25F00}
.tag-danger{background:var(--danger-bg);color:#CB2634}
.tag-default{background:var(--fill);color:var(--text2)}
.tag-info,.tag-primary{background:var(--primary-bg);color:#0E42D2}
.tag-purple{background:#F5E8FF;color:#5B21B6}
.tag-primary{background:#dbeafe;color:#245bd4}
.tag-change{background:#fff1e6;color:#d9480f;border:1px solid #ffd8a8}
.diff-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:8px}
.diff-title{font-size:13px;font-weight:700;margin-bottom:6px}
.diff-title.add{color:#16a34a}
.diff-title.del{color:#dc2626}
.diff-item{font-size:12px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;margin-bottom:4px;background:#fff}
.diff-empty{font-size:12px;color:var(--text2)}
@media(max-width:520px){.diff-grid{grid-template-columns:1fr}}

.level-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:6px;font-size:12px;font-weight:600}
.level-super{background:#f59e0b;color:#fff}
.level-head{background:#8b5cf6;color:#fff}
.level-upper{background:#dbeafe;color:#245bd4}
.level-lower{background:#dcfce7;color:#166534}
.level-tail{background:#fef3c7;color:#92400e}
.level-low{background:#fee2e2;color:#991b1b}
.level-pending{background:#f3f4f6;color:#6b7280;border:1px dashed #d1d5db}

table{width:100%;border-collapse:collapse;font-size:13px}
thead th{text-align:left;padding:9px 12px;background:var(--fill-l);border-bottom:1px solid var(--border);color:var(--text2);font-weight:500;font-size:13px;white-space:nowrap;position:sticky;top:0;z-index:1}
tbody td{padding:11px 12px;border-bottom:1px solid var(--border-l);color:var(--text)}
tbody tr:hover{background:var(--fill-l)}
.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--card)}
.table-wrap table{width:100%;border-collapse:collapse}
.table-wrap th{text-align:left;padding:9px 12px;font-size:13px;font-weight:500;color:var(--text2);background:var(--fill-l);border-bottom:1px solid var(--border);white-space:nowrap;position:sticky;top:0;z-index:1}
.table-wrap td{padding:11px 12px;border-bottom:1px solid var(--border-l);font-size:13px;color:var(--text)}
.table-wrap tr:last-child td{border-bottom:none}
.table-wrap tbody tr:hover td{background:var(--fill-l)}

.filter-bar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;align-items:center}
.filter-bar select,.filter-bar input{height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 10px;font-size:13px;background:#fff;min-width:120px;transition:border-color .15s,box-shadow .15s;color:var(--text);line-height:1}
.filter-bar select:hover,.filter-bar input:hover{border-color:#DCDEE3}
.filter-bar select:focus,.filter-bar input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,93,255,.12)}

.kpi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:16px}
/* KPI 卡片：白底 + 1px 细边框 + 8px 圆角，克制无装饰（Arco 风格） */
.kpi-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;position:relative;transition:border-color .2s,box-shadow .2s}
.kpi-card:hover{border-color:var(--primary-l);box-shadow:var(--shadow-hover)}
.kpi-card .kpi-label{font-size:12px;color:var(--text3);margin-bottom:10px;display:flex;align-items:center;gap:6px;line-height:1.2}
.kpi-card .kpi-value{font-size:28px;font-weight:600;line-height:1.15;letter-spacing:-0.01em;color:var(--text);font-variant-numeric:tabular-nums}
.kpi-card .kpi-sub{font-size:12px;margin-top:8px;color:var(--text3);line-height:1.5}
.kpi-card .kpi-icon{position:absolute;top:16px;right:16px;width:32px;height:32px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;background:var(--fill-l);color:var(--text3)}
.kpi-card .kpi-icon svg{width:16px;height:16px}
/* 语义色仅用于需强调的指标（异常/警示），常规指标保持中性深色 —— 大厂克制原则 */
.kpi-card.danger .kpi-value{color:var(--danger)}
.kpi-card.success .kpi-value{color:var(--success)}
.kpi-card.warning .kpi-value{color:var(--warning)}
.kpi-card.primary .kpi-value{color:var(--primary-ink)}
.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:16px}
.alert{padding:12px 14px;border-radius:10px;font-size:13px;margin-bottom:16px}
.alert-danger{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5}
.alert-success{background:#dcfce7;color:#166534;border:1px solid #86efac}
.chart-tip{position:fixed;z-index:9999;display:none;background:#1e293b;color:#fff;padding:8px 12px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 6px 20px rgba(0,0,0,.25);pointer-events:none;max-width:240px}
.chart-tip b{color:#fff}
.streamer-check{display:flex;flex-wrap:wrap;gap:8px}
.streamer-check label{display:inline-flex;align-items:center;gap:5px;background:#f1f5f9;border:1px solid var(--border);border-radius:999px;padding:6px 12px;font-size:13px;cursor:pointer;user-select:none}
.streamer-check input{margin:0;width:16px;height:16px}
.chip-toggle{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;font-size:12px;border:1px solid var(--border);cursor:pointer}
.chip-toggle.on{background:#dbeafe;color:#245bd4;border-color:#bfdbfe}
.chip-toggle.off{background:#f1f5f9;color:#94a3b8}
.vouch-preview{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.vouch-thumb{position:relative;width:64px;height:64px;border-radius:8px;overflow:hidden;border:1px solid var(--border);cursor:pointer;flex:0 0 auto}
.vouch-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.vouch-del{position:absolute;top:1px;right:1px;width:18px;height:18px;line-height:16px;text-align:center;border:none;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:12px;cursor:pointer;padding:0}

.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}

/* 模态框 */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(29,33,41,.6);display:none;align-items:center;justify-content:center;z-index:1000;padding:20px}
.modal-overlay.show{display:flex;animation:modalFade .2s ease}
@keyframes modalFade{from{opacity:0}to{opacity:1}}
.modal{background:var(--card);border-radius:var(--radius);width:100%;max-width:600px;max-height:85vh;overflow-y:auto;box-shadow:var(--shadow-lg);animation:modalIn .25s cubic-bezier(.32,.72,.33,1)}
@keyframes modalIn{from{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:none}}
.modal.modal-lg{max-width:920px}
.modal.inv-lg{max-width:1160px;max-height:90vh}
.modal.inv-lg .modal-body{padding:22px 24px}
/* 招商看板门店明细/反馈记录等宽表弹窗：更宽，保证门店表格与客资表格完整展示不被挤压 */
.modal.inv-xl{max-width:1480px;max-height:92vh}
.modal.inv-xl .modal-body{padding:22px 26px}
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--card);z-index:1}
.modal-title{font-size:15px;font-weight:500;color:var(--text);letter-spacing:-0.01em}
.modal-close{cursor:pointer;width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:var(--text3);background:none;border:none;border-radius:var(--radius-sm);font-size:18px;line-height:1;transition:all .15s}
.modal-close:hover{background:var(--fill);color:var(--text)}
.modal-body{padding:20px 22px}
.modal-footer{padding:12px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;position:sticky;bottom:0;background:var(--card)}
/* 弹窗内表单 label 统一（兼容裸 label 直接包 input 的用法，如商家编辑弹窗） */
.modal-body label{display:block;font-size:13px;font-weight:500;color:var(--text)}
.modal-body label>input,.modal-body label>select,.modal-body label>textarea{margin-top:4px}

/* 表单 */
.form-group{margin-bottom:14px}
.form-group label{display:block;font-size:13px;font-weight:500;margin-bottom:6px;color:var(--text)}
.form-group input,.form-group select,.form-group textarea{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:14px;background:#fff;color:var(--text);transition:border-color .15s,box-shadow .15s}
.form-group textarea{height:auto;padding:9px 12px;resize:vertical;min-height:70px;line-height:1.5}
.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,93,255,.12)}
.form-group input::placeholder,.form-group textarea::placeholder{color:var(--text4)}
/* 弹窗内通用表单控件（.form-control：输入/下拉/多行） —— Arco 风格统一 */
.form-control{width:100%;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 10px;font-size:13px;background:#fff;color:var(--text);transition:border-color .15s,box-shadow .15s;line-height:1;box-sizing:border-box}
select.form-control{height:32px;padding:0 8px;cursor:pointer}
textarea.form-control{height:auto;padding:9px 10px;min-height:70px;resize:vertical;line-height:1.5}
.form-control:hover:not(:focus):not(:disabled){border-color:#DCDEE3}
.form-control:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,93,255,.12)}
.form-control::placeholder{color:var(--text4)}
.form-control:disabled{background:var(--fill-l);color:var(--text4);cursor:not-allowed}
.input-lg{width:100%;height:48px;border:1px solid var(--border);border-radius:10px;padding:0 14px;font-size:16px;background:#fff;box-sizing:border-box;transition:border-color .15s,box-shadow .15s}
.input-lg:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(99,102,241,.12)}
.btn-lg{padding:12px 22px;font-size:15px}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.perm-toggle{display:flex;align-items:center;gap:7px;font-size:13px;cursor:pointer;padding:2px 0}
.perm-toggle input{width:16px;height:16px;cursor:pointer;accent-color:var(--primary);flex-shrink:0}
.perm-toggle span{line-height:1.2}

/* 商品管理 */
.hot-badge{display:inline-flex;align-items:center;gap:3px;background:#f97316;color:#fff;font-size:11px;font-weight:600;padding:2px 7px;border-radius:20px;white-space:nowrap}
.hot-badge svg{width:11px;height:11px}
.hot-off{display:inline-flex;align-items:center;color:#cbd5e1}
.hot-off svg{width:15px;height:15px}
.opt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px 10px;border:1px solid var(--border);border-radius:8px;padding:10px}
.opt-item{display:flex;align-items:center;gap:6px;font-size:13px;cursor:pointer;min-height:26px}
.opt-item input[type=checkbox],.opt-item input[type=radio]{width:16px;height:16px;accent-color:var(--primary);flex-shrink:0;cursor:pointer}
.meal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;border:1px solid var(--border);border-radius:8px;padding:10px}
.meal-row{display:flex;align-items:center;gap:6px;font-size:13px}
.meal-row input[type=number]{width:58px;height:30px;border:1px solid var(--border);border-radius:6px;padding:0 6px;font-size:13px}
.chip{display:inline-block;background:#f1f5f9;color:#475569;border-radius:6px;padding:1px 6px;font-size:11px;margin:1px 2px 1px 0;white-space:nowrap}

/* 预警卡片 */
.alert-card{border-radius:var(--radius);padding:14px 16px;margin-bottom:12px;display:flex;align-items:flex-start;gap:12px}
.alert-card.danger{background:#fef2f2;border:1px solid #fecaca}
.alert-card.warning{background:#fffbeb;border:1px solid #fde68a}
.alert-card .alert-icon{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.alert-card.danger .alert-icon{background:#fee2e2}
.alert-card.warning .alert-icon{background:#fef3c7}
.alert-card .alert-icon svg{width:20px;height:20px}
.alert-card .alert-content{flex:1}
.alert-card .alert-title{font-size:14px;font-weight:600;margin-bottom:2px}
.alert-card .alert-desc{font-size:12px;color:var(--text2)}

/* 进度条 */
.progress{height:8px;background:#e5e7eb;border-radius:4px;overflow:hidden}
.progress-bar{height:100%;border-radius:4px;transition:width .3s}

/* Tab */
.tabs{display:flex;gap:2px;border-bottom:2px solid var(--border);margin-bottom:16px}
.tab{padding:10px 18px;cursor:pointer;font-size:13px;font-weight:500;color:var(--text2);border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .15s}
.tab:hover{color:var(--text)}
.tab.active{color:var(--primary-ink);border-bottom-color:var(--primary)}

/* 详情页 */
.detail-header{display:flex;align-items:center;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.detail-header .store-icon{width:48px;height:48px;border-radius:10px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;flex-shrink:0}
.detail-header h2{font-size:20px;font-weight:700}
.detail-header .meta{font-size:12px;color:var(--text2);margin-top:2px}

.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
info-item{padding:10px 0}
.info-item .label{font-size:12px;color:var(--text2);margin-bottom:3px}
.info-item .value{font-size:14px;font-weight:500}

/* 空状态 */
.empty{text-align:center;padding:40px 20px;color:var(--text2)}
.empty svg{width:48px;height:48px;margin-bottom:12px;opacity:.4}

/* 上传区 */
.upload-zone{border:2px dashed var(--border);border-radius:var(--radius);padding:40px 20px;text-align:center;cursor:pointer;transition:all .2s}
.upload-zone:hover{border-color:var(--primary);background:rgba(79,107,237,.02)}
.upload-zone svg{width:48px;height:48px;color:var(--text2);margin-bottom:12px}
.upload-zone .upload-title{font-size:15px;font-weight:600;margin-bottom:4px}
.upload-zone .upload-desc{font-size:13px;color:var(--text2)}

/* 日历热力图 */
.heatmap{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;max-width:280px}
.heatmap .cell{width:34px;height:34px;border-radius:4px;background:#ebedf0}
.heatmap .cell.l1{background:#c6e9c0}
.heatmap .cell.l2{background:#7bc97e}
.heatmap .cell.l3{background:#449d48}
.heatmap .cell.l4{background:#2d6b2f}

/* Toast */
.toast{position:fixed;top:20px;right:20px;background:#1e293b;color:#fff;padding:12px 20px;border-radius:8px;font-size:13px;z-index:2000;opacity:0;transform:translateY(-10px);transition:all .3s;pointer-events:none}
.toast.show{opacity:1;transform:translateY(0)}
.toast.success{background:var(--success)}
.toast.error{background:var(--danger)}

/* 操作记录时间线 */
.timeline{position:relative;padding-left:24px}
.timeline::before{content:'';position:absolute;left:7px;top:0;bottom:0;width:2px;background:var(--border)}
.timeline-item{position:relative;padding-bottom:16px}
.timeline-item::before{content:'';position:absolute;left:-21px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--primary);border:2px solid #fff}
.timeline-item .time{font-size:11px;color:var(--text2)}
.timeline-item .content{font-size:13px;margin-top:2px}

/* ============ 响应式 ============ */
@media(max-width:768px){
  :root{--sidebar-w:240px}
  #sidebar{position:fixed;top:0;left:0;bottom:0;width:240px;transform:translateX(-100%);z-index:100}
  /* 移动端遮罩：侧边栏打开时显示，点击空白关闭（汉堡按钮被侧边栏遮住，需靠遮罩关闭） */
  #sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(15,23,42,.35);z-index:99}
  #sidebar-backdrop.show{display:block}
  #sidebar.open{transform:translateX(0)}
  #topbar .menu-toggle{display:block}
  #topbar .search-box{max-width:none}
  .grid-2,.grid-3{grid-template-columns:1fr}
  .kpi-grid{grid-template-columns:1fr 1fr}
  .form-row{grid-template-columns:1fr}
  #content{padding:12px}
  .table-wrap{font-size:12px}
  thead th,tbody td{padding:8px 6px}
  .filter-bar select,.filter-bar input{min-width:100%;flex:1}
  .modal{max-width:100%;max-height:90vh}
  .view-title{font-size:17px}
  .info-grid{grid-template-columns:1fr 1fr}
  .heatmap .cell{width:28px;height:28px}
}

@media(max-width:480px){
  .kpi-grid{grid-template-columns:1fr}
  .grid-2,.grid-3{grid-template-columns:1fr}
  .info-grid{grid-template-columns:1fr}
  #topbar .data-actions{display:none}
}
/* Loading 覆盖层 */
#content{position:relative;min-height:80vh}
#loading-overlay{display:none;position:absolute;inset:0;background:rgba(255,255,255,.85);z-index:100;align-items:center;justify-content:center;border-radius:12px;pointer-events:none}
#loading-overlay.show{display:flex}
.loading-spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.loading-text{font-size:13px;color:var(--text2);margin-top:12px}
/* 全屏启动遮罩：页面解析时即覆盖空侧栏与空主内容，避免刷新/重新登录瞬间"短暂空白" */
#bootOverlay{position:fixed;inset:0;background:#f8fafc;z-index:9000;display:flex;align-items:center;justify-content:center;flex-direction:column;opacity:1;pointer-events:auto;transition:opacity .25s ease}
#bootOverlay.hidden{opacity:0;pointer-events:none}
#bootOverlay .boot-text{margin-top:18px;font-size:14px;color:#64748b;letter-spacing:.5px}

/* 实际收益-人员多选标签 */
.person-chip{display:inline-flex;align-items:center;gap:5px;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:6px 10px;font-size:13px;cursor:pointer}
.person-chip.on{background:#eff6ff;border-color:#3b7dff}
.person-chip input{margin:0}

/* 直播台账-主播多选复选框组 */
.streamer-box{display:flex;flex-wrap:wrap;gap:6px;border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:#fff}
.streamer-box label{display:inline-flex;align-items:center;gap:5px;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:5px 10px;font-size:13px;cursor:pointer}
.streamer-box label:has(input:checked){background:#eff6ff;border-color:#3b7dff}
.off-chip{opacity:.55}

/* ===== 招商地图（移植自原版） ===== */
/* ===== v1.5.19 TRAE 指挥舱：品牌头 / 同步条 / 时钟 / 侧栏 / 雷达 / 粒子 ===== */
.inv-deck-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  animation:invFadeDown .8s ease-out}
@keyframes invFadeDown{from{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}
.inv-brand{display:flex;align-items:center;gap:14px}
.inv-sigil{width:48px;height:48px;border-radius:14px;position:relative;flex-shrink:0;
  background:linear-gradient(135deg,rgba(59,125,255,.9),rgba(8,145,178,.85));
  box-shadow:0 0 24px rgba(59,125,255,.3),0 4px 16px rgba(59,125,255,.2);
  display:grid;place-items:center;overflow:hidden}
.inv-sigil::before{content:'';position:absolute;inset:0;
  background:conic-gradient(from 0deg,transparent,rgba(255,255,255,.5),transparent 30%);
  animation:invSigilSpin 3s linear infinite}
@keyframes invSigilSpin{to{transform:rotate(360deg)}}
.inv-sigil::after{content:'';position:absolute;inset:5px;border-radius:10px;
  border:1.5px solid rgba(255,255,255,.6);
  background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.85),transparent 50%)}
.inv-brand-title{font-weight:900;font-size:26px;letter-spacing:2px;
  background:linear-gradient(90deg,#1e3a8a,#3b7dff 50%,#0891b2);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  text-shadow:0 0 30px rgba(59,125,255,.15)}
.inv-brand-sub{font-size:12px;color:var(--text2);letter-spacing:2.5px;margin-top:3px;text-transform:uppercase}
.inv-sync{display:flex;align-items:center;gap:9px;font-size:12.5px;color:var(--text2);
  background:rgba(255,255,255,.75);border:1px solid rgba(86,116,170,.16);border-radius:999px;
  padding:8px 16px;backdrop-filter:blur(10px);box-shadow:0 4px 20px rgba(59,125,255,.06)}
.inv-sync-dot{width:8px;height:8px;border-radius:50%;background:#059669;
  box-shadow:0 0 10px rgba(5,150,105,.28);position:relative}
.inv-sync-dot::after{content:'';position:absolute;inset:-4px;border-radius:50%;
  border:1.5px solid #059669;animation:invPing 1.8s ease-out infinite}
@keyframes invPing{0%{transform:scale(.6);opacity:.9}100%{transform:scale(2.2);opacity:0}}
.inv-clock{font-weight:700;color:#0891b2;letter-spacing:1px;font-variant-numeric:tabular-nums}
/* 主布局：左主区 + 右 320px 智能侧栏 */
.inv-shell{display:grid;grid-template-columns:1fr 320px;gap:16px;align-items:start}
@media (max-width:1080px){.inv-shell{grid-template-columns:1fr}}
.inv-side{display:flex;flex-direction:column;gap:16px}
.inv-panel{background:rgba(255,255,255,.75);border:1px solid rgba(86,116,170,.16);border-radius:14px;
  backdrop-filter:blur(14px);box-shadow:0 8px 32px rgba(43,70,120,.08);
  position:relative;overflow:hidden;padding:18px 20px;
  animation:invCardIn .7s ease-out backwards}
.inv-panel::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(59,125,255,.25),rgba(8,145,178,.15),transparent)}
@keyframes invCardIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
.inv-insight{animation-delay:.3s}
.inv-rank{animation-delay:.45s}
.inv-panel h3{font-size:15px;font-weight:700;letter-spacing:2px;display:flex;align-items:center;gap:9px;color:#33415e}
.inv-ai-badge{width:24px;height:24px;border-radius:7px;display:grid;place-items:center;
  background:linear-gradient(135deg,#7c3aed,#3b7dff);font-size:12px;color:#fff;
  box-shadow:0 0 14px rgba(124,58,237,.4);animation:invAiPulse 2.5s ease-in-out infinite}
@keyframes invAiPulse{0%,100%{box-shadow:0 0 10px rgba(124,58,237,.3)}50%{box-shadow:0 0 20px rgba(124,58,237,.5)}}
.inv-insight-items{margin-top:16px;display:flex;flex-direction:column;gap:13px}
.inv-ai-item{padding:14px 15px;border-radius:13px;background:rgba(241,246,255,.7);
  border:1px solid rgba(99,130,184,.15);position:relative;overflow:hidden;
  transition:transform .25s,box-shadow .25s}
.inv-ai-item:hover{transform:translateX(4px);box-shadow:0 6px 20px rgba(59,125,255,.08)}
.inv-ai-item::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(#0891b2,#3b7dff);animation:invBarPulse 2s ease-in-out infinite}
@keyframes invBarPulse{0%,100%{box-shadow:0 0 8px rgba(59,125,255,.3)}50%{box-shadow:0 0 18px rgba(59,125,255,.5)}}
.inv-ai-item .t{font-size:13px;color:#33415e;font-weight:600}
.inv-ai-item .d{font-size:12px;color:var(--text2);margin-top:4px;line-height:1.6}
.inv-ai-item .d b{color:#0891b2;font-weight:700}
.inv-ai-item .d b.g{color:#059669}
/* TOP5 排名 */
.inv-rank-row{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:12.5px;transition:transform .2s}
.inv-rank-row:hover{transform:translateX(4px)}
.inv-rank-no{color:var(--text3);width:18px;text-align:center;font-size:14px;font-variant-numeric:tabular-nums}
.inv-rank-row:nth-child(1) .inv-rank-no{color:#3b7dff;font-weight:700}
.inv-rank-row:nth-child(2) .inv-rank-no{color:#0891b2;font-weight:700}
.inv-rank-name{width:74px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inv-rank-track{flex:1;height:8px;border-radius:4px;background:rgba(99,130,184,.14);overflow:hidden;position:relative}
.inv-rank-fill{height:100%;border-radius:4px;background:linear-gradient(90deg,#3b7dff,#0891b2);
  box-shadow:0 0 8px rgba(59,125,255,.3);transition:width 1.2s cubic-bezier(.2,.8,.2,1);position:relative}
.inv-rank-fill::after{content:'';position:absolute;top:0;right:0;bottom:0;width:20px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.5));animation:invShimmer 2s ease-in-out infinite}
@keyframes invShimmer{0%{transform:translateX(-20px);opacity:0}50%{opacity:1}100%{transform:translateX(20px);opacity:0}}
.inv-rank-cnt{color:#1e3a8a;width:34px;text-align:right;font-weight:700;font-variant-numeric:tabular-nums}
/* 地图面板装饰：雷达扫描 + 扫描线 + 浮动粒子 */
.inv-map-shell{position:relative;border-radius:10px;overflow:hidden;
  border:1px solid rgba(86,116,170,.16);
  background:
    radial-gradient(900px 600px at 50% 35%,rgba(59,130,246,.06) 0%,transparent 62%),
    radial-gradient(600px 400px at 80% 80%,rgba(124,58,237,.04) 0%,transparent 55%),
    linear-gradient(180deg,#fbfdff,#eef3fb)}
.inv-radar{position:absolute;top:50%;left:50%;width:700px;height:700px;
  transform:translate(-50%,-50%);z-index:2;pointer-events:none;border-radius:50%;
  background:conic-gradient(from 0deg,transparent 0deg,rgba(59,125,255,.06) 30deg,transparent 60deg,transparent 360deg);
  animation:invRadarSweep 6s linear infinite;
  -webkit-mask-image:radial-gradient(circle,#000 30%,transparent 70%);
  mask-image:radial-gradient(circle,#000 30%,transparent 70%)}
@keyframes invRadarSweep{to{transform:translate(-50%,-50%) rotate(360deg)}}
.inv-scan{position:absolute;left:0;right:0;height:120px;z-index:3;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(59,125,255,.05),transparent);
  animation:invScanline 7s linear infinite}
@keyframes invScanline{0%{top:-20%}100%{top:110%}}
.inv-particles{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.inv-particle{position:absolute;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,rgba(59,130,246,.5),transparent 70%);
  animation:invFloatUp linear infinite}
@keyframes invFloatUp{
  0%{transform:translateY(100%) scale(0);opacity:0}
  10%{opacity:1}
  90%{opacity:.8}
  100%{transform:translateY(-8%) scale(1.2);opacity:0}}
#inv-svg .inv-region{cursor:pointer}
/* v1.5.15 轻科技玻璃拟态地图容器：米白底 + 极浅渐变（光线均匀、无光斑暗角、无多余花纹），
   ① ::before = 极淡蓝细网格（科技感底纹，透明度下调）
   ② ::after = 极淡白玻璃层（微 blur，透亮不朦胧）
   ③ 地图 SVG 在最上层（z-index 2），线条锐利 */
.inv-map-box{
  background:
    linear-gradient(180deg,#FDFEFF 0%,#F6F9FD 100%);
}
.inv-map-box::before{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
  background-image:
    linear-gradient(rgba(59,125,255,.028) 1px,transparent 1px),
    linear-gradient(90deg,rgba(59,125,255,.028) 1px,transparent 1px);
  background-size:28px 28px;
}
/* v1.5.15 玻璃层：极淡白渐变（光线均匀、无暗角、无光斑） */
.inv-map-box::after{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:1;
  background:linear-gradient(160deg,rgba(255,255,255,.42) 0%,rgba(255,255,255,.10) 55%,rgba(255,255,255,.24) 100%);
  -webkit-backdrop-filter:blur(4px) saturate(1.15);
  backdrop-filter:blur(4px) saturate(1.15);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.8); /* 玻璃上缘高光 */
}
.inv-map-box #inv-svg{position:relative;z-index:2}
/* v1.5.15 未来感 hover：主蓝描边 + 发光增强（不位移） */
#inv-svg .inv-region:hover > path{opacity:1;stroke:var(--primary);stroke-width:1.3;filter:drop-shadow(0 0 4px rgba(59,125,255,.5))}
/* v1.5.15 地名标签：深青灰 + 白色光晕描边（paint-order 描边垫底），
   任何渐变底色上都清晰锐利，风格同 iOS 地图标签 */
.inv-label{
  fill:#2E3E55;font-weight:600;letter-spacing:.4px;pointer-events:none;user-select:none;
  paint-order:stroke;stroke:rgba(255,255,255,.9);stroke-width:3px;stroke-linejoin:round;
}
/* v1.5.15 玻璃标签轻微悬浮动画（缓动、2px、绕自身中心浮动） */
@keyframes invFloat{
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-2px)}
}
#inv-svg .inv-count{
  transform-box:fill-box;transform-origin:center;
  animation:invFloat 5.5s ease-in-out infinite;
}
/* v1.5.15 胶囊文字同步加白色光晕，小字号下依然清晰 */
.inv-count text{pointer-events:none;paint-order:stroke;stroke:rgba(255,255,255,.9);stroke-width:2.5px;stroke-linejoin:round}
.inv-act-btn text{pointer-events:none;paint-order:stroke;stroke:rgba(255,255,255,.55);stroke-width:1.5px;stroke-linejoin:round}
.inv-count{cursor:pointer}
.inv-count .inv-hit{fill:transparent}
/* v1.5.15：胶囊 hover 只微调底色，不位移 */
.inv-count:hover rect:not(.inv-hit){fill:#F8FBFF}
.inv-empty{padding:30px;text-align:center;color:var(--text2)}
.inv-dt-head{font-size:14px;font-weight:600;margin-bottom:8px;color:var(--text1)}
.inv-dt-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border:1px solid var(--border);border-radius:10px;overflow:hidden}
.inv-dt-table th,.inv-dt-table td{padding:8px 12px;border-bottom:1px solid var(--border);text-align:left}
.inv-dt-table th{background:#f8fafc;color:var(--text2);font-weight:600}
.inv-dt-table tr:last-child td{border-bottom:none}
.inv-dt-link{color:var(--primary-ink);text-decoration:none;font-weight:600;cursor:pointer}
.inv-dt-link:hover{text-decoration:underline}
.inv-modal-sub{margin:6px 0 12px;font-size:13px;color:var(--text2)}
.inv-table{width:100%;border-collapse:collapse;font-size:13px}
.inv-table th,.inv-table td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}
.inv-table th{background:#f8fafc;color:var(--text2);font-weight:600;position:sticky;top:0}
.inv-loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text2);font-size:14px}
.inv-scope-btn.active{background:var(--primary);color:#fff}
.inv-row-active{background:#f0fdf4}
.inv-row-term{background:#fef2f2}
.inv-occ-bar{font-size:13px}
.inv-crumb{color:var(--primary-ink);cursor:pointer}
.inv-crumb:hover{text-decoration:underline}
.inv-crumb.cur{color:var(--text1);cursor:default;font-weight:600}
.inv-crumb-sep{color:var(--text3)}
/* v1.5.18 TRAE 重设计统计卡：玻璃 + 状态色数字 + mini 副文案 + 底部流光 */
.inv-stat{flex:1;min-width:120px;background:linear-gradient(160deg,rgba(255,255,255,.85),rgba(255,255,255,.55));border:1px solid rgba(226,232,240,.8);border-radius:8px;padding:10px 14px;transition:border-color .15s;box-shadow:inset 0 1px 0 rgba(255,255,255,.8);position:relative;overflow:hidden}
.inv-stat:hover{border-color:#CBDCF5}
.inv-stat .l{font-size:12px;color:var(--text2);display:flex;align-items:center;gap:5px}
.inv-stat .l .inv-dot{width:7px;height:7px;border-radius:2px;display:inline-block;flex-shrink:0}
.inv-stat .v{font-size:22px;font-weight:700;margin-top:2px;letter-spacing:.5px}
.inv-stat .v .inv-stat-sub{font-size:13px;color:var(--text2);font-weight:400;margin-left:3px}
.inv-stat .mini{font-size:11px;color:var(--text3);margin-top:2px}
/* 状态色（TRAE 配色：蓝/琥珀/绿/紫/青/灰）——设在卡片上，数字/色点/流光共用 currentColor */
.inv-stat-blue{color:#3b7dff}
.inv-stat-amber{color:#d97706}
.inv-stat-green{color:#059669}
.inv-stat-violet{color:#7c3aed}
.inv-stat-cyan{color:#0891b2}
.inv-stat-slate{color:#475569}
.inv-stat .v{color:currentColor}
.inv-stat .l .inv-dot{background-color:currentColor}
/* 底部流光（微光呼吸） */
.inv-stat::after{content:'';position:absolute;left:0;bottom:0;height:2px;width:100%;
  background:linear-gradient(90deg,transparent,currentColor,transparent);opacity:.35;
  animation:invGlowLine 3s ease-in-out infinite}
@keyframes invGlowLine{0%,100%{opacity:.25;transform:scaleX(.8)}50%{opacity:.6;transform:scaleX(1)}}
/* v1.5.18 省份入场动画（错峰淡入） */
#inv-svg .inv-region{animation:invRegionIn .8s ease-out backwards}
@keyframes invRegionIn{from{opacity:0}to{opacity:1}}
/* v1.5.18 图例联动：非目标状态省份变暗 */
#inv-svg .inv-region.dim{opacity:.25}
/* v1.5.18 活跃省份脉冲标记 */
.inv-pulse-ring{animation:invPulseRing 2.5s ease-out infinite}
@keyframes invPulseRing{0%{r:4;opacity:.8}100%{r:22;opacity:0}}
.inv-pulse-dot{animation:invPulseDot 2s ease-in-out infinite}
@keyframes invPulseDot{0%,100%{opacity:.6}50%{opacity:1}}
/* v1.5.18 TOP5 数据流弧线（虚线流动） */
.inv-flow-arc{fill:none;stroke:rgba(59,125,255,.3);stroke-width:1.2;stroke-dasharray:4 6;
  animation:invFlowDash 1.5s linear infinite}
@keyframes invFlowDash{to{stroke-dashoffset:-20}}
/* v1.5.18 悬浮玻璃提示 */
#inv-tip{position:fixed;z-index:9999;pointer-events:none;display:none;min-width:150px;
  background:rgba(255,255,255,.97);border:1px solid rgba(59,125,255,.32);border-radius:12px;
  padding:12px 14px;box-shadow:0 12px 40px rgba(59,125,255,.14),0 0 24px rgba(59,125,255,.06);
  backdrop-filter:blur(10px);animation:invTipIn .2s ease-out}
@keyframes invTipIn{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
#inv-tip .n{font-size:14px;font-weight:700;color:#17223b}
#inv-tip .s{font-size:11px;margin-top:3px;letter-spacing:1px}
#inv-tip .kv{display:flex;gap:14px;margin-top:8px}
#inv-tip .kv span{font-size:12px;color:var(--text2)}
#inv-tip .kv b{font-size:14px;font-weight:700}
.inv-act-btn{cursor:pointer}
.ilp-ph{color:var(--primary-ink);text-decoration:none;margin-right:6px}
.ilp-btn{padding:4px 10px;font-size:12px;border-radius:6px;cursor:pointer;margin-right:6px}
.ilp-btn-primary{background:var(--primary);color:#fff;border:1px solid var(--primary)}
.ilp-btn-edit{background:#fff;color:var(--text1);border:1px solid var(--border)}

/* ============ 商家详情档案弹窗（v1.1.4 新增） ============ */
/* 头部：渐变头像 + 商家名 + 共管标签 + ID/区域/签约 + 等级 */
.archive-header{display:flex;align-items:center;gap:14px;padding:6px 4px 18px;border-bottom:1px solid var(--border);margin-bottom:16px}
.archive-avatar{width:48px;height:48px;border-radius:10px;background:#6366f1;color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;flex-shrink:0}
.archive-head-main{flex:1;min-width:0}
.archive-head-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.archive-name{font-size:17px;font-weight:700;color:var(--text)}
.archive-tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:600;white-space:nowrap}
.archive-tag.tag-co{background:#fce7f3;color:#be185d;border:1px solid #f9a8d4}
.archive-head-sub{margin-top:4px;font-size:12.5px;color:var(--text2);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.archive-id{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}
.archive-sep{color:var(--text2);opacity:.6}
.archive-head-level{flex-shrink:0}

/* Tab 栏 */
.archive-tabs{display:flex;align-items:center;gap:24px;border-bottom:1px solid var(--border);margin-bottom:18px;overflow-x:auto;white-space:nowrap}
.archive-tab{padding:10px 2px;font-size:14px;color:var(--text2);cursor:pointer;position:relative;transition:color .15s}
.archive-tab:hover{color:var(--text)}
.archive-tab.active{color:#5856e8;font-weight:600}
.archive-tab.active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:#5856e8;border-radius:2px}

/* Tab 内容区 */
.archive-panes{min-height:120px}
.archive-pane{display:none}
.archive-pane.active{display:block}

/* 基础档案字段网格 */
.archive-section{background:#fff}
.archive-section-title{font-size:14px;font-weight:600;color:var(--text);margin-bottom:12px;padding-bottom:6px;border-bottom:1px dashed var(--border)}
.archive-field-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px 24px}
.archive-field{display:flex;flex-direction:column;gap:4px;min-width:0}
.archive-field-label{font-size:12px;color:var(--text2)}
.archive-field-value{font-size:13.5px;color:var(--text);word-break:break-all}
.archive-field-value .archive-tag{align-self:flex-start}
.archive-empty{padding:18px;text-align:center;color:var(--text2);font-size:13px;background:var(--bg);border-radius:8px;border:1px dashed var(--border)}

/* KPI 卡片行（5 个等宽） */
.archive-kpi-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-top:18px}
.archive-kpi{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px 16px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:4px;min-width:0}
.archive-kpi-label{font-size:12.5px;color:var(--text2)}
.archive-kpi-value{font-size:22px;font-weight:700;line-height:1.2;margin-top:2px;word-break:break-all}
.archive-kpi-value.kpi-purple{color:#4F6BED}
.archive-kpi-value.kpi-green{color:#10B981}
.archive-kpi-value.kpi-orange{color:#F59E0B}
.archive-kpi-value.kpi-dark{color:var(--text)}
.archive-kpi-sub{font-size:11.5px;color:var(--text2);line-height:1.4}

/* 弹窗 inv-lg 下头像尺寸略大 */
.modal.inv-lg .archive-avatar{width:54px;height:54px;font-size:24px}
@media (max-width:900px){.archive-field-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.archive-kpi-row{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ============ v1.1.5 商家详情档案：基础信息 / 4 个数据 Tab 样式 ============ */

/* 段落容器 */
.archive-section{margin-top:18px;padding:16px 20px;border-radius:14px}
.archive-section-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px;display:flex;align-items:center;gap:8px}
.archive-section-title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px}

/* 字段网格（基础信息）：3 列，row gap 12px，column gap 16px */
.archive-field-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 16px}
.archive-field{display:flex;flex-direction:column;gap:4px;min-width:0}
.archive-field-label{font-size:12px;color:var(--text2)}
.archive-field-value{font-size:13.5px;color:var(--text);word-break:break-all}

/* 标签样式（在 field-value 内也用 .archive-tag） */
.archive-tag{display:inline-block;padding:2px 8px;font-size:12px;border-radius:4px;background:rgba(79,107,237,.1);color:#4F6BED;font-weight:500}
.archive-tag.tag-co{background:rgba(245,158,11,.1);color:#F59E0B}
.archive-tag.tag-warning{background:rgba(239,68,68,.1);color:#EF4444}
.archive-tag.tag-success{background:rgba(16,185,129,.1);color:#10B981}

/* 解除记录时间轴 */
.archive-timeline{position:relative;padding-left:18px;border-left:2px solid var(--border);margin-left:6px}
.archive-timeline-item{position:relative;padding:6px 0 10px 14px}
.archive-timeline-item:not(:last-child){border-bottom:1px dashed var(--border)}
.archive-timeline-dot{position:absolute;left:-23px;top:10px;width:10px;height:10px;border-radius:50%;background:var(--primary);box-shadow:0 0 0 3px rgba(79,107,237,.15)}
.archive-timeline-date{font-size:13px;color:var(--text);font-weight:500}
.archive-timeline-reason{font-size:12px;color:var(--text2);margin-top:2px}

/* 是/否 开关（只读外观） */
.archive-switch{display:inline-flex;align-items:center;justify-content:center;width:36px;height:22px;border-radius:11px;font-size:12px;font-weight:600;color:#fff;line-height:1}
.archive-switch.on{background:#10B981}
.archive-switch.off{background:#94a3b8}

/* KPI 副标题内的紫色/红色金额强调（图片体例） */
.kpi-purple{color:#4F6BED;font-weight:600}
.kpi-green{color:#10B981;font-weight:600}
.kpi-orange{color:#F59E0B;font-weight:600}
.kpi-red{color:#EF4444;font-weight:600}

/* 顶部提示（如返佣说明） */
.archive-tip{margin-top:10px;font-size:12.5px;color:var(--text2);line-height:1.7;padding:10px 12px;background:var(--bg);border:1px solid var(--border);border-radius:8px}

/* 费率核对不一致警告（图4样式） */
.archive-warn{margin-top:14px;font-size:13px;line-height:1.8;padding:12px 14px;background:#FFF7ED;border:1px solid #FED7AA;border-radius:10px;color:#7C2D12}
.archive-warn b{color:#9A3412}
.archive-warn-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#F97316;color:#fff;margin-right:8px;vertical-align:middle;font-weight:700}

/* 配置商品按钮容器里的副按钮间距 */
.modal-footer .btn-outline+.btn-outline{margin-left:6px}

/* ===== v1.1.7 商家列表：分组表头 + 字段上下堆叠 + 列显隐 ===== */
/* 表格横向滚动（字段多时保留滚动兜底）——改为 visible，避免成为独立滚动容器导致表头 sticky 失效 */
#merchantTableWrap{overflow:visible}
/* border-collapse:separate 是表头 sticky 生效的前提（collapse 会让 th 的 position:sticky 失效） */
#merchantTable{table-layout:auto;min-width:100%;border-collapse:separate;border-spacing:0}
/* v1.7.27 修复：商家表格内容上下贴分割线——主题层 .table-wrap td 是 height:44px;padding:0 16px（无垂直内边距），
   本表为多行堆叠内容 + 操作列竖排按钮组，首行/末行与首/末按钮会顶死上下分割线，这里还原垂直留白 */
#merchantTable tbody td{height:auto;padding-top:10px;padding-bottom:10px}
/* v1.1.48：筛选栏 + 表头在滚动商家列表时冻结，便于下滑时搜索/查看 */
.merchants-sticky-bar{position:sticky;top:0;z-index:40;background:var(--bg);padding:6px 0 10px;margin-bottom:4px}
#merchantTable thead th{position:sticky;top:54px;z-index:30;background:#F1F5F9}
/* 分组表头：浅色背景 + 居中加粗（单层表头） */
#merchantTable thead th[data-group]{background:#F1F5F9;color:#334155;font-weight:600;text-align:center;border-bottom:1px solid var(--border);font-size:13px;white-space:nowrap;padding:10px 12px}
/* 字段上下堆叠容器 */
.cell-stack{display:flex;flex-direction:column;gap:6px;min-width:200px;padding:4px 0}
/* 每个字段行：label 固定宽右对齐 + value 自适应 */
.cell-line{display:flex;align-items:flex-start;gap:6px;font-size:12px;line-height:1.55}
.cell-line .k{flex:0 0 56px;color:var(--text2);text-align:right;white-space:nowrap;font-size:12px}
.cell-line .v{flex:1;color:var(--text1);word-break:break-word;min-width:0}
/* 隐藏字段行 / 分组列：彻底隐藏 */
#merchantTable .col-hidden{display:none !important}
/* 门店ID 复制按钮（v1.2.97：图标由前文 .id-copy-btn::before mask 提供，这里仅保留商家管理表格场景的间距微调） */
.id-copy-btn{margin-left:5px;white-space:nowrap}
/* 排名徽标（v1.2.87 人员业绩总览左侧排名图标）：Arco 风格克制配色——金/银/铜 + 中性灰 */
.rank-badge{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:6px;font-size:12px;font-weight:600;line-height:1;background:var(--fill-l);color:var(--text2)}
.rank-badge.rank-1{background:#F7BA1E;color:#fff}
.rank-badge.rank-2{background:#86909C;color:#fff}
.rank-badge.rank-3{background:#D25F00;color:#fff}
/* 商家列表分组折叠把手：桌面端隐藏，仅移动端卡片模式显示 */
.m-group-head{display:none}
/* 手机端专用商家卡片列表：桌面端隐藏，移动端显示（v1.2.87 彻底重构） */
.m-card-list{display:none}

/* ===== v1.1.10~1.1.11 近30天核销趋势点击交互 ===== */
.trend-wrap{position:relative}
.trend-dot{cursor:pointer}
.trend-tip{pointer-events:none}

/* ===== v1.1.13 直播查询：大卡片布局 ===== */
.lq-card{border:1px solid var(--border);border-radius:12px;margin-bottom:20px;overflow:hidden;background:#fff}
.lq-card-head{background:#F5F7FB;padding:18px 22px;display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
.lq-card-name{font-size:22px;font-weight:700;color:var(--text1);line-height:1.3}
.lq-card-sub{display:flex;gap:18px;flex-wrap:wrap;margin-top:8px;font-size:13px;color:var(--text2)}
.lq-card-tags{display:flex;gap:8px;flex-wrap:wrap}
.lq-info{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px 20px;padding:18px 22px}
.lq-info-item{min-width:0}
.lq-info-label{font-size:12px;color:var(--text2);margin-bottom:4px}
.lq-info-value{font-size:15px;color:var(--text1);font-weight:500;line-height:1.5;word-break:break-word}
.lq-section{border-top:1px solid var(--border);padding:16px 22px 20px}
.lq-section-title{font-size:15px;font-weight:700;color:var(--text1);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.lq-section-title::before{content:'';display:inline-block;width:4px;height:16px;background:var(--primary);border-radius:2px}
.lq-split{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));border-top:1px solid var(--border)}
.lq-split .lq-section{border-top:none;min-width:0}
.lq-split .lq-section:first-child{border-right:1px solid var(--border)}
@media (max-width:900px){.lq-info{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:900px){.lq-split{grid-template-columns:1fr}.lq-split .lq-section:first-child{border-right:none;border-bottom:1px solid var(--border)}}

/* ===== v1.1.14 商品管理：分类 Tab ===== */
.cat-tabs{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}
.cat-tab{display:inline-block;padding:7px 16px;border-radius:8px;font-size:13px;font-weight:500;color:var(--text2);background:#fff;border:1px solid var(--border);cursor:pointer;text-decoration:none;transition:all .15s}
.cat-tab:hover{border-color:var(--primary);color:var(--primary-ink)}
.cat-tab.active{background:var(--primary);color:#fff;border-color:var(--primary)}

/* ===== v1.1.16 配置商品弹窗 + 来客商品链接 ===== */
.laike-stores-link{text-decoration:none}
.laike-stores-link:hover{text-decoration:underline}
.cfg-block{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:14px}
.cfg-block-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px}
.cfg-std-list{display:grid;gap:6px;max-height:240px;overflow:auto}
/* v1.5.25 配置商品弹窗：① 选择标品 / ② 录入复刻品 左右排版（窄屏自动上下） */
.cfg-duo{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
.cfg-duo .cfg-block{margin-bottom:0}
@media (max-width:860px){.cfg-duo{grid-template-columns:1fr}.cfg-duo .cfg-block{margin-bottom:14px}}
/* v1.5.36 商运代办·7 项基础代办卡片式布局（信息分层，避免表格拥挤） */
.todo-cards{display:grid;gap:12px}
.todo-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px 16px;transition:border-color .15s}
.todo-card:hover{border-color:var(--primary)}
.todo-card-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.todo-card-head .store-link{font-size:15px}
.todo-card-head .tag{margin-left:2px}
.todo-card-actions{margin-left:auto;display:flex;gap:6px}
.todo-card-meta{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--text2);margin:8px 0 10px}
.tcm-id{display:inline-flex;align-items:center;gap:4px;font-family:monospace}
.todo-card-progress{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.tcp-bar{flex:1;max-width:280px;background:var(--border);border-radius:5px;height:8px;overflow:hidden}
.tcp-fill{background:linear-gradient(90deg,var(--primary),#6aa1ff);height:8px;border-radius:5px;transition:width .3s}
.tcp-num{font-size:12px;color:var(--text2);white-space:nowrap}
.todo-card-tags{display:flex;flex-wrap:wrap;gap:6px}
.todo-card-tags .tag{font-size:12px;line-height:1.6;padding:1px 8px}
.todo-card-tags .tag-undone{background:#f1f5f9;color:#94a3b8}
/* v1.5.31 待办视图筛选按钮：我的代办（蓝）/ 提交的代办（橙）色差区分，选中深色底白字 */
.todo-view-btn{padding:5px 12px;font-size:13px;border:none;background:#fff;cursor:pointer;font-weight:500;transition:background .15s,color .15s}
.todo-view-btn.mine{color:#3b7dff}
.todo-view-btn.mine:hover{background:#eef4ff}
.todo-view-btn.mine.active{background:#3b7dff;color:#fff}
.todo-view-btn.submitted{color:#ea580c}
.todo-view-btn.submitted:hover{background:#fff4ed}
.todo-view-btn.submitted.active{background:#ea580c;color:#fff}
.todo-view-btn.all{color:var(--text2)}
/* v1.7.23 待认领视图按钮：青绿色（未认领=待处理语义） */
.todo-view-btn.unclaimed{color:#0d9488}
.todo-view-btn.unclaimed:hover{background:#effefb}
.todo-view-btn.unclaimed.active{background:#0d9488;color:#fff}
.todo-view-btn.all:hover{background:#f5f7fa}
.todo-view-btn.all.active{background:var(--primary);color:#fff}
/* v1.5.27 复刻品商品名称标题模板 chips */
.cfg-tpl-chip{padding:4px 10px;font-size:12px;line-height:1.4;border:1px solid var(--border);
  border-radius:14px;background:#f4f8ff;color:var(--text1);cursor:pointer;
  transition:border-color .15s,color .15s,background .15s;text-align:left}
.cfg-tpl-chip:hover{border-color:var(--primary);color:var(--primary-ink);background:#eef4ff}
.cfg-std-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--bg)}
.cfg-std-main{font-size:13px;color:var(--text);display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.cfg-std-id{font-family:monospace;font-size:11px;color:var(--text2)}
.cfg-std-price{font-weight:600;color:var(--warning)}
/* v1.1.45 标品已选择绿色徽标 + 商家预览卡片 */
.cfg-selected{display:inline-block;padding:6px 14px;border-radius:8px;font-size:12px;font-weight:600;color:#fff;background:#16a34a;border:1px solid #16a34a;cursor:default;white-space:nowrap}
.pv-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
.pv-kpi{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:10px 14px}
.pv-kpi div{font-size:12px;color:var(--text2)}
.pv-kpi b{font-size:20px;font-weight:800;color:var(--text)}
.pv-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;max-height:420px;overflow:auto}
.pv-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:12px}
.pv-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.pv-card-id{font-family:monospace;font-size:11px;color:var(--text2)}
.pv-card-name{font-size:14px;font-weight:600;color:var(--text);line-height:1.5;margin-bottom:8px}
.pv-card-price{font-size:20px;font-weight:800;color:var(--warning)}

/* ===== v1.1.34 新增/编辑账号弹窗（三步分区卡片式设计） ===== */
/* 分区容器 */
.su-section{margin-bottom:22px}
.su-section:last-child{margin-bottom:0}
/* 分区标题：序号圆点 + 文字 */
.su-section-title{display:flex;align-items:center;gap:9px;margin-bottom:14px;font-size:14px;font-weight:600;color:var(--text)}
.su-section-num{width:22px;height:22px;border-radius:50%;background:var(--primary);color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}
/* 字段网格：双列，占满整行的字段加 su-field-full */
.su-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.su-field-full{grid-column:1/-1}
/* 字段：label + 控件 */
.su-field label{display:block;font-size:12px;color:var(--text2);margin-bottom:6px}
.su-field label b{color:var(--danger);font-weight:600;margin-left:2px}
.su-field input{width:100%;height:38px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:13px;background:#fff;box-sizing:border-box}
.su-field input:focus{outline:none;border-color:var(--primary)}
.su-field-hint{font-size:11px;color:var(--text2);margin-top:5px;line-height:1.5}
/* 密码输入组：输入框 + 显示/生成按钮 */
.su-pwd-row{display:flex;gap:8px;align-items:center}
.su-pwd-row input{flex:1;min-width:0}
.su-pwd-btn{height:38px;padding:0 12px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text2);font-size:12px;cursor:pointer;flex-shrink:0;white-space:nowrap}
.su-pwd-btn:hover{border-color:var(--primary);color:var(--primary-ink)}
.su-pwd-btn.gen{color:var(--primary-ink)}
/* 角色卡片：单选，带首字图标 + 名称 + 一句说明 */
.su-roles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:14px}
.su-role{position:relative;border:1px solid var(--border);border-radius:10px;padding:12px;cursor:pointer;background:#fff;transition:border-color .15s,background .15s}
.su-role:hover{border-color:var(--primary)}
.su-role.on{border-color:var(--primary);background:#EEF1FD}
.su-role-head{display:flex;align-items:center;gap:8px}
.su-role-ico{width:26px;height:26px;border-radius:50%;background:#E5E7EB;color:#6B7280;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,color .15s}
.su-role.on .su-role-ico{background:var(--primary);color:#fff}
.su-role-name{font-size:13px;font-weight:600;color:var(--text)}
.su-role-desc{font-size:11px;color:var(--text2);margin-top:6px;padding-left:34px;line-height:1.4}
.su-role-dot{position:absolute;top:10px;right:10px;width:8px;height:8px;border-radius:50%;background:var(--primary);display:none}
.su-role.on .su-role-dot{display:block}
/* 数据范围：radio 单选组 */
.su-scope{display:flex;align-items:center;gap:16px;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:12px 14px;flex-wrap:wrap}
.su-scope-label{font-size:12px;color:var(--text2);flex-shrink:0}
.su-scope label{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text);cursor:pointer}
.su-scope input[type=radio]{accent-color:var(--primary);width:16px;height:16px;cursor:pointer;margin:0}
/* 权限工具栏：标题 + 全选/清空 */
.su-perm-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;gap:10px;flex-wrap:wrap}
.su-perm-actions{display:flex;gap:8px}
.su-perm-btn{height:28px;padding:0 10px;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--text2);font-size:12px;cursor:pointer}
.su-perm-btn:hover{border-color:var(--primary);color:var(--primary-ink)}
.su-perm-btn.primary{color:var(--primary-ink)}
/* 权限搜索框 */
.su-perm-search{width:100%;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:13px;background:#fff;box-sizing:border-box;margin-bottom:10px}
.su-perm-search:focus{outline:none;border-color:var(--primary)}
/* 权限表：栏目 × 查看/编辑/删除 */
.su-perm-table{border:1px solid var(--border);border-radius:10px;overflow:hidden}
.su-perm-table table{width:100%;border-collapse:collapse;table-layout:fixed}
.su-perm-table th{text-align:center;padding:9px 6px;font-size:12px;color:var(--text2);font-weight:600;background:#F8FAFC;border-bottom:1px solid var(--border)}
.su-perm-table th:first-child{text-align:left;padding-left:14px;width:42%}
.su-perm-table td{text-align:center;padding:8px 6px;border-bottom:1px solid #F1F2F4;font-size:13px}
.su-perm-table td:first-child{text-align:left;padding-left:14px;color:var(--text)}
.su-perm-table tr:last-child td{border-bottom:none}
.su-perm-table input[type=checkbox]{width:16px;height:16px;accent-color:var(--primary);cursor:pointer;vertical-align:middle}
.su-perm-dash{color:#C0C4CC}
.su-perm-hint{font-size:11px;color:var(--text2);margin-top:6px}
@media(max-width:600px){.su-grid{grid-template-columns:1fr}}

/* ===== v1.1.35 系统设置页优化 ===== */
/* 卡片分区标题：竖条 + 文字 + 右侧徽标 */
.sv-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:10px;flex-wrap:wrap}
.sv-card-title{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--text)}
.sv-card-title::before{content:'';width:3px;height:16px;background:var(--primary);border-radius:2px}
.sv-card-badge{font-size:12px;color:var(--text2);background:var(--bg);padding:2px 8px;border-radius:4px}
/* 分级档位卡片（左侧色条 + 名称 + 描述 + 输入框） */
.sv-levels{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px}
.sv-lv{border:1px solid var(--border);border-radius:10px;padding:14px;display:flex;flex-direction:column;gap:10px;background:#fff}
.sv-lv.fixed{background:#F8FAFC}
.sv-lv-head{display:flex;align-items:center;gap:8px}
.sv-lv-bar{width:3px;height:18px;border-radius:2px;flex-shrink:0}
.sv-lv-name{font-size:13px;font-weight:600;color:var(--text)}
.sv-lv-desc{font-size:12px;color:var(--text2);line-height:1.5}
.sv-lv-input{display:flex;align-items:center;gap:6px}
.sv-lv-input input{flex:1;min-width:0;height:36px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff}
.sv-lv-input input:focus{outline:none;border-color:var(--primary)}
.sv-lv-unit{font-size:12px;color:var(--text2)}
.sv-lv-fixed{font-size:14px;font-weight:600;color:var(--text2);padding:8px 0}
.sv-card-foot{display:flex;justify-content:flex-end;margin-top:14px}
/* 预警阈值表单：label 上、input 下，网格对齐 */
.sv-warn-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;align-items:end}
.sv-warn-field label{display:block;font-size:12px;color:var(--text2);margin-bottom:6px}
.sv-warn-field input{width:100%;height:38px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:13px;background:#fff;box-sizing:border-box}
.sv-warn-field input:focus{outline:none;border-color:var(--primary)}
.sv-warn-node{display:flex;gap:6px;flex-wrap:wrap;min-height:38px;align-items:center}
.sv-node-chip{background:#EEF1FD;color:var(--primary-ink);font-size:12px;padding:4px 10px;border-radius:6px}
.sv-warn-empty{color:var(--text2);font-size:13px}
/* 签单人 chip */
.sv-signer-chip{display:inline-flex;align-items:center;gap:8px;background:#EEF1FD;color:var(--primary-d);font-size:13px;padding:6px 12px;border-radius:8px}
.sv-signer-chip .x{cursor:pointer;font-size:15px;line-height:1;color:var(--text2)}
.sv-signer-chip .x:hover{color:var(--danger)}
/* 权限账号表格顶部操作行 */
.sv-table-actions{display:flex;justify-content:flex-end;margin-bottom:12px}

/* ============ 主播数据录入页（fin_live） ============ */
/* KPI 补两个颜色变体（teal 时长 / purple 人数） */
.kpi-card.teal .kpi-value{color:var(--teal)}
.kpi-card.purple .kpi-value{color:var(--purple)}
/* 两栏布局：左主区（录入+台账）+ 右辅区（排行+核销GMV+分类） */
.fl-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;align-items:start}
.fl-main{min-width:0}
.fl-side{min-width:0}
/* 卡片标题：竖条 + 标题 + 右侧徽标 */
.fl-card-h{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600;margin-bottom:14px}
.fl-card-h::before{content:'';width:3px;height:16px;background:var(--primary);border-radius:2px;flex-shrink:0}
.fl-card-h .badge{margin-left:auto}
/* 表单网格：label 上、控件下，3 列 */
.fl-fg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 14px}
.fl-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.fl-field label{font-size:12px;color:var(--text2)}
.fl-field input,.fl-field select{height:36px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff;box-sizing:border-box;width:100%}
.fl-field input:focus,.fl-field select:focus{outline:none;border-color:var(--primary)}
.fl-field input[readonly]{background:#F8FAFC;color:var(--text2)}
.fl-full{grid-column:1/-1}
/* 主播搜索行：搜索框 + 全选/清空 */
.fl-search-row{display:flex;gap:8px;margin-bottom:6px}
.fl-search-row input{flex:1;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff;box-sizing:border-box}
.fl-search-row input:focus{outline:none;border-color:var(--primary)}
.fl-search-row button{height:34px;padding:0 12px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text);font-size:12px;cursor:pointer;white-space:nowrap;font-family:inherit}
.fl-search-row button:hover{border-color:var(--primary);color:var(--primary-ink)}
/* 时间范围 chips（button 形式，GET 直接提交） */
.fl-tabs{display:flex;gap:6px;flex-wrap:wrap;background:var(--bg);border-radius:8px;padding:4px}
.fl-chip{border:none;background:transparent;color:var(--text2);font-size:12.5px;padding:5px 12px;border-radius:6px;cursor:pointer;transition:all .15s;font-family:inherit}
.fl-chip:hover{color:var(--text)}
.fl-chip.on{background:#fff;color:var(--text);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.08)}
/* 提示说明条 */
.fl-note{font-size:12px;color:var(--text2);line-height:1.7;background:#F8FAFC;border-radius:8px;padding:10px 12px;margin-top:14px}
/* 产能排行榜 */
.fl-rank{list-style:none;margin:0;padding:0}
.fl-rank li{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid #F1F5F9}
.fl-rank li:last-child{border-bottom:none}
.fl-rank .rk{width:22px;height:22px;border-radius:6px;background:var(--bg);color:var(--text2);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}
.fl-rank li:nth-child(1) .rk{background:#FEF3C7;color:#92400E}
.fl-rank li:nth-child(2) .rk{background:#EEF1FD;color:#3A51C7}
.fl-rank li:nth-child(3) .rk{background:#FCEBEB;color:#A32D2D}
.fl-rank .nm{flex:1;font-size:13px}
.fl-rank .cnt{font-size:12px;color:var(--text2)}
.fl-rank .gv{font-weight:600;font-variant-numeric:tabular-nums}
/* 响应式 */
@media(max-width:900px){.fl-grid{grid-template-columns:1fr}.fl-fg{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.fl-fg{grid-template-columns:1fr}}

/* ===== 视频申请单据（v1.2.0） ===== */
.vr-card{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:12px 14px;min-height:90px}
.vr-card-title{font-size:12px;color:var(--text2);font-weight:600;margin-bottom:8px}
.vr-line{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:12.5px;padding:3px 0}
.vr-line-name{color:var(--text1);flex:1;word-break:break-all}
.vr-line-val{color:var(--text2);white-space:nowrap;font-variant-numeric:tabular-nums}
.vr-empty{font-size:12px;color:var(--text3);padding:6px 0}
.vr-link{color:var(--primary-ink);cursor:pointer;font-size:11px;margin-left:2px}
.vr-link:hover{text-decoration:underline}

/* ===== 双向工单提交弹窗（v1.2.11）：门店模糊搜索 + 舒适表单（v1.2.45 Arco 化） ===== */
.wo-form{display:grid;gap:16px}
.wo-field{min-width:0}
.wo-field>label{display:block;font-size:13px;font-weight:500;color:var(--text);margin-bottom:8px}
.wo-field .wo-req{color:var(--danger);margin-left:2px}
.wo-store-pick{position:relative}
.wo-store-list{margin-top:4px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);max-height:220px;overflow:auto;box-shadow:var(--shadow-md)}
.wo-store-item{padding:9px 12px;cursor:pointer;border-bottom:1px solid var(--border-l);display:flex;flex-direction:column;gap:2px}
.wo-store-item:last-child{border-bottom:none}
.wo-store-item:hover{background:var(--fill-l)}
.wo-store-name{font-size:13px;font-weight:500;color:var(--text)}
.wo-store-meta{font-size:11px;color:var(--text3)}
.wo-store-empty{padding:14px;font-size:12px;color:var(--text3);text-align:center}
.wo-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:4px;padding-top:14px;border-top:1px solid var(--border-l)}
/* 商家名称可点击查看档案 */
.store-link{color:var(--primary-ink);cursor:pointer;font-weight:600}
.store-link:hover{text-decoration:underline}
/* 直播GMV走势图点击 tooltip */
.fl-trend-tip{position:fixed;z-index:9999;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.16);padding:8px 12px;font-size:12px;color:var(--text1);pointer-events:none;max-width:240px}
/* 数据看板整体GMV趋势：点击日期点的明细浮层 */
.gmv-trend-tip{position:fixed;z-index:9999;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.18);padding:10px 14px;font-size:13px;color:var(--text1);pointer-events:none;max-width:260px}

/* ===== AI数据助理（只读分析 + 定时通知）===== */
.ai-safe-banner{display:flex;align-items:center;gap:8px;background:#FFF7E8;border:1px solid #FFE0B2;color:#AD6800;border-radius:var(--radius);padding:10px 16px;font-size:13px;margin-bottom:16px}
.ai-safe-banner svg{flex-shrink:0;color:#FA8C16}
.ai-chat-history{min-height:380px;max-height:calc(100vh - 220px);overflow-y:auto;padding:14px 12px 16px;scroll-behavior:auto}
.ai-chat-empty{text-align:center;padding:24px 0 12px}
.ai-chat-hints{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:12px}
.ai-hint{display:inline-block;padding:5px 14px;border:1px solid var(--border);border-radius:999px;font-size:13px;color:var(--text2);cursor:pointer;transition:all .15s;background:#fff}
.ai-hint:hover{border-color:var(--primary);color:var(--primary-ink);background:var(--primary-bg)}

/* ===== 对话气泡（用户/AI/通知三类）===== */
.ai-msg{display:flex;margin-bottom:16px;animation:aiMsgIn .25s ease}
@keyframes aiMsgIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.ai-msg-user{justify-content:flex-end}
.ai-msg-ai{justify-content:flex-start}
.ai-msg-notice{justify-content:center}
.ai-msg-main{display:flex;flex-direction:column;max-width:80%}
.ai-msg-user .ai-msg-main{align-items:flex-end}
.ai-msg-ai .ai-msg-main{align-items:flex-start}
.ai-msg-notice .ai-msg-main{align-items:center;max-width:88%}

/* AI 头像 */
.ai-msg-avatar{width:30px;height:30px;border-radius:8px;background:var(--primary);color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-right:8px;margin-top:2px}

/* 气泡主体 */
.ai-msg-bubble{max-width:100%;padding:10px 14px;border-radius:10px;font-size:13px;line-height:1.7;word-break:break-word}
.ai-msg-user .ai-msg-bubble{background:var(--primary);color:#fff;border-top-right-radius:2px;box-shadow:0 1px 3px rgba(22,93,255,.18)}
.ai-msg-ai .ai-msg-bubble{background:#fff;color:var(--text);border:1px solid var(--border-l);border-top-left-radius:2px;box-shadow:0 1px 2px rgba(15,23,42,.04)}

/* 时间戳 */
.ai-msg-time{font-size:11px;color:var(--text4);margin-top:4px;padding:0 4px}

/* ===== AI 回答 Markdown 排版 ===== */
.ai-msg-bubble .ai-md-p{margin:2px 0;line-height:1.75}
.ai-msg-bubble .ai-md-gap{height:8px}
.ai-msg-bubble .ai-md-h1{font-size:15px;font-weight:600;margin:8px 0 4px;color:var(--text)}
.ai-msg-bubble .ai-md-h2{font-size:14px;font-weight:600;margin:8px 0 4px;color:var(--text)}
.ai-msg-bubble .ai-md-h3,.ai-msg-bubble .ai-md-h4{font-size:13px;font-weight:600;margin:6px 0 3px;color:var(--text)}
.ai-msg-bubble .ai-md-li{display:flex;gap:6px;margin:3px 0;line-height:1.7;padding-left:4px}
.ai-msg-bubble .ai-md-li .ai-md-dot{color:var(--primary-ink);flex-shrink:0}
.ai-msg-bubble .ai-md-li .ai-md-num{color:var(--primary-ink);font-weight:600;flex-shrink:0;min-width:16px}
.ai-msg-bubble .ai-md-hr{border:none;border-top:1px dashed var(--border);margin:10px 0}
.ai-msg-bubble strong{color:var(--text);font-weight:600}
.ai-msg-user .ai-msg-bubble strong{color:#fff}
.ai-msg-bubble code{background:var(--fill);border-radius:4px;padding:1px 5px;font-size:12px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;color:#c7254e}
.ai-md-table{width:100%;border-collapse:collapse;margin:8px 0;font-size:12px}
.ai-md-table td{border:1px solid var(--border-l);padding:6px 8px;text-align:left}
.ai-md-table tr:first-child td{background:var(--fill-l);font-weight:600}

/* ===== 系统通知气泡 ===== */
.ai-notice-bubble{background:var(--primary-bg);border:1px solid #BEDAFF;border-radius:10px;padding:12px 16px;text-align:left;font-size:13px;width:100%}
.ai-notice-bubble.is-unread{box-shadow:0 0 0 2px rgba(22,93,255,.12);border-color:var(--primary)}
.ai-notice-title{font-weight:600;color:var(--text);margin-bottom:6px;display:flex;align-items:center;gap:6px}
.ai-notice-content{color:var(--text2);line-height:1.7;font-size:12.5px}

.ai-chart-box{margin:0 2px 16px;padding:14px;background:var(--fill-l);border:1px solid var(--border-l);border-radius:var(--radius)}
.ai-chat-input{display:flex;gap:10px;align-items:flex-end;border-top:1px solid var(--border-l);padding-top:14px}
.ai-chat-input textarea{flex:1;min-height:60px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;font-size:13px;resize:vertical;line-height:1.5;color:var(--text);transition:border-color .15s,box-shadow .15s;font-family:inherit}
.ai-chat-input textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,93,255,.12)}
.ai-chat-input textarea::placeholder{color:var(--text4)}
.ai-chat-input .btn{height:40px;flex-shrink:0}
.ai-input-hint{font-size:11.5px;color:var(--text3);margin-top:8px;line-height:1.6}

/* ===== AI通知消息（顶栏铃铛 + 站内消息弹窗）===== */
.ai-bell{position:relative;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;color:var(--text2);transition:all .15s;margin-right:4px}
.ai-bell:hover{border-color:var(--primary);color:var(--primary-ink);background:var(--primary-bg)}
.ai-bell svg{width:16px;height:16px}
.ai-bell-dot{position:absolute;top:-3px;right:-3px;width:8px;height:8px;border-radius:50%;background:var(--danger);border:2px solid #fff}
/* v2.0.35 语音静音状态：铃铛灰化 + 右下角静音角标，不进面板即可分辨语音提醒已关闭 */
.ai-bell.voice-off{opacity:.55;color:var(--text3)}
.ai-bell.voice-off::after{content:'';position:absolute;right:-4px;bottom:-4px;width:15px;height:15px;border-radius:50%;background:#94a3b8;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='11 5 6 9 2 9 2 15 6 15 11 19 11 5'/%3E%3Cline x1='23' y1='9' x2='17' y2='15'/%3E%3Cline x1='17' y1='9' x2='23' y2='15'/%3E%3C/svg%3E");background-size:10px;background-position:center;background-repeat:no-repeat;border:2px solid #fff}
/* v2.0.40 招商星图右下角省份合作密度卡片（固定悬浮，点击进入省市区明细页） */
.inv-density-card{position:fixed;right:18px;bottom:18px;z-index:120;width:218px;background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 10px 30px rgba(15,23,42,.14);padding:14px 16px;cursor:pointer;transition:transform .15s,box-shadow .15s}
.inv-density-card:hover{transform:translateY(-2px);box-shadow:0 14px 36px rgba(15,23,42,.2)}
.inv-density-head{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--text1);margin-bottom:10px}
.inv-density-head svg{width:16px;height:16px;color:#3b7dff}
.inv-density-stats{display:flex;gap:8px;margin-bottom:10px}
.inv-density-item{flex:1;background:var(--bg2,#f5f7fa);border-radius:8px;padding:8px 6px;text-align:center}
.inv-density-item b{display:block;font-size:18px;line-height:1.3;color:var(--text1)}
.inv-density-item b.c-blue{color:#3b7dff}
.inv-density-item b.c-red{color:#ef4444}
.inv-density-item span{font-size:11px;color:var(--text3)}
.inv-density-link{font-size:12px;color:#3b7dff;text-align:center}
.ai-msg-list{display:grid;gap:8px;max-height:60vh;overflow-y:auto}
.ai-msg-item{padding:10px 12px;border:1px solid var(--border-l);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s}
.ai-msg-item:hover{background:var(--fill-l)}
.ai-msg-item.is-read{opacity:.62}
.ai-msg-item-title{font-size:13px;font-weight:500;color:var(--text);margin-bottom:4px;display:flex;align-items:center;gap:6px}
.ai-msg-item-content{font-size:12px;color:var(--text2);line-height:1.6}
.ai-msg-item-time{font-size:11px;color:var(--text4);margin-top:4px}
.ai-unread-tag{display:inline-block;background:var(--danger);color:#fff;font-size:10px;padding:0 5px;border-radius:4px;line-height:14px}

/* ===== AI数据助理 v1.6.0：类 ChatGPT 双栏布局（左会话栏 + 右聊天主区） ===== */
.ai-shell{position:relative;display:flex;height:calc(100vh - var(--topbar-h) - 40px);min-height:520px;background:var(--card);border:1px solid var(--border-l);border-radius:var(--radius);overflow:hidden}

/* ---- 左侧会话栏 ---- */
.ai-sessions{width:250px;flex-shrink:0;display:flex;flex-direction:column;border-right:1px solid var(--border-l);background:var(--fill-l)}
.ai-sessions-top{display:flex;gap:8px;align-items:center;padding:12px 12px 8px}
.ai-btn-new{flex:1;height:36px;font-size:13px}
.ai-sess-toggle,.ai-sess-expand{width:28px;height:28px;flex-shrink:0;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text3);cursor:pointer;font-size:13px;line-height:1;transition:all .15s}
.ai-sess-toggle:hover,.ai-sess-expand:hover{border-color:var(--primary);color:var(--primary-ink);background:var(--primary-bg)}
.ai-sess-search{padding:0 12px 10px}
.ai-sess-search .form-control{height:32px;font-size:12.5px}
.ai-sess-list{flex:1;overflow-y:auto;padding:4px 8px 8px}
.ai-session-item{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer;transition:background .15s;margin-bottom:2px}
.ai-session-item:hover{background:rgba(22,93,255,.06)}
.ai-session-item.active{background:var(--primary-bg);color:var(--primary-ink)}
.ai-session-item.active .ai-session-title{color:var(--primary-ink);font-weight:600}
.ai-session-title{flex:1;font-size:13px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-session-ops{display:flex;gap:2px;opacity:0;transition:opacity .15s}
.ai-session-item:hover .ai-session-ops{opacity:1}
.ai-session-ops button{width:20px;height:20px;border:none;background:transparent;color:var(--text3);cursor:pointer;font-size:12px;line-height:1;border-radius:4px;padding:0}
.ai-session-ops button:hover{color:var(--primary-ink);background:rgba(22,93,255,.1)}
.ai-sess-empty{padding:24px 0;text-align:center;font-size:12px;color:var(--text4)}
.ai-sessions-foot{border-top:1px solid var(--border-l);padding:10px 12px}
.ai-sess-foot-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border:none;background:transparent;color:var(--text2);font-size:13px;cursor:pointer;padding:6px 4px;border-radius:var(--radius-sm);transition:all .15s}
.ai-sess-foot-btn:hover{color:var(--primary-ink);background:var(--primary-bg)}
.ai-unread-badge{display:inline-block;min-width:18px;text-align:center;background:var(--danger);color:#fff;font-size:10px;padding:1px 5px;border-radius:9px;line-height:14px}

/* 折叠态：会话栏隐藏，左缘显示展开细条 */
.ai-sess-expand{display:none;position:absolute;left:0;top:50%;margin-top:-14px;z-index:5}
.ai-shell.sess-collapsed .ai-sessions{display:none}
.ai-shell.sess-collapsed .ai-sess-expand{display:block}

/* ---- 右侧聊天主区 ---- */
.ai-chat-main{flex:1;min-width:0;display:flex;flex-direction:column;padding:0 16px 12px}
.ai-chat-head{display:flex;align-items:baseline;gap:10px;padding:14px 4px 10px;border-bottom:1px solid var(--border-l);flex-wrap:wrap}
.ai-chat-title{font-size:15px;font-weight:600;color:var(--text)}
.ai-chat-sub{font-size:11.5px;color:var(--text4)}
.ai-shell .ai-chat-history{flex:1;min-height:0;max-height:none;padding:16px 4px}
.ai-shell .ai-chat-input textarea{min-height:44px;max-height:160px;resize:none}
.ai-input-hint{text-align:center}

/* 流式打字光标 + 等待提示 */
.ai-cursor{display:inline-block;width:2px;height:14px;background:var(--primary);vertical-align:-2px;margin-left:2px;animation:aiBlink 1s steps(2) infinite}
@keyframes aiBlink{0%,49%{opacity:1}50%,100%{opacity:0}}
.ai-typing{color:var(--text3);font-size:12.5px}

/* 代码块（深色 + 语言头 + 复制按钮） */
.ai-code{background:#0F172A;border-radius:8px;margin:8px 0;overflow:hidden}
.ai-code-head{display:flex;align-items:center;justify-content:space-between;padding:5px 10px;background:rgba(255,255,255,.06);font-size:11px;color:#94A3B8}
.ai-code-copy{border:none;background:transparent;color:#94A3B8;font-size:11px;cursor:pointer;padding:2px 4px;border-radius:4px}
.ai-code-copy:hover{color:#fff;background:rgba(255,255,255,.12)}
.ai-code-pre{margin:0;padding:10px 12px;overflow-x:auto;color:#E2E8F0;font-size:12px;line-height:1.6;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}
.ai-msg-bubble code{white-space:pre-wrap}

/* 消息操作条（复制 / 重新生成） */
.ai-msg-actions{display:flex;gap:12px;margin-top:5px;padding:0 4px}
.ai-msg-actions button{border:none;background:transparent;color:var(--text3);font-size:11.5px;cursor:pointer;padding:0}
.ai-msg-actions button:hover{color:var(--primary-ink)}

/* 动作确认卡片（AI 提议 → 用户确认 → 调现有接口） */
.ai-action-wrap{display:grid;gap:8px;margin-top:8px}
.ai-action-card{background:#F8FAFF;border:1px solid #BEDAFF;border-left:3px solid var(--primary);border-radius:var(--radius-sm);padding:10px 12px}
.ai-action-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ai-action-name{font-size:12.5px;font-weight:600;color:var(--text)}
.ai-act-btns{display:flex;gap:6px;align-items:center;flex-shrink:0}
.ai-act-btns button{height:26px;padding:0 12px;font-size:12px;border-radius:var(--radius-sm);cursor:pointer;border:1px solid var(--border);background:#fff;color:var(--text2);transition:all .15s}
.ai-act-btns .ai-act-ok{background:var(--primary);border-color:var(--primary);color:#fff}
.ai-act-btns .ai-act-ok:hover{opacity:.88}
.ai-act-btns .ai-act-no:hover{border-color:var(--primary);color:var(--primary-ink)}
.ai-act-btns button:disabled{opacity:.55;cursor:not-allowed}
.ai-action-detail{font-size:12px;color:var(--text2);margin-top:5px;line-height:1.6}
.ai-action-card.done{opacity:.78;background:var(--fill-l);border-color:var(--border-l);border-left-color:var(--text4)}
.ai-act-result{font-size:12px;color:var(--text3)}
.ai-act-result.ok{color:var(--success,#00b42a)}
.ai-act-result.bad{color:var(--danger)}

/* 「加载更早消息」按钮 */
.ai-load-earlier{text-align:center;margin:0 0 12px}
.ai-load-earlier button{border:1px solid var(--border);background:#fff;color:var(--text3);font-size:12px;padding:5px 16px;border-radius:999px;cursor:pointer;transition:all .15s}
.ai-load-earlier button:hover{border-color:var(--primary);color:var(--primary-ink)}

/* ---- 定时任务抽屉内容 ---- */
.ai-task-sec-title{font-size:13px;font-weight:600;color:var(--text);margin:4px 0 8px}
.ai-task-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid var(--border-l)}
.ai-task-item.notice.unread{background:#FFF7E8;margin:0 -12px;padding:10px 12px;border-radius:var(--radius-sm);border-bottom-color:#FFE0B2}
.ai-task-main{flex:1;min-width:0}
.ai-task-name{font-size:13px;font-weight:500;color:var(--text);margin-bottom:3px}
.ai-task-desc{font-size:12px;color:var(--text3);line-height:1.6;word-break:break-word}
.ai-task-ops{display:flex;gap:6px;flex-shrink:0;padding-top:2px}
.ai-task-btn{height:26px;padding:0 10px;font-size:12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text2);cursor:pointer;transition:all .15s}
.ai-task-btn:hover{border-color:var(--primary);color:var(--primary-ink)}
.ai-task-btn.danger:hover{border-color:var(--danger);color:var(--danger)}
.ai-task-time{font-size:11px;color:var(--text4);flex-shrink:0;padding-top:2px}
.ai-task-empty{font-size:12px;color:var(--text4);padding:8px 0 4px}

/* ---- 小屏适配：会话栏改浮层 ---- */
@media (max-width:900px){
  .ai-sessions{position:absolute;left:0;top:0;bottom:0;z-index:30;box-shadow:0 8px 24px rgba(15,23,42,.15)}
  .ai-shell.sess-collapsed .ai-sessions{display:none}
  .ai-sess-expand{top:8px;margin-top:0}
}


/* ==================== 浅色未来科技主题（v1.2.59） ==================== */
body{background:var(--page-bg)}

/* ---- 侧边栏：浅色玻璃 + 可折叠 + 细蓝指示条（不用大块背景） ---- */
#sidebar{width:var(--sidebar-w);background:rgba(255,255,255,.72);backdrop-filter:blur(14px) saturate(150%);-webkit-backdrop-filter:blur(14px) saturate(150%);border-right:1px solid rgba(226,232,240,.7);color:var(--text2);transition:width .3s cubic-bezier(.4,0,.2,1),transform .3s}
#sidebar .logo{color:var(--text-title);border-bottom:1px solid rgba(226,232,240,.6)}
/* v1.8.21 浅色主题下板块标题同步主题化：主色文字加粗（继承深色侧栏的竖条点缀） */
#sidebar .nav-group-title{color:var(--text2);font-size:12px;font-weight:600;letter-spacing:.6px}
#sidebar .nav-group-title:hover{color:var(--primary-ink)}
#sidebar .nav-item{color:var(--text-body);border-left:3px solid transparent;transition:background .15s,color .15s,border-color .15s}
#sidebar .nav-item:hover{background:var(--primary-light);color:var(--text-title)}
#sidebar .nav-item.active{background:transparent;color:var(--primary-ink);border-left-color:var(--primary);font-weight:600}
#sidebar .nav-item.active:hover{background:var(--primary-light)}
#sidebar .sidebar-footer{border-top:1px solid rgba(226,232,240,.6);color:var(--text-placeholder)}
/* 折叠态 */
#sidebar.collapsed{width:72px}
#sidebar.collapsed .logo span,
#sidebar.collapsed .nav-group-title,
#sidebar.collapsed .nav-item span,
#sidebar.collapsed .sidebar-footer .foot-label{display:none}
/* v1.8.18 折叠态：logo 主图标隐藏，仅保留顶部折叠按钮（居中） */
#sidebar.collapsed .logo > svg:first-child{display:none}
#sidebar.collapsed .logo{justify-content:center;padding:0}
#sidebar.collapsed .nav-item{justify-content:center;padding:10px 0;gap:0}
#sidebar.collapsed .nav-item.active{border-left-width:3px}
#sidebar.collapsed .sidebar-footer{text-align:center;font-size:0}
#sidebar.collapsed .sidebar-footer::after{content:'···';font-size:11px}
#sidebar .collapse-btn{display:flex;align-items:center;justify-content:center;height:40px;margin:0 16px 12px;border:1px solid rgba(226,232,240,.7);border-radius:10px;background:rgba(255,255,255,.6);color:var(--text2);cursor:pointer;font-size:12px;gap:6px;transition:all .15s}
#sidebar .collapse-btn:hover{border-color:var(--primary);color:var(--primary-ink)}
#sidebar .collapse-btn svg{width:15px;height:15px;transition:transform .3s}
#sidebar.collapsed .collapse-btn{margin:0 10px 12px;justify-content:center}
#sidebar.collapsed .collapse-btn svg{transform:rotate(180deg)}
#sidebar.collapsed .collapse-btn .foot-label{display:none}

/* ---- 顶栏：52px 轻薄玻璃 ---- */
#topbar{height:52px;background:rgba(255,255,255,.72);backdrop-filter:blur(14px) saturate(150%);-webkit-backdrop-filter:blur(14px) saturate(150%);border-bottom:1px solid rgba(226,232,240,.7);box-shadow:0 1px 6px rgba(15,23,42,.03);padding:0 24px}

/* ---- 内容区间距：左右 32px ---- */
#content{padding:24px var(--page-padding-x) 40px}

/* ---- 卡片：玻璃 + 14px 圆角 + 轻阴影 + 模块间距 24px ---- */
.card{background:var(--card-bg);border:var(--card-border);border-radius:var(--radius);backdrop-filter:var(--card-blur);-webkit-backdrop-filter:var(--card-blur);box-shadow:var(--card-shadow);margin-bottom:var(--block-margin);padding:var(--card-padding)}
.card:hover{border-color:rgba(59,125,255,.28);box-shadow:0 6px 22px rgba(15,23,42,.07)}
.view-header{margin-bottom:var(--block-margin)}

/* ---- KPI 卡片：玻璃 ---- */
.kpi-grid{gap:var(--card-gap);margin-bottom:var(--block-margin)}
.kpi-card{background:var(--card-bg);border:var(--card-border);border-radius:var(--radius);backdrop-filter:var(--card-blur);-webkit-backdrop-filter:var(--card-blur);box-shadow:var(--card-shadow);padding:var(--card-padding)}
.kpi-card:hover{border-color:rgba(59,125,255,.3);box-shadow:0 6px 22px rgba(15,23,42,.08)}

/* ---- 表格：去外边框 + 行高 44px + hover 浅蓝 ---- */
.table-wrap{border:none;background:var(--card-bg);border-radius:var(--radius);backdrop-filter:var(--card-blur);-webkit-backdrop-filter:var(--card-blur);box-shadow:var(--card-shadow)}
.table-wrap th{height:44px;padding:0 16px;background:rgba(248,250,252,.8)}
.table-wrap td{height:44px;padding:0 16px}
.table-wrap tbody tr:hover td{background:rgba(59,125,255,.05)}
thead th{background:rgba(248,250,252,.8)}

/* ---- 按钮：高度 40px ---- */
.btn{height:40px;padding:0 18px;border-radius:10px;font-weight:500}
.btn-sm{height:32px;padding:0 13px;font-size:13px}
.btn-lg{height:44px}
.btn-outline{background:rgba(255,255,255,.6)}
.btn-outline:hover{background:var(--primary-light)}

/* ---- 表单/筛选：玻璃 + 圆角 ---- */
.filter-bar select,.filter-bar input{height:36px;background:rgba(255,255,255,.7);border-radius:10px}
.form-control,.form-group input,.form-group select{background:rgba(255,255,255,.8);border-radius:10px;height:38px}
.form-group textarea{background:rgba(255,255,255,.8);border-radius:10px}
.form-group{margin-bottom:var(--inner-gap)}
#topbar .search-box input{background:rgba(248,250,252,.8);border-radius:10px}

/* ---- 弹窗/抽屉：玻璃 ---- */
.modal{background:rgba(255,255,255,.92);backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);border:1px solid rgba(226,232,240,.7);border-radius:16px;box-shadow:0 16px 48px rgba(15,23,42,.14)}
.modal-overlay{background:rgba(15,23,42,.42);backdrop-filter:blur(2px)}
/* v1.9.76 修复：弹窗标题/底部栏 sticky 时背景透明导致滚动文字重叠（玻璃拟态遗留覆盖）。
   用实色 #fff（--card 是 82% 半透明白，sticky 下内容仍会轻微透字） */
.modal-header{background:#fff;border-bottom:1px solid rgba(226,232,240,.7)}
.modal-footer{background:#fff;border-top:1px solid rgba(226,232,240,.7)}

/* ---- 标签：去掉大色块，柔和 ---- */
.tag{border-radius:6px}
.badge{border-radius:6px}
.level-badge{border-radius:6px}

/* ---- 其它 ---- */
::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}
.tabs{border-bottom:1px solid var(--border)}
.alert-card{border-radius:14px}

/* ==================== 右侧抽屉 + 图标按钮 + 高级筛选抽屉（v1.2.60） ==================== */
.drawer-overlay{position:fixed;inset:0;background:rgba(15,23,42,.42);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);display:none;z-index:1000}
.drawer-overlay.show{display:block}
.drawer{position:absolute;top:0;right:0;height:100%;width:640px;max-width:92vw;background:rgba(255,255,255,.94);backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);box-shadow:-16px 0 48px rgba(15,23,42,.15);display:flex;flex-direction:column;animation:drawerIn .3s cubic-bezier(.22,1,.36,1)}
.drawer-lg{width:800px}
.drawer-xl{width:1120px;max-width:95vw}
@keyframes drawerIn{from{transform:translateX(40px);opacity:0}to{transform:none;opacity:1}}
.drawer-header{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--border);flex-shrink:0}
.drawer-title{font-size:16px;font-weight:600;color:var(--text)}
.drawer-close{cursor:pointer;width:30px;height:30px;display:flex;align-items:center;justify-content:center;color:var(--text3);background:none;border:none;border-radius:8px;font-size:20px;line-height:1;transition:all .15s}
.drawer-close:hover{background:var(--fill);color:var(--text)}
.drawer-body{flex:1;overflow-y:auto;padding:20px 22px}
.drawer-footer{padding:14px 22px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;flex-shrink:0;background:rgba(255,255,255,.6)}

/* 操作图标按钮（列表行内，替代文字按钮） */
.icon-act-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--border);border-radius:8px;background:rgba(255,255,255,.6);color:var(--text2);cursor:pointer;transition:all .15s}
.icon-act-btn:hover{border-color:var(--primary);color:var(--primary-ink);background:var(--primary-light)}
.icon-act-btn.danger:hover{border-color:var(--danger);color:var(--danger);background:var(--danger-bg)}
.icon-act-btn.success:hover{border-color:var(--success);color:var(--success);background:var(--success-bg)}
.icon-act-btn svg{width:15px;height:15px}

/* 高级筛选抽屉（form 内 fixed 抽屉） */
.filter-adv-drawer .drawer-body{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px}
.filter-field label{display:block;font-size:12px;color:var(--text2);margin-bottom:6px}
.filter-field select,.filter-field input{width:100%;height:36px;border:1px solid var(--border);border-radius:10px;padding:0 10px;font-size:13px;background:rgba(255,255,255,.85);color:var(--text)}
.filter-field select:focus,.filter-field input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px rgba(59,125,255,.12)}

/* ==================== 列表页通用增强补充（v1.2.61） ==================== */
/* 图标按钮警示态 hover（危险/成功已定义，此处补警示色） */
.icon-act-btn.warning:hover{border-color:var(--warning);color:var(--warning);background:var(--warning-bg)}
/* 高级筛选抽屉入口按钮间距 */
.adv-filter-btn{margin-left:4px}

/* ==================== 提交报销表单（v1.2.66） ==================== */
.rb-form{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px}
.rb-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.rb-field.rb-span{grid-column:1 / -1}
.rb-field label{font-size:12px;color:var(--text2);font-weight:500}
.rb-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:20px;padding-top:14px;border-top:1px solid var(--border)}

/* ==================== 移动端适配（v1.2.66） ==================== */
/* 目标：手机上可顺畅浏览列表、操作按钮够大、弹窗/抽屉全屏、表格可横向滚动 */
@media (max-width:768px){
  /* 内容区留白收紧，标题区竖排 */
  #content{padding:12px 14px 28px}
  .view-header{flex-direction:column;align-items:stretch;gap:10px}
  .view-header>div:last-child{display:flex;flex-wrap:wrap;gap:8px}
  .view-title{font-size:18px}
  .view-subtitle{font-size:12px}
  .card{padding:14px;border-radius:12px}
  .card-title{font-size:14px;flex-wrap:wrap;gap:6px}

  /* 顶栏：收紧，隐藏次要信息 */
  #topbar{padding:0 12px}
  .user-info span:not(.user-avatar){display:none}
  .role-badge{display:none}

  /* 筛选栏：竖排全宽，输入框加大到 40px 便于触摸 */
  .filter-bar{gap:10px;margin-bottom:14px}
  .filter-bar select,.filter-bar input{width:100%;min-width:0;flex:1 1 100%;height:40px;font-size:16px}
  .filter-bar .btn,.filter-bar a.btn{flex:1 1 auto;min-height:40px;justify-content:center}

  /* ===== 表格卡片化（v1.2.67）：手机上「一行一张卡片」竖排看全字段，不再横向滚动 ===== */
  .table-wrap{overflow:visible;border-radius:0;box-shadow:none;border:none;background:transparent}
  .table-wrap table{display:block;min-width:0 !important;width:100%}
  .table-wrap thead{display:none}
  .table-wrap tbody{display:block}
  /* 每行 = 一张卡片 */
  .table-wrap tbody tr{display:block;background:rgba(255,255,255,.9);border:1px solid var(--border);
    border-radius:12px;padding:10px 12px;margin-bottom:10px;box-shadow:0 1px 3px rgba(15,23,42,.04)}
  /* 每格 = 一行「字段名 ········ 值」 */
  .table-wrap tbody td{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
    padding:7px 0;border:none;font-size:13px;text-align:left;line-height:1.5;max-width:none !important;
    white-space:normal;overflow:visible;text-overflow:clip}
  .table-wrap tbody td + td{border-top:1px dashed var(--border)}
  .table-wrap tbody td::before{content:attr(data-label);color:var(--text2);font-size:12px;
    font-weight:500;flex:0 0 auto;white-space:nowrap;text-align:left}
  .table-wrap tbody td[data-label]{text-align:right}
  /* 无 data-label 的单元格（如商家列表自带 k/v 结构）不显示伪元素，内容占满整行 */
  .table-wrap tbody td:not([data-label])::before{content:none}
  .table-wrap tbody td:not([data-label]){display:block}
  /* 商家列表自带的 k/v 行撑满卡片 */
  .table-wrap tbody td .cell-line{width:100%;display:flex;justify-content:space-between;gap:10px}
  /* 单元格内的容器撑满剩余宽度（操作列的按钮组否则会被内容宽度限制，按钮点按面积太小） */
  .table-wrap tbody td > div{flex:1;min-width:0}
  /* 操作列：按钮撑满卡片宽度，更好点按 */
  .table-wrap tbody td .btn{width:100%;min-height:40px;justify-content:center;margin-top:2px}

  /* 按钮触摸区域 ≥40px（Apple/Google 建议 44px） */
  .btn{min-height:40px;padding:0 16px}
  .btn-sm{min-height:36px;padding:0 12px}
  .icon-act-btn{width:38px;height:38px}
  .icon-act-btn svg{width:17px;height:17px}

  /* 弹窗：改为底部弹出、全宽、圆角上翻 */
  .modal-overlay{align-items:flex-end;padding:0}
  .modal{width:100%;max-width:100%;max-height:90vh;margin:0;border-radius:16px 16px 0 0;display:flex;flex-direction:column}
  .modal.inv-lg,.modal.inv-xl{width:100%;max-width:100%}
  .modal-header{padding:14px 16px;flex-shrink:0}
  .modal-body{padding:14px 16px;overflow-y:auto;-webkit-overflow-scrolling:touch}
  .modal-footer{padding:12px 16px;gap:10px;flex-shrink:0}
  .modal-footer .btn{flex:1;min-height:42px}

  /* 抽屉：移动端全宽（门店档案等） */
  .drawer{width:100%;max-width:100%;border-radius:16px 16px 0 0}
  .drawer-lg,.drawer-xl{width:100%;max-width:100%}
  .drawer-header{padding:14px 16px}
  .drawer-body{padding:14px 16px}
  .drawer-footer{padding:12px 16px;gap:10px}
  .drawer-footer .btn{flex:1;min-height:42px}

  /* 表单：单列、输入区加大（16px 可避免 iOS 自动缩放） */
  .rb-form{grid-template-columns:1fr;gap:14px}
  .rb-field.rb-span{grid-column:span 1}
  .form-control{height:44px;font-size:16px}
  textarea.form-control{min-height:84px}
  select.form-control{height:44px;font-size:16px}
  .rb-actions{position:sticky;bottom:0;background:var(--card-bg);margin-top:16px}
  .rb-actions .btn{flex:1;min-height:44px}

  /* 权限矩阵/筛选抽屉：单列 */
  .filter-adv-drawer .drawer-body{grid-template-columns:1fr}
  .su-perm-table table{min-width:0;font-size:12px}

  /* KPI / 网格：两列 */
  .kpi-grid{grid-template-columns:1fr 1fr;gap:12px}
  .grid-2,.grid-3{grid-template-columns:1fr}

  /* 分页：按钮加大 */
  .pager .btn,.pager a.btn{min-height:38px;padding:0 14px}

  /* 商家列表移动端（v1.2.87 彻底重构）：隐藏大表格，改用专用卡片，只展示
     门店名称/门店ID/跟进人/合作状态/档案 五要素，根除字段过多重叠与展示混乱 */
  #merchantTableWrap{display:none}
  .m-card-list{display:block}
  .m-card{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:12px 14px;margin-bottom:10px}
  .m-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:8px}
  .m-card-name{font-size:15px;font-weight:600;color:var(--primary-ink);word-break:break-all;line-height:1.45;cursor:pointer}
  .m-card-row{display:flex;align-items:center;gap:10px;font-size:13px;line-height:1.6;padding:2px 0}
  .m-card-row .k{flex:0 0 52px;color:var(--text2);font-size:12px}
  .m-card-row .v{flex:1;min-width:0;word-break:break-all;color:var(--text)}
  .m-card-foot{display:flex;justify-content:flex-end;margin-top:8px}
  .m-card-foot .btn{min-width:92px;min-height:38px}
  .m-card-empty{padding:30px 0;text-align:center;color:var(--text2);font-size:13px}
  /* 顶部搜索/筛选不再冻结（position:static），随页面滚动，避免遮挡商家卡片信息 */
  .merchants-sticky-bar{position:static;top:auto;background:transparent}
  #merchantTable thead th{position:static}
}

/* 超窄屏（≤420px）：KPI 单列 */
@media (max-width:420px){
  .kpi-grid{grid-template-columns:1fr}
  #content{padding:10px 12px 24px}
}

/* ==================== 手机端：配置商品操作 + 档案/抽屉可用性（v1.2.67） ==================== */
@media (max-width:768px){
  /* 配置商品操作栏：按钮两列等分，标签独占一行 */
  .cfg-actions{gap:10px !important}
  .cfg-actions .btn{flex:1 1 calc(50% - 5px) !important;min-width:0;min-height:44px;
    justify-content:center;text-align:center;padding:0 10px;font-size:13px}
  .cfg-actions .tag{flex:1 1 100%;text-align:center;padding:8px 12px;font-size:12px}

  /* 档案 KPI：两列，数值不至于挤在一起 */
  .archive-kpi-row{grid-template-columns:1fr 1fr !important;gap:10px}
  .archive-kpi{padding:12px 10px}
  .archive-kpi-value{font-size:18px}

  /* 档案字段网格：手机上改为单列，字段不再挤成三列 */
  .archive-field-grid{grid-template-columns:1fr !important;gap:12px}
  .archive-field[style*="span 2"]{grid-column:span 1 !important}
  .archive-section{padding:14px 16px}

  /* 档案头部：头像缩小，标题换行 */
  .archive-header{flex-wrap:wrap;gap:12px;padding:12px 0}
  .archive-head-title{flex-wrap:wrap;gap:6px}
  .archive-name{font-size:16px;word-break:break-all}
  .archive-head-sub{flex-wrap:wrap;font-size:12px}

  /* 抽屉内容留白收紧，Tab 可横向滑动 */
  .archive-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;flex-wrap:nowrap;white-space:nowrap}
  .archive-tab{flex:0 0 auto;padding:10px 14px}

  /* 商品选择弹窗内的搜索/列表：输入框加大 */
  .cfg-pick-list{max-height:46vh;overflow-y:auto;-webkit-overflow-scrolling:touch}
}

/* ===== 微信内置浏览器（X5 内核）兼容兜底 ===== */
/* X5 对 backdrop-filter 支持不稳定，玻璃卡片必须有不透明底色兜底，否则可能透成一片 */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .card,.modal,.drawer,.drawer-body,.kpi-card{background:#fff}
  #topbar,#sidebar{background:#fff}
}

/* ==================== 胶囊型渐变进度条（v1.2.72）：商家分级分布等 ==================== */
.bar-pill-list{display:flex;flex-direction:column;gap:12px;padding:6px 0 2px}
.bar-pill-row{display:flex;align-items:center;gap:12px}
.bar-pill-label{width:60px;font-size:13px;color:var(--text2);text-align:right;font-weight:500;flex-shrink:0}
.bar-pill-track{
  flex:1;min-width:0;height:16px;
  background:#fff;border:1px solid var(--border);
  border-radius:8px;padding:2px;overflow:hidden;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.02);
}
.bar-pill-fill{
  height:100%;border-radius:5px;min-width:5px;
  background:linear-gradient(90deg,#4F6BED 0%,#4FD8EB 100%);
  transition:width .4s ease;
}
.bar-pill-count{width:48px;font-size:13px;font-weight:700;color:var(--text-title);text-align:right;flex-shrink:0}

/* 手机端：标签 + 数字更紧凑一点 */
@media (max-width:768px){
  .bar-pill-row{gap:10px}
  .bar-pill-label{width:52px;font-size:12px}
  .bar-pill-count{width:40px;font-size:12px}
}

/* 胶囊条右侧数值加宽版（v1.2.73）：用于展示金额而非计数 */
.bar-pill-count.wide{width:96px;font-size:12px;font-variant-numeric:tabular-nums}
@media (max-width:768px){
  .bar-pill-count.wide{width:78px;font-size:11px}
}

/* ==================== 文件选择按钮美化（v1.2.74，全站通用） ==================== */
/* 原生「选择文件」按钮很丑，统一改成主色按钮 + 虚线拖放区 */
input[type=file]{
  display:block;width:100%;padding:6px 8px;font-size:13px;color:var(--text2);
  border:1px dashed var(--border);border-radius:6px;background:var(--fill-l);
  cursor:pointer;transition:border-color .15s;
}
input[type=file]:hover{border-color:var(--primary-l)}
input[type=file]::file-selector-button{
  border:none;background:var(--primary);color:#fff;border-radius:6px;
  padding:7px 14px;margin-right:10px;font-size:13px;font-weight:500;
  cursor:pointer;transition:background .15s;
}
input[type=file]::file-selector-button:hover{background:#0E42D2}

/* 报销弹窗：自定义上传按钮（替代原生选择文件） */
.rb-upload-btn{
  display:inline-flex;align-items:center;gap:6px;width:fit-content;
  padding:8px 14px;border:1px solid var(--border);border-radius:6px;
  font-size:13px;color:var(--text-body);background:var(--fill-l);cursor:pointer;
  transition:border-color .15s,color .15s,background .15s;
}
.rb-upload-btn:hover{border-color:var(--primary);color:var(--primary-ink);background:#fff}

/* 凭证缩略图预览区 */
.rb-voucher-previews{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.rb-vp-item{position:relative;width:80px;height:80px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--fill-l)}
.rb-vp-item img{width:100%;height:100%;object-fit:cover;display:block}
.rb-vp-name{position:absolute;left:0;right:0;bottom:0;font-size:10px;color:#fff;background:rgba(0,0,0,.55);padding:2px 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rb-vp-del{position:absolute;top:3px;right:3px;width:18px;height:18px;border:none;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:12px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.rb-vp-del:hover{background:var(--danger)}
.rb-vp-empty{font-size:12px;color:var(--text2);padding:4px 2px}

/* ==================== 凭证图片灯箱（v1.2.75）：点击缩略图放大查看 ==================== */
.rb-lightbox{
  position:fixed;inset:0;z-index:9999;background:rgba(10,14,22,.82);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  animation:rbLbFade .15s ease;
}
@keyframes rbLbFade{from{opacity:0}to{opacity:1}}
/* v1.9.62 灯箱（无边界缩放）：滚轮围绕鼠标缩放 + 左键拖拽 + 仅关闭按钮 */
.rb-lb-pan{overflow:hidden;cursor:grab}
.rb-lb-pan.dragging{cursor:grabbing}
.rb-lb-pan img{
  position:absolute;left:50%;top:50%;
  max-width:none;max-height:none;margin:0;
  transform-origin:center center;
  box-shadow:0 12px 40px rgba(0,0,0,.5);border-radius:6px;
  cursor:grab;user-select:none;-webkit-user-drag:none;
  will-change:transform;
}
.rb-lb-close{
  position:fixed;top:14px;right:14px;z-index:30;
  min-width:38px;height:38px;padding:0 14px;border:1px solid rgba(255,255,255,.28);
  background:rgba(255,255,255,.12);color:#fff;border-radius:8px;font-size:14px;cursor:pointer;
  transition:background .15s;
}
.rb-lb-close:hover{background:rgba(255,255,255,.25)}
.rb-lb-hint{
  position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:30;
  font-size:12px;color:rgba(255,255,255,.55);pointer-events:none;white-space:nowrap;
}
/* 缩略图可点击 */
.rb-vp-item{cursor:zoom-in}

/* ==================== 门店健康体检（v1.2.95）：自然线条机器人 + 首次进入全绿扫描动画 ====================
   v1.2.95 在 v1.2.94 深色科技面板基础上改两处：
     · 人形：机甲直线拼块 → 自然线条机器人（圆润胶囊 + 平滑贝塞尔收腰曲线），区域间留 2px 深色缝
     · 动画：首次进入先全绿（全部达标）→ 扫描线从上到下 → 各区域按顺序交叉淡化到实际指标色
   保留 v1.2.94：液态渐变（light→main→deep 135°）、白描边、霓虹辉光、波光漂移、玻璃磨砂面板、
   左[人形+7行数据] / 右[关键结论卡+图例卡] 布局、底部指标明细表
*/
.health-wrap{display:flex;flex-direction:column;gap:18px}
/* 深色科技面板：双径向光晕 + 深蓝渐变 + 细网格 + 玻璃磨砂 */
.health-board{
  position:relative;overflow:hidden;
  display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);
  gap:18px;align-items:stretch;
  padding:18px 20px 20px;
  border-radius:20px;
  background:
    radial-gradient(900px 430px at 20% 46%, rgba(46,92,255,.17), transparent 62%),
    radial-gradient(700px 380px at 84% 8%, rgba(96,132,255,.10), transparent 60%),
    linear-gradient(160deg,#0c1424 0%,#0f1a30 46%,#121f3c 100%);
  border:1px solid rgba(255,255,255,.09);
  box-shadow:0 14px 40px rgba(8,18,42,.28),inset 0 1px 0 rgba(255,255,255,.07);
}
/* 科技网格（网格只在中左半出现，用 mask 渐隐） */
.health-board::before{
  content:'';position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background-image:
    linear-gradient(rgba(148,180,255,.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(148,180,255,.055) 1px, transparent 1px);
  background-size:28px 28px;
  -webkit-mask-image:radial-gradient(75% 85% at 26% 52%, #000 25%, transparent 100%);
  mask-image:radial-gradient(75% 85% at 26% 52%, #000 25%, transparent 100%);
}
/* 斜向镜面高光（玻璃反光） */
.health-board::after{
  content:'';position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:linear-gradient(115deg,rgba(255,255,255,.05) 0%,rgba(255,255,255,0) 30%,
             rgba(255,255,255,0) 70%,rgba(255,255,255,.03) 100%);
}
/* 面板标题行（跨两栏） */
.health-title{
  grid-column:1 / -1;
  display:flex;align-items:center;gap:10px;
  font-size:20px;font-weight:700;color:#eaf2ff;letter-spacing:1px;
  padding-bottom:13px;margin-bottom:2px;
  border-bottom:1px solid rgba(148,180,255,.14);
}
.health-title::before{
  content:'';width:8px;height:8px;border-radius:50%;flex-shrink:0;
  background:#4D9DFF;box-shadow:0 0 12px 2px rgba(77,157,255,.8);
}
.health-title-tag{
  font-size:11px;font-weight:500;color:rgba(160,190,240,.75);letter-spacing:.5px;
  padding:2px 10px;border:1px solid rgba(120,170,255,.25);border-radius:999px;
  background:rgba(77,157,255,.08);
}
/* 左面板：人形 + 数据（深色玻璃磨砂容器） */
.health-left-panel{
  position:relative;z-index:1;
  display:grid;grid-template-columns:268px minmax(0,1fr);
  gap:6px 16px;align-items:center;
  padding:16px 16px 8px;
  background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.08);
  border-radius:16px;
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
}
/* 人形容器：相对定位 + 裁剪，供扫描线在内滑动 */
.health-figure-col{position:relative;overflow:hidden;border-radius:14px}
/* 人形：整体霓虹辉光 */
.health-figure{
  display:block;width:248px;height:463px;margin:0 auto;
  filter:drop-shadow(0 0 20px rgba(46,92,255,.32));
}
/* 首次进入动画：全绿层(hf-base)淡出 + 实际色层(hf-real)淡入，交叉淡化 = 自然过渡
   --d 为每个区域的变色延迟（JS 内联注入，头 0.35s → 脚 1.55s，配合扫描线从上到下） */
.hf-base{opacity:1}
.hf-real{opacity:0}
@keyframes hfHide{to{opacity:0}}
@keyframes hfShow{to{opacity:1}}
.hf-base{animation:hfHide 1s ease-out forwards;animation-delay:var(--d,0s)}
.hf-real{animation:hfShow 1s ease-out forwards;animation-delay:var(--d,0s)}
/* hover 提亮只作用在实际色层（避免动画期间两个路径同时响应） */
.hf-real{transition:filter .2s ease}
.hf-real:hover{filter:brightness(1.18)}
/* 体检扫描线：一条横向亮光从头顶扫到脚底，扫过的区域同时从绿色过渡到实际色 */
@keyframes hfScan{
  0%{opacity:0;transform:translateY(0)}
  10%{opacity:1}
  90%{opacity:1}
  100%{opacity:0;transform:translateY(388px)}
}
.health-scanline{
  position:absolute;left:4%;right:4%;top:0;height:76px;z-index:2;
  pointer-events:none;border-radius:16px;
  background:linear-gradient(180deg,rgba(140,210,255,0) 0%,rgba(140,210,255,.34) 46%,rgba(140,210,255,0) 100%);
  box-shadow:0 0 22px 4px rgba(120,200,255,.28);
  animation:hfScan 2.4s cubic-bezier(.45,0,.2,1) .15s forwards;
  opacity:0;
}
/* v1.3.0 真 3D 机器人（Three.js 透明画布，露出面板渐变底；3D 自带扫描线） */
.health-figure3d{
  position:relative;width:268px;height:452px;border-radius:14px;overflow:hidden;
  background:radial-gradient(320px 220px at 50% 26%, rgba(46,92,255,.10), transparent 68%);
}
.health-figure3d canvas{display:block}
/* 分区悬停/点击提示气泡（指标名 + 等级 + 数值） */
.health3d-tip{
  position:absolute;z-index:5;transform:translate(-50%,-115%);pointer-events:none;
  opacity:0;transition:opacity .18s;background:rgba(9,16,32,.95);border:1px solid #35518f;
  border-radius:8px;padding:6px 10px;font-size:12px;color:#cfe0ff;line-height:1.55;white-space:nowrap;
}
.health3d-tip.show{opacity:1}
.health3d-tip b{color:#eaf2ff;font-weight:600;margin-right:6px}
.health3d-tip i.lv{font-style:normal;border-radius:4px;padding:1px 6px;margin-right:6px;color:#0b1220;font-weight:600;font-size:11px}
.health3d-tip span{color:#8ba3cf}
/* 液态波光：白色高光缓慢上下漂移 + 呼吸，营造「液体流动」观感 */
@keyframes lfGleam{
  0%,100%{transform:translateY(0);opacity:.22}
  50%{transform:translateY(9px);opacity:.5}
}
.lf-gleam{
  transform-box:fill-box;transform-origin:center;
  animation:lfGleam 5.5s ease-in-out infinite;
}
/* v1.2.98 未来装甲机器人：面罩眼带呼吸 + 关节/天线呼吸灯 + 能量核心旋转虚线环 */
@keyframes hfBlink{0%,100%{opacity:.45}50%{opacity:1}}
.hf-blink{animation:hfBlink 2.4s ease-in-out infinite}
.hf-visor{animation:hfBlink 3.2s ease-in-out infinite}
@keyframes hfSpin{to{transform:rotate(360deg)}}
.hf-core-ring{transform-box:fill-box;transform-origin:center}
/* 能量核心环：旋转 + 全绿→实际色 交叉淡化双动画并行（animation 简写会互相覆盖，必须合并写） */
.hf-core-ring.hf-base{animation:hfSpin 6s linear infinite,hfHide 1s ease-out forwards;animation-delay:0s,var(--d,0s)}
.hf-core-ring.hf-real{animation:hfSpin 6s linear infinite,hfShow 1s ease-out forwards;animation-delay:0s,var(--d,0s)}
/* 数据行（7 行，与人体区域从上到下对应；首次进入时随扫描完成后淡入） */
@keyframes hfRise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.health-data-list{display:flex;flex-direction:column;min-width:0;animation:hfRise .8s ease-out .7s both}
.health-data-row{
  display:flex;align-items:center;gap:12px;
  padding:8px 10px;border-radius:10px;
  border:1px solid transparent;
  transition:background .18s ease,border-color .18s ease;
}
.health-data-row:hover{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.09)}
.health-data-chip{
  width:14px;height:26px;border-radius:4px;flex-shrink:0;
}
.health-data-name{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.health-data-name>span:first-child{font-size:13.5px;font-weight:600;color:#dbe7fb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.health-data-sub{font-size:11px;color:rgba(160,185,225,.75);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.health-data-pct{
  font-size:22px;font-weight:700;flex-shrink:0;
  font-variant-numeric:tabular-nums;letter-spacing:-.5px;
}
/* 右侧结论列：深色玻璃卡（首次进入时在扫描结束后逐张淡入） */
.health-right-col{position:relative;z-index:1;display:flex;flex-direction:column;gap:14px;min-width:0}
.health-card{
  position:relative;
  background:rgba(255,255,255,.045);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  border:1px solid rgba(255,255,255,.09);
  border-radius:14px;padding:16px 18px;
  box-shadow:0 6px 24px rgba(8,18,42,.25),inset 0 1px 0 rgba(255,255,255,.07);
  animation:hfRise .8s ease-out 1s both;
}
.health-card + .health-card{animation-delay:1.25s}
.health-card-head{display:flex;align-items:center;gap:9px;margin-bottom:12px;flex-wrap:wrap}
.health-card-mark{
  width:26px;height:26px;border-radius:50%;
  color:#fff;display:inline-flex;align-items:center;justify-content:center;
  font-size:15px;font-weight:700;line-height:1;flex-shrink:0;
}
.health-card-title{font-size:15px;font-weight:700;color:#eaf2ff;letter-spacing:.5px}
.health-card-sub{
  font-size:11px;color:rgba(160,190,240,.75);font-weight:500;
  padding:1px 9px;border:1px solid rgba(120,170,255,.22);border-radius:999px;
  background:rgba(77,157,255,.08);
}
.health-diag-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:9px}
.health-diag-li{display:flex;align-items:center;gap:9px;font-size:13px;line-height:1.5;color:#c9d9f2}
.health-diag-dot{
  width:7px;height:7px;border-radius:50%;flex-shrink:0;
  box-shadow:0 0 0 2px rgba(13,21,38,.85),0 0 8px rgba(120,180,255,.35);
}

/* v1.2.99 新增：「本店 vs 同牌级均值」对比表样式 */
.health-card-compare .health-card-head{margin-bottom:10px}
.health-compare-table{
  width:100%;border-collapse:collapse;table-layout:fixed;
  font-variant-numeric:tabular-nums;
}
.health-compare-table thead th{
  font-size:11px;font-weight:500;color:rgba(160,190,240,.7);
  text-align:left;padding:7px 8px;border-bottom:1px solid rgba(148,180,255,.18);
  background:rgba(255,255,255,.02);
}
.health-compare-table thead th:nth-child(2),
.health-compare-table thead th:nth-child(3),
.health-compare-table thead th:nth-child(4){text-align:right}
.health-compare-table thead th:nth-child(1){width:36%}
.health-compare-table thead th:nth-child(2),
.health-compare-table thead th:nth-child(3){width:24%}
.health-compare-table thead th:nth-child(4){width:16%}
.health-compare-table tbody td{
  padding:8px 8px;border-bottom:1px dashed rgba(148,180,255,.08);
  font-size:12.5px;color:#dbe7fb;vertical-align:middle;
}
.health-compare-table tbody tr:last-child td{border-bottom:none}
.cmp-name{color:rgba(199,217,242,.85);font-weight:500}
.cmp-self{text-align:right;font-weight:600;color:#eaf2ff}
.cmp-peer{text-align:right;color:rgba(199,217,242,.7)}
.cmp-diff{text-align:right;font-weight:600;font-size:12px;white-space:nowrap}
.cmp-diff.up{color:#6DF793}
.cmp-diff.down{color:#FF8A7A}
.cmp-diff.flat{color:rgba(160,190,240,.55);font-weight:500}
.cmp-diff.up::before{content:'↑ ';opacity:.85}
.cmp-diff.down::before{content:'↓ ';opacity:.85}

/* 手机端：对比表改为单列堆叠，差异列更显眼 */
@media (max-width:980px){
  .health-board{grid-template-columns:1fr}
  .health-left-panel{grid-template-columns:1fr;justify-items:center;gap:10px}
  .health-data-list{width:100%;max-width:440px}
  .health-figure{width:210px;height:392px}
  .health-compare-table thead th:nth-child(1){width:32%}
  .health-compare-table thead th:nth-child(2),
  .health-compare-table thead th:nth-child(3){width:26%}
  .health-compare-table thead th:nth-child(4){width:16%}
}
/* 图例卡：2×2 网格（绿=优秀 / 黄=良好 / 橙=待改进 / 红=风险），色块同款液态渐变 */
.health-legend-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 12px}
.health-legend-item2{display:flex;align-items:center;gap:9px;padding:3px 0}
.health-legend-block{
  width:15px;height:15px;border-radius:5px;display:block;flex-shrink:0;
}
.health-legend-item2 .health-legend-text{font-size:13px;font-weight:600;color:#dbe7fb}

/* ===== v1.3.0 客资管理（/customer）===== */
/* 列表意向/状态 chip（浅底彩字 1px 边框，Arco 风格） */
.c-chip{display:inline-block;padding:1px 9px;border-radius:999px;font-size:12px;line-height:20px;border:1px solid transparent;white-space:nowrap}
/* 意向：0待评估 灰 / 1无效 深灰 / 2低 橙 / 3中 黄 / 4高 红(热客) / 5成交 绿 */
.c-lv-0{color:#86909C;background:rgba(134,144,156,.10);border-color:rgba(134,144,156,.28)}
.c-lv-1{color:#6b7683;background:rgba(107,118,131,.12);border-color:rgba(107,118,131,.30)}
.c-lv-2{color:#FF7D00;background:rgba(255,125,0,.10);border-color:rgba(255,125,0,.32)}
.c-lv-3{color:#D48806;background:rgba(247,186,30,.12);border-color:rgba(247,186,30,.38)}
.c-lv-4{color:#F53F3F;background:rgba(245,63,63,.09);border-color:rgba(245,63,63,.32)}
.c-lv-5{color:#00B42A;background:rgba(0,180,42,.10);border-color:rgba(0,180,42,.32)}
/* 状态：0新客资 蓝 / 1待跟进 橙 / 2跟进中 青 / 3待报价 紫 / 4待签约 黄 / 5已成交 绿 / 6暂缓 灰 / 7流失 深灰 */
.c-st-0{color:#165DFF;background:rgba(22,93,255,.08);border-color:rgba(22,93,255,.30)}
.c-st-1{color:#FF7D00;background:rgba(255,125,0,.10);border-color:rgba(255,125,0,.32)}
.c-st-2{color:#0FC6C2;background:rgba(15,198,194,.09);border-color:rgba(15,198,194,.30)}
.c-st-3{color:#722ED1;background:rgba(114,46,209,.08);border-color:rgba(114,46,209,.28)}
.c-st-4{color:#D48806;background:rgba(247,186,30,.12);border-color:rgba(247,186,30,.38)}
.c-st-5{color:#00B42A;background:rgba(0,180,42,.10);border-color:rgba(0,180,42,.32)}
.c-st-6{color:#86909C;background:rgba(134,144,156,.10);border-color:rgba(134,144,156,.28)}
.c-st-7{color:#4E5969;background:rgba(78,89,105,.12);border-color:rgba(78,89,105,.30)}
/* 空态 */
.empty-state{padding:56px 0;text-align:center;color:var(--text3);font-size:13px}
/* 弹窗表单网格（2 列） */
.cf-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 18px;margin-bottom:14px}
.cf-field label{display:block;font-size:12px;color:var(--text2);margin-bottom:6px}
.cf-field label::after{content:''}
/* 详情抽屉 */
.cd-sec{margin-bottom:18px}
.cd-sec-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px;padding-left:8px;border-left:3px solid var(--primary,#165DFF)}
.cd-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px 18px}
.cd-kv{font-size:13px;display:flex;flex-direction:column;gap:3px;padding:8px 12px;background:rgba(22,93,255,.04);border-radius:8px}
.cd-kv span{font-size:12px;color:var(--text3)}
.cd-kv b{color:var(--text);font-weight:500;word-break:break-all}
.cd-chips{display:flex;flex-wrap:wrap;gap:8px}
.cd-chip{padding:4px 14px;border-radius:6px;font-size:12.5px;border:1px solid var(--border);background:#fff;color:var(--text2);cursor:pointer;transition:all .15s}
.cd-chip:hover{border-color:var(--primary,#165DFF);color:var(--primary,#165DFF)}
.cd-chip.on{font-weight:600}
/* 意向/状态选中态（与列表 chip 同色系加深） */
.cd-lv-0.on,.cd-st-6.on{color:#86909C;border-color:#86909C;background:rgba(134,144,156,.10)}
.cd-lv-1.on,.cd-st-7.on{color:#4E5969;border-color:#4E5969;background:rgba(78,89,105,.10)}
.cd-lv-2.on,.cd-st-1.on{color:#FF7D00;border-color:#FF7D00;background:rgba(255,125,0,.10)}
.cd-lv-3.on,.cd-st-4.on{color:#D48806;border-color:#F7BA1E;background:rgba(247,186,30,.12)}
.cd-lv-4.on{color:#F53F3F;border-color:#F53F3F;background:rgba(245,63,63,.09)}
.cd-lv-5.on,.cd-st-5.on{color:#00B42A;border-color:#00B42A;background:rgba(0,180,42,.10)}
.cd-st-0.on{color:#165DFF;border-color:#165DFF;background:rgba(22,93,255,.08)}
.cd-st-2.on{color:#0FC6C2;border-color:#0FC6C2;background:rgba(15,198,194,.09)}
.cd-st-3.on{color:#722ED1;border-color:#722ED1;background:rgba(114,46,209,.08)}
/* 跟进时间线 */
.cd-follow{position:relative;padding:0 0 14px 20px;border-left:2px solid rgba(22,93,255,.18);margin-left:6px}
.cd-follow::before{content:'';position:absolute;left:-6px;top:4px;width:10px;height:10px;border-radius:50%;background:#165DFF;box-shadow:0 0 0 3px rgba(22,93,255,.15)}
.cd-follow-head{display:flex;gap:10px;align-items:baseline;font-size:12.5px;margin-bottom:5px}
.cd-follow-head b{color:var(--text);font-size:13px}
.cd-follow-head span{color:var(--text3);font-size:12px}
.cd-follow-body{font-size:13px;color:var(--text);line-height:1.7;word-break:break-all}
.cd-follow-fb{font-size:12px;color:var(--text2);margin-top:5px}
.cd-empty{padding:20px 0;color:var(--text3);font-size:12.5px;text-align:center}
/* 操作日志 */
.cd-log{display:flex;gap:10px;align-items:center;padding:7px 0;border-bottom:1px dashed var(--border);font-size:12.5px;color:var(--text2);flex-wrap:wrap}
.cd-log-tag{display:inline-block;padding:0 8px;border-radius:4px;background:rgba(22,93,255,.08);color:var(--primary,#165DFF);font-size:12px}
.cd-log-time{color:var(--text3)}
.cd-log-note{width:100%;font-size:12px;color:var(--text3);margin-top:2px}

/* v1.3.1 档案懒加载：加载中占位（明细抽屉改接口按需拉取后使用） */
.archive-loading{display:flex;flex-direction:column;align-items:center;gap:14px;padding:70px 0;color:var(--text2);font-size:13px}
.archive-loading-spin{width:30px;height:30px;border:3px solid rgba(22,93,255,.18);border-top-color:var(--primary,#165DFF);border-radius:50%;animation:alSpin .8s linear infinite}
@keyframes alSpin{to{transform:rotate(360deg)}}

/* ===== v1.4.0 客资二期 / 同步门店 ===== */
/* 提醒横幅 */
.c-banner{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.c-banner-item{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:8px;font-size:12.5px;border:1px solid transparent;text-decoration:none}
.c-banner-item b{font-size:15px}
.c-banner-warn{color:#F53F3F;background:rgba(245,63,63,.08);border-color:rgba(245,63,63,.28)}
.c-banner-due{color:#D48806;background:rgba(247,186,30,.10);border-color:rgba(247,186,30,.32)}
.c-banner-pub{color:#165DFF;background:rgba(22,93,255,.07);border-color:rgba(22,93,255,.26)}
.c-banner-note{color:var(--text3);background:rgba(134,144,156,.08);border-color:var(--border)}
/* 范围 chip */
.c-scope-pub{color:#165DFF;background:rgba(22,93,255,.08);border-color:rgba(22,93,255,.30)}
.c-scope-priv{color:#86909C;background:rgba(134,144,156,.10);border-color:rgba(134,144,156,.28)}
/* 逾期行浅红底 */
.c-tr-overdue td{background:rgba(245,63,63,.04)}
.c-tr-overdue td:first-child{border-left:3px solid #F53F3F}
/* 协作人 chip */
.c-collab-chip{display:inline-block;padding:0 8px;border-radius:4px;font-size:12px;background:rgba(114,46,209,.08);color:#722ED1;border:1px solid rgba(114,46,209,.25)}
/* 详情抽屉协作人 */
.cd-collabs{display:flex;gap:8px;flex-wrap:wrap}
.cd-collab{display:inline-flex;align-items:center;gap:6px;padding:3px 12px;border-radius:999px;background:rgba(22,93,255,.07);border:1px solid rgba(22,93,255,.25);font-size:12.5px;color:var(--text)}
.cd-collab i{font-style:normal;cursor:pointer;color:var(--text3);font-weight:700}
.cd-collab i:hover{color:#F53F3F}
/* 数据复盘区 */
.c-stats-grid{display:grid;grid-template-columns:1fr;gap:16px;margin-top:20px}
.c-stats-col{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}
.c-stats-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px}
.c-mini-table{width:100%;border-collapse:collapse;font-size:12.5px}
.c-mini-table th,.c-mini-table td{padding:6px 8px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}
.c-mini-table th{color:var(--text3);font-weight:500;font-size:12px}
.c-mini-table td{color:var(--text2);font-variant-numeric:tabular-nums}
.c-mini-table b{color:var(--text);font-weight:500}
.c-mini-empty{padding:14px 0;text-align:center;color:var(--text3)}

/* v1.4.1 客资录入：省/市/区县三级联动（对应省的市、对应市的区县） */
.c-region-row{display:flex;gap:8px}
.c-region-row .form-control{flex:1;min-width:0}

/* v1.5.0 详情抽屉：无操作权限时意向/状态 chips 只读展示 */
.c-chip-off{cursor:default;pointer-events:none}

/* v1.7.0 按商运账号统计处理完成情况 */
.ops-own-stats{margin-bottom:var(--block-margin)}
.ops-own-stats table{width:100%;border-collapse:collapse;font-size:13px}
.ops-own-stats th,.ops-own-stats td{padding:8px 12px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}
.ops-own-stats th{color:var(--text3);font-weight:500;font-size:12px;background:var(--fill)}
.ops-own-stats td{color:var(--text2);font-variant-numeric:tabular-nums}
.ops-own-stats td b{color:var(--text)}
.ops-own-stats tr:last-child td{border-bottom:none}
.ops-own-stats tr.oos-unassigned td{color:var(--text3)}
.ops-own-stats tr.oos-unassigned td b{color:var(--text3);font-weight:400}
.ops-own-stats .tcp-bar{display:inline-block;vertical-align:middle;width:80px;margin-right:6px}
.oos-head{display:flex;align-items:baseline;gap:12px;margin-bottom:12px}
.oos-title{font-size:14px;font-weight:600;color:var(--text)}
.oos-sub{font-size:12px;color:var(--text3)}

/* v1.7.3 SSE 实时通知弹窗（右上角浮出，8秒自动消失；语音由 Web Audio API 生成） */
.sse-notify{position:fixed;top:16px;right:16px;z-index:99999;max-width:400px;cursor:pointer;transform:translateX(120%);opacity:0;transition:transform .35s cubic-bezier(.22,.68,0,1),opacity .35s}
.sse-notify.show{transform:translateX(0);opacity:1}
.sse-notify-inner{display:flex;align-items:flex-start;gap:12px;background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px 16px;box-shadow:0 8px 28px rgba(0,0,0,.1)}
.sse-notify-icon{flex-shrink:0;width:22px;height:22px;color:var(--primary-ink);margin-top:2px}
.sse-notify-body{flex:1;min-width:0}
.sse-notify-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:4px}
.sse-notify-msg{font-size:13px;color:var(--text2);line-height:1.5}
.sse-notify-close{flex-shrink:0;width:20px;height:20px;border:none;background:none;font-size:18px;color:var(--text3);cursor:pointer;line-height:1;padding:0;margin:-2px -4px 0 0}
.sse-notify-close:hover{color:var(--text)}

/* ===== v1.9.0 修改密码弹窗（Arco 风格：卡片头部图标 + 输入组 + 密码可见切换 + 强度条） ===== */
.cp-modal .modal{max-width:420px}
.cp-card{display:flex;flex-direction:column;gap:14px}
.cp-head{display:flex;align-items:center;gap:12px;padding:2px 0 4px}
.cp-head-ico{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:var(--primary-ink,#2563eb);background:rgba(59,125,255,.10);flex-shrink:0}
.cp-head-ico svg{width:22px;height:22px}
.cp-head-txt{display:flex;flex-direction:column;gap:2px}
.cp-head-txt b{font-size:15px;color:var(--text)}
.cp-head-txt span{font-size:12px;color:var(--text3)}
.cp-field{display:flex;flex-direction:column;gap:6px}
.cp-label{font-size:12px;font-weight:600;color:var(--text2)}
.cp-input{position:relative;display:flex;align-items:center}
.cp-input input{width:100%;height:40px;padding:0 38px 0 40px;border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--text);background:var(--card-bg,#fff);transition:border-color .15s,box-shadow .15s;box-sizing:border-box}
.cp-input input:focus{outline:none;border-color:var(--primary,#3b7dff);box-shadow:0 0 0 3px rgba(59,125,255,.12)}
.cp-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text3);pointer-events:none;display:flex}
.cp-icon svg{width:16px;height:16px}
.cp-eye{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:26px;height:26px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text3);transition:background .15s,color .15s}
.cp-eye:hover{background:var(--fill-l,#f2f3f5);color:var(--text2)}
.cp-eye:after{content:'';width:16px;height:16px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8'%3E%3Cpath d='M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8'%3E%3Cpath d='M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") center/contain no-repeat}
.cp-eye.on{color:var(--primary-ink,#2563eb)}
.cp-hint{display:flex;align-items:center;gap:8px;min-height:16px;font-size:11px;color:var(--text3)}
.cp-bar{display:inline-block;width:60px;height:4px;border-radius:2px;background:var(--fill-l,#f2f3f5);overflow:hidden;vertical-align:middle}
.cp-strength-txt{font-size:11px}
.cp-match{font-size:11px}
.cp-match.ok{color:#00b42a}
.cp-match.bad{color:#f53f3f}

/* v1.9.70 表格长文本截断（用户反馈：小屏笔记本下长说明会把一行报销撑成刷屏）
   用法：td/div 加 class="td-clamp"（两行省略）或 "td-clamp td-clamp1"（单行），配合 title 悬停看全文 */
.td-clamp{display:-webkit-box!important;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;word-break:break-all;line-height:1.6;max-width:100%}
.td-clamp1{-webkit-line-clamp:1}

/* v1.9.85 表头排序链接（Arco 风细箭头）：默认淡灰双箭头，hover/选中主色单箭头，transition 平滑 */
.th-sort{position:relative;display:inline-block;padding-right:18px;color:var(--text2);font-weight:500;text-decoration:none;cursor:pointer;user-select:none;white-space:nowrap;transition:color .15s}
.th-sort::after{content:'';position:absolute;right:0;top:50%;transform:translateY(-50%);width:8px;height:16px;opacity:.5;transition:opacity .15s;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 16'%3E%3Cpath d='M4 2.5L7.2 6H.8L4 2.5z' fill='%2386909C'/%3E%3Cpath d='M4 13.5L.8 10h6.4L4 13.5z' fill='%2386909C'/%3E%3C/svg%3E");
  background-size:8px 16px;background-repeat:no-repeat}
.th-sort:hover{color:var(--primary-ink,#2563eb)}
.th-sort:hover::after{opacity:1}
.th-sort.on{color:var(--primary-ink,#2563eb);font-weight:600}
.th-sort.on::after{opacity:1}
.th-sort.on.desc::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 16'%3E%3Cpath d='M4 13.5L.8 10h6.4L4 13.5z' fill='%232563eb'/%3E%3C/svg%3E")}
.th-sort.on.asc::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 16'%3E%3Cpath d='M4 2.5L7.2 6H.8L4 2.5z' fill='%232563eb'/%3E%3C/svg%3E")}

/* v1.9.91 地区趋势：未来感深色科技面板（核销 GMV 升降地图） */
.rt-panel{background:linear-gradient(160deg,#0a1628 0%,#0d1f3d 55%,#101f3c 100%);border:1px solid rgba(96,165,250,.22);border-radius:14px;padding:18px 20px 22px;position:relative;overflow:hidden;box-shadow:0 10px 40px rgba(4,10,26,.5)}
.rt-panel::before{content:'';position:absolute;inset:0;background-image:radial-gradient(rgba(96,165,250,.07) 1px,transparent 1px);background-size:26px 26px;pointer-events:none}
.rt-kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:12px;position:relative}
.rt-kpi{background:rgba(255,255,255,.035);border:1px solid rgba(96,165,250,.18);border-radius:10px;padding:12px 14px}
.rt-kpi-label{font-size:12px;color:#8fa3c8;margin-bottom:4px}
.rt-kpi-value{font-size:22px;font-weight:700;color:#e6eeff;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.rt-kpi-sub{font-size:11px;color:#5d7194;margin-top:3px}
.rt-legend{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-bottom:12px;color:#9fb2d8;font-size:12.5px;position:relative}
.rt-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:middle}
.rt-map{position:relative}
.rt-bread{display:flex;gap:8px;align-items:center;margin-bottom:10px;position:relative;z-index:2}
.rt-bread-item{font-size:13px;color:#8fa3c8;padding:3px 10px;border-radius:6px}
.rt-bread-item.on{color:#60a5fa;background:rgba(96,165,250,.12);border:1px solid rgba(96,165,250,.3)}
.rt-bread-item.link{color:#8fa3c8;cursor:pointer;text-decoration:underline}
.rt-bread-item.link:hover{color:#60a5fa}
.rt-bread-sep{color:#41507a}
.rt-svg{width:100%;height:auto;display:block}
.rt-region path{transition:filter .18s,opacity .18s}
.rt-region:hover path{opacity:.82}
.rt-region.drill{cursor:pointer}
.rt-label{fill:#c6d4f2;font-weight:600;pointer-events:none;text-shadow:0 1px 4px rgba(4,10,26,.9)}
.rt-pill{font-weight:700;pointer-events:none}
/* v1.9.93 区域合作中商家数小字 */
.rt-stores{fill:#7c8db5;pointer-events:none;text-shadow:0 1px 3px rgba(4,10,26,.9)}
/* v1.9.92 调换：增长=青绿、下降=红 */
.rt-pill.up{fill:#6ee7b7}
.rt-pill.down{fill:#ff8a94}
.rt-pill.new{fill:#93c5fd}
.rt-pill.flat{fill:#94a3b8}
.rt-loading{padding:90px 0;text-align:center;color:#8fa3c8;font-size:14px;animation:rtPulse 1.4s ease-in-out infinite}
@keyframes rtPulse{0%,100%{opacity:.45}50%{opacity:1}}

/* v1.9.94 权限矩阵板块分组标题行 */
tr.pp-group td{background:var(--fill-l,#f2f3f5);font-weight:700;font-size:12.5px;color:var(--text1,#1d2129);padding:7px 12px;letter-spacing:.02em}
tr.pp-group td::before{content:'▍';color:var(--primary-ink,#2563eb);margin-right:6px}

/* v2.2 行内「⋯」更多菜单 */
.op-more{position:relative;display:inline-block}
.op-more__btn{min-width:34px;padding:6px 10px;letter-spacing:1px}
.op-more__menu{
  position:absolute;top:calc(100% + 4px);right:0;z-index:120;
  min-width:150px;max-width:220px;
  background:var(--card,#fff);border:1px solid var(--border-l,#e5e6eb);
  border-radius:10px;box-shadow:0 8px 28px rgba(15,23,42,.12);
  padding:6px;display:none;
}
.op-more__menu--open{display:block}
.op-more__menu .btn{display:block;width:100%;margin:2px 0;text-align:left;border:none;background:transparent;padding:7px 10px;border-radius:6px;font-size:12.5px;color:var(--text1,#1d2129)}
.op-more__menu .btn:hover{background:var(--fill-l,#f2f3f5)}
.op-more__menu .btn-danger{color:var(--danger,#c0243b)}
.op-more__menu .btn-danger:hover{background:rgba(192,36,59,.07)}
/* v2.3.76 三点菜单浮层：打开时由 JS 移到 <body> 并按按钮位置用 fixed 定位。
   原因：菜单原本是 .op-more（position:relative）内的 absolute，而表格容器
        .table-wrap 同时有 overflow:auto 和 backdrop-filter ⇒ 既被 overflow 裁剪
        （菜单超出容器底部就被切掉，必须滚动才露出来），
        backdrop-filter 又会让容器成为 fixed 后代的包含块 ⇒ 单纯改 fixed 也定位不对。
   挂到 body 后完全脱离这些裁剪/包含块上下文，三种页面（合伙/渠道/返佣记录）统一生效。
   z-index 990：低于 .modal-overlay(1000)、高于普通内容，弹窗打开时不会压住弹窗。 */
.op-more__menu--float{
  position:fixed;top:0;left:0;right:auto;
  z-index:990;
  max-height:70vh;overflow-y:auto;
}
/* 表格信息密度优化：零值灰显、ID 缩略行 */
.muted-0{color:var(--text3,#9ca3af)!important}
.th-help{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;border:1px solid var(--border-l,#c9cdd4);color:var(--text2,#4e5969);font-size:10px;cursor:help;margin-left:4px;vertical-align:middle;font-style:normal}
