/* ==========================================================================
 * 盛猛科技后台 - Ant Design Pro 风格重设计
 *
 * 设计参考：Ant Design Pro v5 (中后台业界标杆)
 * 主色：绿色品牌 #16a34a（与 APP 端 token 一致）
 *
 * 不动 HTML / JS。用高优先级选择器覆盖原 style.css / submodules.css 等老样式。
 * 必须放所有其他 CSS 之后引入。
 * ========================================================================== */

/* ============ CSS 变量系统（Layer 2: Linear 风改造 2026-05-19）============
 * Linear 风：
 *   - 极简（仅 1 主色 + 5 灰阶 + 3 状态色）
 *   - 大量留白（spacing scale 4/8/16/24/32/48）
 *   - 极弱阴影（靠边框分层，不靠阴影）
 *   - 极细边框（1px 浅 #e4e4e7）
 *   - 小圆角（4-6-8）
 *   - 浅色 sider（保留品牌绿选中态识别度）
 *   - 状态色使用 Tailwind 同步纯净版（绿/橙/红/蓝）
 * 主色 #16a34a（品牌绿）业主拍板保留。
 * ========================================================================== */
:root {
  /* 主色 2026-06-02 业主拍板「完全照星宏」：青绿 #1ab394（INSPINIA/H+ 风，深蓝侧栏+青绿主操作） */
  --ant-primary: #1ab394;
  --ant-primary-hover: #18a689;
  --ant-primary-active: #15917a;
  --ant-primary-bg: #e6f7f2;       /* 极淡青绿背景 */
  --ant-primary-border: #b5e6d9;   /* 浅青绿边框 */

  /* 中性色（保留 Ant Design rgba 层次） */
  --ant-text-primary: rgba(0, 0, 0, 0.88);
  --ant-text-secondary: rgba(0, 0, 0, 0.65);
  --ant-text-tertiary: rgba(0, 0, 0, 0.45);
  --ant-text-disabled: rgba(0, 0, 0, 0.25);

  /* 深蓝品牌色（侧栏/登录 chrome — 2026-05-28 阶段0.1：双色方案=深蓝框架 + 绿主操作） */
  --ant-brand-blue: #1a2b4a;        /* 侧栏主底 */
  --ant-brand-blue-light: #243a5e;  /* 侧栏 hover / 子菜单底 */
  --ant-brand-blue-deep: #14223d;   /* 更深：header / 分隔 */

  /* 背景与边框（略带蓝灰，呼应深蓝框架） */
  --ant-bg-page: #f4f6fa;
  --ant-bg-card: #ffffff;
  --ant-bg-hover: #f1f4f9;
  --ant-bg-selected: #e6f7f2;       /* 极淡青绿选中 */
  --ant-border: #e2e8f0;
  --ant-border-soft: #eef1f6;
  --ant-divider: rgba(15, 29, 54, 0.06);

  /* 侧栏（深蓝化：白字 + 绿 active accent） */
  --ant-sider-bg: #1a2b4a;
  --ant-sider-trigger: #243a5e;
  --ant-sider-text: rgba(255, 255, 255, 0.70);
  --ant-sider-text-hover: #ffffff;
  --ant-sider-text-active: #ffffff;
  --ant-sider-border: rgba(255, 255, 255, 0.08);
  --ant-sider-active-bg: rgba(26, 179, 148, 0.22); /* 半透明青绿 active 底 */
  --ant-sider-active-bar: #1ab394;                 /* 青绿左竖条 */

  /* 状态色（Tailwind palette，更纯净） */
  --ant-success: #16a34a;
  --ant-warning: #f59e0b;
  --ant-error: #ef4444;
  --ant-info: #3b82f6;
  --ant-success-bg: rgba(22, 163, 74, 0.08);
  --ant-warning-bg: rgba(245, 158, 11, 0.08);
  --ant-error-bg: rgba(239, 68, 68, 0.08);
  --ant-info-bg: rgba(59, 130, 246, 0.08);

  /* 装饰色（V3 钻石团长 / 警告卡片 / 代码字段，等业务有特殊语义的） */
  --ant-purple: #a855f7;
  --ant-purple-bg: #f3e5f5;
  --ant-pink: #e83e8c;

  /* 阴影：恢复层次（治"空洞"关键 — 2026-05-28 阶段0.1 加强 + 加 shadow-3） */
  --ant-shadow-1: 0 1px 3px rgba(15, 29, 54, 0.08), 0 1px 2px rgba(15, 29, 54, 0.04);
  --ant-shadow-2: 0 4px 12px rgba(15, 29, 54, 0.10);
  --ant-shadow-3: 0 12px 28px rgba(15, 29, 54, 0.12);

  /* 字号（Linear 风 13/14/16 已合理，保留） */
  --ant-fs-xs: 12px;
  --ant-fs-sm: 13px;
  --ant-fs-base: 14px;
  --ant-fs-lg: 16px;
  --ant-fs-xl: 20px;
  --ant-fs-2xl: 24px;

  /* 圆角（Linear 风偏小） */
  --ant-radius-sm: 4px;
  --ant-radius: 6px;
  --ant-radius-lg: 8px;

  /* 间距系统（Linear 风大量留白，新加） */
  --ant-spacing-xs: 4px;
  --ant-spacing-sm: 8px;
  --ant-spacing-md: 16px;
  --ant-spacing-lg: 24px;
  --ant-spacing-xl: 32px;
  --ant-spacing-2xl: 48px;
}

/* ============ 全局重置 ============ */
body {
  background: var(--ant-bg-page) !important;
  color: var(--ant-text-primary) !important;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB',
    'Microsoft YaHei', 'Helvetica Neue', Arial, sans-serif !important;
  font-size: var(--ant-fs-base) !important;
  line-height: 1.5715 !important;
  -webkit-font-smoothing: antialiased;
  overflow: auto !important;
}

* {
  box-sizing: border-box;
}

/* ============ 登录页 ============ */
.login-container {
  background: var(--ant-bg-page) !important;
}
.login-card {
  border-radius: var(--ant-radius-lg) !important;
  box-shadow: var(--ant-shadow-2) !important;
  background: var(--ant-bg-card) !important;
  border: none !important;
  backdrop-filter: none !important;
  padding: 40px !important;
}
/* Linear 风：去渐变，纯主色文字 + 纯主色右侧背景 */
.brand-logo i,
.brand-title {
  color: var(--ant-primary) !important;
  background: none !important;
  -webkit-text-fill-color: var(--ant-primary) !important;
}
.login-right {
  background: linear-gradient(150deg, var(--ant-brand-blue-light) 0%, var(--ant-brand-blue-deep) 100%) !important;
}
.login-btn {
  background: var(--ant-primary) !important;
  border: 1px solid var(--ant-primary) !important;
  border-radius: var(--ant-radius) !important;
  height: 40px !important;
  font-size: var(--ant-fs-base) !important;
  font-weight: 500 !important;
  box-shadow: none !important;                  /* Linear 风：去阴影 */
  transition: all 0.15s !important;
  color: #fff !important;
}
.login-btn:hover {
  background: var(--ant-primary-hover) !important;
  border-color: var(--ant-primary-hover) !important;
}
.forgot-password,
.login-footer a {
  color: var(--ant-primary) !important;
}

/* ============ 后台框架：侧栏 ============ */
.admin-container {
  display: flex !important;
  min-height: 100vh !important;
  background: var(--ant-bg-page) !important;
}

.sidebar {
  width: 240px !important;
  min-width: 240px !important;
  background: var(--ant-sider-bg) !important;
  border-right: 1px solid var(--ant-sider-border) !important; /* Linear 风：浅 sider 用细边框分隔 */
  box-shadow: none !important;                                /* Linear 风：去 sider 阴影 */
  display: flex !important;
  flex-direction: column !important;
  height: 100vh !important;
  position: sticky !important;
  top: 0 !important;
  overflow-y: auto !important;
}

.sidebar-header {
  padding: 16px 20px !important;
  background: var(--ant-sider-bg) !important;
  border-bottom: 1px solid var(--ant-sider-border) !important; /* Linear 风：浅 sider 细线分隔 */
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  height: 64px !important;
}
.sidebar-header h2 {
  color: var(--ant-sider-text-hover) !important;               /* 深蓝 sider 用白色标题 */
  font-size: var(--ant-fs-lg) !important;
  font-weight: 600 !important;
  margin: 0 !important;
  letter-spacing: -0.2px !important;
}
.sidebar-logo {
  display: flex !important;
  gap: 4px !important;
}
.sidebar-logo i {
  color: var(--ant-primary) !important;
  font-size: 22px !important;
  background: none !important;
  -webkit-text-fill-color: var(--ant-primary) !important;
}

.user-info {
  padding: 12px 20px !important;
  border-bottom: 1px solid var(--ant-sider-border) !important; /* Linear 风：浅 sider 细线分隔 */
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
}
.user-info h3,
.sidebar-user-name {
  color: var(--ant-sider-text-hover) !important;               /* 深蓝 sider 用白色 */
  font-size: var(--ant-fs-sm) !important;
  margin: 0 !important;
  font-weight: 500 !important;
}
.user-info .status,
.user-info .status span {
  color: var(--ant-sider-text) !important;   /* 深蓝 sider 浅色文字（与 2674 权威块一致，消除黑字隐患） */
  font-size: var(--ant-fs-xs) !important;
}
.user-info .status .fa-circle,
.user-info .status i {
  color: var(--ant-sider-active-bar) !important;
}

