/* 集装袋智慧生产系统 — 统一 Design Token（P2 商用化 / D6 改版 v20261107n1394）
   单一真源；深浅双主题 + 三套租户主题 overlay；chrome38 安全（无 dvh / grid / inset / backdrop-filter）。
   引用方式：<link rel="stylesheet" href="/css/tokens.css?v=v20261107n1394"> 后所有组件只用 var(--*)。

   ★ chrome38 兼容说明：Android 5/6/7 WebView（Chromium 37~62）不支持 CSS 自定义属性，
     本文件的 :root 定义与 .uni-* / :focus-visible 规则在老内核上会被整块忽略。因本轮
     页面只接线、未使用 .uni-*、且未替换任何硬编码色值，故零视觉副作用（真实 WebView
     版本待现场 probe-ua.js 实测，勿由无头浏览器外推）。
   ★ 后续若页面要消费 token，必须写两条独立声明：「字面色值在前 + var(--x) 在后，不带
     fallback」。单条 var(--x, 字面值) 在 chrome38 是整条声明被丢弃，fallback 不会生效；
     布局必需属性（display/position/width/height/top,left,right,bottom）禁用 var()。
   ★ 本文件只定义变量与 .uni-* 组件，不覆盖任何页面既有变量（招聘页 --primary/--navBg
     由 applyTheme() 用内联 style 注入，优先级高于 [data-theme] 规则，二者不冲突）。
   ★ 选择器一律用 :root[data-theme="..."] 而非裸 [data-theme="..."]，避免误命中
     设置页的 <label class="theme-preview" data-theme="dark"> 色卡元素。
*/
:root{
  --brand:#2563EB; --brand-hover:#1D4ED8; --brand-soft:#E6F1FB;
  --accent:#22D3EE; --accent-soft:#E1F5EE;
  --ok:#16A34A; --warn:#F59E0B; --danger:#DC2626; --info:#0EA5E9;
  --bg:#F5F7FA; --surface:#FFFFFF; --surface-2:#EEF3FB;
  --text:#1E293B; --text-muted:#64748B; --border:#E2E8F0;
  --fs-1:12px; --fs-2:14px; --fs-3:16px; --fs-4:20px; --fs-5:28px; --fs-6:40px;
  --lh:1.5; --fw-regular:400; --fw-medium:500; --fw-bold:700;
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-6:24px; --sp-8:32px;
  --radius-sm:8px; --radius-md:12px; --radius-lg:16px;
  --shadow-card:0 2px 8px rgba(0,0,0,.06);
  --font-cn:"SimHei","黑体","Heiti SC","Microsoft YaHei","PingFang SC",Arial,sans-serif;
  --font-num:Arial,"Helvetica Neue",sans-serif;
  /* D6 新增：可访问性与触控基线 */
  --focus-ring:#2563EB;
  --focus-ring-width:2px;
  --focus-ring-offset:2px;
  --touch-min:44px;
  --transition-fast:150ms ease;
}
:root[data-theme="dark"]{
  --bg:#050E24; --surface:#0F1E3E; --surface-2:#132749;
  --text:#DCE8FF; --text-muted:#8FA8CF; --border:rgba(80,140,220,.24);
  --brand-soft:rgba(37,99,235,.20); --accent-soft:rgba(34,211,238,.14);
  --shadow-card:0 2px 12px rgba(0,0,0,.35);
  --focus-ring:#7FB0FF;
}

/* ---- 租户主题 overlay：色值来自 DB recruitment_templates.config（2026-11-07 只读核实） ----
   仅覆盖 token 变量，不下发页面私有变量；招聘页 applyTheme() 注入的 --primary 等保持独立。 */
:root[data-theme="tech-blue"]{
  --brand:#2563EB; --brand-hover:#1E40AF; --brand-soft:#EFF6FF;
  --accent:#3B82F6; --bg:#EFF6FF; --surface-2:#DBEAFE; --focus-ring:#2563EB;
}
:root[data-theme="industrial-orange"]{
  --brand:#EA580C; --brand-hover:#C2410C; --brand-soft:#FFF7ED;
  --accent:#F97316; --bg:#FFF7ED; --surface-2:#FFEDD5; --focus-ring:#EA580C;
}
:root[data-theme="warm-green"]{
  --brand:#16A34A; --brand-hover:#15803D; --brand-soft:#F0FDF4;
  --accent:#22C55E; --bg:#F0FDF4; --surface-2:#DCFCE7; --focus-ring:#16A34A;
}

