/**
 * V21 设计系统 - 全局样式
 * 核心设计规范：Indigo 主色 / 大圆角 / 毛玻璃 / 渐变背景
 *
 * 变量命名规范：
 *   --{类别}-{语义}-{层级}
 *   例: --color-primary-500, --space-md, --radius-lg, --shadow-card
 *
 * 分类索引：
 *   1. 主色 / 辅色 / 强调色
 *   2. 状态色（success / warning / error / info）
 *   3. 中性色 / 灰阶
 *   4. 文字色
 *   5. 背景色
 *   6. 边框色
 *   7. 间距
 *   8. 字体
 *   9. 圆角
 *  10. 阴影
 *  11. 过渡动画
 *  12. 响应式断点
 *  13. 层级（z-index）
 *  14. 兼容别名（映射旧变量名 → 标准名）
 */

/* ============================================================
   浅色主题（默认）
   ============================================================ */
:root {
  /* ── 1. 主色 / 辅色 / 强调色 ─────────────────────────────── */
  --color-primary-50: #eef2ff;
  --color-primary-100: #e0e7ff;
  --color-primary-200: #c7d2fe;
  --color-primary-300: #a5b4fc;
  --color-primary-400: #818cf8;
  --color-primary-500: #6366f1;
  --color-primary-600: #4f46e5;
  --color-primary-700: #4338ca;
  --color-primary-800: #3730a3;
  --color-primary-900: #312e81;

  /* 主色快捷别名 */
  --primary-color: var(--color-primary-600);
  --primary-hover: var(--color-primary-500);
  --primary-dark: var(--color-primary-700);
  --primary-soft: var(--color-primary-50);
  --gradient-primary: linear-gradient(
    135deg,
    var(--color-primary-500),
    var(--color-primary-600)
  );

  /* 辅色 — Emerald */
  --color-secondary-50: #ecfdf5;
  --color-secondary-100: #d1fae5;
  --color-secondary-200: #a7f3d0;
  --color-secondary-300: #6ee7b7;
  --color-secondary-400: #34d399;
  --color-secondary-500: #10b981;
  --color-secondary-600: #059669;
  --color-secondary-700: #047857;
  --color-secondary-800: #065f46;
  --color-secondary-900: #064e3b;

  --secondary-color: var(--color-secondary-500);
  --secondary-hover: var(--color-secondary-400);
  --secondary-dark: var(--color-secondary-600);
  --secondary-soft: var(--color-secondary-50);

  /* 强调色 — Amber */
  --color-accent-50: #fffbeb;
  --color-accent-100: #fef3c7;
  --color-accent-200: #fde68a;
  --color-accent-300: #fcd34d;
  --color-accent-400: #fbbf24;
  --color-accent-500: #f59e0b;
  --color-accent-600: #d97706;
  --color-accent-700: #b45309;
  --color-accent-800: #92400e;
  --color-accent-900: #78350f;

  --accent-color: var(--color-accent-500);
  --accent-hover: var(--color-accent-400);
  --accent-dark: var(--color-accent-600);
  --accent-soft: var(--color-accent-50);

  /* ── 2. 状态色 ───────────────────────────────────────────── */
  --success-color: var(--color-secondary-500);
  --success-hover: var(--color-secondary-400);
  --success-soft: var(--color-secondary-50);
  --success-border: var(--color-secondary-200);

  --warning-color: var(--color-accent-500);
  --warning-hover: var(--color-accent-400);
  --warning-soft: var(--color-accent-50);
  --warning-border: var(--color-accent-200);

  --error-color: #ef4444;
  --error-hover: #f87171;
  --error-soft: #fef2f2;
  --error-border: #fecaca;

  --info-color: var(--color-primary-600);
  --info-hover: var(--color-primary-500);
  --info-soft: var(--color-primary-50);
  --info-border: var(--color-primary-200);

  /* ── 3. 中性色 / 灰阶 ────────────────────────────────────── */
  --color-gray-50: #f8fafc;
  --color-gray-100: #f1f5f9;
  --color-gray-200: #e2e8f0;
  --color-gray-300: #cbd5e1;
  --color-gray-400: #94a3b8;
  --color-gray-500: #64748b;
  --color-gray-600: #475569;
  --color-gray-700: #334155;
  --color-gray-800: #1e293b;
  --color-gray-900: #0f172a;
  --color-gray-950: #020617;

  /* ── 4. 文字色 ───────────────────────────────────────────── */
  --text-primary: var(--color-gray-900);
  --text-secondary: var(--color-gray-500);
  --text-tertiary: var(--color-gray-400);
  --text-disabled: var(--color-gray-300);
  --text-inverse: #ffffff;
  --text-link: var(--color-primary-600);
  --text-link-hover: var(--color-primary-500);

  /* ── 5. 背景色 ───────────────────────────────────────────── */
  --bg-primary: #ffffff;
  --bg-secondary: var(--color-gray-50);
  --bg-tertiary: var(--color-gray-100);
  --bg-elevated: #ffffff;
  --bg-overlay: rgba(15, 23, 42, 0.45);
  --bg-glass: rgba(255, 255, 255, 0.86);
  --bg-glass-border: rgba(255, 255, 255, 0.2);

  /* ── 6. 边框色 ───────────────────────────────────────────── */
  --border-color: var(--color-gray-200);
  --border-light: var(--color-gray-100);
  --border-dark: var(--color-gray-300);
  --divider-color: #f0f0f0;

  /* ── 7. 间距 ─────────────────────────────────────────────── */
  --space-0: 0;
  --space-xxs: 2px;
  --space-xs: 4px;
  --space-sm: 8px;
  --space-md: 16px;
  --space-lg: 24px;
  --space-xl: 32px;
  --space-2xl: 48px;
  --space-3xl: 64px;
  --space-4xl: 96px;

  /* ── 8. 字体 ─────────────────────────────────────────────── */
  --font-family-base:
    -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;
  --font-family-mono:
    "JetBrains Mono", "Fira Code", "SF Mono", Menlo, Consolas, monospace;

  --font-size-xs: 11px;
  --font-size-sm: 12px;
  --font-size-base: 14px;
  --font-size-md: 16px;
  --font-size-lg: 18px;
  --font-size-xl: 20px;
  --font-size-2xl: 24px;
  --font-size-3xl: 30px;
  --font-size-4xl: 36px;
  --font-size-5xl: 48px;

  --font-weight-normal: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;
  --font-weight-extrabold: 850;

  --line-height-tight: 1.25;
  --line-height-base: 1.5;
  --line-height-relaxed: 1.75;

  --letter-spacing-tight: -0.02em;
  --letter-spacing-base: 0;
  --letter-spacing-wide: 0.02em;
  --letter-spacing-wider: 0.04em;

  /* ── 9. 圆角 ─────────────────────────────────────────────── */
  --radius-none: 0;
  --radius-xs: 8px;
  --radius-sm: 14px;
  --radius-md: 18px;
  --radius-lg: 24px;
  --radius-xl: 28px;
  --radius-2xl: 36px;
  --radius-full: 9999px;

  /* ── 10. 阴影 ────────────────────────────────────────────── */
  --shadow-none: none;
  --shadow-xs: 0 4px 12px rgba(15, 23, 42, 0.04);
  --shadow-sm: 0 10px 30px rgba(15, 23, 42, 0.06);
  --shadow-md: 0 20px 58px rgba(15, 23, 42, 0.1);
  --shadow-lg: 0 30px 90px rgba(15, 23, 42, 0.15);
  --shadow-xl: 0 40px 120px rgba(15, 23, 42, 0.2);
  --shadow-hover: 0 18px 34px rgba(79, 70, 229, 0.28);
  --shadow-card: 0 24px 70px rgba(15, 23, 42, 0.09);
  --shadow-primary: 0 14px 26px rgba(79, 70, 229, 0.22);
  --shadow-inner: inset 0 2px 6px rgba(15, 23, 42, 0.06);
  --shadow-glass: 0 8px 32px rgba(15, 23, 42, 0.08);

  /* ── 11. 过渡动画 ────────────────────────────────────────── */
  --transition-fastest: 100ms ease;
  --transition-fast: 150ms ease;
  --transition-base: 200ms ease;
  --transition-slow: 300ms ease;
  --transition-slower: 500ms ease;

  --transition-colors:
    color 200ms ease, background-color 200ms ease, border-color 200ms ease;
  --transition-shadow: box-shadow 200ms ease;
  --transition-transform: transform 200ms ease;
  --transition-all: all 200ms ease;

  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in: cubic-bezier(0.4, 0, 1, 1);
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);

  /* ── 12. 响应式断点（仅做记录，媒体查询中直接使用像素值） ── */
  /* xs: 480px | sm: 576px | md: 768px | lg: 992px | xl: 1200px | 2xl: 1400px */
  --breakpoint-xs: 480px;
  --breakpoint-sm: 576px;
  --breakpoint-md: 768px;
  --breakpoint-lg: 992px;
  --breakpoint-xl: 1200px;
  --breakpoint-2xl: 1400px;

  /* ── 13. 层级 ────────────────────────────────────────────── */
  --z-dropdown: 100;
  --z-sticky: 200;
  --z-fixed: 300;
  --z-modal-backdrop: 400;
  --z-modal: 500;
  --z-popover: 600;
  --z-tooltip: 700;
  --z-toast: 800;

  /* ── 14. 兼容别名（旧变量名 → 标准名，后续逐步迁移） ─────── */
  --slate: var(--color-gray-900);
  --muted: var(--color-gray-500);
  --indigo: var(--color-primary-600);
  --indigo-soft: var(--color-primary-50);
  --line: var(--color-gray-200);
  --bg: var(--color-gray-50);
  --green: var(--color-secondary-500);
  --amber: var(--color-accent-500);
  --ant-color-primary: var(--color-primary-600);

  /* ── 15. 文档规范快捷别名 ─────────────────────────────────── */
  /* 主色快捷方式 */
  --primary: var(--color-primary-600);
  --primary-light: var(--color-primary-400);

  /* 辅色快捷方式 */
  --secondary: var(--color-secondary-500);
  --secondary-light: var(--color-secondary-400);

  /* 强调色快捷方式 */
  --accent: var(--color-accent-500);
  --accent-light: var(--color-accent-400);

  /* 状态色快捷方式 */
  --success: var(--color-secondary-500);
  --warning: var(--color-accent-500);
  --error: #ef4444;
  --info: var(--color-primary-600);

  /* 功能色 */
  --red: #ef4444;
}

