/* ============================================================================
   PRÉFÉRENCES SYSTÈME — chargé EN DERNIER, et ce n'est pas un détail.
   ============================================================================
   Une requête de média n'ajoute AUCUNE spécificité. Une règle écrite ici peut
   donc être écrasée sans bruit par une règle inconditionnelle plus spécifique
   écrite ailleurs — elle existe, elle se parse, elle apparaît dans les outils,
   et elle n'a aucun effet. Ce fichier vient en dernier pour que, à spécificité
   égale, ce soit lui qui gagne. Chaque bloc ci-dessous doit être vérifié SUR LE
   RENDU, en émulant la préférence, pas sur la présence de la règle.
   ========================================================================== */

/* ── Mouvement réduit ──────────────────────────────────────────────────────
   L'utilisateur qui active ce réglage a souvent une raison médicale : troubles
   vestibulaires, migraines, épilepsie photosensible. On ne dégrade rien pour
   autant — on affiche directement l'ÉTAT FINAL. La version calme est complète,
   jamais amputée.

   `0.01ms` et non `0` : à zéro, l'événement de fin de transition n'est jamais
   émis, et tout script qui l'attend reste bloqué. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  html { scroll-behavior: auto; }
  .js .reveal { opacity: 1 !important; transform: none !important; }
  .js .couloir__marge { animation: none !important; transform: scaleY(0.62); }
  .js .trace-au-scroll path[data-trace] { stroke-dashoffset: 0 !important; }
  .carte--survol:hover { transform: none; }
  .btn--principal:hover { transform: none; }
}

/* ── Contraste renforcé ────────────────────────────────────────────────────
   Le piège classique consiste à rendre les surfaces PLUS transparentes ici :
   l'utilisateur qui demande davantage de contraste en obtiendrait alors moins.
   On fait donc l'inverse — on opacifie et on épaissit les bordures. */
@media (prefers-contrast: more) {
  :root {
    --texte-attenue: oklch(0.90 0.010 70);
    --texte-discret: oklch(0.83 0.012 70);
    --bordure: oklch(0.55 0.012 40);
    --bordure-forte: oklch(0.68 0.014 40);
  }
  .nav { background: var(--bg); backdrop-filter: none; -webkit-backdrop-filter: none; }
  .carte, .regle, .encadre, .outil, .schema { border-width: 2px; }
  .lvl { border-width: 2px; }
}

/* ── Contraste forcé (thèmes de contraste Windows) ─────────────────────────
   Dans ce mode, le système impose sa propre palette : les ombres portées et les
   images de fond sont supprimées. Tout ce qui n'était signalé QUE par une lueur
   ou un dégradé devient invisible. On redit donc chaque signal par un TRAIT et
   par une couleur système. */
@media (forced-colors: active) {
  .btn--principal { border: 2px solid ButtonText; background: ButtonFace; color: ButtonText; }
  .btn--fantome { border: 2px solid ButtonText; }
  :focus-visible { outline: 3px solid Highlight; outline-offset: 2px; }
  .carte, .regle, .versus, .encadre, .schema, .outil, .tableau-enrobage { border: 1px solid CanvasText; }
  .regle { border-inline-start-width: 4px; }
  .lvl { border: 2px solid CanvasText; }
  /* Les marqueurs gardent leur FORME : c'est elle, et non la couleur, qui les
     distingue une fois la palette remplacée par celle du système. */
  .lvl::before { background: CanvasText; forced-color-adjust: none; }
  .sommaire a[aria-current='true'] { border-inline-start: 3px solid Highlight; }
  .hero::before { display: none; }
  body::before { display: none; }
  .frise li::before { background: CanvasText; }
}

/* ── Transparence réduite ──────────────────────────────────────────────────
   Non reconnu par tous les navigateurs : c'est une amélioration, jamais la
   garantie de lisibilité. Celle-ci est assurée par `prefers-contrast` ci-dessus,
   qui, lui, est largement supporté. */
@media (prefers-reduced-transparency: reduce) {
  .nav { background: var(--bg); backdrop-filter: none; -webkit-backdrop-filter: none; }
  body::before { opacity: 0.2; }
}

/* ── Impression ────────────────────────────────────────────────────────────
   Un document de référence finit imprimé ou exporté en PDF. Sans ce bloc, le
   fond sombre part en aplat d'encre, ou disparaît en laissant du texte clair
   sur du blanc — c'est-à-dire illisible dans les deux cas. */
@media print {
  :root {
    --bg: #fff; --bg-eleve: #fff; --surface: #fff; --surface-2: #f4f4f4; --surface-3: #ebebeb;
    --texte: #111; --texte-attenue: #333; --texte-discret: #555;
    --bordure: #bbb; --bordure-forte: #888; --lime: #4a6b00;
  }
  body::before, .hero::before { display: none; }
  .nav, .sommaire, .outil { display: none; }
  .section { padding-block: var(--e5); break-inside: avoid; }
  .regle, .versus, .schema, .carte { break-inside: avoid; border: 1px solid #bbb; }
  a[href^='http']::after { content: ' (' attr(href) ')'; font-size: 0.8em; color: #555; word-break: break-all; }
}
