/* ════════════════════════════════════════════════════════════════════════════
   ATLAS — la mise en page des pages publiques et élèves (2026-10-28).
   Direction visuelle « Atlas » de Maxime ; la structure vient de la maquette sombre.
   Cahier des charges : site/ATLAS.md ; charte : site/atlas/CHARTE.md.

   ⚠ RÈGLE PREMIÈRE : basculer de clair à sombre ne change QUE des couleurs. Aucune règle
   de mise en page ne vit sous un sélecteur de thème : sous `[data-theme]` et sous
   `prefers-color-scheme`, il n'y a que des VARIABLES DE COULEUR. Preuve :
   deploy/verifier-themes.py --largeurs 360,390,768,1440 <page>.

   Ces pages ne chargent PAS socle.css. Le texte se règle sur l'appareil : la base est en
   pourcentage, `--taille` ne s'applique pas ici.

   ⚠ Les espaces privés passés à Atlas (vague 2, `body.prive`) chargent AUSSI cette feuille,
   puis atlas-prive.css. Sept noms y ont un autre sens et y sont redéfinis sous `.prive` :
   .bloc, .bloc-titre, .discret, .carte, .grille, .vide, .fleche. Une propriété ajoutée ici
   à l'un d'eux s'applique là-bas : la neutraliser dans atlas-prive.css.

   Icônes : Lucide v0.460.0, ISC — Copyright (c) for portions of Lucide are held by Cole
   Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by
   Lucide Contributors 2022. Permission to use, copy, modify, and/or distribute this software
   for any purpose with or without fee is hereby granted, provided that the above copyright
   notice and this permission notice appear in all copies.
   ════════════════════════════════════════════════════════════════════════════ */

