/* Hybrix — design system « Marine précis » (v1, 17 octobre 2026)
   Source de vérité : DESIGN.md. Équivalent React Native : tokens.ts.
   Mode clair par défaut ; mode sombre via prefers-color-scheme ou [data-theme="dark"]. */


:root {
  /* Échelles de base (identiques dans les deux modes) */
  --blue-50: #EEF3FF;
  --blue-100: #DCE6FF;
  --blue-200: #B9CCFF;
  --blue-300: #8EABFF;
  --blue-400: #7FA0FF;
  --blue-500: #2F6BFF;
  --blue-600: #1F55E0;
  --blue-700: #1A45B5;
  --blue-800: #173A8F;
  --blue-900: #142F6E;

  --navy-50: #F4F6FA;
  --navy-100: #E1E6EF;
  --navy-200: #C3CCDB;
  --navy-300: #9AA8BF;
  --navy-400: #8494AE;
  --navy-500: #5B6B85;
  --navy-600: #44536C;
  --navy-700: #22365A;
  --navy-800: #11233F;
  --navy-900: #0B1F3A;
  --navy-950: #071427;

  --green-50: #E3F5EC;
  --green-400: #4CC88E;
  --green-500: #1E9E62;
  --green-700: #13734A;
  --amber-50: #FDF3DC;
  --amber-400: #F2B84B;
  --amber-500: #E8A317;
  --amber-700: #8A5A00;
  --red-50: #FDECEC;
  --red-400: #FF7A7E;
  --red-600: #C9302C;
  --red-700: #B42328;

  /* Rôles — mode clair */
  --color-bg: var(--navy-50);
  --color-surface: #FFFFFF;
  --color-surface-raised: #FFFFFF;
  --color-surface-hero: var(--navy-900);
  --color-surface-sunken: var(--navy-100);
  --color-border: var(--navy-100);
  --color-border-strong: var(--navy-200);
  --color-overlay: rgba(7, 20, 39, 0.5);

  --color-text-primary: var(--navy-900);
  --color-text-secondary: var(--navy-600);
  --color-text-muted: var(--navy-500);
  --color-text-on-hero: #FFFFFF;
  --color-text-on-hero-muted: #9FB3D6;
  --color-text-on-action: #FFFFFF;
  --color-text-link: var(--blue-600);

  --color-action: var(--blue-600);
  --color-action-pressed: var(--blue-700);
  --color-accent: var(--blue-500);
  --color-accent-soft: var(--blue-50);
  --color-accent-text: var(--blue-700);
  --color-focus: var(--blue-500);

  --color-success: var(--green-500);
  --color-success-text: var(--green-700);
  --color-success-soft: var(--green-50);
  --color-warning: var(--amber-500);
  --color-warning-text: var(--amber-700);
  --color-warning-soft: var(--amber-50);
  --color-danger: var(--red-600);
  --color-danger-text: var(--red-700);
  --color-danger-soft: var(--red-50);

  /* Typographie */
  --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, sans-serif;
  --fw-regular: 400;
  --fw-semibold: 600;
  --fw-bold: 700;

  --fs-caption: 0.75rem;   /* 12 */
  --fs-footnote: 0.875rem; /* 14 */
  --fs-body: 1rem;         /* 16 */
  --fs-callout: 1.125rem;  /* 18 */
  --fs-title-3: 1.25rem;   /* 20 */
  --fs-title-2: 1.5rem;    /* 24 */
  --fs-title-1: 1.875rem;  /* 30 */
  --fs-display: 2.25rem;   /* 36 */

  --lh-tight: 1.15;
  --lh-snug: 1.3;
  --lh-body: 1.5;

  --ls-overline: 0.08em;
  --ls-display: -0.02em;

  /* Espacement (base 4) */
  --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;

  /* Rayons */
  --radius-sm: 8px;
  --radius-md: 12px;
  --radius-lg: 16px;
  --radius-xl: 24px;
  --radius-full: 999px;

  /* Profondeur (bleutée, jamais noire pure) */
  --shadow-xs: 0 1px 2px rgba(11, 31, 58, 0.04);
  --shadow-sm: 0 1px 3px rgba(11, 31, 58, 0.06), 0 1px 2px rgba(11, 31, 58, 0.04);
  --shadow-md: 0 4px 12px rgba(11, 31, 58, 0.06), 0 2px 4px rgba(11, 31, 58, 0.04);
  --shadow-lg: 0 12px 24px rgba(11, 31, 58, 0.10), 0 4px 8px rgba(11, 31, 58, 0.05);
  --shadow-xl: 0 24px 48px rgba(11, 31, 58, 0.16);
  --shadow-action: 0 6px 16px rgba(31, 85, 224, 0.30);

  --z-base: 0;
  --z-sticky: 10;
  --z-tabbar: 20;
  --z-sheet-backdrop: 30;
  --z-sheet: 40;
  --z-popover: 50;
  --z-toast: 70;

  /* Mouvement */
  --dur-fast: 120ms;
  --dur-base: 200ms;
  --dur-slow: 320ms;
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --color-bg: #0E0F11;
    --color-surface: #1A1C20;
    --color-surface-raised: #222429;
    --color-surface-hero: #1E2A44;
    --color-surface-sunken: #26282D;
    --color-border: #2A2D33;
    --color-border-strong: #3A3E46;
    --color-overlay: rgba(0, 0, 0, 0.6);
    --color-text-primary: #F2F3F5;
    --color-text-secondary: #B4B8C0;
    --color-text-muted: #8B9099;
    --color-text-on-hero-muted: #AFC0DE;
    --color-text-link: var(--blue-400);
    --color-action: var(--blue-600);
    --color-action-pressed: var(--blue-700);
    --color-accent: var(--blue-400);
    --color-accent-soft: #1C2840;
    --color-accent-text: var(--blue-300);
    --color-success-text: var(--green-400);
    --color-success-soft: #10291F;
    --color-warning-text: var(--amber-400);
    --color-warning-soft: #2E2511;
    --color-danger: var(--red-600);
    --color-danger-text: var(--red-400);
    --color-danger-soft: #33191B;
    --shadow-xs: none;
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
    --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.35);
    --shadow-lg: 0 12px 24px rgba(0, 0, 0, 0.45);
    --shadow-xl: 0 24px 48px rgba(0, 0, 0, 0.55);
    --shadow-action: 0 6px 16px rgba(31, 85, 224, 0.35);
  }
}