/* ---- 组件基线（只影响显式使用 .uni-* 的元素，接入本文件不会改变既有页面外观） ---- */
.uni-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:var(--sp-4)}
.uni-btn{font-family:var(--font-cn);font-size:var(--fs-2);font-weight:var(--fw-medium);color:#fff;background:var(--brand);border:1px solid var(--brand);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-4);min-height:var(--touch-min);cursor:pointer;transition:background var(--transition-fast)}
.uni-btn:hover{background:var(--brand-hover)}
.uni-num{font-family:var(--font-num);font-variant-numeric:tabular-nums}
.uni-table{width:100%;border-collapse:collapse;font-size:var(--fs-2);color:var(--text)}
.uni-table th{background:var(--surface-2);text-align:left;padding:var(--sp-2) var(--sp-3);font-weight:var(--fw-medium)}
.uni-table td{padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--border)}
.uni-badge{display:inline-block;font-size:var(--fs-1);padding:2px 8px;border-radius:999px;background:var(--brand-soft);color:var(--brand)}
.uni-badge.ok{background:rgba(22,163,74,.14);color:var(--ok)}
.uni-badge.warn{background:rgba(245,158,11,.16);color:var(--warn)}
.uni-badge.danger{background:rgba(220,38,38,.14);color:var(--danger)}

/* D6 可访问性：键盘焦点环。chrome38 不识别 :focus-visible 会整条忽略，无副作用。 */
:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}

/* ============================================================
   v2 追加块（P1 门面批 v20261107n1402）— 来自 01-design-system.md §6.1 / §4
   原则：现有上方 75 行零改动；本块全部为「字面值在前 + var() 在后」双声明，
   chrome38 取浅色字面值获得完整样式，现代浏览器取 token。
   老内核永远渲染浅色主题（无副作用）；--up/--down 涨跌铁律不受租户换肤影响。
   ============================================================ */

