/* ============================================================
 * P1 assets/admin.css — admin 后台全局样式
 * 由 r28 Phase 4 从 admin.php <style> 段拆出 (原 L698-1020 + L1938-1945)
 * 主样式 + P4-9 userTag pill 局部样式
 *
 * 规约提醒:
 *  - R9 紫色主色 #0E9F6E / #15803D 渐变
 *  - 字重 400/500 only,禁止 600/700
 *  - badge / chip 配色见接管文档 §13 (success/danger/warning/info)
 * ============================================================ */

*{margin:0;padding:0;box-sizing:border-box}
/* c8-h5: 关闭移动端点击矩形蓝色高亮 (不跟随 border-radius 的问题) */
*{-webkit-tap-highlight-color:transparent}
a,button,[onclick],[role="button"]{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}
/* r30-fix12 统一 token (旧 :root + B38 token 覆盖段合并, 原 L619-642 已删):
   主色森林绿 #0E9F6E 统一; bg/text/border 采用 B38 Supabase 风格暖白系;
   bf-primary 梯度供 view 文件按需引用; success 与主色对齐 */
:root{
  --primary:#0E9F6E;
  --primary-light:#15803D;
  --primary-soft:#DCFCE7;
  --bf-primary-50:#DCFCE7;
  --bf-primary-100:#BBF7D0;
  --bf-primary-200:#86EFAC;
  --bf-primary-600:#15803D;
  --bf-primary-800:#14532D;
  --bg:#fafafa;
  --sidebar:#1e1e2e;
  --card:#fff;
  --text:#171717;
  --muted:#737373;
  --border:#e5e7eb;
  --success:#0E9F6E;
  --warning:#f59e0b;
  --danger:#dc2626;
  --info:#3b82f6;
}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100vh}
a{text-decoration:none;color:inherit}