.sidebar-nav {
  flex: 1 !important;
  padding: 12px 0 !important;
  overflow-y: auto !important;
}
.sidebar-nav ul,
#menuList {
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
.sidebar-nav li,
#menuList li {
  position: relative !important;
  margin: 2px 0 !important;
}
.sidebar-nav a,
.sidebar-nav button,
#menuList li > a,
#menuList li > button,
#menuList li .menu-link,
.menu-item {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  padding: 8px 24px !important;
  color: var(--ant-sider-text) !important;
  text-decoration: none !important;
  font-size: var(--ant-fs-base) !important;
  background: transparent !important;
  border: none !important;
  width: 100% !important;
  text-align: left !important;
  cursor: pointer !important;
  transition: all 0.15s !important;
  border-radius: 0 !important;
  margin: 0 !important;
}
.sidebar-nav a:hover,
.sidebar-nav button:hover,
#menuList li > a:hover,
#menuList li > button:hover,
.menu-item:hover {
  color: var(--ant-sider-text-hover) !important;
  background: var(--ant-sider-trigger) !important;            /* Linear 风：浅灰 hover */
}
.sidebar-nav a.active,
.sidebar-nav li.active > a,
.sidebar-nav li.active > button,
#menuList li.active > a,
#menuList li.active > button,
#menuList li.active,
.menu-item.active {
  color: var(--ant-sider-text-active) !important;             /* 白色文字 */
  background: var(--ant-sider-active-bg) !important;          /* 半透明绿 active 底 */
  box-shadow: inset 3px 0 0 var(--ant-sider-active-bar) !important; /* 绿色左竖条 */
  font-weight: 500 !important;
}
.sidebar-nav i,
#menuList i,
.menu-item i {
  width: 14px !important;
  text-align: center !important;
  font-size: var(--ant-fs-base) !important;
}

/* 子菜单容器（Linear 风浅 sider：用极淡灰底分隔） */
.submenu,
.sub-menu,
#menuList ul {
  background: var(--ant-sider-trigger) !important;
  padding: 4px 0 !important;
}

/* 子菜单项 — admin SPA 实际用 .submenu-item（div），不是 <a>（修选择器错配 bug） */
.submenu .submenu-item,
.sub-menu .submenu-item,
.submenu-item {
  display: flex !important;
  align-items: center !important;
  padding: 9px 16px 9px 48px !important;
  font-size: var(--ant-fs-sm) !important;
  color: var(--ant-sider-text) !important;
  cursor: pointer !important;
  border-left: 3px solid transparent !important;
  transition: all 0.15s ease !important;
  position: relative !important;
}

/* 子菜单项 icon */
.submenu .submenu-item > i,
.sub-menu .submenu-item > i,
.submenu-item > i {
  margin-right: 10px !important;
  width: 14px !important;
  text-align: center !important;
  font-size: 12px !important;
  color: var(--ant-sider-text) !important;
  opacity: 0.6 !important;
}

/* 子菜单项 文字 */
.submenu .submenu-item > span,
.sub-menu .submenu-item > span,
.submenu-item > span {
  flex: 1 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}

/* hover — 深蓝 sider：半透明白背景 + 文字变白 + icon 高亮 */
.submenu .submenu-item:hover,
.sub-menu .submenu-item:hover,
.submenu-item:hover {
  background: rgba(255, 255, 255, 0.06) !important;
  color: var(--ant-sider-text-hover) !important;
}
.submenu .submenu-item:hover > i,
.submenu-item:hover > i {
  color: var(--ant-primary) !important;
  opacity: 1 !important;
}

/* active — 深蓝 sider：左侧绿条 + 半透明绿底 + 白字 */
.submenu .submenu-item.active,
.sub-menu .submenu-item.active,
.submenu-item.active {
  background: var(--ant-sider-active-bg) !important;
  color: var(--ant-sider-text-active) !important;
  border-left-color: var(--ant-sider-active-bar) !important;
  font-weight: 500 !important;
}
.submenu .submenu-item.active > i,
.submenu-item.active > i {
  color: var(--ant-primary) !important;
  opacity: 1 !important;
}

/* 旋转箭头（父菜单展开时 chevron 转 180°） */
.menu-toggle.rotated {
  transform: rotate(180deg) !important;
  transition: transform 0.2s ease !important;
}
.menu-toggle {
  transition: transform 0.2s ease !important;
}

/* 暗色模式下子菜单容器（继承 --ant-sider-trigger 即可，无需硬编码） */
html[data-theme="dark"] .submenu,
html[data-theme="dark"] .sub-menu,
html[data-theme="dark"] #menuList ul {
  background: var(--ant-sider-trigger) !important;
}

/* ============ 主内容 ============ */
.main-content {
  flex: 1 !important;
  display: flex !important;
  flex-direction: column !important;
  min-width: 0 !important;
  background: var(--ant-bg-page) !important;
}

/* 顶部导航（Linear 风：去 shadow，仅靠 border-bottom 分隔） */
.top-header {
  height: 56px !important;
  padding: 0 24px !important;
  background: var(--ant-bg-card) !important;
  border-bottom: 1px solid var(--ant-border-soft) !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  box-shadow: none !important;
  position: relative;
  z-index: 10;
}
.top-header .header-left {
  display: flex;
  align-items: center;
  min-width: 0;
  flex: 1;
}
.top-header .header-right {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
}

/* page-title 兼容样式（避免老调用方 currentPageTitle 字号塌陷） */
.top-header .page-title,
.page-title {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}
.top-header .page-title i,
.page-title i {
  color: var(--ant-primary) !important;
  font-size: var(--ant-fs-base) !important;
}
.top-header h1,
.page-title h1 {
  font-size: var(--ant-fs-lg) !important;
  font-weight: 500 !important;
  margin: 0 !important;
  color: var(--ant-text-primary) !important;
}

/* ============ Breadcrumb（面包屑） ============ */
.page-breadcrumb {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: var(--ant-fs-base);
  line-height: 1.5;
  color: var(--ant-text-secondary);
  min-width: 0;
  flex-wrap: nowrap;
  overflow: hidden;
}
.breadcrumb-home {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: var(--ant-radius);
  color: var(--ant-text-secondary);
  cursor: pointer;
  transition: all 0.15s;
  text-decoration: none;
  flex-shrink: 0;
}
.breadcrumb-home:hover {
  background: var(--ant-bg-hover);
  color: var(--ant-primary);
}
.breadcrumb-home i { font-size: 14px; }

.breadcrumb-separator {
  color: var(--ant-text-tertiary);
  font-size: 10px;
  flex-shrink: 0;
}
.page-breadcrumb .breadcrumb-item {
  color: var(--ant-text-secondary);
  font-size: var(--ant-fs-base);
  flex-shrink: 0;
}
.page-breadcrumb .breadcrumb-current {
  color: var(--ant-text-primary);
  font-weight: 500;
  font-size: var(--ant-fs-base);
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  max-width: 280px;
}

/* ============ 顶栏 quick-actions（theme toggle 等内联到顶栏） ============ */
.header-actions {
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 0 8px;
  border-right: 1px solid var(--ant-divider);
  margin-right: 8px;
  height: 32px;
}
.header-actions .header-action-btn {
  width: 32px;
  height: 32px;
  border: none !important;
  background: transparent !important;
  border-radius: var(--ant-radius);
  color: var(--ant-text-secondary);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  transition: all 0.15s;
  box-shadow: none !important;
  padding: 0 !important;
}
.header-actions .header-action-btn:hover {
  background: var(--ant-bg-hover) !important;
  color: var(--ant-primary) !important;
}
.header-actions .header-action-btn.active {
  color: var(--ant-primary) !important;
  background: var(--ant-primary-bg) !important;
}

.user-menu .user-profile,
.user-profile {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 6px 12px !important;
  border-radius: var(--ant-radius) !important;
  cursor: pointer !important;
  transition: background 0.15s !important;
}
.user-profile:hover {
  background: var(--ant-bg-hover) !important;
}
.profile-info {
  display: flex !important;
  flex-direction: column !important;
  line-height: 1.3 !important;
}
.profile-name {
  font-size: var(--ant-fs-base) !important;
  color: var(--ant-text-primary) !important;
  font-weight: 500 !important;
}
.profile-permission {
  font-size: var(--ant-fs-xs) !important;
  color: var(--ant-text-tertiary) !important;
}
.profile-avatar img,
.user-avatar img,
.sidebar-avatar img {
  border-radius: 50% !important;
  width: 32px !important;
  height: 32px !important;
}

.profile-dropdown {
  position: absolute !important;
  right: 24px !important;
  top: 56px !important;
  min-width: 160px !important;
  background: var(--ant-bg-card) !important;
  border-radius: var(--ant-radius) !important;
  box-shadow: var(--ant-shadow-2) !important;
  padding: 4px !important;
  z-index: 999 !important;
  border: 1px solid var(--ant-divider) !important;
}
.dropdown-item {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 8px 12px !important;
  font-size: var(--ant-fs-base) !important;
  color: var(--ant-text-primary) !important;
  text-decoration: none !important;
  border-radius: var(--ant-radius-sm) !important;
  cursor: pointer !important;
  transition: background 0.15s !important;
}
.dropdown-item:hover {
  background: var(--ant-bg-selected) !important;
  color: var(--ant-primary) !important;
}
.dropdown-divider {
  height: 1px !important;
  margin: 4px 0 !important;
  background: var(--ant-divider) !important;
}

/* ============ 内容区 ============ */
.content,
.page-content,
.content-wrapper,
.module-content,
.dashboard-content,
.tab-content,
.main-wrapper {
  padding: 24px !important;
  background: var(--ant-bg-page) !important;
}

/* ============ 卡片 / 面板 ============ */
.card,
.panel,
.box,
.module-card,
.dashboard-card,
.stat-card,
.info-card,
.widget,
[class*="-card"]:not(.login-card):not(.profile-card):not(.user-card):not(.card-icon) {
  background: var(--ant-bg-card) !important;
  border: 1px solid var(--ant-border-soft) !important;
  border-radius: var(--ant-radius-lg) !important;
  box-shadow: var(--ant-shadow-1) !important;
  margin-bottom: 16px !important;
}

.card-header,
.panel-header,
.module-header,
.section-header {
  padding: 16px 24px !important;
  border-bottom: 1px solid var(--ant-divider) !important;
  background: transparent !important;
  font-size: var(--ant-fs-lg) !important;
  font-weight: 500 !important;
  color: var(--ant-text-primary) !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
}

.card-body,
.panel-body,
.module-body {
  padding: 24px !important;
}