/* ---- A/B/C/D 变量追加（§6.1；现有变量一律保留原值，以下全部为新增） ---- */
:root{
  /* A. 品牌色阶与图表调色板 */
  --blue-50:#EFF6FF; --blue-100:#DBEAFE; --blue-200:#BFDBFE; --blue-300:#93C5FD;
  --blue-400:#60A5FA; --blue-500:#3B82F6; --blue-700:#1D4ED8; --blue-900:#0F3D73;
  --brand-active:#185FA5; --brand-deep:#185FA5;
  --chart-1:#2563EB; --chart-2:#F59E0B; --chart-3:#10B981; --chart-4:#8B5CF6;
  --chart-5:#EC4899; --chart-6:#0EA5E9; --chart-7:#84CC16; --chart-8:#64748B;
  --chart-9:#EF4444; --chart-10:#14B8A6;
  --up:#DC2626; --down:#16A34A;              /* 涨红/跌绿铁律，任何主题不反转 */
  /* B. 语义色三件套 */
  --ok-text:#15803D; --ok-bg:#DCFCE7;
  --warn-text:#B45309; --warn-bg:#FEF3C7;
  --danger-text:#B91C1C; --danger-bg:#FEE2E2;
  --info-text:#0369A1; --info-bg:#E0F2FE;
  /* C. 中性与表面 */
  --neutral-50:#F8FAFC; --neutral-100:#F1F5F9; --neutral-200:#E2E8F0; --neutral-300:#CBD5E1;
  --neutral-400:#94A3B8; --neutral-500:#64748B; --neutral-600:#475569; --neutral-700:#334155;
  --neutral-800:#1E293B; --neutral-900:#0F172A;
  --surface-3:#E2E8F0; --text-2:#475569; --text-disabled:#94A3B8; --text-inverse:#FFFFFF;
  --border-strong:#CBD5E1; --table-zebra:#F8FAFC; --table-hover:#EFF6FF; --mask:rgba(15,23,42,.45);
  /* D. 字号/行高/间距/圆角/阴影/层级（像素自明） */
  --fs-12:12px; --fs-13:13px; --fs-14:14px; --fs-16:16px; --fs-20:20px; --fs-28:28px; --fs-40:40px;
  --lh-tight:1.2; --lh-snug:1.35; --lh-loose:1.7;
  --sp-5:20px; --sp-10:40px; --sp-12:48px;
  --radius-full:999px;
  --shadow-1:0 2px 8px rgba(15,23,42,.06);
  --shadow-2:0 8px 24px rgba(15,23,42,.12);
  --shadow-3:0 16px 48px rgba(15,23,42,.20);
  --z-dropdown:100; --z-drawer:200; --z-modal:300; --z-toast:400;
}
/* 暗色主题对 v2 新变量的覆盖（§1.5 暗色列；chrome38 永远浅色，无副作用） */
:root[data-theme="dark"]{
  --blue-50:rgba(96,165,250,.14); --blue-100:rgba(96,165,250,.18);
  --brand-active:#2563EB; --brand-deep:#123B66;
  --chart-1:#60A5FA; --chart-2:#FBBF24; --chart-3:#34D399; --chart-4:#A78BFA;
  --chart-5:#F472B6; --chart-6:#38BDF8; --chart-7:#A3E635; --chart-8:#94A3B8;
  --chart-9:#F87171; --chart-10:#2DD4BF;
  --up:#F87171; --down:#4ADE80;
  --ok-text:#4ADE80; --ok-bg:rgba(74,222,128,.14);
  --warn-text:#FBBF24; --warn-bg:rgba(251,191,36,.14);
  --danger-text:#F87171; --danger-bg:rgba(248,113,113,.14);
  --info-text:#38BDF8; --info-bg:rgba(56,189,248,.14);
  --surface-3:#1A3158; --text-2:#B4C7E8; --text-disabled:#5B729B;
  --border-strong:rgba(80,140,220,.40);
  --table-zebra:#132749; --table-hover:rgba(37,99,235,.12); --mask:rgba(2,8,20,.65);
  --shadow-1:0 2px 12px rgba(0,0,0,.35);
  --shadow-2:0 8px 28px rgba(0,0,0,.45);
  --shadow-3:0 16px 56px rgba(0,0,0,.60);
}

/* ---- §4 组件 v2（双声明版；覆盖上方老 .uni-* 裸 var 规则，chrome38 获得完整浅色样式） ---- */

