:root {
  /* ─── Fonts ─── */
  --font-display: 'Playfair Display', serif;
  --font-body: 'Manrope', sans-serif;

  --font-size-xs: calc(0.6875rem + 0.1vw);
  --font-size-sm: calc(0.8125rem + 0.12vw);
  --font-size-base: calc(0.875rem + 0.15vw);
  --font-size-lg: calc(0.9375rem + 0.18vw);
  --font-size-xl: calc(1rem + 0.21vw);
  --font-size-2xl: calc(1.125rem + 0.25vw);
  --font-size-3xl: calc(1.375rem + 0.3vw);
  --font-size-4xl: calc(1.75rem + 0.4vw);
  --font-size-hero: clamp(2.5rem, 6vw, 5rem);

  --font-weight-regular: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;
  --font-weight-black: 900;

  --gap-2xs: 0.25rem;
  --gap-xs: 0.5rem;
  --gap-sm: 0.75rem;
  --gap-md: 1rem;
  --gap-lg: 1.5rem;
  --gap-xl: 2rem;
  --gap-2xl: 3rem;
  --gap-3xl: 4.5rem;

  --radius-xs: 4px;
  --radius-sm: 6px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 20px;
  --radius-full: 999px;

  --z-below: -1;
  --z-base: 0;
  --z-raised: 10;
  --z-dropdown: 100;
  --z-sticky: 200;
  --z-overlay: 300;
  --z-modal: 400;
  --z-toast: 600;
  --z-tooltip: 800;
  --z-top: 9999;

  --transition-fast: 0.2s ease;
  --transition-base: 0.3s ease;
  --transition-slow: 0.6s ease;

  --blur-sm: blur(4px);
  --blur-md: blur(8px);
  --blur-lg: blur(20px);

  --header-height: 80px;

  --container-sm: 640px;
  --container-md: 768px;
  --container-lg: 1024px;
  --container-xl: 1280px;
  --container-2xl: 1440px;

  --size-icon-sm: 16px;
  --size-icon-md: 20px;
  --size-icon-lg: 24px;
  --size-icon-xl: 32px;

  --height-input-sm: 32px;
  --height-input-md: 40px;
  --height-input-lg: 48px;

  --height-btn-sm: 32px;
  --height-btn-md: 40px;
  --height-btn-lg: 48px;

  --width-card-sm: 260px;
  --width-card-md: 320px;
  --width-card-lg: 400px;

  --height-card-sm: 180px;
  --height-card-md: 220px;
  --height-card-lg: 280px;

  --height-hero-sm: 400px;
  --height-hero-md: 560px;
  --height-hero-lg: 720px;

  --ratio-square: 1 / 1;
  --ratio-landscape: 16 / 9;
  --ratio-portrait: 3 / 4;
  --ratio-banner: 3 / 1;
  --ratio-destination: 4 / 3;
}

[theme="light"] {
  --bg-transparent: transparent;
  --bg-primary: #FFFFFF;
  --bg-secondary: #F8F9FA;
  --bg-tertiary: #F1F3F5;
  --bg-elevated: #FFFFFF;
  --bg-hover: #E9ECEF;
  --bg-active: #DEE2E6;

  --bg-overlay: rgba(255, 255, 255, 0.75);
  --bg-overlay-soft: rgba(255, 255, 255, 0.55);
  --bg-overlay-light: rgba(0, 0, 0, 0.03);

  --text-primary: #212529;
  --text-secondary: #495057;
  --text-muted: #868E96;
  --text-disabled: #ADB5BD;
  --text-inverse: #FFFFFF;

  --text-overlay: rgba(33, 37, 41, 0.40);
  --text-overlay-soft: rgba(33, 37, 41, 0.25);

  --color-accent: #D80621;
  --color-accent-hover: #B8051C;
  --color-accent-active: #9C0418;
  --color-accent-light: #FFE9EB;
  --color-accent-soft: rgba(216, 6, 33, 0.10);

  --color-success: #16A34A;
  --color-success-light: #DCFCE7;
  --color-success-soft: rgba(22, 163, 74, 0.12);

  --color-warning: #CA8A04;
  --color-warning-light: #FEF9C3;
  --color-warning-soft: rgba(202, 138, 4, 0.12);

  --color-error: #DC2626;
  --color-error-light: #FEE2E2;
  --color-error-soft: rgba(220, 38, 38, 0.12);

  --color-info: #0284C7;
  --color-info-light: #E0F2FE;
  --color-info-soft: rgba(2, 132, 199, 0.12);

  --color-border: #E9ECEF;
  --color-divider: #DEE2E6;

  --color-scrim: linear-gradient(to right, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0.70) 50%, rgba(255, 255, 255, 0.10) 100%);
  --color-scrim-bottom: linear-gradient(to top, rgba(255, 255, 255, 0.96) 0%, rgba(255, 255, 255, 0.50) 40%, transparent 100%);
  --color-scrim-full: rgba(255, 255, 255, 0.78);

  --player-controls-bg: rgba(255, 255, 255, 0.85);
  --player-controls-hover: rgba(255, 255, 255, 0.95);

  --player-progress-bg: #DEE2E6;
  --player-progress-buffered: #ADB5BD;
  --player-progress-fill: var(--color-accent);

  --player-icon: var(--text-primary);
  --player-icon-active: var(--color-accent);

  --shadow-soft: 0 4px 12px rgba(0, 0, 0, 0.08);
  --shadow-md: 0 8px 20px rgba(0, 0, 0, 0.12);
  --shadow-strong: 0 12px 32px rgba(0, 0, 0, 0.16);
  --shadow-glow: 0 0 32px rgba(216, 6, 33, 0.18);

  --skeleton-bg: #E9ECEF;
  --skeleton-wave: linear-gradient(90deg, #E9ECEF 25%, #F8F9FA 50%, #E9ECEF 75%);
  --skeleton-size: 200% 100%;
}

