/**
 * MILON — Thème d'harmonisation dashboards
 * -------------------------------------------------------------
 * Ce fichier est chargé APRÈS le <style> inline de chaque
 * dashboard. Il redéfinit les variables CSS de palette (--primary,
 * --bg, --border, etc.) et ajuste ponctuellement quelques
 * éléments (headers, boutons, tables) pour reprendre l'identité
 * visuelle de la landing MILON (light mode, bleu #1e88e5,
 * silver #546e7a, ombres bleutées, gradient argent→bleu).
 *
 * Objectif : continuité visuelle entre la landing (index.html)
 * et l'ensemble des dashboards internes, sans toucher au CSS
 * existant. Réversible en 1 ligne (retirer le <link>).
 * -------------------------------------------------------------
 */

/* ---------- Palette MILON (override des variables Tailwind) ---------- */
:root {
  /* Accents principaux */
  --primary: #1565c0 !important;
  --primary-dark: #0d47a1 !important;
  --primary-light: #1e88e5 !important;
  --accent: #1565c0 !important;
  --info: #1565c0 !important;   /* 3,68 → 5,75 : les pastilles « info » portent du blanc */

  /* Fonds */
  --bg: #eef2f7 !important;
  --bg-card: #ffffff !important;
  --row-alt: #f7f9fc !important;

  /* Bordures et textes */
  --border: rgba(84,110,122,0.18) !important;
  --text: #1a2332 !important;
  --text-dim: rgba(26,35,50,0.65) !important;

  /* Couleurs sémantiques (nuances plus profondes, moins criardes) */
  --success: #2e7d32 !important;
  --warning: #ef6c00 !important;
  --danger:  #c62828 !important;

  /* Slate (utilisée par Dashboard_Athlete) → réalignée MILON */
  --slate-50: #f7f9fc !important;
  --slate-100: #eef2f7 !important;
  --slate-200: #dbe3ee !important;
  --slate-300: rgba(84,110,122,0.25) !important;
  --slate-500: #546e7a !important;
  --slate-700: #37474f !important;
  --slate-900: #1a2332 !important;
}