/* ============ 仪表盘统计卡片 ============ */
.stat-card,
.dashboard-stat,
.metric-card {
  padding: 20px 24px !important;
}
.stat-card .value,
.stat-card .number,
.stat-value,
.metric-value {
  font-size: var(--ant-fs-2xl) !important;
  font-weight: 600 !important;
  color: var(--ant-text-primary) !important;
  line-height: 1.2 !important;
  margin: 8px 0 !important;
  font-variant-numeric: tabular-nums;
}
.stat-card .label,
.stat-card .title,
.stat-label,
.metric-label {
  font-size: var(--ant-fs-base) !important;
  color: var(--ant-text-secondary) !important;
}

/* ============ 按钮系统 ============ */
.btn,
button:not(.login-btn):not(.icon-btn):not(.close):not([class*="-toggle"]):not(.hd-action-btn) {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 6px !important;
  height: 32px !important;
  padding: 4px 15px !important;
  font-size: var(--ant-fs-base) !important;
  font-weight: 400 !important;
  line-height: 1.5715 !important;
  border-radius: var(--ant-radius) !important;
  border: 1px solid var(--ant-border) !important;
  background: var(--ant-bg-card) !important;
  color: var(--ant-text-primary) !important;
  cursor: pointer !important;
  transition: all 0.2s !important;
  box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015) !important;
}
.btn:hover,
button:not(.login-btn):not(.icon-btn):not(.hd-action-btn):hover {
  border-color: var(--ant-primary) !important;
  color: var(--ant-primary) !important;
}

.btn-primary,
.btn.primary,
button.primary,
.add-btn,
button.add-btn,
button[type="submit"]:not(.login-btn):not(.search-btn) {
  background: var(--ant-primary) !important;
  border-color: var(--ant-primary) !important;
  color: #fff !important;
}
.btn-primary:hover,
.btn.primary:hover,
button.primary:hover,
.add-btn:hover {
  background: var(--ant-primary-hover) !important;
  border-color: var(--ant-primary-hover) !important;
  color: #fff !important;
}

.btn-success,
button.success {
  background: var(--ant-success) !important;
  border-color: var(--ant-success) !important;
  color: #fff !important;
}

.btn-danger,
button.danger,
button.delete,
.delete-btn {
  background: var(--ant-error) !important;
  border-color: var(--ant-error) !important;
  color: #fff !important;
}
.btn-danger:hover,
.delete-btn:hover {
  background: #ff7875 !important;
  border-color: #ff7875 !important;
  color: #fff !important;
}

.btn-warning,
button.warning {
  background: var(--ant-warning) !important;
  border-color: var(--ant-warning) !important;
  color: #fff !important;
}

.btn-secondary,
button.secondary,
.btn-default {
  background: var(--ant-bg-card) !important;
  border-color: var(--ant-border) !important;
  color: var(--ant-text-primary) !important;
}

.btn-link,
button.link {
  background: transparent !important;
  border: none !important;
  color: var(--ant-primary) !important;
  padding: 4px 0 !important;
  height: auto !important;
  box-shadow: none !important;
}
.btn-link:hover {
  color: var(--ant-primary-hover) !important;
  background: transparent !important;
}

.btn-sm,
button.small {
  height: 24px !important;
  padding: 0 7px !important;
  font-size: var(--ant-fs-xs) !important;
}
.btn-lg,
button.large {
  height: 40px !important;
  padding: 6px 15px !important;
  font-size: var(--ant-fs-lg) !important;
}

/* ============ 表格 ============ */
table,
.data-table,
.table {
  width: 100% !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  background: var(--ant-bg-card) !important;
  border-radius: var(--ant-radius-lg) !important;
  overflow: hidden !important;
  border: 1px solid var(--ant-border-soft) !important;
}

table thead th,
table th,
.data-table th {
  background: #f3f5f9 !important;
  color: var(--ant-text-secondary) !important;
  font-weight: 600 !important;
  font-size: 13px !important;
  padding: 10px 12px !important;
  text-align: center !important;
  border-bottom: 1px solid var(--ant-divider) !important;
  white-space: nowrap !important;
}

table tbody td,
table td,
.data-table td {
  padding: 9px 12px !important;
  font-size: 13px !important;
  text-align: center !important;
  color: var(--ant-text-primary) !important;
  border-bottom: 1px solid var(--ant-border-soft) !important;
  background: var(--ant-bg-card) !important;
  vertical-align: middle !important;
}

table tbody tr:hover td,
table tbody tr:hover {
  background: var(--ant-bg-hover) !important;
}

table tbody tr:last-child td {
  border-bottom: none !important;
}

/* 表格内的操作按钮 */
table td .btn,
table td button,
table td a {
  margin-right: 8px !important;
}
table td a {
  color: var(--ant-primary) !important;
  text-decoration: none !important;
  cursor: pointer !important;
}
table td a:hover {
  color: var(--ant-primary-hover) !important;
}

/* 数据表容器横向滚动（2026-05-28：提现设置等 9 列宽表，窄屏操作列「删除」被卡片裁掉。
   根因：全局 .data-table{width:100%} 把表钉死成容器宽，挤不下又不触发容器横滚。
   修法：表格按内容撑开（min-width:100% 仍填满容器），超出时容器横向滚动而非裁切）*/
.data-table-container {
  overflow-x: auto !important;
}
.data-table-container > table.data-table {
  width: auto !important;
  min-width: 100% !important;
}

/* ============ 表单 ============ */
input[type="text"],
input[type="password"],
input[type="email"],
input[type="number"],
input[type="search"],
input[type="tel"],
input[type="date"],
input[type="datetime-local"],
input[type="time"],
input[type="url"],
textarea,
select,
.form-control {
  height: 32px !important;
  padding: 4px 11px !important;
  font-size: var(--ant-fs-base) !important;
  background: var(--ant-bg-card) !important;
  border: 1px solid var(--ant-border) !important;
  border-radius: var(--ant-radius) !important;
  color: var(--ant-text-primary) !important;
  transition: all 0.2s !important;
  width: 100% !important;
  box-sizing: border-box !important;
  box-shadow: none !important;
}

textarea {
  height: auto !important;
  min-height: 80px !important;
  padding: 8px 11px !important;
  line-height: 1.5715 !important;
}

input:hover,
select:hover,
textarea:hover {
  border-color: var(--ant-primary) !important;
}
input:focus,
select:focus,
textarea:focus {
  outline: none !important;
  border-color: var(--ant-primary) !important;
  box-shadow: 0 0 0 2px rgba(26, 179, 148, 0.1) !important;
}

input::placeholder,
textarea::placeholder {
  color: var(--ant-text-tertiary) !important;
}

label,
.form-label {
  font-size: var(--ant-fs-base) !important;
  color: var(--ant-text-primary) !important;
  font-weight: 400 !important;
  display: block !important;
  margin-bottom: 8px !important;
}

.form-group,
.form-item {
  margin-bottom: 20px !important;
}

/* 复选框 / 单选 */
input[type="checkbox"],
input[type="radio"] {
  width: 16px !important;
  height: 16px !important;
  accent-color: var(--ant-primary) !important;
  cursor: pointer !important;
}

/* ============ 状态徽章 / Tag ============ */
.badge,
.tag,
.status-badge,
.label,
.status,
[class*="status-"] {
  display: inline-flex !important;
  align-items: center !important;
  padding: 0 8px !important;
  height: 22px !important;
  font-size: var(--ant-fs-xs) !important;
  font-weight: 400 !important;
  border-radius: var(--ant-radius-sm) !important;
  background: var(--ant-bg-hover) !important;
  color: var(--ant-text-primary) !important;
  border: 1px solid var(--ant-border-soft) !important;
}

.badge.success,
.status-success,
.status-active,
.status-normal,
.status-approved,
.status-completed,
.badge-success {
  background: var(--ant-success-bg) !important;
  color: var(--ant-success) !important;
  border-color: var(--ant-primary-border) !important;
}

.badge.warning,
.status-pending,
.status-warning,
.status-processing,
.badge-warning {
  background: var(--ant-warning-bg) !important;
  color: var(--ant-warning) !important;
  border-color: #ffe58f !important;
}

.badge.danger,
.status-rejected,
.status-banned,
.status-blacklist,
.status-failed,
.badge-danger,
.badge-error {
  background: var(--ant-error-bg) !important;
  color: var(--ant-error) !important;
  border-color: #ffccc7 !important;
}

.badge.info,
.status-info,
.badge-info {
  background: var(--ant-info-bg) !important;
  color: var(--ant-info) !important;
  border-color: #91caff !important;
}

/* ============ 分页 ============ */
.pagination,
.pager {
  display: flex !important;
  align-items: center !important;
  gap: 4px !important;
  padding: 16px 0 !important;
  justify-content: flex-end !important;
}

.pagination button,
.pagination a,
.pagination li,
.pager button,
.pager a {
  min-width: 32px !important;
  height: 32px !important;
  padding: 0 8px !important;
  font-size: var(--ant-fs-base) !important;
  border: 1px solid var(--ant-border) !important;
  background: var(--ant-bg-card) !important;
  color: var(--ant-text-primary) !important;
  border-radius: var(--ant-radius) !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  cursor: pointer !important;
}

.pagination .active,
.pagination button.active,
.pagination a.active,
.pagination li.active,
.pagination li.active a,
.pager .active {
  background: var(--ant-bg-card) !important;
  border-color: var(--ant-primary) !important;
  color: var(--ant-primary) !important;
  font-weight: 500 !important;
}

/* ============ 弹窗 / 模态框 ============ */
.modal,
.dialog,
.popup,
.modal-overlay {
  background: rgba(0, 0, 0, 0.45) !important;
}

.modal-content,
.dialog-content,
.popup-content,
.modal-body-wrap {
  background: var(--ant-bg-card) !important;
  border-radius: var(--ant-radius-lg) !important;
  box-shadow: var(--ant-shadow-2) !important;
  border: none !important;
}

.modal-header,
.dialog-header {
  padding: 16px 24px !important;
  border-bottom: 1px solid var(--ant-divider) !important;
  font-size: var(--ant-fs-lg) !important;
  font-weight: 500 !important;
  color: var(--ant-text-primary) !important;
}

.modal-body {
  padding: 24px !important;
}

.modal-footer {
  padding: 12px 16px !important;
  border-top: 1px solid var(--ant-divider) !important;
  display: flex !important;
  justify-content: flex-end !important;
  gap: 8px !important;
}