/* ── Polices, toutes servies par le site ── */
@font-face { font-family: "Inter"; font-weight: 400; font-display: swap;
             src: url("../fonts/inter-regular-latin.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-weight: 700; font-display: swap;
             src: url("../fonts/inter-bold-latin.woff2") format("woff2"); }
@font-face { font-family: "Barlow Condensed"; font-weight: 500; font-display: swap;
             src: url("../fonts/barlowcondensed-medium.ttf") format("truetype"); }
@font-face { font-family: "Barlow Condensed"; font-weight: 600; font-display: swap;
             src: url("../fonts/barlowcondensed-semibold.ttf") format("truetype"); }
@font-face { font-family: "Barlow Condensed"; font-weight: 800; font-display: swap;
             src: url("../fonts/barlowcondensed-extrabold.ttf") format("truetype"); }
@font-face { font-family: "Latin Modern Roman"; font-style: italic; font-display: swap;
             src: url("../fonts/lmroman10-italic.otf") format("opentype"); }

/* ── Les icônes, en masques : leur couleur est celle du texte qui les porte ── */
:root {
  --ic-livre: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 7v14'/%3E %3Cpath d='M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z'/%3E%3C/svg%3E");
  --ic-texte: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z'/%3E %3Cpath d='M14 2v4a2 2 0 0 0 2 2h4'/%3E %3Cpath d='M10 9H8'/%3E %3Cpath d='M16 13H8'/%3E %3Cpath d='M16 17H8'/%3E%3C/svg%3E");
  --ic-telecharger: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E %3Cpolyline points='7 10 12 15 17 10'/%3E %3Cline x1='12' x2='12' y1='15' y2='3'/%3E%3C/svg%3E");
  --ic-ecran: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='20' height='14' x='2' y='3' rx='2'/%3E %3Cline x1='8' x2='16' y1='21' y2='21'/%3E %3Cline x1='12' x2='12' y1='17' y2='21'/%3E%3C/svg%3E");
  --ic-valide: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E %3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E");
  --ic-groupe: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2'/%3E %3Ccircle cx='9' cy='7' r='4'/%3E %3Cpath d='M22 21v-2a4 4 0 0 0-3-3.87'/%3E %3Cpath d='M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E");
  --ic-menu: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' x2='20' y1='12' y2='12'/%3E %3Cline x1='4' x2='20' y1='6' y2='6'/%3E %3Cline x1='4' x2='20' y1='18' y2='18'/%3E%3C/svg%3E");
  --ic-fleche: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E %3Cpath d='m12 5 7 7-7 7'/%3E%3C/svg%3E");
  --ic-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E");
  --ic-auto: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E %3Cpath d='M12 18a6 6 0 0 0 0-12v12z'/%3E%3C/svg%3E");
  --ic-soleil: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E %3Cpath d='M12 2v2'/%3E %3Cpath d='M12 20v2'/%3E %3Cpath d='m4.93 4.93 1.41 1.41'/%3E %3Cpath d='m17.66 17.66 1.41 1.41'/%3E %3Cpath d='M2 12h2'/%3E %3Cpath d='M20 12h2'/%3E %3Cpath d='m6.34 17.66-1.41 1.41'/%3E %3Cpath d='m19.07 4.93-1.41 1.41'/%3E%3C/svg%3E");
  --ic-lune: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E");
  --ic-cadenas: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='11' x='3' y='11' rx='2' ry='2'/%3E %3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E");
  --ic-boussole: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z'/%3E %3Ccircle cx='12' cy='12' r='10'/%3E%3C/svg%3E");
  --ic-devoir: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E %3Cpath d='M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z'/%3E%3C/svg%3E");
  --ic-calcul: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='16' height='20' x='4' y='2' rx='2'/%3E %3Cline x1='8' x2='16' y1='6' y2='6'/%3E %3Cline x1='16' x2='16' y1='14' y2='18'/%3E %3Cpath d='M16 10h.01'/%3E %3Cpath d='M12 10h.01'/%3E %3Cpath d='M8 10h.01'/%3E %3Cpath d='M12 14h.01'/%3E %3Cpath d='M8 14h.01'/%3E %3Cpath d='M12 18h.01'/%3E %3Cpath d='M8 18h.01'/%3E%3C/svg%3E");
  --ic-fermer: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 6 18'/%3E %3Cpath d='m6 6 12 12'/%3E%3C/svg%3E");
  --ic-code: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m18 16 4-4-4-4'/%3E %3Cpath d='m6 8-4 4 4 4'/%3E %3Cpath d='m14.5 4-5 16'/%3E%3C/svg%3E");
  --ic-liste: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E %3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E %3Cpath d='M12 11h4'/%3E %3Cpath d='M12 16h4'/%3E %3Cpath d='M8 11h.01'/%3E %3Cpath d='M8 16h.01'/%3E%3C/svg%3E");
}

/* ── Les couleurs. SEULE chose qui change d'un thème à l'autre ── */
:root {
  color-scheme: light;
  --font-body: "Inter", system-ui, sans-serif;
  --font-display: "Barlow Condensed", "Inter", sans-serif;
  --font-editorial: "Latin Modern Roman", Georgia, serif;
  --page-bg: #f4f1e9;
  --surface: #faf8f2;
  --surface-raised: #fffdf8;
  --text: #334958;
  --text-muted: #556c77;
  --titre: #14293b;
  --border: #d0d7d4;
  --contour: #6d8794;        /* le trait d'un contrôle : 3:1 sur le fond (WCAG 1.4.11) */
  --topography: #879dab;
  --accent: #1d5a8a;         /* liens, focus, onglet actif */
  --accent-texte: #ffffff;   /* le texte posé SUR l'accent */
  --selection: #dce8ee;      /* fond d'un bouton de document au survol */
  --signal: #a4431f;         /* le trait orange de la maquette : surtitres, icônes PDF */
  --erreur: #9b2c20;
  --route: #b87963;
  --pcsi: #a9c3d0;  --nsi: #ddaf9f;  --osiia: #a8c0ab;            /* teintes d'illustration */
  --pcsi-trait: #3d7896; --nsi-trait: #b0573a; --osiia-trait: #4f7d5b;   /* repère, texte compris */
  --trait-texte: #ffffff;
  --voile: rgba(244, 241, 233, .08);   /* la seule teinte posée sur la photo */
}
:root[data-theme="sombre"] {
  color-scheme: dark;
  --page-bg: #29343e;
  --surface: #32414b;
  --surface-raised: #3b4a53;
  --text: #e0e3de;
  --text-muted: #c2d0d2;
  --titre: #f3f1ea;
  --border: #61737b;
  --contour: #8aa0a9;
  --topography: #758a93;
  --accent: #9cc6e0;
  --accent-texte: #14212b;
  --selection: #4a5f6b;
  --signal: #f0a07a;
  --erreur: #ffb4a5;
  --route: #c18c79;
  --pcsi: #7799ad;  --nsi: #b88778;  --osiia: #88a99a;
  --pcsi-trait: #7799ad; --nsi-trait: #c9998b; --osiia-trait: #88a99a;
  --trait-texte: #14212b;
  --voile: rgba(25, 35, 45, .28);
}
/* Sans script, ou avant lui : le réglage de l'appareil. Variables seulement. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
    color-scheme: dark;
    --page-bg: #29343e; --surface: #32414b; --surface-raised: #3b4a53;
    --text: #e0e3de; --text-muted: #c2d0d2; --titre: #f3f1ea; --border: #61737b;
    --contour: #8aa0a9; --topography: #758a93; --accent: #9cc6e0; --accent-texte: #14212b;
    --selection: #4a5f6b; --signal: #f0a07a; --erreur: #ffb4a5; --route: #c18c79;
    --pcsi: #7799ad; --nsi: #b88778; --osiia: #88a99a;
    --pcsi-trait: #7799ad; --nsi-trait: #c9998b; --osiia-trait: #88a99a;
    --trait-texte: #14212b; --voile: rgba(25, 35, 45, .28);
  }
}

/* ── Base ── */
*, *::before, *::after { box-sizing: border-box; }
html { font-size: 100%; -webkit-text-size-adjust: 100%; }
[hidden] { display: none !important; }
body.atlas {
  --largeur: 78rem;          /* la colonne de contenu */
  --g: clamp(1rem, 4vw, 2.75rem);   /* la gouttière */
  margin: 0; min-height: 100vh; position: relative; overflow-x: clip;
  display: grid; grid-template-columns: minmax(0, 1fr); align-content: start;
  background: var(--page-bg); color: var(--text);
  font: 400 1rem/1.55 var(--font-body);
}
body.atlas > * { position: relative; z-index: 1; min-width: 0; }
/* Le décor : des courbes de niveau, derrière tout, de la couleur du relief. */
body.atlas::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 44rem; z-index: 0; pointer-events: none;
  background: var(--topography); opacity: .35;
  -webkit-mask: url("../atlas/courbes-topographiques.svg") center top / cover no-repeat;
          mask: url("../atlas/courbes-topographiques.svg") center top / cover no-repeat;
}
a { color: var(--accent); }
:focus-visible { outline: .1875rem solid var(--accent); outline-offset: .125rem; }
/* Ces éléments vivent dans un conteneur à `overflow: hidden` (coins arrondis) qui rognerait
   l'anneau tracé dehors : on le dessine DEDANS, sans changer aucune dimension. */