/* ============================================================
   深色主题
   通过 .dark 类或 data-theme="dark" 属性手动激活（已禁用系统自动跟随）
   ============================================================ */
.dark,
[data-theme="dark"] {
  /* 主色保持，提高亮度 */
  --color-primary-50: #2e2b5e;
  --color-primary-500: #818cf8;
  --color-primary-600: #6366f1;
  --color-primary-700: #4f46e5;

  --primary-color: var(--color-primary-500);
  --primary-hover: var(--color-primary-400, #a5b4fc);
  --primary-dark: var(--color-primary-600);
  --primary-soft: rgba(99, 102, 241, 0.15);
  --gradient-primary: linear-gradient(
    135deg,
    var(--color-primary-500),
    var(--color-primary-600)
  );

  /* 辅色 */
  --secondary-color: var(--color-secondary-400, #34d399);
  --secondary-hover: var(--color-secondary-300, #6ee7b7);
  --secondary-soft: rgba(16, 185, 129, 0.15);

  /* 强调色 */
  --accent-color: var(--color-accent-400, #fbbf24);
  --accent-hover: var(--color-accent-300, #fcd34d);
  --accent-soft: rgba(245, 158, 11, 0.15);

  /* 状态色 */
  --success-color: var(--color-secondary-400, #34d399);
  --success-soft: rgba(16, 185, 129, 0.15);
  --warning-color: var(--color-accent-400, #fbbf24);
  --warning-soft: rgba(245, 158, 11, 0.15);
  --error-color: #f87171;
  --error-soft: rgba(239, 68, 68, 0.15);
  --info-color: var(--color-primary-500);
  --info-soft: rgba(99, 102, 241, 0.15);

  /* 文字 */
  --text-primary: #f1f5f9;
  --text-secondary: #94a3b8;
  --text-tertiary: #64748b;
  --text-disabled: #475569;
  --text-inverse: var(--color-gray-900);
  --text-link: var(--color-primary-400, #818cf8);
  --text-link-hover: var(--color-primary-300, #a5b4fc);

  /* 背景 */
  --bg-primary: #0f172a;
  --bg-secondary: #1e293b;
  --bg-tertiary: #334155;
  --bg-elevated: #1e293b;
  --bg-overlay: rgba(0, 0, 0, 0.65);
  --bg-glass: rgba(15, 23, 42, 0.8);
  --bg-glass-border: rgba(255, 255, 255, 0.08);

  /* 边框 */
  --border-color: #334155;
  --border-light: #1e293b;
  --border-dark: #475569;
  --divider-color: #1e293b;

  /* 阴影 */
  --shadow-xs: 0 4px 12px rgba(0, 0, 0, 0.2);
  --shadow-sm: 0 10px 30px rgba(0, 0, 0, 0.3);
  --shadow-md: 0 20px 58px rgba(0, 0, 0, 0.4);
  --shadow-lg: 0 30px 90px rgba(0, 0, 0, 0.5);
  --shadow-card: 0 24px 70px rgba(0, 0, 0, 0.35);
  --shadow-hover: 0 18px 34px rgba(99, 102, 241, 0.35);
  --shadow-primary: 0 14px 26px rgba(99, 102, 241, 0.3);

  /* 兼容别名 */
  --slate: #f1f5f9;
  --muted: #94a3b8;
  --indigo: #6366f1;
  --indigo-soft: rgba(99, 102, 241, 0.15);
  --line: #334155;
  --bg: #1e293b;
  --green: #34d399;
  --amber: #fbbf24;
  --ant-color-primary: #6366f1;
}

/* [已禁用] 跟随系统深色模式 — V21 UI 仅适配浅色主题，强制浅色 */
/* 如需手动深色，仍可通过 .dark 类或 data-theme="dark" 激活 */

/* ========== 全局背景装饰层 ========== */
body {
  position: relative;
}

body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(
      circle at 18% 20%,
      rgba(79, 70, 229, 0.11),
      transparent 30%
    ),
    radial-gradient(
      circle at 86% 14%,
      rgba(16, 185, 129, 0.08),
      transparent 28%
    ),
    radial-gradient(
      circle at 48% 80%,
      rgba(99, 102, 241, 0.08),
      transparent 34%
    ),
    #f8fafc;
}

body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-image: radial-gradient(
    circle,
    rgba(79, 70, 229, 0.1) 1px,
    transparent 1px
  );
  background-size: 38px 38px;
  opacity: 0.32;
}

#root {
  position: relative;
  z-index: 1;
}

/* ========== 页面通用布局 ========== */
.xx-page {
  padding: var(--space-xl);
  min-height: 100vh;
}

.xx-page-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--space-xl);
  padding: var(--space-lg);
  background: rgba(255, 255, 255, 0.94);
  border: 1px solid rgba(226, 232, 240, 0.95);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-card);
}

.xx-page-head h2 {
  font-size: 26px;
  font-weight: 850;
  color: var(--text-primary);
  margin: 0 0 6px;
}

.xx-page-head p {
  color: var(--text-secondary);
  margin: 0;
  font-size: 14px;
}

/* ========== V21 按钮样式 ========== */
.xx-primary-btn,
.ant-btn-primary {
  background: var(--gradient-primary) !important;
  color: white !important;
  border: none !important;
  border-radius: var(--radius-md) !important;
  font-weight: 850 !important;
  box-shadow: var(--shadow-primary) !important;
  padding: 12px 22px !important;
  transition: all 0.2s ease !important;
  height: auto !important;
}

.xx-primary-btn:hover,
.ant-btn-primary:hover {
  box-shadow: var(--shadow-hover) !important;
  transform: translateY(-1px);
  background: var(--gradient-primary) !important;
}

.xx-ghost-btn,
.ant-btn-default {
  background: var(--bg-primary) !important;
  border: 1px solid var(--border-color) !important;
  border-radius: var(--radius-md) !important;
  font-weight: 850 !important;
  padding: 12px 22px !important;
  transition: all 0.2s ease !important;
  color: var(--text-primary) !important;
  height: auto !important;
}

.xx-ghost-btn:hover,
.ant-btn-default:hover {
  border-color: var(--primary-color) !important;
  color: var(--primary-color) !important;
}

/* Ant Design Button 圆角覆盖 */
.ant-btn {
  border-radius: var(--radius-md) !important;
}

/* ========== V21 卡片样式 ========== */
.xx-card {
  background: rgba(255, 255, 255, 0.94);
  border: 1px solid rgba(226, 232, 240, 0.95);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-card);
  padding: var(--space-xl);
  margin-bottom: var(--space-lg);
  transition: all 0.25s ease;
}

.xx-card:hover {
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
}

.xx-card h3 {
  font-size: 20px;
  font-weight: 850;
  color: var(--text-primary);
  margin: 0 0 var(--space-md);
}

/* ========== 上传区域 ========== */
.xx-upload-zone {
  border: 2px dashed var(--border-color);
  border-radius: var(--radius-lg);
  padding: 48px;
  text-align: center;
  background: var(--bg-secondary);
  cursor: pointer;
  transition: all 0.2s ease;
}

.xx-upload-zone:hover {
  border-color: var(--primary-color);
  background: var(--primary-soft);
}

.xx-upload-zone .icon {
  font-size: 48px;
  margin-bottom: var(--space-md);
}

.xx-upload-zone p {
  color: var(--text-secondary);
  margin: var(--space-sm) 0;
  font-size: 14px;
}

.xx-upload-btn {
  margin-top: var(--space-md);
}

/* ========== 空状态 ========== */
.xx-empty-state {
  text-align: center;
  padding: 48px;
  color: var(--text-secondary);
}

.xx-empty-state .icon {
  font-size: 64px;
  margin-bottom: var(--space-md);
}

/* ========== 工具类 ========== */
.text-center {
  text-align: center;
}
.text-right {
  text-align: right;
}
.text-primary {
  color: var(--primary-color);
}
.text-muted {
  color: var(--text-secondary);
}

.mt-sm {
  margin-top: var(--space-sm);
}
.mt-md {
  margin-top: var(--space-md);
}
.mt-lg {
  margin-top: var(--space-lg);
}
.mb-sm {
  margin-bottom: var(--space-sm);
}
.mb-md {
  margin-bottom: var(--space-md);
}
.mb-lg {
  margin-bottom: var(--space-lg);
}

/* ========== 卡片悬浮效果 ========== */
.card-hover {
  transition: all 0.3s ease;
  cursor: pointer;
}

.card-hover:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lg);
}

/* ========== 选中态 ========== */
.selected-plan,
.selected-item {
  border: 2px solid var(--primary-color) !important;
  box-shadow: var(--shadow-md) !important;
}

/* ========== 网格布局 ========== */
.xx-grid-2 {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-md);
}

.xx-grid-3 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-md);
}

.xx-grid-4 {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-md);
}

@media (max-width: 1200px) {
  .xx-grid-4 {
    grid-template-columns: repeat(3, 1fr);
  }
  .xx-grid-3 {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 768px) {
  .xx-grid-4,
  .xx-grid-3,
  .xx-grid-2 {
    grid-template-columns: 1fr;
  }
}