/* ============ 标签页 Tabs ============ */
.tabs,
.tab-bar,
.tab-nav,
.nav-tabs {
  display: flex !important;
  border-bottom: 1px solid var(--ant-divider) !important;
  margin-bottom: 16px !important;
}
.tab-item,
.tab-link,
.nav-tabs li,
.nav-tabs > li > a {
  padding: 12px 16px !important;
  cursor: pointer !important;
  color: var(--ant-text-secondary) !important;
  font-size: var(--ant-fs-base) !important;
  border-bottom: 2px solid transparent !important;
  margin-bottom: -1px !important;
  transition: all 0.2s !important;
  background: transparent !important;
  border-radius: 0 !important;
  border-top: none !important;
  border-left: none !important;
  border-right: none !important;
}
.tab-item:hover,
.tab-link:hover,
.nav-tabs li:hover {
  color: var(--ant-primary) !important;
}
.tab-item.active,
.tab-link.active,
.nav-tabs li.active,
.nav-tabs li.active > a,
.nav-tabs > li.active > a {
  color: var(--ant-primary) !important;
  border-bottom-color: var(--ant-primary) !important;
  font-weight: 500 !important;
}

/* ============ 提示 / Alert ============ */
.alert,
.message,
.notification,
.notice {
  padding: 12px 16px !important;
  border-radius: var(--ant-radius) !important;
  border: 1px solid !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  font-size: var(--ant-fs-base) !important;
  margin-bottom: 16px !important;
}
.alert-success,
.alert.success,
.message-success {
  background: var(--ant-success-bg) !important;
  border-color: var(--ant-primary-border) !important;
  color: var(--ant-success) !important;
}
.alert-warning,
.alert.warning {
  background: var(--ant-warning-bg) !important;
  border-color: #ffe58f !important;
  color: var(--ant-warning) !important;
}
.alert-error,
.alert.error,
.alert.danger {
  background: var(--ant-error-bg) !important;
  border-color: #ffccc7 !important;
  color: var(--ant-error) !important;
}
.alert-info,
.alert.info {
  background: var(--ant-info-bg) !important;
  border-color: #91caff !important;
  color: var(--ant-info) !important;
}

/* ============ 链接 ============ */
a {
  color: var(--ant-primary) !important;
  transition: color 0.2s !important;
  text-decoration: none !important;
}
a:hover {
  color: var(--ant-primary-hover) !important;
}

/* ============ 标题 ============ */
h1, h2, h3, h4, h5, h6 {
  color: var(--ant-text-primary) !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
  margin: 0 !important;
}

/* ============ 紫色 #667eea / #764ba2 残留替换 ============ */
*[style*="#667eea"] {
  color: var(--ant-primary) !important;
}

/* SVG 头像里的紫色背景兜底 */
img[src*="%23667eea"],
img[src*="%23764ba2"] {
  background: var(--ant-primary) !important;
}

/* ============ Dashboard 页面专项覆盖（首页总览） ============ */
/* 原 .welcome-content h2 用紫色渐变 + 文字透明，必须先去渐变 */
.welcome-content {
  padding: 0 !important;
  text-align: left !important;
}
.welcome-content h2 {
  background: none !important;
  -webkit-background-clip: unset !important;
  background-clip: unset !important;
  -webkit-text-fill-color: var(--ant-text-primary) !important;
  color: var(--ant-text-primary) !important;
  font-size: var(--ant-fs-2xl) !important;
  font-weight: 600 !important;
  margin-bottom: 8px !important;
  text-align: left !important;
}
.welcome-content > p {
  color: var(--ant-text-secondary) !important;
  font-size: var(--ant-fs-base) !important;
  margin-bottom: 24px !important;
  text-align: left !important;
}

/* Dashboard 统计卡片：紫色渐变 → 白底 + 绿色图标 + 黑色数字 */
.dashboard-cards {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)) !important;
  gap: 16px !important;
  margin-bottom: 24px !important;
}
.dashboard-card {
  background: var(--ant-bg-card) !important;
  border: 1px solid var(--ant-border-soft) !important;
  border-radius: var(--ant-radius-lg) !important;
  padding: 20px 24px !important;
  text-align: left !important;
  box-shadow: var(--ant-shadow-1) !important;
  color: var(--ant-text-primary) !important;
  position: relative;
  transition: all 0.2s !important;
}
.dashboard-card:hover {
  border-color: var(--ant-primary-border) !important;
  box-shadow: var(--ant-shadow-2) !important;
  transform: none !important;
}
.dashboard-card i {
  font-size: var(--ant-fs-lg) !important;
  color: var(--ant-primary) !important;
  margin-bottom: 12px !important;
  display: inline-block !important;
  width: 36px !important;
  height: 36px !important;
  line-height: 36px !important;
  text-align: center !important;
  background: var(--ant-primary-bg) !important;
  border-radius: var(--ant-radius) !important;
}
.dashboard-card h3 {
  font-size: 28px !important;
  font-weight: 600 !important;
  color: var(--ant-text-primary) !important;
  margin: 4px 0 6px !important;
  font-variant-numeric: tabular-nums;
  line-height: 1.2 !important;
}
.dashboard-card p {
  color: var(--ant-text-secondary) !important;
  font-size: var(--ant-fs-base) !important;
  margin-bottom: 8px !important;
  font-weight: 400 !important;
}
.dashboard-card .card-detail {
  margin-top: 12px !important;
  padding-top: 12px !important;
  border-top: 1px solid var(--ant-divider) !important;
  font-size: var(--ant-fs-xs) !important;
  color: var(--ant-text-tertiary) !important;
}

/* 修复 dashboard 内 .text-success / .text-info / .text-muted 在白底显示 */
.dashboard-card .text-success,
.welcome-content .text-success {
  color: var(--ant-success) !important;
}
.dashboard-card .text-warning,
.welcome-content .text-warning {
  color: var(--ant-warning) !important;
}
.dashboard-card .text-danger,
.welcome-content .text-danger {
  color: var(--ant-error) !important;
}
.dashboard-card .text-info,
.welcome-content .text-info {
  color: var(--ant-info) !important;
}
.dashboard-card .text-muted,
.welcome-content .text-muted {
  color: var(--ant-text-tertiary) !important;
}

/* Quick Actions 区 */
.quick-actions {
  background: var(--ant-bg-card) !important;
  border: 1px solid var(--ant-border-soft) !important;
  border-radius: var(--ant-radius-lg) !important;
  padding: 20px 24px !important;
  box-shadow: var(--ant-shadow-1) !important;
}
.quick-actions h3 {
  font-size: var(--ant-fs-lg) !important;
  font-weight: 500 !important;
  margin-bottom: 16px !important;
  color: var(--ant-text-primary) !important;
}
.action-buttons-grid {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)) !important;
  gap: 12px !important;
}
.action-btn {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 8px !important;
  height: 40px !important;
  padding: 0 16px !important;
  background: var(--ant-bg-card) !important;
  border: 1px solid var(--ant-border) !important;
  border-radius: var(--ant-radius) !important;
  color: var(--ant-text-primary) !important;
  font-size: var(--ant-fs-base) !important;
  cursor: pointer !important;
  transition: all 0.2s !important;
}
.action-btn:hover {
  border-color: var(--ant-primary) !important;
  color: var(--ant-primary) !important;
  background: var(--ant-primary-bg) !important;
}
.action-btn i {
  color: var(--ant-primary) !important;
}

/* ============ 侧栏次级菜单 active（2026-05-28 阶段0.1：原为旧紫/绿实心块，深蓝化后统一为半透明绿底+绿左竖条+白字） ============ */
.sidebar ul ul li.active,
.sidebar ul ul li.active a,
.sidebar-nav .submenu li.active,
.sidebar-nav .submenu li.active a,
.sidebar .menu-item.active,
.menu-children .active {
  background: var(--ant-sider-active-bg) !important;
  color: var(--ant-sider-text-active) !important;
  box-shadow: inset 3px 0 0 var(--ant-sider-active-bar) !important;
}

/* 次级菜单左边线高亮（替代紫色） */
.sidebar .submenu,
.sidebar ul ul {
  border-left: 2px solid transparent !important;
  position: relative;
}

/* ============ 面包屑 tab 风格 ============ */
.breadcrumb-tabs,
.tag-tabs,
.tabs-bar {
  background: var(--ant-bg-card) !important;
  border-bottom: 1px solid var(--ant-divider) !important;
  padding: 8px 24px !important;
}

/* ============ 滚动条 ============ */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}
::-webkit-scrollbar-track {
  background: transparent;
}
::-webkit-scrollbar-thumb {
  background: rgba(0, 0, 0, 0.15);
  border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
  background: rgba(0, 0, 0, 0.3);
}

/* ============ 文字工具类 ============ */
.text-success, .text-green { color: var(--ant-success) !important; }
.text-warning, .text-yellow, .text-orange { color: var(--ant-warning) !important; }
.text-danger, .text-error, .text-red { color: var(--ant-error) !important; }
.text-info, .text-blue { color: var(--ant-info) !important; }
.text-muted, .text-gray, .text-secondary { color: var(--ant-text-tertiary) !important; }
.text-primary { color: var(--ant-primary) !important; }

/* ============ 头像背景兜底（替换原紫色） ============ */
.user-avatar,
.profile-avatar,
.sidebar-avatar,
.avatar {
  position: relative;
}

/* ============ 在线状态点 ============ */
.online-status {
  width: 8px !important;
  height: 8px !important;
  background: var(--ant-success) !important;
  border: 2px solid #fff !important;
  border-radius: 50% !important;
  position: absolute !important;
  bottom: 0 !important;
  right: 0 !important;
}

/* ============ 工具栏 / 搜索区 ============ */
.toolbar,
.search-bar,
.filter-bar,
.action-bar {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 16px 0 !important;
  flex-wrap: wrap !important;
}

/* ============ 空状态 ============ */
.empty,
.no-data,
.empty-state {
  text-align: center !important;
  padding: 48px 24px !important;
  color: var(--ant-text-tertiary) !important;
}
.empty img,
.no-data img,
.empty-state img {
  max-width: 100px !important;
  opacity: 0.5 !important;
  margin-bottom: 16px !important;
}