.theme button:focus-visible, .classe-tete:focus-visible, .classe-liens a:focus-visible { outline-offset: -.25rem; }
h1, h2, h3, p, ul, ol { margin: 0; }
ul, ol { padding: 0; list-style: none; }
/* Ni mot seul en dernière ligne d'un titre, ni « » » orphelin (détecteur, 29/10). */
h1, h2, h3 { text-wrap: balance; }
p, .classe-resume, .ens-resume, .credit-meta { text-wrap: pretty; }
.icone::before, .fleche::before {
  content: ""; display: block; width: 1.25rem; height: 1.25rem; background: currentColor;
  -webkit-mask: var(--ic) center / contain no-repeat; mask: var(--ic) center / contain no-repeat;
}
.fleche { --ic: var(--ic-fleche); }
[data-ic="livre"] { --ic: var(--ic-livre); }     [data-ic="texte"] { --ic: var(--ic-texte); }
[data-ic="ecran"] { --ic: var(--ic-ecran); }     [data-ic="valide"] { --ic: var(--ic-valide); }
[data-ic="groupe"] { --ic: var(--ic-groupe); }   [data-ic="devoir"] { --ic: var(--ic-devoir); }
[data-ic="calcul"] { --ic: var(--ic-calcul); }   [data-ic="liste"] { --ic: var(--ic-liste); }
[data-ic="code"] { --ic: var(--ic-code); }       [data-ic="telecharger"] { --ic: var(--ic-telecharger); }
[data-ic="cadenas"] { --ic: var(--ic-cadenas); }

/* ── Le lien d'évitement : hors de l'écran, il descend au premier Tab ── */
body.atlas > .evitement {
  position: absolute; z-index: 10; top: .5rem; left: .5rem; display: inline-flex; align-items: center;
  min-height: 2.75rem; padding: 0 1rem; border-radius: .375rem; background: var(--accent);
  color: var(--accent-texte); font-weight: 700; text-decoration: none; transform: translateY(-300%);
}
body.atlas > .evitement:focus { transform: none; outline-color: var(--titre); }

/* ── Le rail latéral : le plan du site, grand écran seulement ──
   Ses numéros ne prennent PAS la couleur des classes : « 02 Maxime » en brique, à côté de
   « 02 Terminale NSI » en brique, faisait croire à un lien entre les deux (critique du 29/10).
   La route de la charte le parcourt : un pointillé de --route, une étape par numéro, jusqu'à
   la boussole. Décor seulement (pseudo-éléments). */
.rail { display: none; }
@media (min-width: 72rem) {
  body.atlas { grid-template-columns: 10rem minmax(0, 1fr); }
  body.atlas > :not(.rail) { grid-column: 2; }
  .rail { display: block; grid-column: 1; grid-row: 1 / span 8; border-right: 1px solid var(--border); }
  .rail-fixe {
    position: sticky; top: 0; min-height: 100vh; display: flex; flex-direction: column;
    gap: 1.5rem; padding: 2.5rem 1rem 1.5rem 1.375rem;
  }
  .rail-fixe::before {
    content: ""; position: absolute; left: .5rem; top: 4rem; bottom: 9.25rem; border-left: 2px dashed var(--route);
  }
  .rail-item { position: relative; display: block; }
  .rail-item::before {
    content: ""; position: absolute; left: calc(-.8125rem - 4.5px); top: calc(1.5rem - 4.5px);
    width: 9px; height: 9px; border-radius: 50%; border: 2px solid var(--route); background: var(--page-bg);
  }
  .rail a { color: inherit; text-decoration: none; }
  .rail-tete { display: block; }
  .rail-tete:is(a):hover .rail-titre, .rail-sous a:hover { color: var(--titre); text-decoration: underline; }
  .rail-num { display: block; font: 600 3rem/1 var(--font-display); color: var(--titre); }
  .rail-titre { display: block; margin-top: .4rem; font: 600 1.25rem/1.1 var(--font-display);
                letter-spacing: .04em; text-transform: uppercase; color: var(--titre); }
  .rail-sous { display: block; margin-top: .25rem; font-size: .9375rem; line-height: 1.5;
               letter-spacing: .08em; text-transform: uppercase; color: var(--text-muted); }
  .rail-sous a, p.rail-sous:not(.rail-boussole) { display: flex; align-items: center; gap: .35rem; min-height: 2.75rem; }
  .rail-boussole { margin-top: auto; }
  .rail-boussole::before { content: ""; display: block; width: 2.5rem; height: 2.5rem; margin-bottom: .75rem;
                           background: var(--titre); -webkit-mask: var(--ic-boussole) center / contain no-repeat;
                           mask: var(--ic-boussole) center / contain no-repeat; }
}