/* ===== 4.1 按钮 ===== */
.uni-btn{
  display:inline-block;
  min-height:44px;
  padding:0 16px; padding:0 var(--sp-4);
  font-family:"SimHei","黑体","Heiti SC","Microsoft YaHei","PingFang SC",Arial,sans-serif;
  font-family:var(--font-cn);
  font-size:14px; font-size:var(--fs-14);
  font-weight:500; font-weight:var(--fw-medium);
  line-height:42px;
  text-align:center; white-space:nowrap; cursor:pointer;
  color:#FFFFFF; color:var(--text-inverse);
  background:#2563EB; background:var(--brand);
  border:1px solid #2563EB; border:1px solid var(--brand);
  border-radius:8px; border-radius:var(--radius-sm);
  -webkit-transition:background .15s ease; transition:background .15s ease;
}
.uni-btn:hover,.uni-btn:focus{background:#1D4ED8;background:var(--brand-hover)}
.uni-btn:active{background:#185FA5;background:var(--brand-active)}
.uni-btn[disabled],.uni-btn.is-disabled{opacity:.45;cursor:not-allowed}
.uni-btn--secondary{
  color:#2563EB; color:var(--brand);
  background:#FFFFFF; background:var(--surface);
  border:1px solid #2563EB; border:1px solid var(--brand);
}
.uni-btn--secondary:hover,.uni-btn--secondary:focus{
  color:#1D4ED8;color:var(--brand-hover);
  background:#EFF6FF;background:var(--brand-soft);
}
.uni-btn--secondary:active{color:#185FA5;color:var(--brand-active);background:#DBEAFE}
.uni-btn--danger{
  color:#FFFFFF;color:var(--text-inverse);
  background:#DC2626;background:var(--danger);
  border:1px solid #DC2626;border:1px solid var(--danger);
}
.uni-btn--danger:hover,.uni-btn--danger:focus{background:#B91C1C}
.uni-btn--danger:active{background:#991B1B}
.uni-btn--ghost{
  color:#475569;color:var(--text-2);
  background:transparent;
  border:1px solid transparent;
}
.uni-btn--ghost:hover,.uni-btn--ghost:focus{color:#2563EB;color:var(--brand);background:#EFF6FF;background:var(--brand-soft)}
.uni-btn--ghost:active{color:#185FA5;color:var(--brand-active)}
.uni-btn--sm{min-height:32px;line-height:30px;padding:0 12px;padding:0 var(--sp-3);font-size:13px;font-size:var(--fs-13)}

/* ===== 4.2 输入框与下拉 ===== */
.uni-field{margin-bottom:16px;margin-bottom:var(--sp-4)}
.uni-label{display:block;margin-bottom:6px;font-size:13px;font-size:var(--fs-13);color:#475569;color:var(--text-2)}
.uni-input{
  width:100%;
  height:40px;
  -webkit-box-sizing:border-box; box-sizing:border-box;
  padding:0 12px; padding:0 var(--sp-3);
  font-family:"SimHei","黑体","Heiti SC","Microsoft YaHei","PingFang SC",Arial,sans-serif;
  font-family:var(--font-cn);
  font-size:14px; font-size:var(--fs-14);
  color:#1E293B; color:var(--text);
  background:#FFFFFF; background:var(--surface);
  border:1px solid #E2E8F0; border:1px solid var(--border);
  border-radius:8px; border-radius:var(--radius-sm);
  outline:none;
  -webkit-transition:border-color .15s ease; transition:border-color .15s ease;
}
.uni-input:hover{border-color:#CBD5E1;border-color:var(--border-strong)}
.uni-input:focus{border-color:#2563EB;border-color:var(--brand);-webkit-box-shadow:0 0 0 2px #E6F1FB;box-shadow:0 0 0 2px #E6F1FB;-webkit-box-shadow:0 0 0 2px var(--brand-soft);box-shadow:0 0 0 2px var(--brand-soft)}
.uni-input::placeholder{color:#94A3B8;color:var(--text-disabled)}
.uni-input[disabled]{background:#F1F5F9;background:var(--surface-2);color:#94A3B8;color:var(--text-disabled);cursor:not-allowed}
.uni-input[readonly]{background:#F8FAFC;background:var(--table-zebra);cursor:default}
.uni-input.is-error,.uni-input.is-error:focus{border-color:#DC2626;border-color:var(--danger);-webkit-box-shadow:0 0 0 2px #FEE2E2;box-shadow:0 0 0 2px #FEE2E2;-webkit-box-shadow:0 0 0 2px var(--danger-bg);box-shadow:0 0 0 2px var(--danger-bg)}
.uni-error-text{margin-top:4px;margin-top:var(--sp-1);font-size:12px;font-size:var(--fs-12);color:#DC2626;color:var(--danger)}
.uni-select{position:relative;display:inline-block}
.uni-select select{
  height:40px;
  -webkit-box-sizing:border-box; box-sizing:border-box;
  padding:0 32px 0 12px;
  font-family:"SimHei","黑体","Heiti SC","Microsoft YaHei","PingFang SC",Arial,sans-serif;
  font-family:var(--font-cn);
  font-size:14px; font-size:var(--fs-14);
  color:#1E293B; color:var(--text);
  background:#FFFFFF; background:var(--surface);
  border:1px solid #E2E8F0; border:1px solid var(--border);
  border-radius:8px; border-radius:var(--radius-sm);
  cursor:pointer;
  -webkit-appearance:none; appearance:none;
}
.uni-select select:focus{border-color:#2563EB;border-color:var(--brand)}
.uni-select::after{
  content:""; position:absolute;
  right:12px; top:50%; margin-top:-2px;
  border-left:4px solid transparent; border-right:4px solid transparent;
  border-top:5px solid #64748B; border-top:5px solid var(--text-muted);
  pointer-events:none;
}

/* ===== 4.3 卡片化表格 ===== */
.uni-table-wrap{
  background:#FFFFFF; background:var(--surface);
  border:1px solid #E2E8F0; border:1px solid var(--border);
  border-radius:12px; border-radius:var(--radius-md);
  -webkit-box-shadow:0 2px 8px rgba(15,23,42,.06); box-shadow:0 2px 8px rgba(15,23,42,.06);
  -webkit-box-shadow:var(--shadow-1); box-shadow:var(--shadow-1);
  overflow:hidden;
  overflow-x:auto;
}
.uni-table{width:100%;border-collapse:collapse;font-size:14px;font-size:var(--fs-14);color:#1E293B;color:var(--text)}
.uni-table th{
  background:#EEF3FB; background:var(--surface-2);
  text-align:left; font-weight:500; font-weight:var(--fw-medium);
  padding:12px 16px; padding:var(--sp-3) var(--sp-4);
  border-bottom:1px solid #E2E8F0; border-bottom:1px solid var(--border);
  white-space:nowrap; color:#475569; color:var(--text-2);
}
.uni-table td{
  padding:12px 16px; padding:var(--sp-3) var(--sp-4);
  border-bottom:1px solid #E2E8F0; border-bottom:1px solid var(--border);
}
.uni-table tbody tr:last-child td{border-bottom:none}
.uni-table tbody tr:nth-child(even){background:#F8FAFC;background:var(--table-zebra)}
.uni-table tbody tr:hover{background:#EFF6FF;background:var(--table-hover)}
.uni-table .num{font-family:Arial,"Helvetica Neue",sans-serif;font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;font-weight:var(--fw-bold)}
.uni-table--compact{font-size:13px;font-size:var(--fs-13)}
.uni-table--compact th{padding:6px 12px;padding:var(--sp-1) var(--sp-2)}
.uni-table--compact td{padding:6px 12px;padding:var(--sp-1) var(--sp-2)}
.uni-empty{padding:40px 16px;padding:var(--sp-10) var(--sp-4);text-align:center;color:#64748B;color:var(--text-muted);font-size:14px;font-size:var(--fs-14)}
.uni-empty svg{display:block;width:48px;height:48px;margin:0 auto 12px;margin:0 auto var(--sp-3);opacity:.45}
.uni-empty .uni-btn{margin-top:16px;margin-top:var(--sp-4)}
.uni-skel{
  background:#EEF3FB; background:var(--surface-2);
  background-image:linear-gradient(90deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.65) 50%,rgba(255,255,255,0) 100%);
  background-size:200% 100%;
  border-radius:8px; border-radius:var(--radius-sm);
  -webkit-animation:uni-skel 1.4s ease infinite; animation:uni-skel 1.4s ease infinite;
}
@-webkit-keyframes uni-skel{0%{background-position:120% 0}100%{background-position:-120% 0}}
@keyframes uni-skel{0%{background-position:120% 0}100%{background-position:-120% 0}}
.uni-skel--text{height:14px;margin-bottom:8px;margin-bottom:var(--sp-2)}
.uni-skel--row{height:40px;margin-bottom:12px;margin-bottom:var(--sp-3)}

/* ===== 4.4 标签徽章 ===== */
.uni-badge{
  display:inline-block;
  padding:2px 8px;
  font-size:12px; font-size:var(--fs-12);
  line-height:18px; white-space:nowrap;
  border-radius:999px; border-radius:var(--radius-full);
  background:#E6F1FB; background:var(--brand-soft);
  color:#2563EB; color:var(--brand);
}
.uni-badge--ok{background:#DCFCE7;background:var(--ok-bg);color:#15803D;color:var(--ok-text)}
.uni-badge--warn{background:#FEF3C7;background:var(--warn-bg);color:#B45309;color:var(--warn-text)}
.uni-badge--danger{background:#FEE2E2;background:var(--danger-bg);color:#B91C1C;color:var(--danger-text)}
.uni-badge--info{background:#E0F2FE;background:var(--info-bg);color:#0369A1;color:var(--info-text)}
.uni-badge.ok{background:#DCFCE7;background:var(--ok-bg);color:#16A34A;color:var(--ok)}
.uni-badge.warn{background:#FEF3C7;background:var(--warn-bg);color:#B45309;color:var(--warn-text)}
.uni-badge.danger{background:#FEE2E2;background:var(--danger-bg);color:#DC2626;color:var(--danger)}
.uni-badge--up{background:rgba(220,38,38,.10);color:#DC2626;color:var(--up)}
.uni-badge--down{background:rgba(22,163,74,.10);color:#16A34A;color:var(--down)}

/* ===== 4.5 弹窗与抽屉 ===== */
.uni-mask{
  position:fixed; left:0; top:0; right:0; bottom:0;
  background:rgba(15,23,42,.45); background:var(--mask);
  z-index:300; z-index:var(--z-modal);
}
.uni-modal{
  position:fixed; left:50%; top:50%;
  width:480px; max-width:92%;
  -webkit-box-sizing:border-box; box-sizing:border-box;
  -webkit-transform:translate(-50%,-50%); transform:translate(-50%,-50%);
  background:#FFFFFF; background:var(--surface);
  border-radius:16px; border-radius:var(--radius-lg);
  -webkit-box-shadow:0 16px 48px rgba(15,23,42,.20); box-shadow:0 16px 48px rgba(15,23,42,.20);
  -webkit-box-shadow:var(--shadow-3); box-shadow:var(--shadow-3);
}
.uni-modal__head{
  padding:16px 20px; padding:var(--sp-4) var(--sp-5);
  border-bottom:1px solid #E2E8F0; border-bottom:1px solid var(--border);
  font-size:20px; font-size:var(--fs-20);
  font-weight:700; font-weight:var(--fw-bold);
  color:#1E293B; color:var(--text);
}
.uni-modal__body{padding:20px;padding:var(--sp-5);max-height:60%;overflow-y:auto}
.uni-modal__foot{
  padding:12px 20px; padding:var(--sp-3) var(--sp-5);
  border-top:1px solid #E2E8F0; border-top:1px solid var(--border);
  text-align:right;
}
.uni-modal__foot .uni-btn{margin-left:12px;margin-left:var(--sp-3)}
.uni-drawer{
  position:fixed; right:0; top:0; bottom:0;
  width:420px; max-width:92%;
  -webkit-box-sizing:border-box; box-sizing:border-box;
  background:#FFFFFF; background:var(--surface);
  -webkit-box-shadow:0 16px 48px rgba(15,23,42,.20); box-shadow:0 16px 48px rgba(15,23,42,.20);
  -webkit-box-shadow:var(--shadow-3); box-shadow:var(--shadow-3);
  z-index:200; z-index:var(--z-drawer);
  -webkit-transform:translateX(100%); transform:translateX(100%);
  -webkit-transition:-webkit-transform .25s ease; transition:transform .25s ease;
}
.uni-drawer.is-open{-webkit-transform:translateX(0);transform:translateX(0)}
.uni-drawer__head{
  padding:16px 20px; padding:var(--sp-4) var(--sp-5);
  border-bottom:1px solid #E2E8F0; border-bottom:1px solid var(--border);
  font-size:20px; font-size:var(--fs-20);
  font-weight:700; font-weight:var(--fw-bold);
}
.uni-drawer__body{padding:20px;padding:var(--sp-5);overflow-y:auto}

/* ===== 4.6 侧边导航 / 面包屑 / 页签 ===== */
.uni-nav{
  position:fixed; left:0; top:0; bottom:0;
  width:220px;
  background:#185FA5;
  background-image:linear-gradient(180deg,#185FA5 0%,#0F3D73 100%);
  color:#FFFFFF;
  overflow-y:auto;
}
.uni-nav__logo{padding:20px 16px;padding:var(--sp-5) var(--sp-4);font-size:20px;font-size:var(--fs-20);font-weight:700;font-weight:var(--fw-bold);color:#FFFFFF}
.uni-nav__group{padding:12px 16px 4px;font-size:12px;font-size:var(--fs-12);color:rgba(255,255,255,.55)}
.uni-nav__item{
  display:block;
  padding:12px 16px; padding:var(--sp-3) var(--sp-4);
  color:rgba(255,255,255,.85);
  font-size:14px; font-size:var(--fs-14);
  border-left:3px solid transparent;
  text-decoration:none;
}
.uni-nav__item:hover{background:rgba(255,255,255,.08);color:#FFFFFF}
.uni-nav__item.is-active{
  background:rgba(255,255,255,.12);
  border-left-color:#22D3EE; border-left-color:var(--accent);
  color:#FFFFFF; font-weight:700; font-weight:var(--fw-bold);
}
.uni-nav__item svg{width:18px;height:18px;vertical-align:-4px;margin-right:8px;margin-right:var(--sp-2)}
.uni-crumb{font-size:13px;font-size:var(--fs-13);color:#64748B;color:var(--text-muted)}
.uni-crumb a{color:#2563EB;color:var(--brand);text-decoration:none}
.uni-crumb a:hover{text-decoration:underline}
.uni-crumb .sep{margin:0 8px;margin:0 var(--sp-2);color:#CBD5E1;color:var(--border-strong)}
.uni-tabs{border-bottom:1px solid #E2E8F0;border-bottom:1px solid var(--border)}
.uni-tab{
  display:inline-block;
  padding:10px 16px; padding:var(--sp-2) var(--sp-4);
  font-size:14px; font-size:var(--fs-14);
  color:#475569; color:var(--text-2);
  background:transparent; border:none; cursor:pointer;
  border-bottom:2px solid transparent;
  margin-bottom:-1px;
}
.uni-tab:hover{color:#2563EB;color:var(--brand)}
.uni-tab.is-active{
  color:#2563EB; color:var(--brand);
  border-bottom-color:#2563EB; border-bottom-color:var(--brand);
  font-weight:700; font-weight:var(--fw-bold);
}

/* ===== 4.7 KPI 指标卡 ===== */
.uni-kpi{
  -webkit-box-sizing:border-box; box-sizing:border-box;
  background:#FFFFFF; background:var(--surface);
  border:1px solid #E2E8F0; border:1px solid var(--border);
  border-radius:12px; border-radius:var(--radius-md);
  -webkit-box-shadow:0 2px 8px rgba(15,23,42,.06); box-shadow:0 2px 8px rgba(15,23,42,.06);
  -webkit-box-shadow:var(--shadow-1); box-shadow:var(--shadow-1);
  padding:16px; padding:var(--sp-4);
}
.uni-kpi:hover{
  -webkit-box-shadow:0 8px 24px rgba(15,23,42,.12); box-shadow:0 8px 24px rgba(15,23,42,.12);
  -webkit-box-shadow:var(--shadow-2); box-shadow:var(--shadow-2);
}
.uni-kpi__label{font-size:12px;font-size:var(--fs-12);color:#64748B;color:var(--text-muted);margin-bottom:8px;margin-bottom:var(--sp-2)}
.uni-kpi__value{line-height:1.2;line-height:var(--lh-tight)}
.uni-kpi__num{
  font-family:Arial,"Helvetica Neue",sans-serif; font-family:var(--font-num);
  font-variant-numeric:tabular-nums;
  font-size:40px; font-size:var(--fs-40);
  font-weight:700; font-weight:var(--fw-bold);
  color:#1E293B; color:var(--text);
}
.uni-kpi__unit{font-size:14px;font-size:var(--fs-14);color:#64748B;color:var(--text-muted);margin-left:4px;margin-left:var(--sp-1)}
.uni-kpi__meta{margin-top:8px;margin-top:var(--sp-2);font-size:12px;font-size:var(--fs-12)}
.uni-kpi__delta{font-family:Arial,"Helvetica Neue",sans-serif;font-family:var(--font-num);font-weight:700;font-weight:var(--fw-bold)}
.uni-kpi__delta--up{color:#DC2626;color:var(--up)}
.uni-kpi__delta--down{color:#16A34A;color:var(--down)}
.uni-kpi__note{color:#64748B;color:var(--text-muted);margin-left:4px;margin-left:var(--sp-1)}
.uni-kpi__spark{display:block;width:100%;height:36px;margin-top:12px;margin-top:var(--sp-3)}

/* ===== 4.8 图表容器卡 ===== */
.uni-chart-card{
  -webkit-box-sizing:border-box; box-sizing:border-box;
  background:#FFFFFF; background:var(--surface);
  border:1px solid #E2E8F0; border:1px solid var(--border);
  border-radius:12px; border-radius:var(--radius-md);
  -webkit-box-shadow:0 2px 8px rgba(15,23,42,.06); box-shadow:0 2px 8px rgba(15,23,42,.06);
  -webkit-box-shadow:var(--shadow-1); box-shadow:var(--shadow-1);
  padding:16px; padding:var(--sp-4);
}
.uni-chart-card__head{margin-bottom:16px;margin-bottom:var(--sp-4)}
.uni-chart-card__title{font-size:16px;font-size:var(--fs-16);font-weight:700;font-weight:var(--fw-bold);color:#1E293B;color:var(--text)}
.uni-chart-card__sub{font-size:12px;font-size:var(--fs-12);color:#64748B;color:var(--text-muted);margin-top:4px;margin-top:var(--sp-1)}
.uni-chart-card__filters{margin-top:12px;margin-top:var(--sp-3)}
.uni-chart-card__filters .uni-tab{padding:6px 12px;padding:var(--sp-1) var(--sp-3);font-size:13px;font-size:var(--fs-13)}
.uni-chart-card__body{min-height:280px;min-height:0}
.uni-chart-card__foot{
  margin-top:12px; margin-top:var(--sp-3);
  padding-top:12px; padding-top:var(--sp-3);
  border-top:1px solid #E2E8F0; border-top:1px solid var(--border);
  font-size:12px; font-size:var(--fs-12);
  color:#64748B; color:var(--text-muted);
}
.uni-legend{margin-top:8px;margin-top:var(--sp-2)}
.uni-legend__item{display:inline-block;margin-right:16px;margin-right:var(--sp-4);font-size:12px;font-size:var(--fs-12);color:#475569;color:var(--text-2)}
.uni-legend__dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;margin-right:var(--sp-1);vertical-align:-1px}

/* ===== 5.1 图标基座（SVG sprite 消费端；色值走 currentColor） ===== */
.uni-icon{display:inline-block;width:20px;height:20px;vertical-align:-4px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;color:inherit}
.uni-icon--sm{width:16px;height:16px;vertical-align:-3px}
.uni-icon--lg{width:24px;height:24px;vertical-align:-5px;stroke-width:2}
.uni-icon--xl{width:48px;height:48px;stroke-width:1.5}

/* ===== 4.9 页面级模板件（P2 n1411：38 模块套模板首批） ===== */
/* 筛选栏：统一 36px 控件高（chrome64 安全——无 flex gap，用 margin-right） */
.uni-filter-bar{
  display:flex; align-items:center; flex-wrap:wrap;
  padding:12px 16px;
  background:#FFFFFF; background:var(--surface);
  border:1px solid #E2E8F0; border:1px solid var(--border);
  border-radius:12px; border-radius:var(--radius-md);
  margin-bottom:12px; margin-bottom:var(--sp-3);
}
.uni-filter-bar .uni-input{height:36px;margin-right:10px}
.uni-filter-bar .uni-select{margin-right:10px}
.uni-filter-bar .uni-select select{height:36px}
.uni-filter-bar .uni-btn{min-height:36px;line-height:34px;margin-right:8px}
.uni-filter-bar label{font-size:13px;font-size:var(--fs-13);color:#475569;color:var(--text-2);margin-right:6px;white-space:nowrap}
.uni-filter-item{display:flex;align-items:center;margin-right:12px}
/* 页面头（标题 + 操作区） */
.uni-page-head{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;margin-bottom:16px;margin-bottom:var(--sp-4)}
.uni-page-head .uni-page-title{margin:0;font-size:20px;font-size:var(--fs-20);font-weight:700;font-weight:var(--fw-bold);color:#1E293B;color:var(--text)}
.uni-page-head .uni-page-sub{margin-top:4px;font-size:13px;font-size:var(--fs-13);color:#64748B;color:var(--text-muted)}
.uni-page-head .uni-page-acts{display:flex;align-items:center;flex-wrap:wrap}
.uni-page-head .uni-page-acts .uni-btn{margin-left:8px}
/* 空态卡（模块级空数据用；表内空行仍用 td colspan） */
.uni-empty-card{
  padding:48px 16px; text-align:center;
  background:#FFFFFF; background:var(--surface);
  border:1px dashed #CBD5E1; border:1px dashed var(--border-strong);
  border-radius:12px; border-radius:var(--radius-md);
  color:#64748B; color:var(--text-muted);
}
.uni-empty-card .uni-empty-icon{font-size:40px;line-height:1;margin-bottom:10px;opacity:.55}
