:root {
  /* Primitive · warm neutral */
  --stone-50: #FAFAF9;
  --stone-100: #F5F5F4;
  --stone-200: #E7E5E4;
  --stone-300: #D6D3D1;
  --stone-400: #A8A29E;
  --stone-500: #78716C;
  --stone-600: #57534E;
  --stone-700: #44403C;
  --stone-800: #292524;
  --stone-900: #1C1917;

  /* Primitive · indigo */
  --indigo-50: #EEF2FF;
  --indigo-100: #E0E7FF;
  --indigo-200: #C7D2FE;
  --indigo-300: #A5B4FC;
  --indigo-400: #818CF8;
  --indigo-500: #6366F1;
  --indigo-600: #4F46E5;
  --indigo-700: #4338CA;
  --indigo-800: #3730A3;
  --indigo-900: #312E81;

  /* Semantic surfaces and text */
  --surface-app: #F7F7F5;
  --surface-card: #FFFFFF;
  --surface-sunken: var(--stone-100);
  --surface-raised: #FFFFFF;
  --surface-selected: var(--indigo-50);
  --surface-ai: #F7F6FF;
  --surface-map: #EEF2EA;
  --surface-map-deep: #E3E9DE;
  --surface-video: #252A34;
  --surface-video-raised: #323845;
  --text-primary: var(--stone-900);
  --text-secondary: var(--stone-600);
  --text-muted: var(--stone-500);
  --text-disabled: var(--stone-400);
  --text-inverse: #FFFFFF;
  --text-video: #E7EAF0;
  --border-default: var(--stone-200);
  --border-strong: var(--stone-300);
  --border-selected: var(--indigo-300);

  /* Action */
  --action-primary: var(--indigo-600);
  --action-primary-hover: var(--indigo-700);
  --action-primary-active: var(--indigo-800);
  --action-primary-soft: var(--indigo-50);
  --action-primary-soft-hover: var(--indigo-100);
  --focus-ring-color: var(--indigo-500);

  /* Semantic states */
  --success: #15803D;
  --success-bg: #F0FDF4;
  --success-border: #BBF7D0;
  --warning: #B45309;
  --warning-bg: #FFFBEB;
  --warning-border: #FDE68A;
  --danger: #B91C1C;
  --danger-bg: #FEF2F2;
  --danger-border: #FECACA;
  --info: var(--indigo-700);
  --info-bg: var(--indigo-50);
  --info-border: var(--indigo-200);

  /* Chart and map */
  --chart-primary: var(--indigo-600);
  --chart-secondary: #0891B2;
  --chart-tertiary: #C2410C;
  --chart-grid: var(--stone-200);
  --chart-area: var(--indigo-100);
  --map-route: #9CA892;
  --map-water: #DDE9EF;
  --map-field: #E6E0CF;
  --map-overlay: rgba(255, 255, 255, 0.68);

  /* Video */
  --video-grid: rgba(231, 234, 240, 0.12);
  --video-veil: rgba(37, 42, 52, 0.72);
  --video-accent: #A5B4FC;
  --video-accent-soft: rgba(165, 180, 252, 0.18);
  --video-track: rgba(231, 234, 240, 0.24);

  /* Overlay and shadows */
  --overlay: rgba(28, 25, 23, 0.38);
  --shadow-xs: 0 1px 2px rgba(28, 25, 23, 0.05);
  --shadow-sm: 0 1px 3px rgba(28, 25, 23, 0.08), 0 1px 2px rgba(28, 25, 23, 0.04);
  --shadow-md: 0 8px 24px rgba(28, 25, 23, 0.08);
  --shadow-lg: 0 16px 40px rgba(28, 25, 23, 0.14);

  /* Typography */
  --font-sans: "PingFang SC", "Noto Sans SC", "Microsoft YaHei", system-ui, sans-serif;
  --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
  --font-caption: 12px;
  --font-sm: 13px;
  --font-base: 14px;
  --font-md: 16px;
  --font-lg: 18px;
  --font-xl: 20px;
  --font-2xl: 24px;
  --font-3xl: 30px;
  --line-caption: 16px;
  --line-sm: 18px;
  --line-base: 22px;
  --line-md: 24px;
  --line-lg: 28px;
  --line-xl: 32px;
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-semibold: 600;

  /* 4pt spacing */
  --space-0: 0;
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;
  --space-20: 80px;
  --space-24: 96px;

  /* Radius */
  --radius-xs: 4px;
  --radius-sm: 6px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;
  --radius-full: 9999px;

  /* Component dimensions */
  --sidebar-width: 248px;
  --sidebar-collapsed-width: 72px;
  --topbar-height: 64px;
  --content-max: 1440px;
  --page-pad-desktop: 32px;
  --page-pad-tablet: 24px;
  --page-pad-mobile: 16px;
  --control-height: 40px;
  --touch-target: 48px;
  --table-row-height: 48px;
  --drawer-width: 600px;
  --ai-drawer-width: 460px;
  --panel-min-width: 320px;
  --filter-min-width: 180px;
  --login-card-width: 440px;
  --camera-rail-width: 280px;
  --mobile-tab-height: 64px;
  --map-height: 560px;
  --map-height-tablet: 480px;
  --map-height-mobile: 430px;
  --chart-height: 260px;
  --chart-height-large: 320px;

  /* Motion */
  --ease-default: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-enter: cubic-bezier(0, 0, 0.2, 1);
  --ease-exit: cubic-bezier(0.4, 0, 1, 1);
  --duration-fast: 150ms;
  --duration-normal: 200ms;
  --duration-slow: 300ms;

  /* Layering */
  --z-dropdown: 1000;
  --z-sticky: 1100;
  --z-fixed: 1200;
  --z-backdrop: 1300;
  --z-modal: 1400;
  --z-popover: 1500;
  --z-toast: 1600;
}