/* ─── Thème sombre ─── */
[theme="dark"] {
  --bg-transparent: transparent;
  --bg-primary: #0D0D0D;
  --bg-secondary: #151515;
  --bg-tertiary: #1C1C1C;
  --bg-elevated: #242424;
  --bg-hover: #2E2E2E;
  --bg-active: #383838;

  --bg-overlay: rgba(0, 0, 0, 0.65);
  --bg-overlay-soft: rgba(0, 0, 0, 0.45);
  --bg-overlay-light: rgba(255, 255, 255, 0.04);

  --text-primary: #F5F5F5;
  --text-secondary: #B3B3B3;
  --text-muted: #808080;
  --text-disabled: #666666;
  --text-inverse: #000000;

  --text-overlay: rgba(245, 245, 245, 0.40);
  --text-overlay-soft: rgba(245, 245, 245, 0.25);

  --color-accent: #E8173A;
  --color-accent-hover: #FF2E4F;
  --color-accent-active: #C40F2E;
  --color-accent-light: #2D0409;
  --color-accent-soft: rgba(232, 23, 58, 0.15);

  --color-success: #22C55E;
  --color-success-light: #052E16;
  --color-success-soft: rgba(34, 197, 94, 0.15);

  --color-warning: #FACC15;
  --color-warning-light: #2D1F00;
  --color-warning-soft: rgba(250, 204, 21, 0.15);

  --color-error: #EF4444;
  --color-error-light: #2D0A0A;
  --color-error-soft: rgba(239, 68, 68, 0.15);

  --color-info: #38BDF8;
  --color-info-light: #0C2233;
  --color-info-soft: rgba(56, 189, 248, 0.15);

  --color-border: #2A2A2A;
  --color-divider: #333333;

  --color-scrim: linear-gradient(to right, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.70) 50%, rgba(0, 0, 0, 0.10) 100%);
  --color-scrim-bottom: linear-gradient(to top, rgba(0, 0, 0, 0.96) 0%, rgba(0, 0, 0, 0.50) 40%, transparent 100%);
  --color-scrim-full: rgba(0, 0, 0, 0.78);

  --player-controls-bg: rgba(0, 0, 0, 0.75);
  --player-controls-hover: rgba(0, 0, 0, 0.90);

  --player-progress-bg: #333333;
  --player-progress-buffered: #444444;
  --player-progress-fill: var(--color-accent);

  --player-icon: var(--text-primary);
  --player-icon-active: var(--color-accent);

  --shadow-soft: 0 4px 16px rgba(0, 0, 0, 0.60);
  --shadow-md: 0 8px 32px rgba(0, 0, 0, 0.75);
  --shadow-strong: 0 12px 48px rgba(0, 0, 0, 0.90);
  --shadow-glow: 0 0 40px rgba(232, 23, 58, 0.25);

  --skeleton-bg: #1A1A1A;
  --skeleton-wave: linear-gradient(90deg, #1A1A1A 25%, #2E2E2E 50%, #1A1A1A 75%);
  --skeleton-size: 200% 100%;
}

/* ─── Contact page ─── */
[theme="light"] {
  --contact-map-border: var(--color-border);
  --contact-info-bg: var(--bg-secondary);
  --contact-form-bg: var(--bg-elevated);
}

[theme="dark"] {
  --contact-map-border: var(--color-border);
  --contact-info-bg: var(--bg-tertiary);
  --contact-form-bg: var(--bg-elevated);
}