/* ============ 加载中 ============ */
.loading,
.spinner {
  color: var(--ant-primary) !important;
}

/* ============ 分隔线 ============ */
hr,
.divider {
  height: 1px !important;
  background: var(--ant-divider) !important;
  border: none !important;
  margin: 16px 0 !important;
}

/* ============================================================
 * Phase F 细节优化
 * ============================================================ */

/* F.1 表格内空态行（inline style: padding:40px;color:#999） */
table td[colspan][style*="padding: 40px"],
table td[colspan][style*="padding:40px"],
.empty-row,
table tr.empty-row td {
  padding: 56px 24px !important;
  color: var(--ant-text-tertiary) !important;
  text-align: center !important;
  font-size: var(--ant-fs-base) !important;
  background: var(--ant-bg-card) !important;
}
/* 给空态加一个视觉化提示 */
table td[colspan][style*="padding: 40px"]::before,
table td[colspan][style*="padding:40px"]::before {
  content: "📋";
  display: block;
  font-size: 32px;
  margin-bottom: 12px;
  opacity: 0.4;
  font-family: 'Apple Color Emoji', 'Segoe UI Emoji', sans-serif;
}
/* 当文字是"加载中..."时不显示空态 emoji */
table td[colspan][style*="padding: 40px"]:has(.fa-spinner)::before,
table td[colspan][style*="padding:40px"]:has(.fa-spinner)::before {
  content: none;
}

/* 通用空态容器（非表格内） */
.empty-state-container,
[class*="empty"]:not(.empty-row):not(table) {
  padding: 48px 24px !important;
  text-align: center !important;
  color: var(--ant-text-tertiary) !important;
}

/* F.2 老式 inline label 现代化（display:block; font-weight:bold;） */
label[style*="font-weight:bold"],
label[style*="font-weight: bold"] {
  font-weight: 500 !important;
  color: var(--ant-text-primary) !important;
  font-size: var(--ant-fs-base) !important;
  margin-bottom: 8px !important;
  display: block !important;
}
/* 弹窗里用的灰色辅助 label */
.modal-body label[style*="color: #666"],
.modal-content label[style*="color: #666"],
.dialog label[style*="color: #666"] {
  color: var(--ant-text-tertiary) !important;
  font-size: var(--ant-fs-xs) !important;
  font-weight: 400 !important;
  margin-bottom: 4px !important;
}

/* F.3 工具栏区（搜索 + 按钮 + 筛选） */
.toolbar,
.search-bar,
.filter-bar,
.action-bar,
.page-toolbar,
.list-toolbar,
[class*="-toolbar"] {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 16px 0 !important;
  margin-bottom: 16px !important;
}
.toolbar input,
.toolbar select,
.search-bar input,
.filter-bar input,
.action-bar input,
.toolbar .btn,
.toolbar button {
  height: 32px !important;
  margin: 0 !important;
}
/* 工具栏右侧按钮组靠右 */
.toolbar > .toolbar-right,
.toolbar > .actions-right,
.search-bar > .right-actions {
  margin-left: auto !important;
}

/* F.4 表格操作列优化 */
table td:last-child a,
table td:last-child button.link,
table td:last-child .btn-link,
table td.action-cell a,
table td.actions a,
table td.actions button {
  margin-right: 12px !important;
  font-size: var(--ant-fs-base) !important;
}
table td:last-child a:last-child,
table td.actions a:last-child {
  margin-right: 0 !important;
}
/* 危险动作（删除/封禁/拒绝）红色 */
table td a[onclick*="delete"],
table td a[onclick*="remove"],
table td a[onclick*="ban"],
table td a[onclick*="reject"],
table td button[onclick*="delete"],
table td button[onclick*="reject"] {
  color: var(--ant-error) !important;
}
table td a[onclick*="delete"]:hover,
table td a[onclick*="ban"]:hover,
table td a[onclick*="reject"]:hover {
  color: #ff7875 !important;
}

/* F.5 弹窗：残留 modal-header 渐变 */
.modal-header[style*="linear-gradient"],
.dialog-header[style*="linear-gradient"] {
  background: var(--ant-bg-card) !important;
  color: var(--ant-text-primary) !important;
  border-bottom: 1px solid var(--ant-divider) !important;
}
.modal-header[style*="linear-gradient"] h3,
.modal-header[style*="linear-gradient"] h2,
.modal-header[style*="linear-gradient"] .modal-title {
  color: var(--ant-text-primary) !important;
}
.modal-header[style*="linear-gradient"] button[onclick*="close"],
.modal-header[style*="linear-gradient"] .close,
.modal-header[style*="linear-gradient"] i.fa-times {
  color: var(--ant-text-tertiary) !important;
}
/* modal footer 按钮一致 */
.modal-footer,
.dialog-footer {
  padding: 12px 16px !important;
  border-top: 1px solid var(--ant-divider) !important;
  display: flex !important;
  justify-content: flex-end !important;
  gap: 8px !important;
}

/* 弹窗内提交按钮残留紫色渐变 */
button[style*="linear-gradient(135deg, #16a34a"][style*="#15803d"],
button[onclick*="submit"][style*="linear-gradient"] {
  background: var(--ant-primary) !important;
  border: 1px solid var(--ant-primary) !important;
  color: #fff !important;
}

/* F.6 数据密度微调 */
table tbody td,
table td,
.data-table td {
  padding: 12px 16px !important;
  line-height: 1.5 !important;
}
table thead th,
table th {
  padding: 12px 16px !important;
  height: auto !important;
}

/* 卡片内边距收一点 */
.card-body,
.panel-body,
.module-body {
  padding: 20px !important;
}

/* F.7 数字 tabular + 长文本 ellipsis */
table td {
  vertical-align: middle !important;
}
/* 数字列右对齐 + tabular-nums（手动加 class .num） */
table td.num,
table td.number,
table td[data-type="number"] {
  text-align: right !important;
  font-variant-numeric: tabular-nums !important;
  font-family: -apple-system, 'SF Mono', 'Helvetica Neue', sans-serif !important;
}

/* 长文本省略号（昵称、ID 等） */
table td.truncate,
table td.ellipsis,
.text-truncate {
  max-width: 200px !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}

/* 用户 ID 列默认应该等宽 + ellipsis */
table td[data-col="user_id"],
table td[data-col="id"] {
  font-family: -apple-system, 'SF Mono', 'Helvetica Neue', monospace !important;
  font-size: var(--ant-fs-xs) !important;
  color: var(--ant-text-secondary) !important;
}

/* 行选择 checkbox 整齐 */
table td input[type="checkbox"],
table th input[type="checkbox"] {
  vertical-align: middle !important;
}

/* hover 行更明显，光标变手指 */
table tbody tr {
  cursor: default;
  transition: background 0.15s !important;
}
table tbody tr:hover {
  background: var(--ant-bg-hover) !important;
}

/* 标签 / 徽章在表格内紧凑 */
table td .badge,
table td .tag,
table td .status-badge,
table td [class*="status-"] {
  font-size: 12px !important;
  padding: 0 7px !important;
  height: 22px !important;
  line-height: 20px !important;
}

/* 按钮在表格内紧凑 */
table td .btn,
table td button:not(.icon-btn) {
  height: 28px !important;
  padding: 0 10px !important;
  font-size: var(--ant-fs-sm) !important;
}

/* 多个 td 内的链接用竖线分隔（视觉提示） */
table td .action-divider {
  display: inline-block;
  width: 1px;
  height: 12px;
  background: var(--ant-divider);
  margin: 0 8px;
  vertical-align: middle;
}

/* ============================================================
 * Phase G 表单弹窗两栏布局现代化
 * ============================================================ */

/* form-group 容器：水平排列 label + input */
.form-group {
  display: grid !important;
  grid-template-columns: 100px 1fr !important;
  gap: 0 12px !important;
  align-items: center !important;
  margin-bottom: 20px !important;
}

/* label：右对齐 + 必填红星 */
.form-group label {
  text-align: right !important;
  color: var(--ant-text-primary) !important;
  font-size: var(--ant-fs-base) !important;
  font-weight: 400 !important;
  margin: 0 !important;
  line-height: 32px !important;
  align-self: start !important;
}
.form-group label.required::before,
.form-group label[for*="Password"]::before,
.form-group label[for*="LoginName"]::before {
  content: "*";
  color: var(--ant-error);
  margin-right: 4px;
  font-weight: 700;
}

/* 输入框 / 选择器 占第二列 */
.form-group input,
.form-group select,
.form-group textarea,
.form-group .form-control {
  grid-column: 2 !important;
  width: 100% !important;
  margin: 0 !important;
}

/* 帮助提示 form-hint 在 input 下方 */
.form-group .form-hint,
.form-group .help-text,
.form-group .field-hint {
  grid-column: 2 !important;
  font-size: var(--ant-fs-xs) !important;
  color: var(--ant-text-tertiary) !important;
  margin-top: 4px !important;
  line-height: 1.5 !important;
}

/* 校验错误提示 */
.form-group .error,
.form-group .field-error,
.form-group [class*="error"]:not(input):not(select):not(textarea) {
  grid-column: 2 !important;
  font-size: var(--ant-fs-xs) !important;
  color: var(--ant-error) !important;
  margin-top: 4px !important;
}
.form-group input.error,
.form-group input[aria-invalid="true"],
.form-group input.invalid {
  border-color: var(--ant-error) !important;
}
.form-group input.error:focus {
  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.1) !important;
}

/* 单行表单（弹窗内） */
.form-row {
  display: flex !important;
  gap: 16px !important;
  margin-bottom: 16px !important;
}
.form-row .form-group {
  flex: 1 !important;
  margin-bottom: 0 !important;
}

/* 窄屏 / 小弹窗：堆叠模式 */
@media (max-width: 600px) {
  .form-group {
    grid-template-columns: 1fr !important;
  }
  .form-group label {
    text-align: left !important;
    line-height: 1.5 !important;
    margin-bottom: 4px !important;
  }
}

