/* ============================================================================
 * index.css · 全局样式入口（唯一 css 入口，顺序即优先级）
 *   1. tokens.css     — design token（CSS 变量）
 *   2. base.css       — 复位 / 排版层级 / 布局壳 / 响应式
 *   3. components.css — AntD 组件皮肤
 * ========================================================================== */

/* ============================================================================
 * AI Governance Console · Design Tokens (CSS 变量层)
 * ----------------------------------------------------------------------------
 * 设计方向（2026-09-27 用户裁定：暗色暖调）：
 *   · 底色 = 深棕灰（warm brown-gray），非纯黑、非红黑压抑风
 *   · 主强调色 = 琥珀 / 暖橙（amber），玉青降为图表辅助色
 *   · 深度靠「明度差 + 分层暗投影」而非描边
 *   · WCAG 2.2 AA：正文（暖白 #cdbba1）对底色（#16120e）对比 > 7:1
 *
 * 本文件与 src/theme/tokens.ts 为同一套数值的双份镜像（CSS 供全局样式 /
 * TS 供组件与 AntD ThemeConfig）。改动必须两边同步。
 * ========================================================================== */

:root {
  /* ---------- 中性色板 · 暖棕灰（暗端在 0，亮端在 900；暗主题下 0=底 900=字） ---------- */
  --gx-ink-0: #16120e;   /* 应用画布底（最深暖黑） */
  --gx-ink-25: #1b1611;
  --gx-ink-50: #211b15;  /* 次表面 */
  --gx-ink-100: #2a221b; /* 下沉面（侧栏 / 表头） */
  --gx-ink-200: #342a21; /* 抬升面（卡片 / 面板） */
  --gx-ink-300: #413524; /* hover */
  --gx-ink-400: #564636; /* 描边 */
  --gx-ink-500: #6f5e4a; /* 禁用 / 三级文本 */
  --gx-ink-600: #8c7a63; /* 二级文本 */
  --gx-ink-700: #ab9880; /* 次级强调文本 */
  --gx-ink-800: #cdbba1; /* 一级文本（暖白） */
  --gx-ink-900: #ece2d2; /* 标题 / 反向文本 */

  /* ---------- 品牌强调色 · 琥珀（amber，暖橙；主色） ---------- */
  --gx-amber-50: #fdf3e2;
  --gx-amber-100: #fae6c8;
  --gx-amber-200: #f5d3a0;
  --gx-amber-300: #f2c184;
  --gx-amber-400: #eaa94f;
  --gx-amber-500: #e0902c;  /* ★ 主品牌色（深底上暖橙，深字对比过 AA） */
  --gx-amber-600: #c9771d;
  --gx-amber-700: #a85f15;
  --gx-amber-800: #8a4d12;
  --gx-amber-900: #6e3d0f;

  /* ---------- 次强调（冷调，仅链接 / 少量点缀，保留原玉青基因） ---------- */
  --gx-teal-300: #6fd0bd;
  --gx-teal-400: #4db8a3;
  --gx-teal-500: #2f9d88;
  --gx-teal-600: #1f7d6c;
  --gx-teal-700: #176253;

  /* ---------- 数据可视化辅助色（仅图表 / 占比） ---------- */
  --gx-viz-1: #e0902c;  /* 主：琥珀 */
  --gx-viz-2: #4db8a3;  /* 次：玉青 */
  --gx-viz-3: #d9a441;  /* 高亮：金 */
  --gx-viz-4: #9b86c9;  /* 分类：紫 */
  --gx-viz-5: #d9695e;  /* 警示：砖红 */
  --gx-viz-6: #8c7a63;  /* 中性：暖灰 */

  /* ---------- 语义状态色（暗主题 four-tone：solid 主色 / text 文字 / soft 暗底 / border 描边） ---------- */
  --gx-success-solid: #5bb583;
  --gx-success-text: #8fd6ad;
  --gx-success-soft: #1d2b23;
  --gx-success-border: #2f4a3c;

  --gx-warning-solid: #e0a64a;
  --gx-warning-text: #f2cf94;
  --gx-warning-soft: #2c2417;
  --gx-warning-border: #4a3c22;

  --gx-danger-solid: #e0726a;
  --gx-danger-text: #f2a8a2;
  --gx-danger-soft: #2c1d1b;
  --gx-danger-border: #4a2e2b;

  --gx-info-solid: #6aa3cf;
  --gx-info-text: #a9cde8;
  --gx-info-soft: #192530;
  --gx-info-border: #2c4250;

  --gx-idle-solid: #8c7a63;
  --gx-idle-text: #b3a48d;
  --gx-idle-soft: #241d15;
  --gx-idle-border: #3d3327;

  /* ---------- 语义层 · 背景（暗：底最深 / 面略亮 / 强调靠色） ---------- */
  --gx-bg-app: var(--gx-ink-0);
  --gx-bg-surface: var(--gx-ink-200);     /* 卡片 / 面板（抬升面） */
  --gx-bg-sunken: var(--gx-ink-100);      /* 侧栏、轨道等下沉面 */
  --gx-bg-subtle: var(--gx-ink-100);      /* 表头、斑马行、代码块 */
  --gx-bg-hover: var(--gx-ink-300);       /* 行 / 项 hover */
  --gx-bg-mask: rgba(0, 0, 0, 0.55);      /* 移动端侧栏遮罩 */
  --gx-bg-overlay: rgba(22, 18, 14, 0.72);

  /* ---------- 语义层 · 文本（暖白） ---------- */
  --gx-text-primary: var(--gx-ink-800);
  --gx-text-secondary: var(--gx-ink-600);
  --gx-text-tertiary: var(--gx-ink-500);
  --gx-text-disabled: var(--gx-ink-400);
  --gx-text-inverse: var(--gx-ink-0);
  --gx-text-on-accent: var(--gx-ink-0);   /* 琥珀按钮上的深字 */

  /* ---------- 语义层 · 描边（暗主题靠它做轻分隔） ---------- */
  --gx-border-subtle: var(--gx-ink-300);
  --gx-border: var(--gx-ink-400);
  --gx-border-strong: var(--gx-ink-500);

  /* ---------- 语义层 · 强调（琥珀） ---------- */
  --gx-accent: var(--gx-amber-500);
  --gx-accent-hover: var(--gx-amber-400);
  --gx-accent-active: var(--gx-amber-600);
  --gx-accent-soft: rgba(224, 144, 44, 0.14);
  --gx-accent-soft-strong: rgba(224, 144, 44, 0.22);
  --gx-accent-border: rgba(224, 144, 44, 0.40);
  --gx-accent-gradient: linear-gradient(135deg, var(--gx-amber-700), var(--gx-amber-400));
  --gx-accent-on: var(--gx-ink-0);

  /* ---------- 字体（系统栈 + CJK 回退） ---------- */
  --gx-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC',
    'Hiragino Sans GB', 'Microsoft YaHei', 'Source Han Sans SC', 'Noto Sans CJK SC',
    Roboto, 'Helvetica Neue', Arial, sans-serif;
  --gx-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas,
    'Liberation Mono', 'Courier New', monospace;

  /* ---------- 字号 / 行高阶梯 ---------- */
  --gx-fs-display: 24px;
  --gx-lh-display: 32px;
  --gx-fs-title: 18px;
  --gx-lh-title: 26px;
  --gx-fs-section: 16px;
  --gx-lh-section: 24px;
  --gx-fs-body: 14px;
  --gx-lh-body: 22px;
  --gx-fs-sm: 13px;
  --gx-lh-sm: 20px;
  --gx-fs-caption: 12px;
  --gx-lh-caption: 18px;
  --gx-fs-micro: 11px;
  --gx-lh-micro: 16px;

  --gx-fw-regular: 400;
  --gx-fw-medium: 500;
  --gx-fw-semibold: 600;
  --gx-fw-bold: 700;

  /* ---------- 间距（4px 基线） ---------- */
  --gx-space-1: 4px;
  --gx-space-2: 8px;
  --gx-space-3: 12px;
  --gx-space-4: 16px;
  --gx-space-5: 20px;
  --gx-space-6: 24px;
  --gx-space-8: 32px;
  --gx-space-10: 40px;

  /* ---------- 圆角（现代：更圆润） ---------- */
  --gx-radius-xs: 4px;
  --gx-radius-sm: 6px;
  --gx-radius-md: 8px;
  --gx-radius-lg: 14px;
  --gx-radius-xl: 20px;
  --gx-radius-pill: 999px;

  /* ---------- 阴影（暗主题：深色投影做深度） ---------- */
  --gx-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.45);
  --gx-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.50), 0 1px 2px rgba(0, 0, 0, 0.40);
  --gx-shadow-md: 0 6px 16px -4px rgba(0, 0, 0, 0.55), 0 2px 6px -2px rgba(0, 0, 0, 0.45);
  --gx-shadow-lg: 0 18px 40px -8px rgba(0, 0, 0, 0.70), 0 8px 16px -6px rgba(0, 0, 0, 0.50);
  --gx-shadow-focus: 0 0 0 3px rgba(224, 144, 44, 0.30);

  /* ---------- 层级 ---------- */
  --gx-z-header: 1000;
  --gx-z-mask: 1001;
  --gx-z-sider: 1002;
  --gx-z-toast: 1100;

  /* ---------- 动效 ---------- */
  --gx-duration-fast: 130ms;
  --gx-duration-base: 220ms;
  --gx-duration-slow: 360ms;
  --gx-ease: cubic-bezier(0.32, 0.72, 0, 1);
  --gx-ease-out: cubic-bezier(0.16, 1, 0.3, 1);

  /* ---------- 布局尺寸 ---------- */
  --gx-header-height: 56px;
  --gx-sider-width: 216px;
  --gx-content-max: 1440px;
}