:root[data-theme="dark"] {
  --color-bg: #0E0F11;
  --color-surface: #1A1C20;
  --color-surface-raised: #222429;
  --color-surface-hero: #1E2A44;
  --color-surface-sunken: #26282D;
  --color-border: #2A2D33;
  --color-border-strong: #3A3E46;
  --color-overlay: rgba(0, 0, 0, 0.6);
  --color-text-primary: #F2F3F5;
  --color-text-secondary: #B4B8C0;
  --color-text-muted: #8B9099;
  --color-text-on-hero-muted: #AFC0DE;
  --color-text-link: var(--blue-400);
  --color-action: var(--blue-600);
  --color-action-pressed: var(--blue-700);
  --color-accent: var(--blue-400);
  --color-accent-soft: #1C2840;
  --color-accent-text: var(--blue-300);
  --color-success-text: var(--green-400);
  --color-success-soft: #10291F;
  --color-warning-text: var(--amber-400);
  --color-warning-soft: #2E2511;
  --color-danger: var(--red-600);
  --color-danger-text: var(--red-400);
  --color-danger-soft: #33191B;
  --shadow-xs: none;
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
  --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.35);
  --shadow-lg: 0 12px 24px rgba(0, 0, 0, 0.45);
  --shadow-xl: 0 24px 48px rgba(0, 0, 0, 0.55);
  --shadow-action: 0 6px 16px rgba(31, 85, 224, 0.35);
}

/* Base */
*, *::before, *::after { box-sizing: border-box; }
body {
  margin: 0;
  background: var(--color-bg);
  color: var(--color-text-primary);
  font-family: var(--font-sans);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
}

/* Utilitaires typographiques */
.t-display { font-size: var(--fs-display); font-weight: var(--fw-bold); line-height: var(--lh-tight); letter-spacing: var(--ls-display); font-variant-numeric: tabular-nums; }
.t-title-1 { font-size: var(--fs-title-1); font-weight: var(--fw-bold); line-height: var(--lh-tight); letter-spacing: var(--ls-display); }
.t-title-2 { font-size: var(--fs-title-2); font-weight: var(--fw-bold); line-height: var(--lh-snug); }
.t-title-3 { font-size: var(--fs-title-3); font-weight: var(--fw-semibold); line-height: var(--lh-snug); }
.t-callout { font-size: var(--fs-callout); font-weight: var(--fw-semibold); line-height: var(--lh-snug); }
.t-body { font-size: var(--fs-body); font-weight: var(--fw-regular); line-height: var(--lh-body); }
.t-footnote { font-size: var(--fs-footnote); line-height: var(--lh-body); }
.t-caption { font-size: var(--fs-caption); line-height: var(--lh-snug); }
.t-overline { font-size: var(--fs-caption); font-weight: var(--fw-semibold); letter-spacing: var(--ls-overline); text-transform: uppercase; }
.t-num { font-variant-numeric: tabular-nums; }
.t-secondary { color: var(--color-text-secondary); }
.t-muted { color: var(--color-text-muted); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: 0ms !important; animation-duration: 0ms !important; } /* exception voulue : accessibilité */
}