/* ---------- Fond général : gradient MILON light ---------- */
html, body {
  background: linear-gradient(180deg, #f7f9fc 0%, #dbe3ee 100%) !important;
  color: var(--text) !important;
}

/* Container reste transparent → laisse voir le gradient */
body > .container { background: transparent !important; }

/* ---------- Header sticky (Dashboard_Athlete) ---------- */
/* Gradient argent → bleu MILON */
.app-header {
  background: linear-gradient(135deg, #37474f 0%, #1565c0 100%) !important;
  box-shadow: 0 4px 20px rgba(30,60,100,0.15) !important;
}

/* ---------- Header page (autres dashboards) ---------- */
/* Cadre blanc, accent bleu MILON en bas */
.header {
  background: #ffffff !important;
  border: 1px solid rgba(84,110,122,0.15) !important;
  /* LA SECONDE COULEUR DU CLUB SERT ICI (21/08/2026). Constat de Rene : « il n'y a
     pas trop de difference entre les deux couleurs » — et c'etait vrai, --accent
     n'etait employe que QUATRE fois dans toute l'application. On lui donne deux
     roles bien visibles : le bandeau sous l'en-tete, et le titre de la page. */
  border-bottom: 3px solid var(--accent) !important;
  box-shadow: 0 4px 20px rgba(30,60,100,0.08) !important;
  color: var(--text) !important;
}
.header h1 { color: var(--accent) !important; }

/* Garantir un wrap propre du header quand l'espace manque
   (fix Dashboard_Planification : titre s'affichait sur 3 lignes) */
.header { flex-wrap: wrap !important; }
.header > div:first-child {
  flex: 1 1 260px !important;
  min-width: 260px !important;
}

/* ---------- Cards, sections, tables ---------- */
.card,
.section,
table {
  border-color: rgba(84,110,122,0.15) !important;
  box-shadow: 0 4px 20px rgba(30,60,100,0.06) !important;
}

/* ---------- Table header : gradient argent → bleu ---------- */
th {
  background: linear-gradient(135deg, #37474f 0%, #1565c0 100%) !important;
  letter-spacing: 1px !important;
}
th:hover {
  background: linear-gradient(135deg, #455a64 0%, #1976d2 100%) !important;
}

/* Row hover : léger bleu MILON */
tr:hover td { background: rgba(30,136,229,0.06) !important; }

/* ---------- Boutons primaires ---------- */
.btn-primary,
button.primary {
  background: linear-gradient(135deg, var(--primary-light) 0%, var(--primary-dark) 100%) !important;
  border-color: var(--primary-dark) !important;
  box-shadow: 0 4px 14px rgba(30,136,229,0.25) !important;
  color: #ffffff !important;
}
.btn-primary:hover,
button.primary:hover {
  background: linear-gradient(135deg, var(--primary) 0%, #0d47a1 100%) !important;
  box-shadow: 0 6px 20px rgba(30,136,229,0.35) !important;
}

/* ---------- Liens de navigation entre dashboards ---------- */
.header-actions a {
  border-color: var(--primary) !important;
  color: var(--primary-dark) !important;
}
.header-actions a:hover,
.header-actions .active {
  background: var(--primary) !important;
  color: #ffffff !important;
  border-color: var(--primary) !important;
}

/* ---------- Athlete cards (Dashboard_Athletes) ----------
   ⚠ CES QUATRE RÈGLES ONT ÉTÉ RETIRÉES LE 27/08/2026, ET C'EST LE COMMENTAIRE
   QUI POSAIT PROBLÈME, PAS LA COULEUR. Il annonçait « distinction genre
   préservée : rose pour féminin » avec un #ec4899 écrit en dur, alors que le
   bloc « LES CARTES D'ATHLÈTE » plus bas dans ce même fichier repeint depuis
   le 25/08 les deux genres à la couleur du club. L'écran était juste ; le
   fichier disait le contraire de la décision prise.
   C'est le défaut qu'on retire partout depuis trois jours — du code mort qui
   MENT — et il en restait un ici. La règle qui commande est plus bas ; elle
   traite aussi le cas inactif. */

/* ---------- Notes (coach, historique, warning) ---------- */
.note-coach { border-left-color: var(--success) !important; }
.note-historique {
  border-left-color: var(--primary) !important;
  background: rgba(30,136,229,0.06) !important;
}

/* ---------- Wordmark MILON dans le header (option) ---------- */
.milon-header-brand .brand-text {
  background: linear-gradient(90deg, #546e7a 0%, #1e88e5 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* ============================================================================
   ÉTAGE 2 — LES TOKENS (proposition Claude Design, 26/08/2026)
   ----------------------------------------------------------------------------
   Tout ce qui précède est l'héritage : il fait vivre les écrans d'aujourd'hui et
   ne bouge pas. Ce qui suit donne des NOMS aux valeurs, pour que les écrans
   cessent de les écrire en dur, un par un.

   AUCUN SÉLECTEUR ICI. On déclare, on n'applique pas : cette section ne change
   rien à l'affichage tant qu'un écran ne s'en sert pas.
   ============================================================================ */

/* ── 1. LA COULEUR DU CLUB, ET CE QU'ELLE ATTEINT ────────────────────────────
   Le reproche venu du terrain était juste : deux couleurs plates ne changeaient presque
   rien. Onze tokens en DÉRIVENT désormais — nav, en-têtes, lignes survolées,
   anneaux de focus, jauges.

   ⚠ ET ON NE TOUCHE PAS À `milon-couleurs.js`. Il pose déjà `--primary` et
   `--accent` sur la racine quand le club a choisi ses couleurs ; on branche
   `--club` DESSUS. Le jour où un club change de couleur, les onze dérivés
   suivent sans qu'une ligne de JavaScript ait bougé. */
:root {
  --club:        var(--primary, #1565c0);
  --club-accent: var(--accent,  #1565c0);
  /* ⚠ CE COMMENTAIRE PROMETTAIT UNE GARANTIE QUE PERSONNE NE DONNAIT (26/08/2026).
     Il disait « une couleur de club au contraste < 4:1 est refusée à la saisie ».
     Deux choses fausses : le seuil du texte est 4,5 et non 4 ; et le bleu par
     DÉFAUT — celui de tous les clubs qui n'ont rien choisi, donc de HC NOVES —
     ne passe jamais par ce validateur. Il était à 3,68:1 sous du blanc, sur
     cinquante endroits de l'application. Les deux sont corrigés. */
  --club-on:     #ffffff;

  /* ⚠ REPLI D'ABORD (26/08/2026). `color-mix()` n'existe pas avant Chrome 111 /
     Safari 16.2. Sur un iPhone resté en iOS 15, une propriété qui utilise un
     token invalide NE RETOMBE PAS sur une valeur de secours : elle perd sa
     couleur. Et l'écran concerné, c'est celui de l'athlète, en salle. Ces replis
     gardent la bonne teinte ; seules les nuances fines deviennent neutres. */
  --club-hover:     var(--club);
  --club-active:    var(--club);
  --club-strong:    var(--club);
  --club-border:    var(--club);
  --club-ring:      var(--club);
  --club-tint:      #f2f6fb;
  --club-tint-soft: #f7f9fc;
  /* ⚠ LE DÉGRADÉ DESCEND VERS --club-strong, PAS VERS --club-accent (26/08/2026).
     Depuis que --primary vaut #1565c0, --club et --club-accent rendent la même
     couleur par défaut : le dégradé était devenu un aplat et les boutons
     primaires avaient perdu leur relief. --club-strong est toujours plus foncé
     que --club, quel que soit le club — le dégradé descend donc toujours, et son
     point le plus CLAIR reste --club, celui qu on mesure. */
  --club-grad:      linear-gradient(135deg, var(--club) 0%, var(--club-strong) 100%);
  --club-header:    linear-gradient(135deg, #37474f 0%, var(--club-accent) 100%);
}
@supports (color: color-mix(in oklab, red, blue)) {
  :root {
    --club-hover:     color-mix(in oklab, var(--club) 88%, black);
    --club-active:    color-mix(in oklab, var(--club) 76%, black);
    --club-strong:    color-mix(in oklab, var(--club) 70%, #0f1724);
    --club-border:    color-mix(in oklab, var(--club) 34%, transparent);
    --club-ring:      color-mix(in oklab, var(--club) 32%, transparent);
    --club-tint:      color-mix(in oklab, var(--club) 10%, white);
    --club-tint-soft: color-mix(in oklab, var(--club)  5%, white);
    --club-header:    linear-gradient(135deg,
                        color-mix(in oklab, var(--club-accent) 70%, #0f1724) 0%,
                        var(--club-accent) 100%);
  }
}

/* ── 1bis. LA RAMPE ORDONNÉE (lot 2, 26/08/2026) ────────────────────────────
   Huit intensités pour tout ce qui est ORDONNÉ : les séries fédérales de DEB à
   MONDE, les quatre échelons de compétition, les macrocycles. L'ordre se voit,
   et il suit la couleur du club.

   ⚠ MÊME GARDE-FOU QUE LES DÉRIVÉS : replis d'abord, `color-mix()` ensuite.
   Sans lui, un téléphone sans color-mix afficherait des badges sans fond. */
:root {
  --rang-1-bg: var(--ink-050, #f2f5f9);  --rang-1-fg: var(--ink-400, #546e7a);
  --rang-2-bg: #f7f9fc;                  --rang-2-fg: var(--club-accent);
  --rang-3-bg: #f2f6fb;                  --rang-3-fg: var(--club-accent);
  --rang-4-bg: #e9f0f9;                  --rang-4-fg: var(--club-accent);
  --rang-5-bg: #dde8f5;                  --rang-5-fg: var(--club-accent);
  --rang-6-bg: var(--club);              --rang-6-fg: var(--club-on);
  --rang-7-bg: var(--club-strong);       --rang-7-fg: var(--club-on);
  --rang-8-bg: var(--ink-900, #0f1724);  --rang-8-fg: var(--club-on);
}
@supports (color: color-mix(in oklab, red, blue)) {
  :root {
    --rang-2-bg: color-mix(in oklab, var(--club)  8%, white);
    --rang-3-bg: color-mix(in oklab, var(--club) 16%, white);
    --rang-4-bg: color-mix(in oklab, var(--club) 26%, white);
    --rang-5-bg: color-mix(in oklab, var(--club) 38%, white);
    --rang-2-fg: color-mix(in oklab, var(--club-accent) 74%, #0f1724);
    --rang-3-fg: var(--rang-2-fg);
    --rang-4-fg: var(--rang-2-fg);
    --rang-5-fg: var(--rang-2-fg);
  }
}

/* ── 2. NEUTRES ─────────────────────────────────────────────────────────────
   Nouveaux noms seulement. `--text`, `--text-dim`, `--bg`, `--bg-card` et
   `--border` existent déjà plus haut et gardent LEURS valeurs : les redéfinir
   ici changerait l'aspect de huit écrans sans que personne l'ait demandé. */
:root {
  --paper:   #ffffff;
  --ink-050: #f2f5f9;
  --ink-100: #e3e9f0;
  --ink-200: #c3cedb;
  --ink-300: #8397a8;
  --ink-400: #546e7a;   /* le gris de service historique */
  --ink-500: #3d4d61;
  --ink-700: #1a2332;   /* la couleur du texte */
  --ink-900: #0f1724;

  --text-faint:    var(--ink-300);
  --bg-flat:       #f4f7fb;
  --border-strong: var(--ink-200);
}

/* ── 3. LE SENS — VERROUILLÉ ────────────────────────────────────────────────
   Ces couleurs ne sont PAS de l'identité. Un club ne les redéfinit jamais : un
   entraîneur doit pouvoir lire l'écran d'un collègue sans réapprendre le code.
   `--ok`, `--warn` et `--danger` sont branchés sur les couleurs existantes —
   une seule source, pas deux vérités qui divergeront un jour. */
:root {
  --ok:            var(--success);   /* validé, fait, conforme */
  --ok-tint:       #e8f2e9;
  --ok-border:     #b9d6bb;

  --warn:          var(--warning);   /* attention, écart, à surveiller */
  --warn-tint:     #fdeee0;
  --warn-border:   #f4cba4;
  /* ⚠ L'ORANGE QUI SE LIT (ajouté le 26/08/2026, après mesure).
     --warn est une couleur de SURFACE : sur un fond, avec du texte foncé dessus,
     elle fait 5,12:1 et elle est parfaite. En couleur de TEXTE sur du blanc elle
     ne fait que 3,08:1, pour 4,5 exigés — et je m'y suis fait prendre en lot 2,
     en branchant « série descendue » dessus : le jeton était MOINS lisible que
     le #9a3412 écrit à la main qu'il remplaçait (7,31:1).
     Le vert et le rouge n'ont pas ce problème : mesurés en texte sur blanc, ils
     font 5,13:1 et 5,62:1. L'orange est le seul des trois à avoir besoin de deux
     valeurs, et c'est pour ça qu'il n'y a qu'un seul jeton d'encre ici.
     RÈGLE : --warn sur un fond, --warn-ink dans un texte. */
  --warn-ink:      #9a3412;
  /* ⚠ ET SON JUMEAU, QUE J'AVAIS OUBLIÉ LE 25/08 (posé le 26/08/2026).
     « --warn-ink » répond à « comment écrire EN orange sur du blanc ». Il manquait
     l'autre moitié : « qu'est-ce qu'on écrit SUR l'orange ». Le contraste est
     symétrique — si #ef6c00 ne fait que 3,08:1 en texte sur blanc, alors le
     blanc sur #ef6c00 fait 3,08:1 aussi, c'est-à-dire moins que le dégradé de
     la porte d'entrée qu'on a rejeté ce matin. L'encre foncée, elle, fait
     5,12:1 : c'est ce que trois écrans faisaient déjà correctement, et que
     trois autres ne faisaient pas.
     LA RÈGLE, EN UNE LIGNE : jamais de blanc sur --warn. */
  --warn-on:       var(--ink-700, #1a2332);   /* 5,12:1 sur #ef6c00 */          /* 7,31:1 sur blanc · 6,43:1 sur --warn-tint */

  --danger-tint:   #f8e6e6;          /* --danger existe déjà plus haut */
  --danger-border: #eeb4b4;
}

/* ── 4. LES PÉRIODES DE SAISON — VERROUILLÉES AUSSI ─────────────────────────
   ⚠ CE SONT LES VRAIES VALEURS, RELUES DANS LE MOTEUR (assets/milon-progression.js
   et Dashboard_Blocs.html). La proposition en portait quatre, inventées ; il y en
   a HUIT, et ce ne sont pas les mêmes. Ce code se lit à l'échelle de la ligue :
   le nommer ici sert à ce qu'il cesse d'être recopié écran par écran, pas à le
   changer.

   Et la règle du texte va avec la couleur : l'affûtage est un bleu foncé, il
   porte du blanc ; tous les autres sont clairs et portent du noir adouci. Sans
   elle, un badge d'affûtage devient illisible. */
:root {
  --period-ppg-es: #86efac;
  --period-ppg:    #4ade80;
  --period-sp:     #fcd34d;
  --period-ppc:    #fb923c;
  --period-pc:     #ef4444;
  --period-afut:   #1e40af;
  --period-vac:    #e2e8f0;
  --period-repos:  #cbd5e1;

  --period-texte:        rgba(0,0,0,.72);
  --period-texte-clair:  #ffffff;   /* uniquement sur l'affûtage */
}

/* ── 5. TYPOGRAPHIE — Rajdhani, une seule famille ───────────────────────────
   L'échelle de l'entraîneur reprend EXACTEMENT les valeurs d'aujourd'hui : titre
   24px / interlettrage 1px, libellé 11px majuscules / 1,5px. Rien à voir à
   l'écran, c'est voulu.

   L'échelle ATHLÈTE est nouvelle, et c'est là qu'est le gain : debout dans une
   salle, entre deux séries, mains moites, souvent une seule main. En dessous de
   17px, une information utile n'est pas lisible dans ces conditions. */
:root {
  --font: 'Rajdhani', -apple-system, system-ui, sans-serif;

  --fs-display: 34px;   --lh-display: 1.05;  --ls-display: .5px;
  --fs-h1:      24px;   --lh-h1:      1.15;  --ls-h1:      1px;
  --fs-h2:      19px;   --lh-h2:      1.2;   --ls-h2:      .5px;
  --fs-lg:      16px;   --lh-lg:      1.45;
  --fs-body:  14.5px;   --lh-body:    1.5;
  --fs-meta:    13px;   --lh-meta:    1.4;
  --fs-label:   11px;   --ls-label:   1.5px;

  --fs-a-timer:  56px;   /* le minuteur de repos */
  --fs-a-metric: 44px;   /* la charge, sur l'écran de saisie */
  --fs-a-title:  28px;
  --fs-a-body:   17px;
  --fs-a-label:  12px;
  /* ⚠ DEUX TAILLES POUR LA CHARGE, ET C'EST VOULU : 44 px sur un écran de saisie
     dédié, 24 px dans une ligne de série où trois chiffres et deux boutons se
     partagent 390 pixels. La spécification le dit ; l'écran le prouve. */
  --fs-a-metric-ligne: 24px;
  --fs-a-titre-ligne:  21px;

  --w-light: 300; --w-reg: 400; --w-med: 500; --w-semi: 600; --w-bold: 700;
}

/* ── 6. ESPACEMENT, RAYONS, OMBRES, CIBLES ──────────────────────────────────
   Les rayons et les ombres sont ceux d'aujourd'hui, au pixel près : carte 14px,
   bouton 9px, ombre de carte identique. On leur donne un nom, rien de plus.

   `--tap` et `--tap-comfy` sont neufs : 44px est le minimum tactile, 56px la
   hauteur d'une ligne de série — assez haute pour qu'un pouce ne valide pas la
   série d'à côté en voulant faire défiler. */
:root {
  --s-1:  4px; --s-2:  6px; --s-3:  8px; --s-4: 12px;
  --s-5: 16px; --s-6: 18px; --s-7: 24px; --s-8: 32px; --s-9: 48px;

  --r-xs: 6px; --r-sm: 9px; --r-md: 14px; --r-lg: 20px; --r-pill: 999px;

  --sh-sm:    0 1px 2px rgba(16,24,38,.06);
  --sh-md:    0 6px 24px rgba(30,60,100,.06);
  --sh-lg:    0 12px 40px rgba(30,60,100,.10);
  --sh-modal: 0 24px 64px rgba(15,23,36,.22);

  --tap:       44px;
  --tap-comfy: 56px;
  --row-dense: 40px;

  --maxw: 1050px;
  --dur:  140ms;
  --ease: cubic-bezier(.2,.7,.3,1);
}

/* ============================================================================
   ÉTAGE 3 — CE QUE LA COULEUR DU CLUB TOUCHE
   ----------------------------------------------------------------------------
   Ici, et seulement ici, on APPLIQUE les tokens. Chaque règle remplace une
   valeur qui était écrite en dur et qui ne suivait donc jamais le club.

   Ce que ça n'atteint pas, et volontairement : le portail de l'athlète. Il ne
   charge pas encore `milon-couleurs.js` — il n'a pas de session d'entraîneur, et
   lui servir les couleurs de son club demande un changement côté serveur. C'est
   une décision à prendre, pas un oubli.
   ============================================================================ */

/* L'EN-TÊTE DE TABLEAU — la plus grande surface colorée de l'application, et
   elle était figée sur un dégradé ardoise→bleu écrit en dur. */
th {
  background: var(--club-header) !important;
}
th:hover {
  background: var(--club-grad) !important;
}

/* LE SURVOL D'UNE LIGNE — c'était un bleu en dur, sur tous les tableaux. */
tr:hover td {
  background: var(--club-tint) !important;
}

/* LE BOUTON PRIMAIRE. */
.btn-primary,
button.primary {
  background: var(--club-grad) !important;
  border-color: var(--club-accent) !important;
  color: var(--club-on) !important;
}
.btn-primary:hover,
button.primary:hover {
  background: linear-gradient(135deg, var(--club-hover) 0%, var(--club-active) 100%) !important;
}

/* LE RAIL DE NAVIGATION (13/09/2026 — il a remplacé la barre en pastilles).
   ⚠ LE RAIL EST LE SEUL ENDROIT OÙ LA COULEUR DU CLUB S'AFFICHE EN PERMANENCE.
   C'est pour ça qu'il est sombre : une couleur de club se voit mieux sur fond
   sombre que sur blanc, et le contenu, lui, reste clair.
   ⚠ LE TEXTE DE LA PASTILLE ACTIVE EST --club-on, PAS #fff. C'est ce jeton qui
   sait si la couleur choisie demande du texte blanc ou du texte foncé — un club
   en jaune rendait le libellé illisible. Ne jamais le remplacer par un blanc
   écrit en dur. */
.milon-rail .ici {
  background: var(--club-grad) !important;
  color: var(--club-on) !important;
}
/* Le point du compteur prend aussi la couleur du club : c'est un repère
   d'identité, pas un code de sens — les couleurs de sens (--warn, --danger)
   ne servent jamais à décorer. */
.milon-rail .rail-compte {
  background: var(--club-accent) !important;
  color: var(--club-on) !important;
}

/* L'EN-TÊTE DU PORTAIL DE L'ATHLÈTE — la bande colorée en haut de son écran,
   figée jusqu'ici sur un dégradé ardoise → bleu écrit en dur. C'est la première
   chose qu'il voit en ouvrant sa séance. */
.app-header {
  background: var(--club-header) !important;
}

/* LE FILET DE LA CARTE D'ATHLÈTE — au club, pas au sexe (lot 2, 26/08/2026).
   L'héritage plus haut impose encore le rose ; cet étage le recouvre, comme le
   reste. Le sexe est écrit en toutes lettres sur la carte : la couleur ne disait
   rien de plus. */
.athlete-card.masculin,
.athlete-card.feminin { border-left-color: var(--club) !important; }
.athlete-card.inactif { border-left-color: var(--ink-300, #94a3b8) !important; }

/* L'ANNEAU DE FOCUS — un seul, partout, et il prend la couleur du club.
   ⚠ On ne touche pas au focus des NAVIGATEURS qui n'ont pas :focus-visible : la
   règle est additive, elle ne retire aucun contour existant. */
:focus-visible {
  outline: 2px solid var(--club);
  outline-offset: 2px;
}


/* ══════════════════════════════════════════════════════════════════════════
   LE PAPIER (26/08/2026)

   ⚠ CE BLOC RÉPARE UNE RÈGLE MORTE AILLEURS. Dashboard_Simulateur.html déclare
   « @media print { :root { --bg: white; --text: #000 } } » en valeurs normales ;
   ce fichier-ci les redéclare avec !important et gagne, y compris à
   l'impression. Mesuré en émulant le média « print » : --bg valait toujours
   #eef2f7 et le body gardait son dégradé de fond.
   Le remède est ici parce que c'est ici que la règle gagne — et il vaut alors
   pour tous les écrans imprimés, pas seulement celui qui avait essayé.
   C'est l'écran que René sort sur papier pour ses athlètes.
   ══════════════════════════════════════════════════════════════════════════ */
@media print {
  /* ⚠ LE FOND DU BODY NE SUFFISAIT PAS (complété le 27/08/2026). Remettre
     « html, body » en blanc laisse --bg, --bg-card et --row-alt en vigueur, avec
     leur !important : toute carte peinte avec var(--bg-card) sortait encore
     teintée, et les bandes alternées des tableaux mangeaient de l'encre sur des
     pages que René imprime pour ses athlètes. On remet les JETONS, pas
     seulement la balise. */
  :root {
    --bg:       #ffffff !important;
    --bg-card:  #ffffff !important;
    --row-alt:  #ffffff !important;
  }
  html, body { background: #ffffff !important; background-image: none !important; }
}