/* 尊重系统降低动效偏好（WCAG 2.3.3） */
@media (prefers-reduced-motion: reduce) {
  :root {
    --gx-duration-fast: 0ms;
    --gx-duration-base: 0ms;
    --gx-duration-slow: 0ms;
  }
}
/* ============================================================================
 * base.css · 全局基底
 * 复位 + 排版层级 + 布局壳骨架 + 响应式降级
 * 所有数值取自 src/theme/tokens.css，禁止在本文件写死颜色/间距。
 * ========================================================================== */

/* ---------------- 换肤过渡 ----------------
 * 只在切换瞬间（ThemeProvider 挂 520ms 的 .gx-theme-shift）生效，
 * 避免平时给每个元素常驻 transition 拖慢渲染。尊重 reduced-motion。 */
@media (prefers-reduced-motion: no-preference) {
  .gx-theme-shift *,
  .gx-theme-shift *::before,
  .gx-theme-shift *::after {
    transition:
      background-color 420ms ease,
      background-image 420ms ease,
      border-color 420ms ease,
      color 420ms ease,
      box-shadow 420ms ease !important;
  }
}

/* ---------------- 复位（克制版：只统一盒模型与默认外边距） ---------------- */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html,
body,
#root {
  height: 100%;
}

body {
  margin: 0;
  background: var(--gx-bg-app);
  color: var(--gx-text-primary);
  font-family: var(--gx-font-sans);
  font-size: var(--gx-fs-body);
  line-height: var(--gx-lh-body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* 画布：极淡暖琥珀光晕 + 深棕灰底，制造「屏幕景深」（不抢内容） */
.gx-shell {
  min-height: 100vh;
  background:
    radial-gradient(
      1100px 520px at 100% -12%,
      var(--gx-glow-1, rgba(224, 144, 44, 0.07)),
      transparent 58%
    ),
    radial-gradient(
      900px 480px at -8% 0%,
      var(--gx-glow-2, rgba(224, 144, 44, 0.04)),
      transparent 55%
    ),
    var(--gx-bg-app);
}

h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 0;
  font-weight: var(--gx-fw-semibold);
  color: var(--gx-text-primary);
  line-height: 1.4;
}

p {
  margin: 0;
}

ul,
ol {
  margin: 0;
  padding-left: var(--gx-space-5);
}

/* 治理台大量数字：统一等宽数字，避免跳动 */
.ant-statistic-content,
.ant-table-cell,
code,
pre,
.gx-num {
  font-variant-numeric: tabular-nums;
}

code,
pre {
  font-family: var(--gx-font-mono);
  font-size: var(--gx-fs-caption);
}

/* ---------------- 焦点可见性（键盘可达） ---------------- */
:focus-visible {
  outline: 2px solid var(--gx-accent);
  outline-offset: 1px;
  border-radius: var(--gx-radius-xs);
}

/* ---------------- 滚动条（细、暖棕灰，贴合暗主题） ---------------- */
* {
  scrollbar-width: thin;
  scrollbar-color: var(--gx-ink-400) transparent;
}

*::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

*::-webkit-scrollbar-thumb {
  background: var(--gx-ink-400);
  border-radius: var(--gx-radius-pill);
}

*::-webkit-scrollbar-thumb:hover {
  background: var(--gx-ink-500);
}

*::-webkit-scrollbar-track {
  background: transparent;
}

/* ============================================================================
 * 排版层级工具类（供视图重构子任务逐步替换内联样式）
 * ========================================================================== */
.gx-text-display {
  font-size: var(--gx-fs-display);
  line-height: var(--gx-lh-display);
  font-weight: var(--gx-fw-semibold);
}

.gx-text-title {
  font-size: var(--gx-fs-title);
  line-height: var(--gx-lh-title);
  font-weight: var(--gx-fw-semibold);
}

.gx-text-section {
  font-size: var(--gx-fs-section);
  line-height: var(--gx-lh-section);
  font-weight: var(--gx-fw-semibold);
}

.gx-text-body {
  font-size: var(--gx-fs-body);
  line-height: var(--gx-lh-body);
}

.gx-text-sm {
  font-size: var(--gx-fs-sm);
  line-height: var(--gx-lh-sm);
}

.gx-text-caption {
  font-size: var(--gx-fs-caption);
  line-height: var(--gx-lh-caption);
  color: var(--gx-text-tertiary);
}

.gx-text-micro {
  font-size: var(--gx-fs-micro);
  line-height: var(--gx-lh-micro);
  color: var(--gx-text-tertiary);
}

.gx-text-muted {
  color: var(--gx-text-secondary);
}

.gx-text-placeholder {
  color: var(--gx-text-disabled);
}

/* ============================================================================
 * 布局壳
 * ========================================================================== */
.gx-shell {
  min-height: 100vh;
}

/* 品牌区：字距收紧 + 下方分隔线，不做深色块 */
.gx-brand {
  display: flex;
  align-items: center;
  gap: var(--gx-space-2);
  height: var(--gx-header-height);
  padding: 0 var(--gx-space-4);
  border-bottom: 1px solid var(--gx-border-subtle);
  background: var(--gx-bg-sunken);
}

.gx-brand__mark {
  display: grid;
  place-items: center;
  width: 26px;
  height: 26px;
  border-radius: var(--gx-radius-md);
  background: var(--gx-accent-gradient);
  color: var(--gx-accent-on);
  font-size: var(--gx-fs-caption);
  font-weight: var(--gx-fw-bold);
  letter-spacing: 0;
  box-shadow: 0 2px 8px -2px rgba(10, 125, 109, 0.5);
}

.gx-brand__name {
  font-size: var(--gx-fs-body);
  font-weight: var(--gx-fw-semibold);
  color: var(--gx-text-primary);
  letter-spacing: 0.2px;
  white-space: nowrap;
}

.gx-brand__sub {
  font-size: var(--gx-fs-micro);
  color: var(--gx-text-tertiary);
  white-space: nowrap;
}

.gx-sider {
  background: var(--gx-bg-sunken) !important;
  border-right: 1px solid var(--gx-border-subtle);
}

/* 顶栏：白底 + 1px 分隔，不做阴影堆叠 */
.gx-header {
  display: flex;
  align-items: center;
  gap: var(--gx-space-3);
  height: var(--gx-header-height);
  padding: 0 var(--gx-space-5);
  background: var(--gx-bg-surface);
  border-bottom: 1px solid var(--gx-border-subtle);
}

.gx-header__title {
  font-size: var(--gx-fs-title);
  font-weight: var(--gx-fw-semibold);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.gx-header__spacer {
  flex: 1 1 auto;
}

/* 移动端菜单开关（桌面隐藏） */
.gx-nav-toggle {
  display: none;
}

/* 侧栏遮罩（仅移动端展开时出现） */
.gx-sider-mask {
  display: none;
}

/* 内容区：最大宽度收敛；无边框 + 柔和投影做深度（Refactoring UI 法则） */
.gx-content {
  margin: var(--gx-space-6) auto;
  max-width: var(--gx-content-max);
  padding: var(--gx-space-6);
  background: var(--gx-bg-surface);
  border: none;
  border-radius: var(--gx-radius-lg);
  box-shadow: var(--gx-shadow-sm);
  min-height: 280px;
}

/* 页面头（视图内通用：标题 + 描述 + 操作区） */
.gx-page-head {
  position: relative;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--gx-space-4);
  flex-wrap: wrap;
  margin-bottom: var(--gx-space-5);
  padding-left: var(--gx-space-3);
}

.gx-page-head__title {
  font-size: var(--gx-fs-section);
  line-height: var(--gx-lh-section);
  font-weight: var(--gx-fw-semibold);
}

.gx-page-head__desc {
  margin-top: var(--gx-space-1);
  font-size: var(--gx-fs-caption);
  line-height: var(--gx-lh-caption);
  color: var(--gx-text-tertiary);
}

/* 卡片网格：移动端自动降列 */
.gx-grid {
  display: grid;
  gap: var(--gx-space-4);
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
}

/* ============================================================================
 * 响应式：手机端也能管理（≤768 走抽屉式侧栏 + 单列/双列内容）
 * ========================================================================== */
@media (max-width: 768px) {
  .gx-content {
    margin: var(--gx-space-3) auto;
    max-width: var(--gx-content-max);
    padding: var(--gx-space-4);
    border-radius: var(--gx-radius-md);
  }

  .gx-header {
    padding: 0 var(--gx-space-3);
  }

  .gx-header__title {
    font-size: var(--gx-fs-body);
  }

  .gx-nav-toggle {
    display: inline-flex;
  }

  /* 侧栏改为浮层，不挤压内容 */
  .gx-sider {
    position: fixed !important;
    inset: 0 auto 0 0;
    z-index: var(--gx-z-sider);
    height: 100vh;
    box-shadow: var(--gx-shadow-lg);
  }

  .gx-sider-mask {
    display: block;
    position: fixed;
    inset: 0;
    z-index: var(--gx-z-mask);
    background: var(--gx-bg-mask);
    animation: gx-fade-in var(--gx-duration-base) var(--gx-ease);
  }

  /* 触控友好：控件高度抬到 40 */
  .ant-btn {
    min-height: 36px;
  }

  .ant-input,
  .ant-select-selector,
  .ant-picker {
    min-height: 36px;
  }

  /* 宽表在窄屏横向滚动，避免挤成一团 */
  .ant-table-wrapper {
    overflow-x: auto;
  }

  .ant-table-content > table {
    min-width: 560px;
  }

  /* 静态窄列（如 span=2/3/4 的指标卡）在手机端降为两列 */
  .gx-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .ant-col-2,
  .ant-col-3,
  .ant-col-4 {
    flex: 0 0 50%;
    max-width: 50%;
  }

  /* 弹窗在手机上占满宽度 */
  .ant-modal {
    max-width: calc(100vw - 24px);
    margin: 12px auto;
  }
}

@media (max-width: 576px) {
  .gx-content {
    margin: var(--gx-space-2);
    padding: var(--gx-space-3);
  }

  .ant-statistic-content {
    font-size: 20px !important;
  }
}

@keyframes gx-fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

/* 入场动效：轻微上移 + 淡入（150–300ms，意义明确，非装饰堆砌） */
@keyframes gx-rise {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* 错峰入场：给直接子项设置 --gx-i 序号即可逐级浮现 */
.gx-rise > * {
  animation: gx-rise var(--gx-duration-base) var(--gx-ease-out) both;
  animation-delay: calc(var(--gx-i, 0) * 40ms);
}

.gx-rise-item {
  animation: gx-rise var(--gx-duration-base) var(--gx-ease-out) both;
}

/* 页面头品牌强调条 */
.gx-page-head::before {
  content: '';
  position: absolute;
  left: 0;
  top: 2px;
  width: 3px;
  height: 18px;
  border-radius: var(--gx-radius-pill);
  background: var(--gx-accent-gradient);
}
/* ============================================================================
 * components.css · AntD 组件皮肤
 * ----------------------------------------------------------------------------
 * 目的：在不改任何 JSX 结构的前提下，把 AntD 默认蓝白外观换成
 *      「中性底 + 克制深青」的治理台皮肤，并统一状态色语义。
 * 说明：AntD 5 用 CSS-in-JS 注入样式，加载顺序不确定；对关键属性使用
 *      !important 保证主题层胜出（视图里若有内联硬编码色值，属视图重构子任务范畴）。
 * ========================================================================== */

/* ---------------------------------------------------------------------------
 * 卡片：无边框 + 柔和分层投影（Refactoring UI：用深度替代描边）
 * ------------------------------------------------------------------------- */
.ant-card {
  border-radius: var(--gx-radius-lg) !important;
  border: none !important;
  box-shadow: var(--gx-shadow-sm) !important;
  transition: box-shadow var(--gx-duration-base) var(--gx-ease),
    transform var(--gx-duration-base) var(--gx-ease);
}

/* 交互式卡片悬停微抬（克制、含 reduced-motion 兜底） */
.ant-card:hover {
  box-shadow: var(--gx-shadow-md) !important;
  transform: translateY(-2px);
}

.ant-card-head {
  border-bottom: 1px solid var(--gx-border-subtle) !important;
  min-height: 44px;
}

.ant-card-head-title {
  font-size: var(--gx-fs-body);
  font-weight: var(--gx-fw-semibold);
  color: var(--gx-text-primary);
}

/* ---------------------------------------------------------------------------
 * 表格：高密度、表头下沉、hover 弱反馈
 * ------------------------------------------------------------------------- */
.ant-table-thead > tr > th {
  background: var(--gx-bg-subtle) !important;
  color: var(--gx-text-secondary) !important;
  font-weight: var(--gx-fw-semibold) !important;
  font-size: var(--gx-fs-caption) !important;
  border-bottom: 1px solid var(--gx-border) !important;
  white-space: nowrap;
}

.ant-table-tbody > tr > td {
  border-bottom: 1px solid var(--gx-border-subtle) !important;
}

.ant-table-tbody > tr:hover > td {
  background: var(--gx-bg-sunken) !important;
}

.ant-table-cell-fix-left,
.ant-table-cell-fix-right {
  background: var(--gx-bg-surface);
}

.ant-table-placeholder .ant-table-cell {
  color: var(--gx-text-tertiary);
}

.ant-pagination-item-active {
  border-color: var(--gx-accent) !important;
}

.ant-pagination-item-active a {
  color: var(--gx-accent) !important;
}

/* ---------------------------------------------------------------------------
 * 按钮：去掉 AntD 默认投影与蓝色描边惯性
 * ------------------------------------------------------------------------- */
.ant-btn {
  font-weight: var(--gx-fw-medium);
  border-radius: var(--gx-radius-md) !important;
  transition: all var(--gx-duration-fast) var(--gx-ease);
}

.ant-btn:not(:disabled):hover {
  transform: translateY(-1px);
}

.ant-btn-default {
  background: var(--gx-bg-surface);
  border-color: var(--gx-border) !important;
  color: var(--gx-text-primary) !important;
  box-shadow: none !important;
}

.ant-btn-default:hover:not(:disabled) {
  border-color: var(--gx-accent-border) !important;
  color: var(--gx-accent-active) !important;
  background: var(--gx-accent-soft);
}

.ant-btn-primary {
  background: var(--gx-accent) !important;
  border-color: var(--gx-accent) !important;
  box-shadow: none !important;
}

.ant-btn-primary:hover:not(:disabled) {
  background: var(--gx-accent-hover) !important;
  border-color: var(--gx-accent-hover) !important;
}

.ant-btn-primary:active:not(:disabled) {
  background: var(--gx-accent-active) !important;
  border-color: var(--gx-accent-active) !important;
}

.ant-btn-dangerous,
.ant-btn-dangerous.ant-btn-primary {
  background: var(--gx-danger-solid) !important;
  border-color: var(--gx-danger-solid) !important;
}

.ant-btn-link {
  color: var(--gx-accent) !important;
}

.ant-btn:focus-visible {
  box-shadow: var(--gx-shadow-focus) !important;
}

/* ---------------------------------------------------------------------------
 * 徽标 / 状态标签：统一语义色
 *  预设色 → 语义色映射，避免视图里 color="blue" 冒出廉价蓝
 * ------------------------------------------------------------------------- */
.ant-tag {
  border-radius: var(--gx-radius-sm) !important;
  font-size: var(--gx-fs-caption);
  line-height: 18px;
  padding-inline: 7px;
  margin-inline-end: 6px;
  border-width: 1px;
  font-weight: var(--gx-fw-medium);
}

/* info 系 */
.ant-tag.ant-tag-blue,
.ant-tag.ant-tag-geekblue,
.ant-tag.ant-tag-cyan,
.ant-tag.ant-tag-processing {
  color: var(--gx-info-text) !important;
  background: var(--gx-info-soft) !important;
  border-color: var(--gx-info-border) !important;
}

/* success 系 */
.ant-tag.ant-tag-green,
.ant-tag.ant-tag-lime,
.ant-tag.ant-tag-success {
  color: var(--gx-success-text) !important;
  background: var(--gx-success-soft) !important;
  border-color: var(--gx-success-border) !important;
}

/* warning 系 */
.ant-tag.ant-tag-gold,
.ant-tag.ant-tag-orange,
.ant-tag.ant-tag-volcano,
.ant-tag.ant-tag-warning {
  color: var(--gx-warning-text) !important;
  background: var(--gx-warning-soft) !important;
  border-color: var(--gx-warning-border) !important;
}

/* danger 系 */
.ant-tag.ant-tag-red,
.ant-tag.ant-tag-magenta,
.ant-tag.ant-tag-error {
  color: var(--gx-danger-text) !important;
  background: var(--gx-danger-soft) !important;
  border-color: var(--gx-danger-border) !important;
}

/* 分类/领域：低饱和暖紫，仅作中性分类用（暗主题） */
.ant-tag.ant-tag-purple {
  color: #c2b0e0 !important;
  background: rgba(155, 134, 201, 0.16) !important;
  border-color: rgba(155, 134, 201, 0.35) !important;
}

/* 闲置 / 默认 */
.ant-tag.ant-tag-default {
  color: var(--gx-idle-text) !important;
  background: var(--gx-idle-soft) !important;
  border-color: var(--gx-idle-border) !important;
}

/* ---------------------------------------------------------------------------
 * 指标数字
 * ------------------------------------------------------------------------- */
.ant-statistic-title {
  color: var(--gx-text-tertiary) !important;
  font-size: var(--gx-fs-caption) !important;
  margin-bottom: var(--gx-space-1);
}

.ant-statistic-content {
  color: var(--gx-text-primary) !important;
  font-weight: var(--gx-fw-semibold);
  font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------------------------------
 * 菜单（浅色侧栏）
 * ------------------------------------------------------------------------- */
.ant-menu-light,
.ant-menu-inline {
  background: transparent !important;
}

.ant-menu-light .ant-menu-item,
.ant-menu-light .ant-menu-submenu-title {
  border-radius: var(--gx-radius-md) !important;
  font-size: var(--gx-fs-sm);
}

.ant-menu-light .ant-menu-item-selected {
  font-weight: var(--gx-fw-semibold);
  /* 导航轨：选中项左侧琥珀竖条 + 柔和小底色 */
  box-shadow: inset 3px 0 0 var(--gx-accent) !important;
}

.ant-menu-inline .ant-menu-item::after {
  display: none !important; /* 去掉右侧竖条 */
}

/* 折叠态图标居中 */
.ant-menu-inline-collapsed .ant-menu-item,
.ant-menu-inline-collapsed .ant-menu-submenu-title {
  padding-inline: calc(50% - 8px) !important;
}

/* ---------------------------------------------------------------------------
 * 布局
 * ------------------------------------------------------------------------- */
.ant-layout {
  background: var(--gx-bg-app) !important;
}

.ant-layout-header {
  background: var(--gx-bg-surface) !important;
  border-bottom: 1px solid var(--gx-border-subtle);
  box-shadow: var(--gx-shadow-xs);
  padding-inline: var(--gx-space-5) !important;
  line-height: var(--gx-header-height) !important;
}

.ant-layout-sider {
  background: var(--gx-bg-sunken) !important;
  border-right: 1px solid var(--gx-border-subtle);
}

.ant-layout-sider-trigger {
  border-top: 1px solid var(--gx-border-subtle);
}

/* ---------------------------------------------------------------------------
 * 表单与输入
 * ------------------------------------------------------------------------- */
.ant-form-item-label > label {
  color: var(--gx-text-secondary) !important;
  font-size: var(--gx-fs-sm);
}

.ant-input,
.ant-input-number,
.ant-select-selector,
.ant-picker,
.ant-textarea {
  border-radius: var(--gx-radius-md) !important;
  border-color: var(--gx-border) !important;
}

.ant-input:hover,
.ant-select-selector:hover,
.ant-picker:hover {
  border-color: var(--gx-accent-border) !important;
}

.ant-input:focus,
.ant-input-focused,
.ant-select-focused .ant-select-selector {
  border-color: var(--gx-accent) !important;
  box-shadow: var(--gx-shadow-focus) !important;
}

/* ---------------------------------------------------------------------------
 * 弹窗 / 抽屉
 * ------------------------------------------------------------------------- */
.ant-modal-content {
  border-radius: var(--gx-radius-lg) !important;
}

.ant-modal-header {
  border-bottom: 1px solid var(--gx-border-subtle) !important;
  padding: var(--gx-space-4) var(--gx-space-5) !important;
}

.ant-modal-title {
  font-size: var(--gx-fs-section);
  font-weight: var(--gx-fw-semibold);
}

.ant-modal-footer {
  padding: var(--gx-space-3) var(--gx-space-5) !important;
}

.ant-drawer-header {
  border-bottom: 1px solid var(--gx-border-subtle) !important;
}

/* ---------------------------------------------------------------------------
 * 告警条 / 进度条 / 分隔线 / 空状态
 * ------------------------------------------------------------------------- */
.ant-alert {
  border-radius: var(--gx-radius-md) !important;
  font-size: var(--gx-fs-sm);
}

.ant-progress-bg {
  border-radius: var(--gx-radius-pill);
}

.ant-progress-line {
  margin-bottom: 0 !important;
}

.ant-divider {
  border-color: var(--gx-border-subtle) !important;
  margin: var(--gx-space-4) 0 !important;
}

.ant-empty-description {
  color: var(--gx-text-tertiary);
}

/* ---------------------------------------------------------------------------
 * 全局提示（message / notification）
 * ------------------------------------------------------------------------- */
.ant-message-notice-content {
  border-radius: var(--gx-radius-md) !important;
  box-shadow: var(--gx-shadow-md) !important;
}

/* ---------------------------------------------------------------------------
 * 视图内裸标题（h3/h4 等）统一色阶，替代散落的 #666/#888 内联色
 * 注：仅对「未内联指定颜色」的标题生效，内联色需视图重构时改 token。
 * ------------------------------------------------------------------------- */
.ant-typography h3,
.ant-typography h4,
h3,
h4 {
  color: var(--gx-text-primary);
}

/* ---------------------------------------------------------------------------
 * 降低动效偏好：关闭位移类微交互（WCAG 2.3.3）
 * ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .ant-card:hover {
    transform: none !important;
  }
  .ant-btn:not(:disabled):hover {
    transform: none !important;
  }
  .gx-rise > *,
  .gx-rise-item {
    animation: none !important;
  }
}