/* ── L'en-tête ── */
.tete-atlas, .atlas-main, .pied {
  padding-inline: max(var(--g), calc((100% - var(--largeur)) / 2 + var(--g)));
}
.tete-atlas { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; padding-block: .625rem; }
.logo { display: inline-flex; align-items: center; justify-content: center; width: 3rem; height: 2.75rem; color: var(--titre); }
.logo::before { content: ""; width: 2.5rem; height: 1.75rem; background: currentColor;
  -webkit-mask: url("../atlas/logo-montagne.svg") center / contain no-repeat;
          mask: url("../atlas/logo-montagne.svg") center / contain no-repeat; }
.bouton-menu {
  margin-left: auto; width: 2.75rem; height: 2.75rem; padding: 0; display: inline-flex;
  align-items: center; justify-content: center; border: 1px solid var(--contour); border-radius: .5rem;
  background: var(--surface); color: var(--titre); cursor: pointer; font: inherit;
}
.bouton-menu::before { content: ""; width: 1.5rem; height: 1.5rem; background: currentColor;
  -webkit-mask: var(--ic-menu) center / contain no-repeat; mask: var(--ic-menu) center / contain no-repeat; }
.tete-atlas[data-ouvert] .bouton-menu::before {
  -webkit-mask-image: var(--ic-fermer); mask-image: var(--ic-fermer); }
/* Le panneau : menu déployable sur téléphone, rangée d'en-tête sur ordinateur. */
.panneau { display: none; flex-basis: 100%; flex-direction: column; gap: .75rem; padding: .5rem 0 1rem;
           border-top: 1px solid var(--border); }
.tete-atlas[data-ouvert] .panneau { display: flex; }
.nav-atlas { display: flex; flex-direction: column; }
.nav-atlas a {
  display: inline-flex; align-items: center; gap: .4rem; min-height: 2.75rem; padding: 0 .75rem;
  color: var(--text); text-decoration: none; font-size: 1rem;
  border-bottom: .1875rem solid transparent;
}
.nav-atlas a:hover { color: var(--titre); }
.nav-atlas a[aria-current="page"] { color: var(--titre); border-bottom-color: var(--accent); }
.verrou { display: inline-block; width: .9em; height: .9em; background: currentColor; flex: none;
  -webkit-mask: var(--ic-cadenas) center / contain no-repeat; mask: var(--ic-cadenas) center / contain no-repeat; }
.theme { display: inline-flex; align-self: flex-start; border: 1px solid var(--contour); border-radius: .5rem; overflow: hidden; }
.theme button {
  display: inline-flex; align-items: center; gap: .4rem; min-height: 2.75rem; min-width: 2.75rem;
  padding: 0 .75rem; border: 0; background: transparent; color: var(--text); font: inherit;
  font-size: .9375rem; cursor: pointer;
}
.theme button + button { border-left: 1px solid var(--contour); }
.theme button::before { content: ""; width: 1.125rem; height: 1.125rem; background: currentColor;
  -webkit-mask: var(--ic) center / contain no-repeat; mask: var(--ic) center / contain no-repeat; }
.theme [data-choix="auto"] { --ic: var(--ic-auto); }
.theme [data-choix="clair"] { --ic: var(--ic-soleil); }
.theme [data-choix="sombre"] { --ic: var(--ic-lune); }
.theme button[aria-pressed="true"] { background: var(--accent); color: var(--accent-texte); }
/* Le thème choisi se lit comme l'onglet actif : fond plein, sans toucher la graisse (la largeur
   changerait au clic). Anneau de focus blanc sur le fond plein, sinon accent sur accent. */
.theme button[aria-pressed="true"]:focus-visible { outline-color: var(--accent-texte); }
@media (min-width: 64rem) {
  .bouton-menu { display: none; }
  .panneau { display: flex; flex: 1; flex-basis: auto; flex-direction: row; align-items: center;
             justify-content: space-between; gap: 1rem; padding: 0; border-top: 0; }
  .nav-atlas { flex-direction: row; }
}

/* ── Les pages intérieures ── */
.atlas-main { padding-block: 1rem 2.5rem; }
.fil ol { display: flex; flex-wrap: wrap; align-items: center; gap: 0 .5rem; font-size: .9375rem; }
.fil li + li::before { content: "/"; margin-right: .5rem; color: var(--signal); }
.fil a { display: inline-flex; align-items: center; min-height: 2.75rem; }
.fil [aria-current] { color: var(--text-muted); }
.entete { padding-block: .5rem 1.25rem; display: grid; gap: .75rem; }
.entete h1 { font: 600 clamp(2.25rem, 6vw, 3.5rem)/1.02 var(--font-display); color: var(--titre); }
.mot-classe { color: var(--accent); }
.chapeau { max-width: 44rem; color: var(--text); }
/* Un ÉTAT, pas une commande : sans le cadre des onglets, qu'elle imitait sans répondre au clic
   (critique du 29/10). Seul « Oublier… », dedans, est une commande, soulignée comme un lien. */
.pastille-acces {
  display: inline-flex; align-items: center; gap: .75rem; justify-self: start; padding: .25rem 0;
}
.pastille-acces::before { content: ""; flex: none; width: 1.25rem; height: 1.25rem; background: var(--titre);
  -webkit-mask: var(--ic-cadenas) center / contain no-repeat; mask: var(--ic-cadenas) center / contain no-repeat; }
