/*
 * AURA — jetons de design
 * =======================
 *
 * **Seul endroit du dépôt où une valeur brute est autorisée.** Toute couleur,
 * espacement, rayon ou durée écrit ailleurs est un bogue : deux `:root`
 * concurrents — `main.css` et `base.dashboard.css` — redéfinissaient les mêmes
 * variables avec des valeurs divergentes, et produisaient deux générations
 * d'écrans dans un même parcours.
 *
 * Contraste
 * ---------
 * Chaque couple texte/fond est vérifié par `scripts/verifier_contrastes.py`,
 * exécuté en CI. Quatre jetons ont été **éclaircis** par rapport à la charte
 * d'origine, teinte et saturation conservées, parce qu'ils échouaient au seuil
 * WCAG AA de 4.5:1 :
 *
 *     text-muted  #6B7C8A -> #808F9C     primary  #0A87C3 -> #0B96D8
 *     danger      #ef4444 -> #F15A5A     info     #3b82f6 -> #4A8BF7
 *
 * Le fond de référence est `--bg-hero-2` (#0A2A3A), le plus clair : c'est lui
 * qui écrase le contraste d'un texte clair, et viser le fond le plus sombre
 * aurait laissé passer des couples illisibles.
 *
 * Le marché visé inclut le secteur public européen, où l'accessibilité est une
 * obligation légale. Un produit de conformité inaccessible est intenable.
 */

:root {
  /* ── Fonds ───────────────────────────────────────────────────────────── */
  --bg-base: #0b0f14;
  --bg-hero-1: #071a24;
  --bg-hero-2: #0a2a3a;
  --bg-card: #12181f;
  --bg-card-hover: #1a2129;
  --bg-footer: #08080c;
  --bg-overlay: rgb(11 15 20 / 72%);

  /* ── Marque ──────────────────────────────────────────────────────────── */
  /* `--primary` porte du texte et des liens : c'est la valeur validée AA.
     `--primary-fill` garde le bleu d'origine pour les aplats, où le seuil
     applicable est 3:1 et où la teinte de charte doit rester exacte. */
  --primary: #0b96d8;
  --primary-fill: #0a87c3;
  --primary-hover: #0fa0e0;

  --accent-gold: #d6b83b;
  --accent-gold-hover: #e6c84a;
  --accent-gold-soft: #f7ea98;

  /* ── Texte ───────────────────────────────────────────────────────────── */
  --text-main: #eaf2f7;
  --text-secondary: #9fb0be;
  --text-muted: #808f9c;
  /* Texte posé sur un aplat or ou clair. Ratio 9.86:1 sur l'or. */
  --text-on-accent: #0b0f14;

  /* ── Structure ───────────────────────────────────────────────────────── */
  --border-subtle: rgb(159 176 190 / 12%);
  --border-strong: rgb(159 176 190 / 28%);
  --gradient-hero: linear-gradient(135deg, #071a24 0%, #0a2a3a 100%);
  --gradient-gold: linear-gradient(135deg, #d6b83b 0%, #e6c84a 100%);

  /* ── Sémantique ──────────────────────────────────────────────────────── */
  --success: #10b981;
  --warning: #f59e0b;
  --danger: #f15a5a;
  --info: #4a8bf7;

  --success-bg: rgb(16 185 129 / 12%);
  --warning-bg: rgb(245 158 11 / 12%);
  --danger-bg: rgb(241 90 90 / 12%);
  --info-bg: rgb(74 139 247 / 12%);

  /* ── Provenance des preuves ──────────────────────────────────────────── */
  /*
   * Spécifique à AURA, et central au produit. Le backend distingue mesuré,
   * estimé et déclaré, et distingue « non évalué » de « non satisfait ».
   * L'interface doit propager ces distinctions jusqu'au pixel.
   *
   * Ces quatre états ne doivent **jamais** être portés par la couleur seule :
   * chaque `EvidenceBadge` combine une couleur, une icône et un libellé. Un
   * daltonien, une impression en noir et blanc, un écran mal réglé — dans les
   * trois cas l'information doit survivre.
   */
  --evidence-measured: #10b981;
  --evidence-estimated: #f59e0b;
  --evidence-declared: #9fb0be;
  /* Même valeur corrigée que `--text-muted` : « non évalué » est un état
     de texte, et il échouait au seuil sous l'ancienne valeur de charte. */
  --evidence-none: #808f9c;

  --evidence-measured-bg: rgb(16 185 129 / 12%);
  --evidence-estimated-bg: rgb(245 158 11 / 12%);
  --evidence-declared-bg: rgb(159 176 190 / 12%);
  --evidence-none-bg: rgb(107 124 138 / 10%);

  /* ── Typographie ─────────────────────────────────────────────────────── */
  --font-display: "Crimson Pro", georgia, "Times New Roman", serif;
  --font-body: "Work Sans", -apple-system, blinkmacsystemfont, "Segoe UI", sans-serif;
  --font-mono: "SFMono-Regular", consolas, "Liberation Mono", monospace;

  /* Échelle typographique. Les tailles montent d'environ 1.25 par cran, ce qui
     donne une hiérarchie lisible sans écarts brutaux. */
  --text-display: 3.5rem;
  --text-h1: 2.5rem;
  --text-h2: 1.75rem;
  --text-h3: 1.25rem;
  --text-h4: 1.0625rem;
  --text-body: 1rem;
  --text-small: 0.875rem;
  --text-tiny: 0.75rem;

  --leading-tight: 1.15;
  --leading-heading: 1.25;
  --leading-body: 1.6;
  --leading-loose: 1.75;

  --weight-regular: 400;
  --weight-medium: 500;
  --weight-semibold: 600;
  --weight-bold: 700;

  /* ── Espacement, base 4 px ───────────────────────────────────────────── */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;
  --space-9: 6rem;

  /* ── Rayons et ombres ────────────────────────────────────────────────── */
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 20px;
  --radius-pill: 999px;

  --shadow-sm: 0 1px 2px rgb(0 0 0 / 24%);
  --shadow-md: 0 4px 12px rgb(0 0 0 / 28%);
  --shadow-lg: 0 12px 32px rgb(0 0 0 / 36%);

  /* ── Focus ───────────────────────────────────────────────────────────── */
  /*
   * L'or sur fond sombre est le seul anneau qui reste visible sur toutes nos
   * surfaces. Le contraste du focus est l'oubli le plus fréquent des thèmes
   * sombres, et il rend la navigation au clavier impraticable.
   */
  --focus-ring: 0 0 0 3px rgb(214 184 59 / 55%);
  --focus-offset: 2px;

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

  /* ── Disposition ─────────────────────────────────────────────────────── */
  --sidebar-width: 260px;
  --header-height: 64px;
  --content-max: 1200px;
  --prose-max: 68ch;
}

/*
 * Respect de `prefers-reduced-motion`. Déclaré ici, avec les durées, pour que
 * le réglage vive au même endroit que ce qu'il gouverne.
 */
@media (prefers-reduced-motion: reduce) {
  :root {
    --duration-fast: 0ms;
    --duration-base: 0ms;
    --duration-slow: 0ms;
  }
}
