/* ============================================================
   大管家 · UI 总监全局覆盖样式 (dg-ui-uidir.css)  v1
   加载顺序（请主编排者在 index.html 中追加，位于 dg-ui-overrides.css 之后）：
     <link rel="stylesheet" href="/src/css/dg-ui-uidir.css">
   本文件【最后加载】，仅做组件级别 !important 兜底与硬编码色覆盖；品牌红令牌来源统一为 brand.css（单一真源），本文件不再重复定义 --primary 等。
   ------------------------------------------------------------
   作用域：
     A. （已废弃）品牌红令牌现已统一至 brand.css，本文件不再定义 --primary 等令牌，仅消费之
     B. 主色组件兜底（防止压缩包/组件行内样式盖过令牌）
     C. 硬编码 indigo/purple/blue 组件残留（style.css 内的 rgba）
     D. 内联 hex 兜底层（压缩包/页面 JS 写死的靛蓝紫蓝 → 品牌红）
     E. 统一空态 / 加载态
     F. 标题/卡片/按钮 排版归一
     G. 移动端加固（不与 responsive.css 冲突，仅补充）
   性质：ADDITIVE，不修改 app.bundle.js / 既有页面 JS。
         回退方式：删 index.html 中本 <link> 一行即可。
   ============================================================ */


/* ============ B. 主色组件兜底（!important 防止被压缩包行内样式盖过）============ */
.btn-primary, .btn.primary, button.primary, .dg-btn.primary{
  background: var(--primary)!important; color:#fff!important;
  box-shadow: var(--glow-primary)!important;
}
.btn-primary:hover, .btn.primary:hover, .dg-btn.primary:hover{ background: var(--primary-dark)!important; }
a, .link{ color: var(--primary); }
a:hover{ color: var(--primary-dark); }
.sec-bar, .card-title::before, .sec-title .sec-bar{ background: var(--primary)!important; }
.kpi-primary .kpi-num, .kpi-num.primary, .stat-value, .ns-num, .ns-primary .ns-num{ color: var(--text-strong)!important; }  /* 大号数字去红，红仅语义 */

/* 主色徽标：非语义徽标统一「浅红底 + 深红字」 */
.dg-badge:not(.muted):not(.success):not(.warning):not(.danger),
.badge:not(.muted):not(.success):not(.warning):not(.danger){
  background: var(--primary-light)!important; color: var(--primary-dark)!important;
}

/* 激活态/选中态（侧栏、导航）品牌红描边与浅红底 */
.nav-item.active{ border-left-color: var(--primary)!important; }
.nav-sub-item.active{ color: var(--primary)!important; box-shadow: inset 2px 0 0 var(--primary)!important; }

/* ============ C. 硬编码 indigo/purple/blue 组件（style.css 内的 rgba 残留）============ */
.sidebar{ border-right: 1px solid rgba(var(--primary-rgb),.12)!important; }
.sidebar-header{ border-bottom: 1px solid rgba(var(--primary-rgb),.10)!important; }
.logo-icon{ background: var(--primary)!important; box-shadow: 0 3px 10px rgba(var(--primary-rgb),.35)!important; }
.nav-item.active{ background: linear-gradient(90deg, rgba(var(--primary-rgb),.16), rgba(var(--primary-rgb),.04))!important; }
.nav-sub-item.active{ background: rgba(var(--primary-rgb),.08)!important; }
.btn-primary:hover{ box-shadow: 0 8px 22px rgba(var(--primary-rgb),.34)!important; }
.wb-v2 .wb-q{ box-shadow: 0 2px 8px rgba(var(--primary-rgb),.25)!important; }
.wb-v2 .wb-card, .wb-v2 .wb-card.todo{ border-left-color: var(--primary)!important; }

/* ============ D. 内联 hex 兜底层（压缩包/页面 JS 写死的靛蓝紫蓝 → 品牌红）============
   机制：属性选择器 + !important 覆盖行内 style。按「属性精确匹配」避免误伤其他属性。
   覆盖色：品牌红 var(--primary) / var(--primary-dark)（旧 indigo/violet 已废弃）；
          blue #3B82F6 / #2F74E0 / var(--info)；pink var(--primary)。 */