/* 表单底部操作按钮 */
.form-actions,
.form-buttons {
  display: flex !important;
  justify-content: flex-end !important;
  gap: 8px !important;
  padding-top: 16px !important;
  border-top: 1px solid var(--ant-divider) !important;
  margin-top: 24px !important;
}

/* form 内的多选 checkbox 列表 */
.checkbox-group,
.radio-group {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 16px !important;
  padding: 4px 0 !important;
}
.checkbox-group label,
.radio-group label {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  cursor: pointer !important;
  font-weight: 400 !important;
  text-align: left !important;
  line-height: 1.5 !important;
}

/* ============================================================
 * Phase I 全局 Toast（替代原生 alert / confirm）
 * 样式部分：JS 端拦截 window.alert 创建 .ant-toast 元素
 * ============================================================ */

.ant-toast {
  position: fixed !important;
  top: 24px !important;
  left: 50% !important;
  transform: translateX(-50%) !important;
  z-index: 99999 !important;
  background: var(--ant-bg-card) !important;
  border-radius: var(--ant-radius) !important;
  box-shadow: var(--ant-shadow-2) !important;
  padding: 10px 16px !important;
  min-width: 280px !important;
  max-width: 480px !important;
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  font-size: var(--ant-fs-base) !important;
  color: var(--ant-text-primary) !important;
  animation: ant-toast-in 0.25s ease-out !important;
  border: 1px solid var(--ant-border-soft) !important;
}
.ant-toast.toast-success { border-left: 4px solid var(--ant-success) !important; }
.ant-toast.toast-warning { border-left: 4px solid var(--ant-warning) !important; }
.ant-toast.toast-error   { border-left: 4px solid var(--ant-error)   !important; }
.ant-toast.toast-info    { border-left: 4px solid var(--ant-info)    !important; }
.ant-toast .toast-icon {
  font-size: 18px !important;
  flex-shrink: 0 !important;
}
.ant-toast.toast-success .toast-icon { color: var(--ant-success) !important; }
.ant-toast.toast-warning .toast-icon { color: var(--ant-warning) !important; }
.ant-toast.toast-error   .toast-icon { color: var(--ant-error)   !important; }
.ant-toast.toast-info    .toast-icon { color: var(--ant-info)    !important; }

@keyframes ant-toast-in {
  from { opacity: 0; transform: translate(-50%, -20px); }
  to { opacity: 1; transform: translate(-50%, 0); }
}
@keyframes ant-toast-out {
  to { opacity: 0; transform: translate(-50%, -20px); }
}
.ant-toast.fade-out {
  animation: ant-toast-out 0.2s ease-in forwards !important;
}

/* 全局 confirm dialog 样式（也用 .ant-confirm-mask） */
.ant-confirm-mask {
  position: fixed !important;
  inset: 0 !important;
  background: rgba(0, 0, 0, 0.45) !important;
  z-index: 99998 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  animation: ant-mask-in 0.2s !important;
}
@keyframes ant-mask-in { from { opacity: 0 } to { opacity: 1 } }

.ant-confirm-box {
  background: var(--ant-bg-card) !important;
  border-radius: var(--ant-radius-lg) !important;
  box-shadow: var(--ant-shadow-2) !important;
  width: 416px !important;
  max-width: 90vw !important;
  padding: 24px !important;
}
.ant-confirm-title {
  font-size: var(--ant-fs-lg) !important;
  font-weight: 500 !important;
  color: var(--ant-text-primary) !important;
  margin-bottom: 8px !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}
.ant-confirm-title .fa-exclamation-circle { color: var(--ant-warning) !important; }
.ant-confirm-body {
  color: var(--ant-text-secondary) !important;
  font-size: var(--ant-fs-base) !important;
  margin-bottom: 24px !important;
  padding-left: 26px !important;
}
.ant-confirm-actions {
  display: flex !important;
  justify-content: flex-end !important;
  gap: 8px !important;
}
.ant-confirm-actions button {
  height: 32px !important;
  padding: 0 16px !important;
  border-radius: var(--ant-radius) !important;
  border: 1px solid var(--ant-border) !important;
  background: var(--ant-bg-card) !important;
  color: var(--ant-text-primary) !important;
  cursor: pointer !important;
  font-size: var(--ant-fs-base) !important;
}
.ant-confirm-actions button.primary {
  background: var(--ant-primary) !important;
  border-color: var(--ant-primary) !important;
  color: #fff !important;
}
.ant-confirm-actions button:hover {
  border-color: var(--ant-primary) !important;
  color: var(--ant-primary) !important;
}
.ant-confirm-actions button.primary:hover {
  background: var(--ant-primary-hover) !important;
  border-color: var(--ant-primary-hover) !important;
  color: #fff !important;
}

/* ==========================================================================
 * 暗色模式（W4-D 美化 2026-05-15）
 * 通过 <html data-theme="dark"> 切换。变量重写，组件类自动跟着变色。
 * ========================================================================== */

/* 暗色模式 Linear 风（Layer 2 同步更新）：
 *   - sider 改深灰 #141414（保持暗色识别度，不再纯黑 — Linear 风暗色更柔和）
 *   - 阴影只保留极弱单层（靠边框分层）
 *   - 状态色对齐 Tailwind 纯净版
 */
html[data-theme="dark"] {
  --ant-primary: #22c55e;
  --ant-primary-hover: #16a34a;
  --ant-primary-active: #15803d;
  --ant-primary-bg: rgba(34, 197, 94, 0.12);
  --ant-primary-border: rgba(34, 197, 94, 0.4);

  --ant-text-primary: rgba(255, 255, 255, 0.88);
  --ant-text-secondary: rgba(255, 255, 255, 0.65);
  --ant-text-tertiary: rgba(255, 255, 255, 0.45);
  --ant-text-disabled: rgba(255, 255, 255, 0.25);

  --ant-bg-page: #141414;
  --ant-bg-card: #1f1f1f;
  --ant-bg-hover: #262626;
  --ant-bg-selected: rgba(34, 197, 94, 0.15);
  --ant-border: #424242;
  --ant-border-soft: #303030;
  --ant-divider: rgba(255, 255, 255, 0.06);    /* Linear 风：更弱分隔 */

  /* 暗色 sider：深灰柔和（Linear 风暗色不用纯黑），保留品牌绿选中态 */
  --ant-sider-bg: #141414;
  --ant-sider-trigger: #1f1f1f;
  --ant-sider-text: rgba(255, 255, 255, 0.65);
  --ant-sider-text-hover: rgba(255, 255, 255, 0.88);
  --ant-sider-text-active: #22c55e;            /* 品牌绿（暗模式略亮） */
  --ant-sider-border: #303030;

  --ant-success: #22c55e;
  --ant-warning: #f59e0b;                      /* Tailwind palette */
  --ant-error: #ef4444;
  --ant-info: #3b82f6;
  --ant-success-bg: rgba(34, 197, 94, 0.12);
  --ant-warning-bg: rgba(245, 158, 11, 0.12);
  --ant-error-bg: rgba(239, 68, 68, 0.12);
  --ant-info-bg: rgba(59, 130, 246, 0.12);

  /* 装饰色（暗模式亮一些） */
  --ant-purple: #c084fc;
  --ant-purple-bg: rgba(192, 132, 252, 0.15);
  --ant-pink: #f472b6;

  /* Linear 风：暗色阴影极弱（黑底已自带层次） */
  --ant-shadow-1: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
  --ant-shadow-2: 0 4px 8px -2px rgba(0, 0, 0, 0.4);
}

html[data-theme="dark"] body,
html[data-theme="dark"] .page,
html[data-theme="dark"] .main-page,
html[data-theme="dark"] .content-area,
html[data-theme="dark"] .content-container {
  background: var(--ant-bg-page) !important;
  color: var(--ant-text-primary) !important;
}

html[data-theme="dark"] input[type="text"],
html[data-theme="dark"] input[type="number"],
html[data-theme="dark"] input[type="password"],
html[data-theme="dark"] input[type="email"],
html[data-theme="dark"] textarea,
html[data-theme="dark"] select {
  background: var(--ant-bg-card) !important;
  color: var(--ant-text-primary) !important;
  border-color: var(--ant-border) !important;
}
html[data-theme="dark"] input[readonly] {
  background: #2a2a2a !important;
  color: var(--ant-text-tertiary) !important;
}

html[data-theme="dark"] table {
  background: var(--ant-bg-card) !important;
  color: var(--ant-text-primary) !important;
}
html[data-theme="dark"] table thead tr,
html[data-theme="dark"] table thead th {
  background: var(--ant-bg-hover) !important;
  color: var(--ant-text-secondary) !important;
  border-color: var(--ant-border-soft) !important;
}
html[data-theme="dark"] table tbody tr {
  border-color: var(--ant-border-soft) !important;
}
html[data-theme="dark"] table tbody tr:hover {
  background: var(--ant-bg-hover) !important;
}

/* inline style 兜底：直接写白色背景的元素，暗色下覆盖 */
html[data-theme="dark"] [style*="background:#fff"],
html[data-theme="dark"] [style*="background: #fff"],
html[data-theme="dark"] [style*="background:#ffffff"],
html[data-theme="dark"] [style*="background:white"] {
  background: var(--ant-bg-card) !important;
  color: var(--ant-text-primary) !important;
}
html[data-theme="dark"] [style*="background:#fafafa"],
html[data-theme="dark"] [style*="background: #fafafa"],
html[data-theme="dark"] [style*="background:#f5f5f5"],
html[data-theme="dark"] [style*="background:#f0f0f0"],
html[data-theme="dark"] [style*="background:#f9fafb"] {
  background: var(--ant-bg-hover) !important;
}

/* ==========================================================================
 * 大字号模式（无障碍）
 * <html data-font-size="lg"> 字号变量 +2px 全局放大
 * ========================================================================== */

html[data-font-size="lg"] {
  --ant-fs-xs: 14px;
  --ant-fs-sm: 15px;
  --ant-fs-base: 16px;
  --ant-fs-lg: 18px;
  --ant-fs-xl: 22px;
  --ant-fs-2xl: 28px;
}
html[data-font-size="lg"] body { font-size: 16px !important; }
html[data-font-size="lg"] table,
html[data-font-size="lg"] input,
html[data-font-size="lg"] textarea,
html[data-font-size="lg"] select,
html[data-font-size="lg"] button { font-size: 15px !important; }