.pastille-acces strong { display: block; color: var(--titre); }
.pastille-acces span { display: block; font-size: .9375rem; color: var(--text-muted); }
.onglets { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; margin-block: .5rem 1.5rem; }
.onglets a {
  display: flex; align-items: center; gap: .6rem; min-height: 2.75rem; padding: .5rem .875rem;
  border: 1px solid var(--contour); border-radius: .5rem; background: var(--surface);
  color: var(--titre); text-decoration: none; font-weight: 700;
}
.onglets a::before { content: ""; flex: none; width: 1.25rem; height: 1.25rem; background: currentColor;
  -webkit-mask: var(--ic) center / contain no-repeat; mask: var(--ic) center / contain no-repeat; }
.onglets a[aria-current="page"] { background: var(--pcsi-trait); border-color: var(--pcsi-trait); color: var(--trait-texte); }
/* Sur téléphone, « Mathématiques » débordait de son onglet (7 px à 360, caché dans la marge à
   390) : marges, icône et corps resserrés sous 30 rem ; plus étroit que 340 px, le mot se coupe
   plutôt que de sortir de l'onglet. */
.onglets a { overflow-wrap: anywhere; }
@media (max-width: 30rem) {
  .onglets a { padding-inline: .5rem; gap: .5rem; font-size: .9375rem; }
  .onglets a::before { width: 1.125rem; height: 1.125rem; }
}
@media (min-width: 48rem) { .onglets { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
/* « Oublier le mot de passe sur cet appareil » : un poste partagé (CDI, salle info). */
.pastille-acces .oublier {
  display: inline-flex; align-items: center; min-height: 2.75rem; padding: 0; border: 0; background: none;
  color: var(--accent); font: inherit; font-size: .9375rem; text-decoration: underline; text-underline-offset: .2em;
  cursor: pointer; text-align: left;
}

/* ── Les blocs de documents (rendus par documents.js) ── */
.bloc { margin-bottom: 1.25rem; background: var(--surface); border: 1px solid var(--border); border-radius: .5rem; overflow: hidden; }
.bloc-tete { display: flex; align-items: center; gap: .75rem; padding: .875rem 1rem; }
.bloc-tete .icone::before { width: 1.75rem; height: 1.75rem; color: var(--accent); }
.bloc-titre { font: 600 1.75rem/1.1 var(--font-display); color: var(--titre); }
.discret { color: var(--text-muted); font: 400 .9375rem var(--font-body); margin-left: .35rem; }
.docs { border-top: 1px solid var(--border); }
.doc {
  display: grid; align-items: center; gap: .125rem .75rem; padding: .75rem 1rem;
  grid-template-columns: 1.75rem minmax(0, 1fr) auto;
  grid-template-areas: "ic nom act" "ic meta act";
  border-top: 1px solid var(--border);
}
.doc:first-child { border-top: 0; }
.doc-icone { grid-area: ic; color: var(--signal); }
.doc-icone::before { width: 1.75rem; height: 1.75rem; }
.doc-nom { grid-area: nom; font-weight: 700; color: var(--titre); overflow-wrap: break-word; }
.doc-nom a { display: flex; align-items: center; min-height: 2.75rem; color: inherit; text-decoration: none; }
.doc-nom a:hover { text-decoration: underline; }
.doc-meta { grid-area: meta; font-size: .9375rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.doc-meta span + span::before { content: " · "; }
.doc-actions { grid-area: act; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: .25rem; }
.telecharger, .doc-lien {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem; min-height: 2.75rem; min-width: 2.75rem;
  border: 1px solid var(--contour); border-radius: .5rem; background: transparent; color: var(--accent);
  text-decoration: none; font-size: .9375rem; font-weight: 700;
}
.doc-lien { padding: 0 .5rem; gap: .25rem; }
.doc-lien small { font-size: .9375rem; font-weight: 400; color: var(--text-muted); }
.telecharger:hover, .doc-lien:hover { background: var(--selection); }
.doc-lien.bientot { border-style: dashed; color: var(--text-muted); font-weight: 400; }
/* Téléphone : « sans corrigé » et « avec corrigé » demandent ~291 px pour tenir sur UNE ligne.
   La colonne de l'icône leur en prendrait 40 : sur ces lignes, l'icône est omise (la rubrique
   la porte déjà), et titre, méta et boutons partagent le même bord gauche. */
.doc-multi { grid-template-areas: "nom" "meta" "act"; grid-template-columns: minmax(0, 1fr); padding-inline: .75rem; }
.doc-multi .doc-icone { display: none; align-self: start; margin-top: .5rem; }
.doc-multi .doc-actions { justify-content: flex-start; }
/* Une ligne qui est elle-même un lien (une activité d'OSIIA). */
a.doc { color: inherit; text-decoration: none; grid-template-areas: "ic nom act" "ic meta act"; }
a.doc:hover .doc-nom { text-decoration: underline; }
a.doc .fleche { grid-area: act; justify-self: end; color: var(--accent); }
.doc-nom-simple { display: flex; align-items: center; min-height: 2.75rem; }
/* Entre 48 et 64 rem la ligne d'un TD a deux étages (titre, pages, date / boutons) : le
   tableau à cinq colonnes ne laissait que 34 px au titre à 768 px. Une ligne à un seul bouton
   (`.doc` simple) garde cinq colonnes, le titre y a plus de 300 px. */
@media (min-width: 48rem) {
  .doc { grid-template-columns: 1.75rem minmax(0, 1fr) 4.5rem 8rem auto; grid-template-areas: "ic nom pages maj act"; }
  .doc-meta { display: contents; }
  .doc-meta span + span::before { content: none; }
  .doc-pages { grid-area: pages; font-size: .9375rem; color: var(--text-muted); }
  .doc-maj { grid-area: maj; font-size: .9375rem; color: var(--text-muted); }
  .doc-multi { grid-template-columns: 1.75rem minmax(0, 1fr) 4.5rem 8rem; grid-template-areas: "ic nom pages maj" "ic act act act"; padding-inline: 1rem; }
  .doc-multi .doc-icone { display: block; }
  .doc-multi .doc-actions { justify-content: flex-start; }
  a.doc { grid-template-areas: "ic nom pages maj act"; }
}
/* Grand écran : le tableau, une seule ligne par document. La colonne des boutons a une largeur
   FIXE (deux boutons, « avec corrigé » ou « … à venir ») : en `auto`, elle variait d'une ligne à l'autre et la
   colonne des dates sautait (x = 1163, 916, 905 à 1440 px). */
@media (min-width: 64rem) {
  .doc, .doc-multi { grid-template-columns: 1.75rem minmax(0, 1fr) 5rem 9rem 21.5rem; grid-template-areas: "ic nom pages maj act"; }
  .doc-actions { justify-content: flex-end; }
  .doc-multi .doc-icone { align-self: center; margin-top: 0; }
  .doc-multi .doc-actions { justify-content: flex-end; }
}
.vide { padding: 1rem; color: var(--text-muted); }
/* Rien de publié, ou rien de chargé : deux états, deux messages (documents.js). */
.etat { display: grid; gap: .5rem; justify-items: start; padding: 1rem; }
.etat-texte { color: var(--titre); font-weight: 700; }
.etat-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; }

/* ── La porte : le formulaire de mot de passe de classe (acces.js) ── */
/* Le cadenas sur la ligne de l'invite, pas au-dessus : à 360 × 740, « Entrer » tombait sous le
   bas de l'écran (748 px). */
.acces {
  display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: .75rem .625rem;
  max-width: 24rem; margin: .5rem auto 2rem; padding: 1.25rem;
  background: var(--surface); border: 1px solid var(--border); border-radius: .5rem;
}
.acces > * { grid-column: 1 / -1; }
.acces > .acces-cadenas { grid-column: 1; }
.acces > .acces-invite { grid-column: 2; }
.acces-cadenas::before { content: ""; display: block; width: 1.5rem; height: 1.5rem; background: var(--titre);
  -webkit-mask: var(--ic-cadenas) center / contain no-repeat; mask: var(--ic-cadenas) center / contain no-repeat; }
.acces-invite { font-weight: 700; color: var(--titre); }
.champ {
  min-height: 2.75rem; padding: 0 .75rem; width: 100%; font: inherit; font-size: 1rem;
  border: 1px solid var(--contour); border-radius: .375rem; background: var(--surface-raised); color: var(--text);
}
.bouton {
  min-height: 2.75rem; padding: 0 1rem; font: inherit; font-size: 1rem; font-weight: 700; cursor: pointer;
  border: 1px solid var(--contour); border-radius: .375rem; background: transparent; color: var(--accent);
}
.bouton.fort { background: var(--accent); border-color: var(--accent); color: var(--accent-texte); }
.bouton:disabled { opacity: .6; cursor: default; }
.acces-erreur { color: var(--erreur); font-weight: 700; }

/* ── Les cartes de la page « Ressources élèves » ── */
.bloc-classe { margin-top: .5rem; }
.bloc-classe > h2 { font: 600 1.75rem/1.1 var(--font-display); color: var(--titre); margin-bottom: .75rem; }
.grille { display: grid; gap: .75rem; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 48rem) { .grille { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.carte {
  display: flex; align-items: center; gap: .875rem; min-height: 4.5rem; padding: .875rem 1rem;
  background: var(--surface); border: 1px solid var(--border); border-left: .375rem solid var(--pcsi-trait);
  border-radius: .5rem; color: var(--titre); text-decoration: none;
}
a.carte:hover { background: var(--surface-raised); }
.carte .icone::before { width: 1.75rem; height: 1.75rem; color: var(--accent); }
.carte-corps { flex: 1; min-width: 0; }
.carte-nom { display: block; font: 600 1.5rem/1.1 var(--font-display); }
.carte-meta { display: block; font-size: .9375rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.carte .fleche { color: var(--accent); }
.carte.bientot { border-style: dashed; border-left-style: solid; color: var(--text-muted); }
.carte.bientot .icone::before { color: var(--text-muted); }

/* ── L'accueil ── */
.heros { display: grid; gap: 1.25rem; padding-block: 1rem 2rem; align-items: center; }
.heros-texte { display: grid; gap: .875rem; }
.nom { font: 800 clamp(4rem, 17vw, 5.5rem)/.86 var(--font-display); text-transform: uppercase;
       color: var(--titre); letter-spacing: -.005em; }
.fonction { font-size: 1.25rem; line-height: 1.35; color: var(--text); }
.fonction span { display: block; }
.devise-haut { display: flex; gap: .875rem; align-items: baseline; padding-top: .875rem; border-top: 1px solid var(--border);
               font-size: .9375rem; letter-spacing: .14em; text-transform: uppercase; color: var(--text-muted); }
.devise-haut::before { content: "/"; color: var(--signal); font-size: 1.5rem; line-height: 1; font-weight: 700; }
.panorama { margin: 0; order: -1; }
.panorama-cadre {
  position: relative; overflow: hidden; aspect-ratio: 2.5;
  clip-path: polygon(0 0, 84% 0, 100% 18%, 96% 84%, 78% 100%, 26% 93%, 0 100%);
}
.panorama-cadre img { display: block; width: 100%; height: 100%; object-fit: cover; }
.panorama-cadre::after { content: ""; position: absolute; inset: 0; background: var(--voile); }
.panorama figcaption { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .25rem 1rem; margin-top: .5rem;
  font-size: .9375rem; letter-spacing: .1em; text-transform: uppercase; color: var(--text-muted); }
/* La route de la charte (« traits de route… décoratifs ») : un sentier en pointillé qui longe la
   découpe par le vide du coin, traverse la photo et s'arrête sur une flèche. Deux tracés, un par
   découpe ; chacun a la proportion de son cadre, et le trait garde 1,5 px à toute largeur. */
.panorama { position: relative; }
.route { position: absolute; top: 0; left: 0; width: 100%; height: auto; overflow: visible; pointer-events: none;
  color: var(--route); fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.route * { vector-effect: non-scaling-stroke; }
.route .pointille { stroke-dasharray: 6 5; }
.route-etroite { aspect-ratio: 2.5; }
.route-large { display: none; aspect-ratio: 1.78; }
@media (min-width: 48rem) {
  .heros { grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 2rem; }
  .nom { font-size: clamp(5rem, 8vw, 8rem); }
  .panorama { order: 0; }
  .route-etroite { display: none; }
  .route-large { display: block; }
  .panorama-cadre { aspect-ratio: 1.78;
    clip-path: polygon(12% 0, 78% 0, 88% 13%, 92% 24%, 100% 53%, 90% 90%, 73% 100%, 42% 94%, 15% 100%, 0 78%, 8% 44%, 0 34%); }
}
/* Le surtitre « Accès rapide » de la maquette est retiré (Impeccable, plancher : jamais de
   surtitre au-dessus d'un titre ; le titre porte seul). */
.acces-rapide, .enseignants { padding-block: .5rem 1.5rem; }
.acces-rapide > h2, .enseignants > h2 { font: 600 clamp(2.25rem, 5vw, 3.5rem)/1.05 var(--font-display); color: var(--titre); margin: .25rem 0 1rem; }
/* Pour les enseignants : ce qui, sur ce site, sert aussi aux collègues. Une liste dans un bloc,
   pas trois cartes de plus : ce sont des ouvrages, pas des classes. */
.ens { display: grid; grid-template-columns: minmax(0, 1fr); background: var(--surface); border: 1px solid var(--border);
       border-radius: .5rem; overflow: hidden; }
.ens li + li { border-top: 1px solid var(--border); }
.ens-lien {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .25rem .75rem;
  min-height: 2.75rem; height: 100%; align-content: start; padding: 1rem; color: var(--text); text-decoration: none;
}
a.ens-lien:hover { background: var(--surface-raised); }
a.ens-lien:hover .ens-nom { text-decoration: underline; }
a.ens-lien:focus-visible { outline-offset: -.25rem; }
.ens-nom { display: flex; align-items: center; gap: .4rem; font: 600 1.5rem/1.1 var(--font-display); color: var(--titre); }
.ens-resume { grid-column: 1; font-size: .9375rem; color: var(--text-muted); }
.ens-lien .fleche { grid-column: 2; grid-row: 1 / span 2; color: var(--accent); }
@media (min-width: 56rem) {
  .ens { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .ens li + li { border-top: 0; border-left: 1px solid var(--border); }
}
.cartes { display: grid; gap: 1rem; grid-template-columns: minmax(0, 1fr); align-items: start; }
@media (min-width: 56rem) { .cartes { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.bloc-classe + .bloc-classe { margin-top: 2rem; }
.bloc-classe .pastille-acces { margin-bottom: .75rem; }
.cartes-deux { margin-top: .75rem; }
@media (min-width: 48rem) { .cartes-deux { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.classe {
  --trait: var(--pcsi-trait); --teinte: var(--pcsi);
  display: flex; flex-direction: column; overflow: hidden; background: var(--surface);
  border: 1px solid var(--border); border-left: .375rem solid var(--trait); border-radius: .5rem;
}
.classe[data-classe="nsi"] { --trait: var(--nsi-trait); --teinte: var(--nsi); }
.classe[data-classe="osiia"] { --trait: var(--osiia-trait); --teinte: var(--osiia); }
/* Le paysage de la carte se voit EN ENTIER, crête comprise : la bande a la proportion du dessin
   (800/262), plafonnée sur une carte très large (une colonne, 48-56 rem), où l'on garde la crête.
   Le nom commence à 88 % de la bande, sous les sapins : seules les ondes passent derrière lui.
   Le `padding-top` en % se rapporte à la largeur de la carte, comme la bande. */
.classe-tete {
  position: relative; display: grid; align-content: end; gap: .125rem;
  padding: min(28.8%, 8.375rem) 3.5rem 1rem 1rem;
  color: var(--titre); text-decoration: none; overflow: hidden;
  background: color-mix(in srgb, var(--teinte) 18%, var(--surface));
}
.classe-art { position: absolute; top: 0; left: 0; width: 100%; aspect-ratio: 800 / 262; max-height: 9.5rem;
  background: var(--trait); opacity: .7;
  -webkit-mask: url("../atlas/paysage-carte.svg?v=2026-10-29") center top / cover no-repeat;
          mask: url("../atlas/paysage-carte.svg?v=2026-10-29") center top / cover no-repeat; }
/* Hauteur fixe : le cadenas de la PCSI ne décale plus son « 01 » de 8 px sous « 02 » et « 03 ». */
.classe-haut { position: absolute; top: .75rem; left: 1rem; right: .75rem; height: 2.25rem; display: flex; align-items: center; gap: .75rem; }
.classe-num { font: 600 1.25rem/1 var(--font-display); letter-spacing: .06em; }
.classe-filet { flex: 0 0 3rem; height: 1px; background: var(--titre); opacity: .6; }
.classe-cadenas { margin-left: auto; display: inline-flex; align-items: center; justify-content: center; width: 2.25rem; height: 2.25rem;
  border-radius: .375rem; background: var(--surface-raised); color: var(--titre); border: 1px solid var(--contour); }
.classe-cadenas::before { content: ""; width: 1.125rem; height: 1.125rem; background: currentColor;
  -webkit-mask: var(--ic-cadenas) center / contain no-repeat; mask: var(--ic-cadenas) center / contain no-repeat; }
.classe-nom { position: relative; font: 600 2.5rem/1 var(--font-display); }
.classe-resume, .classe-etat { position: relative; font-size: 1rem; line-height: 1.35; }
.classe-etat { font-size: .9375rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.classe-tete .fleche { position: absolute; right: 1rem; bottom: 1rem; color: var(--titre); }
.classe-tete:hover .classe-nom { text-decoration: underline; }
.classe-liens { border-top: 1px solid var(--border); }
.classe-liens li + li { border-top: 1px solid var(--border); }
.classe-liens a, .classe-liens span.bientot {
  display: flex; align-items: center; gap: .75rem; min-height: 2.75rem; padding: .375rem 1rem;
  color: var(--text); text-decoration: none;
}
.classe-liens a::before, .classe-liens span.bientot::before { content: ""; flex: none; width: 1.25rem; height: 1.25rem; background: var(--trait);
  -webkit-mask: var(--ic) center / contain no-repeat; mask: var(--ic) center / contain no-repeat; }
.classe-liens a::after { content: ""; margin-left: auto; flex: none; width: 1.125rem; height: 1.125rem; background: var(--text-muted);
  -webkit-mask: var(--ic-chevron) center / contain no-repeat; mask: var(--ic-chevron) center / contain no-repeat; }
.classe-liens a:hover { background: var(--surface-raised); }
.classe-liens .bientot { color: var(--text-muted); }
/* Une classe qui n'a rien publié (griser() de l'accueil et de eleves.html) : titre et illustration
   s'éteignent, le trait de classe reste. Couleurs seulement. */
.classe:has(> span.classe-tete) .classe-nom { color: var(--text-muted); }
.classe:has(> span.classe-tete) .classe-art { opacity: .25; }
.classe:has(> span.classe-tete) .fleche { visibility: hidden; }   /* aucune invitation à cliquer */
.pied-accueil { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.5rem; padding-block: .75rem 1.5rem; }
.citation { flex: 1 1 18rem; padding-left: .875rem; border-left: .1875rem solid var(--signal);
            font: italic 400 1.25rem/1.35 var(--font-editorial); color: var(--text); }
.mots-bas { font-size: .9375rem; letter-spacing: .14em; text-transform: uppercase; color: var(--text-muted); }
.contact { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0 .75rem; min-height: 2.75rem; color: var(--accent); font-weight: 700; }
.contact-adresse { overflow-wrap: anywhere; }
.contact small { font-size: .9375rem; font-weight: 400; color: var(--text-muted); }
.lien-retour { display: inline-flex; align-items: center; min-height: 2.75rem; font-weight: 700; }

/* ── Le pied, les crédits ── */
.pied { padding-block: 1.25rem 2rem; text-align: center; font-size: .9375rem; color: var(--text-muted); }
.pied a { display: inline-flex; align-items: center; min-height: 2.75rem; }
/* Sur téléphone le pied tient en deux lignes : le « · » y devient le saut, il ne pend plus. */
@media (max-width: 30rem) { .pied-sep { display: block; height: 0; overflow: hidden; } }
.credit { padding: .9rem 1rem; }
.credit > * { max-width: 56ch; }   /* moins de 80 signes par ligne, même sur grand écran */
.credit + .credit { border-top: 1px solid var(--border); }
.credit-oeuvre { font-weight: 700; color: var(--titre); }
.credit-meta { color: var(--text-muted); font-size: .9375rem; margin-top: .2rem; overflow-wrap: anywhere; }
.credit code { font: .9375rem/1.5 ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace; overflow-wrap: anywhere; }
/* La source d'un crédit sur sa propre ligne : un lien noyé dans la méta faisait 19 px de haut. */
.credit-source { display: inline-flex; align-items: center; min-height: 2.75rem; font-size: .9375rem; font-weight: 700; }

@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; } }