/* LAYOUT */
.layout{display:flex;min-height:100vh}
.sidebar{width:220px;background:var(--sidebar);color:#fff;flex-shrink:0;display:flex;flex-direction:column}
.main{flex:1;overflow:hidden}

/* SIDEBAR */
.sidebar-logo{padding:24px 20px 16px;border-bottom:1px solid rgba(255,255,255,.1)}
.sidebar-logo h2{font-size:16px;font-weight:500}
.sidebar-logo span{font-size:11px;opacity:.5;display:block;margin-top:2px}
.sidebar-nav{padding:12px 0;flex:1}
.nav-link{display:flex;align-items:center;gap:10px;padding:11px 20px;color:rgba(255,255,255,.65);font-size:14px;transition:.2s;cursor:pointer}
.nav-link:hover{color:#fff;background:rgba(255,255,255,.08)}
.nav-link.active{color:#fff;background:var(--primary);border-radius:0 8px 8px 0;margin-right:12px}
.nav-link i{width:18px;text-align:center}
.nav-badge{background:var(--danger);color:#fff;border-radius:10px;padding:1px 7px;font-size:11px;margin-left:auto}
.sidebar-bottom{padding:16px 20px;border-top:1px solid rgba(255,255,255,.1)}
.sidebar-user{font-size:13px;opacity:.7;margin-bottom:10px}
.btn-logout{background:rgba(255,255,255,.1);border:none;color:#fff;padding:7px 14px;border-radius:8px;font-size:13px;cursor:pointer;width:100%}

/* HEADER */
.topbar{background:#fff;border-bottom:1px solid var(--border);padding:14px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 1px 4px rgba(0,0,0,.05)}
.topbar-title{font-size:18px;font-weight:500;color:var(--text)}
.topbar-sub{font-size:12px;color:var(--muted);margin-top:2px}
.page-wrap{padding:24px}

/* CARDS */
.card{background:#fff;border-radius:14px;padding:20px;margin-bottom:16px;box-shadow:0 2px 8px rgba(0,0,0,.06)}
.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}
.card-title{font-size:16px;font-weight:500;color:var(--text)}

/* STATS */
.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:16px}
.stat-card{background:#fff;border-radius:10px;padding:12px 14px;box-shadow:0 2px 6px rgba(0,0,0,.05);border-left:3px solid var(--primary)}
.stat-card.green{border-color:var(--success)}
.stat-card.orange{border-color:var(--warning)}
.stat-card.red{border-color:var(--danger)}
.stat-card.blue{border-color:var(--info)}

/* ===== P1-1 今日数据卡片 ===== */
.today-block{
  background:linear-gradient(135deg,#f5f0ff 0%,#fdf2f8 100%);
  border-radius:14px;padding:16px 18px;margin-bottom:18px;
  border:1px solid #e9d5ff;
}
.today-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.today-title{
  font-size:15px;font-weight:500;color:#14532D;
  display:flex;align-items:center;gap:8px;
}
.today-title i{color:#15803D}
.today-date{
  font-size:12px;font-weight:500;color:#15803D;
  background:#DCFCE7;padding:3px 10px;border-radius:12px;
  margin-left:6px;
}
.today-grid{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:12px;
}
.today-card{
  background:#fff;border-radius:12px;padding:14px 16px;
  position:relative;overflow:hidden;
  box-shadow:0 3px 10px rgba(21,128,61,.06);
  transition:.18s;
}
.today-card:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(21,128,61,.12)}
.today-icon{
  position:absolute;top:12px;right:14px;
  width:34px;height:34px;border-radius:9px;
  display:flex;align-items:center;justify-content:center;
  font-size:15px;
}
.today-num{font-size:24px;font-weight:500;line-height:1.1;letter-spacing:-.5px;margin-top:4px}
.today-lb{font-size:11.5px;color:var(--muted);margin-top:6px;font-weight:500}
.today-blue   .today-icon{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#2563eb}
.today-blue   .today-num{color:#1e40af}
.today-green  .today-icon{background:linear-gradient(135deg,#d1fae5,#a7f3d0);color:#059669}
.today-green  .today-num{color:#065f46}
.today-purple .today-icon{background:linear-gradient(135deg,#DCFCE7,#BBF7D0);color:#15803D}
.today-purple .today-num{color:#14532D}
.today-orange .today-icon{background:linear-gradient(135deg,#fed7aa,#fdba74);color:#ea580c}
.today-orange .today-num{color:#9a3412}
@media (max-width:780px){
  .today-grid{grid-template-columns:repeat(2,1fr)}
}

/* ===== P1-6 财务对账 ===== */
.finance-block{
  background:#fff;border-radius:14px;padding:16px 18px;margin-bottom:18px;
  border:1px solid #e5e7eb;box-shadow:0 2px 8px rgba(0,0,0,.04);
}
.finance-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.finance-title{
  font-size:15px;font-weight:500;color:#1f2937;
  display:flex;align-items:center;gap:8px;
}
.finance-title i{color:#0ea5e9}
.finance-tip{color:var(--muted);font-size:12px;cursor:help}
.finance-status{font-size:12px;font-weight:500;padding:4px 12px;border-radius:14px}
.finance-status.ok{background:#d1fae5;color:#065f46}
.finance-status.bad{background:#fef3c7;color:#92400e}
.finance-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px;
}
.fin-card{
  border-radius:10px;padding:12px 14px;
  background:#fafbfc;border:1px solid #e5e7eb;
  transition:.15s;
}
.fin-card:hover{transform:translateY(-1px);box-shadow:0 4px 10px rgba(0,0,0,.06)}
.fin-lb{font-size:11.5px;color:var(--muted);font-weight:500;margin-bottom:4px}
.fin-num{font-size:22px;font-weight:500;letter-spacing:-.4px;line-height:1.1}
.fin-detail{font-size:10.5px;color:var(--muted);margin-top:6px;line-height:1.4}
.fin-blue   .fin-num{color:#0c4a6e}
.fin-blue   {background:linear-gradient(135deg,#f0f9ff,#fff);border-color:#bae6fd}
.fin-green  .fin-num{color:#065f46}
.fin-green  {background:linear-gradient(135deg,#ecfdf5,#fff);border-color:#a7f3d0}
.fin-orange .fin-num{color:#9a3412}
.fin-orange {background:linear-gradient(135deg,#fff7ed,#fff);border-color:#fed7aa}
.fin-purple .fin-num{color:#14532D}
.fin-purple {background:linear-gradient(135deg,#faf5ff,#fff);border-color:#BBF7D0}
.finance-summary{
  background:#f9fafb;border:1px dashed #d1d5db;border-radius:10px;
  padding:12px 14px;
}
.fin-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.fin-row-lb{font-size:13px;font-weight:500;color:#374151;display:inline-flex;align-items:center;gap:6px}
.fin-row-lb i{color:var(--primary)}
.fin-row-val{font-size:18px;font-weight:500;color:#0c4a6e}
.fin-row-tip{font-size:11px;color:var(--muted);margin-left:auto}
@media (max-width:980px){
  .finance-grid{grid-template-columns:repeat(2,1fr)}
  .fin-row-tip{margin-left:0;width:100%;margin-top:4px}
}
.stat-label{font-size:11px;color:var(--muted);margin-bottom:4px}
.stat-value{font-size:20px;font-weight:500;color:var(--text);line-height:1.2}
.stat-sub{font-size:10px;color:var(--muted);margin-top:3px}

/* TABLES */
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th{background:#f8f9fe;padding:10px 12px;text-align:left;font-weight:500;color:var(--muted);border-bottom:2px solid var(--border);white-space:nowrap}
td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:middle}
tr:hover td{background:#fafafa}
.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:500;color:#fff}
.badge-success{background:var(--success)}
.badge-warning{background:#f0ad4e}
.badge-danger{background:var(--danger)}
.badge-info{background:var(--info)}
.badge-muted{background:#95a5a6}

/* BUTTONS */
.btn{padding:7px 14px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;border:none;transition:.2s;display:inline-flex;align-items:center;gap:5px}
.btn:active{transform:scale(.97)}
.btn-primary{background:var(--primary);color:#fff}
.btn-success{background:var(--success);color:#fff}
.btn-danger{background:var(--danger);color:#fff}
.btn-warning{background:var(--warning);color:#333}
.btn-outline{background:#fff;color:var(--primary);border:1.5px solid var(--primary)}
.btn-sm{padding:5px 10px;font-size:11px}
.btn-group{display:flex;gap:6px;flex-wrap:wrap}

/* FORMS */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}
.form-group{margin-bottom:0}
.form-label{font-size:12px;font-weight:500;color:var(--text);margin-bottom:6px;display:block}
.form-input{width:100%;padding:9px 12px;border:1.5px solid var(--border);border-radius:8px;font-size:13px;color:var(--text);background:#fff;transition:.2s}
.form-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(14,159,110,.1)}
.form-hint{font-size:11px;color:var(--muted);margin-top:3px}
.form-check{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer}
.form-section{background:#f8f9fe;border-radius:10px;padding:14px;margin-bottom:14px}
.form-section-title{font-size:13px;font-weight:500;color:var(--primary);margin-bottom:10px;display:flex;align-items:center;gap:6px}

/* ===== P1 hotfix1 admin 文件选择按钮美化 =====
   跟 user 端 .p6m-file-input 同思路,用 admin 主色 #0E9F6E → #22C55E */
.adm-file-input{
  width:100%;box-sizing:border-box;
  border:1.5px dashed #c4b5fd;border-radius:10px;
  padding:9px 12px;background:#fafaff;
  font-size:12px;color:#6b7280;cursor:pointer;
  transition:border-color .15s,background .15s
}
.adm-file-input:hover{border-color:var(--primary);background:#F0FDF4}
.adm-file-input::file-selector-button{
  background:linear-gradient(135deg,#0E9F6E,#22C55E);
  color:#fff;border:none;
  padding:7px 14px;border-radius:8px;
  font-size:12px;font-weight:500;cursor:pointer;
  margin-right:10px;transition:opacity .15s;
  box-shadow:0 2px 6px rgba(14,159,110,.25)
}
.adm-file-input::file-selector-button:hover{opacity:.88}

/* admin 任务标题字数限制 + 计数器(hotfix1) */
.adm-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;gap:8px;flex-wrap:wrap}
.adm-title-row .form-label{margin:0}
.adm-counter{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap;flex-shrink:0}
.adm-counter.warn{color:#f59e0b}
.adm-counter.danger{color:#dc2626}
.form-input.adm-title-input{transition:border-color .15s}
.form-input.adm-title-input.warn{border-color:#f59e0b}
.form-input.adm-title-input.danger{border-color:#dc2626}

/* ALERT */
.alert{border-radius:10px;padding:12px 16px;margin-bottom:16px;font-size:13px;display:flex;align-items:center;gap:8px}
.alert-success{background:#d4edda;color:#155724;border:1px solid #c3e6cb}
.alert-error{background:#f8d7da;color:#721c24;border:1px solid #f5c6cb}

/* MODAL */
.modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1000;align-items:center;justify-content:center;padding:20px}
.modal.show{display:flex}
.modal-box{background:#fff;border-radius:16px;padding:24px;width:100%;max-width:480px;max-height:90vh;overflow-y:auto}
.modal-title{font-size:18px;font-weight:500;margin-bottom:16px;display:flex;justify-content:space-between;align-items:center}
.modal-close{background:none;border:none;font-size:20px;cursor:pointer;color:var(--muted)}

/* EMPTY */
.empty{text-align:center;padding:40px;color:var(--muted)}
.empty i{font-size:40px;opacity:.3;display:block;margin-bottom:12px}

/* SEARCH */
.search-bar{display:flex;gap:10px;margin-bottom:14px}
.search-input{flex:1;padding:9px 12px;border:1.5px solid var(--border);border-radius:8px;font-size:13px}

/* MOBILE RESPONSIVE */
@media(max-width:768px){
  .sidebar{display:none}
  .form-grid,.form-grid-3{grid-template-columns:1fr}
  .stats-grid{grid-template-columns:1fr 1fr}
  .page-wrap{padding:14px}
}

/* LOGIN */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%)}
.login-card{background:#fff;border-radius:20px;padding:36px 32px;width:100%;max-width:400px;box-shadow:0 20px 60px rgba(0,0,0,.2)}
.login-logo{text-align:center;margin-bottom:28px}
.login-logo i{font-size:48px;color:var(--primary)}
.login-logo h2{font-size:24px;font-weight:500;margin-top:10px}
.login-logo p{color:var(--muted);font-size:14px;margin-top:4px}
.btn-block{width:100%;padding:12px;border:none;border-radius:10px;font-size:15px;font-weight:500;cursor:pointer;background:linear-gradient(135deg,var(--primary),#22C55E);color:#fff}

/* INFO PILL */
.info-pill{display:inline-flex;align-items:center;gap:4px;background:#DCFCE7;color:var(--primary);padding:3px 10px;border-radius:20px;font-size:11px;font-weight:500}

/* 视频上传拖拽区 */
.upload-drop-zone{border:2px dashed #c4b5fd;border-radius:12px;padding:28px 20px;text-align:center;cursor:pointer;background:#faf5ff;transition:.2s;user-select:none}
.upload-drop-zone:hover,.upload-drop-zone.drag-over{border-color:var(--primary);background:#DCFCE7}
.upload-drop-zone.has-file{border-color:var(--success);background:#f0fdf4;border-style:solid}

/* ============================================================
 * P0-2 / c7-cleanup: dialogConfirm 紫色弹窗
 * c12 Q5: 此 .dlg-* 段与 user.css L1407+ 段保持字节级同步
 *   - admin 端独有: .dlg-body .dlg-detail (dialogConfirm 详情槽)
 *   - 其余 24 条规则必须与 user.css 完全一致 (color/size/shadow)
 *   - 改一处必同步另一处, 否则两端弹窗视觉漂移
 *   - 校验: diff <(sed -n '/^.dlg-mask{/,/^.dlg-btn-ok:hover/p' assets/admin.css | grep -v dlg-detail) <(sed -n '/^.dlg-mask{/,/^.dlg-btn-ok:hover/p' assets/user.css)
 * ============================================================ */
.dlg-mask{position:fixed;inset:0;background:rgba(15,12,40,.55);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;z-index:9999;opacity:0;transition:opacity .2s ease}
.dlg-mask.show{display:flex;opacity:1}
.dlg-box{width:92%;max-width:420px;background:#fff;border-radius:18px;box-shadow:0 24px 60px rgba(82,46,180,.35),0 6px 16px rgba(0,0,0,.12);overflow:hidden;transform:scale(.92) translateY(8px);transition:transform .22s cubic-bezier(.34,1.56,.64,1)}
.dlg-mask.show .dlg-box{transform:scale(1) translateY(0)}
.dlg-head{padding:22px 24px 4px;display:flex;align-items:center;gap:14px}
.dlg-icon{width:48px;height:48px;border-radius:14px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:22px}
.dlg-icon.danger{background:linear-gradient(135deg,#fee2e2,#fecaca);color:#dc2626;box-shadow:0 4px 12px rgba(239,68,68,.18)}
.dlg-icon.warn  {background:linear-gradient(135deg,#fef3c7,#fde68a);color:#d97706;box-shadow:0 4px 12px rgba(245,158,11,.18)}
.dlg-icon.info  {background:linear-gradient(135deg,#DCFCE7,#BBF7D0);color:#15803D;box-shadow:0 4px 12px rgba(21,128,61,.18)}
.dlg-icon.success{background:linear-gradient(135deg,#d1fae5,#a7f3d0);color:#059669;box-shadow:0 4px 12px rgba(16,185,129,.18)}
.dlg-title{font-size:17px;font-weight:500;color:#1f1147;letter-spacing:.3px}
.dlg-body{padding:14px 24px 20px;font-size:14px;color:#4c4068;line-height:1.6;word-break:break-all}
.dlg-body .dlg-detail{margin-top:10px;padding:10px 12px;background:#faf7ff;border-left:3px solid var(--primary);border-radius:6px;font-size:13px;color:#5a4b85}
.dlg-actions{padding:14px 20px 20px;display:flex;gap:10px;justify-content:flex-end;background:#fbfaff;border-top:1px solid #f0ecff}
.dlg-btn{padding:10px 22px;border:none;border-radius:10px;font-size:14px;font-weight:500;cursor:pointer;transition:transform .12s ease,box-shadow .2s ease;min-width:88px}
.dlg-btn:active{transform:scale(.96)}
.dlg-btn-cancel{background:#fff;color:#166534;border:1.5px solid #86EFAC}
.dlg-btn-cancel:hover{background:#f5f0ff;border-color:#c4b5fd}
.dlg-btn-ok{color:#fff;box-shadow:0 4px 12px rgba(21,128,61,.3)}
.dlg-btn-ok.danger {background:linear-gradient(135deg,#ef4444,#dc2626);box-shadow:0 4px 12px rgba(239,68,68,.32)}
.dlg-btn-ok.warn   {background:linear-gradient(135deg,#f59e0b,#d97706);box-shadow:0 4px 12px rgba(245,158,11,.32)}
.dlg-btn-ok.info   {background:linear-gradient(135deg,#15803D,#22C55E);box-shadow:0 4px 12px rgba(21,128,61,.32)}
.dlg-btn-ok.success{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 4px 12px rgba(16,185,129,.32)}
.dlg-btn-ok:hover{filter:brightness(1.05)}

/* ============================================================
 * P4-9 userTag 局部样式 (原 admin.php L1938-1945)
 * ============================================================ */
/* P4-9 标签 pill 选中态：背景色 = data-color，文字白色 */
#userTagModal .user-tag-pill.is-on {
  color:#fff !important;
  border-color:transparent !important;
  box-shadow:0 2px 6px rgba(0,0,0,.12);
}

/* ============================================================
 * c4 (#88) 富文本编辑器 RTE
 * 静态页编辑器: 工具栏 + contenteditable + 排版样式
 * ============================================================ */
.rte-btn{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:30px;height:28px;padding:0 8px;
  background:#fff;color:#3D3D3D;
  border:1px solid #e5e7eb;border-radius:6px;
  font-size:12px;font-weight:500;
  cursor:pointer;transition:all .15s;
  font-family:inherit;
}
.rte-btn:hover{background:#DCFCE7;border-color:#c4b5fd;color:#0E9F6E}
.rte-btn.is-active{background:#0E9F6E;color:#fff;border-color:#0E9F6E}
.rte-btn b,.rte-btn i,.rte-btn u{font-style:italic}
.rte-btn b{font-weight:500}
.rte-btn-action{
  background:#F5F4FB;border-color:#c4b5fd;color:#0E9F6E;
}
.rte-btn-action:hover{background:#0E9F6E;color:#fff}
.rte-editor{
  font-family:inherit;
}
.rte-editor:focus{
  border-color:#15803D !important;
  box-shadow:0 0 0 3px rgba(21,128,61,.1);
}
.rte-editor h2{font-size:18px;font-weight:500;color:#1f2937;margin:16px 0 10px;line-height:1.4}
.rte-editor h3{font-size:16px;font-weight:500;color:#1f2937;margin:14px 0 8px;line-height:1.4}
.rte-editor h4{font-size:14px;font-weight:500;color:#1f2937;margin:12px 0 6px;line-height:1.4}
.rte-editor p{margin:6px 0;line-height:1.8}
.rte-editor ul,.rte-editor ol{padding-left:22px;margin:8px 0}
.rte-editor li{margin:3px 0;line-height:1.7}
.rte-editor strong,.rte-editor b{font-weight:500;color:#1f2937}
.rte-editor a{color:#0E9F6E;text-decoration:underline}
.rte-editor img{max-width:100%;height:auto;border-radius:6px;display:block;margin:8px 0}
.rte-editor blockquote{
  border-left:3px solid #c4b5fd;padding:6px 12px;
  background:#F5F4FB;color:#14532D;margin:10px 0;
  border-radius:0 6px 6px 0;font-size:13px;
}
.rte-editor code{
  background:#F5F4FB;color:#14532D;padding:1px 6px;
  border-radius:4px;font-family:'SF Mono','Monaco',monospace;font-size:.92em;
}
.rte-editor pre{
  background:#1e293b;color:#e2e8f0;padding:12px;
  border-radius:8px;overflow-x:auto;font-size:12px;
  font-family:'SF Mono','Monaco',monospace;line-height:1.5;margin:8px 0;
}
.rte-editor pre code{background:transparent;color:inherit;padding:0}
.rte-editor:empty::before{
  content:attr(data-placeholder);
  color:#94a3b8;font-style:italic;
}

/* ============ c9 批次样式 (r28p4u-c9) ============ */

/* c9 Q1 B: 备份 pending undo 顶部横条 */
.c9-bk-undo-bar{display:flex;align-items:center;gap:12px;padding:12px 14px;background:linear-gradient(135deg,#DCFCE7,#f5f4fb);border:1px solid #BBF7D0;border-left:4px solid #15803D;border-radius:10px;margin-bottom:12px;flex-wrap:wrap}
.c9-bk-undo-text{flex:1;min-width:160px;font-size:13px;color:#14532D}
.c9-bk-undo-text b{font-weight:500}
.c9-bk-undo-list{display:flex;gap:6px;flex-wrap:wrap}
.c9-bk-undo-btn{background:#fff;border:1px solid #BBF7D0;color:#0E9F6E;padding:5px 10px;border-radius:6px;font-size:11px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:4px}
.c9-bk-undo-btn:hover{background:#DCFCE7;border-color:#15803D}

/* c9 Q1 B: 文件级回滚 panel */
.c9-bk-files-panel{background:#f9fafb;border-left:3px solid #15803D;padding:10px 14px;margin:0}
.c9-bk-files-hdr{font-size:12px;color:#475569;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.c9-bk-files-hdr b{color:#14532D;font-weight:500;font-family:monospace}
.c9-bk-files-grid{display:flex;flex-direction:column;gap:5px}
.c9-bk-file-row{display:flex;align-items:center;gap:10px;padding:7px 10px;background:#fff;border:1px solid #e5e7eb;border-radius:6px;flex-wrap:wrap}
.c9-bk-file-info{display:flex;align-items:center;gap:7px;flex:1;min-width:0}
.c9-bk-file-name{font-family:monospace;font-size:12px;color:#1f2937;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.c9-bk-file-size{font-size:10.5px;color:#94a3b8;background:#f1f5f9;padding:1px 6px;border-radius:4px;font-family:monospace}
.c9-bk-rollback-btn{background:linear-gradient(135deg,#fb923c,#f59e0b);color:#fff;border:none;padding:5px 11px;border-radius:5px;font-size:11px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:4px}
.c9-bk-rollback-btn:hover{filter:brightness(1.05)}
.c9-bk-expand-btn.is-open i{transform:rotate(180deg)}
.c9-bk-expand-btn i{transition:transform .2s}

/* c9 Q2: admin 任务列表大类筛选条 */
.c9-cat-bar{display:flex;gap:8px;align-items:center;padding:10px 14px;background:#f5f4fb;border-radius:10px;margin-bottom:12px;flex-wrap:wrap;border:1px solid #DCFCE7}
.c9-cat-bar .lb{font-size:12px;color:#64748b;font-weight:500;margin-right:4px}
.c9-cat-bar a{padding:5px 14px;border-radius:18px;font-size:12px;font-weight:500;text-decoration:none;color:#64748b;background:#fff;border:1px solid #e5e7eb;transition:.2s;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.c9-cat-bar a:hover{border-color:#15803D;color:#0E9F6E}
.c9-cat-bar a.on{background:linear-gradient(135deg,#0E9F6E,#15803D);color:#fff;border-color:transparent;box-shadow:0 2px 6px rgba(14,159,110,.25)}
.c9-cat-bar a .num{font-size:10px;background:rgba(255,255,255,.25);padding:1px 5px;border-radius:8px;font-family:monospace}
.c9-cat-bar a:not(.on) .num{background:#DCFCE7;color:#0E9F6E}

/* c9 Q4: 任务大类徽章 (admin 列表 type 列) */
.c9-type-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:8px;background:#DCFCE7;color:#0E9F6E;font-size:10.5px;font-weight:500;border:1px solid #BBF7D0;line-height:1.4;white-space:nowrap}
.c9-type-badge i{font-size:9px}

/* c9 Q5: c5b 多平台批量审核 sub_tab */
.c9-batch-bar{display:flex;align-items:center;gap:10px;padding:10px 14px;background:#fff;border-radius:8px;margin-bottom:10px;border:1px dashed #DCFCE7;flex-wrap:wrap}
.c9-batch-bar .info{font-size:12px;color:#64748b}
.c9-batch-bar .info b{color:#0E9F6E;font-weight:500}
.c9-batch-bar select{padding:5px 9px;border:1px solid #e5e7eb;border-radius:5px;font-size:12px;color:#1f2937;background:#fff}
.c9-batch-bar .b-btn{padding:6px 14px;background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff;border:none;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.c9-batch-bar .b-btn.danger{background:linear-gradient(135deg,#dc2626,#ef4444)}
.c9-batch-bar .b-btn:disabled{opacity:.4;cursor:not-allowed}
.c9-pl-table{width:100%;background:#fff;border-radius:8px;border:1px solid #DCFCE7;border-collapse:collapse;overflow:hidden}
.c9-pl-table th{background:#f5f4fb;color:#0E9F6E;font-weight:500;padding:9px 10px;text-align:left;font-size:11px;border-bottom:1px solid #DCFCE7}
.c9-pl-table td{padding:9px 10px;border-bottom:1px solid var(--border);color:#1f2937;font-size:12px}
.c9-pl-table input[type=checkbox]{width:15px;height:15px;accent-color:#0E9F6E;cursor:pointer}
.c9-pl-plat{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:8px;background:#DCFCE7;color:#0E9F6E;font-size:10.5px;font-weight:500}

/* ============ c10 批次样式 (r28p4u-c10) ============ */

/* c10: 自动备份间隔配置条 */
.c10-bk-config{display:flex;align-items:center;gap:10px;padding:11px 14px;background:#f5f4fb;border:1px solid #DCFCE7;border-radius:10px;margin-bottom:12px;flex-wrap:wrap}
.c10-bk-config .lb{font-size:12px;color:#0E9F6E;font-weight:500;display:flex;align-items:center}
.c10-bk-select{padding:5px 10px;border:1px solid #BBF7D0;border-radius:6px;font-size:12px;background:#fff;color:#1f2937;font-family:inherit;cursor:pointer}
.c10-bk-select:hover{border-color:#15803D}
.c10-bk-save{background:linear-gradient(135deg,#0E9F6E,#15803D);color:#fff;border:none;padding:5px 14px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer}
.c10-bk-save:hover{filter:brightness(1.05)}
.c10-bk-hint{font-size:11px;color:#64748b;flex:1;display:flex;align-items:center;gap:4px;min-width:200px}

/* c10: 顶部"下载完整 zip" + "下载当前 json zip" 按钮 */
.c10-bk-fullbtn{background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff;border:none;padding:6px 14px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.c10-bk-fullbtn:hover{filter:brightness(1.05)}
.c10-bk-jsonbtn{background:#fff;border:1px solid #16a34a;color:#16a34a;padding:6px 14px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.c10-bk-jsonbtn:hover{background:#dcfce7}

/* c10: 行内"zip"按钮(每行操作列) */
.c10-bk-row-dl{background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff;border:none;padding:3px 8px;border-radius:5px;font-size:11px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:3px;margin-right:4px;vertical-align:middle}
.c10-bk-row-dl:hover{filter:brightness(1.05)}

/* ============ c11 批次样式 (r28p4u-c11) ============ */

/* c11: admin 顶部备份失败告警红条 */
.c11-bk-alert-bar{display:flex;align-items:stretch;gap:14px;padding:14px 18px;background:linear-gradient(135deg,#fef2f2,#fee2e2);border:1px solid #fecaca;border-left:5px solid #dc2626;border-radius:10px;margin-bottom:14px;animation:c11AlertPulse 2.5s ease-in-out infinite}
@keyframes c11AlertPulse{0%,100%{box-shadow:0 0 0 0 rgba(220,38,38,0)}50%{box-shadow:0 0 0 4px rgba(220,38,38,.12)}}
.c11-bk-alert-icon{font-size:24px;color:#dc2626;display:flex;align-items:center}
.c11-bk-alert-body{flex:1;display:flex;flex-direction:column;justify-content:center;gap:4px;min-width:0}
.c11-bk-alert-title{font-size:14px;color:#7f1d1d;font-weight:500;display:flex;align-items:center;gap:8px}
.c11-bk-alert-cnt{font-size:10.5px;background:#dc2626;color:#fff;padding:1px 8px;border-radius:10px;font-weight:500}
.c11-bk-alert-msg{font-size:12.5px;color:#991b1b}
.c11-bk-alert-msg b{color:#7f1d1d;font-weight:500;font-family:monospace}
.c11-bk-alert-hint{font-size:11.5px;color:#b91c1c}
.c11-bk-alert-hint code{background:#fff;padding:1px 5px;border-radius:3px;font-family:monospace;font-size:11px;color:#991b1b}
.c11-bk-alert-hint a{color:#0E9F6E;text-decoration:none;border-bottom:1px dashed #c4b5fd}
.c11-bk-alert-ack{background:#fff;border:1px solid #fca5a5;color:#dc2626;padding:6px 14px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.c11-bk-alert-ack:hover{background:#fee2e2}

/* c11: 含证书 zip 按钮(橙色独立) */
.c11-bk-certs-btn{background:linear-gradient(135deg,#ea580c,#f97316);color:#fff;border:none;padding:6px 14px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.c11-bk-certs-btn:hover{filter:brightness(1.05)}

/* c11: 备份失败告警配置区(在备份卡末尾) */
.c11-bk-alert-cfg{margin-top:14px;padding:12px 14px;background:#fff7ed;border:1px solid #fed7aa;border-left:4px solid #ea580c;border-radius:10px}
.c11-bk-alert-cfg-hdr{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:500;color:#9a3412;margin-bottom:10px;flex-wrap:wrap}
.c11-bk-alert-cfg-sub{font-size:11px;color:#9a3412;font-weight:400;opacity:.85;margin-left:4px}
.c11-bk-alert-cfg-form{display:flex;flex-direction:column;gap:8px}
.c11-bk-alert-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.c11-bk-alert-cb{display:flex;align-items:center;gap:5px;font-size:12px;color:#9a3412;font-weight:500;cursor:pointer}
.c11-bk-alert-cb input[type=checkbox]{width:15px;height:15px;accent-color:#ea580c;cursor:pointer}
.c11-bk-alert-field{display:flex;flex-direction:column;gap:3px;flex:1;min-width:140px}
.c11-bk-alert-field label{font-size:11px;color:#9a3412;font-weight:500}
.c11-bk-alert-field input{padding:6px 10px;border:1px solid #fed7aa;border-radius:5px;font-size:12px;color:#1f2937;background:#fff;outline:none}
.c11-bk-alert-field input:focus{border-color:#ea580c}
.c11-bk-alert-save{background:linear-gradient(135deg,#ea580c,#f97316);color:#fff;border:none;padding:7px 16px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;align-self:flex-end}
.c11-bk-alert-save:hover{filter:brightness(1.05)}
.c11-bk-alert-test{background:#fff;color:#ea580c;border:1px solid #ea580c;padding:6px 12px;border-radius:6px;font-size:11.5px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:4px;align-self:flex-end}
.c11-bk-alert-test:hover{background:#fff7ed}
.c11-bk-alert-hint{font-size:11px;color:#7c2d12;line-height:1.7;padding:8px 10px;background:#fffbeb;border-radius:5px}
.c11-bk-alert-hint code{background:#fef3c7;padding:1px 5px;border-radius:3px;font-family:monospace;font-size:10.5px;color:#7c2d12}
.c11-bk-alert-hint b{color:#7c2d12;font-weight:500}

/* ============================================================
 * c12: 备份大小预警 / 趋势图 / 阈值配置 / 孤儿图清理
 * ============================================================ */
/* Q2 大小预警黄条 */
.c12-bk-size-alert{background:linear-gradient(135deg,#fef3c7,#fde68a);border-left:3px solid #f59e0b;border-radius:8px;padding:10px 14px;display:flex;align-items:center;gap:12px;margin-bottom:14px;font-size:13px;color:#92400e}
.c12-bk-size-alert i.fas{color:#d97706;font-size:16px;flex-shrink:0}
.c12-bk-size-alert-t{font-size:13px;color:#92400e;font-weight:500}
.c12-bk-size-alert-s{font-size:11px;color:#a16207;margin-top:2px}
.c12-bk-size-alert-link{font-size:12px;color:#9a3412;text-decoration:underline;white-space:nowrap;flex-shrink:0}
.c12-bk-size-alert-link:hover{color:#7c2d12}
/* Q3 趋势图 */
.c12-bk-trend{background:#fafafa;border:1px solid #e5e7eb;border-radius:10px;padding:14px;margin-bottom:14px}
.c12-bk-trend-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-size:13px;color:var(--text)}
.c12-bk-trend-sub{font-size:11px;color:#64748b;font-weight:400}
.c12-bk-trend-ft{display:flex;gap:14px;font-size:11px;color:#64748b;margin-top:6px;padding-left:40px;align-items:center;flex-wrap:wrap}
.c12-bk-trend-sep{color:#cbd5e1}
/* Q2 阈值配置条 */
.c12-bk-threshold-cfg{display:flex;align-items:center;gap:10px;padding:10px 14px;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;margin-bottom:14px;flex-wrap:wrap}
.c12-bk-threshold-cfg .lb{font-size:13px;color:#92400e;font-weight:500;display:flex;align-items:center}
.c12-bk-threshold-input{width:80px;padding:6px 9px;border:1px solid #fde68a;border-radius:6px;font-size:13px;color:#92400e;background:#fff;outline:none}
.c12-bk-threshold-input:focus{border-color:#f59e0b;box-shadow:0 0 0 2px rgba(245,158,11,.15)}
.c12-bk-threshold-unit{font-size:12px;color:#a16207}
.c12-bk-threshold-save{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border:none;border-radius:7px;padding:7px 14px;font-size:13px;font-weight:500;cursor:pointer}
.c12-bk-threshold-save:hover{filter:brightness(1.05)}
.c12-bk-threshold-hint{font-size:11px;color:#a16207;margin-left:auto}
/* Q1 孤儿图清理 */
.c12-or-tip{background:#fff7ed;border:1px solid #fed7aa;border-radius:8px;padding:10px 12px;margin-bottom:12px;font-size:12px;color:#9a3412;display:flex;gap:10px;align-items:flex-start}
.c12-or-tip i.fas{color:#ea580c;font-size:14px;margin-top:2px;flex-shrink:0}
.c12-or-tip-t{font-size:12px;color:#7c2d12;font-weight:500;margin-bottom:2px}
.c12-or-tip-s{font-size:11px;color:#9a3412;line-height:1.6}
.c12-or-tip-s code{background:#fed7aa;padding:1px 5px;border-radius:3px;font-family:Menlo,Consolas,monospace;font-size:11px}
.c12-or-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:12px}
.c12-or-stat{border:1px solid;border-radius:8px;padding:10px 12px;text-align:center}
.c12-or-stat .lb{font-size:11px;font-weight:500}
.c12-or-stat .vv{font-size:22px;font-weight:500;margin-top:2px;font-family:monospace}
.c12-or-hide{display:none}
.c12-or-form{margin-bottom:12px}
.c12-or-list{background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px;padding:6px;max-height:260px;overflow-y:auto;margin-bottom:10px}
.c12-or-list:empty::before{content:'— 暂无孤儿图 —';display:block;text-align:center;color:#94a3b8;font-size:12px;padding:20px}
.c12-or-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border-bottom:1px solid #e5e7eb;font-size:12px}
.c12-or-row:last-child{border-bottom:none}
.c12-or-row input[type=checkbox]{margin:0;cursor:pointer}
.c12-or-row .nm{flex:1;font-family:monospace;color:#1f2937;word-break:break-all}
.c12-or-row .nm i.fas{color:#94a3b8;margin-right:4px}
.c12-or-row .sz{color:#64748b;white-space:nowrap;font-size:11px}
.c12-or-row .ag{color:#94a3b8;white-space:nowrap;font-size:11px}
.c12-or-actions{display:flex;align-items:center;gap:8px}
.c12-or-del-btn{background:linear-gradient(135deg,#dc2626,#ef4444);color:#fff;border:none;border-radius:8px;padding:8px 16px;font-size:13px;font-weight:500;cursor:pointer}
.c12-or-del-btn:disabled{background:#cbd5e1;cursor:not-allowed;color:#94a3b8}
.c12-or-del-btn:not(:disabled):hover{filter:brightness(1.05)}
.c12-or-bottom-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.c12-or-scan-btn{background:linear-gradient(135deg,#0E9F6E,#15803D);color:#fff;border:none;border-radius:8px;padding:8px 16px;font-size:13px;font-weight:500;cursor:pointer}
.c12-or-scan-btn:hover{filter:brightness(1.05)}
.c12-or-scan-btn:disabled{background:#cbd5e1;cursor:wait;color:#94a3b8}
.c12-or-last{font-size:11px;color:#94a3b8;margin-left:auto}

/* ============================================================
 * c13 批次样式 (r28p4u-c13) — admin 端服务器状态卡 + 私信图片消息
 * ============================================================ */
.c13-srv-card{background:#fafafa;border:1px solid #e5e7eb;border-radius:10px;padding:12px 14px}
.c13-srv-card-hd{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:13px;color:var(--text)}
.c13-srv-card-t{flex:1;font-weight:500}
.c13-srv-pct{font-family:monospace;font-size:16px;font-weight:500;color:#0E9F6E}
.c13-srv-bar{height:8px;background:#f1f5f9;border-radius:4px;overflow:hidden;margin-bottom:6px}
.c13-srv-bar-fl{height:100%;background:linear-gradient(90deg,#0E9F6E,#15803D);border-radius:4px;transition:width .3s ease}
.c13-srv-sub{font-size:11px;color:#64748b;font-family:monospace}
.c13-upload-progress{display:none;background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:12px 14px;margin:10px 0;box-shadow:0 2px 8px rgba(0,0,0,.06)}
.c13-upload-progress.show{display:block}
.c13-upload-progress-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-size:13px;color:#1f1147}
.c13-upload-progress-hd .pct{font-weight:500;color:#0E9F6E;font-family:monospace}
.c13-upload-progress-bar{height:6px;background:#f1f5f9;border-radius:3px;overflow:hidden}
.c13-upload-progress-bar .fl{height:100%;background:linear-gradient(90deg,#0E9F6E,#15803D);border-radius:3px;width:0%;transition:width .15s ease}
.c13-upload-progress-bar .fl.done{background:linear-gradient(90deg,#10b981,#059669)}
.c13-upload-progress-bar .fl.err{background:linear-gradient(90deg,#dc2626,#ef4444)}
.c13-upload-progress-sub{font-size:11px;color:#94a3b8;margin-top:4px}

/* c13-h3 1A: admin 消息气泡 hover 出现撤回按钮 */
.c13h3-msg-wrap{position:relative}
.c13h3-recall-btn{position:absolute;top:4px;right:4px;margin:0;opacity:0;transition:opacity .15s;z-index:10}
.c13h3-msg-wrap:hover .c13h3-recall-btn{opacity:1}
.c13h3-recall-tip{width:24px;height:24px;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:10px;backdrop-filter:blur(4px)}
.c13h3-recall-tip:hover{background:#dc2626}

/* ============================================================
   c14: 侧栏分组 + 设置二级导航 + 通用 sub-tab
   ============================================================ */

/* --- 侧栏分组 --- */
.c14-nav-group{margin-bottom:6px}
.c14-nav-group-hd{display:flex;align-items:center;justify-content:space-between;padding:8px 20px 4px;font-size:10.5px;letter-spacing:1.2px;color:rgba(255,255,255,.45);cursor:pointer;user-select:none;transition:color .15s}
.c14-nav-group-hd:hover{color:rgba(255,255,255,.75)}
.c14-nav-group-hd-caret{font-size:9px;opacity:.6;transition:transform .2s}
.c14-nav-group.collapsed .c14-nav-group-hd-caret{transform:rotate(-90deg)}
.c14-nav-group-body{overflow:hidden;transition:max-height .25s ease, opacity .15s}
.c14-nav-group.collapsed .c14-nav-group-body{max-height:0 !important;opacity:0;pointer-events:none}

/* --- 通用 sub-tab 切换条 (财务/沟通/权限/用户管理 共用) --- */
.c14-subtabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin:0 0 16px;padding:0;background:#fff;border-radius:10px 10px 0 0;overflow-x:auto;-webkit-overflow-scrolling:touch}
.c14-subtab{flex-shrink:0;padding:11px 20px;font-size:14px;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.15s;background:none;border-left:none;border-right:none;border-top:none;font-family:inherit;font-weight:400}
.c14-subtab:hover{color:var(--text);background:rgba(14,159,110,.04)}
.c14-subtab.active{color:#0E9F6E;border-bottom-color:#0E9F6E;font-weight:500}
.c14-subtab .c14-subtab-badge{background:#dc2626;color:#fff;font-size:10px;padding:1px 7px;border-radius:9px;font-weight:500;line-height:1.4}

/* --- 设置页布局 --- */
.c14-set-layout{display:flex;gap:14px;align-items:flex-start}
.c14-set-nav{flex-shrink:0;width:178px;background:#f8fafc;border:1px solid var(--border);border-radius:10px;padding:10px;font-size:13px;position:sticky;top:14px;max-height:calc(100vh - 32px);overflow-y:auto}
.c14-set-nav-cat{font-size:10.5px;color:#94a3b8;letter-spacing:1.2px;margin:10px 8px 6px;font-weight:500}
.c14-set-nav-cat:first-child{margin-top:2px}
.c14-set-nav-item{display:block;padding:7px 12px;border-radius:7px;color:var(--muted);text-decoration:none;cursor:pointer;margin-bottom:2px;transition:.15s;font-size:13px}
.c14-set-nav-item:hover{background:#fff;color:var(--text)}
.c14-set-nav-item.active{background:#DCFCE7;color:#0E9F6E;font-weight:500}
.c14-set-nav-item .c14-tag-new{font-size:9.5px;background:#15803D;color:#fff;padding:1px 6px;border-radius:6px;margin-left:6px;font-weight:500;letter-spacing:.3px}
.c14-set-body{flex:1;min-width:0}
.c14-set-panel{animation:c14FadeIn .15s}
@keyframes c14FadeIn{from{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}

/* 手机/小屏: 侧栏沉底 */
@media (max-width: 800px){
  .c14-set-layout{flex-direction:column}
  .c14-set-nav{width:auto;position:static;max-height:none}
}

/* --- c14-h2: 设置页 TOC 已废弃, 改用顶部分类 sub-tab (复用 .c14-subtabs 样式) --- */


/* ============================================================
 * B38 admin 端绿调白底新主题 (Supabase 风格,主页 #0E9F6E 统一)
 * 策略: 仅加不动旧 class,旧 388 行原封保留向后兼容
 *
 * r30-fix12: 原 ----- 1. token 覆盖 ----- 段已合并到顶部 :root (L16-34),
 *            消除"L16 和 B38 段两份变量"的维护陷阱
 *
 * 老板暗号:暗号(开干/全部推荐/Q1=B/测试通过/Continue/算了/没用/我都要看下)
 * R5/R6/R7 业务红线一字不动
 * 字重 ≤500 (B38 仍遵守) / 字号 ≥11px / 0 emoji
 * ============================================================ */

/* ----- 2. 全局 body 复刷 (旧 L17 的 background 用 var(--bg) 自动跟随) ----- */
body{
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;
}

/* ----- 3. 侧栏白底化 (核心重构) ----- */
/* 旧 .sidebar 是深底 (#1e1e2e + 白字),整段重写为白底深字 */
.layout > .sidebar{
  background:#ffffff;
  color:var(--text);
  border-right:0.5px solid var(--border);
  box-shadow:none;
}
.layout > .sidebar .sidebar-logo{
  border-bottom:0.5px solid var(--border);
  padding:18px 20px 14px;
}
.layout > .sidebar .sidebar-logo h2{
  font-size:15px;
  font-weight:500;
  color:var(--text);
  display:flex;
  align-items:center;
  gap:8px;
}
.layout > .sidebar .sidebar-logo span{
  color:var(--muted);
  opacity:1;
  font-size:11px;
  margin-top:3px;
}
/* 分组标题 (c14-nav-group-hd) 颜色重置 */
.layout > .sidebar .c14-nav-group-hd{
  color:var(--muted);
  font-weight:500;
  padding:10px 20px 4px;
  font-size:11px;
  letter-spacing:0.8px;
}
.layout > .sidebar .c14-nav-group-hd:hover{
  color:var(--text);
}
/* nav-link 改为白底浅悬停 */
.layout > .sidebar .nav-link{
  color:var(--muted);
  padding:8px 20px;
  font-size:13.5px;
  border-radius:0;
  margin-right:0;
  transition:background .12s,color .12s;
}
.layout > .sidebar .nav-link:hover{
  background:#f5f5f5;
  color:var(--text);
}
.layout > .sidebar .nav-link.active{
  color:var(--text);
  background:var(--bf-primary-50);
  border-left:2px solid var(--primary);
  padding-left:18px;        /* 抵消 2px border 让文字位置不动 */
  border-radius:0;
  margin-right:0;
  font-weight:500;
}
.layout > .sidebar .nav-link i{
  color:inherit;
  opacity:.85;
}
.layout > .sidebar .nav-link.active i{
  color:var(--primary);
  opacity:1;
}
/* nav-badge 走主色,数字红色仅留给提现/异常 */
.layout > .sidebar .nav-link .nav-badge{
  background:var(--primary);
  color:#fff;
  font-weight:500;
  font-size:10.5px;
  padding:1px 7px;
  border-radius:9px;
}
/* 侧栏底部 */
.layout > .sidebar .sidebar-bottom{
  border-top:0.5px solid var(--border);
  padding:14px 20px;
}
.layout > .sidebar .sidebar-user{
  color:var(--muted);
  opacity:1;
  font-size:12.5px;
}
.layout > .sidebar .btn-logout{
  background:#f5f5f5;
  color:var(--text);
  border:0.5px solid var(--border);
  font-weight:500;
  transition:background .12s;
}
.layout > .sidebar .btn-logout:hover{
  background:#eee;
}

/* ----- 4. 顶栏复刷 ----- */
.layout > .main > .topbar{
  background:#ffffff;
  border-bottom:0.5px solid var(--border);
  box-shadow:none;
  padding:12px 24px;
}
.layout > .main > .topbar .topbar-title{
  font-size:16px;
  font-weight:500;
  color:var(--text);
}
.layout > .main > .topbar .topbar-sub{
  color:var(--muted);
  font-size:11.5px;
}

/* ----- 5. 主内容区背景 (admin.css 旧 .main 没单独样式,这里加) ----- */
.layout > .main{
  background:var(--bg);
}

/* ----- 6. 登录页绿调化 ----- */
.login-wrap{
  background:#fafafa;
}
.login-card .login-logo i{
  color:var(--primary);
}

/* ============================================================
 * B38 通用组件库 (bf- 前缀,brand-fresh)
 * view 文件改造时按需替换;旧 class 一律不动
 * ============================================================ */

/* ----- 按钮 ----- */
.bf-btn{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:7px 14px;
  border-radius:6px;
  border:0.5px solid var(--border);
  background:#fff;
  color:var(--text);
  font-size:13px;
  font-weight:500;
  cursor:pointer;
  transition:background .12s,border-color .12s;
  font-family:inherit;
}
.bf-btn:hover{
  background:#f5f5f5;
  border-color:#d4d4d8;
}
.bf-btn:active{
  transform:scale(.985);
}
.bf-btn-primary{
  background:var(--primary);
  border-color:var(--primary);
  color:#fff;
}
.bf-btn-primary:hover{
  background:var(--bf-primary-600);
  border-color:var(--bf-primary-600);
}
.bf-btn-danger{
  background:var(--danger);
  border-color:var(--danger);
  color:#fff;
}
.bf-btn-danger:hover{
  background:#b91c1c;
  border-color:#b91c1c;
}
.bf-btn-ghost{
  background:transparent;
  border-color:transparent;
  color:var(--muted);
}
.bf-btn-ghost:hover{
  background:#f5f5f5;
  color:var(--text);
}
.bf-btn-sm{padding:4px 10px;font-size:12px}
.bf-btn-lg{padding:9px 18px;font-size:14px}

/* ----- 卡片 ----- */
.bf-card{
  background:#fff;
  border:0.5px solid var(--border);
  border-radius:8px;
  padding:16px 18px;
}
.bf-card-lg{padding:20px 22px;border-radius:10px}
.bf-card-sm{padding:12px 14px}
.bf-card-hd{
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-bottom:12px;
  padding-bottom:12px;
  border-bottom:0.5px solid var(--border);
}
.bf-card-title{
  font-size:14px;
  font-weight:500;
  color:var(--text);
}
.bf-card-sub{
  font-size:12px;
  color:var(--muted);
  margin-top:2px;
}

/* ----- 数据卡片 (统计/KPI) ----- */
.bf-stat{
  background:#fff;
  border:0.5px solid var(--border);
  border-radius:8px;
  padding:14px 16px;
}
.bf-stat-lbl{
  font-size:12px;
  color:var(--muted);
  margin-bottom:6px;
}
.bf-stat-val{
  font-size:22px;
  font-weight:500;
  color:var(--text);
  line-height:1.2;
  font-feature-settings:"tnum" 1;
}
.bf-stat-val.up{color:var(--primary)}
.bf-stat-val.down{color:var(--danger)}
.bf-stat-delta{
  font-size:11.5px;
  color:var(--muted);
  margin-top:4px;
}
.bf-stat-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:12px;
}

/* ----- 表格 ----- */
.bf-table-wrap{
  background:#fff;
  border:0.5px solid var(--border);
  border-radius:8px;
  overflow:hidden;
}
.bf-table{
  width:100%;
  border-collapse:collapse;
  font-size:13px;
}
.bf-table thead th{
  background:#fafafa;
  color:var(--muted);
  font-weight:500;
  font-size:11.5px;
  text-align:left;
  padding:9px 14px;
  border-bottom:0.5px solid var(--border);
  white-space:nowrap;
}
.bf-table tbody td{
  padding:11px 14px;
  border-bottom:0.5px solid var(--border);
  color:var(--text);
  vertical-align:middle;
}
.bf-table tbody tr:last-child td{border-bottom:none}
.bf-table tbody tr:hover{background:#fafafa}
.bf-table-num{
  font-feature-settings:"tnum" 1;
  text-align:right;
  white-space:nowrap;
}

/* ----- 徽章/标签 ----- */
.bf-badge{
  display:inline-flex;
  align-items:center;
  gap:4px;
  padding:2px 9px;
  border-radius:4px;
  font-size:11.5px;
  font-weight:500;
  line-height:1.5;
  background:#f5f5f5;
  color:var(--muted);
}
.bf-badge-primary{background:var(--bf-primary-50);color:var(--bf-primary-800)}
.bf-badge-success{background:#dcfce7;color:#166534}
.bf-badge-warning{background:#fef3c7;color:#92400e}
.bf-badge-danger{background:#fee2e2;color:#991b1b}
.bf-badge-info{background:#dbeafe;color:#1e40af}
.bf-badge-dot::before{
  content:"";
  width:6px;
  height:6px;
  border-radius:50%;
  background:currentColor;
  display:inline-block;
}

/* ----- 表单 ----- */
.bf-form-row{
  display:flex;
  flex-direction:column;
  gap:6px;
  margin-bottom:14px;
}
.bf-form-lbl{
  font-size:12.5px;
  font-weight:500;
  color:var(--text);
}
.bf-form-hint{
  font-size:11px;
  color:var(--muted);
  margin-top:3px;
}
.bf-input,
.bf-select,
.bf-textarea{
  display:block;
  width:100%;
  padding:8px 11px;
  font-size:13px;
  font-family:inherit;
  background:#fff;
  color:var(--text);
  border:0.5px solid var(--border);
  border-radius:6px;
  outline:none;
  transition:border-color .12s,box-shadow .12s;
  box-sizing:border-box;
}
.bf-input:focus,
.bf-select:focus,
.bf-textarea:focus{
  border-color:var(--primary);
  box-shadow:0 0 0 3px rgba(29,194,138,.12);
}
.bf-textarea{resize:vertical;min-height:80px;line-height:1.5}

/* ----- 工具栏(列表页顶部:搜索/筛选/批量) ----- */
.bf-toolbar{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  margin-bottom:14px;
}
.bf-toolbar-spacer{flex:1}

/* ----- 分隔块 / 空状态 ----- */
.bf-empty{
  text-align:center;
  padding:48px 20px;
  color:var(--muted);
}
.bf-empty i{
  font-size:32px;
  opacity:.4;
  display:block;
  margin-bottom:10px;
}
.bf-empty-title{
  font-size:14px;
  font-weight:500;
  color:var(--text);
  margin-bottom:4px;
}

/* ----- 工作区容器 (page-wrap 内层) ----- */
.bf-section{
  margin-bottom:18px;
}
.bf-section-hd{
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  margin-bottom:10px;
}
.bf-section-title{
  font-size:14px;
  font-weight:500;
  color:var(--text);
}
.bf-section-sub{
  font-size:11.5px;
  color:var(--muted);
  margin-top:2px;
}