/* —— color —— */
[style*=";color:#6366f1" i],[style*=" color:#6366f1" i],[style^="color:#6366f1" i],
[style*=";color:#4f46e5" i],[style*=" color:#4f46e5" i],[style^="color:#4f46e5" i],
[style*=";color:#8b5cf6" i],[style*=" color:#8b5cf6" i],[style^="color:#8b5cf6" i],
[style*=";color:#7c3aed" i],[style*=" color:#7c3aed" i],[style^="color:#7c3aed" i],
[style*=";color:#a855f7" i],[style*=" color:#a855f7" i],[style^="color:#a855f7" i],
[style*=";color:#6d28d9" i],[style*=" color:#6d28d9" i],[style^="color:#6d28d9" i],
[style*=";color:#818cf8" i],[style*=" color:#818cf8" i],[style^="color:#818cf8" i],
[style*=";color:#3b82f6" i],[style*=" color:#3b82f6" i],[style^="color:#3b82f6" i],
[style*=";color:#2f74e0" i],[style*=" color:#2f74e0" i],[style^="color:#2f74e0" i],
[style*=";color:var(--info)" i],[style*=" color:var(--info)" i],[style^="color:var(--info)" i],
[style*=";color:var(--primary)" i],[style*=" color:var(--primary)" i],[style^="color:var(--primary)" i]{
  color: var(--primary)!important;
}

/* —— background —— */
[style*=";background:#6366f1" i],[style*=" background:#6366f1" i],[style^="background:#6366f1" i],
[style*=";background:#4f46e5" i],[style*=" background:#4f46e5" i],[style^="background:#4f46e5" i],
[style*=";background:#8b5cf6" i],[style*=" background:#8b5cf6" i],[style^="background:#8b5cf6" i],
[style*=";background:#7c3aed" i],[style*=" background:#7c3aed" i],[style^="background:#7c3aed" i],
[style*=";background:#a855f7" i],[style*=" background:#a855f7" i],[style^="background:#a855f7" i],
[style*=";background:#6d28d9" i],[style*=" background:#6d28d9" i],[style^="background:#6d28d9" i],
[style*=";background:#818cf8" i],[style*=" background:#818cf8" i],[style^="background:#818cf8" i],
[style*=";background:#3b82f6" i],[style*=" background:#3b82f6" i],[style^="background:#3b82f6" i],
[style*=";background:#2f74e0" i],[style*=" background:#2f74e0" i],[style^="background:#2f74e0" i],
[style*=";background:var(--info)" i],[style*=" background:var(--info)" i],[style^="background:var(--info)" i],
[style*=";background:var(--primary)" i],[style*=" background:var(--primary)" i],[style^="background:var(--primary)" i]{
  background: var(--primary)!important;
}

/* —— background-color —— */
[style*=";background-color:#6366f1" i],[style*=" background-color:#6366f1" i],[style^="background-color:#6366f1" i],
[style*=";background-color:#4f46e5" i],[style*=" background-color:#4f46e5" i],[style^="background-color:#4f46e5" i],
[style*=";background-color:#8b5cf6" i],[style*=" background-color:#8b5cf6" i],[style^="background-color:#8b5cf6" i],
[style*=";background-color:#7c3aed" i],[style*=" background-color:#7c3aed" i],[style^="background-color:#7c3aed" i],
[style*=";background-color:#a855f7" i],[style*=" background-color:#a855f7" i],[style^="background-color:#a855f7" i],
[style*=";background-color:#6d28d9" i],[style*=" background-color:#6d28d9" i],[style^="background-color:#6d28d9" i],
[style*=";background-color:#818cf8" i],[style*=" background-color:#818cf8" i],[style^="background-color:#818cf8" i],
[style*=";background-color:#3b82f6" i],[style*=" background-color:#3b82f6" i],[style^="background-color:#3b82f6" i],
[style*=";background-color:#2f74e0" i],[style*=" background-color:#2f74e0" i],[style^="background-color:#2f74e0" i],
[style*=";background-color:var(--info)" i],[style*=" background-color:var(--info)" i],[style^="background-color:var(--info)" i],
[style*=";background-color:var(--primary)" i],[style*=" background-color:var(--primary)" i],[style^="background-color:var(--primary)" i]{
  background-color: var(--primary)!important;
}

/* —— border-color —— */
[style*=";border-color:#6366f1" i],[style*=" border-color:#6366f1" i],[style^="border-color:#6366f1" i],
[style*=";border-color:#4f46e5" i],[style*=" border-color:#4f46e5" i],[style^="border-color:#4f46e5" i],
[style*=";border-color:#8b5cf6" i],[style*=" border-color:#8b5cf6" i],[style^="border-color:#8b5cf6" i],
[style*=";border-color:#7c3aed" i],[style*=" border-color:#7c3aed" i],[style^="border-color:#7c3aed" i],
[style*=";border-color:#a855f7" i],[style*=" border-color:#a855f7" i],[style^="border-color:#a855f7" i],
[style*=";border-color:#6d28d9" i],[style*=" border-color:#6d28d9" i],[style^="border-color:#6d28d9" i],
[style*=";border-color:#818cf8" i],[style*=" border-color:#818cf8" i],[style^="border-color:#818cf8" i],
[style*=";border-color:#3b82f6" i],[style*=" border-color:#3b82f6" i],[style^="border-color:#3b82f6" i],
[style*=";border-color:#2f74e0" i],[style*=" border-color:#2f74e0" i],[style^="border-color:#2f74e0" i],
[style*=";border-color:var(--info)" i],[style*=" border-color:var(--info)" i],[style^="border-color:var(--info)" i],
[style*=";border-color:var(--primary)" i],[style*=" border-color:var(--primary)" i],[style^="border-color:var(--primary)" i]{
  border-color: var(--primary)!important;
}

