/* ============================================================
   admin-v2.css — 全新 UI 渐进落地层（样板 v1）
   设计规范：SCRM后台-全新UI设计方案-2026-09-08.md §4-§5
   作用域策略：所有样式限定在 .ui2 容器内（含 .ui2 .modal-mask 浮层），
   未包裹 .ui2 的视图（租户/套餐/工单/系统配置/版本）保持旧皮肤零回归。
   令牌：--ui-* 与官网 --primary/--violet/--gradient 同源精细化。
   ============================================================ */

/* ---------- 设计令牌 ---------- */
.ui2{
  /* 色彩 */
  --ui-bg:#F4F6FA;            /* 内容区底 */
  --ui-surface:#FFFFFF;
  --ui-border:#E7EBF2;        /* 常规描边 */
  --ui-border-2:#D8DEEA;      /* hover/强调描边 */
  --ui-ink:#101B33;           /* 主文本 */
  --ui-ink-2:#44506B;         /* 次级文本 */
  --ui-ink-3:#616D89;         /* 弱化文本（2026-10-29 修正：原 #8591AC 对 #F4F6FA 仅 2.92:1，不达 WCAG AA；#616D89 为 4.78:1 / 白底 5.18:1） */
  --ui-primary:#2563EB;
  --ui-primary-2:#4F46E5;
  --ui-violet:#7C3AED;
  --ui-gradient:linear-gradient(120deg,#2563EB,#7C3AED);
  --ui-gradient-btn:linear-gradient(135deg,#2563EB,#4F46E5);
  --ui-green:#059669;
  --ui-amber:#D97706;
  --ui-red:#DC2626;
  --ui-navy:#0B1220;
  /* 柔和底（徽标/图标格） */
  --soft-blue:#EFF6FF; --soft-green:#ECFDF5; --soft-amber:#FFFBEB;
  --soft-red:#FEF2F2;  --soft-violet:#F5F3FF; --soft-gray:#F1F5F9;
  /* 阴影 / 圆角 */
  --ui-shadow-sm:0 1px 2px rgba(16,27,51,.04),0 2px 8px rgba(16,27,51,.05);
  --ui-shadow-md:0 4px 14px rgba(16,27,51,.08);
  --ui-shadow-lg:0 24px 64px rgba(16,27,51,.16);
  --ui-r-sm:10px; --ui-r-md:14px; --ui-r-lg:16px; --ui-r-xl:20px;
  /* 字号 */
  --ui-fs-xs:12px; --ui-fs-sm:13px; --ui-fs-body:13.5px;
  --ui-fs-title:15px; --ui-fs-page:17px;
  /* 兼容旧类引用的变量（作用域内替换为同源精调值） */
  --bg:var(--ui-bg); --border:var(--ui-border); --navy:var(--ui-ink);
  --text:var(--ui-ink); --text-2:var(--ui-ink-2); --text-3:var(--ui-ink-3);
  --primary-light:var(--soft-blue); --green-soft:var(--soft-green);
  --orange-soft:var(--soft-amber); --orange-dark:var(--ui-amber);
  --shadow:var(--ui-shadow-md);
  --green:var(--ui-green); --orange:var(--ui-amber);
  --gradient:var(--ui-gradient); --radius-lg:var(--ui-r-lg); --shadow-lg:var(--ui-shadow-lg);
  color:var(--ui-ink);
}

/* ============================================================
   页面级（样板书页统一观感）
   ============================================================ */
.ui2 .admin-content-pad{}
.ui2 .pg-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;margin:2px 0 22px}
.ui2 .pg-head h2{font-size:20px;font-weight:800;letter-spacing:-.2px;color:var(--ui-ink);margin:0;display:flex;align-items:center;gap:10px}
.ui2 .pg-head .pg-sub{font-size:13px;color:var(--ui-ink-3);margin-top:5px;line-height:1.6}
.ui2 .pg-actions{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap}

/* ============================================================
   KPI 统计卡
   ============================================================ */
.ui2 .kpi-grid{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.ui2 .kpi-card{border:1px solid var(--ui-border);border-radius:var(--ui-r-lg);padding:18px 20px;
  box-shadow:var(--ui-shadow-sm);transition:.18s ease-out;position:relative;overflow:hidden;background:var(--ui-surface)}
.ui2 .kpi-card::after{content:"";position:absolute;inset:0 0 auto 0;height:3px;opacity:0;transition:.18s}
.ui2 .kpi-card:hover{box-shadow:var(--ui-shadow-md);transform:translateY(-2px);border-color:var(--ui-border-2)}
.ui2 .kpi-card:hover::after{opacity:1}
.ui2 .kpi-card .k-ic{width:46px;height:46px;border-radius:13px;box-shadow:inset 0 0 0 1px rgba(16,27,51,.04)}
.ui2 .kpi-card .k-ic.blue{background:var(--soft-blue);color:var(--ui-primary)}
.ui2 .kpi-card .k-ic.green{background:var(--soft-green);color:var(--ui-green)}
.ui2 .kpi-card .k-ic.orange{background:var(--soft-amber);color:var(--ui-amber)}
.ui2 .kpi-card .k-ic.purple{background:var(--soft-violet);color:var(--ui-violet)}
.ui2 .kpi-card .k-ic.red{background:var(--soft-red);color:var(--ui-red)}
.ui2 .kpi-card b{font-size:26px;color:var(--ui-ink);font-weight:800;letter-spacing:-.5px}
.ui2 .kpi-card small{font-size:12px;color:var(--ui-ink-3);font-weight:500;margin-top:1px}
.ui2 .kpi-card .trend{font-size:11.5px;color:var(--ui-ink-3);margin-top:3px}

/* ============================================================
   内容面板
   ============================================================ */
.ui2 .panel{border:1px solid var(--ui-border);border-radius:var(--ui-r-lg);
  box-shadow:var(--ui-shadow-sm);margin-bottom:18px;background:var(--ui-surface)}
.ui2 .panel-head{padding:14px 20px;border-bottom:1px solid #F0F3F9}
.ui2 .panel-head h3{font-size:var(--ui-fs-title);font-weight:700;color:var(--ui-ink)}
.ui2 .panel-head h3 .pnl-mark{width:7px;height:16px;border-radius:99px;background:var(--ui-gradient);
  display:inline-block;vertical-align:-3px;margin-right:9px}
.ui2 .panel-body{padding:18px 20px}
.ui2 .panel-body.nopad{padding:0}
.ui2 .panel-flush{border-top:1px solid #F0F3F9}

/* ============================================================
   页签（胶囊式）
   ============================================================ */
.ui2 .tabs{display:flex;gap:6px;flex-wrap:wrap;padding:4px 0}
.ui2 .tab-btn{padding:7px 16px;border-radius:99px;font-size:13px;font-weight:600;color:var(--ui-ink-2);
  background:transparent;border:1px solid transparent;transition:.15s}
.ui2 .tab-btn:hover{background:#F3F6FB;color:var(--ui-ink)}
.ui2 .tab-btn.active{background:var(--ui-gradient-btn);color:#fff;box-shadow:0 3px 10px rgba(37,99,235,.28)}
.ui2 .tab-btn .cnt{background:rgba(16,27,51,.08);color:var(--ui-ink-2);font-size:11px;font-weight:700;
  min-width:18px;height:18px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px;margin-left:4px}
.ui2 .tab-btn.active .cnt{background:rgba(255,255,255,.25);color:#fff}

/* ============================================================
   工具栏 / 搜索
   ============================================================ */
.ui2 .toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.ui2 .toolbar .search-box{display:flex;align-items:center;gap:8px;background:#fff;
  border:1.5px solid var(--ui-border);border-radius:var(--ui-r-sm);padding:0 12px;min-height:38px;
  min-width:230px;transition:.15s}
.ui2 .toolbar .search-box:focus-within{border-color:var(--ui-primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.ui2 .toolbar .search-box svg{width:16px;height:16px;color:var(--ui-ink-3);flex-shrink:0}
.ui2 .toolbar .search-box input{border:none;outline:none;font-size:13px;width:100%;background:transparent;color:var(--ui-ink)}
.ui2 .toolbar select{border:1.5px solid var(--ui-border);border-radius:var(--ui-r-sm);min-height:38px;
  padding:0 12px;font-size:13px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238591AC' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 12px center;
  color:var(--ui-ink-2);outline:none;appearance:none;-webkit-appearance:none;padding-right:32px;transition:.15s}
.ui2 .toolbar select:focus{border-color:var(--ui-primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.ui2 .toolbar select:hover{border-color:var(--ui-border-2)}
.ui2 .toolbar .flt-clear{font-size:12.5px;color:var(--ui-primary);cursor:pointer;background:none;border:none;font-weight:600;padding:4px 6px}

/* ============================================================
   按钮
   ============================================================ */
.ui2 .btn-sm,.ui2 .op-btn{transition:.15s ease-out;font-weight:600}
.ui2 .btn-sm{min-height:38px;padding:0 18px;border-radius:var(--ui-r-sm);font-size:13px;border:none;
  display:inline-flex;align-items:center;gap:6px;justify-content:center}
.ui2 .btn-sm.primary{background:var(--ui-gradient-btn);color:#fff;box-shadow:0 4px 12px rgba(37,99,235,.24)}
.ui2 .btn-sm.primary:hover{box-shadow:0 6px 16px rgba(37,99,235,.34);transform:translateY(-1px);filter:brightness(1.04)}
.ui2 .btn-sm.outline{border:1.5px solid var(--ui-border);background:#fff;color:var(--ui-ink-2)}
.ui2 .btn-sm.outline:hover{border-color:var(--ui-primary);color:var(--ui-primary);background:var(--soft-blue)}
.ui2 .btn-sm.red{background:var(--ui-red);color:#fff}
.ui2 .btn-sm.red:hover{filter:brightness(.95)}
.ui2 .op-btn{padding:5.5px 13px;border-radius:9px;border:1px solid var(--ui-border);background:#fff;
  font-size:12.5px;color:var(--ui-ink-2)}
.ui2 .op-btn:hover{border-color:var(--ui-primary);color:var(--ui-primary);background:#FBFDFF}
.ui2 .op-btn.primary{background:var(--ui-gradient-btn);border-color:transparent;color:#fff}
.ui2 .op-btn.primary:hover{filter:brightness(1.05);color:#fff}
.ui2 .op-btn.green{background:var(--ui-green);border-color:transparent;color:#fff}
.ui2 .op-btn.green:hover{filter:brightness(.95);color:#fff}
.ui2 .op-btn.red{background:var(--ui-red);border-color:transparent;color:#fff}
.ui2 .op-btn.red:hover{filter:brightness(.92);color:#fff}
.ui2 .op-btn.orange{background:var(--ui-amber);border-color:transparent;color:#fff}
.ui2 .op-btn.orange:hover{filter:brightness(.95);color:#fff}
.ui2 .op-btn.ghost{border-color:transparent;background:transparent;color:var(--ui-ink-3)}
.ui2 .op-btn.ghost:hover{color:var(--ui-primary);background:transparent}
.ui2 .op-btn:disabled{opacity:.45;cursor:not-allowed}

/* ============================================================
   表格
   ============================================================ */
.ui2 .admin-table-wrap{overflow-x:auto}
.ui2 .admin-table{width:100%;border-collapse:collapse;min-width:780px;font-size:13px}
.ui2 .admin-table th{background:#F7F9FC;color:var(--ui-ink-2);font-weight:600;text-align:left;
  padding:10px 16px;border-bottom:1px solid var(--ui-border);white-space:nowrap;font-size:12.5px;letter-spacing:.2px}
.ui2 .admin-table th:first-child{border-top-left-radius:0}
.ui2 .admin-table td{padding:12px 16px;border-bottom:1px solid #F0F3F9;vertical-align:middle;color:var(--ui-ink-2)}
.ui2 .admin-table tbody tr{transition:background .12s}
.ui2 .admin-table tbody tr:hover td{background:#FAFCFF}
.ui2 .admin-table tbody tr:last-child td{border-bottom:none}
.ui2 .admin-table td b{color:var(--ui-ink);font-weight:600}
.ui2 .admin-table .cell-main{display:flex;align-items:center;gap:8px;color:var(--ui-ink);font-weight:600;font-size:13.5px}
.ui2 .admin-table .cell-main .ava{width:30px;height:30px;border-radius:9px;background:var(--ui-gradient-soft,var(--soft-blue));
  color:var(--ui-primary);font-size:12px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
.ui2 .admin-table .cell-sub{display:block;color:var(--ui-ink-3);font-size:12px;margin-top:3px;line-height:1.4}

/* ============================================================
   徽标（圆点 + 文字，色盲安全）
   ============================================================ */
.ui2 .badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;
  padding:3px 10px;border-radius:999px;white-space:nowrap;line-height:1.6}
.ui2 .badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.85}
.ui2 .badge.gray{background:var(--soft-gray);color:#5B6B83}
.ui2 .badge.blue{background:var(--soft-blue);color:var(--ui-primary)}
.ui2 .badge.green{background:var(--soft-green);color:#047857}
.ui2 .badge.orange{background:var(--soft-amber);color:#B45309}
.ui2 .badge.red{background:var(--soft-red);color:var(--ui-red)}
.ui2 .badge.purple{background:var(--soft-violet);color:#7C3AED}
.ui2 .badge.soft{background:#F3F6FB;color:var(--ui-ink-2)}

/* ============================================================
   配额进度条
   ============================================================ */
.ui2 .quota-bar{gap:10px}
.ui2 .quota-bar .bar{height:6px;background:#EDF0F6;border-radius:99px}
.ui2 .quota-bar .bar i{height:100%;border-radius:99px}
.ui2 .quota-bar .bar i.ok{background:var(--ui-green)}
.ui2 .quota-bar .bar i.warn{background:var(--ui-amber)}
.ui2 .quota-bar .bar i.danger{background:var(--ui-red)}
.ui2 .quota-bar small{font-size:11.5px;color:var(--ui-ink-3)}

/* ============================================================
   分页
   ============================================================ */
.ui2 .pager{display:flex;align-items:center;gap:6px;padding:13px 16px;border-top:1px solid #F0F3F9;
  font-size:12.5px;color:var(--ui-ink-3)}
.ui2 .pager button{min-width:32px;height:32px;border-radius:9px;border:1px solid var(--ui-border);
  background:#fff;font-size:12.5px;color:var(--ui-ink-2);transition:.13s}
.ui2 .pager button:hover:not(:disabled){border-color:var(--ui-primary);color:var(--ui-primary)}
.ui2 .pager button.active{background:var(--ui-gradient-btn);border-color:transparent;color:#fff}
.ui2 .pager button:disabled{opacity:.4;cursor:not-allowed}

/* ============================================================
   空状态
   ============================================================ */
.ui2 .empty{padding:52px 20px;color:var(--ui-ink-3)}
.ui2 .empty svg{width:52px;height:52px;opacity:.35;stroke-width:1.5}

/* ============================================================
   动态 / 待办行
   ============================================================ */
.ui2 .log-row{display:flex;gap:12px;padding:11px 0;border-bottom:1px solid #F0F3F9;font-size:13px;align-items:flex-start}
.ui2 .log-row:last-child{border-bottom:none}
.ui2 .log-row .lg-ic{width:34px;height:34px;border-radius:10px;background:var(--soft-gray);color:var(--ui-primary);
  display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ui2 .log-row .lg-ic svg{width:16px;height:16px}
.ui2 .log-row .lg-user{font-weight:600;color:var(--ui-ink)}
.ui2 .log-row .lg-time{font-size:11.5px;color:var(--ui-ink-3);white-space:nowrap;flex-shrink:0;margin-top:2px}
.ui2 .log-row .lg-act{display:inline-flex;font-size:11.5px;padding:1px 8px;border-radius:99px;
  background:var(--soft-blue);color:var(--ui-primary);font-weight:600;margin:0 4px;vertical-align:1px}

/* ============================================================
   弹窗浮层（UI.openModal 挂载于 body，需显式带 .ui2）
   ============================================================ */
.modal-mask.ui2{background:rgba(11,18,32,.5);backdrop-filter:blur(3px)}
.ui2 .modal{border-radius:var(--ui-r-xl);border:1px solid rgba(255,255,255,.6);
  box-shadow:var(--ui-shadow-lg);overflow:hidden}
.ui2 .modal-head{padding:18px 24px;border-bottom:1px solid #F0F3F9}
.ui2 .modal-head h3{font-size:16px;font-weight:800;color:var(--ui-ink)}
.ui2 .modal-body{padding:22px 24px}
.ui2 .modal-foot{padding:14px 24px;border-top:1px solid #F0F3F9;background:#FAFBFD}

/* 表单 */
.ui2 .f-item{margin-bottom:15px}
.ui2 .f-item label{font-size:13px;font-weight:600;color:var(--ui-ink);margin-bottom:6px}
.ui2 .f-item label .req{color:var(--ui-red)}
.ui2 .f-item input,.ui2 .f-item select,.ui2 .f-item textarea{width:100%;min-height:38px;
  border:1.5px solid var(--ui-border);border-radius:var(--ui-r-sm);padding:0 12px;font-size:13px;
  outline:none;background:#fff;color:var(--ui-ink);transition:.15s;font-family:inherit}
.ui2 .f-item textarea{padding:10px 12px;min-height:88px;resize:vertical;line-height:1.6}
.ui2 .f-item input:focus,.ui2 .f-item select:focus,.ui2 .f-item textarea:focus{
  border-color:var(--ui-primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.ui2 .f-item .hint{font-size:12px;color:var(--ui-ink-3);margin-top:5px;line-height:1.5}
.ui2 .switch-item{border-radius:var(--ui-r-sm)}
.ui2 .switch-item.on{border-color:#CBD9F8;background:var(--soft-blue);color:var(--ui-primary)}

/* ============================================================
   仪表盘专用（.ui2 .dash-*）
   ============================================================ */
.ui2 .dash-hero{display:flex;align-items:center;gap:18px;flex-wrap:wrap;background:
  radial-gradient(720px 220px at 92% -40%,rgba(124,58,237,.16),transparent 60%),
  radial-gradient(620px 200px at 8% 130%,rgba(37,99,235,.10),transparent 55%),
  linear-gradient(135deg,#0B1220,#101B33);
  border-radius:var(--ui-r-xl);padding:24px 26px;margin-bottom:20px;position:relative;overflow:hidden;
  box-shadow:0 10px 30px rgba(11,18,32,.18)}
.ui2 .dash-hero .dh-ic{width:52px;height:52px;border-radius:15px;background:rgba(255,255,255,.1);
  display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0;backdrop-filter:blur(2px)}
.ui2 .dash-hero .dh-ic svg{width:26px;height:26px}
.ui2 .dash-hero h2{font-size:20px;font-weight:800;color:#fff;margin:0;letter-spacing:-.2px}
.ui2 .dash-hero p{font-size:12.5px;color:rgba(226,232,240,.72);margin:5px 0 0;line-height:1.6}
.ui2 .dash-hero .dh-stat{margin-left:auto;display:flex;gap:14px;flex-wrap:wrap}
.ui2 .dash-hero .dh-chip{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1);
  border-radius:13px;padding:10px 16px;text-align:center;min-width:96px}
.ui2 .dash-hero .dh-chip b{display:block;font-size:18px;font-weight:800;color:#fff}
.ui2 .dash-hero .dh-chip small{font-size:11px;color:rgba(203,213,225,.8)}
.ui2 .dash-hero .dh-chip.red b{color:#FCA5A5}
.ui2 .dash-hero .dh-chip.amber b{color:#FCD34D}

/* 模块快捷入口卡 */
.ui2 .feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.ui2 .feat-mini{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:var(--ui-r-md);
  border:1px solid var(--ui-border);background:var(--ui-surface);text-decoration:none;transition:.16s ease-out;
  position:relative;box-shadow:var(--ui-shadow-sm)}
.ui2 .feat-mini:hover{border-color:#C7D6F8;box-shadow:var(--ui-shadow-md);transform:translateY(-2px);text-decoration:none}
.ui2 .feat-mini .fm-ic{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ui2 .feat-mini .fm-ic svg{width:20px;height:20px}
.ui2 .feat-mini h3{font-size:14.5px;font-weight:700;color:var(--ui-ink);margin:0}
.ui2 .feat-mini p{font-size:12px;color:var(--ui-ink-3);margin:3px 0 0;line-height:1.5}
.ui2 .feat-mini .badge{position:absolute;top:14px;right:14px}
.ui2 .feat-mini .fm-go{position:absolute;right:14px;bottom:12px;font-size:11px;color:var(--ui-primary);font-weight:600;opacity:0;transition:.15s}
.ui2 .feat-mini:hover .fm-go{opacity:1}
.ui2 .feat-mini .fm-ic.blue{background:var(--soft-blue);color:var(--ui-primary)}
.ui2 .feat-mini .fm-ic.green{background:var(--soft-green);color:var(--ui-green)}
.ui2 .feat-mini .fm-ic.orange{background:var(--soft-amber);color:var(--ui-amber)}
.ui2 .feat-mini .fm-ic.purple{background:var(--soft-violet);color:var(--ui-violet)}
.ui2 .feat-mini .fm-ic.red{background:var(--soft-red);color:var(--ui-red)}
.ui2 .feat-mini .fm-ic.gray{background:var(--soft-gray);color:#5B6B83}
.ui2 .feat-mini .fm-ic.teal{background:#F0FDFA;color:#0D9488}

/* 两栏区 */
.ui2 .dash-cols{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start}
@media (max-width:1180px){ .ui2 .dash-cols{grid-template-columns:1fr} .ui2 .feat-grid{grid-template-columns:repeat(2,1fr)} }
@media (max-width:1024px){
  .ui2 .kpi-grid{grid-template-columns:repeat(2,1fr)}
  .ui2 .pg-head h2{font-size:18px}
}
@media (max-width:720px){
  .ui2 .feat-grid{grid-template-columns:1fr}
  .ui2 .kpi-grid{grid-template-columns:1fr 1fr}
  .ui2 .dash-hero{padding:20px}
  .ui2 .dash-hero .dh-stat{margin-left:0;width:100%}
  .ui2 .pg-actions{margin-left:0;width:100%}
}

/* ============================================================
   客户管理样板微调（与仪表盘皮肤统一）
   ============================================================ */
.ui2 .cust-kpi + .panel{margin-top:0}
.ui2 .panel-head .head-act{display:flex;align-items:center;gap:10px;margin-left:auto}
.ui2 .table-wrap.panel{padding-bottom:0}

/* --- 客户管理 / 单表面板内部区块 --- */
.ui2 .h-spacer{flex:1}
.ui2 .table-panel{overflow:hidden}
.ui2 .surf-sec{border-top:1px solid #F0F3F9;position:relative}
.ui2 .sec-head{display:flex;align-items:center;gap:10px;padding:12px 16px;flex-wrap:wrap;
  border-bottom:1px solid #F0F3F9}
.ui2 .sec-head h4{font-size:13px;font-weight:700;color:var(--ui-ink);margin:0;display:flex;align-items:center;gap:7px}
.ui2 .sec-head h4 svg{width:15px;height:15px;color:var(--ui-amber)}
.ui2 .sec-head .search-box{margin-left:auto}
.ui2 .sec-head .tabs{margin-left:0}
.ui2 .flt-hint{white-space:nowrap}
.ui2 .surf-sec .toolbar{padding:12px 16px;border-bottom:1px solid #F0F3F9}
.ui2 .surf-sec .toolbar + .admin-table-wrap{border-top:none}
.ui2 .cust-view .toolbar .search-box{min-width:240px}
.ui2 .cust-view .toolbar select{min-width:130px}

/* ============================================================
   批次2 — 租户 / 套餐 / 工单 / 系统配置 / 版本管理 皮肤
   ============================================================ */
/* 面板头内直接放置的搜索框 / 下拉（ui2 页签、工具栏外的场景） */
.ui2 .panel-head .search-box{display:flex;align-items:center;gap:8px;background:#fff;
  border:1.5px solid var(--ui-border);border-radius:var(--ui-r-sm);padding:0 12px;min-height:38px;
  min-width:230px;transition:.15s}
.ui2 .panel-head .search-box:focus-within{border-color:var(--ui-primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.ui2 .panel-head .search-box svg{width:16px;height:16px;color:var(--ui-ink-3);flex-shrink:0}
.ui2 .panel-head .search-box input{border:none;outline:none;font-size:13px;width:100%;background:transparent;color:var(--ui-ink)}
.ui2 .panel-head select{border:1.5px solid var(--ui-border);border-radius:var(--ui-r-sm);min-height:38px;
  padding:0 30px 0 12px;font-size:13px;color:var(--ui-ink-2);outline:none;appearance:none;-webkit-appearance:none;
  background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238591AC' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 12px center;
  transition:.15s}
.ui2 .panel-head select:focus{border-color:var(--ui-primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.ui2 .panel-head select:hover{border-color:var(--ui-border-2)}

/* --- 系统配置：顶部胶囊页签条 --- */
.ui2 .cfg-tabs{display:flex;gap:6px;flex-wrap:wrap;background:#fff;border:1px solid var(--ui-border);
  border-radius:var(--ui-r-lg);padding:8px 10px;margin:0 0 16px;box-shadow:var(--ui-shadow-sm)}
.ui2 .cfg-tabs .tab-btn{padding:8px 18px}
.ui2 .cfg-view .panel:last-child{margin-bottom:0}

/* --- 套餐管理：定价卡精调 --- */
.ui2 .price-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;align-items:stretch}
.ui2 .price-card{background:#fff;border:1px solid var(--ui-border);border-radius:var(--ui-r-lg);
  padding:20px 18px;display:flex;flex-direction:column;position:relative;
  box-shadow:var(--ui-shadow-sm);transition:.18s ease-out}
.ui2 .price-card:hover{transform:translateY(-3px);box-shadow:var(--ui-shadow-md);border-color:#C7D6F8}
.ui2 .price-card .p-badge{position:absolute;top:-11px;right:16px;background:var(--ui-gradient);color:#fff;
  font-size:11px;font-weight:700;padding:3px 12px;border-radius:999px}
.ui2 .price-card .p-name{font-size:16px;font-weight:800;color:var(--ui-ink);letter-spacing:-.2px}
.ui2 .price-card .p-desc{font-size:12px;color:var(--ui-ink-3);margin:4px 0 12px}
.ui2 .price-card .p-price{display:flex;align-items:baseline;gap:4px;flex-wrap:wrap}
.ui2 .price-card .p-price b{font-size:26px;color:var(--ui-ink);font-weight:800;letter-spacing:-1px}
.ui2 .price-card .p-price span{font-size:12px;color:var(--ui-ink-3)}
.ui2 .price-card .p-price .per{width:100%}
.ui2 .price-card .p-foot{font-size:12px;color:var(--ui-ink-3);border-top:1px dashed var(--ui-border);padding-top:10px}

/* --- 工单看板 --- */
.ui2 .kanban{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:start}
.ui2 .kanban-col{background:#F7F9FC;border:1px solid var(--ui-border);border-radius:var(--ui-r-lg);padding:12px;min-height:180px}
.ui2 .kanban-head{display:flex;align-items:center;gap:8px;padding:4px 4px 12px;font-weight:800;color:var(--ui-ink);font-size:13.5px}
.ui2 .kanban-head .cnt{background:#E8EDF5;color:var(--ui-ink-2);font-size:11px;min-width:20px;height:20px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;padding:0 6px;font-weight:700}
.ui2 .ticket-card{background:#fff;border:1px solid var(--ui-border);border-radius:var(--ui-r-md);padding:14px;margin-bottom:10px;transition:.16s ease-out;cursor:pointer;box-shadow:0 1px 2px rgba(16,27,51,.03)}
.ui2 .ticket-card:hover{box-shadow:var(--ui-shadow-md);border-color:#C7D6F8;transform:translateY(-1px)}
.ui2 .ticket-card.overdue{border-left:3px solid var(--ui-red)}
.ui2 .ticket-card h4{font-size:13.5px;color:var(--ui-ink);margin-bottom:10px;line-height:1.5;font-weight:700}
.ui2 .ticket-meta{display:flex;gap:12px;flex-wrap:wrap;font-size:11.5px;color:var(--ui-ink-3);margin-top:10px;padding-top:9px;border-top:1px solid #F0F3F9}

/* --- 工单详情弹窗：进度步骤 --- */
.ui2 .detail-steps{display:flex;gap:0;margin:6px 0 4px}
.ui2 .detail-step .dot{width:26px;height:26px;border-radius:50%;background:#E8EDF5;color:#fff;display:flex;align-items:center;justify-content:center;margin:0 auto 6px;position:relative;z-index:1;font-size:11.5px;font-weight:700;border:2px solid #fff;box-shadow:0 0 0 1px var(--ui-border)}
.ui2 .detail-step.done .dot{background:var(--ui-green);box-shadow:0 0 0 1px var(--ui-green)}
.ui2 .detail-step::after{background:#E8EDF5}

/* --- 敏感词 / 密钥 --- */
.ui2 .word-item{border:1px solid var(--ui-border);border-radius:999px;padding:5px 12px;background:#fff;color:var(--ui-ink-2)}
.ui2 .word-item.off{opacity:.55}
.ui2 .key-box{background:#F7F9FC;border:1px dashed #C9D4E4;border-radius:var(--ui-r-sm);color:var(--ui-ink-2)}

/* --- 版本发布卡 --- */
.ui2 .release-card{border:1px solid var(--ui-border);border-radius:var(--ui-r-lg);margin-bottom:12px;overflow:hidden;
  box-shadow:var(--ui-shadow-sm);transition:.16s ease-out;background:#fff}
.ui2 .release-card:hover{box-shadow:var(--ui-shadow-md);border-color:#C7D6F8}
.ui2 .release-head{display:flex;align-items:center;gap:12px;padding:14px 18px;background:#F7F9FC;flex-wrap:wrap}
.ui2 .release-ver{font-family:ui-monospace,Consolas,monospace;font-weight:800;color:var(--ui-primary);font-size:16px}
.ui2 .release-head b{color:var(--ui-ink);font-size:14px}
.ui2 .release-progress{width:160px;height:7px;border-radius:99px;background:#E8EDF5;overflow:hidden;flex-shrink:0}
.ui2 .release-progress i{display:block;height:100%;background:var(--ui-gradient);border-radius:99px;transition:width .4s}
.ui2 .release-body{padding:14px 18px}
.ui2 .release-body ul li{display:flex;gap:8px;font-size:13px;color:var(--ui-ink-2);padding:4px 0}
.ui2 .release-body ul svg{width:15px;height:15px;color:var(--ui-green);flex-shrink:0;margin-top:4px}
.ui2 .release-foot{padding:11px 18px;border-top:1px solid #F0F3F9;display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ui-ink-3);flex-wrap:wrap}

/* --- 租户配额行（表格内） --- */
.ui2 .tenant-view .admin-table td b{font-weight:700}
.ui2 .cfg-view .admin-table .cell-main{display:inline-flex}

/* --- 弹窗内嵌 KPI（满意度统计 / 导入结果） --- */
.ui2 .modal .kpi-grid{margin-bottom:16px}

/* --- 表单网格与开关（ui2 弹窗/页面表单） --- */
.ui2 .form-grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.ui2 .switch-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.ui2 .switch-item{border:1px solid var(--ui-border);border-radius:var(--ui-r-sm);padding:9px 12px;font-size:13px;color:var(--ui-ink-2)}
.ui2 .switch-item.on{border-color:#C9D9F8;background:var(--soft-blue);color:var(--ui-primary)}
.ui2 .switch-item input{width:15px;height:15px;accent-color:var(--ui-primary)}

/* --- 租户 / 版本 / 配置响应式补丁 --- */
@media (max-width:1180px){
  .ui2 .price-grid{grid-template-columns:repeat(2,1fr)}
  .ui2 .kanban{grid-template-columns:1fr}
}
@media (max-width:720px){
  .ui2 .price-grid{grid-template-columns:1fr}
  .ui2 .cfg-tabs{flex-wrap:nowrap;overflow-x:auto;padding:8px}
  .ui2 .cfg-tabs .tab-btn{white-space:nowrap}
  .ui2 .form-grid2{grid-template-columns:1fr}
  .ui2 .switch-grid{grid-template-columns:1fr}
  .ui2 .release-progress{width:100px}
}

/* ============================================================
   外部集成配置（2026-10-03 新增）
   ============================================================ */
.ui2 .it-intro{font-size:13px;color:var(--ui-ink-3);line-height:1.7;margin:0 0 18px;padding:12px 16px;background:var(--soft-blue,#F3F6FB);border:1px solid var(--ui-border,#E8ECF3);border-radius:var(--ui-r-sm,10px)}
.ui2 .it-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
.ui2 .it-card{border:1px solid var(--ui-border,#E8ECF3);border-radius:var(--ui-r-lg,14px);background:var(--ui-surface,#fff);box-shadow:var(--ui-shadow-sm,0 2px 8px rgba(16,27,51,.05));overflow:hidden;display:flex;flex-direction:column}
.ui2 .it-card-h{padding:14px 18px;border-bottom:1px solid #F0F3F9;background:linear-gradient(180deg,#FBFDFF,#fff)}
.ui2 .it-card-h h3{margin:0;font-size:15px;font-weight:700;color:var(--ui-ink,#101B33);display:flex;align-items:center;gap:8px}
.ui2 .it-card-h h3::before{content:"";width:6px;height:16px;border-radius:99px;background:var(--ui-gradient,#2563EB);display:inline-block}
.ui2 .it-card-b{padding:16px 18px;display:flex;flex-direction:column;gap:12px;flex:1}
.ui2 .it-card-f{padding:12px 18px;border-top:1px solid #F0F3F9;display:flex;align-items:center;gap:12px}
.ui2 .it-row{display:flex;flex-direction:column;gap:5px}
.ui2 .it-field{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--ui-ink-2,#41506b)}
.ui2 .it-field>span{font-weight:600;color:var(--ui-ink-2,#41506b)}
.ui2 .it-req{color:var(--ui-red,#E5484D);font-style:normal}
.ui2 .it-field input,.ui2 .it-field select{border:1.5px solid var(--ui-border,#E8ECF3);border-radius:var(--ui-r-sm,10px);min-height:38px;padding:0 12px;font-size:13px;background:#fff;color:var(--ui-ink,#101B33);outline:none;transition:.15s;width:100%;box-sizing:border-box}
.ui2 .it-field select{appearance:none;-webkit-appearance:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238591AC' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 12px center;padding-right:32px}
.ui2 .it-field input:focus,.ui2 .it-field select:focus{border-color:var(--ui-primary,#2563EB);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.ui2 .it-switch{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ui-ink-2,#41506b);cursor:pointer}
.ui2 .it-switch input{width:17px;height:17px;accent-color:var(--ui-primary,#2563EB)}
.ui2 .it-msg{font-size:12.5px;color:var(--ui-ink-3,#8591AC)}
.ui2 .it-msg:empty{display:none}
/* ── 字段级错误 + 卡片说明（2026-10-17 新增：极光 Android 平台配置）
   设计取舍：
     · 错误提示**行内**展示（不弹 alert、不靠 title 悬停）—— 错在哪要一眼看到；
     · 只加"红边 + 红字"两处视觉，**不引入新色相**（沿用既有 --ui-red），
       避免与主题/皮肤体系冲突；
     · 错误位默认隐藏，`:empty` 时不占高度 ⇒ 正常状态下表单间距与其它卡片完全一致。 */
.ui2 .it-err{display:none;font-size:12px;font-style:normal;color:var(--ui-red,#E5484D);line-height:1.5}
.ui2 .it-field.invalid input,.ui2 .it-field.invalid select{border-color:var(--ui-red,#E5484D)}
.ui2 .it-field.invalid input:focus,.ui2 .it-field.invalid select:focus{box-shadow:0 0 0 3px rgba(229,72,77,.12)}
/* 卡片说明条：放在卡片头之下、字段之上 —— 先给"怎么填才对"，再给输入框 */
.ui2 .it-hint{padding:10px 18px;font-size:12.5px;line-height:1.7;color:var(--ui-ink-2,#41506b);background:var(--ui-warn-bg,#FFF8E6);border-bottom:1px solid #F0F3F9}
.ui2 .it-hint b{color:var(--ui-ink,#101B33)}
@media (max-width:1180px){ .ui2 .it-grid{grid-template-columns:1fr} }

/* ============================================================
   资源管理（2026-10-09）：侧边栏可折叠二级菜单 + 模块页面样式
   ------------------------------------------------------------
   侧边栏「资源管理」是 nav 中唯一的**二级菜单组**：
   父项为 <button.nav-group-head>（不参与路由），子项为 .nav-sub 内的 <a>。
   为什么不复用 .admin-nav a 的样式：父项是按钮不是链接，且子项需要更小的
   内边距与左侧竖向缩进线，以形成清晰的层级感。                              */
.admin-nav .nav-group{margin-bottom:2px}
.admin-nav .nav-group-head{display:flex;align-items:center;gap:11px;width:100%;padding:11px 13px;
  border:0;border-radius:10px;background:none;color:#94a3b8;font:inherit;font-size:14px;font-weight:500;
  text-align:left;cursor:pointer;transition:.15s}
.admin-nav .nav-group-head:hover{color:#fff;background:rgba(255,255,255,.06)}
.admin-nav .nav-group-head>svg:first-child{width:18px;height:18px;flex-shrink:0}
.admin-nav .nav-group-head .nav-caret{margin-left:auto;width:14px;height:14px;flex-shrink:0;transition:transform .18s}
.admin-nav .nav-group.open .nav-caret{transform:rotate(90deg)}
.admin-nav .nav-group-head.active{color:#fff;background:var(--gradient);box-shadow:0 4px 14px rgba(37,99,235,.35)}
.admin-nav .nav-sub{display:none;margin:2px 0 6px 21px;padding-left:9px;border-left:1px solid rgba(148,163,184,.24)}
.admin-nav .nav-group.open .nav-sub{display:block}
.admin-nav .nav-sub a{padding:8px 12px;border-radius:8px;font-size:13px;font-weight:500}
.admin-nav .nav-sub a.active{color:#fff;background:rgba(37,99,235,.32);box-shadow:none}

/* --- 资源管理页面 --- */
.ui2 .res-tabs{margin-bottom:16px}
.ui2 .res-tabs .tab-btn{display:inline-flex;align-items:center;gap:6px;text-decoration:none}
.ui2 .res-tabs .tab-btn svg{opacity:.85}
.ui2 .res-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin:16px 0}
.ui2 .res-card{display:flex;align-items:center;gap:14px;padding:16px 18px;border:1px solid var(--ui-border);
  border-radius:var(--ui-r-lg,14px);background:var(--ui-surface,#fff);
  box-shadow:var(--ui-shadow-sm,0 2px 8px rgba(16,27,51,.05));text-decoration:none;transition:.15s}
.ui2 .res-card:hover{border-color:var(--ui-primary);box-shadow:0 6px 18px rgba(37,99,235,.12);transform:translateY(-1px)}
.ui2 .res-card-ic{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:var(--soft-blue,#F3F6FB);color:var(--ui-primary);flex-shrink:0}
.ui2 .res-card-b{flex:1;min-width:0}
.ui2 .res-card-b b{display:block;font-size:14px;color:var(--ui-ink);margin-bottom:3px}
.ui2 .res-card-b small{display:block;font-size:12px;color:var(--ui-ink-3);line-height:1.5}
.ui2 .res-card-n{text-align:right;flex-shrink:0}
.ui2 .res-card-n b{display:block;font-size:20px;font-weight:800;color:var(--ui-ink);line-height:1.1}
.ui2 .res-card-n small{font-size:11.5px;color:var(--ui-ink-3)}
.ui2 .res-notice{margin-bottom:14px;padding:11px 16px;border-radius:var(--ui-r-sm,10px);
  background:#FFF8E8;border:1px solid #F5E0B0;color:#8A6414;font-size:12.5px;line-height:1.6}
.ui2 .res-wide{grid-column:1 / -1}
.ui2 .res-check{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ui-ink-2,#41506b);
  cursor:pointer;padding-top:6px;font-weight:500}
.ui2 .res-check input{width:17px;height:17px;min-height:0;accent-color:var(--ui-primary)}
@media (max-width:1180px){ .ui2 .res-grid{grid-template-columns:1fr} }

/* 免责提示条（空承诺治理 2026-10-09）：支付配置卡 / 续费弹窗共用 */
.ui2 .note-warn{margin:0 0 16px;padding:11px 16px;border-radius:var(--ui-r-sm,10px);
  background:#FFF8E8;border:1px solid #F5E0B0;color:#8A6414;font-size:12.5px;line-height:1.65}
.ui2 .note-warn b{color:#7A5200}