/* ==========================================================================
 * 主题切换按钮（右上角浮动）
 * ========================================================================== */

.theme-toggle-bar {
  position: fixed;
  top: 12px;
  right: 16px;
  z-index: 999;
  display: flex;
  gap: 6px;
  align-items: center;
  background: var(--ant-bg-card);
  border: 1px solid var(--ant-border-soft);
  border-radius: var(--ant-radius);
  padding: 4px 6px;
  box-shadow: var(--ant-shadow-1);
}
.theme-toggle-bar button {
  height: 28px;
  width: 28px;
  border-radius: var(--ant-radius-sm);
  border: 1px solid transparent;
  background: transparent;
  color: var(--ant-text-secondary);
  cursor: pointer;
  font-size: 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all 0.15s;
}
.theme-toggle-bar button:hover {
  background: var(--ant-bg-hover);
  color: var(--ant-primary);
}
.theme-toggle-bar button.active {
  background: var(--ant-primary-bg);
  color: var(--ant-primary);
  border-color: var(--ant-primary-border);
}

/* ============ D3 admin page helper utilities（2026-05-15） ============ */

/* 页面 loading / error / 副标题 */
.page-loading {
  padding: 32px 24px;
  text-align: center;
  color: var(--ant-text-secondary);
  font-size: var(--ant-fs-base);
}
.page-error {
  padding: 32px 24px;
  text-align: center;
  color: var(--ant-error);
  font-size: var(--ant-fs-base);
  background: var(--ant-bg-card);
  border: 1px solid var(--ant-error-border, rgba(255, 77, 79, 0.3));
  border-radius: var(--ant-radius-lg);
  margin: 16px 0;
}
.page-subtitle {
  margin: 0 0 20px;
  color: var(--ant-text-secondary);
  font-size: var(--ant-fs-base);
  line-height: 1.6;
}

/* table cell 对齐 helper */
.cell-num,
td.cell-num,
th.cell-num {
  text-align: right !important;
  font-variant-numeric: tabular-nums;
}
.cell-mono,
td.cell-mono {
  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
  font-size: var(--ant-fs-sm);
  color: var(--ant-text-tertiary);
}
.cell-center,
td.cell-center,
th.cell-center {
  text-align: center !important;
}

/* 紧凑数字输入 */
.num-input {
  width: 100px !important;
  text-align: right !important;
  font-variant-numeric: tabular-nums;
  padding: 4px 8px !important;
  height: 30px !important;
}
.form-control.is-readonly,
.is-readonly,
input.is-readonly {
  background: var(--ant-bg-disabled, var(--ant-bg-page)) !important;
  color: var(--ant-text-tertiary) !important;
  cursor: not-allowed;
}

/* toggle 复选 label */
.toggle-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  font-size: var(--ant-fs-base);
  user-select: none;
}
.toggle-label input[type="checkbox"] {
  cursor: pointer;
}

/* 文字工具 */
.text-sm { font-size: var(--ant-fs-sm) !important; }
.text-lg { font-size: var(--ant-fs-lg) !important; }
.text-xl { font-size: var(--ant-fs-xl) !important; }
.text-success { color: var(--ant-success) !important; }
.text-warning { color: var(--ant-warning) !important; }
.text-danger,
.text-error { color: var(--ant-error) !important; }
.text-primary { color: var(--ant-primary) !important; }
.text-center { text-align: center !important; }
.text-right { text-align: right !important; }

/* 间距 helper（与 Ant 4/8 倍系一致） */
.p-0  { padding: 0 !important; }
.p-sm { padding: 8px !important; }
.p-md { padding: 16px !important; }
.p-lg { padding: 24px !important; }
.mt-xs { margin-top: 4px !important; }
.mt-sm { margin-top: 8px !important; }
.mt-md { margin-top: 16px !important; }
.mt-lg { margin-top: 24px !important; }
.mb-xs { margin-bottom: 4px !important; }
.mb-sm { margin-bottom: 8px !important; }
.mb-md { margin-bottom: 16px !important; }
.mb-lg { margin-bottom: 24px !important; }
.ml-xs { margin-left: 4px !important; }
.ml-sm { margin-left: 8px !important; }
.mr-xs { margin-right: 4px !important; }
.mr-sm { margin-right: 8px !important; }
.gap-xs { gap: 4px !important; }
.gap-sm { gap: 8px !important; }
.gap-md { gap: 16px !important; }

/* flex / grid 速记 */
.flex { display: flex !important; }
.flex-center { display: flex !important; align-items: center !important; }
.flex-between { display: flex !important; align-items: center !important; justify-content: space-between !important; }
.flex-wrap { flex-wrap: wrap !important; }
.grid-2 { display: grid !important; grid-template-columns: repeat(2, 1fr) !important; gap: 16px !important; }
.grid-3 { display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 16px !important; }
.grid-4 { display: grid !important; grid-template-columns: repeat(4, 1fr) !important; gap: 16px !important; }

/* form 行级布局（label + input 同行） */
.form-inline-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px dashed var(--ant-divider);
}
.form-inline-row:last-child { border-bottom: none; }
.form-inline-row > label {
  flex: 0 0 200px;
  color: var(--ant-text-secondary);
  font-size: var(--ant-fs-base);
}
.form-inline-row > .form-control,
.form-inline-row > input,
.form-inline-row > select,
.form-inline-row > textarea {
  flex: 1;
  min-width: 0;
}

/* 分组卡片：在 card-body 内再分组 */
.subgroup {
  padding: 14px 16px;
  background: var(--ant-bg-page);
  border-radius: var(--ant-radius);
  margin-bottom: 12px;
  border: 1px solid var(--ant-border-soft);
}
.subgroup-title {
  font-size: var(--ant-fs-base);
  font-weight: 500;
  color: var(--ant-text-primary);
  margin-bottom: 10px;
  display: flex;
  align-items: center;
  gap: 6px;
}

/* 表单 hint 提示 */
.form-hint {
  font-size: var(--ant-fs-sm);
  color: var(--ant-text-tertiary);
  margin-top: 4px;
  line-height: 1.5;
}

/* ============ D6 表单 / 弹窗 / 反馈强化（2026-05-15） ============ */

/* invalid / required 状态 */
.form-control.is-invalid,
input.is-invalid,
select.is-invalid,
textarea.is-invalid {
  border-color: var(--ant-error) !important;
}
.form-control.is-invalid:focus,
input.is-invalid:focus,
select.is-invalid:focus,
textarea.is-invalid:focus {
  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.15) !important;
}
.form-error {
  font-size: var(--ant-fs-sm);
  color: var(--ant-error);
  margin-top: 4px;
  line-height: 1.5;
}
.form-required::before {
  content: '*';
  color: var(--ant-error);
  margin-right: 4px;
  font-family: SimSun, sans-serif;
}

/* disabled / readonly 状态 */
input:disabled,
select:disabled,
textarea:disabled,
.form-control:disabled,
input[readonly]:not(.allow-readonly-hover),
.form-control[readonly]:not(.allow-readonly-hover) {
  background: var(--ant-bg-page) !important;
  color: var(--ant-text-tertiary) !important;
  cursor: not-allowed !important;
}
input:disabled:hover,
select:disabled:hover,
textarea:disabled:hover {
  border-color: var(--ant-border) !important;
}

/* select 加自定义下拉箭头（覆盖浏览器原生丑陋三角） */
select:not([multiple]):not([size]) {
  appearance: none !important;
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%238c8c8c' d='M5 6L0 0h10z'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 11px center !important;
  padding-right: 28px !important;
}

/* textarea resize handle 不那么生硬 */
textarea {
  resize: vertical !important;
}

/* number input spin button — 隐藏浏览器原生 spinner（设计太差） */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
input[type="number"] {
  -moz-appearance: textfield;
}

/* date input icon 颜色对齐 */
input[type="date"]::-webkit-calendar-picker-indicator,
input[type="datetime-local"]::-webkit-calendar-picker-indicator,
input[type="time"]::-webkit-calendar-picker-indicator {
  opacity: 0.5;
  cursor: pointer;
  transition: opacity 0.15s;
}
input[type="date"]:hover::-webkit-calendar-picker-indicator,
input[type="datetime-local"]:hover::-webkit-calendar-picker-indicator,
input[type="time"]:hover::-webkit-calendar-picker-indicator {
  opacity: 0.85;
}
html[data-theme="dark"] input[type="date"]::-webkit-calendar-picker-indicator,
html[data-theme="dark"] input[type="datetime-local"]::-webkit-calendar-picker-indicator,
html[data-theme="dark"] input[type="time"]::-webkit-calendar-picker-indicator {
  filter: invert(0.8);
}

/* ============ Modal 强化 ============ */

/* modal-close 按钮：圆形 hover */
.modal-close,
.modal-header .close,
.modal-header button[onclick*="close"],
.modal-header .modal-close-btn {
  width: 32px !important;
  height: 32px !important;
  border-radius: 50% !important;
  background: transparent !important;
  border: none !important;
  color: var(--ant-text-tertiary) !important;
  font-size: 16px !important;
  cursor: pointer !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: all 0.15s !important;
  padding: 0 !important;
  box-shadow: none !important;
}
.modal-close:hover,
.modal-header .close:hover,
.modal-header button[onclick*="close"]:hover {
  background: var(--ant-bg-hover) !important;
  color: var(--ant-text-primary) !important;
}

/* modal-title icon 间距 + 颜色 */
.modal-title,
.modal-header h3 {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  margin: 0 !important;
}
.modal-title i,
.modal-header h3 i {
  color: var(--ant-primary) !important;
  font-size: var(--ant-fs-base) !important;
}

/* modal-header 默认 flex 让 close 按钮自然贴右 */
.modal-header,
.dialog-header {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
}

/* modal-body 滚动 */
.modal-body {
  max-height: calc(100vh - 200px) !important;
  overflow-y: auto !important;
}