/* —— 渐变背景（含 indigo/violet/blue）整体替换为品牌渐变 —— */
[style*="linear-gradient" i][style*="6366f1" i],
[style*="linear-gradient" i][style*="4f46e5" i],
[style*="linear-gradient" i][style*="8b5cf6" i],
[style*="linear-gradient" i][style*="7c3aed" i],
[style*="linear-gradient" i][style*="a855f7" i],
[style*="linear-gradient" i][style*="6d28d9" i],
[style*="linear-gradient" i][style*="818cf8" i],
[style*="linear-gradient" i][style*="3b82f6" i],
[style*="linear-gradient" i][style*="2f74e0" i],
[style*="linear-gradient" i][style*="2563eb" i],
[style*="linear-gradient" i][style*="ec4899" i]{
  background: var(--gradient-brand)!important;
}

/* ============ E. 统一空态 / 加载态 ============ */
/* E1. .empty-state（design_tokens 规划中/待启用占位）：去掉 emoji 大图标，换成品牌红线性插画 */
.empty-state{ color: var(--text-muted, #64748B); }
.empty-state-icon{
  font-size: 0!important;                 /* 隐藏 emoji 字符 */
  width: 88px; height: 88px; margin-bottom: var(--space-3, var(--space-3));
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 18px; background: var(--primary-light);
}
.empty-state-icon::before{
  content: ""; width: 48px; height: var(--space-12);
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23E60012' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='16' rx='2'/%3E%3Cpath d='M3 9h18'/%3E%3Cline x1='8' y1='14' x2='16' y2='14'/%3E%3Cline x1='8' y1='17' x2='13' y2='17'/%3E%3C/svg%3E") center / contain no-repeat;
}
.empty-state h3, .empty-state .title{ font-size: 16px; font-weight: 700; color: var(--text-strong, #0F172A); margin: var(--space-1) 0 6px; }
.empty-state p{ font-size: 13px; line-height: 1.7; color: var(--text-muted, #64748B); max-width: 420px; }

/* E2. 加载态：裸「加载中」升级为品牌红旋转 spinner（.wb-loading / .loading） */
.wb-loading, .loading{
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-3); color: var(--text-muted, #64748B); font-size: 13px;
}
.wb-loading::before, .loading::before{
  content: ""; width: 28px; height: 28px; border-radius: 50%;
  border: 3px solid var(--primary-light); border-top-color: var(--primary);
  animation: dg-spin .8s linear infinite;
}
@keyframes dg-spin{ to{ transform: rotate(360deg); } }

/* E3. 接口异常提示（如「数据加载失败」）友好化：红底提示块，避免裸文字 */
.data-error, .load-error, .api-error, .load-fail{
  display: flex; align-items: center; gap: var(--space-2);
 color: var(--danger, var(--danger)); background: var(--danger-light, #FFE4E6);
  border: 1px solid #ffd0d6; border-radius: var(--radius-md); padding: var(--space-3) var(--space-4); font-size: 13px;
}

/* ============ F. 标题/卡片/按钮 排版归一（清晰优先，B 端）============ */
body{ font-family: var(--font-sans, "Microsoft YaHei","PingFang SC",sans-serif); }
h1{ font-size: 22px; font-weight: 700; color: var(--gray-900, #0F172A); }
h2{ font-size: 18px; font-weight: 700; color: var(--gray-800, var(--gray-800)); }
h3{ font-size: 16px; font-weight: 600; color: var(--gray-800, var(--gray-800)); }
.page-h{ font-size: 18px; font-weight: 700; color: var(--gray-800, var(--gray-800)); margin-bottom: var(--space-4); }
.card-title{ font-size: 15px; font-weight: 600; color: var(--gray-900, #0F172A); }
.sec-title, .sec-title .t{ font-size: 15px; font-weight: 600; color: var(--gray-900, #0F172A); }

/* 卡片统一圆角/描边（与 --dg-radius 对齐，避免各页 6/8/12px 混用） */
.card, .dg-card, .kpi-card{ border-radius: 12px; border: 1px solid var(--border, #E2E8F0); }

/* ============ G. 移动端加固（与 responsive.css 互补，不冲突）============ */
/* 触控友好：按钮/导航/输入框最小高度，移动端聚焦不缩放 */
input, select, textarea, button, .btn, .nav-item{ min-height: 40px; }
@media (max-width: 820px){
  .card, .dg-card, .kpi-card{ padding: 16px!important; }
  .page-h{ font-size: 17px; }
  .main-content{ -webkit-text-size-adjust: 100%; }
}