/* modal 出现动画 */
.modal.show,
.modal-overlay:not(.hidden),
.ant-confirm-mask {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.modal-content,
.modal-dialog {
  animation: ant-modal-in 0.2s ease-out;
}
@keyframes ant-modal-in {
  from { opacity: 0; transform: translateY(-8px) scale(0.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ============ Checkbox / Radio 美化（覆盖浏览器原生） ============ */
/* 已用 accent-color，但 dark mode 下 native checkbox 在某些浏览器仍偏色 */
input[type="checkbox"],
input[type="radio"] {
  outline: none !important;
  transition: transform 0.1s;
}
input[type="checkbox"]:focus-visible,
input[type="radio"]:focus-visible {
  box-shadow: 0 0 0 2px rgba(26, 179, 148, 0.2);
  border-radius: 3px;
}
input[type="checkbox"]:disabled,
input[type="radio"]:disabled {
  cursor: not-allowed !important;
  opacity: 0.5;
}

/* ============ Toast 加 close 按钮（D6） ============ */
.ant-toast .toast-close {
  margin-left: 8px !important;
  flex-shrink: 0 !important;
  background: transparent !important;
  border: none !important;
  color: var(--ant-text-tertiary) !important;
  cursor: pointer !important;
  font-size: 14px !important;
  padding: 2px 4px !important;
  border-radius: var(--ant-radius-sm) !important;
  line-height: 1 !important;
  box-shadow: none !important;
  height: auto !important;
  width: auto !important;
}
.ant-toast .toast-close:hover {
  color: var(--ant-text-primary) !important;
  background: var(--ant-bg-hover) !important;
}

/* ============ Empty State 含 icon ============ */
.empty-state {
  text-align: center;
  padding: 48px 24px;
  color: var(--ant-text-tertiary);
}
.empty-state i:not(.fa-spinner) {
  font-size: 40px;
  color: var(--ant-text-tertiary);
  opacity: 0.5;
  margin-bottom: 12px;
  display: block;
}
.empty-state .empty-title {
  font-size: var(--ant-fs-base);
  color: var(--ant-text-secondary);
  margin-bottom: 4px;
}
.empty-state .empty-hint {
  font-size: var(--ant-fs-sm);
  color: var(--ant-text-tertiary);
}

/* ============ D8-followup 强力覆盖 style.css / submodules.css 老紫色 + 粉红 banner ============
   截图反馈：page-header h2 icon 紫色 + 分页 active 紫圆 + 封控页粉红渐变 banner + status-rejected 粉
   这些来自 style.css 最早的 #667eea 紫主题 + submodules.css 装饰 banner（#f093fb→#f5576c）
   theme-override.css 在它们之后加载，用 !important 强力覆盖
*/

/* 1. 页面 header h2 + icon 走品牌色（修紫色 icon） */
.page-header h2,
.page-header > h2 {
  color: var(--ant-text-primary) !important;
  font-weight: 500 !important;
  font-size: var(--ant-fs-xl) !important;
}
.page-header h2 i {
  color: var(--ant-primary) !important;
}
.page-header {
  border-bottom-color: var(--ant-divider) !important;
}

/* 2. 分页 active 圆按钮（修紫圆） */
.page-item.active .page-link,
.pagination .page-item.active .page-link {
  background: var(--ant-primary) !important;
  border-color: var(--ant-primary) !important;
  color: #fff !important;
}
.page-link {
  color: var(--ant-text-primary) !important;
  border-color: var(--ant-border) !important;
  background: var(--ant-bg-card) !important;
}
.page-link:hover {
  color: var(--ant-primary) !important;
  border-color: var(--ant-primary) !important;
  background: var(--ant-bg-hover) !important;
}

/* 3. 封控页 / 提现审核 装饰 banner — Linear 风去渐变，纯主色 */
.blocked-stats,
.review-stats {
  background: var(--ant-primary) !important;
}
.blocked-stats .stat-item i,
.blocked-stats .stat-label,
.blocked-stats .stat-value,
.blocked-stats .stat-unit,
.review-stats .stat-item i,
.review-stats .stat-label,
.review-stats .stat-value,
.review-stats .stat-unit {
  color: #fff !important;
}
.blocked-stats .stat-item,
.review-stats .stat-item {
  background: rgba(255, 255, 255, 0.15) !important;
}

/* 4. status-rejected / status-approved 徽章统一 */
.status-rejected,
.data-query .status-rejected {
  background: rgba(255, 77, 79, 0.1) !important;
  color: var(--ant-error) !important;
}
.status-approved,
.data-query .status-approved {
  background: rgba(22, 119, 255, 0.1) !important;
  color: var(--ant-info) !important;
}

/* 5. btn-table-primary 等"老紫色"按钮统一 */
.btn-table-primary {
  background: var(--ant-primary) !important;
  border-color: var(--ant-primary) !important;
  color: #fff !important;
}
.btn-table-primary:hover {
  background: var(--ant-primary-hover) !important;
  border-color: var(--ant-primary-hover) !important;
}

/* ============ D9-followup sidebar 精修（紫色边框 / 头像过大 / 间距）============
   截图反馈：左侧菜单不好看
   根因：style.css 老紫色主题（#667eea）渗透到头像 border / has-submenu hover/active 边框 / submenu active 背景
*/

/* 1. sidebar 头像 — 紫色 border 改主品牌色 + 缩小（60×60 太大） */
.sidebar .user-avatar,
.sidebar-header + .user-info .user-avatar {
  width: 40px !important;
  height: 40px !important;
  min-width: 40px !important;
  min-height: 40px !important;
  border: 2px solid var(--ant-primary) !important;
  padding: 2px !important;
}
.sidebar .user-avatar img,
.sidebar-header + .user-info .user-avatar img {
  width: 34px !important;
  height: 34px !important;
}
.user-avatar:hover {
  border-color: var(--ant-primary-hover) !important;
  transform: none !important;
}

/* 2. user-info 整体瘦身 — 与新头像匹配 */
.user-info {
  padding: 10px 20px !important;
  gap: 12px !important;
}

/* 3. sidebar-header 略瘦身（让品牌区不占太多垂直） */
.sidebar-header {
  height: 56px !important;
  padding: 12px 20px !important;
}
.sidebar-header h2 {
  font-size: var(--ant-fs-base) !important;
  font-weight: 600 !important;
}
.sidebar-logo i {
  font-size: 18px !important;
}

/* 4. has-submenu 父级 — 修紫色 border-left + 改主品牌色 */
.menu-item.has-submenu {
  border-left-color: transparent !important;
}
.menu-item.has-submenu:hover {
  border-left-color: rgba(26, 179, 148, 0.3) !important;
}
.menu-item.has-submenu.active {
  border-left-color: var(--ant-primary) !important;
}
.menu-item.has-submenu > .menu-content {
  padding: 9px 20px !important;
  color: var(--ant-sider-text) !important;
}
.menu-item.has-submenu:hover > .menu-content {
  color: var(--ant-sider-text-hover) !important;
  background: var(--ant-sider-trigger) !important;             /* Linear 风浅 sider */
}
.menu-item.has-submenu.active > .menu-content {
  background: var(--ant-sider-active-bg) !important;           /* 深蓝 sider：半透明绿底 */
  color: var(--ant-sider-text-active) !important;
}
.menu-item.has-submenu > .menu-content i {
  color: inherit !important;
  margin-right: 10px !important;
}

/* 5. submenu 容器背景 — Linear 风浅 sider：极淡灰底分层 */
.submenu {
  background: var(--ant-sider-trigger) !important;
}

/* 6. 一级（非父）菜单项行高紧凑 */
.sidebar-nav li,
#menuList li {
  margin: 0 !important;
}
.sidebar-nav a,
.sidebar-nav button,
#menuList li > a,
#menuList li > button,
#menuList li > .menu-link {
  padding: 9px 20px !important;
}

/* 7. menu-toggle（下箭头）颜色统一 */
.menu-toggle {
  color: var(--ant-text-tertiary) !important;
}
.menu-item.has-submenu.active > .menu-content .menu-toggle {
  color: var(--ant-primary) !important;
}

/* sidebar user-info 内的 .status 不是徽章 — 复位胶囊样式 + 深蓝 sider 浅色文字（2026-05-28 阶段0.1：原 D9 块为浅色侧栏写的暗灰，深蓝化后必须改浅色） */
.user-info .status,
.sidebar .user-info .status {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  padding: 0 !important;
  height: auto !important;
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  color: rgba(255, 255, 255, 0.72) !important;                 /* 深蓝 sider：浅色文字 */
  font-size: var(--ant-fs-xs) !important;
}
.user-info .status i,
.user-info .status .fa-circle {
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  height: auto !important;
  color: var(--ant-sider-active-bar) !important;               /* 亮绿 #22c55e，深蓝底醒目 */
  font-size: 8px !important;
  text-shadow: 0 0 6px rgba(34, 197, 94, 0.6) !important;      /* 绿色微光晕 */
}
.user-info .status span {
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  height: auto !important;
  color: rgba(255, 255, 255, 0.72) !important;                 /* 深蓝 sider：浅色文字 */
}

/* ============ filter-item / search-filters 内 label 修折行（2026-05-16） ============
   截图反馈：异常数据查询页「用户ID」「时间」label 被竖排（每字符独占一行）
   根因：.form-label 全局 display:block 让 label 撑满 .filter-item，
   再被 flex 容器 gap 压缩到 1-2 字符宽时每字符换行
*/
.filter-item,
.search-filters .filter-item,
.search-bar .filter-item {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  flex-wrap: nowrap !important;
}
.filter-item > label,
.search-filters .filter-item > label {
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  white-space: nowrap !important;
  margin: 0 !important;
  flex-shrink: 0 !important;
  font-size: var(--ant-fs-base) !important;
  color: var(--ant-text-secondary) !important;
}
.filter-item > input,
.filter-item > select {
  flex-shrink: 0;
}

/* ============ 紧凑表格（白名单等 15+ 列）（2026-05-16）============ */
.data-table.data-table-compact {
  font-size: 12px;
}
.data-table.data-table-compact th,
.data-table.data-table-compact td {
  padding: 6px 4px !important;
  font-size: 12px;
  white-space: nowrap;
}
.data-table.data-table-compact .btn-sm {
  padding: 3px 6px;
  font-size: 11px;
}
