/* ==========================================================================
   Partage FPSE — feuille de style
   Palette : charte graphique UMONS. Cyan #009ee0 = couleur de la faculté
   de psychologie. Rouge #a80039, jaune #f6a924, gris #969696 = UMONS.
   Typographie : Verdana pour les titres, Helvetica pour le texte — les
   deux familles recommandées par la charte.
   ========================================================================== */

:root {
  color-scheme: light;

  --cyan:        #009ee0;
  --cyan-fonce:  #0077a8;
  --cyan-pale:   #e3f4fc;
  --encre:       #10243a;
  --encre-douce: #4a6076;
  /* Fond légèrement adouci : le blanc pur restait trop agressif. */
  --papier:      #eef2f6;
  --blanc:       #fbfcfd;
  --ambre:       #f6a924;
  --ambre-pale:  #fdf3e0;
  --grenat:      #a80039;
  --grenat-vif:  #a80039;   /* texte grenat : éclairci en mode sombre */
  --grenat-pale: #fdeaf0;
  --grenat-bord: #f3c4d3;
  --grenat-texte:#6d2340;
  --trait:       #dbe4ea;
  --marine:      #10243a;   /* fond des blocs sombres (accroche, vidéos) : fixe */
  --lien:        #0077a8;
  --lien-vif:    #009ee0;
  --puce-fond:   #fdf3e0;
  --puce-texte:  #8a5c00;
  --puce-bord:   #f0d9a8;

  --titre: Verdana, "DejaVu Sans", Geneva, sans-serif;
  --texte: "Helvetica Neue", Helvetica, Arial, sans-serif;

  --rayon: 10px;
  --large: 1180px;
}

/* ------------------------------------------------------------ mode sombre
   Même palette UMONS : le cyan reste la couleur du site, seuls les fonds
   et les contrastes s'inversent. Suit le réglage du système, sauf si la
   personne a choisi avec la bascule de l'en-tête (html[data-theme]). Les deux
   blocs ci-dessous sont identiques : l'un pour le réglage du système, l'autre
   pour le choix explicite. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;

    --papier:      #0e151d;
    --blanc:       #17222d;
    --encre:       #e7edf3;
    --encre-douce: #9fb2c2;
    --trait:       #263443;
    --cyan-pale:   #0d2b3b;
    --grenat-vif:  #ff89a8;
    --grenat-pale: #2b111c;
    --grenat-bord: #4d2032;
    --grenat-texte:#e9a8bd;
    --ambre-pale:  #2c2210;
    --lien:        #5ec6f2;
    --lien-vif:    #8ad9ff;
    --puce-fond:   #2c2210;
    --puce-texte:  #f0c469;
    --puce-bord:   #4a3a16;
  }
}
:root[data-theme="dark"] {
    color-scheme: dark;

    --papier:      #0e151d;
    --blanc:       #17222d;
    --encre:       #e7edf3;
    --encre-douce: #9fb2c2;
    --trait:       #263443;
    --cyan-pale:   #0d2b3b;
    --grenat-vif:  #ff89a8;
    --grenat-pale: #2b111c;
    --grenat-bord: #4d2032;
    --grenat-texte:#e9a8bd;
    --ambre-pale:  #2c2210;
    --lien:        #5ec6f2;
    --lien-vif:    #8ad9ff;
    --puce-fond:   #2c2210;
    --puce-texte:  #f0c469;
    --puce-bord:   #4a3a16;
}

*, *::before, *::after { box-sizing: border-box; }

html { scroll-behavior: smooth; scroll-padding-top: 88px; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { animation: none !important; transition: none !important; }
}

body {
  margin: 0;
  background: var(--papier);
  color: var(--encre);
  font-family: var(--texte);
  font-size: 17px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4 { font-family: var(--titre); line-height: 1.25; margin: 0 0 .5em; }
h1 { font-size: clamp(1.9rem, 4vw, 2.6rem); letter-spacing: -.01em; }
h2 { font-size: clamp(1.3rem, 2.4vw, 1.6rem); margin-top: 2.4rem; }
h3 { font-size: 1.1rem; margin-top: 1.8rem; }
p  { margin: 0 0 1.1em; max-width: 68ch; }

a { color: var(--lien); }
a:hover { color: var(--lien-vif); }
:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; border-radius: 4px; }

code {
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: .88em;
  background: var(--cyan-pale);
  color: var(--lien);
  padding: .12em .4em;
  border-radius: 4px;
  word-break: break-word;
}

.saut-contenu {
  position: absolute; left: -9999px; top: 0; z-index: 100;
  background: var(--marine); color: #fff; padding: .8rem 1.2rem;
}
.saut-contenu:focus { left: .5rem; top: .5rem; }

/* --------------------------------------------------------------- en-tête */
.entete {
  background: var(--blanc);
  border-bottom: 1px solid var(--trait);
  position: sticky; top: 0; z-index: 40;
}
.entete__interieur {
  max-width: var(--large); margin: 0 auto;
  padding: .7rem 1.5rem;
  display: flex; align-items: center; gap: 1.2rem;
}

/* Navigation principale : une seule rangée de pastilles, sobre et lisible */
.nav-h {
  flex: 1 1 auto; min-width: 0;
  display: flex; align-items: center; justify-content: flex-end; gap: 1rem;
}
.nav-h__liste {
  list-style: none; margin: 0; padding: 0;
  display: flex; align-items: center; gap: .2rem;
}
.nav-h__lien {
  display: inline-flex; align-items: center; gap: .4rem; white-space: nowrap;
  padding: .5rem .8rem; border-radius: 8px;
  color: var(--encre-douce); text-decoration: none;
  font-size: .93rem; font-weight: 600;
}
.nav-h__lien .nav__icone { display: none; }
.nav-h__lien:hover { color: var(--lien); background: var(--cyan-pale); }
.nav-h__lien.est-actif { color: var(--lien); background: var(--cyan-pale); }
.bouton-discord--entete { padding: .55rem 1.05rem; font-size: .88rem; flex: none; }
.marque { display: flex; align-items: center; gap: .85rem; text-decoration: none; color: inherit; flex: none; }
/* Barre horizontale : la marque reste compacte, la signature passe sous le seuil mobile */
@media (min-width: 1081px) {
  .marque__texte span { display: none; }
}
.marque__sigle {
  background: var(--cyan); color: #fff;
  font-family: var(--titre); font-weight: 700; font-size: .78rem; letter-spacing: .06em;
  padding: .5rem .6rem; border-radius: 8px;
}
.marque__texte { display: flex; flex-direction: column; line-height: 1.3; }
.marque__texte strong { font-family: var(--titre); font-size: 1.02rem; }
.marque__texte span { font-size: .78rem; color: var(--encre-douce); }

/* Bascule jour / nuit (refaite le 18/10 au soir : Matthias trouvait l'ancien
   bouton rond mal placé et trop gros) — un petit interrupteur soleil | lune,
   dans le groupe d'actions à droite de l'en-tête ; la pastille blanche glisse
   sous le mode affiché. Sans JavaScript, il reste lisible (CSS seule). */
.bascule-theme {
  flex: none; display: inline-flex; align-items: center; padding: 3px; margin: 0;
  background: none; border: 0; border-radius: 99px; cursor: pointer; color: var(--encre-douce);
}
.bascule-theme__piste {
  position: relative; display: flex; align-items: center; justify-content: space-between;
  width: 56px; height: 30px; padding: 0 7.5px; border-radius: 99px;
  background: var(--papier); border: 1px solid var(--trait);
  box-shadow: inset 0 1px 2px rgba(16, 36, 58, .08);
  transition: border-color .15s ease;
}
.bascule-theme:hover .bascule-theme__piste { border-color: var(--cyan); }
.bascule-theme svg {
  position: relative; z-index: 1; width: 15px; height: 15px; display: block;
  fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round;
  transition: color .2s ease;
}
.bascule-theme__bouton {
  position: absolute; top: 2px; left: 2px; width: 24px; height: 24px; border-radius: 50%;
  background: var(--blanc); box-shadow: 0 1px 3px rgba(16, 36, 58, .28);
  transition: transform .22s ease;
}
.bascule-theme__soleil { color: #c98200; }                 /* mode jour : le soleil, sur la pastille */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .bascule-theme__soleil { color: var(--encre-douce); }
  :root:not([data-theme="light"]) .bascule-theme__lune { color: var(--lien); }
  :root:not([data-theme="light"]) .bascule-theme__bouton { transform: translateX(26px); box-shadow: 0 1px 3px rgba(0, 0, 0, .5); }
}
:root[data-theme="dark"] .bascule-theme__soleil { color: var(--encre-douce); }
:root[data-theme="dark"] .bascule-theme__lune { color: var(--lien); }
:root[data-theme="dark"] .bascule-theme__bouton { transform: translateX(26px); box-shadow: 0 1px 3px rgba(0, 0, 0, .5); }

.bascule-menu {
  display: none; align-items: center; gap: .55rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 8px;
  padding: .55rem .9rem; font: inherit; font-size: .9rem; color: var(--encre); cursor: pointer;
}
.bascule-menu__barres,
.bascule-menu__barres::before,
.bascule-menu__barres::after {
  display: block; width: 17px; height: 2px; background: var(--encre); border-radius: 2px;
}
.bascule-menu__barres { position: relative; }
.bascule-menu__barres::before, .bascule-menu__barres::after { content: ""; position: absolute; }
.bascule-menu__barres::before { top: -5px; }
.bascule-menu__barres::after  { top: 5px; }

/* ---------------------------------------------------------------- grille */
.grille {
  max-width: var(--large); margin: 0 auto;
  padding: 2.5rem 1.5rem 4rem;
  display: grid; grid-template-columns: minmax(0, 1fr) 274px; gap: 3rem;
  align-items: start;
}
.contenu { min-width: 0; }
.grille--simple { grid-template-columns: minmax(0, 1fr); }
.titre-page { margin-bottom: .35em; }
.chapeau {
  font-size: 1.12rem; color: var(--encre-douce); max-width: 60ch; margin-bottom: 2rem;
}

/* ------------------------------------------------------ menu latéral droit */
.lateral { position: sticky; top: 92px; }
.nav {
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.1rem 1rem; margin-bottom: 1rem;
}
.nav__intitule {
  font-family: var(--titre); font-size: .72rem; font-weight: 700;
  color: var(--encre-douce); margin: 0 0 .5rem .35rem;
}
.nav__intitule + .nav__liste { margin-bottom: 1.25rem; }
.nav__liste { list-style: none; margin: 0; padding: 0; }
.nav__lien {
  display: flex; align-items: center; gap: .6rem;
  padding: .55rem .6rem; border-radius: 7px;
  color: var(--encre); text-decoration: none; font-size: .92rem;
  border-left: 3px solid transparent;
}
.nav__lien:hover { background: var(--papier); color: var(--encre); }
.nav__lien.est-actif {
  background: var(--cyan-pale); color: var(--lien);
  border-left-color: var(--cyan); font-weight: 700;
}
.nav__libelle { flex: 1; }
.nav__lien--secondaire { font-size: .87rem; color: var(--encre-douce); padding-left: 1.1rem; }
.nav__lien--secondaire:hover { color: var(--lien); }

.nav__icone { width: 17px; height: 17px; flex: none; background: currentColor; opacity: .75; }
.i-maison   { -webkit-mask: var(--m-maison) center/contain no-repeat;   mask: var(--m-maison) center/contain no-repeat; }
.i-boussole { -webkit-mask: var(--m-boussole) center/contain no-repeat; mask: var(--m-boussole) center/contain no-repeat; }
.i-dossier  { -webkit-mask: var(--m-dossier) center/contain no-repeat;  mask: var(--m-dossier) center/contain no-repeat; }
.i-balance  { -webkit-mask: var(--m-balance) center/contain no-repeat;  mask: var(--m-balance) center/contain no-repeat; }
.i-cadenas  { -webkit-mask: var(--m-cadenas) center/contain no-repeat;  mask: var(--m-cadenas) center/contain no-repeat; }
.i-faculte  { -webkit-mask: var(--m-faculte) center/contain no-repeat;  mask: var(--m-faculte) center/contain no-repeat; }
.i-coeur    { -webkit-mask: var(--m-coeur) center/contain no-repeat;    mask: var(--m-coeur) center/contain no-repeat; }
:root {
  --m-maison:   url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3 2 11h3v10h6v-6h2v6h6V11h3z"/></svg>');
  --m-boussole: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20m4 6-2.4 6L8 16l2.4-6z"/></svg>');
  --m-dossier:  url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 5h6l2 3h10v11H3z"/></svg>');
  --m-balance:  url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 2h2v3h7v2h-3l3 7a4 4 0 0 1-8 0l3-7h-2v12h4v2H6v-2h4V7H8l3 7a4 4 0 0 1-8 0l3-7H3V5h8z"/></svg>');
  --m-faculte:  url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3 1 8l11 5 9-4.1V15h2V8L12 3zM5 12.3V16c0 1.7 3.1 3 7 3s7-1.3 7-3v-3.7l-7 3.2-7-3.2z"/></svg>');
  --m-coeur:    url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 21 4 13.4A5.4 5.4 0 0 1 12 6a5.4 5.4 0 0 1 8 7.4z"/></svg>');
  --m-cadenas:  url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a5 5 0 0 0-5 5v3H5v12h14V10h-2V7a5 5 0 0 0-5-5m0 2a3 3 0 0 1 3 3v3H9V7a3 3 0 0 1 3-3"/></svg>');
}

.puce {
  font-size: .66rem; font-weight: 700; letter-spacing: .02em;
  background: var(--puce-fond); color: var(--puce-texte);
  border: 1px solid var(--puce-bord); border-radius: 99px; padding: .12rem .45rem;
}

.mention-laterale {
  font-size: .76rem; line-height: 1.5; color: var(--encre-douce);
  text-align: center; margin: 0; padding: 0 .5rem;
}

/* ------------------------------------------------------------- l'accroche */
.accroche {
  background: var(--marine);
  color: #fff;
  border-radius: 14px;
  padding: 2.6rem 2.2rem;
  margin-bottom: 2.5rem;
  position: relative;
  overflow: hidden;
}
.accroche::after {
  content: ""; position: absolute; right: -70px; top: -70px;
  width: 260px; height: 260px; border-radius: 50%;
  background: var(--cyan); opacity: .16;
}
.accroche h2 {
  font-size: clamp(1.5rem, 3.4vw, 2.05rem); margin-top: 0; color: #fff;
  max-width: 19ch; position: relative;
}
.accroche p { color: #c3d3e0; max-width: 46ch; position: relative; }
.accroche__chiffres {
  display: flex; flex-wrap: wrap; gap: 2.2rem;
  margin-top: 1.8rem; padding-top: 1.6rem;
  border-top: 1px solid rgba(255,255,255,.16); position: relative;
}
.accroche__chiffres div strong {
  display: block; font-family: var(--titre); font-size: 1.5rem; color: var(--cyan);
}
.accroche__chiffres div span { font-size: .84rem; color: #a8bccd; }

.bouton-discord {
  display: inline-flex; align-items: center; gap: .65rem;
  background: #5865F2; color: #fff; text-decoration: none;
  font-family: var(--titre); font-size: 1rem; font-weight: 700;
  padding: .95rem 1.5rem; border-radius: 9px;
  box-shadow: 0 2px 0 #4752c4;
}
.bouton-discord:hover { background: #4d5ae8; color: #fff; }
.bouton-discord:active { transform: translateY(1px); box-shadow: 0 1px 0 #4752c4; }
.bouton-discord svg { width: 23px; height: 17px; fill: currentColor; flex: none; }
.bouton-discord--lateral { width: 100%; justify-content: center; margin-bottom: 1rem; font-size: .93rem; }
.accroche .bouton-discord { position: relative; margin-top: .5rem; }
.accroche small { display: block; margin-top: .8rem; color: #8fa6b8; font-size: .8rem; }

/* ---------------------------------------------------------------- blocs */
.cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1rem; margin: 1.5rem 0 2.5rem; }
.carte {
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.3rem;
}
.carte h3 { margin: 0 0 .4rem; font-size: 1rem; }
.carte p { margin: 0; font-size: .92rem; color: var(--encre-douce); }
.carte__emoji { font-size: 1.5rem; display: block; margin-bottom: .6rem; }

.encadre {
  border-left: 4px solid var(--cyan);
  background: var(--cyan-pale);
  padding: 1.1rem 1.3rem; border-radius: 0 var(--rayon) var(--rayon) 0;
  margin: 1.6rem 0;
}
.encadre p:last-child { margin-bottom: 0; }
.encadre--attention { border-left-color: var(--ambre); background: var(--ambre-pale); }
.encadre--important { border-left-color: var(--grenat); background: var(--grenat-pale); }
.encadre h3 { margin-top: 0; }

/* -------------------------------------------------------------- chapitres */
.chapitre { border-top: 1px solid var(--trait); padding-top: 2rem; margin-top: 2.4rem; }
.chapitre:first-of-type { border-top: 0; }
.chapitre__entete { display: flex; align-items: baseline; gap: .8rem; flex-wrap: wrap; }
.chapitre__numero {
  font-family: var(--titre); font-size: .95rem; font-weight: 700;
  color: #fff; background: var(--cyan);
  width: 30px; height: 30px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center; flex: none;
}
.chapitre__duree { font-size: .8rem; color: var(--encre-douce); }
.chapitre h2 { margin: 0; }
.chapitre__resume { color: var(--encre-douce); margin-top: .6rem; }

.etapes { counter-reset: etape; list-style: none; padding: 0; margin: 1.2rem 0 0; }
.etapes li {
  counter-increment: etape; position: relative;
  padding: .55rem 0 .55rem 2.3rem; max-width: 68ch;
}
.etapes li::before {
  content: counter(etape); position: absolute; left: 0; top: .55rem;
  width: 1.55rem; height: 1.55rem; border-radius: 50%;
  background: var(--cyan-pale); color: var(--lien);
  font-family: var(--titre); font-size: .78rem; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}

/* ---------------------------------------------------------------- vidéos */
.video { margin: 1.4rem 0 0; }
.video__cadre {
  position: relative; aspect-ratio: 16 / 9;
  background: var(--marine); border-radius: var(--rayon); overflow: hidden;
}
.video__cadre video, .video__cadre iframe { width: 100%; height: 100%; display: block; border: 0; }
.video__attente {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: .6rem; color: #9fb4c6; text-align: center; padding: 1.5rem;
}
.video__pictogramme { font-size: 2rem; }
.sans-marge-haute { margin-top: 0; }
.video__attente strong { font-family: var(--titre); color: #d3e0ea; font-size: 1rem; }
.video__attente span { font-size: .85rem; max-width: 34ch; }
.video__legende { font-size: .84rem; color: var(--encre-douce); margin: .6rem 0 0; }
.video--principale .video__cadre { border: 3px solid var(--cyan); }

.minutage { margin: 1rem 0 0; }
.minutage__lien {
  display: inline-flex; align-items: center; gap: .5rem;
  font-size: .9rem; text-decoration: none;
  padding: .45rem .9rem; border-radius: 999px;
  border: 1px solid var(--cyan); color: var(--cyan);
}
.minutage__lien:hover, .minutage__lien:focus-visible { background: var(--cyan); color: #0b1620; }
.minutage__lien span { font-size: .75em; }

/* Sommaire minuté de la vidéo complète : un bouton par chapitre, qui cale
   le lecteur au bon passage (assets/js/main.js, liens data-minute). */
.sommaire {
  margin: 1.2rem 0 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: .5rem;
}
.sommaire__chapitre {
  display: flex; align-items: center; gap: .7rem;
  padding: .55rem .8rem;
  border: 1px solid var(--trait); border-radius: var(--rayon);
  background: var(--blanc);
  text-decoration: none; color: var(--encre); font-size: .92rem;
}
.sommaire__chapitre:hover, .sommaire__chapitre:focus-visible {
  border-color: var(--cyan);
}
.sommaire__minute {
  font-family: var(--titre); font-weight: 700; font-size: .78rem;
  color: var(--lien); background: var(--cyan-pale);
  padding: .15rem .5rem; border-radius: 999px;
  flex: none; min-width: 3.4em; text-align: center;
}

/* Sous-chapitres d'un groupe du guide (une vidéo = un groupe). */
.sous-chapitre { margin-top: 2rem; padding-left: 1.1rem; border-left: 3px solid var(--trait); }
.sous-chapitre h3 { margin: 0; }
.sous-chapitre .chapitre__resume { margin-top: .35rem; }
.sous-chapitre .telechargements { margin-top: 1.2rem; }

/* --------------------------------------------------------------- travaux */
.travaux { text-align: center; padding: 3.5rem 1.5rem; background: var(--blanc);
           border: 2px dashed var(--trait); border-radius: 14px; }
.travaux__emoji { font-size: 3rem; display: block; margin-bottom: .8rem; }
.travaux h2 { margin-top: 0; }
.travaux p { margin-left: auto; margin-right: auto; }

/* --------------------------------------------------------- texte juridique */
.juridique h2 {
  border-bottom: 2px solid var(--cyan); padding-bottom: .4rem; display: inline-block;
}
.juridique h3 { color: var(--lien); }
.juridique ul { max-width: 68ch; padding-left: 1.2rem; }
.juridique li { margin-bottom: .45rem; }
.juridique__date { font-size: .85rem; color: var(--encre-douce); }

/* ------------------------------------------------------------ pied de page */
.pied { background: var(--blanc); border-top: 1px solid var(--trait); margin-top: 2rem; }
.pied__interieur { max-width: var(--large); margin: 0 auto; padding: 2.8rem 1.5rem 2rem; }
.pied__avertissement {
  background: var(--grenat-pale); border: 1px solid var(--grenat-bord);
  border-radius: var(--rayon); padding: 1.4rem 1.5rem; margin-bottom: 2.4rem;
}
.pied__avertissement h2 { margin-top: 0; font-size: 1.05rem; color: var(--grenat-vif); }
.pied__avertissement p { font-size: .9rem; color: var(--grenat-texte); max-width: 88ch; }
.pied__avertissement p:last-child { margin-bottom: 0; }
.pied__colonnes { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 2rem; }
.pied__colonnes h3 { margin: 0 0 .6rem; font-size: .88rem; }
.pied__colonnes ul { list-style: none; margin: 0; padding: 0; font-size: .9rem; }
.pied__colonnes li { margin-bottom: .35rem; color: var(--encre-douce); }
.pied__bas {
  margin: 2.2rem 0 0; padding-top: 1.2rem; border-top: 1px solid var(--trait);
  font-size: .82rem; color: var(--encre-douce);
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: .4rem 1.2rem;
}
.pied__version { margin-left: auto; font-variant-numeric: tabular-nums; opacity: .8; }

/* ------------------------------------------------------------- responsive */
@media (max-width: 1080px) {
  .entete__interieur { flex-wrap: wrap; justify-content: space-between; }
  .bascule-menu { display: inline-flex; }
  .entete__actions { margin-left: auto; }
  .entete__actions::before { display: none; }
  .nav-h { display: none; order: 10; }
  .nav-h.est-ouvert {
    display: flex; flex: 1 1 100%; flex-direction: column; align-items: stretch;
    padding: .3rem 0 .7rem;
  }
  .nav-h__liste { flex-direction: column; align-items: stretch; gap: .1rem; }
  .nav-h__lien { justify-content: flex-start; padding: .7rem .8rem; }
  .nav-h__lien .nav__icone { display: inline-block; width: 15px; height: 15px; }
  .bouton-discord--entete { justify-content: center; margin-top: .5rem; }
}

@media (max-width: 900px) {
  .grille { grid-template-columns: 1fr; gap: 2rem; padding-top: 1.5rem; }
  .lateral { position: static; }
  .accroche { padding: 2rem 1.4rem; }
  body { font-size: 16px; }
}

/* --------------------------------------------------- téléchargements Discord */
.telechargements {
  list-style: none; margin: .8rem 0 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: .6rem;
}
.telechargements__lien {
  display: inline-flex; align-items: center; gap: .55rem;
  background: var(--marine); border: 1px solid var(--marine);
  border-radius: 99px; padding: .55rem 1.05rem;
  color: #fff; text-decoration: none;
  font-size: .9rem; font-weight: 600;
}
.telechargements__lien svg { width: 16px; height: 16px; fill: currentColor; flex: none; }
.telechargements__lien:hover { border-color: var(--cyan); color: #fff; background: #17324e; }

/* --------------------------------------------------------- page /discord */
.go {
  min-height: 100vh; margin: 0;
  display: flex; align-items: center; justify-content: center;
  padding: 1.5rem;
}
.go__carte {
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: 14px; padding: 2.4rem 2.2rem;
  max-width: 34rem; text-align: center;
}
.go__titre { font-size: 1.5rem; margin-bottom: .6rem; }
.go__texte { color: var(--encre-douce); margin: 0 auto 1.4rem; }
.go__boutons { display: flex; flex-direction: column; align-items: center; gap: .8rem; margin: 0 0 1.8rem; }
.go__lien-web { font-size: .92rem; }
.go__telechargements { border-top: 1px solid var(--trait); padding-top: 1.4rem; }
.go__intitule { font-size: .88rem; color: var(--encre-douce); margin-bottom: 0; }
.go .telechargements { justify-content: center; }
.go__retour { margin: 1.6rem 0 0; font-size: .85rem; }

/* ----------------------------------------------------------------- sponsor */
.sponsor {
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: 14px; padding: 2.2rem 2rem; margin-bottom: 2.4rem;
}
.sponsor__logo { display: block; max-width: 340px; margin-bottom: 1.6rem; }
.sponsor__logo img { width: 100%; height: auto; display: block; }

/* ------------------------------------------------ téléchargements sous le héros */
.telecharger {
  display: flex; align-items: center; gap: 1.4rem; flex-wrap: wrap;
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.1rem 1.4rem; margin: 1.6rem 0 2.4rem;
}
.telecharger__texte { margin: 0; font-size: .95rem; color: var(--encre-douce); flex: 1 1 240px; }
.telecharger .telechargements { margin: 0; }

/* ------------------------------------------------------------ cartes : icônes */
.carte__icone {
  width: 26px; height: 26px; display: block; margin-bottom: .7rem;
  fill: none; stroke: var(--cyan); stroke-width: 1.8;
  stroke-linecap: round; stroke-linejoin: round;
}

/* --------------------------------------------------------- bandeau sponsor */
.bandeau-sponsor {
  display: flex; align-items: center; gap: 1.4rem; flex-wrap: wrap;
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.2rem 1.5rem; margin-top: 2.6rem;
  text-decoration: none; color: var(--encre-douce);
}
.bandeau-sponsor:hover { border-color: var(--cyan); color: var(--encre-douce); }
.bandeau-sponsor img { width: 190px; height: auto; display: block; flex: none; }
.bandeau-sponsor strong { color: var(--encre); display: block; margin-bottom: .15rem; }
.bandeau-sponsor span { font-size: .92rem; max-width: 52ch; }

/* ------------------------------------------------------- contacts faculté */
.contacts {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 1rem; margin: 1.4rem 0 2.4rem;
}
.contact {
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.1rem 1.2rem;
}
.contact__nom { margin: 0; font-family: var(--titre); font-weight: 700; }
.contact__annee { margin: .1rem 0 .7rem; font-size: .85rem; color: var(--encre-douce); }
.contact__moyens { list-style: none; margin: 0; padding: 0; font-size: .88rem; }
.contact__moyens li { margin-bottom: .3rem; color: var(--encre-douce); word-break: break-word; }
.contact__discord {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .85rem;
  background: var(--cyan-pale); color: var(--lien); padding: .1em .4em; border-radius: 4px;
}

/* ------------------------------------------------------------------ agenda */
.agenda { margin: 1.4rem 0 .6rem; }
.agenda__mois {
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: var(--rayon); margin-bottom: .8rem; overflow: hidden;
}
.agenda__mois summary {
  cursor: pointer; list-style: none;
  padding: .95rem 1.3rem; font-family: var(--titre); font-weight: 700;
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
}
.agenda__mois summary::-webkit-details-marker { display: none; }
.agenda__mois summary::after { content: "▾"; color: var(--encre-douce); transition: transform .15s; }
.agenda__mois[open] summary::after { transform: rotate(180deg); }
.agenda__compte {
  background: var(--cyan-pale); color: var(--lien);
  font-size: .78rem; padding: .1rem .55rem; border-radius: 99px; margin-left: auto;
}
.agenda__liste { list-style: none; margin: 0; padding: 0 1.3rem 1rem; }
.agenda__evenement {
  display: flex; gap: 1.1rem; padding: .9rem 0;
  border-top: 1px solid var(--trait);
}
.agenda__date {
  flex: none; width: 52px; text-align: center;
  background: var(--marine); color: #fff; border-radius: 8px; padding: .45rem 0;
  height: fit-content;
}
.agenda__date strong { display: block; font-size: 1.15rem; line-height: 1.1; }
.agenda__date span { font-size: .68rem; text-transform: uppercase; letter-spacing: .05em; color: #c3d3e0; }
.agenda__nom { margin: 0; font-weight: 700; }
.agenda__meta { margin: .1rem 0 0; font-size: .85rem; color: var(--encre-douce); }
.agenda__description { margin: .4rem 0 0; font-size: .9rem; color: var(--encre-douce); max-width: 70ch; }
.agenda__maj { font-size: .8rem; color: var(--encre-douce); }

/* ===================================================================== drive
   Connexion, mot de passe, Mon drive, Mon compte (3.0.0 du bot).
   Formulaires sobres, mêmes couleurs que le reste du site (mode sombre inclus). */

.formulaire {
  display: grid; gap: 1.1rem; max-width: 30rem;
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.5rem; margin: 1.2rem 0 1.6rem;
}
.champ { display: grid; gap: .35rem; }
.champ__libelle { font-family: var(--titre); font-size: .9rem; font-weight: 700; }
.champ__aide { font-size: .82rem; color: var(--encre-douce); }
/* Les cases et boutons radio sont exclus : étirés à 100 %, ils écrasaient le
   texte de leur étiquette (page « Signaler cette question », 12/10). */
.champ input:not([type="radio"]):not([type="checkbox"]) {
  font: inherit; font-size: 1rem; color: var(--encre);
  background: var(--papier); border: 1px solid var(--trait); border-radius: 8px;
  padding: .7rem .8rem; width: 100%;
}
.champ input:not([type="radio"]):not([type="checkbox"]):focus { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); outline-offset: 0; }
.champ input[type="radio"], .champ input[type="checkbox"] { accent-color: var(--cyan); }
.case { display: flex; gap: .6rem; align-items: flex-start; font-size: .9rem; color: var(--encre-douce); }
.case input { margin-top: .3rem; accent-color: var(--cyan); }

.bouton {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  font-family: var(--titre); font-size: .95rem; font-weight: 700;
  background: var(--cyan-fonce); color: #fff; text-decoration: none;
  border: 0; border-radius: 9px; padding: .8rem 1.3rem; cursor: pointer;
}
.bouton:hover { background: var(--cyan); color: #fff; }
.bouton--secondaire { background: var(--blanc); color: var(--lien); border: 1px solid var(--trait); }
.bouton--secondaire:hover { background: var(--cyan-pale); color: var(--lien); }
.bouton--danger { background: var(--blanc); color: var(--grenat-vif); border: 1px solid var(--grenat-bord); }
.bouton--danger:hover { background: var(--grenat-pale); color: var(--grenat-vif); }

.message {
  max-width: 68ch; padding: .8rem 1rem; border-radius: var(--rayon);
  border: 1px solid var(--trait); background: var(--blanc);
}
.message--erreur { border-color: var(--grenat-bord); background: var(--grenat-pale); color: var(--grenat-texte); }
.message--succes { border-color: var(--cyan); background: var(--cyan-pale); }
.message--attention { border-color: var(--ambre); background: var(--ambre-pale); }

.barre-compte {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .8rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: var(--rayon);
  padding: .7rem 1rem; margin-bottom: 1.2rem;
}
.barre-compte__qui { margin: 0; }
.barre-compte__actions, .actions-compte { display: flex; flex-wrap: wrap; gap: .5rem; }
.barre-compte__actions form, .actions-compte form { margin: 0; }
.barre-compte .bouton { padding: .5rem .9rem; font-size: .85rem; }

/* ======================================================================
   Drive — chemises de cours, entraînements, éditeur de questions, documents.
   Une seule idée forte : chaque cours est une chemise cartonnée de SA couleur
   (imposée par son numéro), avec son numéro sur l'onglet. Tout le reste est
   neutre : la couleur du cours ne sert qu'aux aplats et aux bordures, jamais
   à porter du texte sur fond clair.
   ====================================================================== */

:root {
  --juste:        #23733d;
  --juste-fond:   #e4f3e8;
  --juste-trait:  #a9d8b6;
  --faux:         #a80039;
  --faux-fond:    #fdeaf0;
  --faux-trait:   #f0bccd;
  --sans:         #8a5c00;
  --sans-fond:    #fdf3e0;
  --sans-trait:   #efd6a2;
  --jauge-juste:  #3d9d5d;
  --jauge-fausse: #d2416e;
  --jauge-sans:   #f2b233;
  --jauge-fond:   #dde5ec;
  --etoile:       #f2b01e;
  --ombre-drive:  0 1px 2px rgba(16, 36, 58, .06), 0 6px 18px rgba(16, 36, 58, .07);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --juste:        #7fdc9c;
    --juste-fond:   #11291a;
    --juste-trait:  #24573a;
    --faux:         #ff8fae;
    --faux-fond:    #2b111c;
    --faux-trait:   #5a2338;
    --sans:         #f0c469;
    --sans-fond:    #2c2210;
    --sans-trait:   #4f3d17;
    --jauge-fond:   #2a3947;
    --ombre-drive:  0 1px 2px rgba(0, 0, 0, .3), 0 8px 22px rgba(0, 0, 0, .28);
  }
}
:root[data-theme="dark"] {
    --juste:        #7fdc9c;
    --juste-fond:   #11291a;
    --juste-trait:  #24573a;
    --faux:         #ff8fae;
    --faux-fond:    #2b111c;
    --faux-trait:   #5a2338;
    --sans:         #f0c469;
    --sans-fond:    #2c2210;
    --sans-trait:   #4f3d17;
    --jauge-fond:   #2a3947;
    --ombre-drive:  0 1px 2px rgba(0, 0, 0, .3), 0 8px 22px rgba(0, 0, 0, .28);
}

/* ---- couleurs imposées des numéros de cours (1 à 24, puis on recommence) ----
   Nuancier à 24 couleurs (14/10, choix de Matthias) : douze familles, chacune
   en un ton vif (numéro à l'encre) et un ton profond (numéro en blanc) ;
   contraste du numéro ≥ 4,5:1 partout, onglet visible de jour comme de nuit.
   La classe suit le RANG du cours dans l'année (champ « o » du bot) : d'abord
   les cours classiques (Q1 puis Q2, onglet « 1, 2, 3… »), puis les annuels
   (« A1, A2… »), puis les enseignements au choix (« O1, O2… ») — un cours =
   une couleur. Ordre revu le 14/10 (3.3.4) : jamais deux couleurs de la même
   famille visuelle à un ou deux rangs d'écart ; les deux tons d'une famille
   à 8 rangs ou plus ; les voisines de la grille (jusqu'à 4 d'écart) toujours
   bien distinctes ; aubergine assombrie (trop proche de la lavande).
   Mêmes valeurs : DRIVE_COULEURS (includes/drive.php). */
.num-1  { --teinte: #612dc0; --teinte-texte: #ffffff; }  /* aubergine */
.num-2  { --teinte: #b2957c; --teinte-texte: #10243a; }  /* caramel */
.num-3  { --teinte: #970911; --teinte-texte: #ffffff; }  /* carmin */
.num-4  { --teinte: #e24cbe; --teinte-texte: #10243a; }  /* fuchsia */
.num-5  { --teinte: #6c676c; --teinte-texte: #ffffff; }  /* anthracite */
.num-6  { --teinte: #64d1d8; --teinte-texte: #10243a; }  /* turquoise */
.num-7  { --teinte: #eb9a04; --teinte-texte: #10243a; }  /* orange */
.num-8  { --teinte: #3b624a; --teinte-texte: #ffffff; }  /* sapin */
.num-9  { --teinte: #2d4a88; --teinte-texte: #ffffff; }  /* bleu nuit */
.num-10 { --teinte: #684231; --teinte-texte: #ffffff; }  /* chocolat */
.num-11 { --teinte: #9677fb; --teinte-texte: #10243a; }  /* lavande */
.num-12 { --teinte: #90d6af; --teinte-texte: #10243a; }  /* menthe */
.num-13 { --teinte: #b10d49; --teinte-texte: #ffffff; }  /* framboise */
.num-14 { --teinte: #e6cf4a; --teinte-texte: #10243a; }  /* jaune */
.num-15 { --teinte: #a86343; --teinte-texte: #ffffff; }  /* rouille */
.num-16 { --teinte: #257087; --teinte-texte: #ffffff; }  /* pétrole */
.num-17 { --teinte: #64c466; --teinte-texte: #10243a; }  /* vert */
.num-18 { --teinte: #c1d2cd; --teinte-texte: #10243a; }  /* gris clair */
.num-19 { --teinte: #78335d; --teinte-texte: #ffffff; }  /* prune */
.num-20 { --teinte: #158561; --teinte-texte: #ffffff; }  /* émeraude */
.num-21 { --teinte: #f75a2e; --teinte-texte: #10243a; }  /* corail */
.num-22 { --teinte: #e883a9; --teinte-texte: #10243a; }  /* rose */
.num-23 { --teinte: #6d6a00; --teinte-texte: #ffffff; }  /* bronze */
.num-24 { --teinte: #89b1f7; --teinte-texte: #10243a; }  /* bleu ciel */
/* Teintes dérivées : le carton (pâle), le pli (moyen), le bord. */
.num-1, .num-2, .num-3, .num-4, .num-5, .num-6, .num-7, .num-8, .num-9, .num-10, .num-11, .num-12,
.num-13, .num-14, .num-15, .num-16, .num-17, .num-18, .num-19, .num-20, .num-21, .num-22, .num-23, .num-24 {
  --teinte-pale: var(--blanc); --teinte-moyenne: var(--trait); --teinte-trait: var(--trait);
}
@supports (color: color-mix(in srgb, red 10%, white)) {
  .num-1, .num-2, .num-3, .num-4, .num-5, .num-6, .num-7, .num-8, .num-9, .num-10, .num-11, .num-12,
  .num-13, .num-14, .num-15, .num-16, .num-17, .num-18, .num-19, .num-20, .num-21, .num-22, .num-23, .num-24 {
    --teinte-pale: color-mix(in srgb, var(--teinte) 15%, var(--blanc));
    --teinte-moyenne: color-mix(in srgb, var(--teinte) 34%, var(--blanc));
    --teinte-trait: color-mix(in srgb, var(--teinte) 45%, var(--blanc));
  }
  /* Le gris clair (18), pâli à 15 % sur le fond du jour, donnait une chemise
     presque blanche, comme vide : de jour, son carton est teinté plus
     franchement ; la nuit, le mélange ordinaire suffit. */
  .num-18 {
    --teinte-pale: color-mix(in srgb, var(--teinte) 30%, var(--blanc));
    --teinte-moyenne: color-mix(in srgb, var(--teinte) 50%, var(--blanc));
    --teinte-trait: color-mix(in srgb, var(--teinte) 70%, var(--blanc));
  }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .num-18 {
      --teinte-pale: color-mix(in srgb, var(--teinte) 15%, var(--blanc));
      --teinte-moyenne: color-mix(in srgb, var(--teinte) 34%, var(--blanc));
      --teinte-trait: color-mix(in srgb, var(--teinte) 45%, var(--blanc));
    }
  }
  :root[data-theme="dark"] .num-18 {
    --teinte-pale: color-mix(in srgb, var(--teinte) 15%, var(--blanc));
    --teinte-moyenne: color-mix(in srgb, var(--teinte) 34%, var(--blanc));
    --teinte-trait: color-mix(in srgb, var(--teinte) 45%, var(--blanc));
  }
}

.pastille-numero {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 1.55em; height: 1.55em; padding: 0 .35em; border-radius: 6px 6px 2px 2px;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff);
  font-family: var(--titre); font-weight: 700; font-size: .78rem; line-height: 1;
}

/* ---- pictogrammes ---- */
.icone { width: 1.15em; height: 1.15em; flex: none; vertical-align: -.2em; }
.bouton .icone, .bouton-lien .icone { width: 1.1em; height: 1.1em; }

/* ---- boutons discrets ---- */
.bouton-lien {
  display: inline-flex; align-items: center; gap: .35rem;
  background: none; border: 0; padding: .35rem .15rem; cursor: pointer;
  font: inherit; font-size: .9rem; font-weight: 600; color: var(--lien); text-decoration: none;
}
.bouton-lien:hover { color: var(--lien-vif); text-decoration: underline; }
.bouton-lien--danger { color: var(--faux); }
.bouton-lien--danger:hover { color: var(--faux); }
form:has(> .bouton-lien) { margin: 0; display: inline; }

/* ---- barre du haut : où l'on est, qui l'on est ---- */
.barre-drive {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  margin: -.8rem 0 1.8rem; padding-bottom: .85rem; border-bottom: 1px solid var(--trait);
}
.fil { min-width: 0; }
.fil ol {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .45rem;
  font-size: .88rem; color: var(--encre-douce);
}
.fil li { display: inline-flex; align-items: center; gap: .45rem; }
.fil li + li::before { content: "›"; color: var(--encre-douce); opacity: .7; }
.fil a { color: var(--lien); text-decoration: none; display: inline-flex; align-items: center; gap: .35rem; }
.fil a:hover { text-decoration: underline; }
.fil [aria-current] { color: var(--encre); font-weight: 600; display: inline-flex; align-items: center; gap: .35rem; }
.fil__icone { width: 1.05rem; height: 1.05rem; }

.moi { position: relative; flex: none; }
.moi summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: .55rem;
  padding: .25rem .6rem .25rem .25rem; border-radius: 99px; border: 1px solid var(--trait);
  background: var(--blanc); font-size: .88rem; font-weight: 600;
}
.moi summary::-webkit-details-marker { display: none; }
.moi summary::after { content: "▾"; font-size: .75rem; color: var(--encre-douce); }
.moi[open] summary { border-color: var(--cyan); }
.moi__pastille {
  width: 1.9rem; height: 1.9rem; border-radius: 50%; display: grid; place-items: center;
  background: var(--role, var(--cyan-fonce)); color: #fff; font: 700 .72rem var(--titre); letter-spacing: .02em;
}
.moi__menu {
  position: absolute; right: 0; top: calc(100% + .4rem); z-index: 30; min-width: 15rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 12px;
  box-shadow: var(--ombre-drive); padding: .45rem; display: grid;
}
.moi__menu a, .moi__menu button {
  display: block; width: 100%; text-align: left; padding: .55rem .6rem; border-radius: 8px;
  font: inherit; font-size: .9rem; color: var(--encre); text-decoration: none;
  background: none; border: 0; cursor: pointer;
}
.moi__menu a:hover, .moi__menu button:hover { background: var(--papier); }
.moi__menu form { margin: .25rem 0 0; padding-top: .25rem; border-top: 1px solid var(--trait); }

/* Statuts (site 2.39, 24/10 — demande de Matthias) : une couleur par statut, la même
   partout (initiales de l'en-tête, menu « Mon compte », carte de la page Mon compte).
   Couleurs de la palette des cours : bleu du site, émeraude, aubergine, carmin. */
.role--etudiant { --role: #0077a8; }
.role--aidant { --role: #158561; }
.role--delegue { --role: #612dc0; }
.role--admin { --role: #970911; }
.statuts { display: flex; flex-wrap: wrap; gap: .3rem; }
.statut {
  display: inline-flex; align-items: center; padding: 2px 9px; border-radius: 99px;
  font-size: .76rem; font-weight: 700; line-height: 1.4; white-space: nowrap;
  background: var(--papier); border: 1px solid var(--trait); color: var(--role, var(--encre));
}
@supports (color: color-mix(in srgb, red 10%, white)) {
  .statut {
    background: color-mix(in srgb, var(--role) 11%, var(--blanc));
    border-color: color-mix(in srgb, var(--role) 30%, var(--blanc));
    color: color-mix(in srgb, var(--role) 80%, var(--encre));
  }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .statut {
      background: color-mix(in srgb, var(--role) 22%, var(--blanc));
      border-color: color-mix(in srgb, var(--role) 50%, var(--blanc));
      color: color-mix(in srgb, var(--role) 45%, var(--encre));
    }
  }
  :root[data-theme="dark"] .statut {
    background: color-mix(in srgb, var(--role) 22%, var(--blanc));
    border-color: color-mix(in srgb, var(--role) 50%, var(--blanc));
    color: color-mix(in srgb, var(--role) 45%, var(--encre));
  }
}

/* ---- titres des pages du drive ---- */
.drive-titre {
  display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between;
  gap: 1rem 2rem; margin-bottom: 1.6rem;
}
.drive-titre .titre-page, .titre-page--drive { margin-bottom: .3rem; }
.titre-page--drive { font-size: clamp(1.6rem, 3.4vw, 2.2rem); }
.drive-titre__texte { color: var(--encre-douce); margin: 0 0 1.4rem; max-width: 62ch; }
.drive-titre .drive-titre__texte { margin: 0; }
.drive-titre .actions-ligne { margin: 0; }

.bascule {
  display: inline-flex; padding: .25rem; gap: .2rem; border-radius: 11px;
  background: var(--blanc); border: 1px solid var(--trait);
}
.bascule a {
  padding: .45rem .85rem; border-radius: 8px; font-size: .88rem; font-weight: 600;
  color: var(--encre-douce); text-decoration: none;
}
.bascule a:hover { color: var(--encre); background: var(--papier); }
.bascule a[aria-current] { background: var(--encre); color: var(--blanc); }
.bascule--petite a { padding: .3rem .7rem; font-size: .82rem; }

/* ---- Mon drive : quadrimestres, blocs, chemises ---- */
.filtre-cours {
  display: flex; align-items: center; gap: .5rem; padding: 0 .8rem; min-width: 15rem;
  border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc); color: var(--encre-douce);
}
.filtre-cours input { border: 0; background: none; font: inherit; font-size: .92rem; padding: .55rem 0; width: 100%; color: var(--encre); }
.filtre-cours input:focus { outline: none; }
.filtre-cours:focus-within { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); }
.filtre-cours__aucun { color: var(--encre-douce); }

/* Quadrimestres et blocs : repliables (details/summary ; l'état est mémorisé par drive.js). */
.quadri { margin-top: 2.2rem; }
.quadri__titre, .bloc__titre {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: .8rem;
  border-radius: 10px; margin: 0 -.5rem; padding: .35rem .5rem;
}
.quadri__titre::-webkit-details-marker, .bloc__titre::-webkit-details-marker { display: none; }
.quadri__titre:hover, .bloc__titre:hover { background: var(--blanc); }
.quadri__titre h2 { margin: 0; font-size: clamp(1.25rem, 2.4vw, 1.5rem); }
.quadri__titre::before { content: ""; order: 3; flex: 1; height: 1px; background: var(--trait); }
.bloc { margin-top: 1rem; }
.bloc__titre h3 { margin: 0; font-size: .95rem; }
.repli__nombre { font-size: .82rem; color: var(--encre-douce); white-space: nowrap; }
.repli__fleche { order: 4; display: inline-flex; color: var(--encre-douce); transition: transform .15s ease; }
.repli__fleche .icone { width: 1.1rem; height: 1.1rem; }
details[open] > summary .repli__fleche { transform: rotate(90deg); }
.quadri > .chemises, .bloc > .chemises { margin-top: 1rem; }
.bloc > .chemises { margin-bottom: 1.4rem; }

/* ---- champ auteur (modération) et # ---- */
.champ--auteur { display: grid; gap: .45rem; border: 0; padding: 0; margin: 0; min-width: 0; }
.champ--auteur legend { padding: 0; }
.champ--auteur input[type="text"] { display: block; }
.champ--auteur input[type="text"][hidden] { display: none; }
.tags-choix { border: 0; padding: 0; margin: 0; min-width: 0; }
.tags-choix legend { padding: 0; margin-bottom: .4rem; }
.tags-choix__liste { display: flex; flex-wrap: wrap; gap: .4rem; }
.tag-choix { cursor: pointer; }
.tag-choix input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.tag-choix span {
  display: inline-block; padding: .4rem .75rem; border-radius: 99px; border: 1.5px solid var(--trait);
  font-size: .88rem; font-weight: 700; background: var(--blanc);
}
.tag-choix:hover span { border-color: var(--cyan); }
.tag-choix input:checked + span { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.tag-choix input:focus-visible + span { outline: 3px solid var(--ambre); outline-offset: 2px; }
.tag {
  display: inline-block; padding: .05rem .5rem; border-radius: 99px; font-size: .8rem; font-weight: 700;
  background: var(--cyan-pale); color: var(--lien); text-decoration: none; white-space: nowrap;
}
a.tag:hover { background: var(--cyan); color: #fff; }
.filtres--tags { margin: -.2rem 0 1rem; }
.filtres--tags a {
  font-size: .85rem; font-weight: 600; text-decoration: none;
  padding: .42rem .8rem; border-radius: 99px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce);
}
.filtres--tags a:hover { color: var(--encre); border-color: var(--cyan); }
.filtres--tags a[aria-current] { background: var(--encre); border-color: var(--encre); color: var(--blanc); }

/* ---- fichier choisi : son nom complet, lisible ---- */
.depot__nom {
  display: block; margin-top: .4rem; font-size: .88rem; font-weight: 600; color: var(--encre);
  overflow-wrap: anywhere; line-height: 1.4;
}
.depot__nom small { font-weight: 400; color: var(--encre-douce); }

.chemises {
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 228px), 1fr));
  gap: 1.9rem 1.1rem;
}
.chemises__element { display: flex; }
.chemise {
  flex: 1; position: relative; display: flex; flex-direction: column;
  color: var(--encre); text-decoration: none;
}
.chemise:hover, .chemise:focus-visible { color: var(--encre); }
/* L'onglet : UNE seule forme, pente comprise (clip-path), hauteur en pixels entiers, qui
   descend de 2 px sous le liseré du dossier (même couleur). Avant (jusqu'au 18/10), la
   pente était un ::after collé à côté : selon l'arrondi des pixels, un cran apparaissait
   près du numéro et un fil sombre sous la pente (retour de Matthias). */
.chemise__onglet {
  align-self: flex-start; position: relative; z-index: 2;
  display: flex; align-items: center; height: 30px; min-width: 4.3rem; margin-bottom: -2px;
  padding: 0 calc(.95rem + 17px) 2px .95rem;
  background: var(--teinte); color: var(--teinte-texte); border-radius: 10px 0 0 0;
  clip-path: polygon(0 0, calc(100% - 15px) 0, 100% 100%, 0 100%);
}
.chemise__numero { font: 700 1rem/1 var(--titre); }
/* Trois feuilles dans la chemise : au survol, elles sortent en éventail, l'une après
   l'autre (18/10 au soir — avant : une seule feuille). */
.chemise__feuilles { position: absolute; z-index: 1; top: 36px; right: 12px; width: 50%; height: 3rem; pointer-events: none; }
.chemise__feuille {
  position: absolute; top: 0; bottom: 0; left: 8%; right: 8%;
  background: var(--blanc) repeating-linear-gradient(180deg, transparent 0 7px, var(--trait) 7px 8px) 0 4px / 100% 100% no-repeat;
  border: 1px solid var(--trait); border-radius: 3px; box-shadow: 0 1px 3px rgba(16, 36, 58, .14);
  transform-origin: 50% 100%;
  transition: transform .3s cubic-bezier(.3, .7, .35, 1.2);
}
.chemise__feuille:nth-child(1) { left: -6%; right: 24%; background-color: var(--papier); }
.chemise__feuille:nth-child(3) { left: 26%; right: -6%; background-color: var(--teinte-pale, var(--blanc)); }
.chemise:hover .chemise__feuille:nth-child(1), .chemise:focus-visible .chemise__feuille:nth-child(1) { transform: translate(-4px, -14px) rotate(-7deg); }
.chemise:hover .chemise__feuille:nth-child(2), .chemise:focus-visible .chemise__feuille:nth-child(2) { transform: translateY(-21px) rotate(-1deg); transition-delay: .05s; }
.chemise:hover .chemise__feuille:nth-child(3), .chemise:focus-visible .chemise__feuille:nth-child(3) { transform: translate(4px, -15px) rotate(6deg); transition-delay: .1s; }
/* De nuit, des feuilles plus claires que le fond (sinon on ne les voit pas sortir). */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .chemise__feuille { background-color: #2c3b4b; border-color: #3b4d60; }
  :root:not([data-theme="light"]) .chemise__feuille:nth-child(1) { background-color: #243343; }
  :root:not([data-theme="light"]) .chemise__feuille:nth-child(3) { background-color: color-mix(in srgb, var(--teinte) 30%, #2c3b4b); }
}
:root[data-theme="dark"] .chemise__feuille { background-color: #2c3b4b; border-color: #3b4d60; }
:root[data-theme="dark"] .chemise__feuille:nth-child(1) { background-color: #243343; }
:root[data-theme="dark"] .chemise__feuille:nth-child(3) { background-color: color-mix(in srgb, var(--teinte) 30%, #2c3b4b); }
.chemise__corps {
  position: relative; z-index: 2; flex: 1;
  display: flex; flex-direction: column; gap: .2rem; min-height: 8.4rem;   /* 2.47 : flex — le contenu se cale en bas */
  padding: 1rem 1.15rem .95rem;
  background: var(--teinte-pale); border: 1px solid var(--teinte-trait); border-top: 4px solid var(--teinte);
  border-radius: 0 12px 12px 12px;
  transition: background-color .18s ease, box-shadow .18s ease;
}
.chemise:hover .chemise__corps, .chemise:focus-visible .chemise__corps { background: var(--teinte-moyenne); box-shadow: var(--ombre-drive); }
.chemise:focus-visible { outline: none; }
.chemise:focus-visible .chemise__corps { outline: 3px solid var(--ambre); outline-offset: 2px; }
.chemise__code { font: 700 1.06rem/1.25 var(--titre); overflow-wrap: anywhere; }
.chemise__nom {
  font-size: .86rem; line-height: 1.4; color: var(--encre-douce);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.chemise__contenu { margin-top: auto; padding-top: .7rem; font-size: .78rem; font-weight: 600; color: var(--encre-douce); }

/* ---- un cours ouvert ---- */
.entete-cours { margin: 0 0 1.6rem; }
.entete-cours__onglet {      /* une seule forme, pente comprise (voir .chemise__onglet) */
  position: relative; display: inline-flex; align-items: center; gap: .65rem;
  height: 38px; padding: 0 calc(1.1rem + 21px) 2px 1.1rem; margin-bottom: -2px;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff);
  border-radius: 12px 0 0 0;
  clip-path: polygon(0 0, calc(100% - 16px) 0, 100% 100%, 0 100%);
}
.entete-cours__numero { font: 700 1.25rem/1 var(--titre); }
.entete-cours__code { font: 700 .92rem/1 var(--titre); }
.entete-cours__corps {
  background: var(--teinte-pale, var(--blanc)); border: 1px solid var(--teinte-trait, var(--trait));
  border-top: 5px solid var(--teinte, var(--cyan)); border-radius: 0 16px 16px 16px;
  padding: 1.3rem 1.6rem 1.4rem;
}
.entete-cours__titre { margin: 0; font-size: clamp(1.45rem, 3.2vw, 2.05rem); }
.entete-cours__meta, .entete-cours__sous-titre { margin: .35rem 0 0; color: var(--encre-douce); }

.cours-ouvert .entete-cours { margin-bottom: 0; }
.cours-ouvert .entete-cours__corps { border-radius: 0 16px 0 0; border-bottom: 0; padding-bottom: .6rem; }
.sous-dossiers {
  list-style: none; margin: 0 0 2rem; padding: 1rem 1.6rem 1.7rem;
  background: var(--teinte-pale, var(--blanc)); border: 1px solid var(--teinte-trait, var(--trait)); border-top: 0;
  border-radius: 0 0 16px 16px;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 196px), 1fr)); gap: .9rem;
}
.sous-dossiers li { display: flex; }
.sous-dossier {
  flex: 1; display: grid; align-content: start; gap: .3rem;
  background: var(--blanc); border: 1px solid var(--teinte-trait, var(--trait)); border-radius: 12px;
  padding: 1rem 1.05rem 1.05rem; color: var(--encre); text-decoration: none;
  transition: transform .16s ease, box-shadow .16s ease;
}
.sous-dossier:hover { color: var(--encre); transform: translateY(-3px); box-shadow: var(--ombre-drive); }
.sous-dossier__icone {
  width: 2.3rem; height: 2.3rem; border-radius: 10px; display: grid; place-items: center; margin-bottom: .35rem;
  background: var(--teinte-pale, var(--cyan-pale)); color: var(--encre);
  border: 1px solid var(--teinte-trait, var(--trait));
}
.sous-dossier__icone .icone { width: 1.3rem; height: 1.3rem; }
.sous-dossier__titre { font: 700 .98rem/1.3 var(--titre); }
.sous-dossier__detail { font-size: .82rem; line-height: 1.45; color: var(--encre-douce); }
.sous-dossier__compte { margin-top: .45rem; font-size: .82rem; font-weight: 700; }
.sous-dossier__vide { font-weight: 400; color: var(--encre-douce); }
.sous-dossier__jauge { margin-top: .3rem; }
.sous-dossier__progres { font-size: .76rem; color: var(--encre-douce); }

/* ---- jauges et piste (SVG) ---- */
.jauge, .piste { display: block; height: 8px; border-radius: 99px; overflow: hidden; background: var(--jauge-fond); }
.jauge svg, .piste svg { display: block; width: 100%; height: 100%; }
.jauge--epaisse { height: 14px; }
.jauge--fine { height: 6px; }
.jauge__plein { fill: var(--teinte, var(--cyan)); }
.jauge__juste, .piste__juste { fill: var(--jauge-juste); }
.jauge__fausse, .piste__fausse { fill: var(--jauge-fausse); }
.jauge__sans, .piste__sans { fill: var(--jauge-sans); }
.piste { height: 12px; background: none; border-radius: 4px; }
.piste__a-venir { fill: var(--jauge-fond); }
.piste__actuelle { fill: var(--encre); }

/* ---- où j'en suis ---- */
.ou-j-en-suis {
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px;
  padding: 1.3rem 1.5rem 1.2rem; margin: 0 0 1.2rem;
}
.ou-j-en-suis__titre { margin: 0 0 .8rem; font-size: 2.1rem; line-height: 1.1; }
.ou-j-en-suis__titre span { font-family: var(--texte); font-size: 1rem; font-weight: 400; color: var(--encre-douce); }
.legende { list-style: none; margin: .8rem 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: .4rem 1.3rem; font-size: .88rem; }
.legende li { display: inline-flex; align-items: center; gap: .4rem; }
.legende li::before { content: ""; width: .7rem; height: .7rem; border-radius: 3px; background: var(--jauge-fond); }
.legende__juste::before { background: var(--jauge-juste) !important; }
.legende__fausse::before { background: var(--jauge-fausse) !important; }
.legende__sans::before { background: var(--jauge-sans) !important; }
.ou-j-en-suis__aide { margin: .7rem 0 0; font-size: .82rem; color: var(--encre-douce); }

.lancer { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 270px), 1fr)); gap: 1rem; margin: 0 0 1rem; }
.lancer__carte {
  display: grid; align-content: start; gap: .7rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; padding: 1.2rem 1.3rem 1.3rem;
}
.lancer__carte h2 { margin: 0; font-size: 1.08rem; }
.lancer__carte p { margin: 0; font-size: .9rem; color: var(--encre-douce); }
.lancer__carte .actions-ligne { margin: .2rem 0 0; }
.lancer__carte > .bouton, .lancer__carte form .bouton { justify-self: start; }
.lancer__carte--reprise { border-left: 5px solid var(--cyan); }
.lancer__aide { font-size: .84rem !important; }
.tailles { border: 0; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: .4rem; }
.tailles legend { font-size: .88rem; font-weight: 700; margin-bottom: .45rem; padding: 0; }
.tailles + .types-entrainement, .types-entrainement + .tailles { margin-top: .9rem; }
.tailles label { cursor: pointer; }
.tailles input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.tailles span {
  display: inline-block; min-width: 2.8rem; text-align: center; padding: .42rem .75rem; border-radius: 9px;
  border: 1.5px solid var(--trait); font-weight: 700; font-size: .9rem; background: var(--blanc);
}
.tailles label:hover span { border-color: var(--cyan); }
.tailles input:checked + span { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.tailles input:focus-visible + span { outline: 3px solid var(--ambre); outline-offset: 2px; }

.section-drive { margin-top: 2.2rem; }
.section-drive > h2 { display: flex; align-items: center; gap: .55rem; font-size: 1.12rem; margin: 0 0 .8rem; }
.liens-impression { margin: 0; padding-left: 1.2rem; display: grid; gap: .3rem; }
.impression-choix {
  display: grid; gap: 1.1rem; max-width: 48rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; padding: 1.2rem 1.3rem 1.3rem;
}
.impression-choix__groupe { border: 0; padding: 0; margin: 0; min-width: 0; display: flex; flex-wrap: wrap; gap: .4rem; align-items: center; }
.impression-choix__groupe legend { float: left; width: 100%; font: 700 .88rem var(--titre); margin-bottom: .45rem; padding: 0; }
.impression-choix__groupe label { cursor: pointer; }
.impression-choix__groupe input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.impression-choix__groupe span {
  display: inline-block; padding: .42rem .8rem; border-radius: 9px; border: 1.5px solid var(--trait);
  font-size: .9rem; font-weight: 600; background: var(--blanc);
}
.impression-choix__groupe label:hover span { border-color: var(--cyan); }
.impression-choix__groupe input:checked + span { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.impression-choix__groupe input:focus-visible + span { outline: 3px solid var(--ambre); outline-offset: 2px; }
.impression-choix__pied { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; padding-top: .4rem; border-top: 1px solid var(--trait); }
.impression-choix__pied .champ__aide { margin: 0; }
.impression__guide {
  display: grid; gap: .6rem; margin: 0 0 1.4rem; padding: 1rem 1.2rem; border-radius: 14px;
  background: var(--cyan-pale); border: 1px solid var(--cyan);
}
.impression__guide-texte { font-size: .95rem; line-height: 1.6; }
.impression__guide .actions-ligne { margin: 0; }

/* ---- un entraînement : avancement ---- */
.avancement { max-width: 48rem; margin: 0 auto 1rem; }
.avancement__ligne { display: flex; flex-wrap: wrap; align-items: baseline; gap: .4rem 1.2rem; margin-bottom: .6rem; }
.avancement__rang { margin: 0; color: var(--encre-douce); }
.avancement__rang strong { font: 700 2rem/1 var(--titre); color: var(--encre); }
.avancement__score { margin: 0; display: flex; gap: 1rem; font-size: .9rem; font-weight: 600; }
.avancement__juste { color: var(--juste); display: inline-flex; align-items: center; gap: .25rem; }
.avancement__fausse { color: var(--faux); display: inline-flex; align-items: center; gap: .25rem; }
.avancement form { margin-left: auto; }
.avancement__arreter { font-size: .85rem; color: var(--encre-douce); }

/* ---- la carte d'une question ---- */
.carte-question {
  max-width: 48rem; background: var(--blanc);
  border: 1px solid var(--trait); border-top: 5px solid var(--teinte, var(--cyan));
  border-radius: 6px 6px 18px 18px; padding: 1.5rem 1.7rem 1.4rem; margin: 0 auto 1.5rem;
  box-shadow: var(--ombre-drive);
}
.carte-question__consigne {
  display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .7rem;
  margin: 0 0 .7rem; font-size: .86rem; color: var(--encre-douce);
}
.carte-question__enonce {
  font: 600 1.2rem/1.5 var(--texte); margin: 0 0 1.3rem; max-width: none; overflow-wrap: anywhere;
}
.reponses { border: 0; margin: 0 0 1.4rem; padding: 0; display: grid; gap: .6rem; }
.reponse {
  position: relative; display: flex; align-items: flex-start; gap: .9rem; cursor: pointer;
  padding: .8rem 1rem; border: 1.5px solid var(--trait); border-radius: 12px; background: var(--blanc);
  transition: border-color .12s ease, background-color .12s ease;
}
.reponse input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; }
.reponse:hover { border-color: var(--teinte-moyenne, var(--cyan)); }
.reponse:has(input:checked) { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--cyan-pale)); }
.reponse:has(input:focus-visible) { outline: 3px solid var(--ambre); outline-offset: 2px; }
.reponse__lettre {
  flex: none; width: 1.9rem; height: 1.9rem; display: grid; place-items: center;
  border-radius: 7px; border: 1.5px solid var(--trait); background: var(--papier);
  font: 700 .82rem/1 var(--titre); color: var(--encre-douce);
}
.reponse:has(input[type="radio"]) .reponse__lettre { border-radius: 50%; }
.reponse:has(input:checked) .reponse__lettre { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.reponse__texte { padding-top: .2rem; overflow-wrap: anywhere; }
.carte-question__pied { display: flex; flex-wrap: wrap; align-items: center; gap: .8rem 1.2rem; }
.raccourcis { margin: 0; font-size: .8rem; color: var(--encre-douce); }
kbd {
  font: 600 .75rem/1 ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  padding: .15rem .35rem; border-radius: 4px; border: 1px solid var(--trait); border-bottom-width: 2px; background: var(--blanc);
}
.carte-question__source { font-size: .84rem; color: var(--encre-douce); margin: 0 0 1rem; }

.etiquette {
  display: inline-flex; align-items: center; font-size: .72rem; font-weight: 700; line-height: 1.4;
  padding: .1rem .55rem; border-radius: 99px; background: var(--papier); color: var(--encre-douce); border: 1px solid var(--trait);
}
.etiquette--sans { background: var(--sans-fond); color: var(--sans); border-color: var(--sans-trait); }

/* ---- images des questions ---- */
.question__image {
  display: block; max-width: 100%; max-height: 24rem; height: auto; margin: -.4rem 0 1.2rem;
  border-radius: 10px; border: 1px solid var(--trait); background: #fff;
}
.reponse__image { display: block; max-width: 100%; max-height: 14rem; height: auto; margin-top: .3rem; border-radius: 8px; border: 1px solid var(--trait); background: #fff; }
.fiche-question__image { display: block; max-width: 22rem; max-height: 12rem; height: auto; margin: 0 0 .6rem; border-radius: 8px; border: 1px solid var(--trait); background: #fff; }
.fiche-question__vignette { display: block; max-width: 14rem; max-height: 8rem; height: auto; margin-top: .25rem; border-radius: 6px; border: 1px solid var(--trait); background: #fff; }
.impression__image { display: block; max-width: 70%; max-height: 9cm; height: auto; margin: .2rem 0 .5rem; }
.impression__vignette { display: block; max-width: 45%; max-height: 5cm; height: auto; margin: .15rem 0 .3rem; }

/* L'éditeur : ajouter / remplacer / retirer une image. */
.image-champ { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem; margin-top: .55rem; }
.image-champ--reponse { margin-top: .25rem; }
.image-champ__apercu { display: inline-flex; }
.image-champ__vignette { display: block; max-width: 16rem; max-height: 9rem; height: auto; border-radius: 8px; border: 1px solid var(--trait); background: #fff; }
.image-champ--reponse .image-champ__vignette { max-width: 10rem; max-height: 6rem; }
.image-champ__ajout {
  display: inline-flex; align-items: center; gap: .4rem; cursor: pointer;
  padding: .4rem .75rem; border-radius: 9px; border: 1.5px dashed var(--trait);
  font-size: .86rem; font-weight: 700; color: var(--lien);
}
.image-champ__ajout:hover { border-color: var(--cyan); background: var(--cyan-pale); }
.image-champ__ajout input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.image-champ__ajout:focus-within { outline: 3px solid var(--ambre); outline-offset: 2px; }
.image-champ__ajout--petit { padding: .25rem .55rem; font-size: .78rem; }
.image-champ__retirer { display: inline-flex; align-items: center; gap: .3rem; font-size: .82rem; color: var(--encre-douce); cursor: pointer; }
.image-champ__retirer input { accent-color: var(--faux); }
.image-champ .depot__nom { margin: 0; font-size: .8rem; }
.ligne-reponse__contenu { display: grid; min-width: 0; }
.editeur__enonce { margin-bottom: 0; }

/* ---- la correction ---- */
.verdict {
  display: flex; flex-wrap: wrap; align-items: center; gap: .55rem; margin: 0 0 1.1rem;
  padding: .7rem 1rem; border-radius: 12px; font: 700 1.05rem var(--titre);
}
.verdict .icone { width: 1.3rem; height: 1.3rem; }
.verdict small { font-family: var(--texte); font-weight: 400; font-size: .8rem; }
.verdict--j { background: var(--juste-fond); color: var(--juste); border: 1px solid var(--juste-trait); }
.verdict--f { background: var(--faux-fond); color: var(--faux); border: 1px solid var(--faux-trait); }
.verdict--s { background: var(--sans-fond); color: var(--sans); border: 1px solid var(--sans-trait); }
.corrige { list-style: none; margin: 0 0 1rem; padding: 0; display: grid; gap: .55rem; }
.corrige li {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: .85rem;
  padding: .75rem 1rem; border: 1.5px solid var(--trait); border-radius: 12px;
}
.corrige__texte { display: grid; gap: .3rem; overflow-wrap: anywhere; }
.corrige__marques { display: flex; flex-wrap: wrap; gap: .4rem; }
.corrige__marque { display: inline-flex; align-items: center; gap: .25rem; font-size: .74rem; font-weight: 700; color: var(--encre-douce); }
.corrige__marque--bonne { color: var(--juste); }
.corrige li.est-choisie .reponse__lettre { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.corrige__bonne { border-color: var(--juste-trait) !important; background: var(--juste-fond); }
.corrige__bonne .reponse__lettre { background: var(--jauge-juste) !important; border-color: var(--jauge-juste) !important; color: #fff !important; }
.corrige__fausse { border-color: var(--faux-trait) !important; background: var(--faux-fond); }
.corrige__fausse .reponse__lettre { background: var(--jauge-fausse) !important; border-color: var(--jauge-fausse) !important; color: #fff !important; }
.corrige__part { display: flex; align-items: center; gap: .5rem; width: 7.5rem; font-size: .8rem; font-weight: 600; color: var(--encre-douce); }
.corrige__part .jauge { flex: 1; }
.corrige__part > span:last-child { width: 2.6rem; text-align: right; }
.collectif { font-size: .88rem; color: var(--encre-douce); margin: 0 0 1rem; }
.encart {
  font-size: .9rem; padding: .75rem 1rem; border-radius: 12px; margin: 0 0 1rem;
  background: var(--papier); border: 1px solid var(--trait); max-width: 48rem;
}
.encart--sans { background: var(--sans-fond); border-color: var(--sans-trait); }
.encart--cle { display: flex; gap: .6rem; align-items: flex-start; margin: 1.2rem 0; }
/* « Question piège » et élément qui résiste (19/10, Module de révision) */
.encart--piege, .encart--resiste { display: flex; gap: .55rem; align-items: flex-start; }
.encart--piege { background: var(--ambre-pale); border-color: var(--ambre); }
.encart--piege .icone { flex: none; margin-top: .1rem; color: var(--ambre); }
.encart--resiste .icone { flex: none; margin-top: .1rem; color: var(--lien); }
.encart--cle .icone { flex: none; margin-top: .15rem; color: var(--lien); }
.explication {
  margin: 0 0 1rem; padding: .85rem 1.1rem; border-radius: 12px;
  background: var(--papier); border-left: 4px solid var(--teinte, var(--cyan));
}
.explication p { margin: 0; }
.explication__titre { font: 700 .82rem var(--titre); margin-bottom: .25rem !important; }

/* ---- le bilan ---- */
.bilan {
  max-width: 48rem; margin: 0 auto; background: var(--blanc); border: 1px solid var(--trait);
  border-top: 5px solid var(--teinte, var(--cyan)); border-radius: 6px 6px 18px 18px;
  padding: 1.6rem 1.7rem; box-shadow: var(--ombre-drive);
}
.bilan__surtitre { margin: 0 0 .3rem; font-weight: 700; color: var(--encre-douce); }
.bilan__score { margin: 0 0 .3rem; font-size: clamp(2.6rem, 8vw, 3.8rem); line-height: 1; }
.bilan__score span { font-size: .45em; color: var(--encre-douce); }
.bilan__texte { color: var(--encre-douce); }
.bilan .piste { margin: 0 0 1.2rem; }
.bilan__liste { list-style: none; margin: 0 0 1.2rem; padding: 0; display: grid; gap: .1rem; }
.bilan__liste li { display: flex; gap: .6rem; align-items: flex-start; padding: .45rem 0; border-bottom: 1px solid var(--trait); font-size: .92rem; }
.bilan__liste li:last-child { border-bottom: 0; }
.bilan__liste .icone { margin-top: .15rem; }
.bilan__j .icone { color: var(--juste); }
.bilan__f .icone { color: var(--faux); }
.bilan__s .icone { color: var(--sans); }

/* ---- états vides ---- */
.vide {
  text-align: center; padding: 2.6rem 1.5rem; border: 2px dashed var(--trait); border-radius: 16px;
  background: var(--blanc); max-width: 48rem;
}
.vide__icone { width: 2.6rem; height: 2.6rem; color: var(--encre-douce); margin-bottom: .6rem; }
.vide h2 { margin: 0 0 .4rem; font-size: 1.15rem; }
.vide p { margin-left: auto; margin-right: auto; color: var(--encre-douce); }
.vide p:last-child { margin-bottom: 0; }

/* ---- l'éditeur de question (façon formulaire) ---- */
.page-etroite { max-width: 48rem; margin: 0 auto; }
.page-etroite--large { max-width: none; }
.editeur {
  display: grid; gap: 1.5rem; margin: 0 0 1.4rem;
  background: var(--blanc); border: 1px solid var(--trait); border-top: 6px solid var(--teinte, var(--cyan));
  border-radius: 6px 6px 18px 18px; padding: 1.5rem 1.7rem 1.4rem; box-shadow: var(--ombre-drive);
}
.editeur__bloc { border: 0; margin: 0; padding: 0; min-width: 0; }
.editeur__libelle { display: block; font: 700 .9rem var(--titre); margin: 0 0 .5rem; padding: 0; }
.editeur__libelle span { font-family: var(--texte); font-weight: 400; color: var(--encre-douce); }
.editeur__enonce {
  display: block; width: 100%; resize: vertical; min-height: 4.2rem;
  font: 600 1.12rem/1.45 var(--texte); color: var(--encre);
  background: var(--papier); border: 0; border-bottom: 2px solid var(--trait); border-radius: 8px 8px 0 0;
  padding: .7rem .8rem;
}
.editeur__enonce:focus { outline: none; border-bottom-color: var(--teinte, var(--cyan)); }
.types { display: flex; flex-wrap: wrap; gap: .4rem; }
.types legend { margin-bottom: .5rem; }
.types__choix { cursor: pointer; }
.types__choix input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.types__choix span {
  display: inline-block; padding: .45rem .85rem; border-radius: 9px; border: 1.5px solid var(--trait);
  font-size: .9rem; font-weight: 600; background: var(--blanc);
}
.types__choix:hover span { border-color: var(--teinte-moyenne, var(--cyan)); }
.types__choix input:checked + span { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.types__choix input:focus-visible + span { outline: 3px solid var(--ambre); outline-offset: 2px; }

.lignes-reponse { list-style: none; margin: 0; padding: 0; display: grid; gap: .35rem; }
.ligne-reponse {
  display: grid; grid-template-columns: auto auto minmax(0, 1fr) auto; align-items: center; gap: .65rem;
  padding: .25rem .35rem; border-radius: 10px;
}
.ligne-reponse:has(.ligne-reponse__bonne input:checked) { background: var(--juste-fond); }
.ligne-reponse__bonne { position: relative; cursor: pointer; display: block; }
.ligne-reponse__bonne input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.ligne-reponse__coche {
  width: 2rem; height: 2rem; border-radius: 50%; display: grid; place-items: center;
  border: 2px solid var(--trait); color: transparent; background: var(--blanc);
  transition: background-color .12s ease, border-color .12s ease, color .12s ease;
}
.ligne-reponse__coche .icone { width: 1.1rem; height: 1.1rem; }
.ligne-reponse__bonne:hover .ligne-reponse__coche { border-color: var(--jauge-juste); color: var(--juste-trait); }
.ligne-reponse__bonne input:checked + .ligne-reponse__coche { background: var(--jauge-juste); border-color: var(--jauge-juste); color: #fff; }
.ligne-reponse__bonne input:focus-visible + .ligne-reponse__coche { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ligne-reponse__lettre { font: 700 .85rem var(--titre); color: var(--encre-douce); width: 1.1rem; text-align: center; }
.ligne-reponse__texte {
  display: block; width: 100%; resize: none; overflow: hidden; min-height: 2.4rem;
  font: inherit; font-size: 1rem; line-height: 1.45; color: var(--encre);
  background: transparent; border: 0; border-bottom: 1.5px solid var(--trait); padding: .45rem .3rem;
}
.ligne-reponse__texte:focus { outline: none; border-bottom-color: var(--teinte, var(--cyan)); }
.ligne-reponse__fixe { padding: .45rem .3rem; font-weight: 600; }
.ligne-reponse__retirer {
  width: 2rem; height: 2rem; border-radius: 50%; display: grid; place-items: center;
  border: 0; background: none; color: var(--encre-douce); cursor: pointer;
}
.ligne-reponse__retirer:hover { background: var(--faux-fond); color: var(--faux); }
.bouton-ajout {
  display: inline-flex; align-items: center; gap: .4rem; margin: .6rem 0 0 3.1rem;
  padding: .5rem .9rem; border-radius: 10px; border: 1.5px dashed var(--trait); background: none;
  font: inherit; font-size: .9rem; font-weight: 700; color: var(--lien); cursor: pointer;
}
.bouton-ajout:hover { border-color: var(--cyan); background: var(--cyan-pale); }
.editeur__vf { display: none; }
.editeur:has(input[name="type"][value="vf"]:checked) .editeur__vf { display: block; }
.editeur:has(input[name="type"][value="vf"]:checked) .editeur__qcm { display: none; }
.editeur__aide {
  display: flex; gap: .7rem; align-items: flex-start; margin: 0; max-width: none;
  font-size: .87rem; color: var(--encre-douce); background: var(--sans-fond);
  border: 1px solid var(--sans-trait); border-radius: 12px; padding: .75rem .95rem;
}
.editeur__aide .icone { color: var(--sans); width: 1.3rem; height: 1.3rem; margin-top: .05rem; }
.editeur__plus summary { cursor: pointer; font: 700 .9rem var(--titre); color: var(--lien); }
.editeur__plus summary span { font-family: var(--texte); font-weight: 400; color: var(--encre-douce); }
.editeur__plus[open] summary { margin-bottom: .9rem; }
.editeur__plus .champ + .champ { margin-top: .9rem; }
.editeur__pied { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; padding-top: 1rem; border-top: 1px solid var(--trait); }
.zone-danger { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; margin: 1rem 0 0; }
.zone-danger form { margin: 0; }
.zone-danger .champ__aide { margin: 0; }

/* ---- gérer une banque ---- */
.recherche { display: flex; flex-wrap: wrap; gap: .7rem; align-items: center; margin: 0 0 1rem; }
.recherche__champ {
  flex: 1 1 18rem; display: flex; align-items: center; gap: .5rem; padding: 0 .85rem;
  border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc); color: var(--encre-douce);
}
.recherche__champ input { flex: 1; border: 0; background: none; font: inherit; font-size: .95rem; padding: .62rem 0; color: var(--encre); min-width: 0; }
.recherche__champ input:focus { outline: none; }
.recherche__champ:focus-within { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); }
.filtres { display: inline-flex; flex-wrap: wrap; gap: .3rem; }
.filtres button {
  font: inherit; font-size: .85rem; font-weight: 600; cursor: pointer;
  padding: .45rem .8rem; border-radius: 99px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce);
}
.filtres button:hover { color: var(--encre); border-color: var(--cyan); }
.filtres button[aria-pressed="true"] { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.resultats-recherche { font-size: .88rem; color: var(--encre-douce); }

.fiches-question { list-style: none; margin: 0; padding: 0; display: grid; gap: .8rem; }
.fiche-question {
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; padding: 1rem 1.2rem .8rem;
  scroll-margin-top: 100px;
}
.fiche-question:target { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); }
.fiche-question__tete { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .5rem; margin-bottom: .55rem; }
.fiche-question__rang { font: 700 .8rem var(--titre); color: var(--encre-douce); min-width: 1.6rem; }
.fiche-question__stat { margin-left: auto; font-size: .78rem; color: var(--encre-douce); }
.fiche-question__enonce { font-weight: 600; margin: 0 0 .55rem; max-width: none; overflow-wrap: anywhere; }
.fiche-question__reponses { list-style: none; margin: 0; padding: 0; display: grid; gap: .15rem; }
.fiche-question__reponses li { display: flex; align-items: center; gap: .6rem; font-size: .92rem; padding: .18rem 0; overflow-wrap: anywhere; }
.fiche-question__reponses .reponse__lettre { width: 1.5rem; height: 1.5rem; font-size: .72rem; }
.fiche-question__reponses .est-bonne { color: var(--juste); font-weight: 600; }
.fiche-question__reponses .est-bonne .reponse__lettre { background: var(--jauge-juste); border-color: var(--jauge-juste); color: #fff; }
.fiche-question__coche { color: var(--juste); }
.fiche-question__plus { font-size: .85rem; color: var(--encre-douce); margin: .5rem 0 0; }
.fiche-question__pied {
  display: flex; flex-wrap: wrap; align-items: center; gap: .2rem 1rem;
  margin-top: .75rem; padding-top: .55rem; border-top: 1px solid var(--trait); font-size: .82rem;
}
.fiche-question__auteur { color: var(--encre-douce); margin-right: auto; }
.fiche-question__pied .bouton-lien { font-size: .84rem; }

/* ---- import ---- */
.import { display: grid; grid-template-columns: minmax(0, 1fr) 19rem; gap: 1.5rem; align-items: start; }
.import__saisie { display: grid; gap: .8rem; }
.import__regles {
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; padding: 1.1rem 1.2rem;
  font-size: .88rem; position: sticky; top: calc(var(--entete-h, 68px) + 4.2rem);
}
.import__regles h2 { margin: 0 0 .6rem; font-size: 1rem; }
.import__regles ol { margin: 0; padding-left: 1.2rem; display: grid; gap: .45rem; }
.champ__code, .champ textarea.champ__code { font: .92rem/1.55 ui-monospace, "SF Mono", Menlo, Consolas, monospace; }

/* ---- listes à deux colonnes (quizz, documents) ---- */
.colonnes-drive { display: grid; grid-template-columns: minmax(0, 1fr) 20rem; gap: 1.8rem; align-items: start; }
.colonnes-drive__cote { position: sticky; top: calc(var(--entete-h, 68px) + 4.2rem); }
.liste-entete { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .8rem; margin: 0 0 1rem; }
.liste-entete__titre { margin: 0; font-size: 1.15rem; }
.panneau-ajout {
  display: grid; gap: .9rem; background: var(--blanc); border: 1px solid var(--trait);
  border-radius: 16px; padding: 1.2rem 1.3rem 1.3rem;
}
.panneau-ajout h2 { display: flex; align-items: center; gap: .45rem; margin: 0; font-size: 1.05rem; }
.panneau-ajout .bouton { justify-self: start; }
.panneau-ajout .champ__aide { margin: 0; }
.champ__facultatif { font-family: var(--texte); font-weight: 400; color: var(--encre-douce); }
.champ select {
  font: inherit; font-size: 1rem; color: var(--encre);
  background: var(--papier); border: 1px solid var(--trait); border-radius: 8px; padding: .65rem .7rem; width: 100%;
}

.cartes-quiz { list-style: none; margin: 0; padding: 0; display: grid; gap: .9rem; }
.carte-quiz {
  display: grid; gap: .5rem; background: var(--blanc); border: 1px solid var(--trait);
  border-radius: 14px; padding: 1.1rem 1.25rem 1.05rem; scroll-margin-top: 100px;
}
.carte-quiz__haut { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .3rem 1rem; }
.carte-quiz__titre { margin: 0; font-size: 1.06rem; }
.carte-quiz__titre a { color: var(--encre); text-decoration: none; }
.carte-quiz__titre a:hover { color: var(--lien); text-decoration: underline; }
.carte-quiz__description { margin: 0; font-size: .92rem; }
.carte-quiz__meta { margin: 0; font-size: .82rem; color: var(--encre-douce); }
.carte-quiz__progres { display: flex; align-items: center; gap: .7rem; font-size: .8rem; color: var(--encre-douce); }
.carte-quiz__progres .jauge { flex: 1; max-width: 16rem; }
.carte-quiz__actions { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin-top: .2rem; }
.carte-quiz__actions form { margin: 0; }
.carte-quiz__actions .bouton { padding: .55rem 1rem; font-size: .88rem; }

/* ---- notes en étoiles ---- */
.note { display: inline-flex; align-items: center; gap: .4rem; font-size: .82rem; color: var(--encre-douce); white-space: nowrap; }
.note--vide { font-style: italic; }
.note__etoiles { letter-spacing: .05em; font-size: 1rem; line-height: 1; }
.note__etoile { color: var(--jauge-fond); }
.note__etoile.est-pleine { color: var(--etoile); }
.noter { display: inline-flex; align-items: center; gap: .5rem; margin: 0; }
.noter__libelle { font-size: .8rem; color: var(--encre-douce); }
.noter__etoiles { display: inline-flex; flex-direction: row-reverse; }
.noter__etoile {
  border: 0; background: none; cursor: pointer; padding: .1rem .08rem;
  font-size: 1.25rem; line-height: 1; color: var(--jauge-fond);
}
.noter__etoile.est-pleine { color: var(--etoile); }
.noter__etoiles:hover .noter__etoile { color: var(--jauge-fond); }
.noter__etoiles .noter__etoile:hover, .noter__etoiles .noter__etoile:hover ~ .noter__etoile { color: var(--etoile); }
.noter__etoile:focus-visible { outline: 2px solid var(--ambre); border-radius: 4px; }

/* ---- documents ---- */
.documents { list-style: none; margin: 0; padding: 0; display: grid; gap: .8rem; }
.document {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .3rem 1rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; padding: 1.05rem 1.2rem;
  scroll-margin-top: 100px;
}
.document:target { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); }
.document__vignette {
  grid-row: span 3; width: 3.1rem; height: 3.9rem; border-radius: 4px 12px 4px 4px; position: relative;
  background: var(--teinte-pale, var(--papier)); border: 1px solid var(--teinte-trait, var(--trait));
  display: grid; place-items: end center; padding-bottom: .45rem;
  font: 700 .62rem var(--titre); color: var(--encre-douce); letter-spacing: .04em;
}
.document__vignette::before {
  content: ""; position: absolute; top: -1px; right: -1px; width: .95rem; height: .95rem;
  background: var(--teinte-trait, var(--trait)); border-radius: 0 12px 0 4px;
}
.document__haut { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .2rem 1rem; }
.document__titre { margin: 0; font-size: 1.04rem; overflow-wrap: anywhere; }
.document > :not(.document__vignette) { grid-column: 2; }
.document__meta { margin: 0; font-size: .82rem; color: var(--encre-douce); }
.document__description { margin: .2rem 0 0; font-size: .92rem; max-width: 70ch; }
.document__actions {
  grid-column: 2; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin-top: .45rem;
}
.document__actions form { margin: 0; }
.document__actions .bouton { padding: .5rem .95rem; font-size: .86rem; }
.document__origine { grid-column: 2; margin: .2rem 0 0; font-size: .8rem; color: var(--encre-douce); }
.document__titre a { color: var(--encre); text-decoration: none; }
.document__titre a:hover { color: var(--lien); text-decoration: underline; }
.document__gestion { grid-column: 2; margin-top: .4rem; border-top: 1px solid var(--trait); padding-top: .5rem; }
.document__gestion summary { cursor: pointer; display: inline-flex; align-items: center; gap: .35rem; font-size: .86rem; font-weight: 600; color: var(--lien); }
.document__gestion[open] summary { margin-bottom: .8rem; }
.document__formulaire { display: grid; gap: .8rem; max-width: 34rem; margin-bottom: .6rem; }
.document__formulaire .actions-ligne { margin: 0; }
.documents__note { display: flex; gap: .45rem; align-items: flex-start; margin-top: 1rem; max-width: 60ch; }
.documents__note .icone { margin-top: .1rem; }
.depot__fichier input[type="file"] {
  width: 100%; font: inherit; font-size: .9rem; color: var(--encre);
  padding: .8rem; border: 1.5px dashed var(--trait); border-radius: 10px; background: var(--papier);
}
.depot__fichier input[type="file"]:hover { border-color: var(--cyan); }
.depot__fichier input[type="file"]::file-selector-button {
  font: inherit; font-weight: 700; font-size: .86rem; cursor: pointer; margin-right: .7rem;
  padding: .45rem .8rem; border: 0; border-radius: 8px; background: var(--encre); color: var(--blanc);
}
.consentement { display: flex; gap: .6rem; align-items: flex-start; font-size: .84rem; line-height: 1.45; }
.consentement input { margin-top: .2rem; accent-color: var(--cyan); flex: none; }

/* ---- administration : retrouver un téléchargement ---- */
.trace { background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; padding: 1.1rem 1.3rem; max-width: 48rem; }
.trace dl { display: grid; grid-template-columns: max-content 1fr; gap: .4rem 1.2rem; margin: 0; }
.trace dt { font-weight: 700; font-size: .9rem; }
.trace dd { margin: 0; }
.chiffres-admin { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: .8rem; margin: 0 0 1.5rem; }
.chiffres-admin div { background: var(--blanc); border: 1px solid var(--trait); border-radius: 12px; padding: .8rem 1rem; }
.chiffres-admin strong { display: block; font: 700 1.35rem var(--titre); }
.chiffres-admin span { font-size: .82rem; color: var(--encre-douce); }

/* ---- génériques du drive ---- */
.formulaire--large { max-width: 52rem; }
.champ textarea {
  font: inherit; font-size: 1rem; line-height: 1.5; color: var(--encre);
  background: var(--papier); border: 1px solid var(--trait); border-radius: 8px;
  padding: .7rem .8rem; width: 100%; resize: vertical;
}
.champ textarea:focus, .champ select:focus { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); outline-offset: 0; }
.actions-ligne { display: flex; flex-wrap: wrap; gap: .6rem; align-items: center; margin: 1rem 0; }
.actions-ligne form { margin: 0; }
.bouton--valider { background: #23733d; }
.bouton--valider:hover { background: #2e8a4b; }
.message .icone { margin-right: .3rem; }

/* ---- impression d'une banque ---- */
.impression { max-width: 52rem; }
.impression__entete { border-bottom: 2px solid var(--teinte, var(--cyan)); padding-bottom: .9rem; margin-bottom: 1.2rem; }
.impression__cours { margin: 0 0 .3rem; font-size: .9rem; color: var(--encre-douce); display: flex; align-items: center; gap: .4rem; }
.impression__titre { margin: 0 0 .2rem; font-size: 1.8rem; }
.impression__quoi { margin: 0 0 .5rem; }
.impression__marque { margin: 0; font-size: .8rem; color: var(--encre-douce); }
.impression__questions { display: grid; gap: 1.1rem; padding-left: 1.6rem; }
.impression__question { break-inside: avoid; }
.impression__enonce { font-weight: 600; margin: 0 0 .35rem; max-width: none; }
.impression__options { list-style: none; margin: 0; padding: 0; display: grid; gap: .15rem; }
.impression__options li { display: flex; gap: .45rem; }
.impression__bonne { font-weight: 700; }
.impression__explication { font-size: .88rem; color: var(--encre-douce); margin: .35rem 0 0; }

/* ---- petits écrans ---- */
@media (max-width: 900px) {
  .colonnes-drive, .import { grid-template-columns: minmax(0, 1fr); }
  .colonnes-drive__cote, .import__regles { position: static; }
}
@media (max-width: 640px) {
  .barre-drive { margin-top: -.4rem; }
  .moi__nom { display: none; }
  .moi summary { padding-right: .45rem; }
  .chemises { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.6rem .7rem; }
  .chemise__corps { min-height: 7.6rem; padding: .85rem .85rem .8rem; }
  .chemise__code { font-size: .98rem; }
  .chemise__nom { font-size: .8rem; }
  .entete-cours__corps { padding: 1.05rem 1.1rem 1.15rem; }
  .sous-dossiers { padding: .8rem 1rem 1.2rem; grid-template-columns: minmax(0, 1fr); }
  .sous-dossier { grid-template-columns: auto minmax(0, 1fr); column-gap: .85rem; }
  .sous-dossier__icone { grid-row: span 4; margin: 0; }
  .carte-question, .editeur, .bilan { padding: 1.15rem 1.05rem 1.1rem; }
  .carte-question__enonce { font-size: 1.08rem; }
  .corrige li { grid-template-columns: auto minmax(0, 1fr); }
  .corrige__part { grid-column: 2; width: auto; }
  .ligne-reponse { gap: .45rem; padding: .2rem; }
  .bouton-ajout { margin-left: 2.6rem; }
  .document { grid-template-columns: minmax(0, 1fr); }
  .document__vignette { display: none; }
  .document > :not(.document__vignette) { grid-column: 1; }
  .liste-entete__outils { width: 100%; }
  .bascule-vue span { display: none; }
  .avancement__rang strong { font-size: 1.7rem; }
}

@media print {
  .entete, .pied, .lateral, .no-print, .saut-contenu, .barre-drive, .bascule-theme { display: none !important; }
  body { background: #fff; background-image: none; color: #000; font-size: 11pt; }
  .grille { display: block; padding: 0; }
  .titre-page { font-size: 16pt; }
  a { color: #000; text-decoration: none; }
  .impression__entete { border-bottom-color: #000; }
}

/* Correctif mobile (10/10) : la marque ne se rétrécissait pas (flex: none) et sa
   signature débordait — toute page défilait de côté sur téléphone. */
@media (max-width: 1080px) {
  .marque { flex: 0 1 auto; min-width: 0; }
}
.bouton { line-height: 1.2; }
.barre-compte__actions { align-items: center; }

/* ======================================================================
   11/10 (suite) — commentaires, notifications, signalements, anciens cours
   ====================================================================== */

/* ---- la cloche, dans la barre du drive ---- */
.barre-drive { gap: .75rem; }
.barre-drive .moi { margin-left: 0; }
.cloche {
  position: relative; flex: none; display: inline-grid; place-items: center; margin-left: auto;
  width: 2.45rem; height: 2.45rem; border-radius: 50%; border: 1px solid var(--trait);
  background: var(--blanc); color: var(--encre-douce); text-decoration: none;
}
.cloche:hover { color: var(--lien); border-color: var(--cyan); }
.cloche__icone { width: 1.25rem; height: 1.25rem; }
.cloche.a-du-nouveau { color: var(--encre); }
.cloche__nombre {
  position: absolute; top: -.35rem; right: -.35rem; min-width: 1.25rem; height: 1.25rem; padding: 0 .3rem;
  border-radius: 99px; background: var(--jauge-fausse); color: #fff; font: 700 .68rem var(--titre);
  display: grid; place-items: center; border: 2px solid var(--fond, #fff);
}

/* ---- notifications ---- */
.notifications { list-style: none; margin: 0 0 1rem; padding: 0; display: grid; gap: .55rem; }
.notification {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .9rem; align-items: start;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 12px; padding: .85rem 1rem;
}
.notification.est-nouvelle { border-left: 4px solid var(--jauge-fausse); }
.notification__icone {
  width: 2.1rem; height: 2.1rem; border-radius: 50%; display: grid; place-items: center;
  background: var(--papier); color: var(--encre-douce);
}
.notification__icone .icone { width: 1.15rem; height: 1.15rem; }
.notification--moderation .notification__icone, .notification--signalement .notification__icone { background: var(--sans-fond); color: var(--sans); }
.notification--anciens .notification__icone { background: var(--faux-fond); color: var(--faux); }
.notification__corps p { margin: 0; }
.notification__texte { font-size: .95rem; line-height: 1.45; }
.notification__texte a { color: var(--encre); text-decoration: none; }
.notification__texte a:hover { color: var(--lien); text-decoration: underline; }
.notification__nombre { margin-left: .35rem; font-size: .78rem; font-weight: 700; color: var(--encre-douce); }
.notification__meta { margin-top: .2rem !important; font-size: .78rem; color: var(--encre-douce); }
.titre-page--drive .icone { width: 1.2em; height: 1.2em; vertical-align: -.2em; margin-right: .35rem; }

/* ---- commentaires ---- */
.document--seul { margin-bottom: 1.4rem; }
.document--seul .document__titre { font-size: 1.25rem; margin: 0; }
.document__commentaires.a-des-commentaires { color: var(--encre); }
.fil-commentaires { max-width: 48rem; }
.fil-commentaires__titre { display: flex; align-items: center; gap: .5rem; font-size: 1.15rem; margin: 0 0 .3rem; }
.fil-commentaires__aide { margin: 0 0 1rem; font-size: .88rem; color: var(--encre-douce); }
.commentaires { list-style: none; margin: 0 0 1.4rem; padding: 0; display: grid; gap: .65rem; }
.commentaire {
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; padding: .8rem 1rem .6rem;
  scroll-margin-top: 100px;
}
.commentaire:target { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); }
.commentaire--mien { background: var(--cyan-pale); }
.commentaire--auteur { border-left: 4px solid var(--teinte, var(--cyan)); }
.commentaire__tete { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .6rem; font-size: .84rem; }
.commentaire__nom { font-weight: 700; color: var(--encre); }
.commentaire__date { color: var(--encre-douce); }
.commentaire__texte { margin: .35rem 0 .2rem; line-height: 1.55; overflow-wrap: anywhere; }
.commentaire__supprimer { font-size: .8rem; padding: .15rem 0; }
.commentaire-form { display: grid; gap: .7rem; }
.commentaire-form textarea { width: 100%; }

/* ---- signalements ---- */
.message--info { border-color: var(--sans-trait); background: var(--sans-fond); color: var(--sans); }
.bouton--attention { background: var(--sans-fond); color: var(--sans); border: 1px solid var(--sans-trait); }
.bouton--attention:hover { background: var(--sans-trait); color: var(--encre); }
.bouton--petit { padding: .4rem .8rem; font-size: .84rem; }
.bouton-lien--discret { color: var(--encre-douce); font-weight: 600; }
.bouton-lien--discret:hover { color: var(--sans); }
.icone--petite { width: .95rem; height: .95rem; }
.etiquette--signalee { background: var(--sans-fond); color: var(--sans); border-color: var(--sans-trait); gap: .3rem; }
.filtres .a-du-nouveau { border-color: var(--sans-trait); background: var(--sans-fond); color: var(--sans); }
.signalements {
  margin: .6rem 0 .4rem; padding: .7rem .9rem; border-radius: 10px;
  background: var(--sans-fond); border: 1px solid var(--sans-trait); font-size: .88rem;
}
.signalements__titre { display: flex; align-items: center; gap: .4rem; margin: 0 0 .35rem !important; font-weight: 700; color: var(--sans); }
.signalements ul { margin: 0 0 .5rem; padding-left: 1.1rem; }
.signalements li + li { margin-top: .25rem; }
.signalements small { color: var(--encre-douce); }
.signalements form { margin: 0; }
.question-citee {
  margin: 0 0 1.2rem; padding: .9rem 1.1rem; border-radius: 12px;
  background: var(--blanc); border: 1px solid var(--trait); border-left: 4px solid var(--teinte, var(--cyan));
}
.question-citee p { margin: 0 0 .5rem; font-weight: 600; }
.question-citee ul { list-style: none; margin: 0; padding: 0; display: grid; gap: .2rem; font-size: .92rem; }
.question-citee li.est-bonne { color: var(--juste); font-weight: 600; }
.question-citee footer { margin-top: .5rem; font-size: .8rem; color: var(--encre-douce); }
.motifs { display: grid; gap: .3rem; border: 0; padding: 0; margin: 0; min-width: 0; }
.motifs legend { padding: 0; margin-bottom: .2rem; }
.motif { display: flex; align-items: center; gap: .6rem; padding: .5rem .7rem; border-radius: 10px; border: 1px solid var(--trait); background: var(--blanc); cursor: pointer; }
.motif:has(input:checked) { border-color: var(--sans); background: var(--sans-fond); }
.motif input { margin: 0; flex: none; width: 1.05rem; height: 1.05rem; }
.motif span { text-align: left; }
.carte-question__auteur { margin: .6rem 0 0; font-size: .8rem; color: var(--encre-douce); }

/* ---- titulaire et modération d'un cours ---- */
.entete-cours__titulaire { margin: .3rem 0 0; font-size: .86rem; color: var(--encre-douce); max-width: none; }
.entete-cours__pi { opacity: .85; }
.moderation-cours { display: flex; flex-wrap: wrap; gap: .6rem; margin: 1.1rem 0 0; }
.moderation-cours__lien {
  display: inline-flex; align-items: center; gap: .45rem; padding: .55rem .9rem; border-radius: 99px;
  background: var(--blanc); border: 1px solid var(--trait); color: var(--encre); font-size: .88rem; font-weight: 600; text-decoration: none;
}
.moderation-cours__lien:hover { border-color: var(--cyan); color: var(--lien); }
.moderation-cours__lien .icone { color: var(--sans); }

/* ---- anciens cours ---- */
.encart--anciens { display: flex; flex-wrap: wrap; gap: .4rem .8rem; align-items: center; }
.encart--anciens .icone { color: var(--encre-douce); }
.anciens-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }
.anciens-liste__element {
  display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: .6rem 1rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 12px; padding: .8rem 1rem; font-size: .92rem;
}
.anciens-liste__element form { margin: 0; }
.documents--anciens .document { opacity: .96; }

/* ---- administration ---- */
.titulaires-attente { list-style: none; margin: .8rem 0 1rem; padding: 0; display: grid; gap: .6rem; }
.titulaires-attente__element {
  display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: .6rem 1rem;
  background: var(--sans-fond); border: 1px solid var(--sans-trait); border-radius: 12px; padding: .85rem 1rem; font-size: .92rem;
}
.titulaires-attente__element form { margin: 0; }
.bloc-replie { margin: .6rem 0 0; font-size: .9rem; }
.bloc-replie summary { cursor: pointer; color: var(--lien); font-weight: 600; }
.liste-simple { margin: .5rem 0 0; padding-left: 1.2rem; columns: 2; column-gap: 2rem; font-size: .88rem; }
.liste-simple li { break-inside: avoid; margin-bottom: .2rem; }
.liste-simple--equipes { columns: 1; }
.equipe-annees { list-style: none; margin: .15rem 0 .45rem; padding: 0 0 0 .2rem; color: var(--encre-douce); }
.equipe-annees small { color: var(--encre-douce); }
.archives { list-style: none; margin: 0; padding: 0; display: grid; gap: .8rem; }
.archives__entree { background: var(--blanc); border: 1px solid var(--trait); border-radius: 12px; padding: .9rem 1.1rem; font-size: .9rem; }
.archives__tete { margin-bottom: .5rem; }
.archives__documents { margin: 0 0 .5rem; padding-left: 1.1rem; }
.archives__documents a { display: inline-flex; align-items: center; gap: .3rem; font-weight: 600; }
.archives__reste { margin: 0; font-size: .82rem; color: var(--encre-douce); }

@media (max-width: 640px) {
  .liste-simple { columns: 1; }
  .cloche { width: 2.2rem; height: 2.2rem; }
  .moi__nom { display: none; }
}

/* ---- documents : vignettes, formats, tuiles / liste (11/10 soir) ---- */
.liste-entete__outils { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .7rem; }
.bascule-vue button {
  display: inline-flex; align-items: center; gap: .35rem; padding: .3rem .6rem; border: 0; border-radius: 8px;
  background: transparent; color: var(--encre-douce); font: inherit; font-size: .82rem; font-weight: 600; cursor: pointer;
}
.bascule-vue button:hover { color: var(--encre); background: var(--papier); }
.bascule-vue button[aria-pressed="true"] { background: var(--encre); color: var(--blanc); }
.bascule-vue button .icone { width: 1rem; height: 1rem; }
.bascule-vue button:focus-visible { outline: 2px solid var(--cyan); outline-offset: 1px; }

/* La vignette = la première page du document, dans SON format (A4 debout, slide
   couchée…), jamais étirée à la hauteur de la ligne (19/10) : elle se cale en haut
   et l'image garde ses proportions ; une page couchée (paysage) est plus large. */
.document__vignette--image {
  display: block; width: 5.4rem; height: auto; align-self: start; justify-self: start; padding: 0; border-radius: 6px; overflow: hidden;
  background: #fff; border: 1px solid var(--trait); box-shadow: 0 1px 3px rgb(16 36 58 / .08);
}
.document__vignette--image.document__vignette--paysage { width: 7.4rem; }
.document__vignette--image::before { display: none; }
.document__vignette--image img { display: block; width: 100%; height: auto; }
.document__vignette--office { background: var(--teinte-pale, var(--papier)); }
.document__vignette--texte::after, .document__vignette--image::after { content: none; }
.document--attente { border-style: dashed; }
.document__attente {
  grid-column: 2; display: flex; gap: .4rem; align-items: flex-start; margin: .2rem 0 0;
  font-size: .82rem; color: var(--encre-douce);
}
.document__attente .icone { flex: none; margin-top: .1rem; }

/* vue liste : une ligne par document (règles « .document > … » : plus précises que le :not() du mode tuiles) */
html[data-vue-documents="liste"] .documents { gap: 0; border: 1px solid var(--trait); border-radius: 14px; background: var(--blanc); overflow: hidden; }
html[data-vue-documents="liste"] .document {
  /* Le titre et la ligne d'infos gardent au moins la moitié de la largeur : les actions
     (ouvrir, télécharger, merci, note, commenter) passent sur deux lignes plutôt que
     d'écraser le texte en colonne (retour de Matthias, 19/10). */
  grid-template-columns: auto minmax(0, 1fr) fit-content(46%); grid-template-areas: "vignette haut actions" "vignette meta actions";
  gap: .1rem .9rem; align-items: center; padding: .6rem .9rem; border: 0; border-bottom: 1px solid var(--trait); border-radius: 0;
}
html[data-vue-documents="liste"] .document:last-child { border-bottom: 0; }
html[data-vue-documents="liste"] .document:target { outline: none; background: var(--cyan-pale); }
html[data-vue-documents="liste"] .document > .document__vignette { grid-area: vignette; width: 2.2rem; height: 2.8rem; font-size: .5rem; padding-bottom: .25rem; border-radius: 3px 8px 3px 3px; }
html[data-vue-documents="liste"] .document > .document__vignette::before { width: .6rem; height: .6rem; border-radius: 0 8px 0 3px; }
html[data-vue-documents="liste"] .document > .document__vignette--image { width: 2.2rem; height: auto; align-self: start; }
html[data-vue-documents="liste"] .document > .document__vignette--image.document__vignette--paysage { width: 3.6rem; }
html[data-vue-documents="liste"] .document > .document__haut { grid-area: haut; gap: .2rem .6rem; }
html[data-vue-documents="liste"] .document > .document__haut .document__titre { font-size: .95rem; }
html[data-vue-documents="liste"] .document > .document__meta { grid-area: meta; font-size: .76rem; }
html[data-vue-documents="liste"] .document > .document__description, html[data-vue-documents="liste"] .document > .document__origine, html[data-vue-documents="liste"] .document > .document__attente { display: none; }
html[data-vue-documents="liste"] .document > .document__actions { grid-area: actions; margin: 0; gap: .3rem .4rem; flex-wrap: wrap; justify-content: flex-end; }
html[data-vue-documents="liste"] .document > .document__actions .bouton { padding: .4rem .6rem; font-size: 0; gap: 0; }
html[data-vue-documents="liste"] .document > .document__actions .bouton .icone { width: 1rem; height: 1rem; }
html[data-vue-documents="liste"] .document > .document__actions .bouton-lien { font-size: .78rem; }
html[data-vue-documents="liste"] .document > .document__actions .noter { transform: scale(.85); transform-origin: left center; }
html[data-vue-documents="liste"] .document > .document__gestion { grid-column: 1 / -1; grid-row: 3; margin-top: .2rem; padding-top: .3rem; }
html[data-vue-documents="liste"] .document > .document__gestion summary { font-size: .78rem; }
@media (max-width: 640px) {
  html[data-vue-documents="liste"] .document { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "haut actions" "meta actions"; }
  html[data-vue-documents="liste"] .document > .document__actions .bouton-lien, html[data-vue-documents="liste"] .document > .document__actions .noter { display: none; }
}

/* ---- cartes recto / verso (11/10 soir) ---- */
.section-cartes__nombre { font: 400 .9rem var(--texte); color: var(--encre-douce); margin-left: .3rem; }
.section-cartes__progres { display: flex; align-items: center; gap: .8rem; margin: .4rem 0 .9rem; font-size: .84rem; color: var(--encre-douce); }
.section-cartes__progres .jauge { flex: 1; max-width: 22rem; }
.ou-j-en-suis--cartes { margin-bottom: 1.4rem; }
.cartes-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; counter-reset: carte; }
.carte-ligne {
  display: grid; grid-template-columns: 1.4rem minmax(0, 1fr) minmax(0, 1fr); gap: .3rem .9rem; align-items: start;
  background: var(--blanc); border: 1px solid var(--trait); border-left: 4px solid var(--teinte, var(--cyan)); border-radius: 12px; padding: .8rem 1rem;
  scroll-margin-top: 100px;
}
.carte-ligne:target { outline: 3px solid var(--cyan-pale); }
.carte-ligne__etat { display: inline-flex; margin-top: .15rem; color: var(--encre-douce); }
.carte-ligne__etat .icone { width: 1rem; height: 1rem; }
.carte-ligne--sue .carte-ligne__etat { color: var(--jauge-juste); }
.carte-ligne--ratee .carte-ligne__etat { color: var(--jauge-fausse); }
.carte-ligne__recto { font-weight: 600; }
.carte-ligne__verso { color: var(--encre); border-left: 1px solid var(--trait); padding-left: .9rem; }
.carte-ligne__face .carte__texte { margin: 0; font-size: .95rem; overflow-wrap: anywhere; }
.carte-ligne__face .carte__image { display: block; max-width: 14rem; max-height: 9rem; border-radius: 6px; margin-bottom: .3rem; }
.carte-ligne__gestion { grid-column: 2 / -1; border-top: 1px solid var(--trait); padding-top: .4rem; margin-top: .2rem; }
.carte-ligne__gestion summary { cursor: pointer; display: inline-flex; align-items: center; gap: .35rem; font-size: .82rem; font-weight: 600; color: var(--lien); }
.carte-ligne__gestion[open] summary { margin-bottom: .6rem; }
.carte-editeur { display: grid; gap: .8rem; }
.carte-editeur__faces { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: .8rem; }
.carte-editeur__face textarea { width: 100%; }
.carte-editeur .image-champ { margin-top: .35rem; }
.panneau-ajout--details { display: block; }
.panneau-ajout--details summary { cursor: pointer; list-style: none; }
.panneau-ajout--details summary::-webkit-details-marker { display: none; }
.panneau-ajout--details summary h2::after { content: "▾"; margin-left: auto; font-size: .9rem; color: var(--encre-douce); }
.panneau-ajout--details[open] summary h2::after { content: "▴"; }
.panneau-ajout--details[open] summary { margin-bottom: .9rem; }
.panneau-ajout--details form { display: grid; gap: .8rem; }

.carte-apprendre { max-width: 44rem; margin: 0 auto 1.5rem; }
.carte-apprendre__carte {
  display: block; min-height: 16rem; background: var(--blanc); color: inherit; text-decoration: none;
  border: 1px solid var(--trait); border-top: 5px solid var(--teinte, var(--cyan)); border-radius: 6px 6px 18px 18px;
  padding: 1.4rem 1.6rem 1.2rem; box-shadow: var(--ombre-drive); cursor: pointer; position: relative;
  transition: transform .15s ease;
}
.carte-apprendre__carte:hover { transform: translateY(-2px); }
.carte-apprendre__carte:focus-visible { outline: 3px solid var(--cyan); outline-offset: 3px; }
.carte-apprendre__face { display: flex; flex-direction: column; min-height: 13rem; }
.carte-apprendre__face[hidden], .carte-apprendre__reponses[hidden] { display: none; }
.carte-apprendre__etiquette { font: 700 .72rem var(--titre); letter-spacing: .08em; text-transform: uppercase; color: var(--encre-douce); margin-bottom: 1rem; }
.carte-apprendre__verso .carte-apprendre__etiquette { color: var(--lien); }
.carte-apprendre .carte__face-contenu { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: .8rem; }
.carte-apprendre .carte__texte { margin: 0; font: 600 1.45rem/1.4 var(--texte); overflow-wrap: anywhere; }
.carte-apprendre .carte__texte--long { font-size: 1.08rem; font-weight: 500; text-align: left; }
.carte-apprendre .carte__image { max-width: 100%; max-height: 18rem; border-radius: 8px; }
.carte-apprendre__indice { display: inline-flex; align-items: center; gap: .35rem; align-self: center; margin-top: 1rem; font-size: .84rem; font-weight: 600; color: var(--lien); }
.carte-apprendre__reponses { display: flex; flex-wrap: wrap; justify-content: center; gap: .7rem; margin-top: 1rem; }
.carte-apprendre__reponses kbd { margin-left: .3rem; padding: .05rem .35rem; border-radius: 4px; font: 600 .7rem var(--texte); background: rgb(255 255 255 / .22); color: inherit; }
.carte-apprendre__reponses .bouton--secondaire kbd { background: var(--papier); color: var(--encre-douce); }
.carte-apprendre__aide { text-align: center; margin: .8rem 0 0; font-size: .8rem; color: var(--encre-douce); }
.bilan--cartes .bilan__texte { max-width: 44ch; margin-left: auto; margin-right: auto; }
.impression__cartes { width: 100%; border-collapse: collapse; margin-top: 1rem; font-size: 10.5pt; }
.impression__cartes th { text-align: left; font-size: .8rem; text-transform: uppercase; letter-spacing: .06em; color: var(--encre-douce); padding: .3rem .5rem; border-bottom: 2px solid var(--trait); }
.impression__cartes td { vertical-align: top; width: 50%; padding: .5rem .5rem; border-bottom: 1px solid var(--trait); break-inside: avoid; }
.impression__cartes .carte__texte { margin: 0; }
.impression__cartes .carte__image { max-width: 9rem; max-height: 7rem; display: block; margin-bottom: .2rem; }
@media (max-width: 640px) {
  .carte-ligne { grid-template-columns: 1.2rem minmax(0, 1fr); }
  .carte-ligne__verso { grid-column: 2; border-left: 0; padding-left: 0; border-top: 1px dashed var(--trait); padding-top: .35rem; }
  .carte-apprendre__carte { padding: 1.1rem 1.1rem 1rem; min-height: 13rem; }
  .carte-apprendre .carte__texte { font-size: 1.2rem; }
}

/* ======================================================================
   Révision espacée (cartes, 12/10) : notes façon Anki, échéances, rappels
   ====================================================================== */
.carte-apprendre__reponses--notes .bouton {
  display: grid; justify-items: center; gap: .15rem; min-width: 7.2rem; padding: .55rem .9rem;
}
.note-delai { font-size: .72rem; font-weight: 400; opacity: .9; }
.note-encore { background: var(--jauge-fausse); }
.note-encore:hover { background: #b93059; }
.note-difficile { background: #96690d; }
.note-difficile:hover { background: #ac7a14; }
.note-bien { background: #23733d; }
.note-bien:hover { background: #2e8a4b; }
.note-facile { background: var(--cyan-fonce); }
.note-facile:hover { background: var(--cyan); }
.legende__reviser::before { background: var(--cyan) !important; }
.revision__repos { flex: none; font-size: .85rem; color: var(--encre-douce); }
.revisions-total { margin: .2rem 0 1rem; font-size: .95rem; color: var(--encre-douce); }
.revisions-total strong { color: var(--encre); }

/* ======================================================================
   Accueil d'un quizz (12/10) : deux piliers — questions et cartes
   ====================================================================== */
.quiz-piliers {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 330px), 1fr));
  gap: 1rem; margin: 0 0 1.2rem;
}
.pilier {
  display: grid; align-content: start; gap: .85rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px;
  border-top: 5px solid var(--teinte, var(--cyan)); padding: 1.2rem 1.3rem 1.3rem;
}
.pilier__titre { display: flex; align-items: center; gap: .55rem; margin: 0; font-size: 1.12rem; }
.pilier__nombre {
  margin-left: auto; font: 700 .85rem var(--texte); color: var(--encre-douce);
  background: var(--papier); border: 1px solid var(--trait); border-radius: 99px; padding: .15rem .6rem;
}
.pilier__texte { margin: 0; font-size: .92rem; color: var(--encre-douce); }
.pilier__progres { display: grid; gap: .45rem; }
.pilier__etat { margin: 0; font-size: .88rem; color: var(--encre-douce); }
.pilier__etat strong { color: var(--encre); }
.pilier form { display: grid; gap: .8rem; }
.pilier .actions-ligne { margin: 0; }
.pilier__liens { margin: .2rem 0 0; font-size: .86rem; color: var(--encre-douce); }
.pilier__alerte { font-weight: 700; }

/* section repliée (impression des questions d'un quizz) */
.repli-section summary { cursor: pointer; list-style: none; display: flex; }
.repli-section summary::-webkit-details-marker { display: none; }
.repli-section summary h2 { display: flex; align-items: center; gap: .55rem; margin: 0; font-size: 1.12rem; }
.repli-section summary h2::after { content: "▾"; margin-left: .6rem; font-size: .9rem; color: var(--encre-douce); }
.repli-section[open] summary h2::after { content: "▴"; }
.repli-section[open] summary { margin-bottom: .9rem; }

/* ===================================================================== 3.2.0
   Entraînement multi-quizz, quizz collaboratifs, dépôt hors PAE,
   « Mes documents » (demandes de Matthias, 12/10). */

/* ---- barre « plusieurs quizz à la fois » (page des quizz) ---- */
.multi-barre {
  display: grid; gap: .7rem; margin: 0 0 1rem; padding: .9rem 1rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: var(--rayon);
}
.multi-barre__texte { display: flex; align-items: center; gap: .5rem; margin: 0; font-size: .92rem; }
.multi-barre__actions { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; }
.multi-barre__taille { display: inline-flex; align-items: center; gap: .45rem; font-size: .88rem; color: var(--encre-douce); }
.multi-barre__taille select {
  font: inherit; font-size: .9rem; color: var(--encre); background: var(--papier);
  border: 1px solid var(--trait); border-radius: 8px; padding: .35rem .5rem;
}
.carte-quiz__choisir {
  display: flex; align-items: center; gap: .5rem; margin: .5rem 0 0;
  font-size: .85rem; color: var(--encre-douce); cursor: pointer;
}
.carte-quiz__choisir input { accent-color: var(--cyan); width: 1rem; height: 1rem; flex: none; }
.avancement__multi { color: var(--encre-douce); font-weight: 400; }
.etiquette--collab { background: var(--cyan-pale); color: var(--cyan-fonce); border-color: var(--cyan); }

/* ---- déposer dans un autre cours ---- */
.section-drive__titre { margin: 1.4rem 0 .7rem; font-size: 1.12rem; }
.choix-blocs { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: .7rem; }
.choix-bloc { min-width: 7rem; justify-content: center; }
.choix-cours { list-style: none; margin: 0; padding: 0; display: grid; gap: .45rem; }
.choix-cours__lien {
  display: flex; align-items: center; gap: .7rem; padding: .6rem .8rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 12px;
  text-decoration: none; color: inherit;
}
.choix-cours__lien:hover { border-color: var(--cyan); }
.choix-cours__texte { display: grid; gap: .05rem; min-width: 0; }
.choix-cours__texte small { font-size: .8rem; color: var(--encre-douce); }
.choix-cours__quadri { margin-left: auto; flex: none; font-size: .78rem; color: var(--encre-douce); }
/* Choix du cours d'un conseil : blocs puis quadrimestres repliables (14/10). */
.choix-groupe { margin-top: 1.6rem; }
.choix-groupe .bloc > .choix-cours { margin: .7rem 0 1.1rem; }

/* ---- mes documents ---- */
.mes-documents__cours { margin: 0 0 1.6rem; }
.mes-documents__titre { display: flex; align-items: center; gap: .55rem; flex-wrap: wrap; margin: 0 0 .6rem; font-size: 1.08rem; }
.mes-documents__titre a { color: inherit; }
.mes-documents__titre small { font-weight: 400; font-size: .82rem; color: var(--encre-douce); }
.documents-simples { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }
.documents-simples .document {
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 12px; padding: .8rem 1rem;
}
.documents-simples .document__actions { margin-top: .5rem; }

/* ======================================================================
   13/10 (nuit) — remettre dans l'ordre, textes à trous, réponses mélangées,
   paramètres d'un quizz (demandes de Matthias)
   ====================================================================== */

/* ---- éditeur : ce qui dépend du type de question ---- */
.si-trous, .si-ordre, .si-qcm { display: none; }
.editeur:has(input[name="type"][value="trous"]:checked) span.si-trous { display: inline; }
.editeur:has(input[name="type"][value="trous"]:checked) div.si-trous { display: block; }
.editeur:has(input[name="type"][value="trous"]:checked) .sauf-trous { display: none; }
.editeur:has(input[name="type"][value="ordre"]:checked) span.si-ordre { display: inline; }
.editeur:has(input[name="type"][value="ordre"]:checked) .sauf-ordre { display: none; }
.editeur:has(input[name="type"][value="unique"]:checked) .editeur__fixe,
.editeur:has(input[name="type"][value="multiple"]:checked) .editeur__fixe { display: flex; }
.editeur:has(input[name="type"][value="trous"]:checked) .editeur__qcm,
.editeur:has(input[name="type"][value="trous"]:checked) .editeur__aide,
.editeur:has(input[name="type"][value="ordre"]:checked) .editeur__aide { display: none; }
.editeur__fixe { margin: .9rem 0 0; }
/* « ordre » : pas de case « bonne réponse », les lignes sont numérotées 1, 2, 3… */
.editeur:has(input[name="type"][value="ordre"]:checked) .lignes-reponse { counter-reset: element; }
.editeur:has(input[name="type"][value="ordre"]:checked) .ligne-reponse[data-ligne] {
  counter-increment: element; grid-template-columns: auto minmax(0, 1fr) auto;
}
.editeur:has(input[name="type"][value="ordre"]:checked) .ligne-reponse__bonne { display: none; }
.editeur:has(input[name="type"][value="ordre"]:checked) .ligne-reponse__lettre[data-lettre] { font-size: 0; width: 1.6rem; }
.editeur:has(input[name="type"][value="ordre"]:checked) .ligne-reponse__lettre[data-lettre]::before {
  content: counter(element) "."; font-size: .9rem; color: var(--teinte-fonce, var(--encre));
}
.editeur:has(input[name="type"][value="ordre"]:checked) .ligne-reponse[data-ligne]:has(.ligne-reponse__bonne input:checked) { background: none; }
.editeur:has(input[name="type"][value="ordre"]:checked) .bouton-ajout { margin-left: 2rem; }
/* « trous » : aide et outils sous le texte */
.editeur__trous { margin-top: .6rem; }
.editeur__trous-aide {
  display: flex; gap: .65rem; align-items: flex-start; margin: 0; max-width: none;
  font-size: .87rem; color: var(--encre-douce); background: var(--papier);
  border: 1px solid var(--trait); border-radius: 12px; padding: .7rem .9rem;
}
.editeur__trous-aide .icone { flex: none; width: 1.3rem; height: 1.3rem; color: var(--teinte, var(--cyan)); margin-top: .05rem; }
.editeur__trous-outils { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin: .55rem 0 0; }
.editeur__trous-compte { font-size: .85rem; font-weight: 600; color: var(--encre-douce); }
.editeur__trous-compte.est-vide { color: var(--faux); }

/* ---- répondre : remettre dans l'ordre ---- */
.ordre { list-style: none; margin: 0 0 .8rem; padding: 0; display: grid; gap: .5rem; }
.ordre__element {
  display: flex; align-items: center; gap: .75rem; padding: .7rem .85rem;
  border: 1.5px solid var(--trait); border-radius: 12px; background: var(--blanc);
  transition: border-color .12s ease, box-shadow .12s ease, transform .12s ease;
}
.ordre__element:hover { border-color: var(--teinte-moyenne, var(--cyan)); }
.ordre__element.est-deplace {
  border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--cyan-pale));
  box-shadow: 0 8px 22px rgba(16, 36, 58, .16); position: relative; z-index: 2;
}
.ordre__element.vient-de-bouger { border-color: var(--teinte, var(--cyan)); }
.ordre__poignee {
  flex: none; display: grid; place-items: center; width: 1.6rem; height: 2.2rem; margin: -.3rem -.2rem -.3rem -.35rem;
  color: var(--encre-douce); cursor: grab; touch-action: none; border-radius: 7px;
}
.ordre__poignee:hover { background: var(--papier); color: var(--encre); }
.ordre__element.est-deplace .ordre__poignee { cursor: grabbing; }
.ordre__rang {
  flex: none; width: 1.9rem; height: 1.9rem; display: grid; place-items: center; border-radius: 50%;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .85rem/1 var(--titre);
}
.ordre__texte { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.ordre__place select {
  font: inherit; font-size: .9rem; padding: .35rem .5rem; border-radius: 8px;
  border: 1px solid var(--trait); background: var(--papier); color: var(--encre);
}
.ordre__fleches { flex: none; display: inline-flex; gap: .25rem; }
.ordre__fleche {
  width: 2.2rem; height: 2.2rem; display: grid; place-items: center; cursor: pointer;
  border: 1px solid var(--trait); border-radius: 9px; background: var(--papier); color: var(--encre);
}
.ordre__fleche:hover:not(:disabled) { border-color: var(--teinte, var(--cyan)); color: var(--teinte-fonce, var(--lien)); }
.ordre__fleche:disabled { opacity: .35; cursor: default; }
.ordre__fleche:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ordre__aide { margin: 0 0 1.2rem; font-size: .84rem; color: var(--encre-douce); }

/* ---- répondre : texte à trous ---- */
.texte-trous { line-height: 2.15; font-weight: 500; }
input.trou {
  font: inherit; font-weight: 600; font-size: .98em; color: var(--encre); max-width: 100%;
  padding: .12rem .45rem; margin: 0 .1rem; border: 0; border-bottom: 2px solid var(--teinte, var(--cyan));
  border-radius: 6px 6px 0 0; background: var(--teinte-pale, var(--cyan-pale));
}
input.trou:focus { outline: 3px solid var(--ambre); outline-offset: 1px; }
.trou-vide { letter-spacing: .1em; color: var(--encre-douce); }
.trou-corrige { display: inline-flex; align-items: center; gap: .3rem; padding: 0 .4rem; border-radius: 6px; font-weight: 700; }
.trou-corrige--juste { background: var(--juste-fond); color: var(--juste); }
.trou-corrige--faux { background: var(--faux-fond); color: var(--faux); }
.trou-corrige--faux s { font-weight: 500; opacity: .85; }
.trou-corrige--faux strong { color: var(--juste); }
.trou-apercu { background: var(--juste-fond); color: var(--juste); font-weight: 700; padding: 0 .3rem; border-radius: 5px; }

/* ---- corrigé : ordre et trous ---- */
.corrige__intro { margin: 0 0 .5rem; font-weight: 700; font-size: .9rem; }
.corrige--ordre .reponse__lettre, .corrige--trous .reponse__lettre { border-radius: 50%; }
.fiche-question__reponses--ordre .reponse__lettre { border-radius: 50%; }

/* ---- quizz : paramètres et suppression par l'auteur·rice ---- */
.entete-cours__lien { display: inline-flex; align-items: center; gap: .25rem; font-weight: 600; }
.parametres-quiz .formulaire { margin-top: .4rem; }
.parametres-quiz .zone-danger {
  max-width: 52rem; margin-top: 1rem; padding: .9rem 1rem; border: 1px dashed var(--grenat-bord); border-radius: 12px;
}
.carte-quiz__proprietaire {
  display: flex; flex-wrap: wrap; align-items: center; gap: .3rem 1.1rem;
  padding-top: .5rem; margin-top: .1rem; border-top: 1px solid var(--trait); font-size: .86rem;
}

@media (max-width: 640px) {
  .ordre__element { gap: .55rem; padding: .6rem .65rem; }
  .ordre__fleche { width: 2.5rem; height: 2.5rem; }
  .ordre__rang { width: 1.6rem; height: 1.6rem; font-size: .78rem; }
}
.import__regles-titre { margin: 1rem 0 .45rem !important; font-size: .92rem !important; }
.import__regles-plus { margin: 0; padding-left: 1.1rem; display: grid; gap: .45rem; }
.editeur__libelle > .si-trous, .editeur__libelle > .sauf-trous,
.editeur__libelle > .si-ordre, .editeur__libelle > .sauf-ordre { font: inherit; color: inherit; }

/* ---- conseils d'anciens (14/10) ----
   Page du cours : une tuile large sous les cinq sous-dossiers, avec les deux
   conseils les plus utiles en aperçu. conseils.php : la liste ; conseiller.php :
   écrire le sien ; « Mes documents » : mes conseils. */
.sous-dossiers__large { grid-column: 1 / -1; }
.conseils-apercu {
  flex: 1; display: grid; gap: .6rem; min-width: 0;
  background: var(--blanc); border: 1px solid var(--teinte-trait, var(--trait)); border-radius: 12px;
  padding: .95rem 1.05rem 1rem;
}
.conseils-apercu__tete { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .75rem; }
.conseils-apercu__tete .sous-dossier__icone { margin: 0; }
.conseils-apercu__titre { font: 700 .98rem/1.3 var(--titre); color: var(--encre); text-decoration: none; }
.conseils-apercu__titre:hover { color: var(--lien); text-decoration: underline; }
.conseils-apercu__compte { margin-left: auto; font-size: .82rem; font-weight: 700; }
.conseils-apercu .sous-dossier__detail { margin: 0; }
.conseils-apercu__liste { list-style: none; margin: 0; padding: 0; display: grid; gap: .55rem; }
/* 2.46 (Matthias : « on n'a que le titre ») : chaque conseil comme un message de forum — la pastille,
   qui, l'année, la phrase et le début du texte ; tout le message est un lien vers le conseil.
   « display: block » défait le « .sous-dossiers li { display: flex } » des tuiles. Fond neutre (14/10). */
.conseils-apercu__liste li { display: block; }
.conseil-apercu {
  display: flex; align-items: flex-start; gap: .75rem; padding: .8rem .9rem; border-radius: 12px;
  background: var(--papier); border: 1px solid var(--trait); color: var(--encre); text-decoration: none;
}
.conseil-apercu:hover { border-color: var(--teinte, var(--cyan)); color: var(--encre); text-decoration: none; }
.conseil-apercu:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.conseil-apercu .conseil__avatar { width: 2.2rem; height: 2.2rem; font-size: .74rem; }
.conseil-apercu__corps { flex: 1; min-width: 0; display: grid; gap: .2rem; }
.conseil-apercu__qui { font-size: .8rem; color: var(--encre-douce); line-height: 1.35; }
.conseil-apercu__qui strong { color: var(--encre); }
.conseil-apercu__phrase { font: 700 .95rem/1.35 var(--titre); overflow-wrap: anywhere; }
.conseil-apercu__extrait {
  font-size: .88rem; line-height: 1.5; color: var(--encre-douce); overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.conseil-apercu__pied { display: flex; align-items: center; gap: .9rem; margin-top: .2rem; font-size: .8rem; font-weight: 700; color: var(--encre-douce); }
.conseil-apercu__utile, .conseil-apercu__lire { display: inline-flex; align-items: center; gap: .25rem; }
.conseil-apercu__lire { margin-left: auto; color: var(--lien); }
.conseil-apercu__pied .icone { width: .95rem; height: .95rem; }
.conseils-apercu__actions { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.1rem; }
.conseils-apercu__actions .bouton .icone { width: 1rem; height: 1rem; }

.conseils-haut {
  display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 1rem 2rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px;
  padding: 1rem 1.3rem 1.05rem; margin: 0 0 1.3rem;
}
.conseils-haut__resume { flex: 1 1 18rem; min-width: 0; }
.conseils-haut__compte { margin: 0 0 .65rem; }
.conseils-haut__compte:last-child { margin: 0; }
.conseils-haut__libelle { margin: 0 0 .35rem; font-size: .82rem; font-weight: 700; color: var(--encre-douce); }
.conseils-haut__action { display: grid; gap: .35rem; justify-items: start; }
.conseils-haut__action .champ__aide { margin: 0; }

.conseils { list-style: none; margin: 0 0 1.6rem; padding: 0; display: grid; gap: .8rem; }
/* 2.46 : un message de forum, en lecture seule — la pastille, qui, quand, le menu ⋯ ; la phrase ;
   le texte ; « Utile », thèmes et charge en pied. Pas de liseré de couleur : la pastille suffit. */
.conseil {
  background: var(--blanc); border: 1px solid var(--trait);
  border-radius: 16px; padding: 1rem 1.15rem .9rem; scroll-margin-top: 100px;
}
.conseil__tete { display: flex; align-items: center; gap: .7rem; margin: 0 0 .65rem; }
.conseil__avatar {
  flex: none; width: 2.5rem; height: 2.5rem; border-radius: 50%; display: grid; place-items: center;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .82rem/1 var(--titre); letter-spacing: .03em;
}
.conseil__qui { flex: 1; min-width: 0; margin: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 .45rem; line-height: 1.35; }
.conseil__vous { font-size: .7rem; font-weight: 700; padding: .1rem .45rem; border-radius: 99px; background: var(--blanc); border: 1px solid var(--cyan); color: var(--lien); }
.conseil__quand { flex-basis: 100%; font-size: .8rem; color: var(--encre-douce); }
.conseil-apercu__an, .conseil__an { white-space: nowrap; }
.conseil__menu { flex: none; align-self: flex-start; }
.conseil__pied { display: flex; flex-wrap: wrap; align-items: center; gap: .45rem .55rem; margin-top: .75rem; }
.conseil__pied form { margin: 0; }
.conseil__charge, .conseil__equipe { font-size: .78rem; color: var(--encre-douce); }
.conseil__charge { font-weight: 700; padding: .3rem .6rem; border-radius: 99px; background: var(--papier); }
.conseil__signaler-form { margin-top: .9rem; padding: .9rem 1rem; border-radius: 12px; background: var(--papier); border: 1px solid var(--trait); }
.conseil__signaler-titre { display: flex; align-items: center; gap: .35rem; margin: 0; font-weight: 700; }
.conseil:target { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); }
.conseil--mien { border-color: var(--cyan); }   /* le sien : bord cyan, fond blanc — les thèmes restent lisibles (2.46) */
.conseil--epingle { border-color: var(--teinte, var(--cyan)); box-shadow: inset 0 0 0 1px var(--teinte, var(--cyan)); }   /* épinglé : bord du cours (2.46) */
.conseil--signale { border-color: var(--sans-trait); }
.conseil__epingle { display: flex; align-items: center; gap: .3rem; margin: 0 0 .35rem; font-size: .76rem; font-weight: 700; color: var(--encre-douce); }
.conseil__phrase { margin: 0 0 .3rem; font: 700 1.06rem/1.4 var(--titre); color: var(--encre); overflow-wrap: anywhere; }
.conseil__meta { margin: 0 0 .5rem; font-size: .82rem; color: var(--encre-douce); max-width: none; }
.conseil__auteur { font-weight: 700; color: var(--encre); }
.conseil__themes { display: flex; flex-wrap: wrap; gap: .3rem; margin: 0 0 .45rem; }
.conseil__texte { margin: .2rem 0 .25rem; line-height: 1.6; overflow-wrap: anywhere; max-width: 75ch; }
.conseil__suite summary { cursor: pointer; list-style: none; line-height: 1.6; overflow-wrap: anywhere; max-width: 75ch; }
.conseil__suite summary::-webkit-details-marker { display: none; }
.conseil__lire { display: inline-block; margin-left: .35rem; font-size: .88rem; font-weight: 700; color: var(--lien); }
.conseil__lire--moins { display: none; }
.conseil__suite[open] .conseil__extrait, .conseil__suite[open] .conseil__lire--plus { display: none; }
.conseil__suite[open] .conseil__lire--moins { display: inline-block; margin-left: 0; }
.conseil__actions {
  display: flex; flex-wrap: wrap; align-items: center; gap: .45rem 1.1rem;
  margin-top: .6rem; padding-top: .55rem; border-top: 1px solid var(--trait);
}
.conseil__actions form { margin: 0; }
.conseil__actions .bouton-lien { font-size: .84rem; display: inline-flex; align-items: center; gap: .3rem; }
.utile {
  display: inline-flex; align-items: center; gap: .35rem; cursor: pointer;
  font: 700 .84rem/1 var(--texte); padding: .45rem .8rem; border-radius: 99px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce);
}
.utile .icone { width: 1rem; height: 1rem; }
.utile:hover { border-color: var(--cyan); color: var(--encre); }
.utile:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.utile.est-actif { background: var(--cyan-pale); border-color: var(--cyan); color: var(--lien); }
.utile__nombre { margin-left: .15rem; color: var(--encre); }
.utile--mien { cursor: default; border-style: dashed; font-weight: 600; }
.utile--mien:hover { border-color: var(--trait); color: var(--encre-douce); }
.conseil__signaler summary {
  cursor: pointer; list-style: none; display: inline-flex; align-items: center; gap: .3rem;
  font-size: .84rem; font-weight: 600; color: var(--encre-douce);
}
.conseil__signaler summary::-webkit-details-marker { display: none; }
.conseil__signaler summary:hover { color: var(--sans); }
.conseil__signaler[open] { flex-basis: 100%; }
.conseil__signaler-form { display: grid; gap: .65rem; margin-top: .6rem; max-width: 34rem; }
.conseil__signaler-form .bouton { justify-self: start; }
.conseil .signalements { margin-top: .7rem; }

.conseils-avant { margin-top: 1.8rem; }
.conseils-avant__titre { display: flex; align-items: center; gap: .45rem; margin: 0 0 .25rem; font-size: 1.1rem; }
.conseils-avant__aide { margin: 0 0 .9rem; font-size: .88rem; color: var(--encre-douce); max-width: 62ch; }
.conseils-avant .conseil__avatar { background: var(--teinte-trait, var(--trait)); color: var(--encre); }

.charte-conseil {
  margin: 0 0 1rem; padding: .85rem 1.1rem; border-radius: 12px; font-size: .9rem; line-height: 1.5;
  background: var(--ambre-pale); border: 1px solid var(--puce-bord);
}
.charte-conseil p { margin: 0 0 .4rem; }
.charte-conseil p:last-child { margin: 0; }
.formulaire-conseil .tags-choix__liste { gap: .45rem; }

.mes-conseils { margin-top: 2.4rem; padding-top: 1.4rem; border-top: 1px solid var(--trait); scroll-margin-top: 100px; }
.mes-conseils .drive-titre { margin-bottom: 1rem; }
.mes-conseils__titre { display: flex; align-items: center; gap: .5rem; margin: 0 0 .3rem; font-size: 1.3rem; }
.mes-conseils__liste { list-style: none; margin: 0; padding: 0; display: grid; gap: .7rem; }
.mes-conseils__element {
  background: var(--blanc); border: 1px solid var(--trait); border-left: 4px solid var(--teinte, var(--cyan));
  border-radius: 14px; padding: .85rem 1.1rem .8rem;
}
.mes-conseils__cours { display: flex; flex-wrap: wrap; align-items: center; gap: .45rem; margin: 0 0 .35rem; font-size: .9rem; font-weight: 700; }
.mes-conseils__phrase { margin: 0 0 .3rem; font: 700 1rem/1.4 var(--titre); overflow-wrap: anywhere; }
.mes-conseils__tete { display: flex; align-items: flex-start; justify-content: space-between; gap: .6rem; }
.mes-conseils__tete .mes-conseils__cours { margin-top: .3rem; }
.mes-conseils__extrait { margin: 0 0 .35rem; font-size: .9rem; line-height: 1.5; color: var(--encre-douce); overflow-wrap: anywhere; max-width: 75ch; }

@media (max-width: 640px) {
  .conseils-apercu__compte { margin-left: 0; flex-basis: 100%; }
  .conseils-haut { padding: .9rem 1rem; }
  .conseil { padding: .85rem .9rem .7rem; }
  .conseil__phrase { font-size: 1rem; }
}

/* ======================================================================
   14/10 (bot 3.5.0) — code couleur du cours, liens utiles
   ====================================================================== */

/* ---- code couleur HEX : en-tête du cours (« ● Couleur #970911 ») ---- */
.couleur-cours { white-space: nowrap; }   /* en ligne : copier la ligne entière ne coupe rien */
.couleur-cours__pastille {
  display: inline-block; width: .95em; height: .95em; border-radius: 50%; margin-right: .35em; vertical-align: -.12em;
  background: var(--teinte, var(--cyan)); box-shadow: inset 0 0 0 1px rgb(0 0 0 / .22);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--encre) 30%, transparent);   /* visible de jour comme de nuit */
}
.couleur-cours__code {
  -webkit-user-select: all; user-select: all; cursor: text;
  background: var(--blanc); color: var(--encre); border: 1px solid var(--teinte-trait, var(--trait));
  padding: .08em .45em; letter-spacing: .03em;
}

/* ---- liens utiles : vignette, liste des liens, nom du site bien visible ---- */
.document__vignette--liens {
  place-items: center; align-content: center; gap: .2rem; padding: 0; border-radius: 12px; color: var(--encre);
}
.document__vignette--liens::before { display: none; }
.document__vignette--liens .document__vignette-icone { width: 1.45rem; height: 1.45rem; }
.document__vignette--liens span { font-size: .52rem; color: var(--encre-douce); }
.document__titre-icone { margin-right: .35rem; color: var(--encre-douce); }
.liens { list-style: none; margin: .45rem 0 0; padding: 0; display: grid; gap: .35rem; }
.lien__lien {
  display: flex; flex-wrap: wrap; align-items: center; gap: .2rem .65rem;
  padding: .45rem .75rem; border-radius: 10px; text-decoration: none; color: var(--encre);
  background: var(--papier); border: 1px solid var(--trait); border-left: 3px solid var(--teinte, var(--cyan));
}
.lien__lien:hover { color: var(--encre); background: var(--teinte-pale, var(--cyan-pale)); border-color: var(--teinte-trait, var(--cyan)); border-left-color: var(--teinte, var(--cyan)); }
.lien__titre { font-weight: 700; font-size: .92rem; color: var(--lien); overflow-wrap: anywhere; }
.lien__lien:hover .lien__titre { text-decoration: underline; }
.lien__domaine {
  display: inline-flex; align-items: center; gap: .3rem; min-width: 0; max-width: 100%;
  padding: .1rem .55rem; border-radius: 99px; background: var(--blanc); border: 1px solid var(--trait);
  font: 600 .78rem/1.35 ui-monospace, "SF Mono", Menlo, Consolas, monospace; color: var(--encre); overflow-wrap: anywhere;
}
.lien__icone { width: .9rem; height: .9rem; color: var(--encre-douce); }
.document__liens-vide { margin: .3rem 0 0; font-size: .82rem; font-style: italic; color: var(--encre-douce); }

/* vue liste : les liens sur une troisième ligne, sous le titre et la méta */
html[data-vue-documents="liste"] .document--liens {
  grid-template-areas: "vignette haut actions" "vignette meta actions" "vignette liens liens";
}
html[data-vue-documents="liste"] .document--liens > .document__liens { grid-area: liens; margin-top: .3rem; gap: .25rem; }
html[data-vue-documents="liste"] .document--liens > .document__liens .lien__lien { padding: .3rem .6rem; }
html[data-vue-documents="liste"] .document--liens > .document__liens .lien__titre { font-size: .85rem; }
html[data-vue-documents="liste"] .document--liens > .document__gestion { grid-row: 4; }
html[data-vue-documents="liste"] .document > .document__vignette--liens { padding: 0; align-self: start; }
html[data-vue-documents="liste"] .document > .document__vignette--liens span { display: none; }
html[data-vue-documents="liste"] .document > .document__vignette--liens .document__vignette-icone { width: 1.1rem; height: 1.1rem; }
@media (max-width: 640px) {
  html[data-vue-documents="liste"] .document--liens { grid-template-areas: "haut actions" "meta actions" "liens liens"; }
}

/* ---- « Ajouter des liens utiles » : panneau replié sous le dépôt de fichier ---- */
.panneau-liens { gap: 0; padding: 0; margin-top: 1rem; }
.panneau-liens > summary { cursor: pointer; list-style: none; display: grid; gap: .3rem; padding: 1rem 1.3rem; border-radius: 16px; }
.panneau-liens > summary::-webkit-details-marker { display: none; }
.panneau-liens > summary h2::after {
  content: "+"; margin-left: auto; font: 700 1.2rem/1 var(--titre); color: var(--encre-douce);
}
.panneau-liens[open] > summary h2::after { content: "−"; }
.panneau-liens > summary:hover h2 { color: var(--lien); }
.panneau-liens__resume { font-size: .82rem; line-height: 1.45; color: var(--encre-douce); }
.panneau-liens[open] .panneau-liens__resume { display: none; }
.panneau-liens__formulaire { display: grid; gap: .9rem; padding: 0 1.3rem 1.3rem; }
.panneau-liens__formulaire .bouton { justify-self: start; }
.panneau-liens__formulaire .champ__aide, .panneau-liens__formulaire .message { margin: 0; }
.champ textarea.champ__liens { font: .86rem/1.55 ui-monospace, "SF Mono", Menlo, Consolas, monospace; }
/* panneau ouvert : la colonne ne colle plus en haut de l'écran (sinon le bas du formulaire resterait hors de portée) */
.colonnes-drive__cote:has(.panneau-liens[open]) { position: static; }

/* ---- archives des effacements : des liens retirés (rien à télécharger) ---- */
.archives__titre { display: inline-flex; align-items: center; gap: .3rem; font-weight: 600; }
.archives__adresses { margin: .25rem 0 .2rem; padding-left: 1.1rem; font-size: .84rem; }
.archives__adresses code { word-break: break-all; }

/* ======================================================================
   14/10 — révisions : tuiles (À faire aujourd'hui, Examens blancs, Quizz),
   cloche activée / coupée, menu ⋯, Paramètres, rappel du jour, Mes rappels.
   Refonte du soir (retours de Matthias) : grille compacte qui s'adapte, zone
   des révisions bien séparée du drive. Pictogrammes au trait, jamais d'emoji.
   ====================================================================== */
.icone--texte { width: 1em; height: 1em; vertical-align: -.15em; }
.insecable { white-space: nowrap; }

/* ---- 15/10 — maquette « A » (Matthias) : variables du duo cloche | ⋯, des jauges, des bulles ---- */
:root {
  --duo-fond: rgba(255, 255, 255, .8); --duo-bord: rgba(16, 36, 58, .16); --duo-off: #6f7f8f; --duo-bleu: #009ee0;
  --jauge-bord: rgba(0, 0, 0, .13); --sous-bulle: #f1f5f8;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --duo-fond: rgba(10, 16, 23, .45); --duo-bord: rgba(255, 255, 255, .14); --duo-off: #93a4b4; --duo-bleu: #1aa7e6;
    --jauge-bord: rgba(255, 255, 255, .15); --sous-bulle: #111a23;
  }
}
:root[data-theme="dark"] {
  --duo-fond: rgba(10, 16, 23, .45); --duo-bord: rgba(255, 255, 255, .14); --duo-off: #93a4b4; --duo-bleu: #1aa7e6;
  --jauge-bord: rgba(255, 255, 255, .15); --sous-bulle: #111a23;
}

/* ---- Mon drive : deux bulles, « Mes révisions » et « Mes cours » ---- */
.bulle {
  display: flex; flex-direction: column; gap: 1rem; margin: 0 0 1.6rem; padding: 1.35rem 1.75rem 1.6rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 18px; box-shadow: 0 1px 3px rgba(16, 36, 58, .06);
}
.bulle__tete { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .6rem 1rem; }
.bulle__titre { display: flex; align-items: center; gap: .6rem; margin: 0; font-size: 1.4rem; }
.bulle__titre .icone { color: var(--lien); width: 1.4rem; height: 1.4rem; flex: none; }
.bulle__outils { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem .9rem; }
.bulle__lien { display: inline-flex; align-items: center; gap: .15rem; font-weight: 700; font-size: .95rem; text-decoration: none; }
.bulle__lien:hover { text-decoration: underline; }
.bulle__vide { margin: 0; color: var(--encre-douce); }

/* Les quadrimestres : des sous-bulles (« Q1 · 1er quadrimestre »), repliables comme avant. */
.drive-zone .filtre-cours { min-width: 13rem; }
.drive-zone .quadri { margin: 0; padding: .9rem 1.1rem 1.1rem; border-radius: 14px; background: var(--sous-bulle); border: 1px solid var(--trait); }
.drive-zone .quadri__titre { margin: -.35rem -.5rem; }
.drive-zone .quadri__titre::before { display: none; }
.drive-zone .quadri__titre h3 { margin: 0; font-size: 1.1rem; }
.drive-zone .quadri__titre sup { font-size: .62em; line-height: 0; vertical-align: .55em; margin-left: 1px; }
.drive-zone .quadri__titre .repli__fleche { margin-left: auto; }
.quadri__puce {
  display: inline-grid; place-items: center; min-width: 2rem; height: 1.6rem; padding: 0 .5rem; border-radius: 7px; flex: none;
  background: var(--cyan-pale); color: var(--lien); font: 700 .85rem var(--titre);
}
.drive-zone .bloc { margin-top: .8rem; }
.drive-zone .bloc__titre h4 { margin: 0; font-size: .95rem; }
.drive-zone .bloc > .chemises { margin-bottom: .8rem; }

/* ---- état de cet appareil ---- */
.etat-appareil {
  display: inline-flex; align-items: center; gap: .35rem; padding: .2rem .65rem; border-radius: 99px; font-size: .82rem;
  font-weight: 700; text-decoration: none; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce);
}
.etat-appareil[hidden] { display: none; }
.etat-appareil--oui { color: var(--juste); border-color: var(--juste-trait); background: var(--juste-fond); }
.etat-appareil--non { color: var(--encre-douce); }
.etat-appareil .icone { width: 1rem; height: 1rem; }

/* ---- catégories : « À faire aujourd'hui », « Examens blancs », « Quizz » (ces deux-là se replient) ---- */
.categories { display: flex; flex-direction: column; gap: 1rem; }
.categorie { min-width: 0; }
.categorie + .categorie { padding-top: 1rem; border-top: 1px solid var(--trait); }
.categorie__tete { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; margin: 0 0 .65rem; color: var(--encre); }
details.categorie > summary { list-style: none; cursor: pointer; border-radius: 8px; }
details.categorie > summary::-webkit-details-marker { display: none; }
details.categorie:not([open]) > summary { margin-bottom: 0; }
details.categorie > summary:focus-visible { outline: 3px solid var(--cyan); outline-offset: 3px; }
.categorie__tete .repli__fleche { order: 0; }
.categorie__icone { width: 1.1rem; height: 1.1rem; color: var(--encre-douce); flex: none; }
.categorie__nom { margin: 0; font-size: .95rem; }
.categorie__nombre { font: 700 .75rem var(--texte); color: var(--encre-douce); background: var(--papier); border: 1px solid var(--trait); border-radius: 99px; padding: .1rem .5rem; }
/* repliée : un carré par cours, à sa couleur, et le total à faire */
.categorie__resume { display: none; align-items: center; flex-wrap: wrap; gap: .4rem .6rem; margin-left: .3rem; font: 700 .82rem var(--texte); color: var(--encre-douce); }
details.categorie:not([open]) .categorie__resume { display: inline-flex; }
.carres { display: inline-flex; flex-wrap: wrap; gap: 4px; }
.carre { width: 10px; height: 10px; border-radius: 3px; background: var(--teinte, var(--cyan)); }

/* la grille : 1 tuile = toute la largeur, 2 = la moitié… (colonnes calculées sur le serveur) */
.tuiles { list-style: none; margin: 0; padding: 0; display: grid; gap: .65rem; grid-template-columns: repeat(var(--par, 6), minmax(0, 1fr)); }
.tuiles--p1 { --par: 1; } .tuiles--p2 { --par: 2; } .tuiles--p3 { --par: 3; }
.tuiles--p4 { --par: 4; } .tuiles--p5 { --par: 5; } .tuiles--p6 { --par: 6; }
.tuiles-plus { margin-top: .65rem; }
.tuiles-plus > summary { cursor: pointer; font-weight: 700; font-size: .86rem; color: var(--lien); margin-bottom: .65rem; }

/* ---- une tuile : fond adouci, code dans le coin, jauge cerclée, duo cloche | ⋯ ---- */
.tuile {
  position: relative; min-width: 0; scroll-margin-top: 100px;
  border-radius: 12px; color: var(--encre); background: var(--teinte-pale, var(--blanc));
  box-shadow: inset 0 0 0 1px var(--teinte-trait, var(--trait));
}
@supports (color: color-mix(in srgb, red 10%, white)) {
  .tuile {
    background: color-mix(in srgb, var(--teinte) 16%, var(--blanc));
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--teinte) 42%, var(--blanc));
  }
  .tuile .tuile__jauge { background: color-mix(in srgb, var(--teinte) 34%, var(--blanc)); }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .tuile { background: color-mix(in srgb, var(--teinte) 24%, var(--blanc)); }
    :root:not([data-theme="light"]) .tuile .tuile__jauge { background: color-mix(in srgb, var(--teinte) 40%, var(--blanc)); }
  }
  :root[data-theme="dark"] .tuile { background: color-mix(in srgb, var(--teinte) 24%, var(--blanc)); }
  :root[data-theme="dark"] .tuile .tuile__jauge { background: color-mix(in srgb, var(--teinte) 40%, var(--blanc)); }
}
.tuile:hover { box-shadow: inset 0 0 0 1px var(--teinte), 0 2px 10px rgba(16, 36, 58, .12); }
.tuile:target { outline: 3px solid var(--cyan); outline-offset: 2px; }
/* en pause / arrêtée : le contenu pâlit (pas la tuile entière : son menu ⋯ resterait pâle aussi) */
.tuile--pause .tuile__corps { opacity: .55; filter: saturate(.5); }
.tuile--arrete .tuile__corps { opacity: .6; }
/* le conteneur des container queries (le duo est à côté, pas dedans) */
.tuile__corps { container-type: inline-size; height: 100%; border-radius: 12px; }
.tuile__contenu {
  --pt: 10px; --pr: 10px; --pl: 12px;
  display: flex; flex-direction: column; gap: 8px; height: 100%; box-sizing: border-box;
  padding: var(--pt) var(--pr) calc(var(--pt) + 1px) var(--pl);
}
.tuile__haut, .tuile__milieu, .tuile__bas { display: flex; align-items: center; gap: 7px; min-width: 0; }
.tuile__haut { padding-right: 56px; }   /* la place du duo, en haut à droite */
.tuile--arrete .tuile__haut, .tuile--seance .tuile__haut { padding-right: 30px; }
.tuile__bas { gap: 8px; }
.tuile__espace { flex: 1 1 auto; }
/* le code du cours, dans le coin haut-gauche, à la couleur foncée du cours */
.tuile__code {
  align-self: flex-start; flex: 0 1 auto; min-width: 0; box-sizing: border-box;
  margin: calc(-1 * var(--pt)) 0 0 calc(-1 * var(--pl)); padding: var(--pt) 12px 7px var(--pl);
  border-radius: 12px 0 10px 0; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff);
  font: 700 .75rem/1.2 var(--titre); letter-spacing: .02em; text-decoration: none;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.tuile__code:hover, .tuile__code:focus { color: var(--teinte-texte, #fff); }
/* toute la tuile mène là où l'on en est : le lien s'étend sous les outils */
.tuile__code::after { content: ""; position: absolute; inset: 0; z-index: 1; border-radius: 12px; }
.tuile__code:focus-visible { outline: none; }
.tuile__code:focus-visible::after { outline: 3px solid var(--cyan); outline-offset: 2px; }
.tuile__type { width: 1rem; height: 1rem; color: var(--encre-douce); flex: none; }
.tuile__nom { flex: 0 1 auto; min-width: 0; font-weight: 700; font-size: .9rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tuile__court { flex: 0 1 auto; min-width: 0; font-size: .82rem; font-weight: 700; color: var(--encre-douce); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tuile__reste { flex: none; white-space: nowrap; font-size: .82rem; font-weight: 700; color: var(--encre-douce); }
.tuile--cours .tuile__reste { color: var(--lien); }
.tuile--fait .tuile__reste { color: var(--juste); }
.tuile .tuile__jauge {
  flex: 1 1 auto; min-width: 0; height: 8px; box-sizing: content-box;
  background: var(--teinte-moyenne, var(--jauge-fond)); border: 1px solid var(--jauge-bord);
}
.tuile__pourcent { flex: none; min-width: 2.6em; text-align: right; font-size: .82rem; font-weight: 700; color: var(--encre); }
/* le duo cloche | ⋯, remonté dans le coin haut-droit (à 5 px des bords), au-dessus du lien */
.tuile__outils { position: absolute; top: 5px; right: 5px; z-index: 2; }
.duo { display: inline-flex; align-items: stretch; height: 24px; border-radius: 8px; background: var(--duo-fond); box-shadow: inset 0 0 0 1px var(--duo-bord); }
.duo__form { display: flex; margin: 0; }
.duo__cloche {
  display: grid; place-items: center; width: 28px; padding: 0; border: 0; border-radius: 8px 0 0 8px;
  background: transparent; color: var(--duo-off); cursor: pointer;
}
.duo__cloche .icone { width: .85rem; height: .85rem; }
.duo__cloche:hover { background: var(--cyan-pale); color: var(--lien); }
/* Activées : moitié bleue, cloche blanche pleine. Coupées : cloche grise barrée. */
.duo__cloche.est-active, .duo__cloche.est-active:hover { background: var(--duo-bleu); color: #fff; }
.duo__sep { width: 1px; background: var(--duo-bord); flex: none; }
.duo__menu { display: flex; }
.duo__points {
  display: grid; place-items: center; width: 26px; height: 100%; border-radius: 0 8px 8px 0;
  color: var(--encre); cursor: pointer; list-style: none;
}
.duo__points::-webkit-details-marker { display: none; }
.duo__points .icone { width: .95rem; height: .95rem; }
.duo--seul .duo__points { border-radius: 8px; }
.duo__points:hover, .duo__menu[open] > .duo__points { background: rgba(16, 36, 58, .08); }
.duo__cloche:focus-visible, .duo__points:focus-visible { outline: 3px solid var(--cyan); outline-offset: 1px; position: relative; z-index: 1; }

/* Ce que dit la tuile selon SA largeur (container queries) : moyenne par défaut. */
.tuile__nom--haut, .tuile__reste--haut, .tuile__court { display: none; }
@container (min-width: 480px) {
  .tuile__contenu { --pt: 12px; --pr: 12px; --pl: 14px; }
  .tuile__nom--haut, .tuile__reste--haut { display: block; }
  .tuile__milieu { display: none; }
  .tuile__nom { font-size: .95rem; }
}
@container (max-width: 229px) {
  .tuile__contenu { --pt: 9px; --pr: 9px; --pl: 10px; }
  /* étroite : les examens blancs gardent ce qui reste ; un quizz, son titre */
  .tuile__milieu .tuile__nom, .tuile__milieu .tuile__espace, .tuile__milieu--titre .tuile__reste { display: none; }
  .tuile__milieu--titre .tuile__court { display: block; }
  /* le code passe à la ligne entre ses mots (« PSY / LANG ») plutôt que d'être coupé */
  .tuile__haut { gap: 5px; }
  .tuile__code { white-space: normal; text-overflow: clip; padding-right: 8px; font-size: .7rem; }
  .tuile__type { width: .9rem; height: .9rem; }
}
/* étroite : le code seul (il passe à la ligne plutôt que d'être coupé), sans % ni texte */
@container (max-width: 139px) {
  .tuile__contenu { --pt: 8px; --pr: 7px; --pl: 8px; gap: 6px; }
  .tuile__haut { gap: 3px; }
  .tuile__milieu, .tuile__pourcent, .tuile__type { display: none; }
  .tuile__code {
    white-space: normal; overflow-wrap: anywhere; text-overflow: clip;
    padding: var(--pt) 6px 5px calc(var(--pl) - 2px); font-size: .625rem; line-height: 1.15; letter-spacing: -.01em;
  }
  .tuile .tuile__jauge { height: 6px; }
}
@container (max-width: 99px) {
  .tuile__code { font-size: .5625rem; padding-left: calc(var(--pl) - 3px); padding-right: 4px; letter-spacing: -.03em; }
}
/* Téléphone (tuiles qui défilent, assez larges) : un quizz garde son titre ET ce qui reste, sur deux lignes. */
@media (max-width: 640px) {
  @container (max-width: 229px) {
    .tuile__milieu--titre { flex-direction: column; align-items: flex-start; gap: 1px; }
    .tuile__milieu--titre .tuile__court { max-width: 100%; }
    .tuile__milieu--titre .tuile__reste { display: block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
  }
}
/* Sans JavaScript (qui ouvre le menu du bon côté) : la moitié gauche de chaque ligne ouvre son menu ⋯ vers la droite. */
@media (min-width: 641px) {
  .tuiles--p2 > li:nth-child(2n+1) .menu-suivi__liste, .tuiles--p3 > li:nth-child(3n+1) .menu-suivi__liste,
  .tuiles--p4 > li:nth-child(4n+1) .menu-suivi__liste, .tuiles--p4 > li:nth-child(4n+2) .menu-suivi__liste,
  .tuiles--p5 > li:nth-child(5n+1) .menu-suivi__liste, .tuiles--p5 > li:nth-child(5n+2) .menu-suivi__liste,
  .tuiles--p6 > li:nth-child(6n+1) .menu-suivi__liste, .tuiles--p6 > li:nth-child(6n+2) .menu-suivi__liste,
  .tuiles--p6 > li:nth-child(6n+3) .menu-suivi__liste { left: 0; right: auto; }
}
/* Ordinateur à fenêtre étroite, 5 ou 6 tuiles par ligne : un duo plus serré. */
@media (min-width: 641px) and (max-width: 1100px) {
  .tuiles--p5 .duo__cloche, .tuiles--p6 .duo__cloche { width: 22px; }
  .tuiles--p5 .duo__points, .tuiles--p6 .duo__points { width: 20px; }
  .tuiles--p5 .tuile__haut, .tuiles--p6 .tuile__haut { padding-right: 48px; }
}

/* le menu ⋯ */
.menu-suivi { position: relative; }
.menu-suivi > summary { list-style: none; }
.menu-suivi > summary::-webkit-details-marker { display: none; }
.menu-suivi__liste {
  position: absolute; right: 0; top: calc(100% + .3rem); z-index: 30; width: max-content; min-width: 14rem; max-width: min(19rem, 86vw);
  list-style: none; margin: 0; padding: .35rem; border-radius: 12px;
  background: var(--blanc); border: 1px solid var(--trait); box-shadow: var(--ombre-drive);
}
.menu-suivi__liste form { margin: 0; }
/* Menu ouvert : sa tuile passe devant les cloches et les ⋯ des tuiles voisines
   (.tuile--menu : posée par rappels.js, pour les navigateurs sans :has). */
.tuile__outils:has(.menu-suivi[open]), .tuile--menu .tuile__outils { z-index: 40; }
/* Tuile au bord gauche de l'écran : le menu s'ouvre vers la droite (rappels.js). */
.menu-suivi--gauche > .menu-suivi__liste { right: auto; left: 0; }
.menu-suivi--haut > .menu-suivi__liste { top: auto; bottom: calc(100% + .3rem); }
.menu-suivi__tete { padding: .35rem .6rem .45rem; margin-bottom: .2rem; border-bottom: 1px solid var(--trait); font-size: .78rem; font-weight: 700; color: var(--encre-douce); }
.menu-suivi__choix {
  display: flex; align-items: center; gap: .55rem; width: 100%; padding: .5rem .6rem; border-radius: 8px;
  border: 0; background: none; color: var(--encre); font: 600 .86rem var(--texte); text-align: left; text-decoration: none; cursor: pointer;
}
.menu-suivi__choix:hover, .menu-suivi__choix:focus-visible { background: var(--papier); color: var(--encre); outline: none; }
.menu-suivi__choix .icone { width: 1.05rem; height: 1.05rem; color: var(--encre-douce); }
.menu-suivi__choix--danger, .menu-suivi__choix--danger .icone { color: var(--faux); }
.menu-suivi__choix--danger:hover { background: var(--faux-fond); color: var(--faux); }

/* le bouton ⋯ rond de la barre d'une banque ; filet et précisions dans le menu */
.menu-suivi__bouton {
  display: grid; place-items: center; width: 1.85rem; height: 1.85rem; border-radius: 50%;
  border: 1px solid transparent; background: none; color: var(--encre-douce); cursor: pointer; padding: 0;
}
.menu-suivi__bouton .icone { width: 1.05rem; height: 1.05rem; }
.menu-suivi__bouton:hover, .menu-suivi[open] > .menu-suivi__bouton { background: var(--papier); border-color: var(--trait); color: var(--encre); }
.menu-suivi__bouton:focus-visible { outline: 3px solid var(--cyan); outline-offset: 1px; }
.menu-suivi__filet { height: 1px; margin: .3rem .2rem; background: var(--trait); }
.menu-suivi__choix small { font-weight: 600; color: var(--encre-douce); }

/* ---- l'interrupteur des notifications (Paramètres, barre d'une banque) ---- */
.interrupteur-form { margin: 0; }
.interrupteur {
  display: inline-flex; align-items: center; gap: .55rem; padding: .35rem .8rem .35rem .4rem; border-radius: 99px;
  border: 1.5px solid var(--trait); background: var(--blanc); color: var(--encre-douce); cursor: pointer; font: 600 .88rem var(--texte);
}
.interrupteur .icone { width: 1.1rem; height: 1.1rem; }
.interrupteur__piste { position: relative; width: 2.4rem; height: 1.35rem; border-radius: 99px; background: var(--jauge-fond); flex: none; transition: background .15s; }
.interrupteur__bouton { position: absolute; top: .15rem; left: .15rem; width: 1.05rem; height: 1.05rem; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgb(0 0 0 / .3); transition: left .15s; }
.interrupteur.est-actif { color: var(--lien); border-color: var(--cyan); background: var(--cyan-pale); }
.interrupteur.est-actif .interrupteur__piste { background: var(--cyan-fonce); }
.interrupteur.est-actif .interrupteur__bouton { left: 1.2rem; }
.interrupteur:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }
.interrupteur strong { color: var(--encre); }

/* ---- barre de suivi, en haut de l'accueil d'un quizz / des examens blancs ---- */
.suivi-barre {
  display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem;
  margin: 0 0 1.2rem; padding: .55rem .7rem; border-radius: 12px; background: var(--blanc); border: 1px solid var(--trait);
}
.suivi-barre__texte { flex: 1 1 16rem; margin: 0; font-size: .86rem; color: var(--encre-douce); }
.suivi-barre__menu { margin-left: auto; }

/* ---- Paramètres d'une banque ---- */
.choix-notifications { border: 0; margin: 0 0 1rem; padding: 0; display: flex; flex-wrap: wrap; gap: .5rem; }
.choix-notifications__option { position: relative; cursor: pointer; }
.choix-notifications__option input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.choix-notifications__option span {
  display: inline-flex; align-items: center; gap: .5rem; padding: .6rem .9rem; border-radius: 10px;
  border: 1.5px solid var(--trait); background: var(--blanc); color: var(--encre-douce); font-size: .9rem;
}
.choix-notifications__option .icone { width: 1.15rem; height: 1.15rem; }
.choix-notifications__option input:checked + span { border-color: var(--cyan-fonce); background: var(--cyan-pale); color: var(--encre); box-shadow: inset 0 0 0 1px var(--cyan-fonce); }
.choix-notifications__option input:checked + span .icone { color: var(--lien); }
.choix-notifications__option input:focus-visible + span { outline: 3px solid var(--cyan); outline-offset: 2px; }
.reglage h2 + .choix-notifications { margin-top: .2rem; }
.reglage form { margin: 0; }

/* ---- types d'entraînement (lanceur, Paramètres) ---- */
.lanceur { display: grid; gap: .85rem; margin: 0; }
.lanceur .actions-ligne { margin: 0; }
.types-entrainement { border: 0; margin: 0 0 .9rem; padding: 0; display: flex; flex-wrap: wrap; gap: .4rem; }
.lanceur .types-entrainement { margin: 0; }
.types-entrainement legend { font-size: .88rem; font-weight: 700; margin-bottom: .45rem; padding: 0; }
.types-entrainement legend span { font-weight: 400; color: var(--encre-douce); }
.type-choix { cursor: pointer; position: relative; }
.type-choix input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.type-choix span {
  display: inline-flex; align-items: center; gap: .35rem; padding: .4rem .7rem; border-radius: 9px;
  border: 1.5px solid var(--trait); background: var(--blanc); font-weight: 700; font-size: .86rem;
}
.type-choix small { font-weight: 400; color: var(--encre-douce); }
.type-choix:hover span { border-color: var(--cyan); }
.type-choix input:checked + span { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.type-choix input:checked + span small { color: inherit; opacity: .8; }
.type-choix input:focus-visible + span { outline: 3px solid var(--ambre); outline-offset: 2px; }

/* ---- accueil d'un quizz : s'entraîner | le contenu ---- */
.quiz-accueil { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 20rem); gap: 1rem; align-items: start; margin: 0 0 1.2rem; }
.panneau-entrainement, .panneau-contenu {
  display: grid; align-content: start; gap: .85rem; padding: 1.2rem 1.3rem 1.3rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px;
}
.panneau-entrainement { border-top: 5px solid var(--teinte, var(--cyan)); }
.panneau-entrainement__titre, .panneau-contenu__titre { display: flex; align-items: center; gap: .55rem; margin: 0; font-size: 1.12rem; }
.panneau-entrainement__cartes { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .7rem; margin: 0; padding-top: .7rem; border-top: 1px solid var(--trait); font-size: .86rem; color: var(--encre-douce); }
.panneau-entrainement__cartes > .icone { color: var(--encre-douce); flex: none; }
.panneau-entrainement__cartes > span { flex: 1 1 15rem; min-width: 0; }
.panneau-entrainement__cartes form { margin: 0; }
.panneau-contenu__compte { margin: 0; font-size: .9rem; color: var(--encre-douce); }
.panneau-contenu > .bouton { justify-self: stretch; justify-content: flex-start; text-align: left; font-size: .92rem; }
.panneau-contenu__liens { list-style: none; margin: 0; padding: 0; display: grid; gap: .35rem; font-size: .88rem; }
.reprise-encadre { padding: .7rem .9rem; border-radius: 12px; background: var(--cyan-pale); border-left: 4px solid var(--cyan); }
.reprise-encadre p { margin: 0 0 .4rem; }
.reprise-encadre .actions-ligne { margin: 0; }

/* ---- question ouverte (18/10) : éléments de réponse, où chercher, engagement ---- */
.editeur__ouverte { display: none; }
.editeur:has(input[name="type"][value="ouverte"]:checked) .editeur__ouverte { display: block; }
.editeur:has(input[name="type"][value="ouverte"]:checked) :is(.editeur__qcm, .editeur__aide) { display: none; }
.editeur__reformule { margin-top: .4rem; }

/* ---- question ouverte : rédaction et corrigé (18/10) ---- */
.redaction { display: block; margin-top: 1rem; }
.redaction__champ { width: 100%; }
.ouverte-mienne { margin-top: 1rem; padding: .8rem 1rem; border-radius: .6rem; background: var(--fond-doux, rgba(127, 127, 127, .08)); }
.ouverte-mienne__texte { margin: .3rem 0 0; white-space: pre-line; }
.ouverte-autres { margin-top: 1rem; }
.ouverte-autres__liste { list-style: none; margin: .5rem 0 0; padding: 0; display: grid; gap: .6rem; }
.ouverte-reponse { padding: .7rem .9rem; border: 1px solid var(--trait, rgba(127, 127, 127, .3)); border-radius: .6rem; }
.ouverte-reponse__texte { margin: 0; white-space: pre-line; }
.ouverte-reponse__pied { display: flex; justify-content: space-between; align-items: center; gap: .8rem; margin: .4rem 0 0; font-size: .85em; }
.ouverte-reponse__utile { display: inline; }
.ouverte-reponse__utile .est-vote { font-weight: 700; }
.ouverte-evaluer { gap: .6rem; }

/* ---- « cette entrée servira dans… » : le multiplicateur visible (18/10) ---- */
.editeur__usages { display: flex; gap: .5rem; align-items: baseline; margin: .2rem 0 0; font-size: .9em; }
.editeur__usages .usages { display: none; }
.editeur:has(input[name="type"][value="unique"]:checked) .usages--unique,
.editeur:has(input[name="type"][value="multiple"]:checked) .usages--multiple,
.editeur:has(input[name="type"][value="ordre"]:checked) .usages--ordre,
.editeur:has(input[name="type"][value="trous"]:checked) .usages--trous,
.editeur:has(input[name="type"][value="carte"]:checked) .usages--carte { display: inline; }

/* ---- chapitres (Module de révision, 18/10) ---- */
.champ-numero-chapitre { display: grid; grid-template-columns: 5.5rem minmax(0, 1fr); gap: .8rem; }
.refus-chapitre { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.refus-chapitre__motif { flex: 1 1 12rem; min-width: 0; }
.carte-quiz--proposition { border-style: dashed; }

/* ---- éditeur commun : une carte recto / verso est un type de plus ---- */
.editeur__carte { display: none; }
.editeur:has(input[name="type"][value="carte"]:checked) .editeur__carte { display: block; }
.editeur:has(input[name="type"][value="carte"]:checked) :is(.editeur__question, .editeur__qcm, .editeur__vf, .editeur__plus) { display: none; }
.editeur__carte .carte-editeur__faces { margin-top: .6rem; }

/* ---- le rappel du jour (haut de Mes révisions) ---- */
.rappel-du-jour {
  display: flex; align-items: center; gap: .9rem; flex-wrap: wrap; margin: 0 0 1.1rem;
  padding: .85rem 1.1rem; border-radius: 14px; background: var(--blanc); border: 1px solid var(--trait);
}
.rappel-du-jour__icone {
  flex: none; width: 2.4rem; height: 2.4rem; border-radius: 50%; display: grid; place-items: center;
  background: var(--cyan-pale); color: var(--lien);
}
.rappel-du-jour__icone .icone { width: 1.25rem; height: 1.25rem; }
.rappel-du-jour__texte { display: grid; gap: .1rem; flex: 1 1 18rem; min-width: 0; }
.rappel-du-jour__texte span { font-size: .88rem; color: var(--encre-douce); }
.rappel-du-jour__report { display: inline-flex; flex-wrap: wrap; align-items: center; gap: .1rem .5rem; }
.rappel-du-jour__report .bouton-lien { font-size: .84rem; padding: 0; }

/* ---- total + « Pas maintenant ? Me le rappeler dans 1 h » ---- */
.revisions-haut { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem 1rem; margin: 0 0 .9rem; }
.revisions-haut .revisions-total { margin: 0; }
.plus-tard { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; margin: 0; }
.plus-tard__libelle { display: inline-flex; align-items: center; gap: .35rem; font-size: .86rem; color: var(--encre-douce); }

/* ---- jours de la semaine (Paramètres) ---- */
.jours { border: 0; margin: 0 0 .6rem; padding: 0; min-width: 0; }
.jours legend { padding: 0; margin: 0 0 .45rem; font-weight: 700; font-size: .9rem; }
.jours__liste { display: flex; flex-wrap: wrap; gap: .35rem; }
.jour { position: relative; }
.jour input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.jour span {
  display: inline-grid; place-items: center; min-width: 2.7rem; padding: .4rem .5rem; border-radius: 8px;
  border: 1px solid var(--trait); background: var(--papier); color: var(--encre-douce);
  font: 700 .82rem var(--texte); cursor: pointer; user-select: none;
}
.jour input:checked + span { background: var(--cyan-fonce); border-color: var(--cyan-fonce); color: #fff; }
.jour input:focus-visible + span { outline: 3px solid var(--cyan-pale); outline-offset: 1px; }

/* ---- arrêtés (Mes révisions) ---- */
.suivis-arretes { margin: 1.2rem 0 1.4rem; }
.suivis-arretes > summary {
  display: inline-flex; align-items: center; gap: .45rem; cursor: pointer;
  font: 700 1rem var(--titre); color: var(--encre-douce); margin-bottom: .6rem;
}
.suivis-arretes > summary:hover { color: var(--encre); }

/* ---- Mes rappels ---- */
.reglage { margin: 0 0 1.6rem; padding: 1.1rem 1.3rem 1.2rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; }
.reglage h2 { display: flex; align-items: center; gap: .5rem; margin: 0 0 .6rem; font-size: 1.12rem; }
.reglage h2 .icone { color: var(--lien); }
.reglage h2:not(:first-of-type) { margin-top: 1.4rem; }
.reglage p { max-width: 62ch; }
.reglage__ligne { display: flex; flex-wrap: wrap; align-items: flex-end; gap: .8rem; margin: 0 0 .5rem; }
.reglage__ligne .champ { min-width: 12rem; }
.reglage__sous-titre { margin: 1.2rem 0 .5rem; font-size: 1rem; }
.reglage__case { display: grid; gap: .6rem; justify-items: start; margin: 1.1rem 0 0; }
.reglage__boutons { display: flex; flex-wrap: wrap; gap: .45rem; margin: .4rem 0; }
.push { display: grid; gap: .4rem; }
.push .actions-ligne { margin: .2rem 0; }
.push__etat { margin: 0; font-weight: 700; display: inline-flex; align-items: center; gap: .45rem; justify-self: start; padding: .35rem .8rem; border-radius: 99px; background: var(--papier); border: 1px solid var(--trait); }
.push__etat.est-actif { background: var(--juste-fond); color: var(--juste); border-color: var(--juste-trait); }
.push__ios { margin: .6rem 0 0; }
.push__ios ol { margin: .4rem 0 0; padding-left: 1.2rem; }
.push [hidden], .push__ios[hidden] { display: none !important; }   /* .bouton (inline-flex) l'emportait sur hidden */
.appareils { list-style: none; margin: 0 0 .5rem; padding: 0; display: grid; gap: .45rem; }
.appareil {
  display: flex; align-items: center; gap: .7rem; padding: .6rem .8rem;
  border: 1px solid var(--trait); border-radius: 10px; background: var(--papier);
}
.appareil > .icone { color: var(--encre-douce); }
.appareil__texte { display: grid; flex: 1; min-width: 0; }
.appareil__texte span { font-size: .8rem; color: var(--encre-douce); }
.recap-rappels { list-style: none; margin: .6rem 0 0; padding: 0; display: grid; gap: .3rem; }
.recap-rappels li { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .2rem 1rem; padding: .35rem 0; border-bottom: 1px solid var(--trait); font-size: .9rem; }
.recap-rappels li:last-child { border-bottom: 0; }
.recap-rappels__etat { color: var(--encre-douce); }
.recap-rappels__etat.est-actif { color: var(--lien); font-weight: 600; }

@media (max-width: 860px) {
  .quiz-accueil { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .bulle { padding: 1rem .625rem 1.1rem; border-radius: 16px; gap: .85rem; margin-left: -.25rem; margin-right: -.25rem; }
  .bulle__titre { font-size: 1.25rem; }
  .drive-zone .quadri { padding: .75rem .7rem .9rem; }
  /* « Q1 1er quadrimestre  8 cours ⌄ » sur une seule ligne, même à 360 px */
  .drive-zone .quadri__titre { gap: .4rem; }
  .drive-zone .quadri__titre h3 { font-size: 1rem; }
  .drive-zone .filtre-cours { min-width: 0; width: 100%; }
  .drive-zone .bulle__outils { width: 100%; }
  /* Téléphone : UNE ligne par catégorie, qu'on fait défiler du doigt (demande de Matthias, 15/10) —
     des tuiles d'une taille correcte, qui gardent leurs informations. 1 tuile : toute la largeur ;
     2 : la moitié chacune ; 3 et plus : deux tuiles et le début de la suivante. */
  .tuiles {
    grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: minmax(9.5rem, 44%); gap: .45rem;
    overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x proximity;
    /* 6 px autour : le contour de focus ou de :target (3 px + 2 px d'écart) n'est pas rogné */
    margin: -6px; padding: 6px 6px .6rem; scroll-padding-inline: 6px; scrollbar-width: thin;
  }
  .tuiles > li { scroll-snap-align: start; }
  .tuiles--t1 { grid-auto-columns: 100%; overflow: visible; padding-bottom: 6px; }
  .tuiles--t2 { grid-auto-columns: calc(50% - .225rem); overflow: visible; padding-bottom: 6px; }
}
@media (max-width: 640px) {
  /* Le menu ⋯ s'ouvre en bas de l'écran, sur un voile : on voit ce qu'on règle,
     et toucher à côté ne déclenche rien d'autre. */
  .tuile .menu-suivi__liste, .tuile .menu-suivi--gauche > .menu-suivi__liste, .tuile .menu-suivi--haut > .menu-suivi__liste {
    position: fixed; left: .6rem; right: .6rem; bottom: .6rem; top: auto; width: auto; min-width: 0; max-width: none;
    padding: .5rem; border-radius: 16px; box-shadow: 0 -6px 30px rgba(0, 0, 0, .25);
    /* 19/10 (photo de Matthias) : faire défiler le menu ne fait plus défiler la page derrière. */
    max-height: min(78vh, calc(100vh - 5rem)); max-height: min(78dvh, calc(100dvh - 5rem));
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
  }
  .tuile .menu-suivi[open]::before { content: ""; position: fixed; inset: 0; z-index: 0; background: rgba(10, 20, 35, .4); touch-action: none; }
  html:has(.tuile .menu-suivi[open]) { overflow: hidden; }
  .tuile .menu-suivi[open] > summary { position: relative; z-index: 2; background: var(--blanc); }
  .tuile .menu-suivi__choix { padding: .7rem .7rem; font-size: .95rem; }
  .rappel-du-jour .bouton { width: 100%; }
}

/* ======================================================================
   Jeux des quizz (15/10) — le hub « Jouer » de l'accueil d'un quizz, et les
   classements (classement.php). Les jeux eux-mêmes : assets/css/jeux.css.
   ====================================================================== */
.jouer { margin: 1.6rem 0; padding: 1.2rem 1.3rem 1.3rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 18px; box-shadow: var(--ombre-drive); scroll-margin-top: 90px; }
.jouer__haut { display: grid; gap: .2rem; margin-bottom: 1rem; }
.jouer__titre { display: flex; align-items: center; gap: .5rem; margin: 0; font-size: 1.25rem; }
.jouer__titre .icone { color: var(--teinte, var(--cyan)); }
.jouer__texte { margin: 0; max-width: 60ch; color: var(--encre-douce); font-size: .92rem; line-height: 1.5; }
.jouer__reprise { margin: 0 0 1rem; }
.jouer__grille { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .7rem; }
.jeu-tuile { display: grid; }
.jeu-tuile form { display: grid; }
.jeu-tuile__bouton {
  width: 100%; display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "icone nom" "icone texte" "pied pied";
  align-content: start; gap: .15rem .75rem; padding: .9rem 1rem; text-align: left; font: inherit; color: inherit;
  background: var(--papier); border: 1px solid var(--trait); border-radius: 14px;
}
button.jeu-tuile__bouton { cursor: pointer; transition: border-color .15s, background-color .15s, transform .15s, box-shadow .15s; }
button.jeu-tuile__bouton:hover { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--cyan-pale)); transform: translateY(-2px); box-shadow: var(--ombre-drive); }
button.jeu-tuile__bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.jeu-tuile__icone { grid-area: icone; width: 2.7rem; height: 2.7rem; border-radius: 12px 12px 4px 12px; display: grid; place-items: center; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.jeu-tuile__icone .icone { width: 1.45rem; height: 1.45rem; }
.jeu-tuile__nom { grid-area: nom; align-self: end; font: 700 1rem/1.25 var(--titre); }
.jeu-tuile__texte { grid-area: texte; font-size: .86rem; line-height: 1.4; color: var(--encre-douce); }
.jeu-tuile__pied, .jeu-tuile__manque, .jeu-tuile__ajout { grid-column: 1 / -1; margin-top: .55rem; font-size: .8rem; line-height: 1.4; }
.jeu-tuile__pied { color: var(--encre-douce); font-weight: 600; }
.jeu-tuile--vide .jeu-tuile__bouton { background: none; border-style: dashed; }
.jeu-tuile--vide .jeu-tuile__icone { background: var(--jauge-fond); color: var(--encre-douce); }
.jeu-tuile--vide .jeu-tuile__nom { color: var(--encre-douce); }
.jeu-tuile__manque { color: var(--encre-douce); }
.jeu-tuile__ajout { justify-self: start; display: inline-flex; align-items: center; gap: .3rem; font-weight: 700; color: var(--lien); text-decoration: none; }
.jeu-tuile__ajout:hover { text-decoration: underline; }
.jeu-tuile__ajout .icone { width: 1rem; height: 1rem; }
@media (max-width: 860px) {
  .jouer__grille { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .jouer { padding: 1rem .8rem 1rem; border-radius: 16px; }
  .jouer__grille { gap: .5rem; }
  .jeu-tuile__bouton { grid-template-columns: minmax(0, 1fr); grid-template-areas: "icone" "nom" "texte" "pied"; gap: .2rem; padding: .8rem .75rem; }
  .jeu-tuile__icone { margin-bottom: .3rem; width: 2.4rem; height: 2.4rem; }
  .jeu-tuile__texte { font-size: .8rem; }
}

/* ---- éditeur de questions : le lien vers les classements ---- */
.editeur__classement {
  display: flex; gap: .65rem; align-items: flex-start; margin: 0; max-width: none;
  font-size: .87rem; color: var(--encre-douce); background: var(--papier);
  border: 1px solid var(--trait); border-radius: 12px; padding: .7rem .9rem;
}
.editeur__classement .icone { flex: none; width: 1.3rem; height: 1.3rem; color: var(--teinte, var(--cyan)); margin-top: .05rem; }

/* ---- classements : la liste ---- */
.classements-liste { list-style: none; margin: 1rem 0 0; padding: 0; display: grid; gap: 1rem; }
.classement-fiche { padding: 1rem 1.1rem 1.1rem; background: var(--blanc); border: 1px solid var(--trait); border-top: 5px solid var(--teinte, var(--cyan)); border-radius: 6px 6px 16px 16px; box-shadow: var(--ombre-drive); scroll-margin-top: 90px; }
.classement-fiche:target { outline: 3px solid var(--ambre); outline-offset: 3px; }
.classement-fiche__haut { display: flex; align-items: flex-start; gap: .8rem; flex-wrap: wrap; }
.classement-fiche__icone { flex: none; width: 2.4rem; height: 2.4rem; border-radius: 10px; display: grid; place-items: center; background: var(--teinte-pale); color: var(--teinte, var(--cyan)); }
.classement-fiche__titre { flex: 1 1 14rem; min-width: 0; }
.classement-fiche__titre h2 { margin: 0; font-size: 1.1rem; }
.classement-fiche__titre p { margin: .15rem 0 0; font-size: .85rem; color: var(--encre-douce); }
.classement-fiche__groupes { list-style: none; margin: .9rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); gap: .6rem; }
.classement-groupe { display: grid; align-content: start; gap: .35rem; padding: .7rem .8rem; border-radius: 12px; background: var(--papier); border: 1px solid var(--trait); }
.classement-groupe__photo { width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover; }
.classement-groupe__nom { margin: 0; font-size: .95rem; }
.classement-groupe__nom span { font-size: .8rem; color: var(--encre-douce); }
.classement-groupe__elements { margin: 0; padding-left: 1.1rem; font-size: .88rem; line-height: 1.45; }
.classement-groupe__image { display: block; max-width: 6rem; max-height: 4rem; border-radius: 6px; margin: .2rem 0; }
.classement-groupe__vide { margin: 0; font-size: .85rem; color: var(--encre-douce); font-style: italic; }

/* ---- classements : l'éditeur ---- */
.classement-editeur { display: grid; gap: 1.1rem; max-width: 52rem; }
.classement-editeur__titre { margin: 0; font-size: 1.4rem; }
.natures { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .6rem; border: 0; padding: 0; margin: 0; }
.natures legend { margin-bottom: .5rem; }
.nature-choix { display: grid; cursor: pointer; }
.nature-choix input { position: absolute; opacity: 0; pointer-events: none; }
.nature-choix__carte { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .15rem .6rem; align-content: start; height: 100%; padding: .8rem .9rem; border-radius: 14px; border: 1.5px solid var(--trait); background: var(--blanc); }
.nature-choix__carte .icone { grid-row: span 2; width: 1.6rem; height: 1.6rem; color: var(--teinte, var(--cyan)); }
.nature-choix__carte strong { font: 700 .95rem/1.3 var(--titre); }
.nature-choix__carte small { font-size: .82rem; line-height: 1.4; color: var(--encre-douce); }
.nature-choix input:checked + .nature-choix__carte { border-color: var(--teinte, var(--cyan)); box-shadow: 0 0 0 2px var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--cyan-pale)); }
.nature-choix input:focus-visible + .nature-choix__carte { outline: 3px solid var(--ambre); outline-offset: 2px; }
.si-personnages, .si-categories { display: none; }
.classement-editeur:has(input[name="nature"][value="personnages"]:checked) .si-personnages,
.classement-editeur:has(input[name="nature"][value="categories"]:checked) .si-categories { display: inline; }
.groupes-editeur { display: grid; gap: .9rem; }
.groupe-editeur { margin: 0; padding: .9rem 1rem 1rem; border: 1px solid var(--trait); border-left: 5px solid var(--teinte, var(--cyan)); border-radius: 12px; background: var(--blanc); }
.groupe-editeur__titre { padding: 0 .3rem; font: 700 .8rem var(--titre); letter-spacing: .06em; text-transform: uppercase; color: var(--encre-douce); }
.groupe-editeur__haut { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) auto; gap: .6rem; align-items: end; }
.groupe-editeur__haut .champ { margin: 0; }
.groupe-editeur__haut .image-champ { align-self: end; }
.groupe-editeur__sous-titre { margin: .9rem 0 .4rem; font-size: .82rem; font-weight: 700; color: var(--encre-douce); }
.el-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: .45rem; }
.el-ligne { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .3rem .4rem; align-items: start; padding: .45rem .5rem; border-radius: 10px; background: var(--papier); border: 1px solid var(--trait); }
.el-ligne__contenu { display: flex; align-items: flex-start; gap: .4rem; min-width: 0; }
.el-ligne__texte { flex: 1; min-width: 0; min-height: 2.4rem; resize: vertical; }
.el-ligne__retirer { width: 2.2rem; height: 2.2rem; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%; background: none; color: var(--encre-douce); cursor: pointer; }
.el-ligne__retirer:hover { background: var(--faux-fond); color: var(--faux); }
.el-ligne__retirer[hidden] { display: none; }
.el-ligne__justif { grid-column: 1 / -1; font-size: .85rem; }
.el-ligne__justif summary { cursor: pointer; color: var(--lien); font-weight: 600; }
.el-ligne__justif summary span { font-weight: 400; color: var(--encre-douce); }
.el-ligne__justif textarea { width: 100%; margin-top: .35rem; }
.groupe-editeur__pied { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem; margin-top: .5rem; }
.groupe-editeur__pied [hidden] { display: none; }
.groupes-editeur__ajout { justify-self: start; }
.classement-editeur__aide { margin: -.4rem 0 0; }
@media (max-width: 640px) {
  .natures { grid-template-columns: minmax(0, 1fr); }
  .groupe-editeur { padding: .8rem .7rem .9rem; }
  .groupe-editeur__haut { grid-template-columns: minmax(0, 1fr); }
  .el-ligne__contenu { flex-wrap: wrap; }
}
.el-ligne textarea {
  font: inherit; font-size: .95rem; line-height: 1.45; color: var(--encre);
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 8px; padding: .5rem .65rem;
}
.el-ligne textarea:focus { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); outline-offset: 0; }
.classement-editeur .champ.editeur__bloc { margin: 0; }

/* ======================================================================
   Cartes recto / verso : la pile (15/10, maquette A « Pile à balayer »).
   La carte du dessus, deux cartes dessous ; avec drive.js (.est-3d) elle se
   retourne en 3D et, retournée, se balaie (tampons « Je savais » / « À revoir »).
   ====================================================================== */
.pile { max-width: 34rem; }
.pile__tas { position: relative; padding-bottom: 26px; }
.pile__dessous { position: absolute; inset: 0 0 26px; border-radius: 6px 6px 18px 18px; background: var(--blanc); border: 1px solid var(--trait); box-shadow: var(--ombre-drive); }
.pile__dessous--1 { transform: translateY(13px) scale(.95); opacity: .9; }
.pile__dessous--2 { transform: translateY(26px) scale(.9); opacity: .7; }
.pile__carte { position: relative; z-index: 2; min-height: 22rem; touch-action: pan-y; -webkit-user-select: none; user-select: none; -webkit-tap-highlight-color: transparent; }
.pile__carte:hover { transform: none; }
.pile .carte-apprendre__face { min-height: 19rem; }
.pile__rappel { display: block; padding-bottom: .55rem; margin-bottom: .2rem; border-bottom: 1px dashed var(--teinte-trait, var(--trait)); font: 700 .85rem var(--titre); color: var(--encre-douce); text-align: center; }
.pile__tampon {
  position: absolute; top: 1.4rem; z-index: 6; padding: .3rem .7rem; border-radius: 8px; border: 3px solid; background: var(--blanc);
  font: 700 .95rem var(--titre); text-transform: uppercase; letter-spacing: .04em; opacity: 0; transition: opacity .1s; pointer-events: none;
}
.pile__tampon--ok { left: 1.2rem; color: var(--juste); border-color: var(--jauge-juste); transform: rotate(-12deg); }
.pile__tampon--ko { right: 1.2rem; color: var(--faux); border-color: var(--jauge-fausse); transform: rotate(12deg); }
.pile.vise-ok .pile__tampon--ok, .pile.vise-ko .pile__tampon--ko { opacity: 1; }
/* 3D (drive.js) : les deux faces dans la même case, dos à dos. */
.pile.est-3d .pile__carte { padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none; perspective: 1400px; transition: transform .35s cubic-bezier(.2, .8, .3, 1), opacity .35s; }
.pile.est-3d .pile__int { display: grid; transform-style: preserve-3d; transition: transform .55s cubic-bezier(.3, .7, .25, 1.15); }
.pile.est-3d .carte-apprendre__face {
  grid-area: 1 / 1; display: flex; padding: 1.3rem 1.5rem 1.1rem; min-height: 22rem;
  background: var(--blanc); border: 1px solid var(--trait); border-top: 5px solid var(--teinte, var(--cyan)); border-radius: 6px 6px 18px 18px; box-shadow: var(--ombre-drive);
  -webkit-backface-visibility: hidden; backface-visibility: hidden;
}
.pile.est-3d .carte-apprendre__verso { transform: rotateY(180deg); background: var(--teinte-pale, var(--blanc)); border-top-color: var(--teinte-trait, var(--trait)); }
.pile.est-3d.est-retournee .pile__int { transform: rotateY(180deg); }
.pile.est-tenue .pile__carte { transition: none; cursor: grabbing; }
.pile.sort-droite .pile__carte { transform: translate(140%, 30px) rotate(22deg); opacity: 0; }
.pile.sort-gauche .pile__carte { transform: translate(-140%, 30px) rotate(-22deg); opacity: 0; }
.pile .carte-apprendre__face[hidden] { display: none; }
.pile.est-3d .carte-apprendre__face[hidden] { display: flex; }
.pile__consigne-balayer[hidden] { display: none !important; }
/* La zone des réponses : « Retourner », puis ✗ ↶ ✓ (ou les quatre notes). */
.pile__zone { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: center; gap: .9rem 1.4rem; min-height: 6rem; margin-top: .4rem; }
.pile__zone > form { display: contents; }
.pile__zone > form[hidden] { display: none; }
.pile__retourner { order: 3; flex: 1 1 14rem; max-width: 22rem; min-height: 3.3rem; justify-content: center; font-size: 1rem; }
.pile__retourner[hidden] { display: none; }
.pile__ronds { margin: 0; }
.pile__rond { display: grid; justify-items: center; gap: .25rem; padding: 0; border: 0; background: none; cursor: pointer; font: 600 .82rem var(--texte); color: var(--encre-douce); }
.pile__rond kbd { display: none; }
.pile__disque { width: 4.1rem; height: 4.1rem; border-radius: 50%; display: grid; place-items: center; background: var(--blanc); border: 2px solid; box-shadow: var(--ombre-drive); transition: transform .12s; }
.pile__disque .icone { width: 1.6rem; height: 1.6rem; stroke-width: 2.4; }
.pile__rond:active .pile__disque { transform: scale(.93); }
.pile__rond:hover .pile__disque { box-shadow: 0 0 0 4px var(--papier), var(--ombre-drive); }
.pile__rond--ko { order: 1; }
.pile__rond--ko .pile__disque { color: var(--jauge-fausse); border-color: var(--faux-trait); }
.pile__rond--annuler { order: 2; }
.pile__rond--annuler .pile__disque { width: 3rem; height: 3rem; margin-top: .55rem; color: var(--encre-douce); border-color: var(--trait); }
.pile__rond--annuler .pile__disque .icone { width: 1.2rem; height: 1.2rem; stroke-width: 1.9; }
.pile__rond--ok { order: 3; }
.pile__rond--ok .pile__disque { color: var(--jauge-juste); border-color: var(--juste-trait); }
.pile__zone--notes > .carte-apprendre__reponses--notes { display: grid; order: 3; flex: 1 1 100%; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .45rem; margin: 0; }
.pile__zone--notes > .carte-apprendre__reponses--notes[hidden] { display: none; }
.pile__zone--notes .note-encore, .pile__zone--notes .note-difficile, .pile__zone--notes .note-bien, .pile__zone--notes .note-facile { min-width: 0; min-height: 4rem; border-radius: 12px; }
@media (hover: hover) and (pointer: fine) {
  .pile__rond kbd { display: inline-block; margin-left: .3rem; padding: .05rem .35rem; border-radius: 4px; font: 600 .7rem var(--texte); background: var(--papier); color: var(--encre-douce); border: 1px solid var(--trait); }
}
@media (max-width: 640px) {
  .pile__carte, .pile.est-3d .carte-apprendre__face { min-height: 19rem; }
  .pile.est-3d .carte-apprendre__face { padding: 1rem 1.1rem .9rem; }
  .pile__zone--notes > .carte-apprendre__reponses--notes .bouton { padding: .5rem .2rem; font-size: .85rem; }
}
.pile .pile__carte, .pile .pile__carte:visited { color: var(--encre); }
.pile + .carte-apprendre__aide { margin-left: auto; margin-right: auto; }
.el-ligne .image-champ__vignette { max-height: 4.5rem; max-width: 7rem; }
.el-ligne__justif textarea::placeholder { color: var(--encre-douce); }

/* ==========================================================================
   Module de révision (18/10) — quizz.php, d'après les maquettes validées par
   Matthias : trois grandes tuiles (Jouer, Ajouter, S'entraîner) qui ouvrent
   leur tiroir juste en dessous, puis les chapitres en tuiles. Préfixe rv-.
   La couleur du cours (--teinte) pour les aplats, des tons calmes.
   ========================================================================== */
.rv-module { --teinte-encre: color-mix(in srgb, var(--teinte, var(--cyan)) 72%, var(--encre)); }
form.forme-bouton { display: contents; }
.rv-progres { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem 1rem; margin: -.4rem 0 1.2rem; }
.rv-progres__jauge { flex: 1 1 14rem; max-width: 26rem; }
.rv-progres__texte { margin: 0; font-size: .9rem; color: var(--encre-douce); }
.rv-progres__texte strong { color: var(--encre); }
.rv-reprise { margin: 0 0 1.2rem; }

/* ligne 1 : les trois grandes tuiles */
.rv-trois { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin: 0 0 4px; }
.rv-grande {
  position: relative; display: flex; align-items: center; gap: 16px; min-height: 112px; padding: 18px 20px;
  background: var(--blanc); border: 1px solid var(--teinte-trait, var(--trait)); border-radius: 16px; box-shadow: var(--ombre-drive);
  color: var(--encre); text-align: left; text-decoration: none;
  transition: background-color .18s ease, transform .16s ease, box-shadow .18s ease, color .18s ease;
}
.rv-grande:hover { color: var(--encre); transform: translateY(-2px); box-shadow: 0 2px 6px rgba(16, 36, 58, .08), 0 18px 40px rgba(16, 36, 58, .14); }
.rv-grande__icone { flex: none; width: 60px; height: 60px; border-radius: 16px; display: grid; place-items: center; background: var(--teinte-pale); border: 1px solid var(--teinte-trait, var(--trait)); color: var(--teinte-encre); }
.rv-grande__ic { width: 30px; height: 30px; }
.rv-grande__textes { flex: 1; min-width: 0; display: grid; gap: 3px; }
.rv-grande__titre { font: 700 1.2rem/1.2 var(--titre); }
.rv-grande__sous { font-size: .85rem; line-height: 1.4; color: var(--encre-douce); }
.rv-grande__chevron { flex: none; color: var(--encre-douce); transition: transform .22s ease; }
.rv-grande.est-ouverte { background: var(--teinte); border-color: var(--teinte); color: var(--teinte-texte); }
.rv-grande.est-ouverte:hover { color: var(--teinte-texte); }
.rv-grande.est-ouverte .rv-grande__icone { background: rgba(255, 255, 255, .18); border-color: rgba(255, 255, 255, .35); color: var(--teinte-texte); }
.rv-grande.est-ouverte .rv-grande__sous, .rv-grande.est-ouverte .rv-grande__chevron { color: var(--teinte-texte); opacity: .88; }
.rv-grande.est-ouverte .rv-grande__chevron { transform: rotate(180deg); }
.rv-grande.est-ouverte::after { content: ""; position: absolute; left: 50%; bottom: -13px; width: 24px; height: 24px; margin-left: -12px; background: var(--teinte); transform: rotate(45deg); border-radius: 0 0 5px 0; }

/* ligne 2 : le tiroir */
.rv-tiroir {
  position: relative; margin-top: 18px; padding: 22px 24px 24px; scroll-margin-top: 90px;
  background: var(--blanc); border: 2px solid var(--teinte, var(--cyan)); border-radius: 18px; box-shadow: var(--ombre-drive);
  display: grid; gap: 18px; animation: rv-ouvre .26s cubic-bezier(.2, .8, .3, 1);
}
@keyframes rv-ouvre { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
.rv-tiroir__tete { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; }
.rv-tiroir__titre { margin: 0; font-size: 1.15rem; }
.rv-tiroir__aide { margin: 0; font-size: .88rem; color: var(--encre-douce); }
.rv-vide { margin: 0; color: var(--encre-douce); }
.rv-etape { display: grid; gap: 10px; margin: 0; }
.rv-etape__titre { display: flex; align-items: center; gap: 9px; margin: 0; font: 700 .8rem var(--titre); letter-spacing: .06em; text-transform: uppercase; color: var(--encre-douce); }
.rv-etape__num { width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .75rem var(--titre); letter-spacing: 0; }
.rv-etape__note { margin: 0; font-size: .8rem; color: var(--encre-douce); }

.rv-portee { display: flex; flex-wrap: wrap; gap: 8px; }
.rv-puce {
  display: inline-flex; align-items: center; gap: 7px; min-height: 40px; padding: 0 14px 0 6px;
  border-radius: 99px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre);
  font: 600 .88rem var(--texte); white-space: nowrap; text-decoration: none;
}
.rv-puce:hover { color: var(--encre); border-color: var(--teinte, var(--cyan)); }
.rv-puce__n { min-width: 28px; height: 28px; padding: 0 6px; border-radius: 99px; display: grid; place-items: center; background: var(--teinte-pale); color: var(--teinte-encre); font: 700 .78rem var(--titre); }
.rv-puce__auto { padding: 1px 7px; border-radius: 99px; font: 700 .62rem var(--titre); letter-spacing: .05em; text-transform: uppercase; background: var(--papier); color: var(--encre-douce); border: 1px solid var(--trait); }
.rv-puce.est-choisie { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-puce.est-choisie .rv-puce__n { background: rgba(255, 255, 255, .22); color: var(--teinte-texte, #fff); }
.rv-puce.est-choisie .rv-puce__auto { background: rgba(255, 255, 255, .2); color: var(--teinte-texte, #fff); border-color: transparent; }

/* Jouer : deux grands lancements — Tout enchaîner, Mes erreurs (tons doux, 18/10) */
.rv-lancer { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.rv-vedette {
  position: relative; display: flex; flex-wrap: wrap; align-items: flex-start; gap: 16px 18px; min-height: 172px; padding: 20px 22px; width: 100%;
  border-radius: 14px; background: var(--teinte-pale); border: 1px solid var(--teinte-trait, var(--trait)); color: var(--encre);
  font: inherit; text-align: left; cursor: pointer; transition: transform .16s ease, box-shadow .16s ease;
}
.rv-vedette:hover { transform: translateY(-2px); box-shadow: var(--ombre-drive); }
.rv-vedette__icone { flex: none; width: 56px; height: 56px; border-radius: 16px; display: grid; place-items: center; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-vedette__textes { flex: 1 1 200px; min-width: 0; display: grid; gap: 3px; }
.rv-vedette__titre { font: 700 1.15rem var(--titre); }
.rv-vedette__sous { font-size: .88rem; line-height: 1.45; color: var(--encre-douce); }
.rv-vedette__pied { position: relative; width: 100%; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; margin-top: auto; }
.rv-vedette__chaine { display: flex; flex-wrap: wrap; gap: 6px; }
.rv-vedette__chaine span { width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; background: var(--blanc); border: 1px solid var(--teinte-trait, var(--trait)); color: var(--teinte-encre); }
.rv-vedette__go { flex: none; display: inline-flex; align-items: center; gap: 7px; min-height: 46px; padding: 0 20px; border-radius: 99px; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .92rem var(--titre); }
.rv-vedette__note { font-size: .84rem; color: var(--encre-douce); }
.rv-vedette--erreurs { --erreur: #a80039; background: color-mix(in srgb, var(--erreur) 7%, var(--blanc)); border-color: color-mix(in srgb, var(--erreur) 26%, var(--blanc)); }
.rv-vedette--erreurs .rv-vedette__icone, .rv-vedette--erreurs .rv-vedette__go { background: var(--erreur); color: #fff; }
.rv-vedette__compte { flex: none; display: grid; justify-items: center; line-height: 1; padding: 8px 14px; border-radius: 14px; background: var(--blanc); border: 1px solid color-mix(in srgb, var(--erreur, var(--teinte)) 26%, var(--blanc)); }
.rv-vedette__compte b { font: 700 2.1rem/1 var(--titre); color: var(--erreur, var(--teinte-encre)); }
.rv-vedette__compte small { margin-top: 4px; font-size: .75rem; font-weight: 700; letter-spacing: .04em; color: var(--encre-douce); }
.rv-vedette.est-vide { cursor: default; min-height: 0; background: var(--papier); border: 1px dashed var(--trait); }
.rv-vedette.est-vide:hover { transform: none; box-shadow: none; }
.rv-vedette.est-vide .rv-vedette__icone { background: var(--juste); color: #fff; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .rv-vedette--erreurs { --erreur: #ff8fae; }
  :root:not([data-theme="light"]) .rv-vedette--erreurs .rv-vedette__icone, :root:not([data-theme="light"]) .rv-vedette--erreurs .rv-vedette__go { color: #2a0612; }
}
:root[data-theme="dark"] .rv-vedette--erreurs { --erreur: #ff8fae; }
:root[data-theme="dark"] .rv-vedette--erreurs .rv-vedette__icone, :root[data-theme="dark"] .rv-vedette--erreurs .rv-vedette__go { color: #2a0612; }

/* … et en petit : un seul jeu, l'ambiance */
.rv-ligne { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.rv-ligne__lib { flex: none; margin-right: 4px; font: 700 .8rem var(--titre); letter-spacing: .04em; color: var(--encre-douce); white-space: nowrap; }
.rv-mini {
  display: inline-flex; align-items: center; gap: 6px; min-height: 38px; padding: 0 12px; border-radius: 99px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: 600 .84rem var(--texte); white-space: nowrap; cursor: pointer;
}
.rv-mini:hover { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale); }
.rv-mini.est-vide { opacity: .5; border-style: dashed; cursor: help; }
.rv-mini.est-vide:hover { border-color: var(--trait); background: var(--blanc); }
.rv-amb {
  display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 12px 0 5px; border-radius: 10px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: 600 .84rem var(--texte); cursor: pointer; white-space: nowrap;
}
.rv-amb.est-choisie { border: 2px solid var(--teinte, var(--cyan)); padding: 0 11px 0 4px; }
.amb-mini__apercu { flex: none; width: 36px; height: 28px; border-radius: 6px; }
.amb-mini__apercu--simple { background: linear-gradient(var(--cyan-fonce), var(--cyan-fonce)) 50% 74% / 60% 5px no-repeat, linear-gradient(var(--teinte, var(--cyan)), var(--teinte, var(--cyan))) top / 100% 4px no-repeat, linear-gradient(var(--trait), var(--trait)) 22% 40% / 56% 3px no-repeat, var(--blanc); box-shadow: inset 0 0 0 1px var(--trait); }
.amb-mini__apercu--cosmos { background: radial-gradient(1px 1px at 20% 30%, #fff 50%, transparent 51%), radial-gradient(1px 1px at 72% 62%, #fff 50%, transparent 51%), radial-gradient(1.2px 1.2px at 46% 78%, #cfe6ff 50%, transparent 51%), radial-gradient(ellipse at 20% 20%, rgba(98, 70, 200, .6), transparent 60%), #03040b; box-shadow: inset 0 0 0 1px rgba(125, 227, 255, .55); }
.amb-mini__apercu--arcade { background: repeating-linear-gradient(90deg, rgba(255, 61, 154, .8) 0 1px, transparent 1px 7px) 0 100% / 100% 38% no-repeat, linear-gradient(#0b0420 55%, #5b0f63); box-shadow: inset 0 0 0 1px #2de2ff; }
.amb-mini__apercu--plateau { background: radial-gradient(ellipse 30% 25% at 30% 35%, rgba(60, 40, 15, .5), transparent 70%), radial-gradient(#3d6a4b, #19331f); box-shadow: inset 0 0 0 3px #6b4022; }
.amb-mini__apercu--foret { background: radial-gradient(circle at 70% 58%, #a6f3df 0 1.2px, transparent 2.4px), linear-gradient(100deg, transparent 16%, #020403 17% 22%, transparent 23% 75%, #020403 76% 82%, transparent 83%), radial-gradient(ellipse at 58% 0%, rgba(200, 225, 220, .35), transparent 60%), linear-gradient(#0b1513, #030605); box-shadow: inset 0 0 0 1px rgba(201, 164, 101, .55); }

/* tuiles d'options (Ajouter, S'entraîner) */
.rv-tuiles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.rv-tuiles--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.rv-tuiles--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.rv-tuile {
  position: relative; display: grid; align-content: start; gap: 5px; min-height: 150px; padding: 15px 15px 14px; width: 100%;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px;
  color: var(--encre); font: inherit; text-decoration: none; text-align: left; cursor: pointer;
  transition: border-color .16s ease, transform .16s ease, box-shadow .16s ease;
}
.rv-tuile:hover { color: var(--encre); border-color: var(--teinte, var(--cyan)); transform: translateY(-2px); box-shadow: var(--ombre-drive); }
.rv-tuile__icone { width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; margin-bottom: 4px; background: var(--teinte-pale); color: var(--teinte-encre); border: 1px solid var(--teinte-trait, var(--trait)); }
.rv-tuile__nom { font: 700 .92rem/1.3 var(--titre); }
.rv-tuile__texte { font-size: .8rem; line-height: 1.42; color: var(--encre-douce); }
.rv-tuile__nourrit { margin-top: auto; padding-top: 8px; display: flex; flex-wrap: wrap; gap: 4px; }
.rv-tuile__nourrit span { padding: 2px 7px; border-radius: 99px; font-size: .7rem; font-weight: 700; background: var(--papier); border: 1px solid var(--trait); color: var(--encre-douce); }
.rv-tuile__nb { position: absolute; top: 13px; right: 13px; min-width: 28px; height: 28px; padding: 0 8px; border-radius: 99px; display: grid; place-items: center; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .8rem var(--titre); }
.rv-tuile__manque { margin-top: auto; padding-top: 8px; font-size: .78rem; line-height: 1.35; color: var(--encre-douce); }
.rv-tuile.est-vide { cursor: default; background: var(--papier); border-style: dashed; }
.rv-tuile.est-vide:hover { transform: none; box-shadow: none; border-color: var(--trait); }
.rv-tuile.est-vide .rv-tuile__icone { background: transparent; color: var(--encre-douce); border-color: var(--trait); }
.rv-tuile.est-vide .rv-tuile__nom, .rv-tuile.est-vide .rv-tuile__texte { opacity: .7; }
.rv-choix-deux { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.rv-choix { display: flex; align-items: flex-start; gap: 14px; padding: 16px 18px; min-height: 96px; border-radius: 14px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); text-decoration: none; }
.rv-choix:hover { color: var(--encre); border-color: var(--teinte, var(--cyan)); }
.rv-choix.est-choisie { border: 2px solid var(--teinte, var(--cyan)); background: var(--teinte-pale); }
.rv-choix__textes { display: grid; gap: 4px; }
.rv-choix__titre { font: 700 1rem var(--titre); }
.rv-choix__sous { font-size: .84rem; line-height: 1.45; color: var(--encre-douce); }
.rv-form-chapitre { display: grid; gap: 14px; }
.rv-form-chapitre__champs { display: grid; grid-template-columns: 110px minmax(0, 1fr); gap: 12px 14px; align-items: end; }
.rv-form-chapitre__large { grid-column: 1 / -1; }
.rv-form-chapitre__pied { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.rv-attente { display: flex; align-items: center; gap: 10px; margin: 0; padding: 10px 14px; border-radius: 10px; background: var(--ambre-pale); border: 1px solid var(--puce-bord); color: var(--puce-texte); font-size: .86rem; }
.rv-tailles { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0; padding: 0; border: 0; }
.rv-tailles__lib { float: left; margin-right: 4px; padding: 0; font: 700 .84rem var(--titre); }
.rv-taille { position: relative; }
.rv-taille input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.rv-taille span { display: grid; place-items: center; min-width: 52px; min-height: 40px; padding: 0 12px; border-radius: 10px; border: 1px solid var(--trait); background: var(--blanc); font: 700 .86rem var(--titre); cursor: pointer; }
.rv-taille input:checked + span { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.rv-taille input:focus-visible + span { outline: 3px solid var(--ambre); outline-offset: 2px; }

/* les chapitres */
.rv-chapitres-tete { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; margin: 2.2rem 0 .9rem; scroll-margin-top: 90px; }
.rv-chapitres-tete h2 { margin: 0; font-size: 1.35rem; }
.rv-chapitres-tete p { margin: 0; font-size: .88rem; color: var(--encre-douce); }
.rv-chapitres { list-style: none; margin: 0 0 2rem; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.rv-chapitres > li { display: flex; }
.rv-chapitres__vide { grid-column: 1 / -1; }
.rv-chap {
  flex: 1; position: relative; display: grid; align-content: start; gap: 12px; padding: 0 0 16px; scroll-margin-top: 90px;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; overflow: hidden;
  transition: box-shadow .18s ease, transform .16s ease, border-color .18s ease;
}
.rv-chap:hover { box-shadow: var(--ombre-drive); transform: translateY(-2px); border-color: var(--teinte-trait, var(--trait)); }
.rv-chap__haut { display: flex; align-items: flex-start; gap: 14px; padding: 16px 18px 0; }
.rv-chap__num { flex: none; position: relative; width: 58px; height: 64px; display: grid; place-items: center; border-radius: 12px 12px 12px 4px; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-chap__num b { margin-top: 10px; font: 700 1.75rem/1 var(--titre); }
.rv-chap__num small { position: absolute; top: 6px; left: 0; right: 0; text-align: center; font: 700 .55rem var(--titre); letter-spacing: .12em; text-transform: uppercase; opacity: .85; }
.rv-chap__textes { flex: 1; min-width: 0; display: grid; gap: 4px; }
.rv-chap__nom { margin: 0; font: 700 1.02rem/1.28 var(--titre); }
.rv-chap__nom a { color: var(--encre); text-decoration: none; }
.rv-chap__nom a:hover { color: var(--lien); text-decoration: underline; }
.rv-chap__desc { margin: 0; font-size: .84rem; line-height: 1.45; color: var(--encre-douce); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.rv-chap__contenu { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 18px; }
.rv-chap__contenu > span, .rv-chap__signal { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px 3px 7px; border-radius: 99px; background: var(--papier); border: 1px solid var(--trait); font-size: .78rem; font-weight: 700; color: var(--encre-douce); text-decoration: none; }
.rv-chap__signal { background: var(--grenat-pale); border-color: var(--grenat-bord); color: var(--grenat-texte); }
.rv-chap__vide { font-weight: 600 !important; }
.rv-chap__progres { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 0 18px; font-size: .78rem; color: var(--encre-douce); }
.rv-chap__actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; padding: 4px 16px 0; }
.rv-chap__actions--deux { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.rv-chap__action {
  display: inline-flex; align-items: center; justify-content: center; gap: 4px; min-width: 0; min-height: 42px; padding: 0 4px;
  border-radius: 10px; border: 1px solid var(--teinte-trait, var(--trait)); background: var(--teinte-pale); color: var(--encre);
  font: 700 .74rem var(--titre); white-space: nowrap; text-decoration: none; overflow: hidden;
}
.rv-chap__action:hover { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-chap__gestion { display: flex; flex-wrap: wrap; gap: 4px 12px; padding: 0 18px; }
.rv-chap__gestion form { display: contents; }
.rv-chap.est-cible { border: 2px solid var(--teinte, var(--cyan)); }
.rv-chap--tous { background: var(--teinte-pale); border-color: var(--teinte-trait, var(--trait)); }
.rv-chap--tous .rv-chap__num { background: var(--blanc); color: var(--teinte-encre); border: 2px dashed var(--teinte, var(--cyan)); }
.rv-chap__auto { justify-self: start; padding: 2px 8px; border-radius: 99px; font: 700 .65rem var(--titre); letter-spacing: .05em; text-transform: uppercase; background: var(--blanc); color: var(--encre-douce); border: 1px solid var(--trait); }
.rv-chap__regle { margin: 0 18px; padding: 9px 12px; border-radius: 10px; background: var(--blanc); border: 1px dashed var(--teinte-trait, var(--trait)); font-size: .8rem; line-height: 1.45; color: var(--encre-douce); }
.rv-chap--attente { border: 2px dashed var(--teinte-trait, var(--trait)); background: var(--papier); }
.rv-chap--attente:hover { transform: none; box-shadow: none; }
.rv-chap--attente .rv-chap__num { background: transparent; color: var(--teinte-encre); border: 2px dashed var(--teinte, var(--cyan)); }
.rv-chap__statut { margin: 0 18px; }
.rv-chap__decision { display: grid; gap: 8px; padding: 0 18px; }
.rv-chap__decision form { margin: 0; }
.rv-refus { display: flex; flex-wrap: wrap; gap: 8px; }
.rv-refus__motif { flex: 1 1 10rem; min-width: 0; min-height: 40px; padding: 6px 10px; border-radius: 8px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: inherit; font-size: .86rem; }

/* le hub « Jouer » de la page d'un chapitre (entrainement.php) */
.jouer__lancer { display: flex; flex-wrap: wrap; gap: .6rem; margin: 0 0 1rem; }

@media (max-width: 900px) {
  .rv-chapitres { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rv-tuiles, .rv-tuiles--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .rv-trois { gap: 8px; }
  .rv-grande { flex-direction: column; justify-content: center; gap: 8px; min-height: 104px; padding: 12px 6px; text-align: center; border-radius: 14px; }
  .rv-grande__icone { width: 46px; height: 46px; border-radius: 13px; }
  .rv-grande__ic { width: 24px; height: 24px; }
  .rv-grande__titre { font-size: .9rem; }
  .rv-grande__sous, .rv-grande__chevron { display: none; }
  .rv-grande.est-ouverte::after { bottom: -11px; width: 20px; height: 20px; margin-left: -10px; }
  .rv-tiroir { padding: 16px 14px 18px; border-radius: 16px; gap: 16px; }
  .rv-portee, .rv-ligne { flex-wrap: nowrap; overflow-x: auto; margin: 0 -14px; padding: 0 14px 4px; scrollbar-width: none; }
  .rv-ligne .rv-etape__note { white-space: nowrap; }
  .rv-lancer { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .rv-vedette { min-height: 0; padding: 16px; gap: 12px; }
  .rv-vedette__go { width: 100%; justify-content: center; }
  .rv-vedette__compte b { font-size: 1.7rem; }
  .rv-choix-deux { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .rv-tuile { min-height: 132px; padding: 13px 12px 12px; }
  .rv-form-chapitre__champs { grid-template-columns: 84px minmax(0, 1fr); }
  .rv-chapitres { grid-template-columns: minmax(0, 1fr); gap: 12px; }
}

/* ================================================================ 18/10 au soir
   Retouches des modules (demandes de Matthias) : amorce des jauges, erreurs
   d'import localisées, sélection multiple, « À faire aujourd'hui » toujours
   visible, module de révision (un soir « d'apprentissage ») mis en avant, prompt IA, derniers ajouts. */

/* La jauge à 0 % montre une petite amorce (drive_jauge) ; elle reprend la
   couleur du premier segment. */
.jauge__amorce { opacity: .9; }

/* Import : une question refusée s'affiche à SA place dans la liste, en rouge. */
.fiche-question--erreur { border: 1px solid var(--grenat-bord); background: var(--grenat-pale); }
.fiche-question__probleme { margin: .2rem 0 0; font-weight: 600; color: var(--grenat-texte); }
.fiche-question__extrait { margin: .35rem 0 0; color: var(--encre-douce); font-size: .92rem; white-space: pre-line; }
.import-erreurs { border: 1px solid var(--grenat-bord); background: var(--grenat-pale); color: var(--grenat-texte); border-radius: 12px; padding: .9rem 1rem; margin: 0 0 1rem; }
.import-erreurs__titre { margin: 0 0 .5rem; font-weight: 600; }
.import-erreurs__titre .icone { width: 1rem; height: 1rem; vertical-align: -.12em; margin-right: .35rem; }
.import-erreurs ul { margin: 0; padding-left: 1.2rem; display: grid; gap: .4rem; }
.import-erreurs a { color: inherit; }
.import__chapitre { display: flex; align-items: center; gap: .5rem; margin: 1.4rem 0 .6rem; font-size: 1.05rem; }
.import__chapitre-nombre { font-weight: 400; color: var(--encre-douce); font-size: .9rem; }

/* Gestion du module d'auto-évaluation : la sélection multiple (ayants droit). */
.fiche-question__cocher { display: inline-flex; align-items: center; margin-right: .2rem; }
.fiche-question__cocher input { width: 1.25rem; height: 1.25rem; accent-color: var(--lien); cursor: pointer; }
.selection-lot__aide { margin: .4rem 0 .8rem; color: var(--encre-douce); }
.selection-barre {
  position: sticky; bottom: .75rem; z-index: 5;
  display: flex; flex-wrap: wrap; gap: .5rem; align-items: center;
  margin-top: 1rem; padding: .6rem .8rem; border-radius: 14px;
  background: var(--blanc); border: 1px solid var(--trait); box-shadow: var(--ombre-drive);
}
.selection-barre__espace { flex: 1; }
.bouton.est-choisie { box-shadow: inset 0 0 0 2px var(--lien); }

/* « À faire aujourd'hui », vide : UNE tuile grisée, en pointillés, qui félicite
   (18/10 au soir : trois emplacements simulés, c'était laid — retour de Matthias). */
.tuile-fantome {
  min-height: 92px; border-radius: 16px;
  background: var(--papier);
  background: color-mix(in srgb, var(--encre) 5%, var(--papier));
  border: 1.5px dashed var(--trait);
}
.categorie__bravo {
  max-width: none; margin: 0; padding: .9rem 1.2rem;
  display: flex; align-items: center; justify-content: center; gap: .6rem; text-align: center;
  font-weight: 600; color: var(--encre-douce);
}
.categorie__bravo .icone { flex: none; color: var(--accent, var(--lien)); }
@media (max-width: 640px) {
  .categorie__bravo { justify-content: flex-start; text-align: left; }
}

/* Page d'un cours : le module de révision, légèrement plus coloré. */
/* (18/10 au soir, corrigé : la teinte « pâle » est déjà le fond du dossier ouvert —
   la tuile s'y fondait. Elle prend la teinte moyenne, un liseré de la couleur
   vive et l'icône pleine.) */
.sous-dossier--accent {
  background: var(--teinte-moyenne, var(--cyan-pale));
  background: linear-gradient(150deg, var(--teinte-moyenne, var(--cyan-pale)), var(--blanc) 135%);
  border-color: var(--teinte, var(--cyan));
  box-shadow: inset 0 0 0 1px var(--teinte, var(--cyan));
}
.sous-dossier--accent .sous-dossier__icone { background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); border-color: var(--teinte, var(--cyan)); }
.sous-dossier--accent .sous-dossier__detail { color: var(--encre); }

/* Éditeur : « Vos derniers ajouts », sous le formulaire. */
.editeur-ajouts { margin-top: 1.6rem; }
.editeur-ajouts > h2 { display: flex; align-items: center; gap: .5rem; }

/* Prompt IA (prompt-ia.php). */
.prompt-ia { display: grid; gap: .65rem; }
.prompt-ia__etape { display: flex; align-items: center; gap: .55rem; margin: 1.1rem 0 .1rem; font-size: 1.08rem; }
.prompt-ia__aide { margin: 0; color: var(--encre-douce); }
.prompt-ia__texte { width: 100%; box-sizing: border-box; font-size: .85rem; line-height: 1.45; }


/* ================================================================ 18/10 au soir (2)
   Visuel et navigation (demandes de Matthias) : texture du fond, en-tête
   (liseré, actions à droite, cloche et « Mon compte »), fil d'Ariane collant
   en pastilles, accueil (le drive en trois tuiles), codes couleur d'un cours,
   logos du sponsor selon le mode affiché. */

:root {
  --grain: rgba(16, 36, 58, .07);          /* points de la texture du fond */
  --barre-navigateur: #009ee0;             /* liseré de l'en-tête = barre du navigateur */
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --grain: rgba(231, 237, 243, .05); --barre-navigateur: #0b3954; }
}
:root[data-theme="dark"] { --grain: rgba(231, 237, 243, .05); --barre-navigateur: #0b3954; }

/* ---- texture TRÈS légère : un pointillé fin, comme un papier de cahier — les
   bulles et les notifications (fond uni) s'en détachent. Jamais en mode jeu.
   2.44 (25/10, Matthias : « le fond ne bouge pas d'un pixel, seul le contenu défile par-dessus ») :
   le pointillé est posé sur un calque FIXE, derrière tout (body::before) — pas de
   « background-attachment: fixed », que Safari sur iPhone ignore. 100lvh : la plus grande hauteur
   de l'écran, pour qu'aucune bande ne se découvre quand la barre du navigateur se replie. */
body { background-color: var(--papier); }
body::before {
  content: ""; position: fixed; top: 0; left: 0; z-index: -1; pointer-events: none;
  width: 100%; height: 100vh; height: 100lvh;
  background-image: radial-gradient(circle at center, var(--grain) 0 1px, transparent 1.3px);
  background-size: 22px 22px;
}
html.page-jeu body::before, body.corps-jeu::before { content: none; }

/* ---- en-tête : le liseré tout en haut (et la couleur de la barre du navigateur :
   Safari 26 prolonge la couleur de l'élément collé en haut de la page) */
.entete__liseret { height: 4px; background-color: var(--barre-navigateur); }
.entete__actions { display: flex; align-items: center; gap: .5rem; flex: none; }
.entete__actions::before {
  content: ""; width: 1px; height: 1.6rem; background: var(--trait); margin-right: .3rem;
}
.entete .cloche { margin-left: 0; width: 2.4rem; height: 2.4rem; }
.entete .cloche__nombre { border-color: var(--blanc); }
.entete .moi summary { padding: .2rem .75rem .2rem .2rem; gap: .5rem; }
.entete .moi__nom { white-space: nowrap; }
.entete .moi__menu { min-width: 15.5rem; }
.moi__qui { display: flex; align-items: center; gap: .7rem; margin: .35rem .6rem .5rem; padding-bottom: .65rem; border-bottom: 1px solid var(--trait); font-size: .9rem; line-height: 1.35; }
.moi__avatar { flex: none; display: grid; place-items: center; width: 2.6rem; height: 2.6rem; border-radius: 50%; background: var(--role, var(--cyan-fonce)); color: #fff; font: 700 .85rem var(--titre); letter-spacing: .02em; }
.moi__identite { display: grid; gap: .3rem; min-width: 0; }
.moi__nom-complet { overflow-wrap: anywhere; }
@media (max-width: 1080px) {
  .entete__actions { gap: .4rem; }
}
@media (max-width: 640px) {
  .entete__interieur { gap: .6rem; padding-left: 1rem; padding-right: 1rem; }
  .entete .moi__nom { display: none; }
  .entete .moi summary { padding-right: .45rem; }
  .entete .moi summary::after { display: none; }
  .bascule-menu { padding: .5rem .65rem; }
}
@media (max-width: 420px) {
  .bascule-menu__texte { display: none; }
  .marque__sigle { padding: .45rem .5rem; }
}

/* ---- le fil d'Ariane du drive : collé sous l'en-tête, chaque étape en pastille */
.barre-drive {
  position: sticky; top: var(--entete-h, 68px); z-index: 30;
  display: block; margin: -1.4rem -.75rem 1.6rem; padding: .55rem .75rem;
  border-bottom: 0; border-radius: 0 0 14px 14px;
  background: var(--papier);
  box-shadow: 0 1px 0 var(--trait);
}
@supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .barre-drive {
    background: color-mix(in srgb, var(--papier) 82%, transparent);
    -webkit-backdrop-filter: saturate(1.4) blur(10px); backdrop-filter: saturate(1.4) blur(10px);
  }
}
html:has(.barre-drive) { scroll-padding-top: calc(var(--entete-h, 68px) + 4.2rem); }
.fil ol { gap: .35rem .3rem; font-size: .86rem; }
.fil li { gap: .3rem; }
.fil li + li::before {
  content: ""; width: .42rem; height: .42rem; margin: 0 .25rem 0 .05rem;
  border-top: 1.6px solid currentColor; border-right: 1.6px solid currentColor;
  transform: rotate(45deg); opacity: .45; flex: none;
}
.fil__etape {
  display: inline-flex; align-items: center; gap: .4rem; white-space: nowrap; line-height: 1.25;
  padding: .32rem .72rem; border-radius: 9px;
  background: var(--blanc); border: 1px solid var(--trait); color: var(--lien);
  box-shadow: 0 1px 1px rgba(16, 36, 58, .04);
}
.fil a.fil__etape { text-decoration: none; transition: border-color .15s ease, background-color .15s ease; }
.fil a.fil__etape:hover { text-decoration: none; border-color: var(--cyan); background: var(--cyan-pale); color: var(--lien); }
.fil .fil__etape[aria-current] {
  color: var(--encre); font-weight: 600; background: var(--cyan-pale);
  border-color: color-mix(in srgb, var(--cyan) 45%, var(--trait));
}
@media (max-width: 640px) {
  .barre-drive { margin: -1rem -1.5rem 1.3rem; padding: .5rem 1.5rem; border-radius: 0; }
  .fil ol {
    flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch;
    font-size: .84rem;
  }
  .fil ol::-webkit-scrollbar { display: none; }
  .fil li { flex: none; }
}

/* ---- accueil : le drive, en trois tuiles */
.cartes--drive { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); margin-bottom: 1rem; }
.carte--drive {
  background: linear-gradient(180deg, var(--cyan-pale), var(--blanc) 75%);
  border-color: color-mix(in srgb, var(--cyan) 30%, var(--trait));
  border-top: 3px solid var(--cyan);
}
.drive-lien { margin: 0 0 2.5rem; }

/* ---- page d'un cours : les codes couleur, en bas à droite sous « Conseils d'anciens » */
.sous-dossiers__couleurs { grid-column: 1 / -1; justify-content: flex-end; }
.couleurs-cours {
  margin: 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: .35rem .9rem;
  font-size: .8rem; color: var(--encre-douce);
}
.couleurs-cours__titre { font-weight: 600; }
.couleur-code { display: inline-flex; align-items: center; gap: .35rem; white-space: nowrap; }
.couleur-code__pastille {
  width: .95rem; height: .95rem; border-radius: 4px; flex: none;
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--encre) 28%, transparent);
}
.couleur-code__pastille--vive { background: var(--teinte, var(--cyan)); }
.couleur-code__pastille--claire { background: #ffffff; background: color-mix(in srgb, var(--teinte, var(--cyan)) 16%, #ffffff); }
.couleur-code code {
  -webkit-user-select: all; user-select: all; cursor: text;
  background: var(--blanc); color: var(--encre); border: 1px solid var(--teinte-trait, var(--trait));
  padding: .05em .4em; letter-spacing: .03em; font-size: .78rem;
}
/* 2.58 : le bouton « copier », collé à droite du code */
.couleur-code__copier {
  display: inline-grid; place-items: center; width: 1.6rem; height: 1.6rem; margin-left: -.15rem; padding: 0; cursor: pointer;
  border: 1px solid var(--teinte-trait, var(--trait)); border-radius: 6px; background: var(--blanc); color: var(--encre-douce);
}
.couleur-code__copier[hidden] { display: none; }
.couleur-code__copier:hover { color: var(--lien); border-color: var(--lien); }
.couleur-code__copier:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
.couleur-code__copier .icone { width: .95rem; height: .95rem; }
.couleur-code__fait { display: none; }
.couleur-code__copier.est-copie { color: var(--juste); border-color: var(--juste-trait); background: var(--juste-fond); }
.couleur-code__copier.est-copie .couleur-code__icone { display: none; }
.couleur-code__copier.est-copie .couleur-code__fait { display: block; }

/* ---- logos du sponsor : celui du mode AFFICHÉ (bascule comprise), plus celui du système */
.logo-nuit { display: none !important; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .logo-jour { display: none !important; }
  :root:not([data-theme="light"]) .logo-nuit { display: block !important; }
}
:root[data-theme="dark"] .logo-jour { display: none !important; }
:root[data-theme="dark"] .logo-nuit { display: block !important; }

/* ---- textes officiels (rgpd.php, reglement.php : mot pour mot ceux du bot, 18/10 au soir) */
.juridique__source { font-size: .88rem; color: var(--encre-douce); }
.texte-officiel--h3 > h3 { margin-top: 1.4rem; }
.texte-officiel ul { margin-top: .4rem; }
.texte-officiel h3 + p, .texte-officiel h3 + ul { margin-top: .2rem; }

/* ---- en-tête : tout tient sur une ligne (18/10 au soir). Le bouton « Rejoindre »
   prenait le rembourrage du grand bouton Discord (règle plus loin dans la feuille) :
   il retrouve sa taille d'en-tête. Entre 1081 et 1300 px, la marque garde son sigle. */
.entete__interieur { gap: 1rem; }
.nav-h { gap: .8rem; }
.nav-h__lien { padding: .5rem .65rem; }
.entete .bouton-discord--entete { padding: .5rem .95rem; font-size: .85rem; gap: .5rem; box-shadow: 0 2px 0 #4752c4; }
.entete .bouton-discord--entete svg { width: 20px; height: 15px; }
@media (max-width: 1300px) and (min-width: 1081px) {
  .marque__texte { display: none; }
  .entete .moi__nom { display: inline; }
  .entete .moi summary { padding-right: .75rem; }
  .nav-h__lien { padding: .45rem .55rem; font-size: .9rem; }
}
@media (min-width: 1081px) {
  /* Connecté·e : la cloche et « Mon compte » prennent la place — la marque garde son sigle. */
  .entete--connecte .marque__texte { display: none; }
}
@media (max-width: 640px) {
  /* Téléphone : l'en-tête collant tient sur UNE ligne (il restait sur deux, 130 px). */
  .marque__texte span { display: none; }
  .entete--connecte .marque__texte { display: none; }
  .entete__actions { gap: .35rem; }
}


/* ================================================================ 18/10 au soir (3)
   Module de révision mis en avant, pop-ups de confirmation, menu de la
   cloche, notifications ✓ | 🗑, « Dire merci », heures des rappels, appareils. */

/* ---- la tuile du module de révision : PLEINE de la couleur vive du cours
   (la teinte pâle était déjà le fond du dossier ouvert : elle s'y fondait). */
.sous-dossier.sous-dossier--accent {
  position: relative;
  background: var(--teinte, var(--cyan));
  background-image: linear-gradient(150deg, rgba(255, 255, 255, .22), rgba(255, 255, 255, 0) 55%);
  border: 0; color: var(--teinte-texte, #fff);
  box-shadow: 0 8px 22px rgba(16, 36, 58, .22), inset 0 0 0 1px rgba(255, 255, 255, .18);
}
@supports (color: color-mix(in srgb, red 10%, white)) {
  .sous-dossier.sous-dossier--accent { box-shadow: 0 8px 22px color-mix(in srgb, var(--teinte, var(--cyan)) 45%, transparent), inset 0 0 0 1px rgba(255, 255, 255, .18); }
}
.sous-dossier.sous-dossier--accent:hover { color: var(--teinte-texte, #fff); transform: translateY(-4px); }
.sous-dossier--accent .sous-dossier__icone {
  background: rgba(255, 255, 255, .22); border-color: rgba(255, 255, 255, .45); color: var(--teinte-texte, #fff);
}
.sous-dossier--accent .sous-dossier__titre,
.sous-dossier--accent .sous-dossier__detail,
.sous-dossier--accent .sous-dossier__compte,
.sous-dossier--accent .sous-dossier__vide { color: var(--teinte-texte, #fff); }
.sous-dossier--accent .sous-dossier__detail { opacity: .92; }
.sous-dossier__badge {
  position: absolute; top: -.65rem; right: .8rem;
  display: inline-flex; align-items: center; gap: .25rem;
  padding: .18rem .55rem; border-radius: 99px; font: 700 .7rem/1.3 var(--titre); letter-spacing: .02em;
  background: var(--ambre); color: #3d2800; box-shadow: 0 2px 6px rgba(16, 36, 58, .25);
}
.sous-dossier__badge .icone { width: .78rem; height: .78rem; fill: currentColor; }
.sous-dossier__cta {
  display: inline-flex; align-items: center; gap: .3rem; justify-self: start; margin-top: .45rem;
  padding: .32rem .75rem; border-radius: 99px; font-size: .82rem; font-weight: 700;
  background: rgba(255, 255, 255, .92); color: #10243a;
}
.sous-dossier--accent:hover .sous-dossier__cta { background: #fff; }

/* ---- messages de confirmation : des pop-ups flottants (sans JavaScript, ils
   s'effacent seuls après 9 s ; avec, main.js ajoute × et suspend au survol). */
.message--succes[role="status"] {
  position: fixed; z-index: 70; top: calc(var(--entete-h, 68px) + .75rem); right: 1rem;
  width: min(24rem, calc(100vw - 2rem)); max-width: none; margin: 0;
  padding: .85rem 2.7rem .85rem 1rem; border: 1px solid var(--trait); border-left: 4px solid var(--cyan);
  background: var(--blanc); color: var(--encre); font-size: .93rem; line-height: 1.45;
  box-shadow: 0 12px 32px rgba(16, 36, 58, .2), 0 2px 6px rgba(16, 36, 58, .08);
  animation: toast-entree .3s ease-out both, toast-sortie .4s ease-in 9s forwards;
}
.message--succes.message--flottant { animation: toast-entree .3s ease-out both; }
.message--succes.message--flottant.est-parti { animation: toast-sortie .35s ease-in forwards; }
.message__fermer {
  position: absolute; top: .35rem; right: .4rem; width: 1.9rem; height: 1.9rem; border-radius: 50%;
  border: 0; background: none; color: var(--encre-douce); font-size: 1.3rem; line-height: 1; cursor: pointer;
}
.message__fermer:hover { background: var(--papier); color: var(--encre); }
@keyframes toast-entree { from { opacity: 0; transform: translateY(-10px); } }
@keyframes toast-sortie { to { opacity: 0; transform: translateY(-10px); visibility: hidden; } }
@media (max-width: 640px) {
  .message--succes[role="status"] { top: auto; bottom: 1rem; left: 1rem; right: 1rem; width: auto; }
  @keyframes toast-entree { from { opacity: 0; transform: translateY(10px); } }
}

/* ---- la cloche : un menu déroulant */
:root { --notif-nouvelle: #fff4cc; --notif-nouvelle-bord: #f2d27a; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --notif-nouvelle: #33290f; --notif-nouvelle-bord: #6b5419; }
}
:root[data-theme="dark"] { --notif-nouvelle: #33290f; --notif-nouvelle-bord: #6b5419; }
.cloche-menu { position: relative; flex: none; }
.cloche-menu > summary { list-style: none; cursor: pointer; }
.cloche-menu > summary::-webkit-details-marker { display: none; }
.cloche-menu[open] > summary { border-color: var(--cyan); color: var(--lien); }
.cloche__nombre[hidden] { display: none; }
.cloche-menu__panneau {
  position: absolute; right: -3.2rem; top: calc(100% + .45rem); z-index: 30; width: 24rem;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px;
  box-shadow: var(--ombre-drive), 0 18px 40px rgba(16, 36, 58, .16); overflow: hidden;
}
.cloche-menu__tete {
  display: flex; align-items: center; justify-content: space-between; gap: .6rem;
  padding: .7rem .9rem; border-bottom: 1px solid var(--trait); font-size: .92rem;
}
.cloche-menu__tete .bouton-lien { font-size: .8rem; }
.cloche-menu__vide { margin: 0; padding: 1.2rem .9rem; color: var(--encre-douce); font-size: .9rem; }
.cloche-menu__vide[hidden] { display: none; }
.cloche-menu__tout {
  display: block; padding: .7rem .9rem; text-align: center; font-size: .88rem; font-weight: 600;
  border-top: 1px solid var(--trait); text-decoration: none; color: var(--lien);
}
.cloche-menu__tout:hover { background: var(--cyan-pale); }
@media (max-width: 640px) {
  .cloche-menu__panneau { position: fixed; left: .5rem; right: .5rem; top: calc(var(--entete-h, 60px) + .3rem); width: auto; }
}

/* ---- une notification (menu et page) : texte, moment, ovale ✓ | 🗑 ; non lue en jaune */
.notifs { list-style: none; margin: 0; padding: 0; }
.notif {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: .6rem; align-items: center;
  padding: .65rem .8rem; border-bottom: 1px solid var(--trait);
}
.notifs--menu .notif:last-child { border-bottom: 0; }
.notif.est-nouvelle { background: var(--notif-nouvelle); box-shadow: inset 3px 0 0 var(--ambre); }
.notif__icone {
  width: 1.9rem; height: 1.9rem; border-radius: 50%; display: grid; place-items: center;
  background: var(--papier); color: var(--encre-douce);
}
.notif__icone .icone { width: 1rem; height: 1rem; }
.notif--merci .notif__icone { background: #fde3ea; color: #c2185b; }
.notif__corps { display: grid; gap: .15rem; min-width: 0; color: var(--encre); text-decoration: none; }
.notif__corps:hover .notif__texte { text-decoration: underline; }
.notif__texte {
  font-size: .88rem; line-height: 1.38;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.notifs--page .notif__texte { -webkit-line-clamp: unset; display: block; font-size: .95rem; }
.notif.est-nouvelle .notif__texte { font-weight: 600; }
.notif__meta { font-size: .76rem; color: var(--encre-douce); }
.notif__nouveau { display: none; font-weight: 700; color: #8a5c00; }
.notif.est-nouvelle .notif__nouveau { display: inline; }
.notif__nombre { font-size: .76rem; color: var(--encre-douce); font-weight: 400; }
/* l'ovale coupé en deux, comme sur les tuiles de Mes révisions */
.duo.duo--notif { height: 28px; border-radius: 99px; }
.duo--notif .duo__oui, .duo--notif .duo__non {
  display: grid; place-items: center; width: 32px; padding: 0; border: 0; background: transparent;
  color: var(--encre-douce); cursor: pointer;
}
.duo--notif .duo__oui { border-radius: 99px 0 0 99px; }
.duo--notif .duo__non { border-radius: 0 99px 99px 0; }
.duo--notif .icone { width: .9rem; height: .9rem; }
.duo--notif .duo__oui:hover:not(:disabled) { background: var(--juste, #1e8e5a); color: #fff; }
.duo--notif .duo__non:hover { background: var(--jauge-fausse, #d2416e); color: #fff; }
.duo--notif .duo__oui.est-fait, .duo--notif .duo__oui:disabled { color: var(--juste, #1e8e5a); opacity: .55; cursor: default; }
.duo--notif .duo__oui:focus-visible, .duo--notif .duo__non:focus-visible { outline: 3px solid var(--cyan); outline-offset: 1px; position: relative; z-index: 1; }
.notifs--page { background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; overflow: hidden; margin-bottom: 1rem; }
.notifs--page .notif { padding: .85rem 1rem; }
.notifs--page .notif:last-child { border-bottom: 0; }
.notifs-entete { display: flex; align-items: center; justify-content: space-between; gap: .8rem; flex-wrap: wrap; margin: 0 0 .7rem; }
.notifs-entete__compte { margin: 0; font-weight: 600; color: var(--encre-douce); }
[data-tout-lu][hidden] { display: none; }

/* ---- « Dire merci » */
.merci {
  display: inline-flex; align-items: center; gap: .35rem; padding: .32rem .75rem; border-radius: 99px;
  border: 1px solid #f3b6c8; background: #fff0f4; color: #b0124e; font: inherit; font-size: .85rem; font-weight: 600;
  cursor: pointer; line-height: 1.2;
}
.merci .icone { width: .95rem; height: .95rem; }
.merci:hover { background: #ffe1ea; }
.merci.est-dit { background: #c2185b; border-color: #c2185b; color: #fff; }
.merci__nombre { padding: 0 .4rem; border-radius: 99px; background: rgba(255, 255, 255, .7); color: #b0124e; font-size: .75rem; }
.merci.est-dit .merci__nombre { background: rgba(255, 255, 255, .25); color: #fff; }
.merci--recu { cursor: default; border-style: dashed; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .merci:not(.est-dit) { background: #3a1222; border-color: #6e2440; color: #ff9fbd; }
  :root:not([data-theme="light"]) .notif--merci .notif__icone { background: #3a1222; color: #ff9fbd; }
}
:root[data-theme="dark"] .merci:not(.est-dit) { background: #3a1222; border-color: #6e2440; color: #ff9fbd; }
:root[data-theme="dark"] .notif--merci .notif__icone { background: #3a1222; color: #ff9fbd; }

/* ---- Mes rappels : les heures, les appareils */
.heures-rappel { list-style: none; margin: .4rem 0 1rem; padding: 0; display: flex; flex-wrap: wrap; gap: .5rem; }
.heure-rappel {
  display: inline-flex; align-items: center; gap: .4rem; padding: .3rem .4rem .3rem .75rem;
  border: 1px solid var(--trait); border-radius: 99px; background: var(--blanc);
}
.heure-rappel__changer { display: inline-flex; align-items: center; gap: .3rem; margin: 0; }
.heure-rappel select { border: 0; background: transparent; font: inherit; font-weight: 700; color: var(--encre); padding: .1rem 0; cursor: pointer; }
.heure-rappel__retirer {
  display: grid; place-items: center; width: 1.6rem; height: 1.6rem; border-radius: 50%; padding: 0;
  border: 0; background: var(--papier); color: var(--encre-douce); cursor: pointer;
}
.heure-rappel__retirer:hover { background: var(--grenat-pale); color: var(--grenat-vif); }
.appareil__renommer { flex: none; }
.appareil__renommer > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; gap: .3rem; }
.appareil__renommer > summary::-webkit-details-marker { display: none; }
.appareil__formulaire { display: flex; gap: .4rem; margin-top: .4rem; flex-wrap: wrap; }
.appareil__formulaire input[type="text"] { flex: 1 1 12rem; }

[data-sans-js][hidden] { display: none !important; }   /* « Changer » : seulement sans JavaScript */
.appareil__formulaire input[type="text"] {
  font: inherit; font-size: .95rem; color: var(--encre);
  background: var(--papier); border: 1px solid var(--trait); border-radius: 8px; padding: .45rem .7rem;
}
.appareil__formulaire input[type="text"]:focus { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); outline-offset: 0; }


/* ================================================================ 18/10 au soir (5)
   Module de révision : tuiles aux couleurs du cours, Prompt IA, nombre de questions. */

/* Jouer / Ajouter / S'entraîner : la teinte CLAIRE du cours ; ouverte, la VIVE (déjà). */
.rv-grande { background: var(--teinte-pale, var(--blanc)); border-color: var(--teinte-trait, var(--trait)); }
.rv-grande:hover { background: var(--teinte-moyenne, var(--blanc)); }
.rv-grande .rv-grande__icone { background: var(--teinte-moyenne, var(--papier)); border-color: var(--teinte-trait, var(--trait)); }
.rv-grande.est-ouverte, .rv-grande.est-ouverte:hover { background: var(--teinte); }

/* Ajouter : trois tuiles — exercice, Prompt IA, chapitre. */
@media (min-width: 900px) {
  .rv-choix-trois { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.rv-choix-trois { margin-top: .4rem; }
/* Prompt IA : le même esprit que la tuile du module de révision sur la page du cours,
   en plus discret — teinte moyenne, liseré vif, pastille « Aide-toi de l'IA ». */
.rv-choix .rv-tuile__icone { flex: none; }
/* (19/10 : la tuile Prompt IA est redessinée plus bas, section « 19/10 ».) */
.rv-choix--ia { position: relative; }
.rv-choix__badge {
  position: absolute; top: -.65rem; right: .8rem;
  display: inline-flex; align-items: center; gap: .25rem;
  padding: .18rem .55rem; border-radius: 99px; font: 700 .7rem/1.3 var(--titre); letter-spacing: .02em;
  background: var(--marine); color: #fff; box-shadow: 0 2px 6px rgba(16, 36, 58, .2);
}
.rv-choix__badge .icone { width: .8rem; height: .8rem; }
@media (max-width: 640px) {
  .rv-choix-trois { gap: 16px; }
}

/* Jouer : le nombre de questions d'une session (retenu, comme l'ambiance). */
.rv-nombre {
  display: inline-grid; place-items: center; min-width: 48px; min-height: 40px; padding: 0 12px; border-radius: 10px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: 700 .86rem var(--titre); cursor: pointer;
}
.rv-nombre:hover { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--blanc)); }
.rv-nombre.est-choisie, .rv-nombre.est-choisie:hover { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }


/* ================================================================ 19/10
   Module de révision : rien sans chapitre, Ajouter en étapes, tuiles « choisie »
   lisibles, Prompt IA plus discret ; page du cours : les comptes alignés en bas. */

/* ---- tant qu'il n'y a pas de chapitre : un bandeau, et tout le reste sous cadenas. */
.rv-verrou {
  display: flex; align-items: center; flex-wrap: wrap; gap: 12px 16px; margin: 0 0 18px; padding: 14px 18px;
  border-radius: 14px; background: var(--teinte-pale, var(--blanc)); border: 1.5px dashed var(--teinte, var(--cyan));
}
.rv-verrou__icone {
  flex: none; width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff);
}
.rv-verrou__texte { flex: 1 1 260px; max-width: none; margin: 0; font-size: .9rem; line-height: 1.45; }
.rv-verrou .bouton { flex: none; }
.rv-grande.est-verrouillee, .rv-choix.est-verrouillee {
  cursor: not-allowed; opacity: .55; filter: saturate(.35);
  background: var(--papier); border-style: dashed; border-color: var(--trait); box-shadow: none;
}
.rv-grande.est-verrouillee:hover, .rv-choix.est-verrouillee:hover { transform: none; box-shadow: none; background: var(--papier); color: var(--encre); }
.rv-choix.est-verrouillee .rv-choix__badge { display: none; }

/* ---- Ajouter : « Ajouter un exercice » et « Créer un chapitre » suivent la logique des
   grandes tuiles — la teinte CLAIRE du cours, la VIVE quand on l'a choisie. */
.rv-choix {
  position: relative; background: var(--teinte-pale, var(--blanc)); border-color: var(--teinte-trait, var(--trait));
  transition: transform .16s ease, box-shadow .16s ease, background-color .16s ease;
}
.rv-choix:hover { background: var(--teinte-moyenne, var(--blanc)); border-color: var(--teinte-trait, var(--trait)); transform: translateY(-2px); box-shadow: var(--ombre-drive); }
.rv-choix .rv-tuile__icone { background: var(--teinte-moyenne, var(--papier)); border-color: var(--teinte-trait, var(--trait)); }
.rv-choix.est-choisie, .rv-choix.est-choisie:hover {
  border: 1px solid var(--teinte, var(--cyan)); background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff);
  transform: none; box-shadow: 0 8px 20px rgba(16, 36, 58, .16);
}
.rv-choix.est-choisie .rv-tuile__icone { background: rgba(255, 255, 255, .2); border-color: rgba(255, 255, 255, .38); color: var(--teinte-texte, #fff); }
.rv-choix.est-choisie .rv-choix__sous { color: var(--teinte-texte, #fff); opacity: .9; }
@media (min-width: 900px) {
  /* Trois tuiles côte à côte : un repère vers ce qui s'ouvre en dessous. */
  .rv-choix.est-choisie::after {
    content: ""; position: absolute; left: 50%; bottom: -11px; width: 20px; height: 20px; margin-left: -10px;
    background: var(--teinte, var(--cyan)); transform: rotate(45deg); border-radius: 0 0 4px 0;
  }
}

/* ---- Prompt IA : ouvre une autre page, n'est donc jamais « choisi ». Une teinte entre la
   claire et la vive (plus près de la claire), sans halo ; la pastille est marine le jour,
   blanche la nuit ; une flèche ↗ dit qu'on part ailleurs. */
.rv-choix--ia { background: var(--teinte-moyenne, var(--blanc)); border: 1px solid var(--teinte-trait, var(--trait)); box-shadow: none; padding-bottom: 22px; }
@supports (color: color-mix(in srgb, red 10%, white)) {
  .rv-choix--ia { background: color-mix(in srgb, var(--teinte, var(--cyan)) 27%, var(--blanc)); }
  .rv-choix--ia:hover { background: color-mix(in srgb, var(--teinte, var(--cyan)) 36%, var(--blanc)); }
}
.rv-choix--ia .rv-tuile__icone { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-choix--ia .rv-choix__sous { color: var(--encre); opacity: .82; }
.rv-choix__ouvre { position: absolute; right: 12px; bottom: 10px; width: 1rem; height: 1rem; color: var(--encre-douce); }
.rv-choix--ia:hover .rv-choix__ouvre { color: var(--encre); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .rv-choix__badge { background: #fff; color: var(--marine); box-shadow: 0 2px 8px rgba(0, 0, 0, .45); }
}
:root[data-theme="dark"] .rv-choix__badge { background: #fff; color: var(--marine); box-shadow: 0 2px 8px rgba(0, 0, 0, .45); }
.rv-choix-aide { margin-top: 2px; }
.rv-choix-trois + .rv-etape { margin-top: 14px; }

/* ---- Page du cours : « Vide pour l'instant », « 40 questions »… sur une même ligne, en bas
   de chaque tuile (au-dessus de 640 px ; en dessous, une tuile par ligne). */
@media (min-width: 641px) {
  .sous-dossier { display: flex; flex-direction: column; align-items: stretch; gap: .3rem; }
  .sous-dossier__icone, .sous-dossier__cta { align-self: flex-start; }
  .sous-dossier__detail { margin-bottom: auto; }
  .sous-dossier__jauge, .sous-dossier__cta { margin-top: .55rem; }
  .sous-dossier__compte {
    order: 10; margin-top: .55rem; padding-top: .55rem;
    border-top: 1px solid var(--teinte-trait, var(--trait));
  }
  .sous-dossier--accent .sous-dossier__compte { border-top-color: rgba(255, 255, 255, .38); }
}

/* ---- Importer (module de révision) : l'aperçu des cartes et des rassemblements. */
.import-cartes, .import-groupes { list-style: none; margin: .45rem 0 0; padding: 0; display: grid; gap: 6px; max-width: none; }
.import-cartes li {
  display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 3px 14px; padding: 8px 12px;
  border-radius: 10px; background: var(--papier); border: 1px solid var(--trait); font-size: .88rem; line-height: 1.4;
}
.import-cartes span { color: var(--encre-douce); }
.import-groupes li { padding: 8px 12px; border-radius: 10px; background: var(--papier); border: 1px solid var(--trait); font-size: .88rem; line-height: 1.4; }
.import-groupes small { color: var(--encre-douce); }
.import-groupes__elements { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.import-groupes__elements span { padding: 2px 9px; border-radius: 99px; background: var(--blanc); border: 1px solid var(--trait); font-size: .8rem; }
@media (max-width: 640px) {
  .import-cartes li { grid-template-columns: minmax(0, 1fr); }
}

/* ---- Prompt IA, étape 1 : les types à faire rédiger — des cases en tuiles, toutes
   cochées d'office ; cochée = la teinte claire du cours et la coche pleine. */
.pi-types { display: grid; gap: 10px; }
.pi-types__grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 230px), 1fr)); gap: 10px; }
.pi-type {
  position: relative; display: flex; align-items: flex-start; gap: 11px; padding: 12px 40px 12px 12px; cursor: pointer;
  border-radius: 12px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce);
  transition: background-color .15s ease, border-color .15s ease;
}
.pi-type:hover { border-color: var(--teinte, var(--cyan)); }
.pi-type:focus-within { outline: 3px solid var(--teinte-moyenne, var(--cyan-pale)); outline-offset: 1px; }
.pi-type__case { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; }
.pi-type__icone {
  flex: none; width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center;
  background: var(--papier); border: 1px solid var(--trait); color: var(--encre-douce);
}
.pi-type__textes { display: grid; gap: 2px; min-width: 0; }
.pi-type__nom { font: 700 .92rem/1.25 var(--titre); color: var(--encre); }
.pi-type__detail { font-size: .8rem; line-height: 1.35; }
.pi-type__jeux { margin-top: 3px; font-size: .72rem; line-height: 1.35; }
.pi-type__coche {
  position: absolute; top: 10px; right: 10px; width: 22px; height: 22px; border-radius: 6px; display: grid; place-items: center;
  border: 1.5px solid var(--trait); background: var(--blanc); color: transparent;
}
.pi-type__coche .icone { width: .85rem; height: .85rem; }
.pi-type.est-coche { background: var(--teinte-pale, var(--blanc)); border-color: var(--teinte, var(--cyan)); color: var(--encre); }
.pi-type.est-coche .pi-type__icone { background: var(--teinte-moyenne, var(--papier)); border-color: var(--teinte-trait, var(--trait)); color: var(--encre); }
.pi-type.est-coche .pi-type__coche { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
/* Sans attendre le rechargement : l'état réel de la case. */
.pi-type:has(.pi-type__case:checked) { background: var(--teinte-pale, var(--blanc)); border-color: var(--teinte, var(--cyan)); color: var(--encre); }
.pi-type:has(.pi-type__case:checked) .pi-type__coche { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.pi-type:has(.pi-type__case:not(:checked)) { background: var(--blanc); border-color: var(--trait); color: var(--encre-douce); }
.pi-type:has(.pi-type__case:not(:checked)) .pi-type__icone { background: var(--papier); border-color: var(--trait); color: var(--encre-douce); }
.pi-type:has(.pi-type__case:not(:checked)) .pi-type__coche { background: var(--blanc); border-color: var(--trait); color: transparent; }
.pi-types .actions-ligne:not(:has(> :not([hidden]))) { display: none; }

/* ---- La coquille du mode jeu (19/10, assets/js/coquille-jeu.js) : le jeu s'ouvre dans un
   cadre plein écran au-dessus de la page qui l'a lancé — la musique, partie au clic sur
   « Jouer », continue ainsi d'une manche à l'autre. */
html.coquille-ouverte, html.coquille-ouverte body { overflow: hidden; }
.coquille-jeu { position: fixed; inset: 0; z-index: 10000; display: grid; place-items: center; background: #05070f; }
.coquille-jeu__attente { margin: 0; font: 600 .95rem var(--titre); color: rgba(255, 255, 255, .72); }
.coquille-jeu.est-pret .coquille-jeu__attente { visibility: hidden; }
.coquille-jeu__cadre { position: absolute; inset: 0; display: block; width: 100%; height: 100%; border: 0; background: transparent; }
.coquille-jeu__annuler {
  margin-left: .5rem; padding: .25rem .7rem; border-radius: 99px; cursor: pointer;
  font: 600 .85rem var(--titre); color: #fff; background: transparent; border: 1px solid rgba(255, 255, 255, .35);
}
.coquille-jeu__annuler:hover { background: rgba(255, 255, 255, .12); }
/* Le bandeau d'attente passe AU-DESSUS du cadre (sinon « Annuler » ne se clique pas) ;
   jeu affiché : caché ; jeu en panne (réseau) : en haut, par-dessus la page d'erreur. */
.coquille-jeu__attente { position: relative; z-index: 1; padding: .55rem .6rem .55rem 1rem; border-radius: 99px; background: rgba(5, 7, 15, .82); }
.coquille-jeu.est-en-panne .coquille-jeu__attente { position: absolute; top: 18px; left: 50%; transform: translateX(-50%); visibility: visible; color: #fff; box-shadow: 0 6px 20px rgba(0, 0, 0, .4); }

/* ======================================================================
   Planning de la semaine (19/10, demande de Matthias : « tel jour on fait
   celui-ci, tel jour celui-là ») — Mes révisions, Mes rappels, menus ⋯,
   Paramètres d'un module, cloches des modules sur la page d'un cours.
   ====================================================================== */
.rappel-du-jour__actions { display: flex; flex-wrap: wrap; gap: .4rem; }

/* ---- les jours dans un menu ⋯ ---- */
.menu-suivi__jours { margin: .25rem 0; padding: .45rem .45rem .5rem; border-top: 1px solid var(--trait); border-bottom: 1px solid var(--trait); }
.jours--menu { margin: 0 0 .45rem; }
.jours--menu legend { display: inline-flex; align-items: center; gap: .35rem; margin-bottom: .4rem; font-size: .8rem; color: var(--encre-douce); }
.jours--menu legend .icone { color: var(--encre-douce); }
.jours--menu .jours__liste { flex-wrap: nowrap; gap: .25rem; }
.jour--mini span { min-width: 2.05rem; padding: .34rem .15rem; font-size: .76rem; }
.menu-jours__pied { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.menu-jours__aide { font-size: .72rem; color: var(--encre-douce); }
@media (max-width: 640px) {
  .jours--menu .jour--mini { flex: 1 1 0; }
  .jour--mini span { display: grid; min-width: 0; padding: .55rem 0; font-size: .85rem; }
}

/* ---- la semaine en un coup d'œil ---- */
.planning-intro { margin: 0; font-size: .92rem; color: var(--encre-douce); }
/* Dans une carte de réglages (Mes rappels) : de l'air entre la semaine et la grille. */
.reglage .planning-intro { margin-bottom: .7rem; }
.reglage .planning-edition { margin-top: 1.1rem; }
.semaine-boite { container-type: inline-size; }
.semaine { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .45rem; }
.semaine__jour {
  display: flex; flex-direction: column; gap: .4rem; min-width: 0; min-height: 6.2rem; padding: .55rem .5rem .6rem;
  border-radius: 12px; background: var(--sous-bulle, var(--papier)); border: 1px solid var(--trait);
}
.semaine__jour.est-aujourdhui { border-color: var(--cyan); background: var(--cyan-pale); box-shadow: inset 0 0 0 1px var(--cyan); }
.semaine__nom { display: flex; flex-wrap: wrap; align-items: baseline; gap: .1rem .4rem; margin: 0; font: 700 .86rem/1.2 var(--titre); color: var(--encre); }
.semaine__nom small { font: 700 .66rem var(--texte); text-transform: uppercase; letter-spacing: .04em; color: var(--lien); }
.semaine__court { display: none; }
.semaine__vide { margin: 0; font-size: .76rem; color: var(--encre-douce); }
.semaine__modules { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .3rem; }
.planning-etiquette {
  display: inline-flex; align-items: center; gap: .25rem; max-width: 100%; box-sizing: border-box; padding: .2rem .45rem; border-radius: 6px;
  background: var(--teinte, var(--cyan-fonce)); color: var(--teinte-texte, #fff); font: 700 .74rem/1.25 var(--titre);
}
/* Le code passe à la ligne entre ses mots (« PSY / LANG ») plutôt que d'être coupé. */
.planning-etiquette > span:not(.saut-contenu) { min-width: 0; overflow-wrap: anywhere; }
.planning-etiquette .icone { flex: none; }
.planning-etiquette.est-en-pause { opacity: .45; }
/* Étroit (téléphone, colonne de page) : un jour par ligne, ses modules à côté. */
@container (max-width: 620px) {
  .semaine { grid-template-columns: 1fr; gap: .3rem; }
  .semaine__jour { display: grid; grid-template-columns: 4.6rem minmax(0, 1fr); align-items: center; gap: .4rem; min-height: 0; padding: .45rem .6rem; }
  .semaine__nom { flex-direction: column; align-items: flex-start; gap: 0; }
  .semaine__modules { flex-direction: row; flex-wrap: wrap; }
}

/* ---- la grille : une ligne par module, sept cases ---- */
.planning-edition { display: grid; gap: .2rem; }
.planning-edition--repli > summary { list-style: none; justify-self: start; }
.planning-edition--repli > summary::-webkit-details-marker { display: none; }
.planning-edition--repli[open] > summary { margin-bottom: .6rem; }
.planning-boite { container-type: inline-size; }
.planning__lignes { list-style: none; margin: 0; padding: 0; }
.planning__ligne {
  display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: .45rem .9rem;
  padding: .65rem .1rem; border-bottom: 1px solid var(--trait);
}
.planning__ligne:first-child { border-top: 1px solid var(--trait); }
.planning__module { display: flex; align-items: center; gap: .6rem; min-width: 0; }
.planning__code {
  flex: none; padding: .32rem .55rem; border-radius: 8px; white-space: nowrap;
  background: var(--teinte, var(--cyan-fonce)); color: var(--teinte-texte, #fff); font: 700 .78rem/1.2 var(--titre);
}
.planning__textes { display: grid; gap: .08rem; min-width: 0; }
.planning__nom { display: inline-flex; align-items: center; gap: .35rem; font-weight: 700; font-size: .9rem; }
.planning__nom .icone { color: var(--encre-douce); flex: none; }
.planning__nom small { font-weight: 600; color: var(--encre-douce); }
.planning__long { font-size: .8rem; color: var(--encre-douce); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.planning__etat { font-size: .78rem; font-weight: 600; color: var(--lien); }
.planning__jours { display: flex; gap: .25rem; margin: 0; padding: 0; border: 0; min-width: 0; }
.planning__jour { position: relative; }
.planning__jour input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.planning__jour > span {
  display: inline-grid; place-items: center; width: 2.2rem; height: 2.2rem; box-sizing: border-box; border-radius: 8px;
  border: 1px solid var(--trait); background: var(--papier); color: var(--encre-douce);
  font: 700 .78rem var(--texte); cursor: pointer; user-select: none;
}
.planning__jour > span:hover { border-color: var(--teinte, var(--cyan)); color: var(--encre); }
.planning__jour input:checked + span { background: var(--teinte, var(--cyan-fonce)); border-color: var(--teinte, var(--cyan-fonce)); color: var(--teinte-texte, #fff); }
.planning__jour input:focus-visible + span { outline: 3px solid var(--cyan); outline-offset: 1px; }
.planning__reglages {
  display: grid; place-items: center; width: 2.1rem; height: 2.1rem; border-radius: 50%;
  color: var(--encre-douce); border: 1px solid transparent; text-decoration: none;
}
.planning__reglages:hover { background: var(--papier); border-color: var(--trait); color: var(--encre); }
.planning__reglages .icone { width: 1.1rem; height: 1.1rem; }
.planning__ligne.est-pause .planning__jours, .planning__ligne.est-pause .planning__code { opacity: .55; }
.planning__ligne.est-coupe .planning__code, .planning__ligne.est-sommeil .planning__code { opacity: .6; }
.planning__pied { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin-top: .9rem; }
.planning__pied .champ__aide { margin: 0; }
.planning__vide { margin: .2rem 0 0; color: var(--encre-douce); }
@container (max-width: 560px) {
  .planning__ligne { grid-template-columns: minmax(0, 1fr) auto; }
  .planning__module { grid-column: 1 / -1; }
  .planning__jours { gap: .2rem; }
  .planning__jour { flex: 1 1 0; }
  .planning__jour > span { width: 100%; min-width: 0; }
}

/* ---- ajouter un module ---- */
.planning-ajout { margin-top: .9rem; }
.planning-ajout > summary {
  display: inline-flex; align-items: center; gap: .35rem; cursor: pointer; list-style: none;
  font-weight: 700; font-size: .92rem; color: var(--lien);
}
.planning-ajout > summary::-webkit-details-marker { display: none; }
.planning-ajout__form {
  display: grid; gap: .75rem; justify-items: start; margin-top: .65rem; padding: .9rem 1rem;
  border-radius: 12px; background: var(--sous-bulle, var(--papier)); border: 1px solid var(--trait);
}
.planning-ajout__form select { max-width: 100%; }
.planning-ajout__form .champ { max-width: 100%; }
.planning-ajout__form .champ__aide { margin: 0; }

/* ---- Paramètres du module : chapitre par chapitre ---- */
.chapitres-reglage { list-style: none; margin: .4rem 0 1rem; padding: 0; }
.chapitre-reglage { padding: .65rem 0; border-bottom: 1px solid var(--trait); }
.chapitre-reglage:first-child { border-top: 1px solid var(--trait); }
.chapitre-reglage__tete { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .6rem; }
.chapitre-reglage__num {
  display: inline-grid; place-items: center; min-width: 1.7rem; height: 1.7rem; padding: 0 .3rem; box-sizing: border-box;
  border-radius: 7px; background: var(--cyan-pale); color: var(--lien); font: 700 .8rem var(--titre);
}
.chapitre-reglage__nom { font-weight: 700; font-size: .92rem; }
.chapitre-reglage__etat { font-size: .78rem; font-weight: 600; color: var(--encre-douce); }
.chapitre-reglage__lien { margin-left: auto; display: inline-flex; align-items: center; gap: .25rem; font-size: .8rem; font-weight: 600; text-decoration: none; }
.chapitre-reglage.est-arrete .chapitre-reglage__nom { color: var(--encre-douce); }
.chapitre-reglage__choix { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .8rem; margin-top: .45rem; }
.choix-mini { display: inline-flex; align-items: center; gap: .3rem; font-size: .86rem; cursor: pointer; }
.choix-mini input { accent-color: var(--cyan-fonce); margin: 0; }
.planning__jours--chapitre .planning__jour > span { width: 2rem; height: 2rem; font-size: .74rem; }
/* « Comme le module » : les cases montrent les jours du module, pâlies (les toucher passe « À part », rappels.js). */
.chapitre-reglage__choix:has(input[value="module"]:checked) .planning__jours { opacity: .45; }

/* ---- Paramètres d'un chapitre : son module ---- */
.encadre-module { margin: 0 0 .9rem; padding: .65rem .85rem; border-radius: 10px; background: var(--cyan-pale); border: 1px solid var(--trait); }
.encadre-module p { margin: 0; max-width: none; font-size: .9rem; }
.encadre-module p .icone { width: 1rem; height: 1rem; vertical-align: -.15em; margin-right: .3rem; color: var(--lien); }
.encadre-module__liens { margin-top: .3rem !important; font-size: .85rem !important; }
.suivi-barre__comme { margin: 0; }

/* ---- la cloche des modules, sur la page d'un cours ---- */
.sous-dossiers li { position: relative; }
.sous-dossier__cloche {
  position: absolute; top: .75rem; right: .75rem; z-index: 1;
  display: grid; place-items: center; width: 2rem; height: 2rem; border-radius: 50%;
  background: var(--blanc); border: 1px solid var(--teinte-trait, var(--trait)); color: var(--duo-off, var(--encre-douce));
  transition: transform .16s ease;
}
.sous-dossier__cloche .icone { width: 1rem; height: 1rem; }
.sous-dossier__cloche:hover { color: var(--lien); border-color: var(--cyan); }
.sous-dossier__cloche.est-active, .sous-dossier__cloche.est-active:hover { background: var(--duo-bleu, var(--cyan-fonce)); border-color: var(--duo-bleu, var(--cyan-fonce)); color: #fff; }
.sous-dossier__cloche:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }
.sous-dossier--accent + .sous-dossier__cloche { top: .95rem; }
.sous-dossier--accent + .sous-dossier__cloche:not(.est-active) { background: rgba(255, 255, 255, .92); border-color: rgba(255, 255, 255, .6); color: #4a5866; }
/* La tuile se soulève au survol : sa cloche avec elle. */
.sous-dossiers li:hover > .sous-dossier__cloche { transform: translateY(-3px); }
.sous-dossiers li:hover > .sous-dossier--accent + .sous-dossier__cloche { transform: translateY(-4px); }
/* (19/10, retour de Matthias) La cloche est posée SUR la tuile mais n'en fait pas partie
   (deux liens distincts) : survoler la cloche faisait retomber la tuile pendant que la
   cloche restait levée. Le survol de la tuile suit donc toute la case (li), cloche comprise,
   et la cloche répond à son propre survol par un léger grossissement. */
.sous-dossiers li:hover > .sous-dossier:not(.sous-dossier--accent) { color: var(--encre); transform: translateY(-3px); box-shadow: var(--ombre-drive); }
.sous-dossiers li:hover > .sous-dossier.sous-dossier--accent { color: var(--teinte-texte, #fff); transform: translateY(-4px); }
.sous-dossiers li:hover > .sous-dossier--accent .sous-dossier__cta { background: #fff; }
.sous-dossier__cloche { transition: transform .16s ease, background-color .16s ease, color .16s ease, border-color .16s ease, box-shadow .16s ease; }
.sous-dossiers li:hover > .sous-dossier__cloche:hover { transform: translateY(-3px) scale(1.1); box-shadow: 0 3px 10px rgba(16, 36, 58, .28); }
.sous-dossiers li:hover > .sous-dossier--accent + .sous-dossier__cloche:hover { transform: translateY(-4px) scale(1.1); }
@media (prefers-reduced-motion: reduce) {
  .sous-dossier__cloche { transition: none; }
  .sous-dossiers li:hover > .sous-dossier__cloche,
  .sous-dossiers li:hover > .sous-dossier__cloche:hover { transform: none; }
}

/* ---- tiroirs du Module de révision sans saut de page (19/10, retour de Matthias) ----
   tiroirs.js pose la page suivante SUR PLACE : le cadre du tiroir change de hauteur en
   douceur (hauteur posée en ligne par le script), ce qui apparaît se fond, ce qui part
   s'efface. flow-root : la marge du tiroir reste DANS le cadre (sinon la hauteur
   mesurée sauterait de 18 px au début de l'animation). */
.rv-tiroir-cadre { display: flow-root; }
.rv-tiroir.rv-tiroir--entre { animation: rv-fondu .28s ease both; }
.rv-tiroir.rv-tiroir--sort { opacity: 0; transition: opacity .2s ease; }
.rv-apparait { animation: rv-fondu .32s ease both; }
@keyframes rv-fondu { from { opacity: 0; } to { opacity: 1; } }
[data-tiroirs] .est-en-cours { cursor: progress; }
[data-tiroirs][aria-busy="true"] .rv-tiroir-cadre { cursor: progress; }
@media (prefers-reduced-motion: reduce) {
  .rv-tiroir.rv-tiroir--entre, .rv-apparait { animation: none; }
  .rv-tiroir.rv-tiroir--sort { transition: none; }
}

/* ================================================================ 19/10 (retours de Matthias)
   Page d'un chapitre = les tuiles du module ; « Gérer ▾ » ; le contenu en trois cases. */

/* ---- « Gérer ▾ » : un bouton sobre, un menu (paramètres, contenu, suppression). */
.rv-gerer { flex: none; margin-left: auto; }
.rv-gerer__bouton {
  display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 10px 0 10px; border-radius: 10px;
  border: 1px solid var(--teinte-trait, var(--trait)); background: var(--blanc); color: var(--encre);
  font: 700 .8rem var(--titre); white-space: nowrap; cursor: pointer; user-select: none;
  transition: border-color .16s ease, background-color .16s ease;
}
.rv-gerer__bouton .icone { width: 1rem; height: 1rem; color: var(--encre-douce); }
.rv-gerer__chevron { transition: transform .2s ease; }
.rv-gerer__bouton:hover, .rv-gerer[open] > .rv-gerer__bouton { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--blanc)); }
.rv-gerer[open] > .rv-gerer__bouton .rv-gerer__chevron { transform: rotate(180deg); }
.rv-gerer__bouton:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }
.rv-gerer .menu-suivi__liste { min-width: 16rem; }
.rv-gerer .menu-suivi__choix { align-items: flex-start; }
.rv-gerer .menu-suivi__choix .icone { flex: none; margin-top: .12rem; }
.rv-gerer .menu-suivi__choix small { display: block; margin-top: .1rem; font-weight: 500; font-size: .76rem; }
/* La carte garde ses coins arrondis sans couper le menu ; ouverte, elle passe devant ses voisines. */
.rv-chap { overflow: visible; }
.rv-chapitres > li:has(.rv-gerer[open]) { position: relative; z-index: 6; }
.rv-chapitres > li:has(.rv-gerer[open]) .rv-chap { transform: none; }
/* L'action principale d'une carte : Jouer (ou Ajouter, tant que le chapitre est vide). */
.rv-chap__action--principale { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-chap__action--principale:hover { color: var(--teinte-texte, #fff); filter: brightness(1.07); }
/* Dans l'en-tête de la page d'un chapitre : en haut à droite. */
.entete-cours__actions { float: right; margin: -.2rem -.4rem .4rem 1rem; }
.entete-cours__actions .rv-gerer { margin: 0; }
.entete-cours__actions .menu-suivi__liste { z-index: 29; }
@media (max-width: 640px) {
  .entete-cours__actions { margin: -.1rem -.2rem .3rem .6rem; }
  .entete-cours__actions .rv-gerer__bouton span { display: none; }
}

/* ---- la page d'un chapitre */
.rv-module--chapitre .entete-cours { margin-bottom: 1.2rem; }
.rv-choix-deux + .rv-etape { margin-top: 14px; }
.rv-contenu { margin: 2.2rem 0 1.4rem; scroll-margin-top: 90px; }
.rv-contenu .rv-chapitres-tete { margin-top: 0; }
.rv-contenu__alerte { margin: 0 0 .8rem; }
.rv-contenu__alerte a {
  display: inline-flex; align-items: center; gap: .4rem; padding: .4rem .8rem; border-radius: 99px;
  background: var(--grenat-pale); border: 1px solid var(--grenat-bord); color: var(--grenat-texte); font-size: .86rem; font-weight: 700; text-decoration: none;
}
.rv-contenu__cases { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.rv-contenu__case {
  display: grid; grid-template-columns: auto minmax(0, 1fr); align-content: start; gap: 4px 12px; padding: 16px 16px 14px;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px;
}
.rv-contenu__case .rv-tuile__icone { margin: 0; grid-row: span 2; }
.rv-contenu__textes { min-width: 0; }
.rv-contenu__nom { margin: 0; font: 700 1rem/1.3 var(--titre); }
.rv-contenu__texte { margin: .15rem 0 0; font-size: .8rem; line-height: 1.42; color: var(--encre-douce); }
.rv-contenu__actions { grid-column: 1 / -1; list-style: none; margin: 10px 0 0; padding: 10px 0 0; border-top: 1px solid var(--trait); display: grid; gap: 2px; }
.rv-contenu__actions a {
  display: flex; align-items: center; gap: .45rem; padding: .35rem .45rem; border-radius: 8px;
  color: var(--encre); font-size: .85rem; font-weight: 600; text-decoration: none;
}
.rv-contenu__actions a:hover { background: var(--teinte-pale, var(--papier)); color: var(--encre); }
.rv-contenu__actions .icone { color: var(--encre-douce); }
.rv-contenu__actions a.rv-contenu__principal { justify-content: space-between; color: var(--lien); font-weight: 700; }
.rv-contenu__actions a.rv-contenu__principal .icone { color: currentColor; }
.rv-contenu__case.est-vide { background: var(--papier); border-style: dashed; }
.rv-contenu__case.est-vide .rv-contenu__nom { color: var(--encre-douce); }
@media (max-width: 900px) {
  .rv-contenu__cases { grid-template-columns: minmax(0, 1fr); }
}
/* Sur la carte : « Gérer ▾ » flotte en haut à droite, le titre coule autour. */
.rv-chap__textes { display: block; }
.rv-chap__textes > .rv-gerer { float: right; margin: -2px -4px 6px 10px; }
.rv-chap__textes > .rv-gerer .rv-gerer__bouton { height: 30px; padding: 0 8px; font-size: .76rem; }
.rv-chap__textes > * + * { margin-top: 4px; }
.rv-chap__textes > .rv-gerer + * { margin-top: 0; }
.rv-chap__auto { display: inline-block; }

/* ---- fil d'Ariane collé : jamais de jour entre l'en-tête et lui (19/10, retour de Matthias,
   téléphone : quelques pixels de page apparaissaient au-dessus du fil — hauteur arrondie,
   barre d'adresse mobile qui se replie…). Un rabat de la couleur de l'en-tête bouche l'écart ;
   il reste sous l'en-tête (z-index 40) quand tout est bien collé. */
/* Téléphone (retour de Matthias du 19/10, photo) : quelques pixels de la page apparaissaient entre
   l'en-tête et le fil d'Ariane collé. Le fil remonte d'un pixel sous l'en-tête et porte un rabat
   de sa couleur au-dessus de lui (invisible tant qu'il n'est pas collé). */
.barre-drive { top: calc(var(--entete-h, 68px) - 1px); }
.barre-drive::before {
  content: ""; position: absolute; left: 0; right: 0; bottom: 100%; height: 10px;
  background: var(--papier); pointer-events: none;
}
@media print { .barre-drive::before { display: none; } }

/* Mot de passe : le conseil « tout nouveau » (19/10) */
.encadre ul { margin: .35rem 0 0; padding-left: 1.2rem; }
.encadre li { margin: .2rem 0; }

/* Sélection multiple (19/10) : « Tout sélectionner », le compte, la ligne cochée. */
.selection-tete {
  position: sticky; top: calc(var(--entete-h, 60px) + var(--fil-h, 3.2rem) + .4rem); z-index: 4;
  display: flex; flex-wrap: wrap; align-items: center; gap: .4rem 1.2rem; margin: .6rem 0 .8rem; padding: .55rem .8rem;
  border-radius: 12px; background: var(--blanc); border: 1px solid var(--trait); box-shadow: var(--ombre-drive);
}
.selection-tete[hidden] { display: none; }
.selection-tete__tout { display: inline-flex; align-items: center; gap: .55rem; font-weight: 600; cursor: pointer; }
.selection-tete__tout input { width: 1.25rem; height: 1.25rem; accent-color: var(--lien); cursor: pointer; }
.selection-tete__tout small { font-weight: 400; color: var(--encre-douce); }
.selection-tete__aide { font-size: .88rem; color: var(--encre-douce); }
.selection-barre__compte { font-weight: 600; font-size: .92rem; }
.selection-barre__compte.est-vide { font-weight: 400; color: var(--encre-douce); }
.selection-barre .bouton:disabled { opacity: .45; cursor: not-allowed; }
.fiches-question--selection .fiche-question.est-selectionnee,
.cartes-liste--selection .carte-ligne.est-selectionnee { outline: 2px solid var(--lien); outline-offset: -2px; background: color-mix(in srgb, var(--lien) 6%, var(--blanc)); }
.carte-ligne__cocher { display: grid; place-items: center; }
.carte-ligne__cocher input { width: 1.25rem; height: 1.25rem; accent-color: var(--lien); cursor: pointer; }

/* Module de révision : « Repartir de zéro » (19/10) et sa fenêtre d'avertissement (popover HTML,
   sans JavaScript : le navigateur ouvre, ferme, et la touche Échap referme). */
.rv-raz { margin: 2.6rem 0 0; padding: 1rem 1.2rem; border-radius: 14px; border: 1px dashed var(--trait); color: var(--encre-douce); }
.rv-raz__titre { margin: 0 0 .25rem; font-size: 1rem; color: var(--encre); }
.rv-raz__texte { margin: 0 0 .7rem; font-size: .9rem; max-width: 46rem; }
.fenetre[popover] {
  width: min(40rem, calc(100% - 2rem)); max-height: min(88vh, 46rem); max-height: min(88dvh, 46rem); padding: 0; overflow: auto;
  border: 1px solid var(--trait); border-radius: 18px; background: var(--blanc); color: var(--encre);
  box-shadow: 0 24px 70px rgba(10, 20, 35, .35);
}
.fenetre[popover]::backdrop { background: rgba(8, 16, 26, .5); }
/* Navigateur sans popover (iOS < 17, Firefox < 125) : la fenêtre reste cachée, le bouton aussi. */
@supports not selector(:popover-open) { .fenetre[popover], .rv-raz__bouton, .rj__reglages, .mr-avancement__bouton { display: none; } }
.fenetre__tete {
  position: sticky; top: 0; z-index: 1; display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem;
  padding: 1rem 1.2rem .8rem; background: var(--blanc); border-bottom: 1px solid var(--trait);
}
.fenetre__titre { display: flex; gap: .55rem; align-items: flex-start; margin: 0; font-size: 1.12rem; line-height: 1.35; }
.fenetre__titre .icone { flex: none; width: 1.35rem; height: 1.35rem; margin-top: .1rem; color: var(--grenat, #b3261e); }
.fenetre__fermer { flex: none; width: 2.2rem; height: 2.2rem; border-radius: 50%; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font-size: 1.3rem; line-height: 1; cursor: pointer; }
.fenetre__corps { padding: .4rem 1.2rem 1.2rem; font-size: .94rem; line-height: 1.55; }
.fenetre__corps h3 { margin: 1rem 0 .3rem; font-size: .98rem; }
.fenetre__corps p { margin: 0 0 .5rem; max-width: none; }
.fenetre__corps ul { margin: 0 0 .4rem; padding-left: 1.2rem; }
.fenetre__corps li { margin: .2rem 0; }
.fenetre__note { padding: .6rem .8rem; border-radius: 10px; background: var(--cyan-pale); font-size: .9rem; }
.fenetre__form { margin-top: 1rem; padding-top: .9rem; border-top: 1px solid var(--trait); display: grid; gap: .8rem; }
.fenetre__case { display: flex; gap: .55rem; align-items: flex-start; }
.fenetre__case input { margin-top: .2rem; width: 1.15rem; height: 1.15rem; flex: none; accent-color: var(--grenat, #b3261e); }

/* Éditeur mis en forme (24/10, editeur-riche.js) : la zone MONTRE le gras, l'italique, le
   surligné, l'indice et l'exposant ; sa barre est collée au-dessus. Champ de plusieurs lignes :
   une boîte (barre + texte) ; champ d'une ligne (réponses, éléments) : la barre apparaît
   au-dessus du champ quand on y écrit, par-dessus ce qui précède (rien ne bouge). Le
   <textarea> d'origine reste dans le formulaire, invisible. Sans JavaScript : .riche-aide. */
.riche-aide { margin: 0 0 .9rem; font-size: .84rem; color: var(--encre-douce); }
.riche-aide code { font-size: .82rem; padding: .05rem .3rem; border-radius: 5px; background: var(--papier); }
.riche-aide[hidden] { display: none; }
.riche { position: relative; display: block; min-width: 0; width: 100%; }
.riche__origine {
  position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; min-height: 0 !important;
  margin: 0 !important; opacity: 0 !important; pointer-events: none !important; z-index: -1 !important; resize: none !important; overflow: hidden !important;
}
.riche__zone { position: relative; white-space: pre-wrap; overflow-wrap: anywhere; cursor: text; outline: none; min-width: 0; }
.riche__zone.est-vide::before {
  content: attr(data-attente); position: absolute; left: inherit; color: var(--encre-douce); opacity: .8;
  pointer-events: none; font-weight: 400; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 1.6rem);
}
.riche__zone strong { font-weight: 800; }
.riche__zone sub, .riche__zone sup { font-size: .72em; line-height: 0; }
.riche__zone--l2 { min-height: 3.6rem; }
.riche__zone--l3, .riche__zone--l4, .riche__zone--l5, .riche__zone--l6 { min-height: 5.2rem; }
.riche__zone--l4 { min-height: 6.6rem; }

/* Plusieurs lignes : une seule boîte, barre en haut, texte dessous. */
.riche--barre {
  border: 1.5px solid var(--trait); border-radius: 12px; background: var(--papier);
  transition: border-color .12s ease, box-shadow .12s ease;
}
.riche--barre:focus-within { border-color: var(--teinte, var(--cyan)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--teinte, var(--cyan)) 18%, transparent); }
.riche--barre > .riche__zone {
  border: 0 !important; border-radius: 0 0 11px 11px !important; background: transparent !important;
  box-shadow: none !important; outline: none !important; width: 100%; margin: 0;
}
.riche--barre > .riche__zone:not(.editeur__enonce) { padding: .65rem .8rem; font-size: 1rem; line-height: 1.5; color: var(--encre); }
.riche--barre > .riche__barre { border-bottom: 1px solid var(--trait); border-radius: 11px 11px 0 0; background: var(--blanc); }

/* Une ligne : la barre se pose au-dessus du champ pendant qu'on y écrit. */
.riche--compacte > .riche__barre {
  position: absolute; left: 0; bottom: calc(100% + 2px); z-index: 25;
  border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc);
  box-shadow: 0 8px 22px rgba(16, 36, 58, .16);
}
.riche--compacte:not(:focus-within) > .riche__barre { display: none; }
.riche--compacte > .riche__zone { min-height: 2.4rem; }

.riche__barre { display: flex; flex-wrap: wrap; align-items: center; gap: .1rem; padding: .25rem .3rem; }
.riche__bouton {
  min-width: 2rem; height: 2rem; padding: 0 .4rem; display: inline-flex; align-items: center; justify-content: center; gap: 0;
  border: 0; border-radius: 7px; background: transparent; color: var(--encre);
  font: 600 .95rem/1 var(--texte); cursor: pointer; list-style: none;
}
.riche__bouton:hover { background: var(--cyan-pale); color: var(--lien); }
.riche__bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 1px; }
.riche__bouton[aria-pressed="true"] { background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.riche__bouton mark { padding: 0 .15em; border-radius: 3px; }
.riche__bouton[aria-pressed="true"] mark { background: #ffe680; color: #10243a; }
.riche__bouton sub, .riche__bouton sup { font-size: .68em; }
.riche__bouton--large { gap: .3rem; }
.riche__bouton--large span { font-size: .84rem; }
.riche__sep { width: 1px; height: 1.3rem; margin: 0 .25rem; background: var(--trait); }
.riche__symboles { position: relative; }
.riche__symboles > summary::-webkit-details-marker { display: none; }
.riche__symboles > summary.riche__bouton { color: var(--encre); }
.riche__symboles[open] > summary { background: var(--cyan-pale); color: var(--lien); }
.riche__grille {
  position: absolute; left: 0; top: calc(100% + .35rem); z-index: 40; width: min(22rem, 86vw); max-height: 60vh; overflow-y: auto;
  padding: .5rem .6rem .7rem; border-radius: 12px; background: var(--blanc); border: 1px solid var(--trait); box-shadow: 0 14px 34px rgba(16, 36, 58, .18);
}
.riche__groupe { margin: .35rem 0 .25rem; font-size: .74rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--encre-douce); }
.riche__liste { display: flex; flex-wrap: wrap; gap: .25rem; }
.riche__liste button {
  min-width: 2.2rem; height: 2.2rem; padding: 0 .4rem; border-radius: 7px; border: 1px solid var(--trait); background: var(--papier);
  color: var(--encre); font: 500 1.05rem/1 var(--texte); cursor: pointer;
}
.riche__liste button:hover { border-color: var(--lien); background: var(--cyan-pale); }
.riche__note { margin-left: auto; padding: 0 .3rem; font-size: .78rem; font-weight: 600; color: var(--faux, #b3261e); }
.riche__note:empty { display: none; }
@media (max-width: 640px) {
  .riche__bouton--large span { display: none; }
  .riche--compacte > .riche__barre { right: auto; max-width: calc(100vw - 2rem); }
}
/* Le texte mis en forme, partout (pages, jeux, aperçu). */
mark { background: color-mix(in srgb, #ffd84d 55%, transparent); color: inherit; padding: 0 .1em; border-radius: 2px; }

/* Jouer : le bas du tiroir en TROIS CARTES (option B choisie par Matthias, 19/10 au soir),
   dans l'identité du module : bordures, pastilles et choix à la couleur du cours (--teinte). */
.rv-reglages { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, .85fr) minmax(0, 1fr); gap: 14px; align-items: stretch; }
.rv-reglage {
  display: flex; flex-direction: column; gap: 10px; padding: 16px 16px 14px; border-radius: 14px;
  background: var(--blanc); border: 1px solid var(--teinte-trait, var(--trait));
}
.rv-reglage__titre { display: flex; align-items: center; gap: 9px; margin: 0; font: 700 .98rem var(--titre); }
.rv-reglage__ic { flex: none; width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; background: var(--teinte-pale); color: var(--teinte-encre, var(--encre)); border: 1px solid var(--teinte-trait, var(--trait)); }
.rv-reglage__aide { margin: 0; font-size: .82rem; color: var(--encre-douce); max-width: none; }
.rv-reglage__pied { margin-top: auto; }

.rv-jeux { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.rv-jeu {
  display: flex; align-items: center; gap: 10px; width: 100%; min-height: 54px; padding: 8px 10px; border-radius: 12px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: inherit; text-align: left; cursor: pointer;
  transition: border-color .15s ease, background-color .15s ease, transform .15s ease;
}
.rv-jeu:hover { color: var(--encre); border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale); transform: translateY(-1px); }
.rv-jeu__ic { flex: none; width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-jeu__ic .icone { width: 20px; height: 20px; }
.rv-jeu__textes { min-width: 0; display: grid; gap: 1px; }
.rv-jeu__nom { font: 700 .86rem/1.2 var(--titre); }
.rv-jeu__n { font-size: .76rem; color: var(--encre-douce); }
.rv-jeu.est-vide { cursor: help; border-style: dashed; background: var(--papier); }
.rv-jeu.est-vide:hover { transform: none; border-color: var(--trait); background: var(--papier); }
.rv-jeu.est-vide .rv-jeu__ic { background: var(--trait); color: var(--encre-douce); }

.rv-reglage__valeur { display: grid; justify-items: center; gap: 2px; margin: 6px 0 4px; max-width: none; text-align: center; }
.rv-reglage__valeur b { font: 700 2.3rem/1 var(--titre); color: var(--teinte-encre, var(--encre)); }
.rv-reglage__valeur span { font-size: .8rem; color: var(--encre-douce); }
.rv-nombres { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; }
.rv-reglage--nombre .rv-nombre { min-width: 44px; min-height: 36px; border-radius: 99px; padding: 0 12px; }
.rv-reglage--nombre .rv-reglage__pied { text-align: center; }

.rv-ambs { display: grid; gap: 6px; }
.rv-reglage--ambiance .rv-amb { display: flex; width: 100%; min-height: 46px; padding: 4px 10px 4px 5px; text-align: left; white-space: normal; }
.rv-reglage--ambiance .rv-amb:hover { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale); }
.rv-reglage--ambiance .rv-amb.est-choisie { padding: 3px 9px 3px 4px; background: var(--teinte-pale); }
.rv-reglage--ambiance .amb-mini__apercu { width: 46px; height: 32px; }
.rv-amb__textes { flex: 1; min-width: 0; display: grid; gap: 0; }
.rv-amb__nom { font: 700 .84rem var(--titre); }
.rv-amb__sous { font: 400 .74rem var(--texte); color: var(--encre-douce); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rv-amb__coche { flex: none; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-amb__coche .icone { width: 14px; height: 14px; }

@media (max-width: 1000px) {
  .rv-reglages { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .rv-reglage--jeux { grid-column: 1 / -1; }
  .rv-jeux { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .rv-reglages { grid-template-columns: minmax(0, 1fr); }
  .rv-jeux { grid-template-columns: minmax(0, 1fr); gap: 6px; }
  .rv-jeu { min-height: 48px; padding: 6px 10px; }
  .rv-jeu__ic { width: 32px; height: 32px; }
  .rv-jeu__textes { flex: 1; display: flex; align-items: baseline; gap: 8px; }
  .rv-jeu__n { margin-left: auto; }
}

/* Révision du jour / Mes erreurs (19/10 au soir, choix de Matthias) : la révision du jour
   en avant, pleine de la couleur du cours ; « Mes erreurs » en ligne compacte dessous. */
.rv-tuiles--5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
@media (max-width: 1100px) { .rv-tuiles--5 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 640px) { .rv-tuiles--5 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.rv-vedette--jour:not(.est-vide) { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-vedette--jour:not(.est-vide) .rv-vedette__icone { background: rgba(255, 255, 255, .2); color: var(--teinte-texte, #fff); }
.rv-vedette--jour:not(.est-vide) .rv-vedette__sous, .rv-vedette--jour:not(.est-vide) .rv-vedette__note { color: var(--teinte-texte, #fff); opacity: .9; }
.rv-vedette--jour:not(.est-vide) .rv-vedette__go { background: var(--blanc); color: var(--encre); }
.rv-vedette--jour .rv-vedette__compte { border-color: transparent; }
.rv-vedette--jour .rv-vedette__compte b { color: var(--teinte-encre, var(--encre)); }
.rv-erreurs {
  grid-column: 1 / -1; display: flex; align-items: center; gap: 14px; width: 100%; min-height: 60px; padding: 10px 14px; border-radius: 14px;
  border: 1px solid color-mix(in srgb, #a80039 26%, var(--blanc)); background: color-mix(in srgb, #a80039 5%, var(--blanc));
  color: var(--encre); font: inherit; text-align: left; cursor: pointer; transition: transform .15s ease, box-shadow .15s ease;
}
.rv-erreurs:hover { transform: translateY(-1px); box-shadow: var(--ombre-drive); }
.rv-erreurs__icone { flex: none; width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center; background: #a80039; color: #fff; }
.rv-erreurs__textes { flex: 1; min-width: 0; display: grid; gap: 1px; }
.rv-erreurs__titre { font: 700 .98rem var(--titre); }
.rv-erreurs__sous { font-size: .82rem; color: var(--encre-douce); }
.rv-erreurs__n { flex: none; min-width: 34px; height: 30px; padding: 0 10px; box-sizing: border-box; border-radius: 99px; display: grid; place-items: center; background: var(--blanc); border: 1px solid color-mix(in srgb, #a80039 30%, var(--blanc)); font: 700 .95rem var(--titre); color: #a80039; }
.rv-erreurs__go { flex: none; display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border-radius: 99px; background: #a80039; color: #fff; font: 700 .85rem var(--titre); }
.rv-erreurs.est-vide { cursor: default; border-style: dashed; border-color: var(--trait); background: var(--papier); }
.rv-erreurs.est-vide:hover { transform: none; box-shadow: none; }
.rv-erreurs.est-vide .rv-erreurs__icone { background: var(--juste); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .rv-erreurs__icone, :root:not([data-theme="light"]) .rv-erreurs__go { background: #ff8fae; color: #2a0612; }
  :root:not([data-theme="light"]) .rv-erreurs__n { color: #ff8fae; }
}
:root[data-theme="dark"] .rv-erreurs__icone, :root[data-theme="dark"] .rv-erreurs__go { background: #ff8fae; color: #2a0612; }
:root[data-theme="dark"] .rv-erreurs__n { color: #ff8fae; }

/* ======================================================================
   Le menu ⋯ en fiche (option B, 19/10) : un bandeau à la couleur du cours,
   trois grands boutons (Aujourd'hui · Pause · Rappels), puis la liste.
   ====================================================================== */
.menu-suivi--fiche > .menu-suivi__liste { width: 21rem; max-width: min(21rem, calc(100vw - 1.2rem)); }
.menu-fiche {
  display: grid; gap: .32rem; margin: -.35rem -.35rem .45rem; padding: .85rem .95rem .8rem;
  border-radius: 11px 11px 0 0; background: var(--teinte); color: var(--teinte-texte);
}
.menu-fiche__cours { display: flex; align-items: center; gap: .45rem; min-width: 0; font-size: .76rem; font-weight: 600; opacity: .92; }
.menu-fiche__num {
  flex: none; padding: .05rem .42rem; border-radius: 6px; font: 700 .74rem var(--titre, Verdana, sans-serif);
  background: color-mix(in srgb, var(--teinte-texte) 18%, transparent);
}
.menu-fiche__nom { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.menu-fiche__portee { font: 700 1.06rem/1.25 var(--titre, Verdana, sans-serif); overflow-wrap: anywhere; }
.menu-fiche__sous { font-size: .78rem; line-height: 1.35; opacity: .92; overflow-wrap: anywhere; }
.menu-fiche__jauge { height: 6px; margin-top: .15rem; background: color-mix(in srgb, var(--teinte-texte) 26%, transparent); }
.menu-fiche__jauge .jauge__plein { fill: var(--teinte-texte); }
.menu-fiche__etat { font-size: .78rem; font-weight: 600; }

.menu-rangee__liste { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: .4rem; margin: 0 0 .35rem; padding: 0 .1rem; list-style: none; }
.menu-rangee__liste form { margin: 0; height: 100%; }
.menu-gros {
  display: grid; justify-items: center; align-content: center; gap: .22rem; width: 100%; height: 100%; min-height: 4.4rem; box-sizing: border-box;
  padding: .6rem .3rem .55rem; border-radius: 12px; border: 1px solid var(--trait); background: var(--blanc);
  color: var(--encre); font: 600 .8rem var(--texte); text-align: center; cursor: pointer;
  transition: border-color .15s, background-color .15s;
}
.menu-gros .icone { width: 1.3rem; height: 1.3rem; color: var(--cyan-fonce, #0077a8); }
.menu-gros__nom { line-height: 1.15; }
.menu-gros small { font-size: .7rem; font-weight: 600; color: var(--encre-douce); line-height: 1.15; overflow-wrap: anywhere; }
.menu-gros:hover { border-color: var(--trait-fort, var(--encre-douce)); background: var(--papier); }
.menu-gros:focus-visible { outline: 3px solid var(--cyan); outline-offset: 1px; }
.menu-gros.est-actif { border-color: #0077a8; background: #e3f4fc; color: #0b4f66; }
.menu-gros.est-actif small { color: #0b4f66; }

/* « Rappels » déplie, sans script, les notifications et les jours. */
.menu-rappels__bascule { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); border: 0; white-space: nowrap; }
.menu-rappels__bascule:focus-visible + .menu-gros { outline: 3px solid var(--cyan); outline-offset: 1px; }
.menu-rappels__bascule:checked + .menu-gros { box-shadow: inset 0 -3px 0 #0077a8; }
.menu-rappels { display: none; margin: 0 .1rem .35rem; border-radius: 12px; background: var(--papier); border: 1px solid var(--trait); }
.menu-suivi__liste:has(.menu-rappels__bascule:checked) .menu-rappels { display: block; }
.menu-rappels__liste { list-style: none; margin: 0; padding: .25rem; }
.menu-rappels .menu-suivi__jours { margin: 0; border-bottom: 0; }

.menu-suivi__section { padding: .55rem .6rem .2rem; font-size: .72rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--encre-douce); }
.menu-suivi--fiche .menu-suivi__liste > li + li > a.menu-suivi__choix,
.menu-suivi--fiche .menu-suivi__liste > li + li > form > .menu-suivi__choix { border-radius: 8px; }

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .menu-gros .icone { color: #6cc9f0; }
  :root:not([data-theme="light"]) .menu-gros.est-actif { border-color: #6cc9f0; background: #0f3346; color: #d9f1fb; }
  :root:not([data-theme="light"]) .menu-gros.est-actif small { color: #b6e3f6; }
  :root:not([data-theme="light"]) .menu-rappels__bascule:checked + .menu-gros { box-shadow: inset 0 -3px 0 #6cc9f0; }
}
:root[data-theme="dark"] .menu-gros .icone { color: #6cc9f0; }
:root[data-theme="dark"] .menu-gros.est-actif { border-color: #6cc9f0; background: #0f3346; color: #d9f1fb; }
:root[data-theme="dark"] .menu-gros.est-actif small { color: #b6e3f6; }
:root[data-theme="dark"] .menu-rappels__bascule:checked + .menu-gros { box-shadow: inset 0 -3px 0 #6cc9f0; }

@media (max-width: 640px) {
  .tuile .menu-suivi--fiche > .menu-suivi__liste { width: auto; max-width: none; }
  .tuile .menu-fiche { margin: -.5rem -.5rem .55rem; padding: 1rem 1rem .9rem; border-radius: 15px 15px 0 0; }
  .menu-fiche__portee { font-size: 1.15rem; }
  .menu-gros { min-height: 4.9rem; font-size: .86rem; }
  .menu-gros .icone { width: 1.45rem; height: 1.45rem; }
}

/* ======================================================================
   Deux chapitres au plus (19/10) : la paire choisie, les puces grisées
   ====================================================================== */
.rv-puce .rv-puce__n .icone { width: .95rem; height: .95rem; }
.rv-puce.est-grisee { color: var(--encre-douce); background: var(--papier); border-color: var(--trait); cursor: not-allowed; opacity: .7; }
.rv-puce.est-grisee .rv-puce__n { background: var(--trait); color: var(--encre-douce); }
.rv-puce.est-grisee .rv-puce__auto { text-transform: none; letter-spacing: 0; font-weight: 600; }
.rv-paire { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 12px 0 0; padding: 10px 14px; border-radius: 12px; background: var(--teinte-pale); border: 1px solid var(--teinte-trait); font-size: .88rem; line-height: 1.45; }
.rv-paire__nom { flex: none; padding: 4px 11px; border-radius: 99px; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .8rem var(--titre); }
.rv-paire__texte { flex: 1 1 16rem; min-width: 0; }

/* ======================================================================
   Mes parties en cours (19/10) : une par sujet
   ====================================================================== */
.parties { margin: 0 0 1.2rem; padding: 14px 16px; border-radius: 16px; background: var(--blanc); border: 1px solid var(--trait); transition: box-shadow .3s; }
.parties.est-signalee { box-shadow: 0 0 0 3px var(--teinte, var(--cyan)); }
.parties__titre-bloc { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font: 700 1rem var(--titre); }
.parties__titre-bloc .icone { color: var(--teinte-encre, var(--encre-douce)); }
.parties__nombre { padding: 1px 8px; border-radius: 99px; background: var(--papier); border: 1px solid var(--trait); font: 700 .74rem var(--titre); color: var(--encre-douce); }
.parties__liste { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.parties__ligne { display: flex; align-items: center; gap: 12px; padding: 10px 10px 10px 12px; border-radius: 12px; background: var(--papier); border: 1px solid var(--trait); }
.parties__sujet { flex: none; padding: 5px 10px; border-radius: 99px; background: var(--teinte-pale); color: var(--teinte-encre, var(--encre)); border: 1px solid var(--teinte-trait); font: 700 .78rem var(--titre); white-space: nowrap; }
.parties__textes { display: grid; gap: 2px; min-width: 0; flex: 1 1 auto; }
.parties__titre { font-size: .92rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.parties__etat { font-size: .8rem; color: var(--encre-douce); }
.parties__reprendre {
  flex: none; display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border-radius: 99px;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .84rem var(--texte); text-decoration: none;
}
.parties__reprendre:hover { color: var(--teinte-texte, #fff); filter: brightness(1.08); }
.parties__ligne form { margin: 0; flex: none; }
.parties__arreter { display: grid; place-items: center; width: 34px; height: 34px; padding: 0; border-radius: 50%; border: 1px solid transparent; background: none; color: var(--encre-douce); cursor: pointer; }
.parties__arreter:hover { background: var(--faux-fond); color: var(--faux); }
.parties__arreter:focus-visible, .parties__reprendre:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }
.parties__cache { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); border: 0; white-space: nowrap; }
@media (max-width: 640px) {
  /* Téléphone : le sujet, Reprendre et × sur une ligne ; le titre et l'état en dessous. */
  .parties__ligne { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 8px 6px; }
  .parties__sujet { justify-self: start; }
  .parties__textes { grid-row: 2; grid-column: 1 / -1; }
  .parties__titre { white-space: normal; }
}

/* L'avertissement avant une partie de plus */
.avert-parties {
  width: min(32rem, calc(100vw - 2rem)); max-height: calc(100dvh - 2rem); padding: 0; border: 0; border-radius: 18px;
  background: var(--blanc); color: var(--encre); box-shadow: 0 24px 70px rgba(10, 20, 35, .35); overflow: auto;
}
.avert-parties::backdrop { background: rgba(10, 20, 35, .45); }
.avert-parties__tete { display: flex; gap: 12px; align-items: flex-start; padding: 18px 20px 12px; border-bottom: 1px solid var(--trait); }
.avert-parties__icone { flex: none; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; background: #fdf3e0; color: #8a5c00; }
.avert-parties__titre { margin: 0; align-self: center; font: 700 1.06rem/1.35 var(--titre); }
.avert-parties__corps { display: grid; gap: 10px; padding: 14px 20px 18px; font-size: .9rem; line-height: 1.55; }
.avert-parties__corps p { margin: 0; }
.avert-parties__deja { font-size: .82rem; color: var(--encre-douce); }
.avert-parties__actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 6px; }
.avert-parties__ok, .avert-parties__reprendre {
  display: inline-flex; align-items: center; gap: 6px; padding: 10px 16px; border-radius: 10px; font: 700 .9rem var(--texte); text-decoration: none; cursor: pointer;
}
.avert-parties__ok { border: 1px solid var(--teinte, var(--cyan)); background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.avert-parties__reprendre { border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); }
.avert-parties__reprendre:hover { color: var(--encre); background: var(--papier); }
.avert-parties__annuler { margin-left: auto; padding: 10px 12px; border: 0; background: none; color: var(--encre-douce); font: 600 .88rem var(--texte); text-decoration: underline; cursor: pointer; }
.avert-parties__annuler:hover { color: var(--encre); }
.avert-parties__ok:focus-visible, .avert-parties__reprendre:focus-visible, .avert-parties__annuler:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }
.parties:focus { outline: none; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .avert-parties__icone { background: #3a2c10; color: #f6c867; }
}
:root[data-theme="dark"] .avert-parties__icone { background: #3a2c10; color: #f6c867; }

/* ======================================================================
   Les pages du site dans l'identité du drive (19/10, maquettes validées
   par Matthias) : chaque page a sa « chemise », comme un cours — un onglet
   et un bandeau de sa couleur, des tuiles et des cartes comme le drive.
   ====================================================================== */
.page-site--accueil { --page: #0077a8; }
.page-site--guide { --page: #2d4a88; }
.page-site--reglement { --page: #970911; }
.page-site--rgpd { --page: #257087; }
.page-site--sponsor { --page: #1f5fbf; }
.page-site--faculte { --page: #158561; }
.page-site { --page-pale: var(--blanc); --page-trait: var(--trait); --page-encre: var(--lien); }
@supports (color: color-mix(in srgb, red 10%, white)) {
  .page-site {
    --page-pale: color-mix(in srgb, var(--page) 11%, var(--blanc));
    --page-trait: color-mix(in srgb, var(--page) 30%, var(--blanc));
    --page-encre: color-mix(in srgb, var(--page) 80%, var(--encre));
  }
}
@media (prefers-color-scheme: dark) {
  @supports (color: color-mix(in srgb, red 10%, white)) {
    :root:not([data-theme="light"]) .page-site { --page-pale: color-mix(in srgb, var(--page) 22%, var(--blanc)); --page-trait: color-mix(in srgb, var(--page) 50%, var(--blanc)); --page-encre: color-mix(in srgb, var(--page) 45%, var(--encre)); }
  }
}
@supports (color: color-mix(in srgb, red 10%, white)) {
  :root[data-theme="dark"] .page-site { --page-pale: color-mix(in srgb, var(--page) 22%, var(--blanc)); --page-trait: color-mix(in srgb, var(--page) 50%, var(--blanc)); --page-encre: color-mix(in srgb, var(--page) 45%, var(--encre)); }
}

/* la tête : l'onglet, puis le bandeau */
.chemise-tete { margin-bottom: 1.8rem; }
.chemise-tete__onglet {
  display: inline-flex; align-items: center; max-width: calc(100% - 1rem); box-sizing: border-box;
  padding: .45rem 2.3rem .45rem .95rem; border-radius: 10px 0 0 0; background: var(--page); color: #fff;
  clip-path: polygon(0 0, calc(100% - 22px) 0, 100% 100%, 0 100%);
  font: 700 .78rem var(--titre); letter-spacing: .05em; text-transform: uppercase;
}
.chemise-tete__bandeau {
  display: grid; gap: 1.4rem; padding: 1.6rem 1.8rem; border-radius: 0 18px 18px 18px;
  background: var(--page-pale); border: 1px solid var(--page-trait);
}
.chemise-tete__bandeau--aside { grid-template-columns: minmax(0, 1fr) minmax(230px, 360px); align-items: start; }
.chemise-tete .titre-page { margin: 0 0 .45rem; font-size: clamp(1.7rem, 3.2vw, 2.3rem); line-height: 1.15; }
.chemise-tete .chapeau { margin: 0; max-width: 62ch; color: var(--encre); opacity: .82; }
.chemise-tete__actions { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: 1.2rem; }
.chemise-tete__actions .bouton-discord { margin: 0; }
.chemise-tete__note { margin: .8rem 0 0; font-size: .82rem; color: var(--encre-douce); }
.bouton-blanc {
  display: inline-flex; align-items: center; min-height: 44px; box-sizing: border-box; padding: .6rem 1.1rem; border-radius: 12px;
  background: var(--blanc); border: 1px solid var(--page-trait); color: var(--encre); font-weight: 700; text-decoration: none;
}
.bouton-blanc:hover { border-color: var(--page); color: var(--encre); }
@media (max-width: 820px) {
  .chemise-tete__bandeau--aside { grid-template-columns: minmax(0, 1fr); }
  .chemise-tete__bandeau { padding: 1.2rem 1.1rem; }
}

/* les chiffres, la vidéo, « En deux phrases », le logo : à droite du bandeau */
.chiffres-cles { list-style: none; display: grid; gap: .6rem; margin: 0; padding: 0; }
.chiffres-cles li { display: flex; align-items: center; gap: .9rem; padding: .75rem 1rem; border-radius: 14px; background: var(--blanc); border: 1px solid var(--page-trait); }
.chiffres-cles strong { min-width: 3rem; font: 700 1.65rem var(--titre); color: var(--page-encre); }
.chiffres-cles span { font-size: .9rem; color: var(--encre-douce); }
.guide-video { display: flex; align-items: center; gap: 14px; padding: 14px 18px; border-radius: 14px; background: var(--page); color: #fff; text-decoration: none; }
.guide-video:hover { color: #fff; filter: brightness(1.08); }
.guide-video__lecture { flex: none; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; background: rgba(255, 255, 255, .18); }
.guide-video__lecture svg { width: 18px; height: 18px; fill: #fff; }
.guide-video__textes { display: grid; }
.guide-video__textes strong { font: 700 .98rem var(--titre); }
.guide-video__textes span { font-size: .85rem; opacity: .9; }
.deux-phrases { padding: 16px 18px; border-radius: 14px; background: var(--blanc); border: 1px solid var(--page-trait); font-size: .9rem; line-height: 1.55; }
.deux-phrases__titre { display: block; margin-bottom: .4rem; font: 700 .76rem var(--titre); letter-spacing: .06em; text-transform: uppercase; color: var(--page-encre); }
.deux-phrases p { margin: 0; }
.chemise-tete__aside .sponsor__logo { display: block; max-width: none; margin: 0; padding: 18px 20px; border-radius: 14px; background: var(--blanc); border: 1px solid var(--page-trait); }
.chemise-tete__aside .sponsor__logo img { width: 100%; height: auto; }

/* les titres de section, les blocs, les cartes */
.section-titre { margin: 2.2rem 0 1rem; font: 700 1.25rem var(--titre); }
.section-titre span { font: 400 .9rem var(--texte); color: var(--encre-douce); }
.page-site .contenu > .section-titre:first-child, .page-site .chemise-tete + .section-titre { margin-top: 0; }
.bloc { margin: 1.4rem 0; padding: 1.3rem 1.5rem; border-radius: 18px; background: var(--blanc); border: 1px solid var(--trait); box-shadow: 0 1px 2px rgba(16, 36, 58, .05); }
.bloc > h2:first-child { margin-top: 0; font-size: 1.2rem; }
.bloc > :last-child { margin-bottom: 0; }
.deux-cartes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin: 1.4rem 0; align-items: start; }
.deux-cartes > .bloc, .deux-cartes > .encadre { margin: 0; }
@media (max-width: 760px) { .deux-cartes { grid-template-columns: minmax(0, 1fr); } }

.page-site .cartes { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; margin: 0 0 1rem; }
.page-site .carte { display: grid; gap: .55rem; align-content: start; padding: 1.2rem; border-radius: 16px; box-shadow: 0 1px 2px rgba(16, 36, 58, .05); }
.page-site .carte h3 { margin: 0; font-size: 1rem; line-height: 1.3; }
.page-site .carte__icone {
  width: 44px; height: 44px; margin: 0; padding: 10px; box-sizing: border-box; border-radius: 12px;
  background: var(--page-pale); border: 1px solid var(--page-trait); stroke: var(--page-encre);
}
@media (min-width: 900px) { .page-site .cartes--drive { grid-template-columns: 1.4fr 1fr 1fr; } }
.page-site .carte--vedette { background: var(--page); border-color: var(--page); color: #fff; box-shadow: 0 10px 26px color-mix(in srgb, var(--page) 28%, transparent); }
.page-site .carte--vedette h3, .page-site .carte--vedette p { color: #fff; }
.page-site .carte--vedette p { opacity: .93; }
.page-site .carte--vedette .carte__icone { background: rgba(255, 255, 255, .16); border-color: rgba(255, 255, 255, .3); stroke: #fff; }
.carte__bouton { justify-self: start; margin-top: .3rem; padding: .55rem 1rem; border-radius: 99px; background: #fff; color: #10243a; font-weight: 700; font-size: .9rem; text-decoration: none; }
.carte__bouton:hover { color: #10243a; background: #eef6fb; }
.pastille-ambre { display: inline-block; margin-left: .3rem; padding: 2px 9px; border-radius: 99px; background: #f6a924; color: #2a1a06; font: 700 .7rem var(--texte); vertical-align: middle; }
.page-site .drive-lien { font-size: .9rem; color: var(--encre-douce); }

.page-site .telecharger { border-radius: 16px; margin: 0 0 1.6rem; }
.page-site .encadre { margin: 1.2rem 0; border: 1px solid var(--page-trait); border-radius: 16px; background: var(--page-pale); }
.page-site .encadre--attention { border-color: color-mix(in srgb, var(--ambre) 45%, var(--blanc)); background: var(--ambre-pale); }
.page-site .etapes li::before { background: var(--page); color: #fff; }

/* questions fréquentes */
.faq { margin: .5rem 0; border-radius: 12px; background: var(--papier); border: 1px solid var(--trait); }
.faq summary { display: flex; align-items: center; gap: .6rem; padding: .8rem 1rem; font-weight: 700; cursor: pointer; list-style: none; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: ""; flex: none; margin-left: auto; width: 8px; height: 8px; border-right: 2px solid var(--encre-douce); border-bottom: 2px solid var(--encre-douce); transform: rotate(45deg) translateY(-2px); transition: transform .15s; }
.faq[open] summary::after { transform: rotate(225deg) translate(-2px, -1px); }
.faq p { margin: 0; padding: 0 1rem .95rem; font-size: .93rem; color: var(--encre-douce); }
.faq summary:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; border-radius: 12px; }

/* le cœur bleu du sponsor */
.coeur-bleu { width: 1.05em; height: 1.05em; fill: #2f6fde; vertical-align: -.16em; flex: none; }
:root[data-theme="dark"] .coeur-bleu { fill: #7aa7ff; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .coeur-bleu { fill: #7aa7ff; } }
.page-site .bandeau-sponsor { border-radius: 18px; }
.sponsor__merci { display: flex; align-items: center; gap: .45rem; }
.page-site .sponsor { padding: 1.3rem 1.5rem; border-radius: 18px; margin: 0 0 1.4rem; }

/* les tuiles (parties du guide, résumé du règlement, droits et sommaire de Vos données) */
.tuiles-site { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin: 0 0 1.6rem; padding: 0; list-style: none; }
.tuiles-site--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.tuiles-site > li { min-width: 0; }
@media (max-width: 960px) { .tuiles-site, .tuiles-site--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .tuiles-site, .tuiles-site--4 { grid-template-columns: minmax(0, 1fr); } }
.tuile-site {
  display: grid; gap: 12px; align-content: start; height: 100%; box-sizing: border-box; padding: 16px; border-radius: 16px;
  background: var(--blanc); border: 1px solid var(--trait); color: var(--encre); text-decoration: none;
  transition: border-color .15s, box-shadow .15s;
}
a.tuile-site:hover { color: var(--encre); border-color: var(--page); box-shadow: 0 8px 20px color-mix(in srgb, var(--page) 16%, transparent); }
a.tuile-site:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }
.tuile-site--ligne { display: flex; align-items: flex-start; gap: 14px; }
.tuiles-site--sommaire .tuile-site { align-items: center; padding: 12px 14px; }
.tuile-site__tete { display: flex; align-items: flex-start; gap: 12px; }
.tuile-site__titre { font: 700 .98rem/1.3 var(--titre); }
.tuile-site__corps { display: grid; gap: 4px; min-width: 0; }
.tuile-site__texte { font-size: .88rem; line-height: 1.45; color: var(--encre-douce); }
.tuile-site__lien { font-size: .86rem; font-weight: 700; color: var(--lien); overflow-wrap: anywhere; background: none; padding: 0; }
.tuile-site__puces { display: flex; flex-wrap: wrap; gap: 6px; }
.tuile-site__puces span { padding: 3px 9px; border-radius: 99px; background: var(--papier); font-size: .78rem; color: var(--encre-douce); }
.tuile-site__icone { flex: none; display: grid; place-items: center; width: 42px; height: 42px; border-radius: 12px; background: var(--page-pale); border: 1px solid var(--page-trait); }
.tuile-site__icone svg { width: 20px; height: 20px; fill: none; stroke: var(--page-encre); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.badge-partie {
  flex: none; display: grid; justify-items: center; align-content: center; gap: 2px; min-width: 42px; box-sizing: border-box;
  padding: 6px 8px 7px; border-radius: 10px 10px 4px 4px; background: var(--page-pale); color: var(--page-encre); font: 700 .75rem var(--titre); line-height: 1;
}
.badge-partie small { font-size: .55rem; letter-spacing: .08em; }
.badge-partie b { font-size: 1.2rem; }
.badge-partie--carre { min-width: 36px; padding: 8px; border-radius: 10px; }
.badge-partie--carre b { font-size: 1rem; }

/* le guide : chaque partie en carte */
.page-site .chapitre, .page-site .chapitre:first-of-type { margin: 1.2rem 0; padding: 1.4rem 1.5rem; border: 1px solid var(--trait); border-radius: 18px; background: var(--blanc); }
.page-site .chapitre__entete { align-items: center; }
.page-site .chapitre__entete .badge-partie { background: var(--page); color: #fff; }
.page-site .sous-chapitre { margin-top: 1.1rem; padding-top: 1.1rem; border-top: 1px solid var(--trait); }
.page-site .chapitre, .page-site .sous-chapitre, .page-site #tout-comprendre { scroll-margin-top: 90px; }

/* Règlement, Vos données : le texte officiel, article par article */
.page-site .juridique h2 { border: 0; padding: 0; display: block; }
.juridique__intro { font-size: .98rem; }
.article-officiel { margin: 10px 0; border-radius: 14px; background: var(--blanc); border: 1px solid var(--trait); scroll-margin-top: 90px; }
.article-officiel[open] { border: 2px solid var(--page); }
.article-officiel > summary { display: flex; align-items: center; gap: 14px; padding: 14px 18px; cursor: pointer; list-style: none; }
.article-officiel[open] > summary { padding: 13px 17px; }
.article-officiel > summary::-webkit-details-marker { display: none; }
.article-officiel > summary:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; border-radius: 12px; }
.article-officiel__n { flex: none; display: grid; place-items: center; width: 36px; height: 36px; border-radius: 10px 10px 4px 4px; background: var(--page-pale); color: var(--page-encre); font: 700 .95rem var(--titre); }
.article-officiel[open] .article-officiel__n { background: var(--page); color: #fff; }
.page-site .article-officiel__titre { flex: 1; margin: 0; font: 700 1.02rem/1.3 var(--titre); }
.article-officiel__chevron { flex: none; width: 9px; height: 9px; border-right: 2px solid var(--encre-douce); border-bottom: 2px solid var(--encre-douce); transform: rotate(45deg) translateY(-3px); transition: transform .15s; }
.article-officiel[open] .article-officiel__chevron { transform: rotate(225deg) translate(-2px, -2px); }
.article-officiel__texte { padding: 0 18px 16px 68px; }
.article-officiel__texte h3 { margin-top: 1.2rem; color: var(--page-encre); scroll-margin-top: 90px; }
@media (max-width: 560px) { .article-officiel__texte { padding-left: 18px; } }

/* Ma faculté */
.contact__initiales { display: grid; place-items: center; width: 44px; height: 44px; margin-bottom: .7rem; border-radius: 50%; background: var(--page-pale); border: 1px solid var(--page-trait); color: var(--page-encre); font: 700 .95rem var(--titre); }
.page-site .contact { border-radius: 16px; }
.page-site .contact__discord { background: var(--page-pale); color: var(--page-encre); }
.page-site .agenda__mois { border-radius: 16px; }
.page-site .agenda__compte { background: var(--page-pale); color: var(--page-encre); }
.page-site .agenda__date { background: var(--page); }
.page-site .agenda__date span { color: rgba(255, 255, 255, .85); }
.page-site .carte--drive:not(.carte--vedette) { background: var(--blanc); border: 1px solid var(--trait); }
.juridique .tuiles-site { max-width: none; padding-left: 0; }
.juridique .tuiles-site > li { margin-bottom: 0; }
.page-site .video__cadre { border-color: var(--page); }


/* Mon compte (2.27, 19/10) : la chemise aubergine, la carte de la personne, des blocs */
.page-site--compte { --page: #612dc0; }
.compte-carte { display: grid; gap: .9rem; padding: 1.1rem 1.2rem; border-radius: 16px; background: var(--blanc); border: 1px solid var(--page-trait); }
.compte-carte__tete { display: flex; align-items: center; gap: .85rem; min-width: 0; }
.compte-carte__initiales { flex: none; display: grid; place-items: center; width: 52px; height: 52px; border-radius: 50%; background: var(--role, var(--page)); color: #fff; font: 700 1.15rem var(--titre); letter-spacing: .02em; }
.compte-carte__qui { display: grid; gap: .3rem; min-width: 0; }
.compte-carte__nom { font: 700 1.08rem/1.25 var(--titre); overflow-wrap: anywhere; }
.compte-carte__infos { list-style: none; display: grid; gap: 0; margin: 0; padding: 0; }
.compte-carte__infos li { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; padding: .45rem 0; border-top: 1px solid var(--trait); font-size: .88rem; }
.compte-carte__infos span { color: var(--encre-douce); }
.compte-carte__infos strong { text-align: right; }
.compte-carte__note { margin: 0; font-size: .8rem; line-height: 1.45; color: var(--encre-douce); }
.chemise-tete__actions .bouton-blanc { gap: .45rem; }
.chemise-tete__actions .bouton-blanc .icone { color: var(--page-encre); }
.compte-titre { display: flex; align-items: center; gap: .75rem; margin: 0 0 1.1rem; font: 700 1.2rem var(--titre); }
.compte-titre .tuile-site__icone { width: 38px; height: 38px; border-radius: 11px; }
.compte-titre .tuile-site__icone .icone { width: 19px; height: 19px; color: var(--page-encre); }
.compte-mdp__grille { display: grid; grid-template-columns: minmax(0, 32rem) minmax(240px, 340px); justify-content: space-between; gap: 1.6rem 2rem; align-items: start; }
.compte-mdp .formulaire { max-width: none; margin: 0; padding: 0; border: 0; background: none; box-shadow: none; }
.compte-conseil { padding: 1rem 1.1rem; border-radius: 14px; background: var(--page-pale); border: 1px solid var(--page-trait); font-size: .88rem; line-height: 1.5; }
.compte-conseil p { margin: 0 0 .6rem; }
.compte-conseil > :last-child { margin-bottom: 0; }
.compte-conseil__titre { font: 700 .78rem var(--titre); letter-spacing: .06em; text-transform: uppercase; color: var(--page-encre); }
.compte-conseil__oubli { padding-top: .6rem; border-top: 1px solid var(--page-trait); }
/* 2.39 : un mot de passe ne se change que depuis Discord (lien personnel) */
.compte-mdp__discord { display: grid; gap: .8rem; justify-items: start; font-size: .95rem; line-height: 1.55; }
.compte-mdp__discord p { margin: 0; }
.compte-mdp__etapes { margin: 0; padding-left: 1.3rem; display: grid; gap: .4rem; }
.compte-mdp__discord .bouton { display: inline-flex; align-items: center; gap: .5rem; }
.compte-mdp__discord .bouton .icone { width: 1rem; height: 1rem; }

/* 2.39 : critères d'un nouveau mot de passe, cochés pendant la frappe (mot-de-passe.js) */
.criteres-mdp { list-style: none; margin: -.35rem 0 1rem; padding: .7rem .85rem; display: grid; gap: .35rem; border-radius: 12px; background: var(--papier); border: 1px solid var(--trait); font-size: .86rem; }
.criteres-mdp li { display: flex; align-items: center; gap: .55rem; color: var(--encre-douce); }
.criteres-mdp__marque { flex: none; width: 1.05rem; height: 1.05rem; border-radius: 50%; border: 1.5px solid var(--trait-fort, var(--encre-douce)); display: grid; place-items: center; }
.criteres-mdp li.est-ok { color: var(--encre); }
.criteres-mdp li.est-ok .criteres-mdp__marque { border-color: #158561; background: #158561; }
.criteres-mdp li.est-ok .criteres-mdp__marque::after { content: ""; width: .5rem; height: .28rem; margin-top: -.12rem; border: solid #fff; border-width: 0 0 2px 2px; transform: rotate(-45deg); }
.criteres-mdp__pareil.est-ok { color: #158561; }
.criteres-mdp__pareil.est-non { color: var(--grenat-vif); }
.compte-action { display: flex; align-items: center; justify-content: space-between; gap: 1rem 1.5rem; padding: 1rem 0; border-top: 1px solid var(--trait); }
.compte-action:first-of-type { border-top: 0; padding-top: 0; }
.compte-action__texte { display: grid; gap: .25rem; max-width: 60ch; }
.compte-action__texte span { font-size: .88rem; line-height: 1.45; color: var(--encre-douce); }
.compte-action form { margin: 0; flex: none; }
.compte-action--danger .compte-action__texte strong { color: var(--grenat-vif); }
.compte-securite__note { max-width: none; margin: .4rem 0 0; padding-top: .9rem; border-top: 1px solid var(--trait); font-size: .84rem; color: var(--encre-douce); }
@media (max-width: 760px) {
  .compte-mdp__grille { grid-template-columns: minmax(0, 1fr); }
  .compte-action { flex-direction: column; align-items: stretch; }
  .compte-action .bouton { width: 100%; }
}


/* Drive, page publique (2.28, 19/10) : la chemise rouille */
.page-site--drive { --page: #a86343; }
.entrer-etapes { counter-reset: entrer; list-style: none; display: grid; gap: .6rem; margin: .2rem 0 0; padding: 0; }
.entrer-etapes li { counter-increment: entrer; position: relative; padding-left: 2.1rem; }
.entrer-etapes li::before {
  content: counter(entrer); position: absolute; left: 0; top: .05rem; display: grid; place-items: center;
  width: 1.45rem; height: 1.45rem; border-radius: 50%; background: var(--page); color: #fff; font: 700 .78rem var(--titre);
}
.entrer-etapes__note { margin: .8rem 0 0; font-size: .8rem; color: var(--encre-douce); }
.drive-public__note { margin: -.4rem 0 1.4rem; font-size: .9rem; color: var(--encre-douce); max-width: 70ch; }
.page-site .chemise-tete__actions .bouton { margin: 0; min-height: 44px; box-sizing: border-box; display: inline-flex; align-items: center; border-radius: 12px; }

/* Le sommaire de droite des pages du site (2.28, 19/10 : « vestige de l'ancienne esthétique ») */
.page-site .lateral .nav { position: relative; margin-top: 1.9rem; padding: 1rem .8rem .8rem; border-radius: 0 16px 16px 16px; border-color: var(--page-trait); background: var(--blanc); }
.page-site .lateral .nav__intitule {
  position: absolute; left: -1px; bottom: 100%; margin: 0; padding: .4rem 2rem .35rem .85rem;
  border-radius: 9px 0 0 0; background: var(--page); color: #fff;
  clip-path: polygon(0 0, calc(100% - 18px) 0, 100% 100%, 0 100%);
  font: 700 .7rem var(--titre); letter-spacing: .06em; text-transform: uppercase;
}
.page-site .lateral .nav__liste { margin: 0; display: grid; gap: 2px; }
.page-site .lateral .nav__lien--secondaire {
  padding: .5rem .7rem; border-left: 0; border-radius: 10px; font-size: .88rem; line-height: 1.35; color: var(--encre-douce);
}
.page-site .lateral .nav__lien--secondaire::before {
  content: ""; flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--page-trait); transition: background .15s;
}
.page-site .lateral .nav__lien--secondaire:hover { background: var(--page-pale); color: var(--encre); }
.page-site .lateral .nav__lien--secondaire:hover::before { background: var(--page); }
.page-site .lateral .nav__lien.est-actif { background: var(--page-pale); color: var(--page-encre); font-weight: 700; }
.page-site .lateral .nav__lien.est-actif::before { background: var(--page); }
.page-site .bouton-discord--lateral { border-radius: 14px; box-shadow: 0 6px 16px rgba(88, 101, 242, .25); }
.page-site .mention-laterale { padding: .7rem .8rem; border-radius: 12px; border: 1px dashed var(--trait); }

/* Connexion au drive (2.28) : formulaire et encadrés dans la chemise du Drive */
.page-site .formulaire { border-radius: 18px; }
.page-site .encart--cle { padding: 1rem 1.2rem; border-radius: 16px; background: var(--page-pale); border: 1px solid var(--page-trait); }
.page-site .encart--cle .icone { color: var(--page-encre); }
.page-site .encadre h3 { margin-top: 0; }
.connexion-grille { display: grid; grid-template-columns: minmax(0, 30rem) minmax(0, 1fr); gap: 1.4rem; align-items: start; }
.connexion-grille > .formulaire { margin: 0; }
.connexion-cote { display: grid; gap: 1rem; }
.connexion-cote > .encart, .connexion-cote > .encadre { margin: 0; }
@media (max-width: 820px) { .connexion-grille { grid-template-columns: minmax(0, 1fr); } }
.compte-conseil__liste { margin: 0; padding-left: 1.1rem; display: grid; gap: .45rem; }
.compte-conseil__liste li { margin: 0; }
@media (max-width: 820px) { .connexion-grille--conseil-dabord > .connexion-cote { order: -1; } }

/* ================================================================ Téléphone (site 2.30, 20/10 — retours de Matthias)
   « Sur téléphone, l'espace n'est pas géré comme il faut » : moins de cadres dans des cadres,
   des gouttières de 16 px, des titres à la taille d'un écran de poche ; ce qui compte (les
   chemises, les tuiles, les documents) prend la largeur, le reste se tasse. Rien ne change
   au-dessus de 640 px. */

@media (max-width: 640px) {
  /* ---- gouttières : 16 px de chaque côté (au lieu de 24) ---- */
  .grille { padding: 1.1rem 1rem 3rem; }
  .barre-drive { margin-left: -.5rem; margin-right: -.5rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 1rem; }

  /* ---- Mon drive : le titre de page ne prend plus un quart d'écran ---- */
  .drive-titre { margin-bottom: .8rem; }
  .drive-titre .titre-page { font-size: 1.6rem; margin: 0; }

  /* ---- les deux bulles : bord à bord avec la gouttière, plus serrées ---- */
  .bulle { margin: 0 0 1rem; padding: .8rem .75rem .95rem; gap: .65rem; border-radius: 14px; }
  .bulle__tete { gap: .4rem .7rem; }
  .bulle__titre { font-size: 1.12rem; gap: .45rem; }
  .bulle__titre .icone { width: 1.15rem; height: 1.15rem; }
  .bulle__outils { gap: .3rem .8rem; }
  .bulle__lien { font-size: .84rem; }
  .bulle__lien .icone { width: .9rem; height: .9rem; }
  .etat-appareil { font-size: .72rem; padding: .1rem .5rem; gap: .25rem; }
  .etat-appareil .icone { width: .85rem; height: .85rem; }

  /* Mes révisions : catégories plus courtes, « rien à faire » sur une ligne ou deux */
  .categories { gap: .7rem; }
  .categorie + .categorie { padding-top: .7rem; }
  .categorie__tete { margin-bottom: .45rem; gap: .4rem; }
  .categorie__nom { font-size: .88rem; }
  .categorie__icone { width: 1rem; height: 1rem; }
  .categorie--vide .tuile-fantome { min-height: 0; border-radius: 12px; }
  .categorie__bravo { padding: .55rem .75rem; gap: .5rem; font-size: .8rem; line-height: 1.4; font-weight: 600; }
  .categorie__bravo .icone { width: 1rem; height: 1rem; }

  /* Quadrimestre et bloc : de simples intitulés, plus des bulles dans la bulle —
     les chemises récupèrent toute la largeur (2 × ~165 px au lieu de 2 × 121 px). */
  .drive-zone .quadri { padding: 0; background: none; border: 0; border-radius: 0; }
  .drive-zone .quadri + .quadri, .drive-zone .quadri + .filtre-cours__aucun { margin-top: 1rem; }
  .drive-zone .quadri__titre { margin: 0; padding: .35rem .1rem .45rem; gap: .45rem; border-bottom: 1px solid var(--trait); border-radius: 0; }
  .drive-zone .quadri__titre h3 { font-size: .98rem; }
  .drive-zone .quadri__titre:hover { background: none; }
  .quadri__puce { min-width: 1.8rem; height: 1.35rem; padding: 0 .4rem; border-radius: 6px; font-size: .76rem; }
  .drive-zone .bloc {
    margin: .55rem 0 0; padding: 0; background: none; border: 0; border-radius: 0; box-shadow: none;
  }
  .drive-zone .bloc__titre { margin: 0; padding: .1rem .1rem; gap: .4rem; }
  .drive-zone .bloc__titre:hover { background: none; }
  .drive-zone .bloc__titre h4 { font-size: .8rem; letter-spacing: .04em; color: var(--encre-douce); }
  .drive-zone .bloc__titre .repli__nombre { font-size: .76rem; }
  .drive-zone .bloc > .chemises { margin: .55rem 0 .3rem; }

  /* Les chemises : un peu plus basses, mêmes informations */
  .chemises { gap: 1.15rem .6rem; }
  .chemise__onglet { height: 26px; min-width: 3.4rem; padding: 0 calc(.75rem + 15px) 2px .75rem; }
  .chemise__numero { font-size: .92rem; }
  .chemise__feuilles { display: none; }
  .chemise__corps { min-height: 6.4rem; padding: .7rem .75rem .65rem; border-top-width: 3px; border-radius: 0 10px 10px 10px; }
  .chemise__code { font-size: .95rem; }
  .chemise__nom { font-size: .78rem; line-height: 1.35; }
  .chemise__contenu { padding-top: .45rem; font-size: .72rem; }

  /* ---- la page d'un cours : en-tête et sous-dossiers resserrés ---- */
  .entete-cours { margin-bottom: 1rem; }
  .entete-cours__onglet { height: 32px; padding: 0 calc(.85rem + 17px) 2px .85rem; gap: .5rem; }
  .entete-cours__numero { font-size: 1.05rem; }
  .entete-cours__corps { padding: .85rem .9rem .95rem; border-top-width: 4px; border-radius: 0 14px 14px 14px; }
  .entete-cours__titre { font-size: 1.3rem; line-height: 1.2; }
  .entete-cours__meta, .entete-cours__sous-titre { font-size: .86rem; margin-top: .25rem; }
  .sous-dossiers { padding: .7rem .6rem .9rem; gap: .6rem; }
  .sous-dossier { padding: .75rem .8rem .8rem; column-gap: .7rem; row-gap: .15rem; border-radius: 12px; }
  .sous-dossier__icone { width: 2rem; height: 2rem; border-radius: 9px; }
  .sous-dossier__icone .icone { width: 1.1rem; height: 1.1rem; }
  .sous-dossier__titre { font-size: .94rem; }
  /* le moins important se tasse : la description d'un sous-dossier tient sur deux lignes */
  .sous-dossier:not(.sous-dossier--accent) .sous-dossier__detail {
    font-size: .78rem; line-height: 1.4;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }
  .sous-dossier__compte { margin-top: .25rem; font-size: .78rem; }
  .sous-dossier--accent { padding-top: .95rem; }
  .sous-dossier__cloche { top: .6rem; right: .6rem; width: 1.9rem; height: 1.9rem; }
  .sous-dossier--accent + .sous-dossier__cloche { top: .8rem; }
  /* La cloche d'un module ne recouvre plus le texte (photo de Matthias, 20/10) : sur téléphone,
     l'icône est à gauche et le titre monte à hauteur de la cloche — la ligne du titre lui garde
     sa place, la description passe en dessous. (Plus large : la cloche est sur la ligne de l'icône.) */
  .sous-dossier--cloche .sous-dossier__titre { padding-right: 2.3rem; min-height: 1.9rem; }
  .sous-dossier--cloche.sous-dossier--accent .sous-dossier__titre { min-height: 2rem; }

  /* ---- Module de révision (quizz.php, page d'un chapitre) : trois grandes tuiles qui tiennent,
     chapitres plus compacts, « Jouer » sur toute la largeur et les deux autres dessous ---- */
  .rv-trois { gap: 6px; }
  .rv-grande { min-height: 84px; padding: 10px 4px; gap: 6px; }
  .rv-grande__icone { width: 38px; height: 38px; border-radius: 11px; }
  .rv-grande__ic { width: 20px; height: 20px; }
  .rv-grande__titre { font-size: clamp(.68rem, 3.1vw, .85rem); letter-spacing: -.01em; }
  .rv-chapitres-tete { margin: 1.4rem 0 .6rem; }
  .rv-chapitres-tete h2 { font-size: 1.15rem; }
  .rv-chapitres-tete p { font-size: .8rem; }
  .rv-chap { gap: 10px; padding-bottom: 12px; border-radius: 14px; }
  .rv-chap__haut { gap: 11px; padding: 12px 12px 0; }
  .rv-chap__num { width: 46px; height: 52px; border-radius: 10px 10px 10px 4px; }
  .rv-chap__num b { margin-top: 9px; font-size: 1.35rem; }
  .rv-chap__num small { top: 5px; font-size: .5rem; }
  .rv-chap__nom { font-size: .94rem; }
  .rv-chap__contenu, .rv-chap__progres, .rv-chap__gestion, .rv-chap__decision { padding-left: 12px; padding-right: 12px; }
  .rv-chap__regle, .rv-chap__statut { margin-left: 12px; margin-right: 12px; }
  .rv-chap__contenu > span, .rv-chap__signal { font-size: .72rem; padding: 2px 8px 2px 6px; }
  .rv-chap__actions { padding: 2px 12px 0; }
  .rv-chap__actions:not(.rv-chap__actions--deux) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rv-chap__actions:not(.rv-chap__actions--deux) > :first-child { grid-column: 1 / -1; }
  .rv-chap__action { min-height: 38px; font-size: .76rem; }
  .rv-tuile { min-height: 0; }

  /* ---- les phrases d'introduction sous un titre de page : plus petites ---- */
  .drive-titre__texte { font-size: .88rem; line-height: 1.5; }

  /* ---- documents en LISTE : la vignette à gauche, le titre et les infos à côté, les
     boutons en dessous (avant : la vignette tombait dans une colonne fantôme et le
     titre s'écrasait lettre par lettre). ---- */
  html[data-vue-documents="liste"] .document {
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-areas: "vignette haut" "vignette meta" "actions actions";
    gap: .15rem .7rem; padding: .65rem .75rem;
  }
  html[data-vue-documents="liste"] .document--liens { grid-template-areas: "vignette haut" "vignette meta" "liens liens" "actions actions"; }
  html[data-vue-documents="liste"] .document > .document__vignette { display: grid; align-self: start; }
  html[data-vue-documents="liste"] .document > .document__vignette--image { display: block; }
  html[data-vue-documents="liste"] .document > .document__haut { grid-area: haut; }
  html[data-vue-documents="liste"] .document > .document__meta { grid-area: meta; font-size: .74rem; line-height: 1.45; }
  html[data-vue-documents="liste"] .document > .document__actions {
    grid-area: actions; justify-content: flex-start; margin-top: .4rem;
  }
  html[data-vue-documents="liste"] .document > .document__actions .bouton-lien { display: inline-flex; }
  html[data-vue-documents="liste"] .document > .document__gestion { grid-area: auto / 1 / auto / -1; }
  html[data-vue-documents="liste"] .document > .document__vignette { grid-area: vignette; }
  html[data-vue-documents="liste"] .document--liens > .document__liens { grid-area: liens; }
}

/* ---- En-tête sur téléphone (2.32, choix de Matthias, 20/10 : maquette « 2 », avec l'interrupteur
   jour | nuit gardé) : quatre boutons de la MÊME famille — 40 px de haut, coins de 12 px (ceux du
   logo FPSE), même bord. L'interrupteur fait deux cases de large, sa pastille est un carré arrondi
   qui glisse ; la cloche, l'avatar et le menu sont des carrés de 40 px. Au-dessus de 640 px : rien ne change. */
@media (max-width: 640px) {
  .entete__actions { gap: 8px; }
  .bascule-theme { padding: 0; border-radius: 12px; }
  .bascule-theme__piste {
    box-sizing: border-box; width: 76px; height: 40px; padding: 0 10px; border-radius: 12px;
    background: var(--papier); border: 1px solid var(--trait); box-shadow: inset 0 1px 2px rgba(16, 36, 58, .06);
  }
  .bascule-theme svg { width: 18px; height: 18px; }
  .bascule-theme__bouton { top: 3px; left: 3px; width: 32px; height: 32px; border-radius: 9px; }
  :root[data-theme="dark"] .bascule-theme__bouton { transform: translateX(36px); }
  .bascule-theme:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }

  .entete .cloche { box-sizing: border-box; width: 40px; height: 40px; border-radius: 12px; }
  .entete .cloche__icone { width: 19px; height: 19px; }

  .entete .moi summary {
    box-sizing: border-box; width: 40px; height: 40px; padding: 0; gap: 0; justify-content: center;
    border: 0; border-radius: 12px; background: var(--role, var(--cyan-fonce)); overflow: hidden;
  }
  .entete .moi[open] summary { box-shadow: 0 0 0 2px var(--blanc), 0 0 0 4px var(--cyan); }
  .entete .moi__pastille { width: 40px; height: 40px; border-radius: 12px; font-size: .8rem; }

  .bascule-menu { box-sizing: border-box; width: 40px; height: 40px; padding: 0; gap: 0; justify-content: center; border-radius: 12px; }
  .bascule-menu__texte { display: none; }
}
@media (max-width: 640px) and (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .bascule-theme__bouton { transform: translateX(36px); }
}

/* ---- Téléphone (2.33, demande de Matthias, 20/10) : le menu ☰ à GAUCHE du logo FPSE. Le groupe
   d'actions s'efface (display: contents) : ☰, logo, puis jour | nuit, cloche, compte à droite.
   Le menu ouvert (.nav-h.est-ouvert, order 10) passe toujours en dessous, sur toute la largeur. */
@media (max-width: 640px) {
  .entete__interieur { gap: 8px; justify-content: flex-start; }
  .entete__actions { display: contents; }
  .entete__actions > * { order: 1; }
  .entete__actions > .bascule-menu { order: -1; }
  .entete__interieur > .marque { order: 0; margin-right: auto; }
}
@media (max-width: 640px) {
  /* le logo à la hauteur des boutons (40 px), mêmes coins */
  .marque__sigle { box-sizing: border-box; height: 40px; display: inline-grid; place-items: center; padding: 0 .55rem; border-radius: 12px; }
}

/* ---- 2.33.1 (20/10, photo de Matthias) : sur téléphone, un peu d'air entre le titre « Mes
   révisions » (et sa barre à trois cases) et « À faire aujourd'hui ». */
@media (max-width: 640px) {
  .revisions-zone > .bulle__tete:not(.bulle__bande) { margin-bottom: .45rem; }
}

/* ================================================================ Menu ☰ en tiroir (2.34, 20/10) — habillage
   2.43 (25/10, piste « B — Marine » choisie par Matthias sur le canevas : « plus pro », plus de bulles ni de
   pastilles de couleur). Sur téléphone, le menu glisse depuis la gauche, par-dessus la page (voile
   derrière) : un panneau marine — de jour comme de nuit —, « Navigation » puis « Mon espace » avec des
   pictogrammes au trait, la page où l'on est marquée d'un trait cyan, le compte en bas (initiales à la
   couleur du statut, déconnexion), la version. Au-dessus de 640 px : le menu d'avant (ces morceaux y
   sont cachés ; entre 641 et 1080 px, le menu déroulant garde un petit pictogramme). */
.nav-h__tete, .nav-h__section, .nav-h__liste--espace, .nav-h__compte, .nav-h__pied, .nav-voile, .nav-h__icone { display: none; }
@media (max-width: 1080px) and (min-width: 641px) {
  .nav-h__icone { display: inline-grid; place-items: center; width: 15px; height: 15px; flex: none; opacity: .75; }
  .nav-h__icone svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
}

@media (max-width: 640px) {
  .nav-h, .nav-h.est-ouvert {
    --tiroir: #10243a; --tiroir-texte: #e7edf3; --tiroir-doux: #9fb2c2; --tiroir-section: #7f93a6;
    --tiroir-icone: #8fb3cc; --tiroir-accent: #5ec6f2; --tiroir-bord: rgba(255, 255, 255, .18);
    position: fixed; top: 0; bottom: 0; left: 0; z-index: 2; order: 10;
    width: min(86vw, 340px); box-sizing: border-box; margin: 0;
    display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 0;
    padding: 14px 12px calc(14px + env(safe-area-inset-bottom));
    background: var(--tiroir); color: var(--tiroir-texte); border-radius: 0 20px 20px 0; box-shadow: 8px 0 30px rgba(0, 0, 0, .35);
    overflow-y: auto; overscroll-behavior: contain;
    transform: translateX(-105%); visibility: hidden;
    transition: transform .26s cubic-bezier(.2, .8, .3, 1), visibility 0s linear .26s;
  }
  .nav-h.est-ouvert { transform: none; visibility: visible; transition: transform .26s cubic-bezier(.2, .8, .3, 1); }
  .nav-voile { display: block; position: fixed; inset: 0; z-index: 1; background: rgba(10, 20, 32, .5); }
  .nav-voile[hidden] { display: none; }

  .nav-h__tete { display: flex; align-items: center; gap: 10px; padding: 2px 4px 18px; }
  .nav-h__tete .marque__sigle { flex: none; }
  .nav-h__nom { flex: 1; min-width: 0; display: grid; line-height: 1.25; }
  .nav-h__nom strong { font: 700 1rem var(--titre); color: #fff; }
  .nav-h__nom span { font-size: .78rem; color: var(--tiroir-doux); }
  .nav-h__fermer {
    flex: none; display: grid; place-items: center; width: 40px; height: 40px; padding: 0; box-sizing: border-box;
    border-radius: 12px; border: 1px solid var(--tiroir-bord); background: transparent; color: #fff; cursor: pointer;
  }
  .nav-h__fermer svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; }
  .nav-h__fermer:focus-visible { outline: 3px solid var(--tiroir-accent); outline-offset: 2px; }

  .nav-h__section { display: block; margin: 4px 12px 6px; font: 700 .69rem var(--texte); letter-spacing: .1em; text-transform: uppercase; color: var(--tiroir-section); }
  .nav-h .nav-h__liste { display: grid; gap: 1px; padding: 0 0 14px; }
  .nav-h .nav-h__lien {
    display: flex; align-items: center; gap: 14px; min-height: 44px; padding: 0 12px; border-radius: 10px;
    color: var(--tiroir-texte); font: 600 .97rem var(--texte); background: none; text-decoration: none;
  }
  .nav-h .nav-h__lien:hover { background: rgba(255, 255, 255, .06); color: #fff; }
  .nav-h .nav-h__lien:focus-visible { outline: 2px solid var(--tiroir-accent); outline-offset: -2px; }
  .nav-h .nav-h__lien.est-actif { color: #fff; font-weight: 700; background: rgba(94, 198, 242, .14); box-shadow: inset 3px 0 0 var(--tiroir-accent); }
  .nav-h__icone { display: grid; place-items: center; flex: none; width: 20px; height: 20px; color: var(--tiroir-icone); }
  .nav-h__icone svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
  .nav-h__lien.est-actif .nav-h__icone { color: var(--tiroir-accent); }
  .nav-h .puce {
    margin-left: auto; padding: 0; border: 0; background: none; color: #f0c469;
    font: 700 .66rem var(--texte); letter-spacing: .08em; text-transform: uppercase;
  }
  .nav-h__compteur {
    margin-left: auto; min-width: 20px; height: 20px; padding: 0 6px; box-sizing: border-box; border-radius: 99px;
    display: inline-grid; place-items: center; background: var(--tiroir-accent); color: #10243a; font: 700 .72rem var(--texte);
  }

  /* le compte, en bas : initiales à la couleur du statut (--role), « Délégué·e · Mon compte », déconnexion */
  .nav-h__compte { display: flex; align-items: center; gap: 12px; margin: auto 0 10px; padding: 12px; border-radius: 14px; background: rgba(255, 255, 255, .06); }
  .nav-h__avatar {
    flex: none; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%;
    background: var(--role, var(--cyan-fonce)); color: #fff; font: 700 .8rem var(--titre); letter-spacing: .02em;
  }
  .nav-h__qui { flex: 1; min-width: 0; display: grid; gap: 2px; text-decoration: none; }
  .nav-h__qui strong { color: #fff; font-size: .92rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .nav-h__qui span { font-size: .78rem; font-weight: 700; color: var(--tiroir-doux); }
  @supports (color: color-mix(in srgb, red 10%, white)) {
    .nav-h__qui span { color: color-mix(in srgb, var(--role, var(--tiroir-accent)) 42%, #fff); }
  }
  .nav-h__qui:focus-visible { outline: 2px solid var(--tiroir-accent); outline-offset: 3px; border-radius: 6px; }
  .nav-h__compte form { margin: 0; }
  .nav-h__sortir {
    display: grid; place-items: center; width: 38px; height: 38px; padding: 0; box-sizing: border-box; cursor: pointer;
    border-radius: 10px; border: 1px solid var(--tiroir-bord); background: transparent; color: var(--tiroir-doux);
  }
  .nav-h__sortir svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
  .nav-h__sortir:hover { color: #fff; border-color: rgba(255, 255, 255, .4); }
  .nav-h__sortir:focus-visible { outline: 3px solid var(--tiroir-accent); outline-offset: 2px; }

  .nav-h .bouton-discord--entete { margin: auto 4px 12px; justify-content: center; }
  .nav-h__pied { display: block; margin: auto 8px 0; font-size: .72rem; line-height: 1.45; color: var(--tiroir-section); }
  .nav-h__compte ~ .nav-h__pied, .nav-h .bouton-discord--entete ~ .nav-h__pied { margin-top: 0; }
  html.nav-tiroir-ouvert { overflow: hidden; }
}
@media (max-width: 640px) and (prefers-reduced-motion: reduce) {
  .nav-h, .nav-h.est-ouvert { transition: none; }
}
.nav-h:focus { outline: none; }
/* 2.34.1 : le tiroir se referme en le glissant vers la gauche (main.js) ; le navigateur garde le défilement vertical. */
@media (max-width: 640px) {
  .nav-h, .nav-voile { touch-action: pan-y; }
  .nav-voile { transition: opacity .2s ease; }
}

/* ------------------------------------------------------------------
   Site 2.36 (24/10) — « Généré par IA » : l'étiquette, le choix obligatoire à l'ajout,
   l'encadré du Prompt IA. Une seule teinte violette, lisible de jour comme de nuit
   (mélangée au fond, texte à l'encre du site).
   ------------------------------------------------------------------ */
.etiquette--ia { gap: .25rem; color: var(--encre); background: color-mix(in srgb, #8b5cf6 13%, transparent); border-color: color-mix(in srgb, #8b5cf6 45%, transparent); cursor: help; }
.etiquette--ia .icone { width: .85rem; height: .85rem; color: #8b5cf6; flex: none; }
.carte-question__provenance { margin-bottom: .6rem; }
.carte-ligne__ia { margin-top: .35rem; }
.carte-apprendre__ia { align-self: center; margin: 0 auto .4rem; }

.ia-champ { margin: .4rem 0 .2rem; padding: .85rem 1rem; border-radius: 12px; border: 1.5px solid color-mix(in srgb, #8b5cf6 35%, var(--trait)); background: color-mix(in srgb, #8b5cf6 5%, transparent); }
.ia-champ legend.editeur__libelle { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem; float: left; width: 100%; }
.ia-champ legend .icone { color: #8b5cf6; }
.ia-champ__quoi { font-weight: 400; }
.ia-champ__requis { margin-left: auto; font: 700 .68rem/1.4 var(--texte) !important; text-transform: uppercase; letter-spacing: .04em; color: #7c3aed !important; }
:root[data-theme="dark"] .ia-champ__requis { color: #c4b5fd !important; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .ia-champ__requis { color: #c4b5fd !important; } }
.ia-champ__choix-liste { clear: both; display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: .5rem; }
.ia-champ__choix-liste--trois { grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); }
.impression__ia { display: block; margin-top: .25rem; font-size: .75rem; color: var(--encre-douce); }
.ia-champ__choix { position: relative; cursor: pointer; display: block; }
.ia-champ__choix input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.ia-champ__libelle { display: grid; gap: .1rem; height: 100%; padding: .55rem .8rem; border-radius: 9px; border: 1.5px solid var(--trait); background: var(--blanc); }
.ia-champ__libelle strong { font-size: .92rem; }
.ia-champ__libelle span { font-size: .8rem; color: var(--encre-douce); }
.ia-champ__choix:hover .ia-champ__libelle { border-color: #8b5cf6; }
.ia-champ__choix input:checked + .ia-champ__libelle { border-color: #8b5cf6; background: color-mix(in srgb, #8b5cf6 14%, var(--blanc)); box-shadow: inset 0 0 0 1px #8b5cf6; }
.ia-champ__choix input:focus-visible + .ia-champ__libelle { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ia-champ .champ__aide { margin: .5rem 0 0; }

.encadre--ia { display: flex; gap: .6rem; align-items: flex-start; margin: .6rem 0; padding: .75rem 1rem; border-left-color: #8b5cf6; background: color-mix(in srgb, #8b5cf6 9%, transparent); }
.encadre--ia > .icone { flex: none; color: #8b5cf6; margin-top: .15rem; }

/* Valider en disant sa confiance (site 2.37, 24/10) : trois boutons à la place de « Valider »
   dans le Questionnaire du Module de révision — « Je devine », « J'hésite », « Sûr·e »
   (question_valider, banque_note_memoire : juste = difficile / bien / facile pour FSRS). */
/* Le bouton d'envoi par défaut (Entrée dans un trou) : rendu, mais ni vu ni cliquable. */
.envoi-par-defaut { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; border: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; opacity: 0; pointer-events: none; }
.valider-confiance { flex: 1 1 100%; display: grid; gap: .45rem; }
.valider-confiance__titre { margin: 0; font-size: .86rem; font-weight: 600; color: var(--encre-douce); }
.valider-confiance__boutons { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .55rem; max-width: 34rem; }
.valider-confiance__bouton {
  position: relative; display: flex; align-items: center; justify-content: center; gap: .45rem;
  min-height: 3rem; padding: .55rem .7rem; border-radius: 12px; cursor: pointer;
  font: 700 .98rem var(--texte); border: 2px solid var(--teinte, var(--cyan)); background: var(--blanc); color: var(--encre);
  transition: background-color .12s ease, transform .08s ease;
}
.valider-confiance__bouton .icone { width: 1.2rem; height: 1.2rem; flex: none; color: var(--teinte, var(--cyan)); }
.valider-confiance__bouton kbd {
  position: absolute; top: .25rem; right: .35rem; font: 600 .66rem/1 var(--texte); padding: .12rem .28rem; border-radius: 4px;
  background: var(--papier); color: var(--encre-douce); border: 0;
}
@media (hover: none) { .valider-confiance__bouton kbd { display: none; } }
.valider-confiance__bouton:hover { background: color-mix(in srgb, var(--teinte, var(--cyan)) 12%, var(--blanc)); }
.valider-confiance__bouton:active { transform: translateY(1px); }
.valider-confiance__bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.valider-confiance__bouton--devine { border-style: dashed; }
.valider-confiance__bouton--sur { background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.valider-confiance__bouton--sur .icone { color: currentColor; }
.valider-confiance__bouton--sur:hover { background: color-mix(in srgb, var(--teinte, var(--cyan)) 86%, #000); }
.valider-confiance__bouton--sur kbd { background: rgba(255, 255, 255, .25); color: inherit; }
@media (max-width: 520px) {
  .valider-confiance__bouton { flex-direction: column; gap: .2rem; min-height: 3.6rem; font-size: .9rem; padding: .45rem .3rem; }
}

/* Fenêtre (<dialog>) — « Signaler cette question » (site 2.37, 24/10, signaler.js) : par-dessus
   la page ou le jeu ; les motifs en grandes lignes cliquables. */
.boite {
  width: min(32rem, calc(100vw - 1.5rem)); max-height: calc(100dvh - 1.5rem); padding: 0; border: 0; border-radius: 18px;
  background: var(--blanc); color: var(--encre); box-shadow: 0 26px 70px rgba(8, 16, 26, .38); overflow: auto;
  font: 400 1rem/1.5 var(--texte);
}
.boite::backdrop { background: rgba(8, 16, 26, .55); backdrop-filter: blur(2px); }
.boite__tete { display: flex; align-items: flex-start; justify-content: space-between; gap: .8rem; padding: 1.1rem 1.2rem .2rem; }
.boite__titre { margin: 0; font: 800 1.15rem/1.3 var(--titre); }
.boite__fermer { flex: none; width: 2.2rem; height: 2.2rem; border-radius: 50%; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font-size: 1.3rem; line-height: 1; cursor: pointer; }
.boite__fermer:hover { background: var(--papier); }
.boite__aide { margin: 0; padding: 0 1.2rem; font-size: .86rem; color: var(--encre-douce); max-width: none; }
.boite__corps { display: grid; gap: .85rem; padding: .9rem 1.2rem 1.2rem; }
.boite__extrait {
  margin: 0; padding: .6rem .85rem; border-left: 3px solid var(--grenat, #b3261e); border-radius: 0 10px 10px 0;
  background: var(--papier); font-size: .92rem; color: var(--encre);
}
.boite__note { margin: 0; padding: .5rem .75rem; border-radius: 10px; background: var(--cyan-pale); font-size: .86rem; max-width: none; }
.boite__motifs { display: grid; gap: .4rem; margin: 0; padding: 0; border: 0; min-width: 0; }
.boite__legende { margin: 0 0 .25rem; padding: 0; font-weight: 700; font-size: .92rem; }
.boite__motif {
  display: flex; align-items: center; gap: .65rem; padding: .6rem .8rem; border-radius: 12px; cursor: pointer;
  border: 1.5px solid var(--trait); background: var(--blanc); font-weight: 600; font-size: .95rem;
}
.boite__motif:hover { border-color: var(--grenat, #b3261e); }
.boite__motif input { width: 1.1rem; height: 1.1rem; flex: none; margin: 0; accent-color: var(--grenat, #b3261e); }
.boite__motif:has(input:checked) { border-color: var(--grenat, #b3261e); background: color-mix(in srgb, var(--grenat, #b3261e) 8%, var(--blanc)); }
.boite__motif:has(input:focus-visible) { outline: 3px solid var(--ambre); outline-offset: 2px; }
.boite__champ { display: grid; gap: .3rem; font-weight: 600; font-size: .9rem; }
.boite__champ small { font-weight: 400; color: var(--encre-douce); }
.boite__champ textarea {
  width: 100%; font: inherit; font-weight: 400; font-size: .95rem; color: var(--encre); resize: vertical;
  background: var(--papier); border: 1px solid var(--trait); border-radius: 10px; padding: .55rem .7rem;
}
.boite__erreur { margin: 0; color: var(--faux, #b3261e); font-weight: 600; font-size: .9rem; }
.boite__erreur[hidden] { display: none; }
.boite__pied { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: .8rem; }
.boite__merci { margin: .4rem 0; padding: .8rem 1rem; border-radius: 12px; background: var(--juste-fond); color: var(--encre); font-weight: 600; max-width: none; }
a.est-signale { color: var(--encre-douce); pointer-events: none; }

/* Module de révision : deux grandes tuiles, « S'entraîner » et « Ajouter » (site 2.37, 24/10) ;
   S'entraîner propose ensuite Jouer ou Questionnaire (rv-choix-deux--entrainer). */
.rv-trois--deux { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.rv-choix-deux--entrainer + .rv-etape, .rv-choix-deux--entrainer + .rv-etape__note + .rv-etape { margin-top: 14px; }
@media (max-width: 640px) {
  .rv-trois--deux .rv-grande__sous { display: block; font-size: .74rem; line-height: 1.3; }
  .rv-choix-deux--entrainer { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .rv-choix-deux--entrainer .rv-choix { flex-direction: column; align-items: flex-start; gap: 8px; padding: 12px; }
  .rv-choix-deux--entrainer .rv-choix__sous { font-size: .76rem; }
}

/* ==== Les fichiers du drive : UNE structure (site 2.37, 24/10 ; redessinée en 2.38, 24/10, sur la
   maquette retenue par Matthias — includes/fichiers-vues.php) ====
   Tuiles = des cartes (la 1re page en haut) ; Liste = la même carte couchée (la page à gauche,
   les infos au milieu, les boutons à droite). Mêmes éléments, même ordre : l'aperçu, le menu ⋯,
   l'année académique et le #, le titre, l'auteur·rice, la note de tous ; puis Ouvrir · ⬇ PDF ;
   puis Merci · Noter · Commenter. Cartes étroites : libellés courts (requêtes de conteneur). */
/* lu par les lecteurs d'écran seulement */
.saut-lecteur { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); border: 0; white-space: nowrap; }
.fichiers {
  --or: #e7a800; --or-fonce: #b07f00; --or-texte: #6b4d00;
  --rose: #c2255c; --rose-texte: #a51d4f;
  list-style: none; margin: 0; padding: 0; display: grid; gap: 1.25rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 16.5rem), 1fr));
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .fichiers { --or-fonce: #f0c04a; --or-texte: #f6d77e; --rose: #f06595; --rose-texte: #f59ab9; }
}
:root[data-theme="dark"] .fichiers { --or-fonce: #f0c04a; --or-texte: #f6d77e; --rose: #f06595; --rose-texte: #f59ab9; }
.fichier {
  position: relative; display: flex; flex-direction: column; min-width: 0;
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px;
  box-shadow: 0 1px 2px rgba(16, 36, 58, .06), 0 6px 18px rgba(16, 36, 58, .07); container-type: inline-size;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.fichier:hover { border-color: var(--teinte-trait, var(--cyan)); box-shadow: 0 2px 4px rgba(16, 36, 58, .06), 0 12px 28px rgba(16, 36, 58, .1); }
.fichier:target, .fichier--nouveau { border-color: var(--cyan); outline: 3px solid var(--cyan-pale); }
.fichier--attente { border-style: dashed; }

/* l'aperçu : la première page qui dépasse, comme une feuille posée dans la chemise */
.fichier__visuel {
  position: relative; height: 9.9rem; display: flex; align-items: flex-end; justify-content: center; padding: 1.25rem 1rem 0;
  overflow: hidden; border-radius: 15px 15px 0 0; background: var(--teinte-pale, var(--papier));
}
.fichier__vignette { display: block; flex: none; text-decoration: none; }
.fichier__vignette--image {
  width: 46%; max-width: 8rem; overflow: hidden; border-radius: 3px 3px 0 0; background: #fff;
  box-shadow: 0 1px 4px rgba(16, 36, 58, .2), 0 6px 16px rgba(16, 36, 58, .1); transition: transform .2s ease;
}
.fichier__vignette--image img { display: block; width: 100%; height: auto; }
.fichier__vignette--paysage { width: 80%; max-width: 13rem; }
.fichier:hover .fichier__vignette--image { transform: translateY(-4px); }
.fichier__vignette--pdf, .fichier__vignette--office, .fichier__vignette--texte, .fichier__vignette--image:not(a) {
  position: relative; width: 5.6rem; height: 6.8rem; display: grid; place-items: end center; padding-bottom: .9rem;
  border-radius: 4px 16px 0 0; background: #fff; box-shadow: 0 3px 12px rgba(16, 36, 58, .16);
}
.fichier__page { position: absolute; inset: 1rem .8rem auto; height: 2.2rem; background: repeating-linear-gradient(#e3e9ef 0 2px, transparent 2px 7px); }
.fichier__ext { font: 800 .74rem/1 var(--titre); letter-spacing: .06em; padding: .25rem .45rem; border-radius: 5px; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.fichier__vignette--liens { align-self: center; margin-bottom: 1.1rem; width: 3.6rem; height: 3.6rem; border-radius: 50%; display: grid; place-items: center; background: var(--blanc); color: var(--teinte, var(--lien)); box-shadow: 0 3px 12px rgba(16, 36, 58, .14); }
.fichier__vignette--liens .icone { width: 1.6rem; height: 1.6rem; }

/* les ouvertures (pour l'auteur·rice seul·e) et « Nouveau » : une pastille sur la page */
.fichier__pastille, .fichier__ouvertures {
  display: inline-flex; align-items: center; gap: .35rem; padding: .3rem .65rem; border-radius: 99px;
  background: var(--marine); color: #fff; font: 700 .75rem/1.1 var(--texte); white-space: nowrap;
}
.fichier__pastille { position: absolute; top: .75rem; left: .75rem; z-index: 2; box-shadow: 0 1px 4px rgba(16, 36, 58, .2); }
.fichier__pastille .icone, .fichier__ouvertures .icone { width: .85rem; height: .85rem; flex: none; }
.fichier__pastille--nouveau { background: var(--ambre); color: #3d2700; }
.fichier__ouvertures { display: none; padding: .16rem .55rem; font-size: .74rem; }
.fichier__pastille .fichier__lib-court { display: none; }

/* le menu ⋯ : en haut à droite de la carte */
.fichier__menu { position: absolute; top: .65rem; right: .65rem; z-index: 4; }
.fichier__menu-bouton {
  width: 2.25rem; height: 2.25rem; display: grid; place-items: center; border-radius: 50%; cursor: pointer; list-style: none;
  border: 1px solid var(--trait); background: color-mix(in srgb, var(--blanc) 92%, transparent); color: var(--encre);
  box-shadow: 0 1px 4px rgba(16, 36, 58, .12);
}
.fichier__menu-bouton::-webkit-details-marker { display: none; }
.fichier__menu-bouton .icone { width: 1.15rem; height: 1.15rem; }
.fichier__menu-bouton:hover, .fichier__menu[open] > .fichier__menu-bouton { background: var(--blanc); border-color: var(--encre-douce); }
.fichier__menu-bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.fichier:has(details[open]) { z-index: 5; }

/* ce que c'est */
.fichier__corps { display: flex; flex-direction: column; gap: .5rem; flex: 1 1 auto; min-width: 0; padding: .9rem 1rem .25rem; }
.fichier__etiquettes { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem; margin: 0; font-size: .75rem; }
.fichier__etiquettes:empty { display: none; }
.fichier__etiquettes .tag { padding: .16rem .55rem; font-size: .75rem; }
.fichier__annee { padding: .16rem .55rem; border-radius: 99px; font-weight: 800; letter-spacing: .01em; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.fichier__contexte { padding: .16rem .5rem; border-radius: 99px; font-weight: 600; background: var(--papier); color: var(--encre-douce); }
.fichier__titre {
  margin: 0; font-size: .95rem; line-height: 1.35; overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.fichier__titre a { color: var(--encre); text-decoration: none; }
.fichier__titre a:hover { color: var(--lien); text-decoration: underline; }
.fichier__infos { margin: 0; font-size: .8rem; color: var(--encre-douce); }
/* la note de tous : sa propre ligne, jamais dans le bouton « Noter » */
.fichier__moyenne { display: flex; flex-wrap: wrap; align-items: center; gap: .1rem .45rem; margin: .1rem 0 0; font-size: .8rem; color: var(--encre-douce); }
.fichier__note { font-size: .875rem; font-weight: 800; color: var(--encre); }
.etoiles { display: inline-flex; gap: 1px; flex: none; }
.etoiles__une { display: block; width: 1rem; height: 1rem; }
.etoiles__contour { fill: none; stroke: var(--or); stroke-width: 1.6; stroke-linejoin: round; }
.etoiles__une--pleine .etoiles__contour, .etoiles__moitie { fill: var(--or); }
.fichier__moyenne--vide .etoiles__contour { stroke: var(--trait); stroke-width: 1.8; }
.fichier__votes-court { display: none; }
.fichier__description { display: none; margin: 0; font-size: .86rem; color: var(--encre); }
.fichier__origine { display: none; margin: 0; font-size: .76rem; color: var(--encre-douce); }
.fichier__attente { display: flex; align-items: center; gap: .35rem; margin: 0; font-size: .78rem; color: var(--encre-douce); }
.fichier--liens .document__liens { margin-top: .2rem; }

/* les actions, toujours dans cet ordre */
.fichier__actions { display: flex; flex-direction: column; gap: .5rem; padding: .75rem 1rem 1rem; }
.fichier__principal { display: flex; gap: .5rem; min-width: 0; }
.fichier__ouvrir {
  flex: 1 1 auto; display: inline-flex; align-items: center; justify-content: center; gap: .45rem; min-height: 2.75rem; padding: 0 .8rem;
  border-radius: 10px; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .875rem var(--texte); text-decoration: none;
}
.fichier__ouvrir:hover { filter: brightness(1.08); }
.fichier__ouvrir--attente { background: var(--papier); color: var(--encre-douce); border: 1.5px dashed var(--trait); cursor: default; text-align: center; }
.fichier__ouvrir--attente:hover { filter: none; }
.fichier__telecharger {
  flex: none; width: 3rem; min-height: 2.75rem; display: grid; place-items: center; border-radius: 10px;
  border: 1.5px solid var(--teinte-trait, var(--trait)); background: var(--blanc);
  color: color-mix(in srgb, var(--teinte, var(--lien)) 62%, var(--encre)); text-decoration: none;
}
.fichier__telecharger:hover { background: var(--teinte-pale, var(--cyan-pale)); border-color: var(--teinte, var(--cyan)); }
.fichier__ouvrir .icone, .fichier__telecharger .icone { width: 1.15rem; height: 1.15rem; flex: none; }
.fichier__ouvrir:focus-visible, .fichier__telecharger:focus-visible, .fichier__bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }

/* Merci · Noter · Commenter : deux lignes — l'icône et un nombre, puis ce que fait le bouton
   (ou ce que vous avez fait). (Le formulaire de « Merci » est en display: contents.) */
.fichier__social { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; min-width: 0; }
.fichier__social > .menu-suivi { display: flex; min-width: 0; }
.fichier__bouton {
  width: 100%; min-width: 0; min-height: 3.375rem; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .2rem;
  padding: .35rem .15rem; border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc); color: var(--encre);
  font: 700 .875rem/1 var(--texte); text-align: center; text-decoration: none; cursor: pointer; list-style: none;
}
.fichier__bouton::-webkit-details-marker { display: none; }
.fichier__bouton:hover { border-color: var(--encre-douce); }
.fichier__haut { display: inline-flex; align-items: center; justify-content: center; gap: .3rem; }
.fichier__haut .icone { width: 1.05rem; height: 1.05rem; flex: none; }
.fichier__bas { max-width: 100%; font-size: .7rem; font-weight: 700; line-height: 1.15; color: var(--encre-douce); hyphens: none; }
.fichier__lib-court { display: none; }
.fichier__compte { font-weight: 800; }
.fichier__bouton--merci .fichier__haut { color: var(--rose); }
.fichier__bouton--merci.est-dit { border: 1.5px solid color-mix(in srgb, var(--rose) 50%, var(--trait)); background: color-mix(in srgb, var(--rose) 9%, var(--blanc)); }
.fichier__bouton--merci.est-dit .fichier__bas { color: var(--rose-texte); }
.fichier__bouton--note .fichier__haut .icone { color: var(--or-fonce); }
.fichier__bouton--note.est-note { border: 1.5px solid var(--or); background: color-mix(in srgb, var(--or) 12%, var(--blanc)); }
.fichier__bouton--note.est-note .fichier__haut .icone { color: var(--or); }
.fichier__bouton--note.est-note .fichier__bas { color: var(--or-texte); }
.fichier__noter[open] > .fichier__bouton { border-color: var(--or); }
.fichier__bouton--commentaires .fichier__bas { font-weight: 600; }
/* sur son propre document : des informations, pas des boutons */
.fichier__bouton.est-sien { border-style: dashed; background: var(--papier); opacity: .72; cursor: default; }
.fichier__bouton.est-sien:hover { border-color: var(--trait); }

/* « Noter » : cinq étoiles dans une petite fenêtre */
.fichier__pop { min-width: 15.5rem; padding: .75rem .9rem .8rem; display: grid; gap: .45rem; }
.fichier__pop-titre { margin: 0; font-weight: 700; font-size: .9rem; color: var(--encre); }
.fichier__pop-note { margin: 0; font-size: .78rem; color: var(--encre-douce); }
.fichier__pop .bouton-lien { font-size: .8rem; }
.etoiles-choix { display: flex; flex-direction: row-reverse; justify-content: flex-end; gap: .1rem; margin: 0; }
.etoiles-choix__etoile {
  border: 0; background: none; padding: 0 .08rem; cursor: pointer; font-size: 2rem; line-height: 1; color: var(--trait);
  transition: transform .1s ease, color .1s ease;
}
.etoiles-choix__etoile.est-pleine { color: #e7a800; }
.etoiles-choix:hover .etoiles-choix__etoile { color: var(--trait); }
.etoiles-choix:hover .etoiles-choix__etoile:hover, .etoiles-choix:hover .etoiles-choix__etoile:hover ~ .etoiles-choix__etoile { color: #e7a800; }
.etoiles-choix__etoile:hover { transform: scale(1.12); }
.etoiles-choix__etoile:focus-visible { outline: 3px solid var(--ambre); border-radius: 4px; }

/* cartes étroites (deux par ligne sur téléphone) : libellés courts, tout un peu plus serré */
@container (max-width: 15rem) {
  .fichier__bas { font-size: .68rem; }
  .fichier__social { gap: .35rem; }
}
@container (max-width: 13.5rem) {
  .fichier__visuel { height: 6.25rem; padding: .85rem .6rem 0; }
  .fichier__vignette--image { width: 52%; }
  .fichier__vignette--pdf, .fichier__vignette--office, .fichier__vignette--texte, .fichier__vignette--image:not(a) { width: 4.2rem; height: 5.1rem; padding-bottom: .6rem; }
  .fichier__page { inset: .7rem .55rem auto; height: 1.5rem; }
  .fichier__pastille { top: .5rem; left: .5rem; padding: .2rem .45rem; font-size: .68rem; }
  .fichier__pastille .icone { display: none; }
  /* le libellé long reste lu par les lecteurs d'écran ; le court (aria-hidden) se voit */
  .fichier__pastille .fichier__lib-long, .fichier__social .fichier__lib-long, .fichier__votes-long {
    position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); border: 0; white-space: nowrap;
  }
  .fichier__pastille .fichier__lib-court, .fichier__social .fichier__lib-court, .fichier__votes-court { display: inline; }
  .fichier__menu { top: .4rem; right: .4rem; }
  .fichier__menu-bouton { width: 2rem; height: 2rem; }
  .fichier__corps { gap: .3rem; padding: .6rem .65rem .2rem; }
  .fichier__etiquettes { font-size: .68rem; }
  .fichier__etiquettes .tag, .fichier__contexte { display: none; }
  .fichier__titre { font-size: .82rem; line-height: 1.3; }
  .fichier__infos { font-size: .7rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .fichier__moyenne { gap: .1rem .25rem; font-size: .7rem; }
  .fichier__note { font-size: .74rem; }
  .etoiles__une { width: .75rem; height: .75rem; }
  .fichier__actions { gap: .4rem; padding: .5rem .5rem .6rem; }
  .fichier__principal { gap: .35rem; }
  .fichier__ouvrir { min-height: 2.5rem; padding: 0 .4rem; font-size: .82rem; }
  .fichier__ouvrir .icone { display: none; }
  .fichier__ouvrir--attente { font-size: .72rem; }
  .fichier__telecharger { width: 2.5rem; min-height: 2.5rem; }
  .fichier__social { gap: .25rem; }
  .fichier__bouton { min-height: 2.875rem; padding: .25rem .1rem; border-radius: 8px; gap: .1rem; font-size: .75rem; }
  .fichier__haut { gap: .15rem; }
  .fichier__haut .icone { width: .85rem; height: .85rem; }
  .fichier__bas { font-size: .625rem; }
  /* des liens : une ligne chacun, le nom seul */
  .fichier--liens .liens { grid-template-columns: minmax(0, 1fr); gap: .25rem; margin-top: .2rem; }
  .fichier--liens .lien__lien { flex-wrap: nowrap; padding: .3rem .5rem; border-radius: 8px; }
  .fichier--liens .lien__titre { min-width: 0; font-size: .74rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; overflow-wrap: normal; }
  .fichier--liens .lien__domaine { display: none; }
}

/* modifier : la carte prend toute la largeur et devient le formulaire */
.fichier--edition { grid-column: 1 / -1; flex-direction: row; align-items: stretch; }
.fichier--edition .fichier__visuel { width: 10rem; height: auto; flex: none; border-radius: 15px 0 0 15px; border-right: 1px solid var(--trait); align-items: flex-start; padding-top: 1.3rem; }
.fichier--edition .fichier__corps { flex: 1 1 auto; padding: 1rem 1.2rem 1.1rem; gap: .7rem; }
.fichier--edition .fichier__titre { -webkit-line-clamp: unset; }
.fichier__formulaire { display: grid; gap: .8rem; max-width: 40rem; }
.fichier__formulaire .actions-ligne { margin: 0; }
.fichier__annuler { margin: 0; }

/* vue Liste (et la carte seule de la page des commentaires) : la même carte, couchée —
   la page à gauche, les infos au milieu, les boutons à droite, le ⋯ dans le coin */
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) { grid-template-columns: minmax(0, 1fr); gap: .8rem; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) > .fichier:not(.fichier--edition) {
  display: grid; grid-template-columns: 8.25rem minmax(0, 1fr) 18.25rem; grid-template-areas: "visuel corps actions";
  box-shadow: 0 1px 2px rgba(16, 36, 58, .05), 0 4px 12px rgba(16, 36, 58, .05);
}
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) > .fichier:not(.fichier--edition) > .fichier__visuel {
  grid-area: visuel; height: auto; min-height: 9.4rem; align-items: center; padding: 1rem .8rem; border-radius: 15px 0 0 15px;
}
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__vignette--image { width: 5.1rem; max-width: none; border-radius: 3px; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__vignette--paysage { width: 100%; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier:hover .fichier__vignette--image { transform: none; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) :is(.fichier__vignette--pdf, .fichier__vignette--office, .fichier__vignette--texte, .fichier__vignette--image:not(a)) {
  width: 4.8rem; height: 6.2rem; border-radius: 4px 14px 4px 4px;
}
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__vignette--liens { margin: 0; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__pastille:not(.fichier__pastille--nouveau) { display: none; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__pastille { top: .5rem; left: .5rem; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__ouvertures { display: inline-flex; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu { top: 1rem; right: 1rem; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__corps { grid-area: corps; gap: .45rem; padding: 1rem 1.1rem; justify-content: center; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__titre { font-size: .97rem; -webkit-line-clamp: 2; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__description { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__origine { display: block; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__actions { grid-area: actions; justify-content: center; padding: 1rem 1.1rem 1rem 0; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__principal { padding-right: 2.9rem; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__social { gap: .45rem; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__bouton { min-height: 3.25rem; }
/* des liens : pas de « Ouvrir », les boutons sous le ⋯ */
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__actions { padding-top: 3.9rem; justify-content: flex-start; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .document__liens { display: flex; flex-wrap: wrap; gap: .3rem; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .lien__lien { padding: .25rem .55rem; font-size: .8rem; }
/* sans boutons sociaux (Anciens cours) : la colonne de droite se resserre */
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier:not(:has(.fichier__social)) { grid-template-columns: 8.25rem minmax(0, 1fr) 14rem; }

/* téléphone et écrans moyens, en liste : la carte couchée, les boutons sous les infos */
@media (max-width: 760px) {
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) { gap: .6rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) > .fichier:not(.fichier--edition),
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier:not(:has(.fichier__social)) {
    grid-template-columns: 4rem minmax(0, 1fr); grid-template-areas: "visuel corps" "actions actions";
    column-gap: .7rem; padding: .65rem; border-radius: 14px;
  }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) > .fichier:not(.fichier--edition) > .fichier__visuel {
    min-height: 0; height: 4.9rem; align-self: start; padding: .45rem; border-radius: 9px;
  }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__vignette--image { width: 2.75rem; border-radius: 2px; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__vignette--paysage { width: 100%; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) :is(.fichier__vignette--pdf, .fichier__vignette--office, .fichier__vignette--texte, .fichier__vignette--image:not(a)) {
    width: 2.75rem; height: 3.6rem; padding-bottom: .4rem; border-radius: 3px 9px 3px 3px;
  }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__page { inset: .45rem .35rem auto; height: 1rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__ext { font-size: .5rem; padding: .15rem .25rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__vignette--liens { width: 2.6rem; height: 2.6rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__vignette--liens .icone { width: 1.15rem; height: 1.15rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__pastille { top: .25rem; left: .25rem; padding: .15rem .35rem; font-size: .6rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__pastille .icone { display: none; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu { top: .5rem; right: .5rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu-bouton { width: 2rem; height: 2rem; border: 0; background: var(--papier); box-shadow: none; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__corps { gap: .28rem; padding: 0 2.2rem 0 0; justify-content: flex-start; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__etiquettes { font-size: .68rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__etiquettes .tag { font-size: .68rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__ouvertures { font-size: .68rem; padding: .12rem .45rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__titre { font-size: .85rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__infos { font-size: .72rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__moyenne { font-size: .72rem; gap: .1rem .3rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .etoiles__une { width: .75rem; height: .75rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) :is(.fichier__description, .fichier__origine) { display: none; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__actions,
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__actions { padding: .6rem 0 0; gap: .4rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__principal { padding-right: 0; gap: .4rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__ouvrir { min-height: 2.6rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__telecharger { width: 2.9rem; min-height: 2.6rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__social { gap: .4rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__bouton { min-height: 3rem; font-size: .82rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__bas { font-size: .66rem; }
}

/* téléphone : deux cartes par ligne en tuiles */
@media (max-width: 640px) {
  .fichiers { grid-template-columns: repeat(auto-fill, minmax(min(100%, 9.6rem), 1fr)); gap: .6rem; }
  .fichier { border-radius: 14px; }
  .fichier__visuel { border-radius: 13px 13px 0 0; }
  .fichier--edition { flex-direction: column; }
  .fichier--edition .fichier__visuel { width: auto; height: 6rem; border-radius: 13px 13px 0 0; border-right: 0; align-items: flex-end; }
}

/* ==== « Ajouter » un fichier ou des liens utiles (site 2.38, 24/10 — includes/ajout-vues.php,
   assets/js/ajout.js ; maquette retenue par Matthias) ====
   Le bouton « + Ajouter » ouvre une fenêtre à deux onglets ; sur téléphone, la bulle + en bas
   à droite (repliée en défilant) ouvre un petit menu : Un fichier · Une photo · Des liens utiles.
   Sans JavaScript, la fenêtre s'affiche dans la page (?ajouter=…), tous ses champs visibles. */
.documents-page, .ajout { --vert-lien: #23733d; --vert-lien-pale: #e4f3e8; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .documents-page, :root:not([data-theme="light"]) .ajout { --vert-lien: #74d39a; --vert-lien-pale: #163322; }
}
:root[data-theme="dark"] .documents-page, :root[data-theme="dark"] .ajout { --vert-lien: #74d39a; --vert-lien-pale: #163322; }
.ajout-bouton {
  display: inline-flex; align-items: center; gap: .45rem; min-height: 2.5rem; padding: 0 1rem; border-radius: 11px;
  background: var(--teinte, var(--cyan-fonce)); color: var(--teinte-texte, #fff); font: 700 .875rem var(--texte); text-decoration: none;
  box-shadow: 0 1px 2px rgba(16, 36, 58, .12);
}
.ajout-bouton:hover { filter: brightness(1.08); color: var(--teinte-texte, #fff); }
.ajout-bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ajout-bouton .icone { width: 1.1rem; height: 1.1rem; stroke-width: 2.4; }
.ajout-bouton--grand { min-height: 3rem; padding: 0 1.4rem; font-size: 1rem; }

/* la fenêtre */
.ajout {
  --ajout-bord: color-mix(in srgb, var(--encre-douce) 35%, var(--trait));
  width: min(28rem, calc(100vw - 2rem)); max-height: calc(100dvh - 3rem); margin: 2rem auto auto; padding: 1.25rem 1.375rem 1.3rem;
  border: 0; border-radius: 20px; background: var(--blanc); color: var(--encre);
  box-shadow: 0 20px 60px rgba(16, 36, 58, .35); overflow: auto; overscroll-behavior: contain;
}
.ajout::backdrop { background: rgba(16, 36, 58, .42); }
.ajout:focus, .ajout:focus-visible { outline: none; }
.ajout[open] { display: flex; flex-direction: column; gap: 1rem; }
/* sans JavaScript (?ajouter=…) : dans la page, en haut de la liste */
.ajout[open]:not(:modal) {
  position: static; width: auto; max-width: 34rem; max-height: none; margin: 0 0 1.6rem;
  border: 1px solid var(--trait); box-shadow: 0 1px 2px rgba(16, 36, 58, .06), 0 6px 18px rgba(16, 36, 58, .07);
}
.ajout__tete { display: flex; align-items: center; gap: .6rem; }
.ajout__titre { flex: 1 1 auto; min-width: 0; margin: 0; font-size: 1.06rem; line-height: 1.3; }
.ajout__titre-decrire { display: none; }
.ajout[data-etape="decrire"] .ajout__titre-choisir { display: none; }
.ajout[data-etape="decrire"] .ajout__titre-decrire { display: inline; }
.ajout__rond {
  flex: none; width: 2.125rem; height: 2.125rem; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%;
  background: var(--papier); color: var(--encre); cursor: pointer; text-decoration: none;
}
.ajout__rond[hidden] { display: none; }
.ajout__rond:hover { background: var(--trait); color: var(--encre); }
.ajout__rond .icone { width: 1rem; height: 1rem; stroke-width: 2.4; }
.ajout__onglets { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 4px; border-radius: 12px; background: var(--papier); }
.ajout[data-etape="decrire"] .ajout__onglets { display: none; }
.ajout__onglet {
  min-height: 2.5rem; display: inline-flex; align-items: center; justify-content: center; gap: .45rem; border-radius: 9px;
  color: var(--encre-douce); font: 700 .875rem var(--texte); text-decoration: none;
}
.ajout__onglet:hover { color: var(--encre); }
.ajout__onglet[aria-current] { background: var(--blanc); color: var(--encre); box-shadow: 0 1px 3px rgba(16, 36, 58, .15); }
.ajout__onglet .icone { width: 1.05rem; height: 1.05rem; }
.ajout__onglet--fichier[aria-current] .icone { color: var(--teinte, var(--cyan)); }
.ajout__onglet--liens[aria-current] .icone { color: var(--vert-lien); }
.ajout__onglet:focus-visible { outline: 3px solid var(--ambre); outline-offset: 1px; }
.ajout__erreur { margin: 0; max-width: none; font-size: .88rem; }

.ajout__formulaire { display: flex; flex-direction: column; gap: .95rem; margin: 0; }
.ajout__formulaire[hidden] { display: none; }
.ajout__etape { display: flex; flex-direction: column; gap: .95rem; }
.ajout__formulaire[data-etape="choisir"] .ajout__etape--decrire,
.ajout__formulaire[data-etape="decrire"] .ajout__etape--choisir { display: none; }

/* 1. choisir le fichier : la zone où le glisser */
.ajout__depot {
  position: relative; display: flex; flex-direction: column; align-items: center; gap: .55rem; padding: 2.4rem 1.25rem;
  border: 2px dashed var(--teinte-trait, var(--trait)); border-radius: 16px; text-align: center; cursor: pointer;
  background: color-mix(in srgb, var(--teinte, var(--cyan)) 6%, var(--blanc));
  transition: border-color .15s ease, background-color .15s ease;
}
.ajout__depot:hover, .ajout__depot.est-survolee { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--cyan-pale)); }
.ajout__depot:focus-within { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ajout__depot-rond {
  width: 4rem; height: 4rem; display: grid; place-items: center; border-radius: 50%;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff);
  box-shadow: 0 6px 16px color-mix(in srgb, var(--teinte, var(--cyan)) 32%, transparent);
}
.ajout__depot-rond .icone { width: 1.75rem; height: 1.75rem; stroke-width: 2.2; }
.ajout__depot-titre { font: 700 1rem var(--titre); }
.ajout__depot-aide { font-size: .875rem; color: var(--encre-douce); }
.ajout__depot-lien { color: var(--lien); font-weight: 700; text-decoration: underline; }
.ajout__toucher { display: none; }
@media (hover: none) and (pointer: coarse) {
  .ajout__glisser { display: none; }
  .ajout__toucher { display: inline; }
}
.ajout__champ-fichier { max-width: 100%; margin-top: .3rem; font-size: .85rem; }
/* avec JavaScript : le champ, invisible, couvre toute la zone (il reçoit aussi le fichier glissé) */
.ajout--js .ajout__champ-fichier { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.ajout__formats { margin: 0; font-size: .78rem; line-height: 1.45; color: var(--encre-douce); text-align: center; }

/* 2. « Quelques mots sur le fichier » */
.ajout__choisi { display: flex; align-items: center; gap: .75rem; padding: .625rem .75rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); }
.ajout__choisi[hidden] { display: none; }
.ajout__choisi-page {
  flex: none; width: 2.25rem; height: 2.9rem; overflow: hidden; border: 1px solid var(--trait); border-radius: 4px;
  background-color: #fff; background-repeat: no-repeat;
  background-image: linear-gradient(var(--teinte, var(--cyan)), var(--teinte, var(--cyan))), repeating-linear-gradient(#cfd8e0 0 2px, transparent 2px 6px);
  background-size: 62% 3px, 74% 1.4rem; background-position: 5px 6px, 5px 13px;
}
.ajout__choisi-page img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }
.ajout__choisi-texte { flex: 1 1 auto; min-width: 0; }
.ajout__choisi-nom { margin: 0; font-size: .875rem; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ajout__choisi-etat { margin: .15rem 0 0; font-size: .78rem; color: var(--encre-douce); }
.ajout__choisi-etat.est-pret { color: var(--vert-lien); font-weight: 600; }
.ajout__choisi-etat.est-pret::before { content: "✓ "; }
.ajout__choisi-etat.est-erreur { color: var(--grenat-vif); font-weight: 700; }
.ajout__changer { flex: none; font-size: .82rem; font-weight: 700; }

.ajout__champ { display: flex; flex-direction: column; gap: .375rem; min-width: 0; margin: 0; padding: 0; border: 0; }
.ajout__libelle { padding: 0; font-size: .875rem; font-weight: 700; }
.ajout__facultatif { font-weight: 400; font-size: .8rem; color: var(--encre-douce); }
.ajout__aide { margin: 0; font-size: .8rem; line-height: 1.45; color: var(--encre-douce); }
.ajout__aide--erreur { color: var(--grenat-vif); font-weight: 700; }
.ajout__aide[hidden] { display: none; }
.ajout input[type="text"], .ajout input[type="url"], .ajout select, .ajout textarea {
  width: 100%; min-height: 2.75rem; padding: .55rem .75rem; border: 1.5px solid var(--ajout-bord); border-radius: 10px;
  background: var(--blanc); color: var(--encre); font: 1rem/1.4 var(--texte);
}
.ajout textarea { resize: vertical; }
.ajout input[type="text"]:focus, .ajout input[type="url"]:focus, .ajout select:focus, .ajout textarea:focus {
  border-color: var(--cyan); outline: 3px solid var(--cyan-pale); outline-offset: 0;
}
.ajout__ligne { display: grid; grid-template-columns: minmax(0, 1fr) 9.5rem; gap: .75rem; align-items: start; }
.ajout__tags-liste { display: flex; flex-wrap: wrap; gap: .4rem; }
.ajout .tag-choix span { min-height: 2.5rem; display: inline-flex; align-items: center; padding: 0 .85rem; font-size: .875rem; }
.ajout__plus > summary {
  display: inline-flex; align-items: center; gap: .35rem; cursor: pointer; list-style: none;
  color: var(--lien); font-size: .85rem; font-weight: 700;
}
.ajout__plus > summary::-webkit-details-marker { display: none; }
.ajout__plus > summary .icone { stroke-width: 2.4; }
.ajout__plus[open] > summary { margin-bottom: .6rem; }
.ajout__plus[open] > summary .icone { transform: rotate(45deg); }
.ajout__plus > summary:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; border-radius: 4px; }
.ajout__pied { display: flex; flex-direction: column; gap: .8rem; }
.ajout__engagement { padding: .75rem .8rem; border-radius: 12px; background: var(--papier); font-size: .84rem; line-height: 1.45; }
.ajout__case { display: flex; gap: .6rem; align-items: flex-start; cursor: pointer; }
.ajout__case input { flex: none; width: 1.2rem; height: 1.2rem; margin: .05rem 0 0; accent-color: var(--teinte, var(--cyan)); }
.ajout__implique { margin: .35rem 0 0 1.8rem; }
.ajout__implique > summary { cursor: pointer; color: var(--lien); font-weight: 700; font-size: .82rem; }
.ajout__implique p { margin: .45rem 0 0; font-size: .8rem; color: var(--encre-douce); }
.ajout__envoyer {
  width: 100%; min-height: 3rem; border-radius: 12px; font: 700 .95rem var(--texte);
  background: var(--teinte, var(--cyan-fonce)); color: var(--teinte-texte, #fff);
}
.ajout__envoyer:hover { background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); filter: brightness(1.08); }
.ajout__envoyer:disabled { opacity: .5; cursor: not-allowed; filter: none; }

/* des liens utiles : une ligne par adresse (initiale du site, nom modifiable, site, ×) */
.ajout__liste-liens { list-style: none; margin: 0; padding: 0; display: grid; gap: .5rem; }
.ajout__liste-liens[hidden] { display: none; }
.ajout__lien {
  display: grid; grid-template-columns: 1.875rem minmax(0, 1fr) 1.875rem; gap: .5rem; align-items: center;
  padding: .5rem .5rem .5rem .625rem; border: 1.5px solid var(--ajout-bord); border-radius: 12px; background: var(--blanc);
}
.ajout__lien-initiale { width: 1.875rem; height: 1.875rem; display: grid; place-items: center; border-radius: 8px; background: var(--vert-lien-pale); color: var(--vert-lien); font-weight: 800; font-size: .8rem; }
.ajout__lien-corps { display: flex; flex-direction: column; min-width: 0; }
.ajout input.ajout__lien-nom { min-height: 0; padding: .1rem .3rem; margin-left: -.3rem; border: 1px solid transparent; border-radius: 6px; font-weight: 700; font-size: .875rem; background: transparent; }
.ajout input.ajout__lien-nom:hover { border-color: var(--trait); }
.ajout input.ajout__lien-nom:focus { border-color: var(--cyan); }
.ajout__lien-site { font-size: .75rem; color: var(--encre-douce); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ajout__lien-retirer { width: 1.875rem; height: 1.875rem; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%; background: var(--papier); color: var(--encre-douce); cursor: pointer; }
.ajout__lien-retirer:hover { background: var(--grenat-pale); color: var(--grenat-vif); }
.ajout__lien-retirer .icone { width: .85rem; height: .85rem; }
.ajout__coller { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .5rem; }
.ajout__coller[hidden], .ajout__texte-liens[hidden] { display: none; }
.ajout .ajout__coller input { border-style: dashed; }
.ajout__ajouter-lien { min-height: 2.75rem; padding: 0 .9rem; border: 1.5px solid var(--ajout-bord); border-radius: 12px; background: var(--blanc); color: var(--encre); font: 700 .875rem var(--texte); cursor: pointer; }
.ajout__ajouter-lien:hover { border-color: var(--vert-lien); color: var(--vert-lien); }
.ajout__texte-liens { display: flex; flex-direction: column; gap: .375rem; }

/* téléphone : la fenêtre prend tout l'écran ; le bouton reste en bas */
@media (max-width: 640px) {
  .liste-entete .ajout-bouton { display: none; }
  .ajout:modal {
    width: 100%; max-width: none; height: 100%; max-height: none; margin: 0; padding: 1rem 1rem 0; border-radius: 0;
  }
  .ajout:modal .ajout__formulaire { flex: 1 0 auto; }
  .ajout:modal .ajout__etape--decrire { flex: 1 0 auto; }
  .ajout:modal .ajout__pied {
    position: sticky; bottom: 0; margin: auto -1rem 0; padding: .8rem 1rem calc(.9rem + env(safe-area-inset-bottom));
    border-top: 1px solid var(--trait); background: var(--blanc);
  }
  .ajout__ligne { grid-template-columns: minmax(0, 1fr); }
  .ajout__depot { padding: 2rem 1rem; }
}

/* la bulle + (téléphone seulement) */
.ajout-bulle { display: none; }
@media (max-width: 640px) {
  .ajout-bulle {
    position: fixed; right: 1.1rem; bottom: calc(1.6rem + env(safe-area-inset-bottom)); z-index: 60;
    display: inline-flex; align-items: center; justify-content: center; gap: .55rem; min-width: 3.875rem; height: 3.625rem; padding: 0 1.4rem 0 1.1rem;
    border-radius: 99px; background: var(--teinte, var(--cyan-fonce)); color: var(--teinte-texte, #fff); text-decoration: none;
    font: 700 1rem var(--texte);
    box-shadow: 0 8px 22px color-mix(in srgb, var(--teinte, var(--cyan-fonce)) 42%, transparent), 0 2px 6px rgba(16, 36, 58, .25);
    transition: padding .2s ease, width .2s ease, transform .15s ease;
  }
  .ajout-bulle__plus { width: 1.5rem; height: 1.5rem; stroke-width: 2.6; transition: transform .2s ease; }
  .ajout-bulle.est-repliee { width: 3.875rem; height: 3.875rem; padding: 0; }
  .ajout-bulle.est-repliee .ajout-bulle__lib { display: none; }
  .ajout-bulle.est-repliee .ajout-bulle__plus { width: 1.85rem; height: 1.85rem; }
  .ajout-bulle:active { transform: scale(.94); }
  .ajout-bulle.est-ouverte .ajout-bulle__plus { transform: rotate(45deg); }
  .ajout-bulle:focus-visible { outline: 3px solid var(--ambre); outline-offset: 3px; }
}
@media (prefers-reduced-motion: reduce) {
  .ajout-bulle, .ajout-bulle__plus { transition: none; }
}

/* le petit menu de la bulle : une feuille qui monte du bas */
.ajout-choix {
  width: 100%; max-width: 32rem; margin: auto auto 0; padding: .6rem 1rem calc(6.2rem + env(safe-area-inset-bottom));
  border: 0; border-radius: 22px 22px 0 0; background: var(--blanc); color: var(--encre); box-shadow: 0 -10px 40px rgba(16, 36, 58, .25);
}
.ajout-choix::backdrop { background: rgba(16, 36, 58, .42); }
.ajout-choix__poignee { display: block; width: 2.6rem; height: .3rem; margin: 0 auto .9rem; border-radius: 99px; background: var(--trait); }
.ajout-choix__titre { margin: 0 0 .7rem; font-size: 1rem; }
.ajout-choix__liste { list-style: none; margin: 0; padding: 0; display: grid; gap: .55rem; }
.ajout-choix__choix {
  display: grid; grid-template-columns: 2.9rem minmax(0, 1fr) 1.2rem; gap: .8rem; align-items: center; padding: .75rem .8rem;
  border: 1px solid var(--trait); border-radius: 14px; background: var(--blanc); color: var(--encre); text-decoration: none;
}
.ajout-choix__choix:active { background: var(--papier); }
.ajout-choix__choix:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ajout-choix__icone { width: 2.9rem; height: 2.9rem; display: grid; place-items: center; border-radius: 12px; }
.ajout-choix__icone .icone { width: 1.45rem; height: 1.45rem; stroke-width: 2; }
.ajout-choix__choix--fichier .ajout-choix__icone { background: var(--teinte-pale, var(--cyan-pale)); color: color-mix(in srgb, var(--teinte, var(--lien)) 70%, var(--encre)); }
.ajout-choix__choix--photo .ajout-choix__icone { background: var(--cyan-pale); color: var(--lien); }
.ajout-choix__choix--liens .ajout-choix__icone { background: var(--vert-lien-pale); color: var(--vert-lien); }
.ajout-choix__texte { display: flex; flex-direction: column; gap: .15rem; min-width: 0; }
.ajout-choix__texte strong { font-size: .95rem; }
.ajout-choix__texte span { font-size: .78rem; color: var(--encre-douce); }
.ajout-choix__fleche { width: 1.1rem; height: 1.1rem; color: var(--encre-douce); }
/* fermer : à la place de la bulle, le + devenu × */
.ajout-choix__fermer {
  position: fixed; right: 1.1rem; bottom: calc(1.6rem + env(safe-area-inset-bottom));
  width: 3.875rem; height: 3.875rem; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%;
  background: color-mix(in srgb, var(--teinte, var(--cyan-fonce)) 80%, #000); color: var(--teinte-texte, #fff); cursor: pointer;
  box-shadow: 0 3px 8px rgba(16, 36, 58, .35);
}
.ajout-choix__fermer .icone { width: 1.6rem; height: 1.6rem; stroke-width: 2.6; }
.ajout-choix__fermer:focus-visible { outline: 3px solid var(--ambre); outline-offset: 3px; }

/* ==== Le fil de commentaires (site 2.37, 24/10 — includes/commentaires-vues.php, commentaires.js) ====
   Des conversations : chaque commentaire de départ, et dessous ses réponses, reliées par un
   trait ; chaque réponse dit à qui elle répond et cite, au besoin, ce qu'elle reprend. */
.page-fil .fichiers--seul { margin-bottom: .4rem; }
.page-fil__retour { margin: 0 0 1.2rem; }

.conv { display: grid; gap: .9rem; }
.conv__titre { display: flex; align-items: center; gap: .5rem; margin: .4rem 0 0; font-size: 1.2rem; }
.conv__titre .icone { width: 1.3rem; height: 1.3rem; color: var(--teinte, var(--lien)); }
.conv__aide { margin: 0; font-size: .88rem; color: var(--encre-douce); max-width: 60ch; }
.conv__liste, .com__reponses { list-style: none; margin: 0; padding: 0; }
.conv__liste { display: grid; gap: .8rem; }
.conv__liste > .com { padding: .85rem .95rem .7rem; border: 1px solid var(--trait); border-radius: 16px; background: var(--blanc); }
.com { position: relative; display: grid; grid-template-columns: 2.2rem minmax(0, 1fr); column-gap: .7rem; align-items: start; }
.com > .com__reponses { grid-column: 1 / -1; display: grid; gap: .55rem; }
.com > .com__reponses:not(:empty) { margin: .55rem 0 0 1.05rem; padding: .2rem 0 0 1.5rem; border-left: 2px solid var(--teinte-trait, var(--trait)); }
.com__reponses > .com { padding: .55rem .7rem .45rem; border-radius: 12px; background: var(--papier); }
.com__avatar {
  width: 2.2rem; height: 2.2rem; border-radius: 50%; display: grid; place-items: center; flex: none;
  font: 800 .78rem var(--titre); letter-spacing: .02em; background: var(--teinte-pale, var(--cyan-pale)); color: var(--encre);
  border: 1.5px solid var(--teinte-trait, var(--trait));
}
.com__reponses .com__avatar { width: 1.9rem; height: 1.9rem; font-size: .7rem; }
.com--auteur > .com__avatar { background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); border-color: transparent; }
.com--mien > .com__avatar { border-color: var(--teinte, var(--cyan)); }
.com__corps { min-width: 0; display: grid; gap: .25rem; }
.com--supprime { grid-template-columns: minmax(0, 1fr); }
.com__tete { display: flex; flex-wrap: wrap; align-items: baseline; gap: .2rem .55rem; margin: 0; }
.com__nom { font-weight: 800; font-size: .9rem; }
.com__badge { padding: .1rem .45rem; border-radius: 99px; font-size: .7rem; font-weight: 700; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.com__date { font-size: .76rem; color: var(--encre-douce); }
.com__reponse-a {
  display: inline-flex; flex-wrap: wrap; align-items: center; gap: .3rem .4rem; justify-self: stretch; min-width: 0; max-width: 100%;
  font-size: .78rem; color: var(--encre-douce); text-decoration: none;
}
.com__reponse-a strong { color: var(--encre); }
.com__reponse-a:hover strong { color: var(--lien); text-decoration: underline; }
.com__citation {
  display: block; flex-basis: 100%; min-width: 0; max-width: 100%; padding: .25rem .55rem; border-left: 3px solid var(--teinte-trait, var(--trait)); border-radius: 0 8px 8px 0;
  background: var(--blanc); color: var(--encre-douce); font-style: italic; quotes: "« " " »";
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.com__texte { margin: 0; font-size: .95rem; line-height: 1.5; overflow-wrap: anywhere; max-width: none; }
.com__actions { display: flex; flex-wrap: wrap; align-items: center; gap: .2rem .9rem; margin: .1rem 0 0; }
.com__actions form { margin: 0; }
.com__action {
  display: inline-flex; align-items: center; gap: .3rem; padding: .15rem 0; border: 0; background: none; cursor: pointer;
  font: 700 .78rem var(--texte); color: var(--encre-douce); text-decoration: none;
}
.com__action:hover { color: var(--lien); }
.com__action--danger:hover { color: var(--faux); }
.com__supprime { display: flex; align-items: center; gap: .35rem; margin: 0; font-size: .84rem; font-style: italic; color: var(--encre-douce); }
.com.est-eclaire { animation: com-eclaire 1.6s ease; }
@keyframes com-eclaire { 0%, 30% { box-shadow: 0 0 0 3px var(--teinte, var(--cyan)); } 100% { box-shadow: 0 0 0 0 transparent; } }
@media (prefers-reduced-motion: reduce) { .com.est-eclaire { animation: none; outline: 3px solid var(--cyan); } }

.com-form { display: grid; gap: .45rem; padding: .8rem .9rem; border: 1px solid var(--trait); border-radius: 16px; background: var(--blanc); }
.com-form-place { list-style: none; }
.com-form--reponse { padding: .6rem .7rem; border-radius: 12px; border-color: var(--teinte-trait, var(--cyan)); background: var(--blanc); }
.com-form__a { display: flex; align-items: center; gap: .3rem; margin: 0; font-size: .8rem; color: var(--encre-douce); }
.com-form__a strong { color: var(--encre); }
.com-form__champ { display: grid; grid-template-columns: 2.2rem minmax(0, 1fr); gap: .65rem; align-items: start; }
.com-form--reponse .com-form__champ { grid-template-columns: minmax(0, 1fr); }
.com-form--reponse .com__avatar--moi { display: none; }
.com-form textarea {
  width: 100%; min-height: 2.8rem; resize: vertical; font: inherit; font-size: .95rem; line-height: 1.45; color: var(--encre);
  background: var(--papier); border: 1px solid var(--trait); border-radius: 12px; padding: .55rem .75rem;
}
.com-form textarea:focus { outline: none; border-color: var(--teinte, var(--cyan)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--teinte, var(--cyan)) 18%, transparent); }
.com-form__pied { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: .4rem .8rem; margin: 0; }
.com-form__aide { margin-right: auto; font-size: .76rem; color: var(--encre-douce); }
@media (hover: none) { .com-form__raccourci { display: none; } }
.com-form__erreur { margin: 0; font-size: .84rem; font-weight: 600; color: var(--faux); }
.com-form__erreur[hidden] { display: none; }

/* le fil par-dessus la liste des documents : un panneau à droite (en bas sur téléphone) */
.fil-fenetre {
  width: min(36rem, 100vw); max-width: 100vw; height: 100dvh; max-height: 100dvh; margin: 0 0 0 auto; padding: 0; border: 0;
  background: var(--fond, var(--papier)); color: var(--encre); box-shadow: -18px 0 50px rgba(8, 16, 26, .28);
}
.fil-fenetre[open] { animation: fil-entre .22s ease; }
@keyframes fil-entre { from { transform: translateX(28px); opacity: .4; } to { transform: none; opacity: 1; } }
.fil-fenetre::backdrop { background: rgba(8, 16, 26, .45); }
.fil-fenetre__fermer {
  position: sticky; top: .7rem; float: right; margin: .7rem .8rem 0 0; z-index: 2; width: 2.4rem; height: 2.4rem; border-radius: 50%;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font-size: 1.4rem; line-height: 1; cursor: pointer;
}
.fil-fenetre__corps { padding: 1.1rem 1.2rem 1.6rem; display: grid; gap: .8rem; }
.fil-fenetre__doc { display: grid; gap: .15rem; padding-right: 3rem; }
.fil-fenetre__sur { margin: 0; font-size: .74rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--encre-douce); }
.fil-fenetre__titre { margin: 0; font-size: 1.15rem; line-height: 1.3; }
.fil-fenetre__lien { margin: 0; font-size: .8rem; }
.fil-fenetre__lien a { display: inline-flex; align-items: center; gap: .3rem; }
@media (max-width: 640px) {
  .fil-fenetre { width: 100vw; height: 92dvh; margin: auto 0 0; border-radius: 18px 18px 0 0; box-shadow: 0 -18px 50px rgba(8, 16, 26, .28); }
  @keyframes fil-entre { from { transform: translateY(40px); opacity: .4; } to { transform: none; opacity: 1; } }
  .fil-fenetre__corps { padding: 1rem .9rem 1.4rem; }
  .com > .com__reponses:not(:empty) { margin-left: .4rem; padding-left: .8rem; }
  .conv__liste > .com { padding: .75rem .75rem .6rem; }
  .com { grid-template-columns: 1.9rem minmax(0, 1fr); column-gap: .55rem; }
  .com__avatar { width: 1.9rem; height: 1.9rem; font-size: .7rem; }
  .com-form__champ { grid-template-columns: minmax(0, 1fr); }
  .com-form__champ .com__avatar--moi { display: none; }
}
.mes-documents__outils { display: flex; flex-direction: column; align-items: flex-end; gap: .6rem; }
@media (max-width: 640px) { .mes-documents__outils { flex-direction: row; flex-wrap: wrap; align-items: center; } }

/* ================================================================ Mon drive (site 2.40, 25/10 — maquette
   validée par Matthias sur le canevas « Accueil du drive — à valider »). Les chemises ne changent pas. */

/* ---- Fil d'Ariane collé sous l'en-tête (« diminue l'espace ») : la marge du haut annule celle de
   la grille, à chaque largeur (2,5 rem ; 1,5 rem sous 900 px ; 1,1 rem sous 640 px). */
.barre-drive { margin-top: -2.5rem; padding-top: .45rem; padding-bottom: .45rem; }
@media (max-width: 900px) { .barre-drive { margin-top: -1.5rem; } }
@media (max-width: 640px) { .barre-drive { margin-top: -1.1rem; } }

/* ---- Bulles à BANDE de titre (« Mes révisions », « Mes cours ») : le titre sur une bande de couleur
   collée en haut de la bulle, qui le distingue de ce qui suit (« À faire aujourd'hui »). À droite, des
   boutons de même famille : notifications de cet appareil (« Activé » en vert, « Désactivé » en
   rouge), Planning, menu ⋯ ; sur téléphone, les icônes seules (libellés gardés pour les lecteurs
   d'écran). Remplace la barre à trois cases du téléphone (2.31). */
.bulle.bulle--bande { padding-top: 0; }
.bulle__bande {
  margin: 0 -1.75rem; padding: .7rem 1.25rem .7rem 1.75rem; flex-wrap: nowrap;
  background: var(--cyan-pale);
  border-bottom: 1px solid color-mix(in srgb, var(--cyan) 30%, var(--trait));
  border-radius: 17px 17px 0 0;
}
.bulle__bande > .bulle__titre { font-size: 1.25rem; min-width: 0; }
.bande__outils { display: flex; align-items: center; gap: .5rem; flex: none; }
.bande__bouton {
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: .4rem;
  box-sizing: border-box; height: 36px; padding: 0 .85rem 0 .65rem; border-radius: 10px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--lien);
  font: 700 .88rem var(--texte); line-height: 1; white-space: nowrap; text-decoration: none; cursor: pointer;
}
.bande__bouton .icone { width: 1.15rem; height: 1.15rem; flex: none; }
.bande__bouton:hover { border-color: var(--cyan); color: var(--lien); text-decoration: none; }
.bande__bouton:focus-visible { outline: 3px solid var(--cyan); outline-offset: 2px; }
.bande__bouton[hidden] { display: none; }
.bande__bouton--carre { width: 36px; padding: 0; color: var(--encre); }
.bande__actions .bande__bouton { color: var(--lien); }   /* « Mes cours » : Déposer dans un autre cours, Conseil d'ancien */
summary.bande__bouton { list-style: none; }
summary.bande__bouton::-webkit-details-marker { display: none; }
.bande__menu { z-index: 29; }   /* devant les tuiles qui suivent, derrière le fil d'Ariane collé (z 30) — 2.46 */
.bande__menu[open] > .bande__bouton { border-color: var(--cyan); background: var(--papier); }
.bande__bouton--oui, .bande__bouton--oui:hover { border-color: var(--juste-trait); background: var(--juste-fond); color: var(--juste); }
.bande__bouton--non, .bande__bouton--non:hover { border-color: var(--faux-trait); background: var(--faux-fond); color: var(--faux); }
.bande__etat .bande__on, .bande__etat.bande__bouton--oui .bande__off { display: none; }
.bande__etat.bande__bouton--oui .bande__on { display: block; }
/* 2.60 : les actions de « Mes cours » vivent dans la bande sur ordinateur AUSSI (icône + libellé, comme
   « Planning ») — Matthias : « garder une cohérence entre le site PC et le site sur téléphone ». Entre 641 et
   900 px, la bande n'a pas la place de deux longs libellés à côté du titre : l'icône seule, le libellé reste lu
   par les lecteurs d'écran. */
@media (max-width: 900px) {
  .bande__actions .bande__bouton { width: 36px; padding: 0; }
  .bande__actions .bande__texte { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
}

/* ---- « Rien à faire aujourd'hui » : coche verte, titre, félicitations, puis — à la ligne — la
   prochaine séance. Téléphone : le titre et la séance seulement (les félicitations s'il n'y a
   pas de séance connue). */
.a-jour {
  display: flex; align-items: center; gap: .9rem; padding: .85rem 1.1rem; border-radius: 14px;
  background: var(--sous-bulle); border: 1px solid var(--trait);
}
.a-jour__coche {
  display: grid; place-items: center; flex: none; width: 2.25rem; height: 2.25rem; border-radius: 50%;
  background: var(--juste-fond); color: var(--juste);
}
.a-jour__coche .icone { width: 1.15rem; height: 1.15rem; stroke-width: 2.4; }
.a-jour__textes { min-width: 0; }
.a-jour__textes p { margin: 0; max-width: none; }
.a-jour__textes p + p { margin-top: .15rem; }
.a-jour__titre { font-weight: 700; color: var(--encre); }
.a-jour__bravo, .a-jour__seance { font-size: .92rem; color: var(--encre-douce); }
.a-jour__seance a { font-weight: 700; }

@media (max-width: 640px) {
  .bulle__bande { margin: 0 -.75rem; padding: .5rem .55rem .5rem .75rem; gap: .5rem; border-radius: 13px 13px 0 0; }
  .bulle__bande > .bulle__titre { flex: 1; font-size: 1.1rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .bande__outils { gap: .4rem; }
  .bande__bouton { width: 38px; height: 38px; padding: 0; }
  .bande__bouton .icone { width: 1.2rem; height: 1.2rem; }
  .bande__texte { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }

  .a-jour { gap: .65rem; padding: .65rem .75rem; border-radius: 12px; }
  .a-jour__coche { width: 1.9rem; height: 1.9rem; }
  .a-jour__coche .icone { width: 1rem; height: 1rem; }
  .a-jour__titre { font-size: .92rem; }
  .a-jour__bravo, .a-jour__seance { font-size: .84rem; }
  .a-jour__suite { display: none; }
  .a-jour:not(.a-jour--sans-seance) .a-jour__bravo { display: none; }
}

/* ================================================================ « Déposer dans un autre cours » (site 2.41, 25/10 —
   Matthias : « dans le même style et les mêmes fonctionnalités que Ajouter »). La fenêtre du choix est une
   fenêtre « Ajouter » (.ajout, mêmes en-tête, onglets et choix) : 1. l'année (onglets) et ses cours ;
   2. le sous-dossier. Le cours choisi lui donne sa couleur (num-…), comme à la fenêtre qui suit. */
.ailleurs__ecran { display: flex; flex-direction: column; gap: .9rem; }
.ailleurs__ecran > p { margin: 0; max-width: none; }
.ailleurs__ecran[hidden] { display: none; }
.ailleurs__annees { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); }
.ailleurs__invite {
  margin: 0; padding: 1.4rem 1rem; border: 1.5px dashed var(--trait); border-radius: 14px;
  text-align: center; color: var(--encre-douce); font-size: .9rem; max-width: none;
}
.ailleurs__invite[hidden] { display: none; }
.ailleurs__cours { list-style: none; margin: 0; padding: 0; display: grid; gap: .4rem; }
.ailleurs__cours[hidden] { display: none; }
.ailleurs__cours-lien {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto 1rem; gap: .65rem; align-items: center;
  padding: .55rem .7rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc);
  color: var(--encre); text-decoration: none;
}
.ailleurs__cours-lien:hover { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--cyan-pale)); color: var(--encre); }
.ailleurs__cours-lien:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ailleurs__cours-texte { display: flex; flex-direction: column; gap: .05rem; min-width: 0; }
.ailleurs__cours-texte strong { font-size: .92rem; }
.ailleurs__cours-texte small { font-size: .76rem; color: var(--encre-douce); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ailleurs__cours-texte small[hidden] { display: none; }
.ailleurs__cours-quadri { display: flex; flex-direction: column; align-items: flex-end; gap: .1rem; font: 700 .74rem var(--texte); color: var(--encre-douce); }
.ailleurs__mien { font-weight: 600; font-size: .7rem; color: var(--lien); white-space: nowrap; }
.ailleurs__fleche { width: 1rem; height: 1rem; color: var(--encre-douce); }
.ailleurs__vide { color: var(--encre-douce); font-size: .88rem; }
.ailleurs__choisi { display: flex; align-items: center; gap: .7rem; padding: .7rem .8rem; border-radius: 12px; background: var(--teinte-pale, var(--cyan-pale)); }
.ailleurs__choisi .pastille-numero { font-size: .9rem; }
.ailleurs__dossier .ajout-choix__icone { background: var(--teinte-pale, var(--cyan-pale)); color: color-mix(in srgb, var(--teinte, var(--lien)) 70%, var(--encre)); }
.ailleurs__dossier:hover { border-color: var(--teinte, var(--cyan)); color: var(--encre); }
.ailleurs.est-occupee { cursor: progress; }
.ailleurs.est-occupee .ailleurs__dossier { pointer-events: none; opacity: .6; }

/* ================================================================ Le menu ⋯ d'un fichier, en liste (site 2.42, 25/10 —
   Matthias : « pas en raccord avec les autres boutons, et décalé dès qu'il y a une description »).
   En liste, c'est un carré comme « Télécharger », juste à côté : Ouvrir | ⬇ | ⋯, sur la même ligne
   quelle que soit la hauteur de la carte. En tuiles : toujours en haut à droite de la carte. */
.fichier__principal--seul { display: contents; }   /* des liens, en tuiles : le ⋯ seul, dans le coin */
/* la précision sous « Modifier », « Mon PDF d’origine » : à la ligne (elle collait au mot) */
.fichier__menu .menu-suivi__choix small { display: block; margin-top: .1rem; font-weight: 500; font-size: .76rem; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu { position: relative; top: auto; right: auto; z-index: auto; display: flex; flex: none; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu-bouton {
  width: 3rem; height: auto; min-height: 2.75rem; border-radius: 10px; box-shadow: none;
  border: 1.5px solid var(--teinte-trait, var(--trait)); background: var(--blanc);
  color: color-mix(in srgb, var(--teinte, var(--lien)) 62%, var(--encre));
}
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu-bouton:hover, :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu[open] > .fichier__menu-bouton {
  background: var(--teinte-pale, var(--cyan-pale)); border-color: var(--teinte, var(--cyan));
}
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__principal { padding-right: 0; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__principal--seul { display: flex; justify-content: flex-end; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__actions { padding-top: 1rem; }
@media (max-width: 760px) {
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__menu-bouton { width: 2.9rem; min-height: 2.6rem; border: 1.5px solid var(--teinte-trait, var(--trait)); background: var(--blanc); }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__corps { padding-right: 0; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__actions { padding-top: .6rem; }
  /* des liens, sur téléphone : pas de rangée « Ouvrir » — le ⋯ revient dans le coin de la carte */
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__principal--seul { display: contents; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__menu { position: absolute; top: .5rem; right: .5rem; z-index: 4; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__menu-bouton { width: 2.4rem; min-height: 2.4rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__corps { padding-right: 2.7rem; }
}

/* ------------------------------------------------------------ explications ⓘ (2.45)
   Demande de Matthias (25/10) : moins de texte partout. Ce qui explique le drive passe dans une
   bulle de conversation, ouverte par une icône ⓘ sans bordure (drive_info, includes/drive.php).
   À la première visite, la bulle s'ouvre d'elle-même ; ✕ la ferme pour de bon (main.js).
   En ligne : dans un titre, après un libellé. La bulle reprend sa propre typographie. */
.info {
  position: relative; display: inline-flex; vertical-align: middle; flex: none;
  margin-left: .35rem;
  font: 400 1rem/1.5 var(--texte); letter-spacing: normal; text-transform: none; text-align: left;
}
.info__bouton {
  display: grid; place-items: center; flex: none;
  width: 34px; height: 34px; margin: -8px; padding: 0;
  border: 0; border-radius: 50%; background: none; color: inherit; opacity: .6;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
}
.info__bouton:hover, .info.est-ouverte .info__bouton { opacity: 1; color: var(--lien); }
.info__bouton:focus-visible { opacity: 1; outline: 2px solid var(--lien); outline-offset: -5px; }
.info__svg { display: block; width: 18px; height: 18px; }
.info__bulle {
  display: none; position: absolute; z-index: 28; top: calc(100% + 12px); left: var(--info-gauche, -14px);
  width: max-content; max-width: min(22rem, calc(100vw - 24px));
  padding: 12px 44px 13px 15px; border: 1px solid var(--trait); border-radius: 14px;
  background: var(--blanc); color: var(--encre); box-shadow: 0 14px 34px rgba(16, 36, 58, .18), 0 2px 6px rgba(16, 36, 58, .08);
  font: 400 .95rem/1.5 var(--texte); white-space: normal; overflow-wrap: break-word; text-shadow: none; cursor: auto;
}
.info__bulle::before {
  content: ""; position: absolute; top: -7px; left: var(--info-pointe, 23px);
  width: 12px; height: 12px; margin-left: -6px;
  background: var(--blanc); border: solid var(--trait); border-width: 1px 0 0 1px; border-top-left-radius: 3px;
  transform: rotate(45deg);
}
.info.est-ouverte .info__bulle, .info.est-fermante .info__bulle, .info:not(.info--js):focus-within .info__bulle { display: block; }
/* 2.47 (Matthias : « une animation, pour bien voir où se trouve l'information ») : la bulle sort de
   son icône — et s'y replie en se fermant ; ouverte d'elle-même, l'icône bat deux fois. */
.info__bulle { transform-origin: var(--info-pointe, 23px) -10px; }
.info.est-ouverte .info__bulle { animation: info-ouvre .26s cubic-bezier(.2, .9, .3, 1.15); }
.info.est-fermante .info__bulle { animation: info-ferme .17s ease-in forwards; pointer-events: none; }
@keyframes info-ouvre { from { opacity: 0; transform: translateY(-8px) scale(.82); } }
@keyframes info-ferme { to { opacity: 0; transform: translateY(-6px) scale(.86); } }
.info__bouton { position: relative; }
.info.est-signalee .info__bouton::after {
  content: ""; position: absolute; inset: 7px; border-radius: 50%; border: 2px solid var(--lien); pointer-events: none;
  animation: info-onde 1s ease-out 2;
}
@keyframes info-onde { from { transform: scale(.7); opacity: .9; } to { transform: scale(1.7); opacity: 0; } }
.info__texte { display: block; }
.info__texte a { color: var(--lien); font-weight: 600; }
.info__texte strong { font-weight: 700; }
.info__fermer {
  position: absolute; top: 6px; right: 6px; display: grid; place-items: center;
  width: 32px; height: 32px; padding: 0; border: 0; border-radius: 8px;
  background: none; color: var(--encre-douce); cursor: pointer;
}
.info__fermer:hover { background: var(--papier); color: var(--encre); }
.info__fermer:focus-visible { outline: 2px solid var(--lien); outline-offset: -2px; }
.info__croix { display: block; width: 16px; height: 16px; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .info__bulle { box-shadow: 0 14px 34px rgba(0, 0, 0, .5), 0 0 0 1px rgba(255, 255, 255, .03); }
}
:root[data-theme="dark"] .info__bulle { box-shadow: 0 14px 34px rgba(0, 0, 0, .5), 0 0 0 1px rgba(255, 255, 255, .03); }
@media (max-width: 640px) {
  .info__bulle { padding: 11px 42px 12px 14px; font-size: .93rem; }
}
/* Mon compte : l'explication de la carte se pose dans son coin, sans serrer le nom. */
.compte-carte { position: relative; }
.compte-carte__tete { padding-right: 1.6rem; }
.compte-carte__tete > .info { position: absolute; top: .9rem; right: .9rem; margin: 0; }
/* Sans le paragraphe qui suivait le titre, un peu d'air avant le contenu. */
.titre-page--drive:not(:has(+ .drive-titre__texte)):not(.drive-titre .titre-page--drive) { margin-bottom: 1.1rem; }
.rv-raz__titre { margin-bottom: .7rem; }

/* ------------------------------------------------------------ le menu ⋯ commun (2.46)
   Demande de Matthias : tout ce qui modifie, supprime, signale passe par un bouton ⋯ — toujours en haut
   à droite de l'élément qu'il concerne (drive_menu_points, includes/drive-vues.php). Le même rond que
   le ⋯ des fichiers. Ouverture, fermeture, un seul à la fois : rappels.js ([data-menu]). */
.points { flex: none; }
.points__bouton {
  width: 2.25rem; height: 2.25rem; display: grid; place-items: center; border-radius: 50%; cursor: pointer; list-style: none;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre);
}
.points__bouton::-webkit-details-marker { display: none; }
.points__bouton .icone { width: 1.15rem; height: 1.15rem; }
.points__bouton:hover, .points[open] > .points__bouton { border-color: var(--encre-douce); }
.points__bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.points .menu-suivi__choix small { display: block; margin-top: .1rem; font-weight: 500; font-size: .76rem; }
.points .menu-suivi__choix { align-items: flex-start; }
.points .menu-suivi__choix .icone { flex: none; margin-top: .1rem; }
/* Dans le coin d'une carte (cartes recto / verso, carte d'une question corrigée). */
.points--coin { position: absolute; top: .55rem; right: .55rem; z-index: 4; }
.carte-ligne:has(> .points--coin) { position: relative; padding-right: 3.3rem; }
.carte-question { position: relative; }
.carte-question > .points--coin { top: .9rem; right: .9rem; }
.carte-question:has(> .points--coin) > :nth-child(2) { padding-right: 2.8rem; }
/* Tête d'une question (liste, derniers ajouts) : le ⋯ au bout de la ligne. */
.fiche-question__tete > .points { margin-left: auto; }
.fiche-question__tete > .fiche-question__stat + .points { margin-left: 0; }
.fiche-question__tete:has(> .points) { margin-top: -.2rem; }
/* Commentaire : en haut à droite. */
.com > .points { position: absolute; top: .5rem; right: .5rem; }
.conv__liste > .com:has(> .points) > .com__corps > .com__tete,
.com__reponses > .com:has(> .points) > .com__corps > .com__tete { padding-right: 2.6rem; }
.com > .points .points__bouton { width: 2rem; height: 2rem; }
/* Appareils (Mes rappels) : le ⋯ au bout de la ligne, le formulaire « Renommer » dessous. */
.appareil { flex-wrap: wrap; scroll-margin-top: 110px; }
.appareil > .appareil__formulaire { flex-basis: 100%; margin-top: .2rem; }
.appareil > .points { align-self: flex-start; }
/* L'état de l'appareil sur plusieurs lignes : un bloc arrondi, plus une pilule ovale. */
.push__etat { border-radius: 12px; }
/* Rassemblements : le ⋯ en haut à droite de la fiche. */
.classement-fiche__haut > .points { margin-left: auto; }
@media (max-width: 640px) {
  .points__bouton { width: 2.1rem; height: 2.1rem; }
  .carte-ligne:has(> .points--coin) { padding-right: 3rem; }
}

/* ------------------------------------------------------------ les vignettes qui ne sont pas des pages A4 en hauteur (2.46)
   Une page A4 en hauteur dépasse du bas, comme une feuille posée dans la chemise ; une page en largeur
   (slides, tableau…) est maintenant centrée, entière, au milieu de l'aperçu (photo de Matthias). */
.fichier__visuel:has(> .fichier__vignette--paysage) { align-items: center; padding-bottom: 1.25rem; }
.fichier__vignette.fichier__vignette--paysage { width: auto; max-width: 84%; border-radius: 4px; }
.fichier__vignette.fichier__vignette--paysage img { width: auto; max-width: 100%; max-height: 7.3rem; }
.fichier:hover .fichier__vignette.fichier__vignette--paysage { transform: translateY(-2px); }
@media (max-width: 640px) {
  .fichier__visuel:has(> .fichier__vignette--paysage) { padding-bottom: .85rem; }
  .fichier__vignette.fichier__vignette--paysage img { max-height: 4.5rem; }
}

/* ------------------------------------------------------------ le cœur et son nombre, sur la même ligne (2.46)
   Les chiffres n'occupent que la hauteur des capitales : la boîte de la ligne les faisait paraître
   plus hauts que le pictogramme. On rogne la boîte aux capitales ; sinon, on les descend d'un cheveu. */
.fichier__haut { line-height: 1; }
.fichier__compte { line-height: 1; }
@supports (text-box: trim-both cap alphabetic) {
  .fichier__compte { text-box: trim-both cap alphabetic; }
}
@supports not (text-box: trim-both cap alphabetic) {
  .fichier__compte { position: relative; top: .08em; }
}
/* Le cœur a plus d'encre en bas qu'en haut : on le remonte d'un pixel pour qu'il ait l'air centré. */
.fichier__bouton--merci .fichier__haut .icone { position: relative; top: -1px; }

/* ------------------------------------------------------------ une fenêtre ou un menu ouvert : la page ne défile plus (2.47)
   Demande de Matthias : « si un pop-up ou un menu s'affiche, on ne doit pas pouvoir faire défiler le site
   derrière ; seul le pop-up défile ». Fenêtres (dialog), menus de l'en-tête (cloche, Mon compte), menus ⋯,
   fenêtre de remise à zéro. La gouttière de la barre de défilement reste : rien ne bouge en ouvrant. */
html { scrollbar-gutter: stable; }
/* 2.49 : le verrou ne porte QUE sur <html> (la fenêtre du navigateur). Le poser aussi sur <body> (2.47) en
   faisait une zone de défilement à part : l'en-tête et le fil d'Ariane (position: sticky) se recalaient
   alors sur le haut de la page — ils « disparaissaient » dès qu'on ouvrait un menu après avoir défilé. */
html:has(dialog:modal),
html:has(details[data-menu-entete][open]),
html:has(details[data-menu][open]:not(.rj-ajouter__plus)),   /* 2.56 : « Ajouter 10 ▾ » laisse défiler la page */
html:has(details[data-outil][open]),
html:has(.fenetre:popover-open) { overflow: hidden; }
/* Les menus eux-mêmes défilent, sans entraîner la page. */
.moi__menu, .cloche-menu__panneau {
  max-height: calc(100vh - var(--entete-h, 68px) - 1.5rem); max-height: calc(100dvh - var(--entete-h, 68px) - 1.5rem);
  overflow-y: auto; overscroll-behavior: contain;
}
.menu-suivi__liste { max-height: min(70vh, 30rem); overflow-y: auto; overscroll-behavior: contain; }
dialog { overscroll-behavior: contain; }
/* Une bulle ⓘ dans une fenêtre ne la fait jamais défiler de côté. */
.ajout { overflow-x: hidden; }

/* ------------------------------------------------------------ la bulle + aussi sur ordinateur (2.47)
   En plus du bouton « Ajouter » de la page (elle ne le remplace pas) : en bas à droite, comme sur téléphone. */
@media (min-width: 641px) {
  .ajout-bulle {
    position: fixed; right: 1.6rem; bottom: 1.6rem; z-index: 60;
    display: inline-flex; align-items: center; justify-content: center; gap: .55rem; min-width: 3.875rem; height: 3.625rem; padding: 0 1.4rem 0 1.1rem;
    border-radius: 99px; background: var(--teinte, var(--cyan-fonce)); color: var(--teinte-texte, #fff); text-decoration: none;
    font: 700 1rem var(--texte);
    box-shadow: 0 8px 22px color-mix(in srgb, var(--teinte, var(--cyan-fonce)) 42%, transparent), 0 2px 6px rgba(16, 36, 58, .25);
    transition: padding .2s ease, width .2s ease, transform .15s ease, box-shadow .15s ease;
  }
  .ajout-bulle:hover { color: var(--teinte-texte, #fff); text-decoration: none; transform: translateY(-2px); }
  .ajout-bulle__plus { width: 1.5rem; height: 1.5rem; stroke-width: 2.6; transition: transform .2s ease; }
  .ajout-bulle.est-repliee { width: 3.875rem; height: 3.875rem; padding: 0; }
  .ajout-bulle.est-repliee .ajout-bulle__lib { display: none; }
  .ajout-bulle.est-repliee .ajout-bulle__plus { width: 1.85rem; height: 1.85rem; }
  .ajout-bulle.est-ouverte .ajout-bulle__plus { transform: rotate(45deg); }
  .ajout-bulle:focus-visible { outline: 3px solid var(--ambre); outline-offset: 3px; }
  /* son petit menu : une carte au-dessus de la bulle, en bas à droite (plus une feuille qui monte du bas) */
  .ajout-choix { width: 22rem; max-width: calc(100vw - 3.2rem); margin: auto 1.6rem 6.4rem auto; padding: 1rem 1rem 1rem; border-radius: 18px; box-shadow: 0 18px 50px rgba(16, 36, 58, .3); }
  .ajout-choix__poignee { display: none; }
  .ajout-choix__fermer { right: 1.6rem; bottom: 1.6rem; }
  .ajout-choix__choix:hover { border-color: var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--papier)); }
}
/* Menu ouvert : le × de la fenêtre prend la place de la bulle — on ne voit plus la bulle dessous. */
.ajout-bulle.est-ouverte { visibility: hidden; }

/* ------------------------------------------------------------ « Donner un conseil d'ancien » en fenêtre (2.47) */
.conseiller__choisi > .points { margin-left: auto; }
.conseiller__choisi .points__bouton { width: 2rem; height: 2rem; background: var(--blanc); }
.conseiller__ecrire .ajout__formulaire { display: flex; flex-direction: column; gap: .95rem; }
.conseiller.est-occupee .ailleurs__cours-lien { pointer-events: none; opacity: .6; }
/* Téléphone : le pied (case d'engagement, bouton) suit le formulaire — collé en bas, il en cachait la moitié. */
@media (max-width: 640px) {
  .conseiller:modal .ajout__pied { position: static; margin: 0; padding: 0 0 calc(1rem + env(safe-area-inset-bottom)); border-top: 0; background: none; }
}

/* ------------------------------------------------------------ la bulle + des autres pages (2.48) : les pastilles des choix */
[data-bulle-choix] .ajout-choix__icone { background: var(--teinte-pale, var(--cyan-pale)); color: color-mix(in srgb, var(--teinte, var(--lien)) 70%, var(--encre)); }
.ajout-choix__choix--conseil .ajout-choix__icone { background: var(--ambre-pale); color: var(--puce-texte); }
.ajout-choix__choix--ia .ajout-choix__icone { background: var(--cyan-pale); color: var(--lien); }
.ajout-choix__choix--importer .ajout-choix__icone { background: var(--papier); color: var(--encre-douce); }

/* =====================================================================================================
   2.49 — le Module de révision refait (« 6 + 1 », choisi par Matthias sur le canevas, 25/10) : un parcours
   de chapitres à cercles de progression, le bloc « Aujourd'hui », la pastille des notifications, et la
   fenêtre « Composer ma partie ». Préfixes : .mr (la page), .anneau, .parcours, .rv-jour, .recette,
   .etape-carte, .rv-rappel, .rv-fenetre, .compo.
   ===================================================================================================== */
.mr .entete-cours { margin-bottom: 0; }
.mr .entete-cours__actions { margin: -.2rem -.3rem .4rem 1rem; }
.mr-outils { position: relative; display: flex; align-items: center; gap: .45rem; }
.mr-outils .rv-rappel { position: static; }   /* le panneau se cale sur le bord droit de l'en-tête (téléphone : il tient dans l'écran) */
.mr > .message { margin: 1rem 0 0; }
.mr > .rv-verrou { margin-top: 1.2rem; }

/* ---- la pastille des notifications (la bande d'avant, repliée) */
.rv-rappel > summary { list-style: none; }
.rv-rappel > summary::-webkit-details-marker { display: none; }
.rv-rappel__bouton {
  display: inline-flex; align-items: center; gap: .45rem; height: 2.25rem; padding: 0 .8rem 0 .65rem; border-radius: 99px; cursor: pointer;
  border: 1px solid var(--teinte-trait, var(--trait)); background: var(--blanc); color: var(--encre); font: 600 .8rem var(--texte); white-space: nowrap;
}
.rv-rappel__bouton:hover, .rv-rappel[open] > .rv-rappel__bouton { border-color: var(--encre-douce); }
.rv-rappel__bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.rv-rappel__icone { width: 1.1rem; height: 1.1rem; color: color-mix(in srgb, var(--teinte, var(--cyan)) 75%, var(--encre)); }
.rv-rappel__point { width: .5rem; height: .5rem; border-radius: 50%; background: var(--encre-douce); opacity: .5; }
.rv-rappel--actif .rv-rappel__point { background: var(--jauge-juste); opacity: 1; }
.rv-rappel--pause .rv-rappel__point { background: var(--ambre); opacity: 1; }
.rv-rappel__panneau { width: min(24rem, 86vw); max-width: min(24rem, 86vw); padding: .3rem; }
.rv-rappel__panneau .suivi-barre { margin: 0; border: 0; padding: .6rem .6rem .5rem; flex-direction: column; align-items: stretch; gap: .7rem; }
.rv-rappel__panneau .suivi-barre__texte { flex: none; }

/* ---- les cercles de progression (SVG : pas de style en ligne) */
.anneau { position: relative; flex: none; display: inline-grid; place-items: center; width: 56px; height: 56px; border-radius: 50%; color: var(--encre); }
.anneau__svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.anneau__fond, .anneau__plein { fill: none; stroke-width: 3.4; }
.anneau__fond { stroke: var(--jauge-fond); }
.anneau__plein { stroke: var(--jauge-juste); stroke-linecap: round; }
.anneau__texte { position: relative; font: 700 1.05rem/1 var(--titre); }
.anneau__texte small { font-size: .6em; margin-left: 1px; }
.anneau--cours { width: 70px; height: 70px; }
.anneau--cours .anneau__texte { font-size: 1.12rem; }
.anneau--mini { width: 30px; height: 30px; }
.anneau--mini .anneau__fond, .anneau--mini .anneau__plein { stroke-width: 4; }
.anneau--mini .anneau__texte { font-size: .76rem; }

/* ---- le parcours */
.parcours { position: relative; list-style: none; max-width: 920px; margin: 1.6rem auto 0; padding: 0; }
.parcours::before { content: ""; position: absolute; left: 35px; top: 30px; bottom: 44px; width: 3px; border-radius: 3px; background: var(--teinte-trait, var(--trait)); }
.parcours__etape { position: relative; display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 1.1rem; align-items: start; padding-bottom: 1rem; scroll-margin-top: 9rem; }
.parcours__noeud { position: relative; z-index: 1; justify-self: center; margin-top: .55rem; border-radius: 50%; color: var(--encre); text-decoration: none; }
.parcours__noeud .anneau { background: var(--papier); box-shadow: 0 0 0 5px var(--papier); }
.parcours__etape--jour .parcours__noeud { margin-top: .15rem; }
a.parcours__noeud { transition: transform .15s ease; }
a.parcours__noeud:hover { color: var(--encre); transform: scale(1.06); }
a.parcours__noeud:hover .anneau__fond { stroke: var(--teinte-trait, var(--trait)); }
a.parcours__noeud:focus-visible { outline: 3px solid var(--ambre); outline-offset: 3px; }
.parcours__noeud--vide {
  width: 44px; height: 44px; margin-top: .75rem; display: grid; place-items: center; background: var(--papier); box-shadow: 0 0 0 5px var(--papier);
  border: 2px dashed var(--teinte-trait, var(--trait)); font: 700 1rem var(--titre); color: var(--encre-douce);
}
.parcours__vide { list-style: none; }

/* ---- « Aujourd'hui » */
.rv-jour {
  display: grid; grid-template-columns: minmax(0, 1fr) 13rem; gap: 1rem 1.4rem; padding: 1.15rem 1.3rem 1.2rem;
  background: var(--teinte-pale, var(--blanc)); border: 1px solid var(--teinte-trait, var(--trait)); border-top: 5px solid var(--teinte, var(--cyan)); border-radius: 16px;
}
.rv-jour__principal { min-width: 0; }
.rv-jour__surtitre { margin: 0; font: 700 .72rem var(--titre); letter-spacing: .12em; text-transform: uppercase; color: color-mix(in srgb, var(--teinte, var(--cyan)) 70%, var(--encre)); }
.rv-jour__titre { margin: .1rem 0 0; font-size: 1.35rem; }
.rv-jour__texte { margin: .25rem 0 0; color: var(--encre-douce); font-size: .9rem; line-height: 1.5; }
.rv-jour__actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .85rem; }
.rv-jour__bouton {
  display: inline-flex; align-items: center; justify-content: center; gap: .45rem; min-height: 46px; padding: 0 1.05rem; border-radius: 10px; cursor: pointer;
  border: 1px solid var(--teinte-trait, var(--trait)); background: var(--blanc); color: var(--encre); font: 700 .86rem var(--titre); text-decoration: none; white-space: nowrap;
}
.rv-jour__bouton .icone { width: 1.1rem; height: 1.1rem; flex: none; }
.rv-jour__bouton:hover { color: var(--encre); border-color: var(--teinte, var(--cyan)); }
.rv-jour__bouton--plein { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.rv-jour__bouton--plein:hover { color: var(--teinte-texte, #fff); filter: brightness(1.07); }
.rv-jour__autres { list-style: none; margin: 0; padding: 0 0 0 1.2rem; border-left: 1px solid var(--teinte-trait, var(--trait)); display: grid; align-content: center; gap: .2rem; }
.rv-jour__autre {
  display: flex; align-items: center; gap: .55rem; width: 100%; padding: .45rem .5rem; border: 0; border-radius: 9px; background: none; cursor: pointer;
  color: var(--encre); text-decoration: none; font: inherit; font-size: .86rem; text-align: left;
}
.rv-jour__autre:hover { color: var(--encre); background: var(--blanc); }
.rv-jour__autre .icone { width: 1.05rem; height: 1.05rem; flex: none; color: var(--encre-douce); }
.rv-jour__autre b { margin-left: auto; min-width: 1.5rem; height: 1.4rem; display: inline-grid; place-items: center; padding: 0 .35rem; border-radius: 99px;
  background: var(--ambre-pale); border: 1px solid var(--puce-bord); color: var(--puce-texte); font: 700 .74rem var(--titre); }
.rv-jour__autre.est-vide { cursor: default; opacity: .6; }
.rv-jour__autre.est-vide:hover { background: none; }
.rv-jour__autre.est-vide b { background: var(--papier); border-color: var(--trait); color: var(--encre-douce); }
.rv-jour .parties { grid-column: 1 / -1; margin: 0; }
/* « Ma partie » : la dernière recette */
.recette {
  display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; margin-top: .75rem; padding: .5rem .5rem .5rem .75rem; border-radius: 12px;
  background: var(--blanc); border: 1px dashed var(--teinte-trait, var(--trait)); font-size: .82rem; color: var(--encre-douce);
}
.recette__icone { width: 1.05rem; height: 1.05rem; flex: none; color: color-mix(in srgb, var(--teinte, var(--cyan)) 75%, var(--encre)); }
.recette__texte { flex: 1 1 14rem; min-width: 0; margin: 0; line-height: 1.4; }
.recette__texte b { color: var(--encre); }
.recette__boutons { display: flex; gap: .4rem; }
.recette__bouton {
  display: inline-flex; align-items: center; gap: .35rem; min-height: 34px; padding: 0 .75rem; border-radius: 9px; cursor: pointer;
  border: 1px solid var(--teinte-trait, var(--trait)); background: var(--teinte-pale, var(--papier)); color: var(--encre); font: 700 .78rem var(--titre); text-decoration: none; white-space: nowrap;
}
.recette__bouton:hover { color: var(--encre); border-color: var(--teinte, var(--cyan)); }
.recette__bouton .icone { width: 1rem; height: 1rem; flex: none; }
.recette__bouton--lancer { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.recette__bouton--lancer:hover { color: var(--teinte-texte, #fff); filter: brightness(1.07); }

/* ---- un chapitre du parcours */
.etape-carte { position: relative; padding: 1rem 1.1rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; transition: border-color .18s ease, box-shadow .18s ease; }
.etape-carte:hover { border-color: var(--teinte-trait, var(--trait)); box-shadow: var(--ombre-drive); }
.etape-carte--ici { border: 2px solid var(--teinte, var(--cyan)); padding: 1.2rem 1.2rem 1.1rem; }
.etape-carte--ici:hover { border-color: var(--teinte, var(--cyan)); }
.etape-carte__ici { position: absolute; top: -.72rem; left: 1rem; padding: 2px 10px; border-radius: 99px; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .7rem var(--titre); letter-spacing: .03em; }
.etape-carte__haut { display: flex; align-items: flex-start; gap: .8rem; }
.etape-carte__textes { flex: 1; min-width: 0; }
.etape-carte__haut .points__bouton { width: 2.1rem; height: 2.1rem; border-color: transparent; }
.etape-carte__haut .points__bouton:hover, .etape-carte__haut .points[open] > .points__bouton { border-color: var(--trait); }
.etape-carte__chap { margin: 0; font: 700 .7rem var(--titre); letter-spacing: .08em; text-transform: uppercase; color: var(--encre-douce); }
.etape-carte__nom { margin: .1rem 0 0; font-size: 1.02rem; line-height: 1.3; }
.etape-carte__nom a { color: var(--encre); text-decoration: none; }
.etape-carte__nom a:hover { color: var(--lien); text-decoration: underline; }
.etape-carte__desc { margin: .2rem 0 0; font-size: .82rem; color: var(--encre-douce); line-height: 1.45; }
.etape-carte__meta { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .7rem; margin: .35rem 0 0; font-size: .8rem; color: var(--encre-douce); }
.etape-carte__meta b { color: var(--encre); }
.etape-carte__revoir, .etape-carte__neuf, .etape-carte__signal {
  display: inline-flex; align-items: center; gap: .3rem; padding: 1px 9px; border-radius: 99px; font: 700 .72rem var(--titre); white-space: nowrap; text-decoration: none;
}
.etape-carte__revoir { background: var(--ambre-pale); border: 1px solid var(--puce-bord); color: var(--puce-texte); }
.etape-carte__neuf { background: var(--cyan-pale); color: var(--lien); }
.etape-carte__signal { background: var(--grenat-pale); border: 1px solid var(--grenat-bord); color: var(--grenat-texte); }
.etape-carte__actions { display: flex; flex-wrap: wrap; gap: .45rem; margin-top: .8rem; }
.etape-carte__bouton {
  display: inline-flex; align-items: center; gap: .4rem; min-height: 38px; padding: 0 .85rem; border-radius: 10px;
  border: 1px solid var(--teinte-trait, var(--trait)); background: var(--teinte-pale, var(--papier)); color: var(--encre); font: 700 .8rem var(--titre); text-decoration: none;
}
.etape-carte__bouton .icone { width: 1.05rem; height: 1.05rem; flex: none; }
.etape-carte__bouton:hover { color: var(--teinte-texte, #fff); background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); }
.etape-carte__bouton--plein { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.etape-carte__bouton--blanc { background: var(--blanc); border-color: var(--trait); }
.etape-carte__bouton--blanc:hover { background: var(--teinte-pale, var(--papier)); color: var(--encre); border-color: var(--teinte-trait, var(--trait)); }
.etape-carte--attente { border-style: dashed; background: transparent; }
.etape-carte__statut { margin: .5rem 0 0; }
.etape-carte__decision { margin-top: .7rem; padding: 0; }

/* ---- les fenêtres du module : « Composer ma partie », « Ajouter » */
.rv-fenetre { width: min(46rem, calc(100vw - 2rem)); padding: 1.15rem 1.35rem 0; gap: .9rem; }
.rv-fenetre--ajouter { width: min(54rem, calc(100vw - 2rem)); padding-bottom: 1.3rem; }
.rv-fenetre .ajout__titre { font-size: 1.15rem; }
.rv-fenetre[open]:not(:modal) { max-width: 52rem; margin: 1.4rem auto 0; padding-bottom: 1.2rem; }
.rv-fenetre .rv-tiroir-cadre { margin: 0; }
.rv-fenetre .rv-tiroir { margin: 0; padding: 0; border: 0; border-radius: 0; box-shadow: none; background: none; animation: none; }
.rv-fenetre .rv-tiroir__tete { display: none; }
@media (max-width: 640px) {
  .rv-fenetre:modal {
    width: 100%; max-width: 100%; margin: auto 0 0; max-height: 90dvh; padding: .8rem 1rem 0; border-radius: 20px 20px 0 0;
    animation: rv-monte .26s cubic-bezier(.2, .8, .3, 1);
  }
  .rv-fenetre--ajouter:modal { padding-bottom: calc(1rem + env(safe-area-inset-bottom)); }
  .rv-fenetre:modal::before { content: ""; display: block; flex: none; width: 2.6rem; height: .3rem; margin: 0 auto .1rem; border-radius: 99px; background: var(--trait); }
}
@keyframes rv-monte { from { transform: translateY(40px); opacity: .4; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .rv-fenetre:modal { animation: none; } }

/* ---- le composeur */
.compo { display: grid; gap: 1.15rem; }
.compo__bloc { display: grid; gap: .55rem; min-width: 0; }
.compo__titre { display: flex; align-items: center; gap: .5rem; margin: 0; font-size: .95rem; }
.compo__titre .icone--petite { color: var(--encre-douce); }
.compo__titre small { margin-left: auto; font: 400 .76rem var(--texte); color: var(--encre-douce); }
.compo__portee { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .45rem; }
.compo__puce {
  position: relative; display: flex; align-items: center; gap: .6rem; min-width: 0; padding: .5rem .6rem; border-radius: 12px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); text-decoration: none;
}
.compo__puce:hover { color: var(--encre); border-color: var(--teinte-trait, var(--trait)); background: var(--teinte-pale, var(--papier)); }
.compo__puce.est-choisie { border: 2px solid var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--papier)); padding: calc(.5rem - 1px) calc(.6rem - 1px); }
.compo__puce.est-grisee { opacity: .5; cursor: not-allowed; }
.compo__puce.est-grisee:hover { background: var(--blanc); border-color: var(--trait); }
.compo__puce-texte { display: grid; min-width: 0; }
.compo__puce-texte b { font: 700 .8rem/1.25 var(--titre); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.compo__puce-texte small { font-size: .72rem; color: var(--encre-douce); }
.compo__tous { flex: none; width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; border: 2px dashed var(--teinte, var(--cyan)); color: var(--encre); }
.compo__tous .icone { width: .95rem; height: .95rem; }
.compo__coche { position: absolute; top: -7px; right: -7px; width: 1.3rem; height: 1.3rem; border-radius: 50%; display: none; place-items: center;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); box-shadow: 0 0 0 2px var(--blanc); }
.compo__coche .icone { width: .78rem; height: .78rem; stroke-width: 3; }
.compo__puce.est-choisie .compo__coche { display: grid; }
.compo__deux { display: grid; grid-template-columns: 1fr 1fr; padding: 4px; border-radius: 12px; background: var(--papier); border: 1px solid var(--trait); }
.compo__onglet { display: flex; align-items: center; justify-content: center; gap: .45rem; min-height: 2.6rem; border-radius: 9px; color: var(--encre-douce); text-decoration: none; font: 700 .88rem var(--titre); }
.compo__onglet .icone { width: 1.15rem; height: 1.15rem; }
.compo__onglet:hover { color: var(--encre); }
.compo__onglet.est-choisi { background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); box-shadow: 0 1px 3px rgba(16, 36, 58, .18); }
.compo__modes { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 12.5rem), 1fr)); gap: .45rem; }
.compo__mode {
  position: relative; display: flex; align-items: center; gap: .6rem; padding: .6rem .7rem; border-radius: 12px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); text-decoration: none;
}
.compo__mode:hover { color: var(--encre); border-color: var(--teinte-trait, var(--trait)); background: var(--teinte-pale, var(--papier)); }
.compo__mode-ic { flex: none; width: 2.1rem; height: 2.1rem; border-radius: 9px; display: grid; place-items: center; background: var(--teinte-pale, var(--papier)); border: 1px solid var(--teinte-trait, var(--trait)); }
.compo__mode-ic .icone { width: 1.1rem; height: 1.1rem; }
.compo__mode-texte { display: grid; min-width: 0; padding-right: 1.4rem; }
.compo__mode-texte b { font: 700 .84rem var(--titre); }
.compo__mode-texte small { font-size: .72rem; line-height: 1.3; color: var(--encre-douce); }
.compo__n { position: absolute; top: .45rem; right: .5rem; padding: 0 6px; border-radius: 99px; font: 700 .7rem var(--titre); font-style: normal;
  background: var(--ambre-pale); border: 1px solid var(--puce-bord); color: var(--puce-texte); }
.compo__mode.est-choisi { border: 2px solid var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--papier)); padding: calc(.6rem - 1px) calc(.7rem - 1px); }
.compo__mode.est-choisi .compo__mode-ic { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.compo__mode.est-grisee { opacity: .5; cursor: not-allowed; }
.compo__jeux { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; }
.compo__jeux-lib { margin-right: .2rem; font-size: .78rem; color: var(--encre-douce); }
.compo__jeu {
  display: inline-flex; align-items: center; gap: .4rem; min-height: 2.25rem; padding: 0 .75rem 0 .55rem; border-radius: 99px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: 700 .76rem var(--titre); text-decoration: none;
}
.compo__jeu .icone { width: 1.05rem; height: 1.05rem; }
.compo__jeu:hover { color: var(--encre); border-color: var(--teinte-trait, var(--trait)); background: var(--teinte-pale, var(--papier)); }
.compo__jeu.est-choisi { border: 2px solid var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--papier)); padding: 0 calc(.75rem - 1px) 0 calc(.55rem - 1px); }
.compo__jeu.est-grisee { opacity: .45; cursor: not-allowed; }
.compo__reglages { display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr); gap: 1.2rem; }
.compo__nombres { display: flex; flex-wrap: wrap; gap: .35rem; }
.compo__nombre {
  min-width: 2.6rem; min-height: 2.25rem; display: inline-grid; place-items: center; padding: 0 .6rem; border-radius: 99px; cursor: pointer;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: 700 .8rem var(--titre); text-decoration: none;
}
.compo__nombre:hover { color: var(--encre); border-color: var(--encre-douce); }
.compo__nombre.est-choisi { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.compo__note { margin: 0; font-size: .82rem; color: var(--encre-douce); }
.compo__ambs { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: .4rem; }
.compo__amb {
  display: grid; justify-items: center; gap: .3rem; padding: .3rem; border-radius: 10px; cursor: pointer;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); font: 700 .66rem/1.2 var(--titre); text-align: center;
}
.compo__amb .amb-mini__apercu { width: 100%; height: 2.1rem; border-radius: 7px; }
.compo__amb:hover { border-color: var(--encre-douce); }
.compo__amb.est-choisi { border: 2px solid var(--teinte, var(--cyan)); padding: calc(.3rem - 1px); }
.compo__lancer {
  position: sticky; bottom: 0; z-index: 2; display: flex; align-items: center; gap: 1rem; margin: 0 -1.35rem; padding: .85rem 1.35rem calc(.95rem + env(safe-area-inset-bottom));
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); border-radius: 0 0 20px 20px;
}
.compo__resume { flex: 1; min-width: 0; margin: 0; font-size: .84rem; line-height: 1.4; }
.compo__resume b { display: block; font: 700 .98rem var(--titre); }
.compo__go {
  display: inline-flex; align-items: center; justify-content: center; gap: .45rem; min-width: 9.5rem; min-height: 50px; padding: 0 1.3rem; border: 0; border-radius: 12px; cursor: pointer;
  background: var(--blanc); color: var(--encre); font: 700 .95rem var(--titre); text-decoration: none;
}
.compo__go:hover { color: var(--encre); filter: brightness(.97); }
.compo__go .icone { width: 1.15rem; height: 1.15rem; }
.compo .est-en-cours { opacity: .6; }

@media (max-width: 640px) {
  .mr .entete-cours__actions { margin: -.1rem -.2rem .3rem .5rem; }
  .rv-rappel__texte { display: none; }
  .rv-rappel__bouton { position: relative; width: 2.25rem; padding: 0; justify-content: center; }
  .rv-rappel__point { position: absolute; top: .25rem; right: .25rem; box-shadow: 0 0 0 2px var(--blanc); }
  .parcours { margin-top: 1.1rem; }
  .parcours::before { left: 21px; }
  .parcours__etape { grid-template-columns: 44px minmax(0, 1fr); gap: .7rem; }
  .parcours__noeud .anneau--chap { width: 44px; height: 44px; }
  .parcours__noeud .anneau--chap .anneau__texte { font-size: .92rem; }
  .parcours__noeud .anneau--cours { width: 46px; height: 46px; }
  .parcours__noeud .anneau--cours .anneau__texte { font-size: .82rem; }
  .parcours__noeud--vide { width: 38px; height: 38px; }
  .rv-jour { grid-template-columns: minmax(0, 1fr); padding: 1rem; gap: .8rem; }
  .rv-jour__titre { font-size: 1.15rem; }
  .rv-jour__actions { display: grid; grid-template-columns: 1fr 1fr; }
  .rv-jour__actions .rv-jour__bouton--plein { grid-column: 1 / -1; }
  .rv-jour__bouton { min-width: 0; padding: 0 .4rem; gap: .3rem; font-size: .8rem; }
  .rv-jour__autres { display: flex; flex-wrap: wrap; gap: .35rem; padding: 0; border: 0; }
  .rv-jour__autres li { flex: none; }
  .rv-jour__autre { width: auto; padding: .3rem .65rem; border: 1px solid var(--teinte-trait, var(--trait)); background: var(--blanc); border-radius: 99px; font-size: .78rem; }
  .rv-jour__autre b { margin-left: .15rem; }
  .recette__texte { flex-basis: 100%; }
  .recette__icone { display: none; }
  .recette__boutons { width: 100%; display: grid; grid-template-columns: minmax(0, 1fr); }
  .recette__bouton { justify-content: center; min-height: 40px; }
  .etape-carte { padding: .85rem .9rem; }
  .etape-carte--ici { padding: 1rem .95rem .95rem; }
  .compo__portee { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .compo__mode { padding: .55rem; }
  .compo__mode.est-choisi { padding: calc(.55rem - 1px); }
  .compo__reglages { grid-template-columns: minmax(0, 1fr); gap: 1rem; }
  .compo__ambs { gap: .3rem; }
  .compo__amb { font-size: .58rem; }
  .compo__lancer { margin: 0 -1rem; padding: .8rem 1rem calc(.9rem + env(safe-area-inset-bottom)); border-radius: 0; }
  .compo__go { min-width: 7.5rem; }
}

/* =====================================================================================================
   2.50 — le menu « Mon compte », option B choisie par Matthias sur le canevas : qui en tête (dans la couleur
   du statut), deux rubriques (« Mon espace » avec ce qu'il y a dedans, « Compte »), l'administration à part,
   « Se déconnecter » en bouton, en bas.
   ===================================================================================================== */
.moi__menu { width: min(19.5rem, calc(100vw - 1.5rem)); min-width: 0; padding: 0; display: block; border-radius: 14px; box-shadow: 0 12px 32px rgba(16, 36, 58, .16); }
.entete .moi__menu { min-width: 0; }
.moi__qui {
  margin: 0; padding: 1rem; gap: .8rem; border-bottom: 1px solid var(--trait);
  background: color-mix(in srgb, var(--role, var(--cyan-fonce)) 7%, var(--blanc));
  border-bottom-color: color-mix(in srgb, var(--role, var(--cyan-fonce)) 16%, var(--trait));
}
.moi__avatar { width: 3rem; height: 3rem; font-size: .98rem; }
.moi__nom-complet { font-size: .96rem; }
.statut--bloc { --role: #6c7a88; }   /* le bloc (BA2) : neutre, quel que soit le statut */
.statut.statut--bloc { background: var(--blanc); border-color: var(--trait); color: var(--encre-douce); }
.moi__rubrique { padding: .55rem .5rem .35rem; }
.moi__rubrique + .moi__rubrique { border-top: 1px solid var(--trait); }
.moi__titre { margin: .1rem .6rem .25rem; font: 700 .66rem var(--titre); letter-spacing: .09em; text-transform: uppercase; color: var(--encre-douce); }
.moi__menu a.moi__lien { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .55rem .6rem; border-radius: 9px; font-size: .93rem; }
.moi__detail { flex: none; font-size: .8rem; color: var(--encre-douce); white-space: nowrap; }
.moi__detail--badge { min-width: 1.4rem; padding: 1px 7px; border-radius: 99px; background: var(--cyan-fonce); color: #fff; font: 700 .72rem/1.5 var(--titre); text-align: center; }
.moi__menu form.moi__sortie { margin: 0; padding: .65rem 1rem .9rem; border-top: 1px solid var(--trait); }
.moi__menu .moi__deconnexion {
  display: block; width: 100%; padding: .55rem; border: 1px solid var(--trait); border-radius: 9px; background: var(--blanc);
  text-align: center; font: 700 .88rem var(--texte); color: var(--encre-douce);
}
.moi__menu .moi__deconnexion:hover { background: var(--papier); color: var(--encre); border-color: var(--encre-douce); }

/* =====================================================================================================
   2.51 — « Ma révision du jour », « Révision libre », chapitres à venir (25/10, conception avec Matthias :
   dossier du projet claude/REVISION-conception-2026-10-25.md). Préfixe « rj- ». Les deux cartes
   remplacent « À faire aujourd'hui » sur Mon drive et Mes révisions ; libre.php = « Je choisis » ; les
   états des chapitres (🔒 à venir, 🔓 ouvert pour vous) sur la page du module.
   ===================================================================================================== */
.rj-deux { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 1rem; margin: 0 0 1rem; }
.rj, .rj-libre {
  display: grid; gap: .9rem; padding: 1.1rem 1.2rem 1rem; min-width: 0;
  background: var(--blanc); border: 1px solid var(--trait); border-top: 5px solid var(--cyan); border-radius: 16px; box-shadow: var(--ombre-drive);
}
.rj--finie { border-top-color: var(--jauge-juste); }
.rj--rien { border-top-color: var(--trait); }
.rj__haut { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 1rem 1.2rem; align-items: center; }
.anneau--rj { width: 76px; height: 76px; align-self: start; }
.anneau--rj .anneau__texte { font-size: 1.25rem; }
.anneau--rj .anneau__plein { stroke: var(--cyan); }
.rj--finie .anneau--rj .anneau__plein { stroke: var(--jauge-juste); }
.rj--finie .anneau__texte .icone { width: 1.7rem; height: 1.7rem; color: var(--jauge-juste); }
.rj__surtitre { display: flex; align-items: center; gap: .25rem; margin: 0; font: 700 .72rem var(--titre); letter-spacing: .12em; text-transform: uppercase; color: var(--cyan-fonce); }
.rj__titre { margin: .15rem 0 0; font-size: 1.3rem; line-height: 1.25; }
.rj__sous { margin: .3rem 0 0; color: var(--encre-douce); font-size: .9rem; line-height: 1.5; }
.rj__liste-cours { display: flex; flex-wrap: wrap; gap: .35rem .75rem; margin: .55rem 0 0; }
.rj-cours { display: inline-flex; align-items: center; gap: .35rem; font: 700 .8rem var(--titre); color: var(--encre); text-decoration: none; }
a.rj-cours:hover .rj-cours__nom { text-decoration: underline; }
.rj__programme { display: flex; align-items: flex-start; gap: .35rem; margin: .55rem 0 0; font-size: .85rem; color: var(--encre-douce); }
.rj__programme .icone { margin-top: .15rem; }
.rj__programme .icone { flex: none; color: var(--lien); }
.rj__go {
  display: inline-flex; align-items: center; justify-content: center; gap: .45rem; min-height: 46px; padding: 0 1.2rem; border-radius: 10px;
  border: 1px solid var(--cyan-fonce); background: var(--cyan-fonce); color: #fff; font: 700 .9rem var(--titre); text-decoration: none; cursor: pointer; white-space: nowrap;
}
.rj__go:hover { background: var(--cyan); border-color: var(--cyan); color: #fff; }
.rj__go .icone { width: 1.1rem; height: 1.1rem; flex: none; }
.rj__go--secondaire { background: var(--blanc); border-color: var(--trait); color: var(--encre); }
.rj__go--secondaire:hover { background: var(--cyan-pale); border-color: var(--cyan); color: var(--encre); }
.rj__reglages { width: 36px; height: 36px; display: grid; place-items: center; border-radius: 10px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce); cursor: pointer; }
.rj__reglages:hover { color: var(--lien); border-color: var(--cyan); }
.rj__reglages .icone { width: 1.05rem; height: 1.05rem; }
/* La régularité de la semaine : sept points, les jours révisés pleins — jamais de classement, jamais de « série ». */
.rj-semaine { display: flex; align-items: center; flex-wrap: wrap; gap: .3rem; padding-top: .85rem; border-top: 1px dashed var(--trait); }
.rj-semaine__jour { display: inline-grid; justify-items: center; gap: .15rem; }
.rj-semaine__point { width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--trait); display: grid; place-items: center; color: #fff; background: var(--blanc); }
.rj-semaine__point .icone { width: .8rem; height: .8rem; }
.rj-semaine__jour.est-fait .rj-semaine__point { background: var(--jauge-juste); border-color: var(--jauge-juste); }
.rj-semaine__jour.est-aujourdhui .rj-semaine__point { border-color: var(--cyan); box-shadow: 0 0 0 3px var(--cyan-pale); }
.rj-semaine__lettre { font: 700 .62rem var(--titre); color: var(--encre-douce); }
.rj-semaine__texte { margin-left: .55rem; font-size: .82rem; color: var(--encre-douce); }
.rj-semaine--compacte .rj-semaine__texte { display: none; }
/* Révision libre */
.rj-libre { border-top-color: var(--ambre); }
.rj-libre .rj__surtitre { color: var(--puce-texte); }
.rj-libre__tete { display: flex; gap: .8rem; align-items: flex-start; min-width: 0; }
.rj-libre__icone { flex: none; width: 44px; height: 44px; border-radius: 12px; background: var(--ambre-pale); color: var(--puce-texte); display: grid; place-items: center; }
.rj-libre__icone .icone { width: 1.3rem; height: 1.3rem; }
.rj-libre__titre { margin: .15rem 0 0; font-size: 1.12rem; line-height: 1.3; }
.rj-libre__actions { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-top: auto; }
.rj-libre__actions .forme-bouton { margin: 0; }
.rj-libre__programmes { display: inline-flex; align-items: center; gap: .3rem; font-size: .82rem; color: var(--lien); }
.rj-libre--en-cours { margin: 0 0 1rem; border-top-color: var(--cyan); }
/* La fenêtre des réglages (popover) */
.rj-fenetre { max-width: 36rem; }
.rj-reglages { display: grid; gap: 1.1rem; padding-top: .6rem; }
.rj-reglages__groupe { border: 0; margin: 0; padding: 0; min-width: 0; }
.rj-reglages__groupe legend { display: flex; align-items: center; gap: .25rem; margin: 0 0 .55rem; padding: 0; font: 700 .95rem var(--titre); }
.rj-durees { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; }
.rj-duree { position: relative; display: grid; gap: .15rem; padding: .7rem .8rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); cursor: pointer; }
.rj-duree input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.rj-duree:has(input:checked) { border-color: var(--cyan); background: var(--cyan-pale); box-shadow: inset 0 0 0 1px var(--cyan); }
.rj-duree:has(input:focus-visible) { outline: 2px solid var(--cyan); outline-offset: 2px; }
.rj-duree__nom { font: 700 .92rem var(--titre); }
.rj-duree__detail { font-size: .8rem; color: var(--encre-douce); }
.rj-reglages__cours { list-style: none; margin: 0; padding: 0; display: grid; gap: .35rem; max-height: 15rem; overflow: auto; }
.rj-reglages__case { align-items: center; color: var(--encre); }
.rj-reglages__case input { margin-top: 0; }
.rj-reglages__case > span { display: grid; gap: .1rem; }
.rj-reglages__case small { color: var(--encre-douce); font-size: .8rem; }
/* Le déroulé (revision.php) */
.rj-avancement__ou { display: flex; align-items: center; flex-wrap: wrap; gap: .4rem .7rem; margin: .65rem 0 0; font-size: .88rem; color: var(--encre-douce); }
.rj-avancement__chap { font-weight: 700; color: var(--encre); }
.rj-bilan .rj-semaine { justify-content: center; border-top: 0; padding-top: 0; margin: .4rem 0 1rem; }
.rj-bilan__reste { margin: .2rem 0 .8rem; color: var(--encre-douce); font-size: .92rem; }
.bilan__score--mot { font-size: clamp(1.5rem, 5vw, 2.1rem); line-height: 1.2; }
/* L'état d'un chapitre (page du module, libre.php) */
.rj-etat { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .6rem; margin: .6rem 0 0; padding: .45rem .65rem; border-radius: 10px; font-size: .84rem; color: var(--encre-douce); background: var(--papier); border: 1px dashed var(--trait); }
.rj-etat .icone { flex: none; }
.rj-etat b { color: var(--encre); }
.rj-etat form { margin: 0 0 0 auto; }
.rj-etat--moi { background: color-mix(in srgb, var(--jauge-juste) 12%, var(--blanc)); border-style: solid; border-color: color-mix(in srgb, var(--jauge-juste) 45%, var(--trait)); color: var(--encre); }
.rj-etat--moi .icone { color: var(--jauge-juste); }
.rj-etat__bouton { white-space: nowrap; }
.etape-carte--avenir .etape-carte__nom a, .etape-carte--avenir .etape-carte__meta { color: var(--encre-douce); }
.parcours__cadenas { position: absolute; right: -5px; bottom: -3px; width: 22px; height: 22px; border-radius: 50%; background: var(--blanc); border: 1px solid var(--trait); display: grid; place-items: center; color: var(--encre-douce); }
.parcours__cadenas--moi { color: var(--jauge-juste); border-color: color-mix(in srgb, var(--jauge-juste) 45%, var(--trait)); }
.parcours__cadenas .icone { width: .75rem; height: .75rem; }
.etape-carte__cours-ici { position: absolute; top: -.72rem; right: 1rem; display: inline-flex; align-items: center; gap: .3rem; padding: 2px 10px; border-radius: 99px; background: var(--blanc); border: 1px solid var(--teinte, var(--cyan)); color: var(--encre); font: 700 .68rem var(--titre); letter-spacing: .03em; }
.etape-carte__cours-ici .icone { width: .8rem; height: .8rem; color: var(--teinte, var(--cyan)); }
.mr-avancement { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .9rem; margin: 0 0 1rem; padding: .75rem 1rem; border-radius: 12px; background: var(--teinte-pale, var(--blanc)); border: 1px solid var(--teinte-trait, var(--trait)); font-size: .88rem; color: var(--encre-douce); }
.mr-avancement b { color: var(--encre); }
.mr-avancement .icone { flex: none; color: var(--teinte, var(--cyan)); }
.mr-avancement form { margin: 0 0 0 auto; }
.mr-avancement__fiche { display: grid; gap: .8rem; }
.mr-avancement__fiche label { display: grid; gap: .3rem; font-size: .9rem; }
.mr-avancement__fiche select, .mr-avancement__fiche input[type="number"] { padding: .55rem .7rem; border: 1px solid var(--trait); border-radius: 9px; font: inherit; background: var(--blanc); color: var(--encre); }
.mr-avancement__note { font-size: .84rem; color: var(--encre-douce); }
/* Révision libre : la page « Je choisis » */
.libre__bloc { margin-bottom: 1rem; }
.libre__compte { font-size: .85rem; color: var(--encre-douce); }
.libre__cours { margin: 0 0 .9rem; padding: 0; min-width: 0; border: 1px solid var(--teinte-trait, var(--trait)); border-radius: 14px; background: var(--teinte-pale, var(--blanc)); }
.libre__cours-tete { float: left; width: 100%; box-sizing: border-box; margin: 0; padding: .65rem .9rem .35rem; }
.libre__tout { display: flex; align-items: center; gap: .6rem; cursor: pointer; }
.libre__tout input { accent-color: var(--cyan); width: 1.05rem; height: 1.05rem; }
.libre__cours-long { font-size: .85rem; color: var(--encre-douce); }
.libre__chapitres { clear: both; list-style: none; margin: 0; padding: .35rem .75rem .75rem; display: grid; grid-template-columns: repeat(auto-fill, minmax(15.5rem, 1fr)); gap: .5rem; }
.libre__chap { position: relative; display: flex; align-items: center; gap: .6rem; padding: .55rem .7rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); cursor: pointer; }
.libre__chap input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.libre__chap:has(input:checked) { border-color: var(--cyan); box-shadow: inset 0 0 0 1px var(--cyan); }
.libre__chap:has(input:focus-visible) { outline: 2px solid var(--cyan); outline-offset: 2px; }
.libre__chap.est-grisee { opacity: .55; cursor: not-allowed; }
.libre__chap--avenir .libre__chap-texte b { color: var(--encre-douce); }
.libre__chap-texte { display: grid; min-width: 0; }
.libre__chap-texte b { font-size: .9rem; }
.libre__chap-texte small { font-size: .78rem; color: var(--encre-douce); }
.libre__cadenas { color: var(--encre-douce); flex: none; }
.libre__cadenas--moi { color: var(--jauge-juste); }
.libre__coche { flex: none; margin-left: auto; width: 22px; height: 22px; border-radius: 50%; border: 1px solid var(--trait); display: grid; place-items: center; color: transparent; }
.libre__coche .icone { width: .85rem; height: .85rem; }
.libre__chap:has(input:checked) .libre__coche { background: var(--cyan); border-color: var(--cyan); color: #fff; }
.libre__tailles { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.libre__taille { position: relative; }
.libre__taille input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.libre__taille span { display: inline-grid; place-items: center; min-width: 3.2rem; height: 40px; padding: 0 .9rem; border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc); font: 700 .9rem var(--titre); cursor: pointer; }
.libre__taille:has(input:checked) span { background: var(--cyan-fonce); border-color: var(--cyan-fonce); color: #fff; }
.libre__taille:has(input:focus-visible) span { outline: 2px solid var(--cyan); outline-offset: 2px; }
.libre__taille-note { flex-basis: 100%; font-size: .82rem; color: var(--encre-douce); }
.libre__boutons { display: flex; flex-wrap: wrap; gap: .6rem; align-items: flex-start; }
.libre__boutons .bouton[disabled] { opacity: .5; cursor: not-allowed; }
.libre__programmer { flex: 1 1 100%; }
.libre__programmer > summary { list-style: none; display: inline-flex; width: auto; }
.libre__programmer > summary::-webkit-details-marker { display: none; }
.libre__jours-bloc { margin-top: .8rem; padding: .9rem 1rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--papier); display: grid; gap: .75rem; }
.libre__jours-aide { margin: 0; font-size: .86rem; color: var(--encre-douce); }
.libre__jours { display: flex; flex-wrap: wrap; gap: .4rem; }
.libre__jour { position: relative; }
.libre__jour input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.libre__jour span { display: inline-grid; place-items: center; width: 3rem; height: 38px; border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc); font: 700 .8rem var(--titre); cursor: pointer; }
.libre__jour:has(input:checked) span { background: var(--cyan-fonce); border-color: var(--cyan-fonce); color: #fff; }
.libre__jour:has(input:focus-visible) span { outline: 2px solid var(--cyan); outline-offset: 2px; }
.libre__nom { display: grid; gap: .3rem; font-size: .88rem; max-width: 26rem; }
.libre__nom input { padding: .55rem .7rem; border: 1px solid var(--trait); border-radius: 9px; font: inherit; background: var(--blanc); color: var(--encre); }
.libre__jouer { display: flex; align-items: center; gap: .35rem; margin: .9rem 0 0; font-size: .85rem; color: var(--encre-douce); }
.programmes { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }
.programme { display: flex; gap: .8rem; align-items: center; padding: .8rem .9rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); }
.programme__textes { flex: 1; min-width: 0; }
.programme__nom { margin: 0; font-size: .98rem; }
.programme__detail { margin: .15rem 0 .4rem; font-size: .84rem; color: var(--encre-douce); }
.programme__jours { display: flex; flex-wrap: wrap; gap: .25rem; margin: 0; }
.programme__jour { font: 700 .66rem var(--titre); padding: .15rem .4rem; border-radius: 6px; background: var(--papier); color: var(--encre-douce); }
.programme__jour.est-actif { background: var(--cyan-fonce); color: #fff; }
.programme__actions { display: flex; gap: .4rem; align-items: center; }
.programme__actions form { margin: 0; }
/* Tutoriel (testeurs) */
.tuto { max-width: 820px; margin: 0 auto; }
.tuto__pas { position: relative; margin: 0 0 1.2rem; padding: 1.2rem 1.3rem 1.3rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; box-shadow: var(--ombre-drive); }
.tuto__num { display: inline-grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--cyan-fonce); color: #fff; font: 700 .85rem var(--titre); margin-right: .55rem; }
.tuto__pas h2 { display: flex; align-items: center; margin: 0 0 .6rem; font-size: 1.2rem; }
.tuto__pas p { max-width: none; }
.tuto__demo { margin: .9rem 0; padding: .9rem; border-radius: 12px; background: var(--papier); border: 1px dashed var(--trait); pointer-events: none; }   /* inerte même sans l'attribut inert */
.tuto__demo .rj, .tuto__demo > .rj-libre { box-shadow: none; }
.tuto__legende { margin: .4rem 0 0; font-size: .82rem; color: var(--encre-douce); font-style: italic; }
.tuto__etats { list-style: none; margin: .6rem 0; padding: 0; display: grid; gap: .5rem; }
.tuto__etats li { display: flex; gap: .6rem; align-items: flex-start; }
.tuto__etats .icone { flex: none; margin-top: .15rem; color: var(--encre-douce); }
.tuto__etats li.est-moi .icone { color: var(--jauge-juste); }
.tuto__preuves { margin: .5rem 0 0; padding-left: 1.2rem; }
.tuto__preuves li { margin: .3rem 0; }
.tuto__pied { display: flex; flex-wrap: wrap; gap: .6rem; align-items: center; justify-content: center; margin: 1.4rem 0; }
@media (max-width: 760px) {
  .rj-deux { grid-template-columns: minmax(0, 1fr); }
  .rj, .rj-libre { padding: .95rem 1rem .9rem; }
  .rj__haut { grid-template-columns: auto minmax(0, 1fr) auto; gap: .7rem .8rem; }
  .anneau--rj { width: 60px; height: 60px; }
  .anneau--rj .anneau__texte { font-size: 1.05rem; }
  .rj-durees { grid-template-columns: minmax(0, 1fr); }
  .rj-semaine__texte { flex-basis: 100%; margin: .2rem 0 0; }
  .libre__chapitres { grid-template-columns: minmax(0, 1fr); }
  .programme { flex-wrap: wrap; }
  .programme__actions { width: 100%; justify-content: flex-end; }
  .mr-avancement form { margin-left: 0; }
}
.rv-jour__plan { display: flex; align-items: flex-start; gap: .35rem; }
.rv-jour__plan .icone { flex: none; margin-top: .15rem; color: var(--teinte, var(--cyan)); }
.rj-fenetre .fenetre__titre .icone { color: var(--cyan-fonce); }
.tuto__nav { display: flex; gap: .4rem; }
.tuto__point { display: inline-grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce); font: 700 .8rem var(--titre); text-decoration: none; }
.tuto__point.est-actif { background: var(--cyan-fonce); border-color: var(--cyan-fonce); color: #fff; }
.tuto__demo .rj-deux { margin: 0; }
.tuto__demo .etape-carte + .etape-carte { margin-top: .6rem; }
.tuto__demo .libre__jour { display: inline-block; }
/* (démonstration du tutoriel seulement — sans case : une vraie durée n'a de halo que cochée, 2.53) */
.rj-duree.est-choisie:not(:has(input)) { border-color: var(--cyan); background: var(--cyan-pale); box-shadow: inset 0 0 0 1px var(--cyan); }
.tuto__demo .info { display: none; }
.rj__seance a { font-weight: 700; }

/* ===================================================================== Module d'auto-évaluation (site 2.52, 25/10)
   Refonte de l'accueil (includes/autoeval-vues.php), piste cliquable, revoir une correction,
   « Question difficile », examen simulé (simulation.php, assets/js/simulation.js) et son bilan. */

/* ---- le bandeau qui renvoie vers la révision du jour (la première chose de la page) */
.ae-revision {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: .9rem 1.2rem; align-items: center;
  margin: 1.1rem 0 1.2rem; padding: 1rem 1.2rem; border-radius: 16px;
  background: var(--teinte-pale, var(--cyan-pale)); border: 1px solid var(--teinte-trait, var(--trait)); border-left: 6px solid var(--teinte, var(--cyan));
}
.ae-revision__icone { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 12px; background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.ae-revision__icone .icone { width: 1.5rem; height: 1.5rem; }
.ae-revision__surtitre { margin: 0; font: 700 .7rem var(--titre); letter-spacing: .12em; text-transform: uppercase; color: color-mix(in srgb, var(--teinte, var(--cyan)) 70%, var(--encre)); }
.ae-revision__titre { margin: .1rem 0 0; font-size: 1.08rem; line-height: 1.3; }
.ae-revision__texte { margin: .25rem 0 0; color: var(--encre-douce); font-size: .88rem; line-height: 1.5; }
.ae-revision__actions { display: grid; justify-items: center; gap: .25rem; }
.ae-revision__bouton { min-height: 48px; padding: 0 1.2rem; }
.ae-revision__etat { font-size: .78rem; color: var(--encre-douce); }
.ae-revision__lien { display: inline-flex; align-items: center; gap: .2rem; font-size: .8rem; font-weight: 700; }

/* ---- les quatre chiffres */
.ae-chiffres { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .8rem; margin: 0 0 1.2rem; }
.ae-chiffre { position: relative; min-width: 0; padding: .85rem 1rem .8rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 14px; box-shadow: var(--ombre-drive); }
.ae-chiffre__nom { display: flex; align-items: center; gap: .15rem; margin: 0; font: 700 .76rem var(--titre); color: var(--encre-douce); letter-spacing: .02em; }
.ae-chiffre__valeur { margin: .3rem 0 .15rem; font: 700 1.9rem/1 var(--titre); color: var(--encre); font-variant-numeric: tabular-nums; }
.ae-chiffre__valeur small { font-size: .52em; font-weight: 700; color: var(--encre-douce); }
.ae-chiffre__detail { margin: 0; font-size: .8rem; color: var(--encre-douce); line-height: 1.35; }
.ae-chiffre__jauge { margin: .35rem 0 .3rem; height: 6px; }
.ae-chiffre--erreurs:not(.est-vide) .ae-chiffre__valeur { color: var(--faux); }
.ae-chiffre--reussi .ae-chiffre__valeur { color: var(--juste); }
.ae-chiffre.est-vide .ae-chiffre__valeur { color: var(--encre-douce); }

/* ---- deux cartes : s'entraîner, simuler un examen */
.ae-cartes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; align-items: start; margin: 0 0 1.1rem; }
.ae-carte { display: grid; gap: .7rem; min-width: 0; padding: 1.1rem 1.2rem 1.15rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; box-shadow: var(--ombre-drive); }
.ae-carte__titre { display: flex; align-items: center; gap: .55rem; margin: 0; font-size: 1.12rem; }
.ae-carte__icone { display: inline-grid; place-items: center; width: 2.1rem; height: 2.1rem; flex: none; border-radius: 10px; background: var(--teinte-pale, var(--cyan-pale)); border: 1px solid var(--teinte-trait, var(--trait)); color: var(--encre); }
.ae-carte__icone .icone { width: 1.15rem; height: 1.15rem; }
.ae-carte__texte { margin: -.35rem 0 0; color: var(--encre-douce); font-size: .9rem; }
.ae-carte__vide { margin: 0; padding: .7rem .9rem; border-radius: 10px; background: var(--papier); color: var(--encre-douce); font-size: .88rem; }
.ae-carte .lanceur { display: grid; gap: .9rem; }
.ae-carte .lanceur .actions-ligne { margin: 0; }
.ae-carte .lancer__aide { margin: 0; }
.ae-encours { display: grid; gap: .5rem; padding: .7rem .85rem; border-radius: 12px; background: var(--cyan-pale); border: 1px solid var(--trait); border-left: 4px solid var(--cyan); }
.ae-encours p { margin: 0; font-size: .9rem; }
.ae-encours .actions-ligne { margin: 0; }
.ae-encours > .bouton { justify-self: start; }
.ae-simuler { display: grid; gap: .75rem; }
.ae-simuler__resume { display: flex; flex-wrap: wrap; gap: .4rem; margin: 0; }
.ae-pastille { display: inline-flex; align-items: center; gap: .35rem; padding: .3rem .7rem; border-radius: 99px; background: var(--papier); border: 1px solid var(--trait); font: 700 .82rem var(--titre); }
.ae-pastille .icone { color: var(--encre-douce); }
.ae-simuler__reglages { font-size: .88rem; }
.ae-simuler__reglages summary { cursor: pointer; color: var(--lien); font-weight: 700; }
.ae-simuler__reglages[open] summary { margin-bottom: .7rem; }
.ae-simuler__reglages .champ__aide { margin: .4rem 0 0; }
.ae-simuler__duree { display: inline-flex; align-items: center; gap: .5rem; margin-top: .8rem; font-weight: 700; font-size: .88rem; }
.ae-simuler__duree input { width: 5.5rem; min-height: 40px; padding: .3rem .5rem; border: 1px solid var(--trait); border-radius: 9px; background: var(--blanc); color: var(--encre); font: inherit; font-weight: 700; text-align: right; }
.ae-simuler__duree span:last-child { font-weight: 400; color: var(--encre-douce); }
.ae-simuler__lancer { justify-self: start; }
.ae-historique { padding-top: .7rem; border-top: 1px solid var(--trait); }
.ae-historique__titre { margin: 0 0 .45rem; font: 700 .76rem var(--titre); color: var(--encre-douce); }
.ae-historique__liste { list-style: none; display: flex; flex-wrap: wrap; gap: .4rem; margin: 0; padding: 0; }
.ae-note { display: inline-grid; justify-items: center; min-width: 3.4rem; padding: .3rem .55rem; border-radius: 10px; border: 1px solid var(--faux-trait, var(--trait)); background: var(--faux-fond, var(--papier)); color: var(--encre); text-decoration: none; line-height: 1.15; }
.ae-note strong { font: 700 1rem var(--titre); color: var(--faux); }
.ae-note span { font-size: .7rem; color: var(--encre-douce); }
.ae-note--reussi { border-color: var(--juste-trait, var(--trait)); background: var(--juste-fond); }
.ae-note--reussi strong { color: var(--juste); }
.ae-note:hover { color: var(--encre); filter: brightness(.97); }

/* ---- « un module écrit par des étudiant·es », la banque */
.ae-collectif { display: flex; gap: .65rem; align-items: flex-start; margin: 0 0 1.4rem; padding: .8rem 1rem; border-radius: 12px; background: var(--blanc); border: 1px dashed var(--trait); }
.ae-collectif__icone { flex: none; margin-top: .1rem; color: var(--lien); }
.ae-collectif p { margin: 0; font-size: .88rem; line-height: 1.5; color: var(--encre-douce); }
.ae-collectif strong { color: var(--encre); }
.ae-banque { margin: 1.6rem 0 0; }
.ae-banque > h2 { display: flex; align-items: center; gap: .55rem; margin: 0 0 .6rem; font-size: 1.12rem; }
.ae-banque .actions-ligne { margin: 0; }
.ae .repli-section { margin-top: 1.6rem; }
.actions-ligne--centre { justify-content: center; }

/* ---- avertissement des pages d'ajout */
.encadre--examen { border-left-color: var(--cyan); background: var(--cyan-pale); }
.encadre-examen__titre { display: flex; align-items: center; gap: .45rem; margin: 0 0 .3rem; }
.encadre-examen__titre .icone { color: var(--cyan-fonce); flex: none; }

/* ---- « Question difficile » */
.etiquette--difficile { gap: .25rem; background: var(--ambre-pale); color: var(--puce-texte); border-color: var(--puce-bord); }
.etiquette--difficile .icone { width: .85rem; height: .85rem; color: var(--ambre); flex: none; }
.etiquette--difficile + .info { margin-left: -.1rem; }

/* ---- la piste cliquable */
.piste-liens { margin: 0; }
.piste-liens__cases { list-style: none; display: flex; gap: 3px; margin: 0; padding: 0; }
.piste-liens__cases > li { flex: 1 1 0; min-width: 0; }
.piste-liens__case { display: flex; align-items: center; height: 24px; border-radius: 4px; text-decoration: none; }
a.piste-liens__case { cursor: pointer; }
.piste-liens__trait { display: block; width: 100%; height: 10px; border-radius: 3px; background: var(--jauge-fond); transition: height .12s ease, transform .12s ease; }
.piste-liens__case--j .piste-liens__trait { background: var(--jauge-juste); }
.piste-liens__case--f .piste-liens__trait { background: var(--jauge-fausse); }
.piste-liens__case--s .piste-liens__trait { background: var(--jauge-sans); }
.piste-liens__case--x .piste-liens__trait { background: var(--encre-douce); opacity: .45; }
.piste-liens__case--actuelle .piste-liens__trait { background: var(--encre); }
a.piste-liens__case:hover .piste-liens__trait { height: 16px; }
.piste-liens__case.est-vue .piste-liens__trait { height: 18px; box-shadow: 0 0 0 2px var(--blanc), 0 0 0 4px var(--encre); }
a.piste-liens__case:focus-visible { outline: 3px solid var(--ambre); outline-offset: 1px; }
/* Téléphone : jamais une case de moins de 16 px — la piste passe sur plusieurs lignes (auto-fit : peu de
   questions = toute la largeur, comme sur ordinateur). */
@media (max-width: 640px) {
  .piste-liens__cases { display: grid; grid-template-columns: repeat(auto-fit, minmax(16px, 1fr)); gap: 4px 3px; }
  .piste-liens__case { height: 28px; }
}
.piste__signalee { fill: var(--encre-douce); opacity: .45; }
.bilan__x .icone { color: var(--encre-douce); }
.bilan__lien { color: var(--encre); text-decoration: none; }
.bilan__lien:hover { color: var(--lien); text-decoration: underline; }

/* ---- revoir une correction, le doute, le ⋯ avant de répondre */
.revue-bandeau { display: flex; align-items: center; gap: .4rem; margin: 0 0 .8rem; font-size: .84rem; color: var(--encre-douce); }
.carte-question--revue { border-top-style: dashed; }
.revue-nav { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-top: 1.2rem; }
.revue-nav__retour { margin-left: auto; }
.carte-question__doute { flex-basis: 100%; margin: .3rem 0 0; font-size: .84rem; color: var(--encre-douce); }
.carte-question:has(> .points--coin) > .carte-question__consigne,
.carte-question:has(> .points--coin) > .revue-bandeau { padding-right: 2.8rem; }

/* ---- l'examen simulé */
.examen { max-width: 52rem; margin: 0 auto; }
.examen__copie { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0; }
.examen__copie > * { min-width: 0; }
.examen__barre {
  position: sticky; top: calc(var(--entete-h, 64px) + 44px); z-index: 20; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem;
  margin: 0 0 .6rem; padding: .55rem .7rem .55rem 1rem; border-radius: 14px; background: var(--blanc); border: 1px solid var(--trait); box-shadow: var(--ombre-drive);
}
.examen__titre { display: flex; align-items: center; gap: .45rem; margin: 0; font: 700 .9rem var(--titre); }
.examen__chrono { display: inline-flex; align-items: baseline; gap: .4rem; margin: 0 0 0 auto; font: 700 1.45rem/1 var(--titre); font-variant-numeric: tabular-nums; color: var(--encre); }
.examen__chrono .icone { align-self: center; width: 1.3rem; height: 1.3rem; color: var(--encre-douce); }
.examen__fin { font: 400 .76rem var(--texte); color: var(--encre-douce); }
.examen--js .examen__fin { display: none; }
.examen__compte { margin: 0; font-size: .86rem; color: var(--encre-douce); font-variant-numeric: tabular-nums; }
.examen__compte strong { color: var(--encre); font-size: 1rem; }
.examen__son { display: inline-grid; place-items: center; width: 40px; height: 40px; border-radius: 10px; border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); cursor: pointer; }
.examen__son .icone { width: 1.15rem; height: 1.15rem; grid-area: 1 / 1; }
.examen__son .icone + .icone, .examen__son.est-coupe .icone:first-child { display: none; }
.examen__son.est-coupe .icone + .icone { display: block; }
.examen__remettre { min-height: 40px; }
.examen--10min .examen__chrono { color: var(--sans); }
.examen--5min .examen__chrono, .examen--fin .examen__chrono { color: var(--faux); }
.examen--fin .examen__barre { border-color: var(--faux); animation: examen-pouls .5s ease-in-out infinite alternate; }
@keyframes examen-pouls { from { box-shadow: 0 0 0 0 color-mix(in srgb, var(--faux) 40%, transparent); } to { box-shadow: 0 0 0 6px color-mix(in srgb, var(--faux) 0%, transparent); } }
.examen__alerte {
  position: sticky; top: calc(var(--entete-h, 64px) + 110px); z-index: 21; justify-self: center; margin: 0 auto .6rem; padding: .55rem 1.1rem; border-radius: 99px;
  background: var(--encre); color: var(--blanc); font: 700 .92rem var(--titre); box-shadow: var(--ombre-drive);
}
.examen__alerte[hidden] { display: none; }
.examen__alerte--reseau {
  z-index: 20; max-width: min(40rem, 100%); border-radius: 12px; background: var(--faux); text-align: center;
  font-family: inherit; font-weight: 600; font-size: .88rem; line-height: 1.4;
}
.examen__piste { margin: 0 0 1rem; }
.examen__piste ol { list-style: none; display: flex; flex-wrap: wrap; gap: .3rem; margin: 0; padding: 0; }
.examen__case {
  display: inline-grid; place-items: center; min-width: 2.15rem; height: 2.15rem; padding: 0 .3rem; border-radius: 8px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre-douce); font: 700 .8rem var(--titre); text-decoration: none; font-variant-numeric: tabular-nums;
}
.examen__case:hover { color: var(--encre); border-color: var(--teinte, var(--cyan)); }
.examen__case.est-repondue { background: var(--teinte-pale, var(--cyan-pale)); border-color: var(--teinte-trait, var(--cyan)); color: var(--encre); }
.examen__case.est-courante { background: var(--encre); border-color: var(--encre); color: var(--blanc); }
.examen__question { max-width: none; margin: 0 0 1.1rem; scroll-margin-top: 12rem; }
.examen__question[hidden] { display: none; }
.examen__num { margin: 0 0 .5rem; font-size: .85rem; color: var(--encre-douce); }
.examen__num strong { font: 700 1.25rem var(--titre); color: var(--encre); }
.examen__num:focus { outline: none; }
.examen__nav { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .6rem; margin-top: 1.2rem; padding-top: .9rem; border-top: 1px solid var(--trait); }
@media (max-width: 480px) {
  .examen__nav .bouton { flex: 1 1 0; min-width: 0; justify-content: center; white-space: normal; text-align: center; }
}
.examen__nav[hidden] { display: none; }
.examen__pied { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem; margin: .4rem 0 1rem; }
.examen__pied .champ__aide { flex-basis: 100%; margin: 0; }
.examen--js .examen__pied { display: none; }
.examen__abandon { margin: .5rem 0 2rem; }
.examen__abandon .bouton-lien { font-size: .84rem; color: var(--encre-douce); }
.examen__boite .boite__corps { padding: 1.2rem 1.3rem; }
.examen__boite .boite__titre { margin: 0 0 .4rem; }
.examen__boite .boite__pied { display: flex; justify-content: flex-end; gap: .8rem; align-items: center; margin-top: 1rem; }

/* ---- le bilan d'un examen */
.sim-bilan { max-width: 60rem; margin: 0 auto; }
.sim-note { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 1rem 1.6rem; align-items: center; margin: 1.1rem 0; padding: 1.2rem 1.4rem;
  border-radius: 18px; background: var(--blanc); border: 1px solid var(--trait); border-left: 6px solid var(--faux); box-shadow: var(--ombre-drive); }
.sim-note--reussi { border-left-color: var(--juste); }
.sim-note__chiffre { margin: 0; font-family: var(--titre); line-height: 1; white-space: nowrap; }
.sim-note__chiffre strong { font-size: clamp(3rem, 9vw, 4.4rem); color: var(--faux); font-variant-numeric: tabular-nums; }
.sim-note--reussi .sim-note__chiffre strong { color: var(--juste); }
.sim-note__chiffre span { font-size: 1.4rem; color: var(--encre-douce); margin-left: .15rem; }
.sim-note__textes { display: grid; gap: .35rem; min-width: 0; }
.sim-note__verdict { display: inline-flex; align-items: center; gap: .35rem; margin: 0; font: 700 1.1rem var(--titre); color: var(--faux); }
.sim-note--reussi .sim-note__verdict { color: var(--juste); }
.sim-note__detail { margin: 0; font-size: .9rem; color: var(--encre-douce); }
.sim-note .piste { margin-top: .3rem; }
.sim-grille { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin: 0 0 1rem; }
.sim-bloc { min-width: 0; margin: 0 0 1rem; padding: 1rem 1.2rem 1.05rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; }
.sim-grille .sim-bloc { margin: 0; }
.sim-bloc > h2 { display: flex; align-items: center; gap: .5rem; margin: 0 0 .6rem; font-size: 1.05rem; }
.sim-bloc > h2 > .icone { color: var(--encre-douce); }
.sim-bloc p { margin: .3rem 0; font-size: .9rem; line-height: 1.5; }
.sim-petit { font-size: .84rem !important; color: var(--encre-douce); }
.sim-chiffre { margin: .1rem 0 .2rem !important; font: 700 1.6rem var(--titre) !important; }
.sim-ecart strong { font: 700 1.3rem var(--titre); }
.sim-ecart--plus strong { color: var(--juste); }
.sim-ecart--moins strong { color: var(--faux); }
.sim-liste { list-style: none; display: grid; gap: .45rem; margin: .4rem 0 0; padding: 0; }
.sim-liste > li { display: flex; gap: .55rem; align-items: flex-start; font-size: .9rem; line-height: 1.5; }
.sim-liste > li > .icone { flex: none; margin-top: .15rem; width: 1.15rem; height: 1.15rem; color: var(--lien); }
.sim-liste--bien > .icone { color: var(--juste) !important; }
.sim-liste--mal > .icone { color: var(--faux) !important; }
.sim-liste--moyen > .icone { color: var(--ambre) !important; }
.sim-revision { border-left: 5px solid var(--teinte, var(--cyan)); background: var(--teinte-pale, var(--blanc)); }
.sim-revision .actions-ligne { margin: .9rem 0 0; }
.sim-courbe { list-style: none; display: flex; align-items: flex-end; gap: .4rem; height: 120px; margin: .9rem 0 0; padding: 0 0 1.3rem; border-bottom: 1px solid var(--trait); }
.sim-courbe__barre { position: relative; flex: 1 1 0; max-width: 3rem; min-height: 4px; border-radius: 6px 6px 0 0; background: var(--faux-trait, var(--trait)); }
.sim-courbe__barre.est-reussie { background: var(--juste-trait, var(--trait)); }
.sim-courbe__barre.est-celle-ci { background: var(--faux); }
.sim-courbe__barre.est-celle-ci.est-reussie { background: var(--juste); }
.sim-courbe__note { position: absolute; left: 0; right: 0; bottom: 100%; margin-bottom: 2px; text-align: center; font: 700 .72rem var(--titre); color: var(--encre); }
.sim-courbe__date { position: absolute; left: 0; right: 0; top: 100%; margin-top: 4px; text-align: center; font-size: .66rem; color: var(--encre-douce); }
.sim-h-0 { height: 4%; } .sim-h-5 { height: 5%; } .sim-h-10 { height: 10%; } .sim-h-15 { height: 15%; } .sim-h-20 { height: 20%; }
.sim-h-25 { height: 25%; } .sim-h-30 { height: 30%; } .sim-h-35 { height: 35%; } .sim-h-40 { height: 40%; } .sim-h-45 { height: 45%; }
.sim-h-50 { height: 50%; } .sim-h-55 { height: 55%; } .sim-h-60 { height: 60%; } .sim-h-65 { height: 65%; } .sim-h-70 { height: 70%; }
.sim-h-75 { height: 75%; } .sim-h-80 { height: 80%; } .sim-h-85 { height: 85%; } .sim-h-90 { height: 90%; } .sim-h-95 { height: 95%; } .sim-h-100 { height: 100%; }
.sim-questions__liste { list-style: none; display: grid; gap: .4rem; margin: .6rem 0 0; padding: 0; }
.sim-q { border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); }
.sim-q > summary { display: flex; align-items: center; gap: .55rem; padding: .55rem .8rem; cursor: pointer; list-style: none; font-size: .9rem; }
.sim-q > summary::-webkit-details-marker { display: none; }
.sim-q > summary::after { content: "▾"; margin-left: auto; padding-left: .4rem; color: var(--encre-douce); font-size: .8rem; }
.sim-q[open] > summary::after { content: "▴"; }
.sim-q__etat { display: inline-grid; place-items: center; flex: none; width: 1.7rem; height: 1.7rem; border-radius: 50%; }
.sim-q__etat .icone { width: 1rem; height: 1rem; }
.sim-q--j .sim-q__etat { background: var(--juste-fond); color: var(--juste); }
.sim-q--f .sim-q__etat { background: var(--faux-fond); color: var(--faux); }
.sim-q--v .sim-q__etat, .sim-q--r .sim-q__etat { background: var(--papier); color: var(--encre-douce); }
.sim-q__num { flex: none; font: 700 .8rem var(--titre); color: var(--encre-douce); min-width: 1.4rem; }
.sim-q__texte { min-width: 0; flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; }
.sim-q > summary .etiquette { flex: none; }
.sim-q__corps { max-width: none; margin: 0; border: 0; border-top: 1px solid var(--trait); border-radius: 0 0 12px 12px; box-shadow: none; padding: 1rem 1.1rem 1rem; }
.sim-actions { margin: 1.4rem 0 2rem; }

@media (max-width: 900px) {
  .ae-chiffres { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .ae-revision { grid-template-columns: auto minmax(0, 1fr); padding: .9rem 1rem; }
  .ae-revision__actions { grid-column: 1 / -1; justify-items: stretch; text-align: center; }
  .ae-revision__bouton { width: 100%; }
  .ae-cartes, .sim-grille { grid-template-columns: minmax(0, 1fr); }
  .ae-chiffre { padding: .75rem .85rem .7rem; }
  .ae-chiffre__valeur { font-size: 1.6rem; }
  .examen__barre { top: calc(var(--entete-h, 56px) + 40px); gap: .35rem .7rem; padding: .45rem .55rem .45rem .7rem; }
  .examen__titre span:last-child { display: none; }
  .examen__chrono { font-size: 1.25rem; }
  .examen__compte span { display: none; }
  .examen__remettre { padding: 0 .8rem; font-size: .85rem; }
  .examen__piste ol { flex-wrap: nowrap; overflow-x: auto; padding-bottom: .3rem; scrollbar-width: thin; }
  .examen__case { flex: none; }
  .sim-note { grid-template-columns: minmax(0, 1fr); padding: 1rem 1.1rem; }
  .sim-q > summary .etiquette { display: none; }
}
.examen__boite .boite__aide { margin: 0; padding: 0; }

/* =====================================================================================================
   Ma révision du jour, 2.53 (25/10 — retours de Matthias) : le planning en bulles qui se cochent, le choix
   Questionnaire / Jeux, « X cours inclus ▾ », la prochaine séance sans nom de cours, les cours des réglages
   rangés par quadrimestre (repliables), les bulles des programmes ; les bulles des jours s'enregistrent d'un
   geste partout (assets/js/jours.js : html.jours-instant cache les boutons « Enregistrer »).
   ===================================================================================================== */
html.jours-instant [data-jours-bouton] { display: none; }
.jours-etat { font-size: .78rem; font-weight: 700; color: var(--encre-douce); min-height: 1em; }
.jours-etat.est-ok, .rj-planning__etat.est-ok { color: var(--jauge-juste); }
.jours-etat.est-erreur, .rj-planning__etat.est-erreur { color: var(--jauge-fausse); }

.rj--repos { border-top-color: var(--trait); }
.rj--repos .anneau--rj .anneau__plein { stroke: var(--trait); }

/* ---- « X cours inclus ▾ » et la prochaine séance */
.rj__meta { display: flex; flex-wrap: wrap; align-items: center; gap: .45rem .9rem; margin: .6rem 0 0; }
.rj-inclus > .rj-inclus__bouton {
  display: inline-flex; align-items: center; gap: .35rem; padding: .32rem .7rem; border: 1px solid var(--trait); border-radius: 99px;
  background: var(--papier); font: 700 .8rem var(--titre); color: var(--encre); cursor: pointer;
}
.rj-inclus > .rj-inclus__bouton:hover { border-color: var(--cyan); }
.rj-inclus__chevron { transition: transform .2s ease; color: var(--encre-douce); }
.rj-inclus[open] .rj-inclus__chevron { transform: rotate(180deg); }
.rj-inclus > .menu-suivi__liste { left: 0; right: auto; min-width: 16rem; }
.rj-inclus__liste ul { list-style: none; margin: 0; padding: 0 .1rem; display: grid; gap: .1rem; }
.rj-inclus__ligne { display: flex; align-items: center; justify-content: space-between; gap: .8rem; padding: .4rem .5rem; border-radius: 8px; }
.rj-inclus__ligne:hover { background: var(--papier); }
.rj-inclus__n { font-size: .78rem; color: var(--encre-douce); white-space: nowrap; }
.rj-inclus__regler { width: 100%; margin-top: .25rem; border-top: 1px solid var(--trait); border-radius: 0 0 8px 8px; }
.rj__seance { display: inline-flex; align-items: center; gap: .3rem; font-size: .84rem; color: var(--encre-douce); }
.rj__seance .icone { flex: none; color: var(--lien); }

/* ---- les cours des réglages, par quadrimestre (repliables) */
.rj-quadris { display: grid; gap: .45rem; }
.rj-quadri { border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); }
.rj-quadri > summary { list-style: none; display: flex; align-items: center; gap: .55rem; padding: .55rem .75rem; cursor: pointer; border-radius: 12px; }
.rj-quadri > summary::-webkit-details-marker { display: none; }
.rj-quadri > summary:hover { background: var(--papier); }
.rj-quadri__code { display: inline-grid; place-items: center; min-width: 2rem; height: 1.5rem; padding: 0 .35rem; border-radius: 6px; background: var(--cyan-pale); color: var(--cyan-fonce); font: 800 .72rem var(--titre); }
.rj-quadri__nom { font: 700 .9rem var(--titre); }
.rj-quadri__compte { margin-left: auto; font-size: .78rem; color: var(--encre-douce); white-space: nowrap; }
.rj-quadri__chevron { transition: transform .2s ease; color: var(--encre-douce); }
.rj-quadri[open] .rj-quadri__chevron { transform: rotate(180deg); }
.rj-quadri .rj-reglages__cours { max-height: none; overflow: visible; padding: .2rem .75rem .7rem; }
.rj-fenetre .rj-reglages { max-height: min(78vh, 46rem); overflow-y: auto; }

/* ---- l'en-tête du déroulé : la forme */
.rj-avancement__forme { display: inline-flex; align-items: center; gap: .3rem; font: 700 .8rem var(--titre); color: var(--lien); text-decoration: none; white-space: nowrap; }
a.rj-avancement__forme:hover { text-decoration: underline; }
span.rj-avancement__forme { color: var(--encre-douce); }

/* ---- les bulles d'un programme (révision libre) se cochent */
.programme__jours { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .6rem; margin: 0; }
.programme__jours-liste { display: flex; flex-wrap: wrap; gap: .25rem; margin: 0; padding: 0; border: 0; min-width: 0; }
.programme__jour { position: relative; display: inline-grid; font: 700 .7rem var(--titre); padding: 0; background: none; cursor: pointer; }
.programme__jour input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.programme__jour span { display: inline-grid; place-items: center; min-width: 2.3rem; padding: .28rem .4rem; border-radius: 7px; border: 1px dashed color-mix(in srgb, var(--encre-douce) 45%, transparent); color: var(--encre-douce); }
.programme__jour:hover span { border-color: var(--cyan); color: var(--encre); }
.programme__jour input:checked + span { background: var(--cyan-fonce); border: 1px solid var(--cyan-fonce); color: #fff; }
.programme__jour input:focus-visible + span { outline: 3px solid var(--ambre); outline-offset: 1px; }


/* ---- Valider en disant sa confiance, 2.53 (« ils ne sont pas beaux », Matthias) : UNE barre à trois cases, la
   confiance en barres de réseau (une, deux, trois) qui se remplissent ; la dernière case à la couleur du cours. */
.valider-confiance__titre { font-size: .82rem; letter-spacing: .01em; }
.valider-confiance__boutons {
  gap: 0; max-width: 38rem; padding: 4px; border-radius: 16px; background: var(--papier);
  border: 1px solid var(--teinte-trait, var(--trait)); box-shadow: inset 0 1px 2px rgba(16, 36, 58, .05);
}
.valider-confiance__bouton,
.valider-confiance__bouton--devine,
.valider-confiance__bouton--sur {
  min-height: 3.4rem; padding: .55rem .8rem .55rem .7rem; gap: .7rem; justify-content: flex-start; border: 0; border-radius: 12px;
  background: transparent; color: var(--encre); font: 700 .95rem var(--titre); text-align: left;
  transition: background-color .15s ease, box-shadow .15s ease, transform .08s ease, color .15s ease;
}
.valider-confiance__bouton + .valider-confiance__bouton { box-shadow: -1px 0 0 0 var(--trait); }
.valider-confiance__bouton:hover { background: var(--blanc); box-shadow: 0 1px 3px rgba(16, 36, 58, .12), 0 0 0 1px var(--teinte-trait, var(--trait)); }
.valider-confiance__bouton:hover + .valider-confiance__bouton { box-shadow: none; }
.valider-confiance__bouton:active { transform: scale(.985); }
.valider-confiance__bouton--sur { background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); box-shadow: 0 2px 8px color-mix(in srgb, var(--teinte, var(--cyan)) 35%, transparent) !important; }
.valider-confiance__bouton--sur:hover { background: color-mix(in srgb, var(--teinte, var(--cyan)) 88%, #000); color: var(--teinte-texte, #fff); }
.valider-confiance__bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 1px; z-index: 1; }
.vc-texte { display: grid; gap: .05rem; min-width: 0; }
.vc-nom { line-height: 1.15; }
.vc-aide { font: 500 .72rem/1.25 var(--texte); color: var(--encre-douce); }
.valider-confiance__bouton--sur .vc-aide { color: inherit; opacity: .85; }
.vc-barres { flex: none; display: inline-flex; align-items: flex-end; gap: 3px; height: 18px; }
.vc-barres i { display: block; width: 5px; border-radius: 2px; background: color-mix(in srgb, var(--teinte, var(--cyan)) 22%, transparent); }
.vc-barres i:nth-child(1) { height: 7px; }
.vc-barres i:nth-child(2) { height: 12px; }
.vc-barres i:nth-child(3) { height: 18px; }
.vc-barres--1 i:nth-child(-n+1), .vc-barres--2 i:nth-child(-n+2), .vc-barres--3 i:nth-child(-n+3) { background: var(--teinte, var(--cyan)); }
.valider-confiance__bouton--sur .vc-barres i { background: currentColor; }
.valider-confiance__bouton kbd { top: .3rem; right: .4rem; background: transparent; color: var(--encre-douce); opacity: .7; }
.valider-confiance__bouton--sur kbd { background: transparent; color: inherit; }
@media (max-width: 560px) {
  .valider-confiance__bouton, .valider-confiance__bouton--devine, .valider-confiance__bouton--sur {
    flex-direction: column; justify-content: center; align-items: center; text-align: center; gap: .3rem; min-height: 4rem; padding: .5rem .3rem; font-size: .88rem;
  }
  .vc-aide { display: none; }
}

/* ---- QRM : de vraies cases à cocher (2.53, demande de Matthias) */
.reponses__plusieurs {
  display: inline-flex; align-items: center; gap: .35rem; margin: 0 0 .15rem; padding: .22rem .6rem .22rem .45rem; border-radius: 99px;
  background: var(--teinte-pale, var(--cyan-pale)); color: color-mix(in srgb, var(--teinte, var(--cyan)) 65%, var(--encre)); font: 700 .75rem var(--titre); float: none;
}
.reponses__plusieurs .icone { width: .8rem; height: .8rem; padding: 1px; border: 1.5px solid currentColor; border-radius: 3px; stroke-width: 3; box-sizing: content-box; }
.reponses--multiple .reponse { align-items: center; }
.reponse__case {
  flex: none; width: 1.35rem; height: 1.35rem; display: grid; place-items: center; box-sizing: border-box;
  border: 2px solid color-mix(in srgb, var(--encre-douce) 60%, transparent); border-radius: 5px; background: var(--blanc); color: transparent;
  transition: background-color .12s ease, border-color .12s ease;
}
.reponse__case .icone { width: .9rem; height: .9rem; stroke-width: 3; }
.reponse:hover .reponse__case { border-color: var(--teinte, var(--cyan)); }
.reponse:has(input:checked) .reponse__case { background: var(--teinte, var(--cyan)); border-color: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.reponses--multiple .reponse__lettre { display: inline-block; width: auto; min-width: 1.1rem; height: auto; border: 0; background: none; font-size: .8rem; color: var(--encre-douce); }
.reponses--multiple .reponse:has(input:checked) .reponse__lettre { background: none; color: var(--teinte-encre, var(--encre)); }
.reponses--multiple .reponse__lettre::after { content: "."; }
.reponses--multiple .reponse__texte { padding-top: 0; }

/* =====================================================================================================
   Module d'auto-évaluation, 2.53 (25/10 — demande de Matthias) : trois tuiles sur une ligne — S'entraîner,
   Simuler un examen, Ajouter — à la couleur du cours, claires au repos, plus soutenues (sans être la couleur
   foncée du cours) une fois choisies ; leur contenu s'ouvre juste en dessous (assets/js/autoeval.js). Le
   bandeau « Tu veux apprendre ? », les points négatifs de l'examen simulé.
   ===================================================================================================== */
.ae-revision__titre { display: block; }
.ae-revision__fleche { display: inline-grid; place-items: center; width: 1.6rem; height: 1.6rem; margin-left: .35rem; vertical-align: -.35rem; border-radius: 50%;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); }
.ae-revision__fleche .icone { width: 1rem; height: 1rem; }
.ae-revision__bouton .icone--petite { margin-left: .1rem; }

.ae-tuiles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .9rem; margin: 0 0 .2rem; }
.ae-tuile {
  position: relative; display: flex; align-items: center; gap: .85rem; min-width: 0; min-height: 5.4rem; padding: .95rem 1rem;
  border-radius: 16px; text-decoration: none; color: var(--encre);
  background: color-mix(in srgb, var(--teinte, var(--cyan)) 11%, var(--blanc));
  border: 1.5px solid color-mix(in srgb, var(--teinte, var(--cyan)) 28%, var(--blanc));
  transition: background-color .18s ease, border-color .18s ease, transform .15s ease, box-shadow .18s ease;
}
.ae-tuile:hover { color: var(--encre); transform: translateY(-2px); background: color-mix(in srgb, var(--teinte, var(--cyan)) 17%, var(--blanc)); box-shadow: 0 10px 24px rgba(16, 36, 58, .1); }
.ae-tuile:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.ae-tuile__icone {
  flex: none; display: grid; place-items: center; width: 3rem; height: 3rem; border-radius: 14px;
  background: var(--blanc); border: 1px solid color-mix(in srgb, var(--teinte, var(--cyan)) 30%, var(--blanc));
  color: color-mix(in srgb, var(--teinte, var(--cyan)) 75%, var(--encre));
}
.ae-tuile__icone .icone { width: 1.45rem; height: 1.45rem; }
.ae-tuile__textes { flex: 1; min-width: 0; display: grid; gap: .15rem; }
.ae-tuile__nom { font: 700 1.05rem/1.2 var(--titre); }
.ae-tuile__sous { font-size: .8rem; line-height: 1.35; color: var(--encre-douce); }
.ae-tuile__chevron { flex: none; color: var(--encre-douce); transition: transform .2s ease; }
.ae-tuile__badge {
  position: absolute; top: -.55rem; right: .8rem; padding: .12rem .55rem; border-radius: 99px;
  background: var(--teinte, var(--cyan)); color: var(--teinte-texte, #fff); font: 700 .66rem var(--titre); letter-spacing: .03em;
}
/* Choisie : plus soutenue — la couleur du cours mêlée de blanc, pas la couleur pleine. */
.ae-tuile.est-ouverte, .ae-tuile.est-ouverte:hover {
  background: color-mix(in srgb, var(--teinte, var(--cyan)) 34%, var(--blanc));
  border-color: color-mix(in srgb, var(--teinte, var(--cyan)) 62%, var(--blanc));
  box-shadow: 0 8px 20px color-mix(in srgb, var(--teinte, var(--cyan)) 22%, transparent);
}
.ae-tuile.est-ouverte .ae-tuile__icone { border-color: color-mix(in srgb, var(--teinte, var(--cyan)) 55%, var(--blanc)); }
.ae-tuile.est-ouverte .ae-tuile__sous { color: var(--encre); opacity: .8; }
.ae-tuile.est-ouverte .ae-tuile__chevron { transform: rotate(180deg); color: var(--encre); }
.ae-tuile.est-ouverte::after {
  content: ""; position: absolute; left: 50%; bottom: -11px; width: 20px; height: 20px; margin-left: -10px; transform: rotate(45deg);
  background: color-mix(in srgb, var(--teinte, var(--cyan)) 34%, var(--blanc));
  border-right: 1.5px solid color-mix(in srgb, var(--teinte, var(--cyan)) 62%, var(--blanc));
  border-bottom: 1.5px solid color-mix(in srgb, var(--teinte, var(--cyan)) 62%, var(--blanc)); border-radius: 0 0 4px 0;
}
.ae-tuile.est-verrouillee { cursor: not-allowed; opacity: .6; background: var(--papier); border-color: var(--trait); }
.ae-tuile.est-verrouillee .ae-tuile__icone { color: var(--encre-douce); border-color: var(--trait); }

.ae-tiroir { margin: 0 0 1.1rem; }
.ae-panneau {
  display: grid; gap: .8rem; margin-top: 1rem; padding: 1.1rem 1.2rem 1.2rem; border-radius: 16px; background: var(--blanc);
  border: 1.5px solid color-mix(in srgb, var(--teinte, var(--cyan)) 45%, var(--blanc)); box-shadow: var(--ombre-drive);
  animation: ae-ouvre .22s ease;
}
.ae-panneau[hidden] { display: none; }
@keyframes ae-ouvre { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .ae-panneau { animation: none; } .ae-tuile, .ae-tuile:hover { transform: none; transition: none; } }
.ae-panneau__texte { display: flex; align-items: center; flex-wrap: wrap; gap: .2rem; margin: 0; color: var(--encre-douce); font-size: .9rem; }
.ae-panneau .lanceur { display: grid; gap: .9rem; }
.ae-panneau .lanceur .actions-ligne, .ae-panneau .lancer__aide { margin: 0; }
.ae-panneau__pied { margin: 0; }
.ae-ajouts { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .6rem; }
.ae-ajout {
  display: flex; align-items: center; gap: .7rem; height: 100%; box-sizing: border-box; padding: .8rem .9rem; border-radius: 12px; text-decoration: none; color: var(--encre);
  border: 1px solid var(--trait); background: var(--blanc); transition: border-color .15s ease, background-color .15s ease;
}
.ae-ajout:hover { color: var(--encre); border-color: color-mix(in srgb, var(--teinte, var(--cyan)) 60%, var(--blanc)); background: color-mix(in srgb, var(--teinte, var(--cyan)) 7%, var(--blanc)); }
.ae-ajout__icone { flex: none; display: grid; place-items: center; width: 2.4rem; height: 2.4rem; border-radius: 11px; background: color-mix(in srgb, var(--teinte, var(--cyan)) 13%, var(--blanc)); color: color-mix(in srgb, var(--teinte, var(--cyan)) 75%, var(--encre)); }
.ae-ajout__icone .icone { width: 1.2rem; height: 1.2rem; }
.ae-ajout > span:last-child { display: grid; gap: .1rem; min-width: 0; }
.ae-ajout strong { font: 700 .92rem var(--titre); }
.ae-ajout small { font-size: .78rem; color: var(--encre-douce); }
.vide--compact { padding: 1.2rem 1rem; margin-bottom: 1rem; }
.vide--compact .vide__icone { width: 2.2rem; height: 2.2rem; }

/* Points négatifs de l'examen simulé */
.ae-simuler__pn { border: 0; margin: 0; padding: 0; min-width: 0; }
.ae-simuler__pn legend { display: flex; align-items: center; gap: .2rem; margin: 0 0 .45rem; padding: 0; font-size: .88rem; font-weight: 700; }
.ae-simuler__pn legend .info__bulle { font-weight: 400; }
.examen__pn { margin: 0; font: 700 .82rem var(--titre); color: var(--faux, #c0392b); white-space: nowrap; }
.examen__pn span { font-weight: 400; color: var(--encre-douce); }
.sim-note__points { margin: 0 0 .15rem; font-size: .95rem; color: var(--encre); }
.sim-note__points strong { font-size: 1.1rem; font-variant-numeric: tabular-nums; }
.sim-q__points { flex: none; min-width: 2.8rem; padding: .1rem .4rem; border-radius: 6px; background: var(--papier); font: 700 .78rem var(--titre); text-align: center; font-variant-numeric: tabular-nums; color: var(--encre); }
.sim-q__points.est-negatif { color: var(--faux, #c0392b); }
.sim-q--p .sim-q__etat { background: color-mix(in srgb, var(--ambre) 22%, var(--blanc)); color: color-mix(in srgb, var(--ambre) 70%, var(--encre)); }

@media (max-width: 760px) {
  .ae-tuiles { gap: .5rem; }
  .ae-tuile { flex-direction: column; justify-content: center; text-align: center; gap: .45rem; min-height: 6.2rem; padding: .7rem .4rem; }
  .ae-tuile__icone { width: 2.5rem; height: 2.5rem; border-radius: 12px; }
  .ae-tuile__nom { font-size: clamp(.78rem, 3.4vw, .95rem); }
  .ae-tuile__sous, .ae-tuile__chevron { display: none; }
  .ae-tuile__badge { right: 50%; transform: translateX(50%); top: -.6rem; white-space: nowrap; }
  .ae-ajouts { grid-template-columns: minmax(0, 1fr); }
  .ae-panneau { padding: .95rem 1rem 1rem; }
}

/* ---- chapitres transversaux (numéro 0) et cours terminé (2.53) */
.etape-carte__transversal { display: inline-block; margin-left: .35rem; padding: .05rem .45rem; border-radius: 99px; background: var(--teinte-pale, var(--cyan-pale)); color: color-mix(in srgb, var(--teinte, var(--cyan)) 65%, var(--encre)); font: 700 .66rem var(--titre); letter-spacing: .02em; text-transform: none; vertical-align: .05rem; }
.mr-avancement--termine { background: color-mix(in srgb, var(--jauge-juste) 10%, var(--blanc)); border-color: color-mix(in srgb, var(--jauge-juste) 35%, var(--trait)); }
.mr-avancement--termine > .icone { color: var(--jauge-juste); }

/* ---- 2.53 : les notifications d'un appareil « À vérifier » (inscrit chez le service push, mais aucune
   notification n'y est arrivée — le faux « Activé » de Safari sur Mac). Orange, jamais vert. */
.bande__bouton--attention, .bande__bouton--attention:hover { border-color: var(--sans-trait); background: var(--sans-fond); color: var(--sans); }
.bande__etat.bande__bouton--attention .bande__off { display: none; }
.bande__etat.bande__bouton--attention .bande__on { display: block; }
.push__etat.est-attention { background: var(--sans-fond); color: var(--sans); border-color: var(--sans-trait); }
.push__aide { margin: .6rem 0 0; }
.push__aide h3 { margin: 0 0 .3rem; font-size: 1rem; }
.push__aide ol { margin: .3rem 0 .5rem; padding-left: 1.2rem; display: grid; gap: .25rem; }
.push__aide p { margin: 0; font-size: .9rem; }
.push__aide[hidden] { display: none !important; }
.appareil__texte .appareil__attention { color: var(--sans); font-weight: 600; }
/* Le tutoriel (démonstration inerte) : pas de bouton « Enregistrer mes jours » — sur la vraie carte, les bulles
   s'enregistrent d'un geste et ce bouton n'existe que sans JavaScript. */
.tuto__demo .rj-planning__envoi { display: none; }
.rappels-rj { margin: .2rem 0 1rem; }
.rappels-rj .rj-planning { border-top: 0; padding-top: 0; margin-top: 0; }

/* =====================================================================================================
   Ma révision du jour, 2.54 (26/10 — la maquette retenue avec Matthias sur le canevas) :
   - la carte : réglages en haut à droite ; « Prochaine séance » et le bouton dessous ; le planning en deux
     lignes, « Je révise le » (pastilles qui se cochent) et « Cette semaine » (barre fine en sept zones,
     aujourd'hui entouré ici seulement) ;
   - le bouton ouvre la fenêtre Questionnaires / Jeux (deux tuiles) ; la session finie, « Ajouter 10 ▾ » ;
   - le compagnon (includes/compagnons.php) passe la tête au-dessus de la carte : son corps DERRIÈRE la carte
     (.rj-compagnon--corps, un bouton qui ouvre « Mes compagnons »), ses pattes et sa bulle DEVANT.
   ===================================================================================================== */
:root {
  --rj-rate: #f2b8c9; --rj-rate-encre: #a80039; --rj-libre: #dde5ec; --rj-afaire: #fbe3b0; --rj-avenir: #c3cfd9; --rj-pastille: #c6d3de;
  --cp-prairie: #5f9e3f; --cp-prairie-pale: #e7f3dd; --cp-prairie-sol: #8cc56b; --cp-prairie-encre: #2f5a1c;
  --cp-foret: #2f6b45; --cp-foret-pale: #dcebe0; --cp-foret-sol: #4f8a5f; --cp-foret-encre: #1d4a2e;
  --cp-riviere: #1f7fc4; --cp-riviere-pale: #dcedf8; --cp-riviere-sol: #5aa9dc; --cp-riviere-encre: #124f7d;
  --cp-banquise: #4f86a8; --cp-banquise-pale: #eaf3f9; --cp-banquise-sol: #bcd9ea; --cp-banquise-encre: #2c5671;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --rj-rate: #5b2638; --rj-rate-encre: #ffb3c8; --rj-libre: #263443; --rj-afaire: #4d3a10; --rj-avenir: #3c4d5e; --rj-pastille: #3c4d5e;
    --cp-prairie-encre: #a9d98c; --cp-foret-encre: #9fd1ae; --cp-riviere-encre: #8fc8ee; --cp-banquise-encre: #b7d6ea;
  }
}
:root[data-theme="dark"] {
  --rj-rate: #5b2638; --rj-rate-encre: #ffb3c8; --rj-libre: #263443; --rj-afaire: #4d3a10; --rj-avenir: #3c4d5e; --rj-pastille: #3c4d5e;
  --cp-prairie-encre: #a9d98c; --cp-foret-encre: #9fd1ae; --cp-riviere-encre: #8fc8ee; --cp-banquise-encre: #b7d6ea;
}

/* ---- la place du compagnon, au-dessus des deux cartes. Sous le bandeau « Mes révisions » de Mon drive
   (.rj-deux--bandeau), sur ordinateur, il passe devant le bandeau (2.54.1, demande de Matthias) ; sur téléphone, la
   place est gardée (les boutons du bandeau, le titre). Ailleurs (Mes révisions), toujours la place. */
.rj-deux { padding-top: 66px; }
.rj-deux--bandeau { padding-top: 16px; }
@media (max-width: 760px) { .rj-deux--bandeau { padding-top: 66px; } }
/* z-index 4 : la carte (ses menus, ses bulles d'aide) passe devant les tuiles de la suite de la page (relecture). */
.rj-carte { position: relative; z-index: 4; display: grid; grid-template-columns: minmax(0, 1fr); min-width: 0; }
.rj-carte > .rj { position: relative; z-index: 1; grid-template-columns: minmax(0, 1fr); }
.rj-compagnon { position: absolute; right: 88px; top: -74px; width: 120px; height: 100px; margin: 0; padding: 0; border: 0; background: none; }
.rj-compagnon--corps { z-index: 0; cursor: pointer; border-radius: 14px 14px 0 0; pointer-events: none; }
.rj-compagnon--corps .ani__corps { pointer-events: visiblePainted; }   /* seul l'animal se clique, pas le vide autour */
/* Un menu ou une bulle d'aide ouverts dans la carte passent devant les pattes du compagnon. */
.rj-carte:has(> .rj details[open], > .rj [aria-expanded="true"]) > .rj { z-index: 3; }
.rj-compagnon--corps:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.rj-compagnon--pattes { z-index: 2; pointer-events: none; }
.ani { display: block; overflow: visible; }
/* Le relief (2.54.1, demande de Matthias) : une ombre portée douce autour de l'animal, et une ombre de contact sur le
   bord de la carte, sous ses pattes — elle rétrécit quand il saute. */
.rj-compagnon .ani { filter: drop-shadow(0 2px 2px rgba(16, 36, 58, .3)) drop-shadow(0 9px 14px rgba(16, 36, 58, .26)); }
.rj-compagnon--pattes::before {
  content: ""; position: absolute; left: 16px; top: 77px; width: 88px; height: 16px; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(16, 36, 58, .34), rgba(16, 36, 58, 0));
}
@keyframes pk-ombre { 0%, 100% { transform: scale(1); opacity: 1; } 38%, 58% { transform: scale(.6); opacity: .4; } }
.rj-compagnon--pattes.est-gagne::before { animation: pk-ombre 1.2s ease-in-out infinite; }
.rj-compagnon--biche.est-gagne::before, .rj-compagnon--polaire.est-gagne::before { animation-duration: 1.3s; }
.rj-compagnon--martin.est-gagne::before { animation-duration: 1.4s; }
.rj-compagnon--blaireau.est-gagne::before { animation: none; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .rj-compagnon .ani { filter: drop-shadow(0 2px 2px rgba(0, 0, 0, .5)) drop-shadow(0 9px 14px rgba(0, 0, 0, .4)); }
  :root:not([data-theme="light"]) .rj-compagnon--pattes::before { background: radial-gradient(closest-side, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0)); }
}
:root[data-theme="dark"] .rj-compagnon .ani { filter: drop-shadow(0 2px 2px rgba(0, 0, 0, .5)) drop-shadow(0 9px 14px rgba(0, 0, 0, .4)); }
:root[data-theme="dark"] .rj-compagnon--pattes::before { background: radial-gradient(closest-side, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0)); }
/* La bulle : une phrase de l'animal (includes/compagnons-phrases.php), à gauche de sa tête. */
.rj-bulle {
  position: absolute; right: calc(100% - 26px); top: 6px; z-index: 1; width: max-content; max-width: 14rem; box-sizing: border-box;
  padding: .42rem .7rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); color: var(--cyan-fonce);
  font: 700 .74rem/1.35 var(--titre); text-align: left; text-wrap: balance; box-shadow: 0 4px 14px rgba(16, 36, 58, .14);
  animation: pk-bulle 3.2s ease-in-out infinite;
}
.rj-bulle::after {
  content: ""; position: absolute; right: -6px; top: calc(50% - 5px); width: 10px; height: 10px; box-sizing: border-box;
  background: var(--blanc); border-top: 1px solid var(--trait); border-right: 1px solid var(--trait); transform: rotate(45deg);
}
.rj-bulle--triste { color: var(--encre-douce); }
.rj-bulle--gagne { color: var(--jauge-juste); border-color: color-mix(in srgb, var(--jauge-juste) 45%, var(--trait)); }
.rj-bulle--gagne::after { border-color: color-mix(in srgb, var(--jauge-juste) 45%, var(--trait)); }
@media (prefers-reduced-motion: reduce) { .rj-bulle, .rj-compagnon--pattes::before { animation: none !important; } }

/* ---- la carte : réglages en haut à droite, le pied (séance + bouton) */
.rj__reglages { align-self: start; }
.rj__pied { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .6rem 1rem; }
.rj__pied .rj__seance { margin: 0; }
.rj-lancer { display: flex; }
.rj__pied .rj-lancer { margin-left: auto; }
.rj-lancer .rj-lancer__secours { display: none; }   /* (forme-bouton : « contents » ailleurs ; div dans le tutoriel) */
.rj-ajouter { position: relative; display: inline-flex; align-items: stretch; min-height: 46px; border-radius: 10px; background: var(--cyan-fonce); }
.rj-ajouter__principal {
  display: inline-flex; align-items: center; gap: .45rem; padding: 0 .9rem 0 1.15rem; border: 0; border-radius: 10px 0 0 10px;
  background: transparent; color: #fff; font: 700 .9rem var(--titre); white-space: nowrap; cursor: pointer;
}
.rj-ajouter__principal .icone { width: 1.1rem; height: 1.1rem; flex: none; }
.rj-ajouter__plus { display: flex; }
.rj-ajouter__fleche {
  display: grid; place-items: center; width: 42px; height: 100%; box-sizing: border-box; border-left: 1px solid rgba(255, 255, 255, .38);
  border-radius: 0 10px 10px 0; color: #fff; cursor: pointer; list-style: none;
}
.rj-ajouter__fleche::-webkit-details-marker { display: none; }
.rj-ajouter__fleche .icone { transition: transform .2s ease; }
.rj-ajouter__plus[open] .rj-ajouter__fleche .icone { transform: rotate(180deg); }
.rj-ajouter__principal:hover, .rj-ajouter__fleche:hover { background: var(--cyan); }
/* Après deux prolongations (bilan) : le bouton se fait discret, comme avant. */
.rj-ajouter--secondaire { background: var(--blanc); box-shadow: inset 0 0 0 1px var(--trait); }
.rj-ajouter--secondaire .rj-ajouter__principal, .rj-ajouter--secondaire .rj-ajouter__fleche { color: var(--encre); }
.rj-ajouter--secondaire .rj-ajouter__fleche { border-left-color: var(--trait); }
.rj-ajouter--secondaire .rj-ajouter__principal:hover, .rj-ajouter--secondaire .rj-ajouter__fleche:hover { background: var(--cyan-pale); }
.rj-ajouter > .rj-ajouter__plus { position: static; }
.rj-ajouter__liste { right: 0; left: auto; min-width: 13.5rem; }
.rj-ajouter__choix {
  display: flex; align-items: center; justify-content: space-between; gap: .9rem; width: 100%; padding: .5rem .65rem; border: 0; border-radius: 8px;
  background: transparent; font: inherit; text-align: left; cursor: pointer;
}
.rj-ajouter__choix:hover { background: var(--papier); }
.rj-ajouter__choix.est-choisi { background: var(--cyan-pale); }
.rj-ajouter__choix:focus-visible { outline: 3px solid var(--ambre); outline-offset: -2px; }
.rj-ajouter__nombre { font: 700 .86rem var(--titre); color: var(--encre); }
.rj-ajouter__duree { font-size: .78rem; color: var(--encre-douce); white-space: nowrap; }
/* Sans popover (iOS < 17, Firefox < 125) : un simple bouton lance dans la dernière forme choisie. */
@supports not selector(:popover-open) {
  .rj-lancer__ouvrir, .rj-ajouter { display: none; }
  .rj-lancer .rj-lancer__secours { display: contents; }
  .rj-compagnon--corps { cursor: default; }
}

/* ---- la fenêtre Questionnaires / Jeux */
.rj-choix[popover] { width: min(38rem, calc(100% - 2rem)); }
.rj-choix form { margin: 0; }
.rj-choix .fenetre__titre { font-size: 1.15rem; }
.rj-choix__sous { margin: .25rem 0 0; font-size: .88rem; color: var(--encre-douce); }
.rj-choix__tuiles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; padding: 1rem 1.2rem 1.2rem; }
.rj-tuile {
  position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: .6rem; padding: 1.1rem; min-width: 0;
  border: 2px solid var(--trait); border-radius: 14px; background: var(--blanc); color: var(--encre); font: inherit; text-align: left; cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}
.rj-tuile:hover { border-color: var(--cyan); box-shadow: 0 6px 18px rgba(0, 119, 168, .16); transform: translateY(-2px); }
.rj-tuile:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.rj-tuile.est-dernier { border-color: var(--cyan-fonce); box-shadow: 0 2px 10px rgba(0, 119, 168, .12); }
.rj-tuile__badge { position: absolute; top: .7rem; right: .7rem; padding: .15rem .5rem; border-radius: 99px; background: var(--cyan-pale); color: var(--cyan-fonce); font: 700 .66rem var(--titre); }
.rj-tuile__icone { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 12px; background: var(--cyan-pale); color: var(--cyan-fonce); }
.rj-tuile--jeux .rj-tuile__icone { background: var(--ambre-pale); color: var(--puce-texte); }
.rj-tuile__icone .icone { width: 1.5rem; height: 1.5rem; }
.rj-tuile__nom { font: 700 1.05rem var(--titre); }
.rj-tuile__texte { font-size: .84rem; line-height: 1.45; color: var(--encre-douce); }

/* ---- le planning : « Je révise le » / « Cette semaine » */
.rj-planning { display: grid; gap: .8rem; margin: 0; padding-top: 1rem; border-top: 1px dashed var(--trait); }
.rj-planning__tete { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .3rem 1rem; }
.rj-planning__titre { display: inline-flex; align-items: center; gap: .25rem; margin: 0; font: 700 .9rem var(--titre); color: var(--encre); }
.rj-planning__texte { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .7rem; margin: 0; font-size: .82rem; color: var(--encre-douce); }
.rj-planning__etat { font-weight: 700; }
.rj-ligne { display: grid; grid-template-columns: 7.2rem minmax(0, 1fr); align-items: center; gap: .4rem .9rem; min-width: 0; }
.rj-ligne--semaine { row-gap: .3rem; }
.rj-ligne__nom { margin: 0; font: 700 .8rem/1.2 var(--titre); color: var(--encre); }
/* « Cette semaine : » centré sur la barre, les légendes (« aujourd'hui ») dessous (2.54.1). */
.rj-ligne--semaine .rj-ligne__nom { grid-column: 1; grid-row: 1; }
.rj-ligne--semaine .rj-zones { grid-column: 2; grid-row: 1; }
.rj-ligne--semaine .rj-zones-legendes { grid-column: 2; grid-row: 2; }
.rj-ligne__jours { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .4rem; }
.rj-jour { position: relative; display: grid; min-width: 0; cursor: pointer; }
.rj-jour input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.rj-jour__pastille {
  display: inline-flex; align-items: center; justify-content: center; gap: .2rem; height: 38px; box-sizing: border-box; border-radius: 10px;
  border: 1.5px solid var(--rj-pastille); background: var(--blanc); color: var(--encre-douce); font: 700 .8rem var(--titre); user-select: none;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease, transform .1s ease;
}
.rj-jour__coche { display: none; width: .72rem; height: .72rem; stroke-width: 3.4; flex: none; }
.rj-jour:hover .rj-jour__pastille { border-color: var(--cyan); color: var(--encre); }
.rj-jour:active .rj-jour__pastille { transform: scale(.95); }
.rj-jour input:checked + .rj-jour__pastille { background: var(--cyan-fonce); border-color: var(--cyan-fonce); color: #fff; }
.rj-jour input:checked + .rj-jour__pastille .rj-jour__coche { display: inline-block; }
.rj-jour input:focus-visible + .rj-jour__pastille { outline: 3px solid var(--ambre); outline-offset: 2px; }
.rj-semaine-barre { display: grid; gap: .3rem; min-width: 0; }
.rj-zones, .rj-zones-legendes { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .4rem; margin: 0; padding: 0; list-style: none; }
.rj-zone { display: grid; place-items: center; height: 16px; box-sizing: border-box; border-radius: 4px; background: var(--rj-libre); }
.rj-zone .icone { display: none; width: .7rem; height: .7rem; stroke-width: 3.6; }
.rj-zone--fait { background: var(--jauge-juste); color: #fff; }
.rj-zone--fait .rj-zone__coche { display: block; }
.rj-zone--rate { background: var(--rj-rate); color: var(--rj-rate-encre); }
.rj-zone--rate .rj-zone__croix { display: block; width: .6rem; height: .6rem; }
.rj-zone--libre { background: var(--rj-libre); }
.rj-zone--afaire { background: var(--rj-afaire); }
.rj-zone--avenir { background: transparent; border: 1.5px dashed var(--rj-avenir); }
.rj-zone.est-aujourdhui { box-shadow: 0 0 0 2px var(--blanc), 0 0 0 4px var(--ambre); }
.rj-zones-legendes li { min-width: 0; text-align: center; font: 700 .66rem var(--titre); color: var(--puce-texte); white-space: nowrap; }
.rj-legende { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .9rem; margin: 0; font-size: .74rem; color: var(--encre-douce); }
.rj-legende__item { display: inline-flex; align-items: center; gap: .35rem; }
.rj-legende__item::before { content: ""; width: 14px; height: 10px; box-sizing: border-box; border-radius: 3px; }
.rj-legende__item--fait::before { background: var(--jauge-juste); }
.rj-legende__item--rate::before { background: var(--rj-rate); }
.rj-legende__item--afaire::before { background: var(--rj-afaire); }
.rj-legende__item--libre::before { background: var(--rj-libre); }
.rj-legende__item--avenir::before { border: 1.5px dashed var(--rj-avenir); }
.rj-planning--centre { width: 100%; max-width: 34rem; margin: .4rem auto 1rem; padding-top: 0; border-top: 0; text-align: left; }

/* ---- « Mes compagnons » (la fenêtre) et les vignettes de l'album */
.cp-fenetre[popover] { width: min(40rem, calc(100% - 2rem)); }
.cp-fenetre .fenetre__titre .icone { color: var(--ambre); }
.rj-inclus > .rj-inclus__bouton { white-space: nowrap; }
.cp { display: grid; gap: 1.1rem; padding-top: .9rem; }
.cp-fenetre .fenetre__corps p, .cp-fenetre .fenetre__corps li { margin: 0; }   /* (.fenetre__corps p/ul/li l'emportaient) */
.cp-fenetre .fenetre__corps ul { margin: 0; padding: 0; }
/* Le tutoriel : la carte n'y est pas dans .rj-deux — la place du compagnon au-dessus. */
.tuto__demo .rj-carte { margin-top: 70px; }
.cp-vignette {
  --cp-l: 120px; position: relative; display: block; flex: none; width: var(--cp-l); aspect-ratio: 6 / 5; box-sizing: border-box; overflow: hidden;
  border: 1px solid var(--trait); border-radius: 14px; background: var(--cp-fond, var(--papier));
}
.cp-vignette__dessin { position: absolute; left: -1px; top: 9%; z-index: 0; width: 100%; }
.cp-vignette__dessin .ani { width: 100%; height: auto; }
.cp-vignette__dessin--devant { z-index: 2; }
.cp-vignette__sol { position: absolute; left: 0; right: 0; top: 82%; bottom: 0; z-index: 1; background: var(--cp-sol, var(--trait)); }
.cp-vignette--prairie { --cp-fond: var(--cp-prairie-pale); --cp-sol: var(--cp-prairie-sol); }
.cp-vignette--foret { --cp-fond: var(--cp-foret-pale); --cp-sol: var(--cp-foret-sol); }
.cp-vignette--riviere { --cp-fond: var(--cp-riviere-pale); --cp-sol: var(--cp-riviere-sol); }
.cp-vignette--banquise { --cp-fond: var(--cp-banquise-pale); --cp-sol: var(--cp-banquise-sol); }
.cp-vignette--cache { --cp-fond: var(--papier); --cp-sol: var(--trait); }
.cp-vignette--cache .cp-vignette__dessin { filter: brightness(0); opacity: .13; }
.cp-vignette__question { position: absolute; left: 0; right: 0; top: 26%; z-index: 3; text-align: center; font: 700 1.5rem var(--titre); color: var(--encre-douce); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .cp-vignette--cache .cp-vignette__dessin { filter: brightness(0) invert(1); opacity: .16; } }
:root[data-theme="dark"] .cp-vignette--cache .cp-vignette__dessin { filter: brightness(0) invert(1); opacity: .16; }
.cp-jour { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 1rem; align-items: center; padding: .8rem; border-radius: 16px; background: color-mix(in srgb, var(--cp-sol, var(--cyan)) 16%, var(--blanc)); }
.cp-jour--prairie { --cp-sol: var(--cp-prairie-sol); }
.cp-jour--foret { --cp-sol: var(--cp-foret-sol); }
.cp-jour--riviere { --cp-sol: var(--cp-riviere-sol); }
.cp-jour--banquise { --cp-sol: var(--cp-banquise-sol); }
.cp-jour .cp-vignette { background: var(--blanc); }
.cp-jour__sur { margin: 0; font: 700 .7rem var(--titre); letter-spacing: .1em; text-transform: uppercase; color: var(--cyan-fonce); }
.cp-jour__titre { margin: .15rem 0 0; font: 700 1.05rem/1.3 var(--titre); }
.cp-jour__sous { margin: .2rem 0 0; font-size: .84rem; color: var(--encre-douce); }
.cp-fenetre .fenetre__corps .cp-jour__perso { margin: .3rem 0 0; font-size: .88rem; line-height: 1.4; color: var(--encre); }
.cp-barre { display: grid; gap: .45rem; }
.cp-barre__tete { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .2rem .8rem; }
.cp-barre__titre { margin: 0; font: 700 .88rem var(--titre); }
.cp-barre__note { margin: 0; font-size: .8rem; color: var(--encre-douce); }
.cp-barre__svg { display: block; width: 100%; height: auto; }
.cp-barre__fond--1 { fill: var(--cp-prairie-pale); } .cp-barre__plein--1 { fill: var(--cp-prairie); }
.cp-barre__fond--2 { fill: var(--cp-foret-pale); } .cp-barre__plein--2 { fill: var(--cp-foret); }
.cp-barre__fond--3 { fill: var(--cp-riviere-pale); } .cp-barre__plein--3 { fill: var(--cp-riviere); }
.cp-barre__fond--4 { fill: var(--cp-banquise-pale); } .cp-barre__plein--4 { fill: var(--cp-banquise); }
.cp-barre__repere { fill: var(--blanc); stroke: var(--encre); stroke-width: 3; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cp-barre__fond--1 { fill: color-mix(in srgb, var(--cp-prairie) 28%, var(--blanc)); }
  :root:not([data-theme="light"]) .cp-barre__fond--2 { fill: color-mix(in srgb, var(--cp-foret) 28%, var(--blanc)); }
  :root:not([data-theme="light"]) .cp-barre__fond--3 { fill: color-mix(in srgb, var(--cp-riviere) 28%, var(--blanc)); }
  :root:not([data-theme="light"]) .cp-barre__fond--4 { fill: color-mix(in srgb, var(--cp-banquise) 28%, var(--blanc)); }
}
:root[data-theme="dark"] .cp-barre__fond--1 { fill: color-mix(in srgb, var(--cp-prairie) 28%, var(--blanc)); }
:root[data-theme="dark"] .cp-barre__fond--2 { fill: color-mix(in srgb, var(--cp-foret) 28%, var(--blanc)); }
:root[data-theme="dark"] .cp-barre__fond--3 { fill: color-mix(in srgb, var(--cp-riviere) 28%, var(--blanc)); }
:root[data-theme="dark"] .cp-barre__fond--4 { fill: color-mix(in srgb, var(--cp-banquise) 28%, var(--blanc)); }
.cp-barre__paliers { display: flex; gap: 1.1%; }
.cp-barre__palier { min-width: 0; font-size: .72rem; line-height: 1.3; color: var(--encre-douce); }
.cp-barre__palier small { display: block; font-size: .68rem; opacity: .85; }
.cp-barre__palier--1 { flex: 8; } .cp-barre__palier--2 { flex: 6; } .cp-barre__palier--3 { flex: 7; } .cp-barre__palier--4 { flex: 7; }
.cp-album { display: grid; gap: .8rem; }
.cp-album__tete { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; }
.cp-album__titre { margin: 0; font: 700 .92rem var(--titre); }
.cp-album__compte { margin: 0; font: 700 .84rem var(--titre); color: var(--cyan-fonce); }
.cp-album__ligne { display: grid; grid-template-columns: 6.5rem minmax(0, 1fr); gap: .8rem; align-items: start; }
.cp-album__paysage { display: grid; gap: .1rem; margin: 0; padding-top: .4rem; }
.cp-album__paysage b { font: 700 .88rem var(--titre); }
.cp-album__paysage small { font-size: .75rem; color: var(--encre-douce); }
.cp-album__paysage--prairie b { color: var(--cp-prairie-encre); }
.cp-album__paysage--foret b { color: var(--cp-foret-encre); }
.cp-album__paysage--riviere b { color: var(--cp-riviere-encre); }
.cp-album__paysage--banquise b { color: var(--cp-banquise-encre); }
.cp-album__ligne--ferme .cp-album__paysage b { color: var(--encre-douce); }
.cp-album__vignettes { display: grid; grid-template-columns: repeat(3, minmax(0, 120px)); gap: .8rem; margin: 0; padding: 0; list-style: none; }
.cp-album__animal { display: grid; justify-items: center; align-content: start; gap: .2rem; min-width: 0; text-align: center; }
.cp-album .cp-vignette { --cp-l: 100%; }
.cp-album__nom { font: 700 .76rem var(--titre); color: var(--encre); }
.cp-album__sous { font-size: .7rem; color: var(--encre-douce); }
.cp__note { margin: 0; padding-top: .8rem; border-top: 1px solid var(--trait); font-size: .8rem; line-height: 1.5; color: var(--encre-douce); }

@media (max-width: 560px) {
  .rj-deux, .rj-deux--bandeau { padding-top: 62px; }
  .rj-compagnon { right: 64px; }
  .tuto__demo .rj-carte { margin-top: 62px; }
  /* Téléphone : le bouton des réglages dans le coin, le texte prend toute la largeur à côté de l'anneau. */
  .rj__haut { grid-template-columns: auto minmax(0, 1fr); column-gap: .7rem; }
  .rj__reglages { position: absolute; top: .85rem; right: .85rem; width: 34px; height: 34px; }
  .rj__surtitre { padding-right: 2.4rem; }
  .rj__titre { padding-right: 1.6rem; font-size: 1.15rem; }
  .anneau--rj { width: 54px; height: 54px; }
  .rj-ligne { grid-template-columns: minmax(0, 1fr); gap: .35rem; }
  .rj-ligne--semaine .rj-ligne__nom, .rj-ligne--semaine .rj-zones, .rj-ligne--semaine .rj-zones-legendes { grid-column: 1; grid-row: auto; }
  .rj-bulle { max-width: 9.5rem; font-size: .7rem; }
  .rj-ligne__jours, .rj-zones, .rj-zones-legendes { gap: .3rem; }
  .rj-jour__pastille { height: 36px; font-size: .74rem; }
  .rj-jour input:checked + .rj-jour__pastille .rj-jour__coche { display: none; }
  .rj-lancer, .rj-lancer > .rj__go, .rj-ajouter { width: 100%; }
  .rj-ajouter__principal { flex: 1; justify-content: center; }
  .rj-choix__tuiles { grid-template-columns: minmax(0, 1fr); }
  .rj-tuile { padding: .9rem 1rem; }
  .rj-tuile__badge { position: static; order: -1; }
  .cp-album__ligne { grid-template-columns: minmax(0, 1fr); gap: .3rem; }
  .cp-album__vignettes { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; }
  .cp-jour .cp-vignette { --cp-l: 96px; }
}
/* ---- le compagnon : dessins (includes/compagnons-dessins.php) et animations — générés depuis la maquette */
.ani .ani__corps { transform-origin: 60px 92px }
.ani--biche .ani__oreille-d { transform-origin: 78px 36px }
.ani--biche .ani__oreille-g { transform-origin: 42px 36px }
.ani--blaireau .ani__nez { transform-origin: 60px 64px }
.ani--blaireau .ani__oreille-d { transform-origin: 81px 36px }
.ani--blaireau .ani__oreille-g { transform-origin: 39px 36px }
.ani--castor .ani__oreille-d { transform-origin: 84px 37px }
.ani--castor .ani__oreille-g { transform-origin: 36px 37px }
.ani--castor .ani__queue { transform-origin: 88px 76px }
.ani--ecureuil .ani__gland { transform-origin: 60px 74px }
.ani--ecureuil .ani__oreille-d { transform-origin: 74px 32px }
.ani--ecureuil .ani__oreille-g { transform-origin: 46px 32px }
.ani--ecureuil .ani__queue { transform-origin: 80px 74px }
.ani--herisson .ani__oreille-d { transform-origin: 78px 38px }
.ani--herisson .ani__oreille-g { transform-origin: 42px 38px }
.ani--herisson .ani__piquants { transform-origin: 60px 74px }
.ani--lapin .ani__oreille-d { transform-origin: 71px 34px }
.ani--lapin .ani__oreille-g { transform-origin: 49px 34px }
.ani--loutre .ani__galet { transform-origin: 60px 74px }
.ani--loutre .ani__oreille-d { transform-origin: 83px 36px }
.ani--loutre .ani__oreille-g { transform-origin: 37px 36px }
.ani--martin .ani__crete { transform-origin: 60px 30px }
.ani--phoque .ani__balle { transform-origin: 60px 12px }
.ani--polaire .ani__oreille-d { transform-origin: 76px 36px }
.ani--polaire .ani__oreille-g { transform-origin: 44px 36px }
.ani--renard .ani__oreille-d { transform-origin: 76px 38px }
.ani--renard .ani__oreille-g { transform-origin: 44px 38px }
.ani--manchot .ani__patte-d, .ani--martin .ani__patte-d, .ani--phoque .ani__patte-d { transform-origin: 80px 66px }
.ani--manchot .ani__patte-g, .ani--martin .ani__patte-g, .ani--phoque .ani__patte-g { transform-origin: 40px 66px }
.ani .ani__bulle { transform-origin: 10px 15px }
.ani--herisson .ani__patte-d, .ani--lapin .ani__patte-d, .ani--ecureuil .ani__patte-d, .ani--renard .ani__patte-d, .ani--blaireau .ani__patte-d, .ani--loutre .ani__patte-d, .ani--castor .ani__patte-d, .ani--polaire .ani__patte-d { transform-origin: 76px 80px }
.ani--herisson .ani__patte-g, .ani--lapin .ani__patte-g, .ani--ecureuil .ani__patte-g, .ani--renard .ani__patte-g, .ani--blaireau .ani__patte-g, .ani--loutre .ani__patte-g, .ani--castor .ani__patte-g, .ani--polaire .ani__patte-g { transform-origin: 44px 80px }
.ani--biche .ani__patte-d { transform-origin: 74px 80px }
.ani--biche .ani__patte-g { transform-origin: 46px 80px }
.ani .ani__corps, .ani .ani__oreille-g, .ani .ani__oreille-d, .ani .ani__piquants, .ani .ani__patte-g, .ani .ani__patte-d, .ani .ani__galet, .ani .ani__gland, .ani .ani__queue, .ani .ani__nez, .ani .ani__crete, .ani .ani__balle, .ani .ani__bulle, .ani .ani__larme { transform-box: view-box }
.ani .ani__cf, .ani .ani__etoile, .ani .ani__flocon { transform-box: fill-box; transform-origin: center }
@keyframes pk-souffle { 0%, 100% { transform: translateY(3px) } 50% { transform: translateY(7px) } }
@keyframes pk-cache { 0%, 100% { transform: translateY(8px) } 50% { transform: translateY(12px) } }
@keyframes pk-larme { 0%, 20% { transform: translateY(0); opacity: 0 } 30% { opacity: 1 } 80% { transform: translateY(12px); opacity: 1 } 100% { transform: translateY(16px); opacity: 0 } }
@keyframes pk-bulle { 0%, 100% { transform: translateY(0) } 50% { transform: translateY(-3px) } }
@keyframes pk-penche { 0%, 100% { transform: rotate(-5deg) } 50% { transform: rotate(5deg) } }
@keyframes pk-curieux { 0%, 100% { transform: rotate(0) } 30%, 62% { transform: rotate(-9deg) } }
@keyframes pk-salut { 0%, 100% { transform: translateY(0) rotate(0) } 20% { transform: translateY(-16px) rotate(-22deg) } 40% { transform: translateY(-16px) rotate(12deg) } 60% { transform: translateY(-16px) rotate(-22deg) } 80% { transform: translateY(0) rotate(0) } }
@keyframes pk-coucou { 0%, 100% { transform: translateY(4px) } 30%, 70% { transform: translateY(-4px) } }
@keyframes pk-jongle { 0%, 100% { transform: translateY(0) rotate(0) } 50% { transform: translateY(-34px) rotate(200deg) } }
@keyframes pk-hop { 0%, 100% { transform: translateY(0) } 45% { transform: translateY(-8px) } }
@keyframes pk-guette { 0%, 55%, 100% { transform: translateY(0) } 65% { transform: translateY(-5px) } 75% { transform: translateY(0) } 85% { transform: translateY(-5px) } }
@keyframes pk-oreille-g { 0%, 100% { transform: rotate(0) } 50% { transform: rotate(-16deg) } }
@keyframes pk-oreille-d { 0%, 100% { transform: rotate(0) } 50% { transform: rotate(16deg) } }
@keyframes pk-flick-g { 0%, 70%, 100% { transform: rotate(0) } 78% { transform: rotate(16deg) } 88% { transform: rotate(-4deg) } }
@keyframes pk-flick-d { 0%, 70%, 100% { transform: rotate(0) } 78% { transform: rotate(-16deg) } 88% { transform: rotate(4deg) } }
@keyframes pk-grignote { 0%, 100% { transform: translateY(-9px) rotate(-7deg) } 50% { transform: translateY(-11px) rotate(7deg) } }
@keyframes pk-queue { 0%, 100% { transform: rotate(-5deg) } 50% { transform: rotate(8deg) } }
@keyframes pk-creuse { 0%, 100% { transform: translateY(0) rotate(0) } 50% { transform: translateY(-7px) rotate(-12deg) } }
@keyframes pk-renifle { 0%, 50%, 100% { transform: scale(1) } 60% { transform: scale(1.3, 1.15) } 70% { transform: scale(1) } 80% { transform: scale(1.3, 1.15) } }
@keyframes pk-tape { 0%, 100% { transform: translateY(0) } 50% { transform: translateY(-6px) } }
@keyframes pk-claque { 0%, 55%, 100% { transform: rotate(0) } 70% { transform: rotate(-28deg) } 82% { transform: rotate(5deg) } }
@keyframes pk-hoche { 0%, 55%, 100% { transform: translateY(0) } 72% { transform: translateY(3px) } 86% { transform: translateY(-2px) } }
@keyframes pk-picore { 0%, 70%, 100% { transform: rotate(0) } 18% { transform: rotate(-8deg) } 34% { transform: rotate(3deg) } 50% { transform: rotate(-8deg) } }
@keyframes pk-crete { 0%, 100% { transform: scaleY(1) } 30% { transform: scaleY(1.28) } }
@keyframes pk-pousse { 0%, 100% { transform: translateY(0) } 40% { transform: translateY(-3px) } }
@keyframes pk-balle { 0%, 100% { transform: translateY(0) rotate(0) } 50% { transform: translateY(-8px) rotate(120deg) } }
@keyframes pk-lance { 0%, 100% { transform: translateY(0) rotate(0) } 50% { transform: translateY(-30px) rotate(300deg) } }
@keyframes pk-pietine { 0%, 100% { transform: translateY(0) } 50% { transform: translateY(-5px) } }
@keyframes pk-battre-g { from { transform: rotate(8deg) } to { transform: rotate(-26deg) } }
@keyframes pk-battre-d { from { transform: rotate(-8deg) } to { transform: rotate(26deg) } }
@keyframes pk-saut { 0%, 100% { transform: translateY(0) scale(1, 1) } 12% { transform: translateY(2px) scale(1.05, .94) } 38% { transform: translateY(-16px) scale(.97, 1.04) } 58% { transform: translateY(-16px) scale(1, 1) } 80% { transform: translateY(0) scale(1.03, .97) } }
@keyframes pk-bond { 0%, 100% { transform: translateY(0) scale(1, 1) } 15% { transform: translateY(3px) scale(1.06, .92) } 45% { transform: translateY(-24px) scale(.96, 1.06) } 60% { transform: translateY(-24px) scale(1, 1) } 85% { transform: translateY(0) scale(1.04, .96) } }
@keyframes pk-cabriole { 0%, 100% { transform: translateY(0) rotate(0) } 15% { transform: translateY(2px) scale(1.04, .95) } 45% { transform: translateY(-20px) rotate(-8deg) } 62% { transform: translateY(-20px) rotate(6deg) } 85% { transform: translateY(0) rotate(0) } }
@keyframes pk-danse { 0%, 100% { transform: translate(-5px, 0) rotate(-6deg) } 25% { transform: translate(0, -8px) rotate(0) } 50% { transform: translate(5px, 0) rotate(6deg) } 75% { transform: translate(0, -8px) rotate(0) } }
@keyframes pk-envol { 0%, 100% { transform: translateY(0) } 40%, 60% { transform: translateY(-20px) } }
@keyframes pk-envol-g { 0%, 100% { transform: translateY(0) rotate(0) } 10% { transform: translateY(-5px) rotate(60deg) } 20% { transform: translateY(-10px) rotate(12deg) } 30% { transform: translateY(-15px) rotate(60deg) } 40% { transform: translateY(-20px) rotate(12deg) } 50% { transform: translateY(-20px) rotate(60deg) } 60% { transform: translateY(-20px) rotate(12deg) } 70% { transform: translateY(-14px) rotate(60deg) } 80% { transform: translateY(-8px) rotate(12deg) } 90% { transform: translateY(-3px) rotate(40deg) } }
@keyframes pk-envol-d { 0%, 100% { transform: translateY(0) rotate(0) } 10% { transform: translateY(-5px) rotate(-60deg) } 20% { transform: translateY(-10px) rotate(-12deg) } 30% { transform: translateY(-15px) rotate(-60deg) } 40% { transform: translateY(-20px) rotate(-12deg) } 50% { transform: translateY(-20px) rotate(-60deg) } 60% { transform: translateY(-20px) rotate(-12deg) } 70% { transform: translateY(-14px) rotate(-60deg) } 80% { transform: translateY(-8px) rotate(-12deg) } 90% { transform: translateY(-3px) rotate(-40deg) } }
@keyframes pk-plongeon { 0%, 100% { transform: translateY(0) rotate(0) } 15% { transform: translateY(3px) scale(1.05, .93) } 45% { transform: translateY(-22px) rotate(10deg) } 65% { transform: translateY(-10px) rotate(-4deg) } 85% { transform: translateY(0) rotate(0) } }
@keyframes pk-bras { 0%, 100% { transform: translateY(0) rotate(0) } 38%, 58% { transform: translateY(-30px) rotate(-14deg) } }
@keyframes pk-bras-d { 0%, 100% { transform: translateY(0) rotate(0) } 38%, 58% { transform: translateY(-30px) rotate(14deg) } }
@keyframes pk-clap-g { from { transform: translateY(-6px) translateX(0) } to { transform: translateY(-6px) translateX(9px) } }
@keyframes pk-clap-d { from { transform: translateY(-6px) translateX(0) } to { transform: translateY(-6px) translateX(-9px) } }
@keyframes pk-nageoire-g { from { transform: rotate(14deg) } to { transform: rotate(-38deg) } }
@keyframes pk-nageoire-d { from { transform: rotate(-14deg) } to { transform: rotate(38deg) } }
@keyframes pk-gonfle { 0%, 100% { transform: scale(1) } 45% { transform: scale(1.14) } }
@keyframes pk-aile-g { 0%, 100% { transform: rotate(0) } 38%, 58% { transform: translateY(-14px) rotate(115deg) } }
@keyframes pk-aile-d { 0%, 100% { transform: rotate(0) } 38%, 58% { transform: translateY(-14px) rotate(-115deg) } }
@keyframes pk-confetti { 0% { transform: translateY(-4px) rotate(0); opacity: 0 } 12% { opacity: 1 } 100% { transform: translateY(46px) rotate(300deg); opacity: 0 } }
@keyframes pk-flocon { 0% { transform: translateY(-4px) rotate(0); opacity: 0 } 15% { opacity: 1 } 100% { transform: translateY(40px) rotate(180deg); opacity: 0 } }
@keyframes pk-scintille { 0%, 100% { transform: scale(.3); opacity: 0 } 50% { transform: scale(1); opacity: 1 } }
.ani.ani--triste .ani__corps { animation: pk-souffle 3.6s ease-in-out infinite }
.ani.ani--triste .ani__larme { animation: pk-larme 3.6s ease-in infinite }
.ani.ani--triste .ani__patte-g, .ani.ani--triste .ani__patte-d { transform: translateY(3px) }
.ani.ani--encourage .ani__bulle { animation: pk-bulle 2.4s ease-in-out infinite }
.ani.ani--gagne .ani__corps { animation: pk-saut 1.2s ease-in-out infinite }
.ani.ani--gagne .ani__patte-g { animation: pk-bras 1.2s ease-in-out infinite }
.ani.ani--gagne .ani__patte-d { animation: pk-bras-d 1.2s ease-in-out infinite }
.ani.ani--gagne .ani__bulle { animation: pk-bulle 1.2s ease-in-out infinite }
.ani.ani--gagne .ani__cf { animation: pk-confetti 1.8s linear infinite }
.ani.ani--gagne .ani__cf2 { animation-delay: .3s } .ani.ani--gagne .ani__cf3 { animation-delay: .6s } .ani.ani--gagne .ani__cf4 { animation-delay: .9s } .ani.ani--gagne .ani__cf5 { animation-delay: 1.2s } .ani.ani--gagne .ani__cf6 { animation-delay: 1.5s }
.ani.ani--gagne .ani__flocon { animation: pk-flocon 2.2s linear infinite }
.ani.ani--gagne .ani__f2 { animation-delay: .55s } .ani.ani--gagne .ani__f3 { animation-delay: 1.1s } .ani.ani--gagne .ani__f4 { animation-delay: 1.65s }
.ani.ani--gagne .ani__etoile { animation: pk-scintille 1.4s ease-in-out infinite }
.ani.ani--gagne .ani__e2 { animation-delay: .7s }
.ani.ani--herisson.ani--triste .ani__piquants { transform: scaleY(.84) }
.ani.ani--herisson.ani--encourage .ani__corps, .ani.ani--herisson.ani--encourage .ani__patte-g, .ani.ani--herisson.ani--encourage .ani__patte-d { animation: pk-hop .9s ease-in-out infinite }
.ani.ani--herisson.ani--gagne .ani__piquants { animation: pk-gonfle 1.2s ease-in-out infinite }
.ani.ani--lapin.ani--triste .ani__oreille-g { transform: rotate(-96deg) }
.ani.ani--lapin.ani--triste .ani__oreille-d { transform: rotate(96deg) }
.ani.ani--lapin.ani--encourage .ani__corps { animation: pk-guette 1.8s ease-in-out infinite }
.ani.ani--lapin.ani--encourage .ani__oreille-g { animation: pk-oreille-g 1.1s ease-in-out infinite }
.ani.ani--lapin.ani--encourage .ani__oreille-d { animation: pk-oreille-d 1.1s ease-in-out .55s infinite }
.ani.ani--lapin.ani--gagne .ani__corps { animation: pk-bond 1.2s ease-in-out infinite }
.ani.ani--lapin.ani--gagne .ani__oreille-g { animation: pk-oreille-g .3s ease-in-out infinite }
.ani.ani--lapin.ani--gagne .ani__oreille-d { animation: pk-oreille-d .3s ease-in-out infinite }
.ani.ani--ecureuil.ani--triste .ani__queue { transform: rotate(48deg) }
.ani.ani--ecureuil.ani--triste .ani__gland { transform: translate(26px, -2px) rotate(24deg) }
.ani.ani--ecureuil.ani--encourage .ani__queue { animation: pk-queue 1.6s ease-in-out infinite }
.ani.ani--ecureuil.ani--encourage .ani__gland { animation: pk-grignote .35s ease-in-out infinite }
.ani.ani--ecureuil.ani--encourage .ani__patte-g { transform: translate(8px, -9px) }
.ani.ani--ecureuil.ani--encourage .ani__patte-d { transform: translate(-8px, -9px) }
.ani.ani--ecureuil.ani--gagne .ani__queue { animation: pk-queue .4s ease-in-out infinite }
.ani.ani--ecureuil.ani--gagne .ani__gland { animation: pk-jongle 1.2s ease-in-out infinite }
.ani.ani--renard.ani--triste .ani__oreille-g { transform: rotate(-20deg) }
.ani.ani--renard.ani--triste .ani__oreille-d { transform: rotate(20deg) }
.ani.ani--renard.ani--encourage .ani__corps { animation: pk-penche 2.6s ease-in-out infinite }
.ani.ani--renard.ani--encourage .ani__patte-d { animation: pk-salut 1.8s ease-in-out infinite }
.ani.ani--blaireau.ani--triste .ani__oreille-g, .ani.ani--blaireau.ani--triste .ani__oreille-d { transform: translateY(5px) }
.ani.ani--blaireau.ani--encourage .ani__nez { animation: pk-renifle 1.4s ease-in-out infinite }
.ani.ani--blaireau.ani--encourage .ani__patte-g { animation: pk-creuse .5s ease-in-out infinite }
.ani.ani--blaireau.ani--encourage .ani__patte-d { animation: pk-creuse .5s ease-in-out .25s infinite }
.ani.ani--blaireau.ani--gagne .ani__corps { animation: pk-danse 1s ease-in-out infinite }
.ani.ani--blaireau.ani--gagne .ani__patte-g { animation: pk-bras 1s ease-in-out infinite }
.ani.ani--blaireau.ani--gagne .ani__patte-d { animation: pk-bras-d 1s ease-in-out .5s infinite }
.ani.ani--biche.ani--triste .ani__oreille-g { transform: rotate(-36deg) }
.ani.ani--biche.ani--triste .ani__oreille-d { transform: rotate(36deg) }
.ani.ani--biche.ani--encourage .ani__corps { animation: pk-penche 3s ease-in-out infinite }
.ani.ani--biche.ani--encourage .ani__oreille-g { animation: pk-flick-g 2s ease-in-out infinite }
.ani.ani--biche.ani--encourage .ani__oreille-d { animation: pk-flick-d 2s ease-in-out 1s infinite }
.ani.ani--biche.ani--encourage .ani__patte-d { animation: pk-tape 1s ease-in-out infinite }
.ani.ani--biche.ani--gagne .ani__corps { animation: pk-cabriole 1.3s ease-in-out infinite }
.ani.ani--biche.ani--gagne .ani__patte-g { animation: pk-bras 1.3s ease-in-out infinite }
.ani.ani--biche.ani--gagne .ani__patte-d { animation: pk-bras-d 1.3s ease-in-out infinite }
.ani.ani--loutre.ani--triste .ani__corps { animation-duration: 4s }
.ani.ani--loutre.ani--triste .ani__larme { animation-duration: 4s }
.ani.ani--loutre.ani--triste .ani__oreille-g, .ani.ani--loutre.ani--triste .ani__oreille-d { transform: translateY(4px) }
.ani.ani--loutre.ani--triste .ani__galet { transform: translateY(5px) }
.ani.ani--loutre.ani--encourage .ani__corps { animation: pk-coucou 2.8s ease-in-out infinite }
.ani.ani--loutre.ani--encourage .ani__galet { animation: pk-jongle 1.3s ease-in-out infinite }
.ani.ani--loutre.ani--gagne .ani__patte-g { animation: pk-clap-g .35s ease-in-out infinite alternate }
.ani.ani--loutre.ani--gagne .ani__patte-d { animation: pk-clap-d .35s ease-in-out infinite alternate }
.ani.ani--loutre.ani--gagne .ani__galet { animation: pk-saut 1.2s ease-in-out infinite }
.ani.ani--castor.ani--triste .ani__queue { transform: rotate(30deg) }
.ani.ani--castor.ani--triste .ani__oreille-g, .ani.ani--castor.ani--triste .ani__oreille-d { transform: translateY(3px) }
.ani.ani--castor.ani--encourage .ani__corps { animation: pk-hoche 1.2s ease-in-out infinite }
.ani.ani--castor.ani--encourage .ani__queue { animation: pk-claque 1.2s ease-in infinite }
.ani.ani--castor.ani--gagne .ani__queue { animation: pk-claque .45s ease-in infinite }
.ani.ani--martin.ani--triste .ani__crete { transform: scaleY(.55) }
.ani.ani--martin.ani--triste .ani__patte-g { transform: rotate(-14deg) translateY(4px) }
.ani.ani--martin.ani--triste .ani__patte-d { transform: rotate(14deg) translateY(4px) }
.ani.ani--martin.ani--encourage .ani__corps { animation: pk-picore 1.4s ease-in-out infinite }
.ani.ani--martin.ani--encourage .ani__crete { animation: pk-crete 1.4s ease-in-out infinite }
.ani.ani--martin.ani--gagne .ani__corps { animation: pk-envol 1.4s ease-in-out infinite }
.ani.ani--martin.ani--gagne .ani__patte-g { animation: pk-envol-g 1.4s linear infinite }
.ani.ani--martin.ani--gagne .ani__patte-d { animation: pk-envol-d 1.4s linear infinite }
.ani.ani--manchot.ani--triste .ani__patte-g { transform: rotate(-12deg) translateY(4px) }
.ani.ani--manchot.ani--triste .ani__patte-d { transform: rotate(12deg) translateY(4px) }
.ani.ani--manchot.ani--encourage .ani__corps { animation: pk-penche 1.8s ease-in-out infinite }
.ani.ani--manchot.ani--encourage .ani__patte-g { animation: pk-battre-g .4s ease-in-out infinite alternate }
.ani.ani--manchot.ani--encourage .ani__patte-d { animation: pk-battre-d .4s ease-in-out infinite alternate }
.ani.ani--manchot.ani--gagne .ani__patte-g { animation: pk-aile-g 1.2s ease-in-out infinite }
.ani.ani--manchot.ani--gagne .ani__patte-d { animation: pk-aile-d 1.2s ease-in-out infinite }
.ani.ani--phoque.ani--triste .ani__balle { transform: translate(38px, 54px) }
.ani.ani--phoque.ani--triste .ani__patte-g { transform: rotate(-12deg) translateY(4px) }
.ani.ani--phoque.ani--triste .ani__patte-d { transform: rotate(12deg) translateY(4px) }
.ani.ani--phoque.ani--encourage .ani__corps { animation: pk-pousse .9s ease-in-out infinite }
.ani.ani--phoque.ani--encourage .ani__balle { animation: pk-balle .9s ease-in-out infinite }
.ani.ani--phoque.ani--gagne .ani__balle { animation: pk-lance 1.2s ease-in-out infinite }
.ani.ani--phoque.ani--gagne .ani__patte-g { animation: pk-nageoire-g .3s ease-in-out infinite alternate }
.ani.ani--phoque.ani--gagne .ani__patte-d { animation: pk-nageoire-d .3s ease-in-out infinite alternate }
.ani.ani--polaire.ani--triste .ani__corps { animation: pk-cache 4s ease-in-out infinite }
.ani.ani--polaire.ani--triste .ani__larme { animation-duration: 4s }
.ani.ani--polaire.ani--triste .ani__oreille-g { transform: rotate(-22deg) }
.ani.ani--polaire.ani--triste .ani__oreille-d { transform: rotate(22deg) }
.ani.ani--polaire.ani--encourage .ani__corps { animation: pk-curieux 2.6s ease-in-out infinite }
.ani.ani--polaire.ani--encourage .ani__patte-g { animation: pk-pietine .6s ease-in-out infinite }
.ani.ani--polaire.ani--encourage .ani__patte-d { animation: pk-pietine .6s ease-in-out .3s infinite }
.ani.ani--polaire.ani--gagne .ani__corps { animation: pk-plongeon 1.3s ease-in-out infinite }
.ani.ani--polaire.ani--gagne .ani__patte-g { animation: pk-bras 1.3s ease-in-out infinite }
.ani.ani--polaire.ani--gagne .ani__patte-d { animation: pk-bras-d 1.3s ease-in-out infinite }
.ani--calme * { animation: none !important }
@media (prefers-reduced-motion: reduce) { .ani * { animation: none !important } }

/* =====================================================================================================
   Compagnons, 2.55 (26/10 — demandes de Matthias) : les compagnons DORÉS (en 2.56 : hibou d'or, éléphant d'or : halo,
   rayons, éclats, ailes), les ACCESSOIRES (pile sur le bord de la carte, un de plus par 10 éléments ajoutés),
   le compagnon sur le BILAN de la révision du jour (et son petit son, assets/js/fin.js), la rangée dorée de
   « Mes compagnons », le bandeau du jour du déblocage.
   ===================================================================================================== */
.ani .ani__aile-g, .ani .ani__aile-d, .ani .ani__halo, .ani .ani__rayons, .ani .ani__paupiere-g, .ani .ani__paupiere-d { transform-box: view-box; }
.ani .ani__eclat, .ani .ani__objet { transform-box: fill-box; }
.ani .ani__eclat { transform-origin: center; }
.ani .ani__objet { transform-origin: 50% 100%; }
.ani .ani__halo, .ani .ani__rayons { transform-origin: 60px 44px; pointer-events: none; }
.ani--hibou .ani__aile-g { transform-origin: 40px 58px; } .ani--hibou .ani__aile-d { transform-origin: 80px 58px; }
.ani--hibou .ani__oreille-g { transform-origin: 40px 31px; } .ani--hibou .ani__oreille-d { transform-origin: 80px 31px; }
.ani--hibou .ani__paupiere-g { transform-origin: 48px 41px; } .ani--hibou .ani__paupiere-d { transform-origin: 72px 41px; }
.ani .ani__paupiere-g, .ani .ani__paupiere-d { transform: scaleY(0); }

@keyframes pk-halo { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.07); } }
@keyframes pk-rayons { to { transform: rotate(360deg); } }
@keyframes pk-eclat { 0%, 100% { transform: scale(.35) rotate(0); opacity: .25; } 50% { transform: scale(1) rotate(45deg); opacity: 1; } }
@keyframes pk-cligne { 0%, 93%, 100% { transform: scaleY(0); } 96% { transform: scaleY(1); } }
@keyframes pk-deploie-g { 0%, 100% { transform: rotate(0); } 40%, 60% { transform: rotate(42deg); } }
@keyframes pk-deploie-d { 0%, 100% { transform: rotate(0); } 40%, 60% { transform: rotate(-42deg); } }
@keyframes pk-bat-g { from { transform: rotate(86deg); } to { transform: rotate(124deg); } }
@keyframes pk-bat-d { from { transform: rotate(-86deg); } to { transform: rotate(-124deg); } }
@keyframes pk-plane { 0%, 100% { transform: translateY(-1px); } 50% { transform: translateY(-7px); } }
@keyframes pk-hibou-tete { 0%, 100% { transform: rotate(0); } 22%, 40% { transform: rotate(-11deg); } 60%, 78% { transform: rotate(9deg); } }
@keyframes pk-pop { 0% { transform: scale(0); } 70% { transform: scale(1.18); } 100% { transform: scale(1); } }

/* ---- halo, rayons, éclats : toujours ; plus vifs quand il gagne, ternis quand il est triste */
.ani--dore .ani__halo { animation: pk-halo 4s ease-in-out infinite; }
.ani--dore .ani__rayons { animation: pk-rayons 48s linear infinite; }
.ani--dore .ani__eclat { animation: pk-eclat 2.4s ease-in-out infinite; }
.ani--dore .ani__eclat--2 { animation-delay: .6s; } .ani--dore .ani__eclat--3 { animation-delay: 1.2s; } .ani--dore .ani__eclat--4 { animation-delay: 1.8s; }
.ani--dore.ani--triste .ani__halo { opacity: .45; animation-duration: 7s; }
.ani--dore.ani--triste .ani__rayons { opacity: .12; animation-duration: 140s; }
.ani--dore.ani--triste .ani__eclat { animation: none; opacity: .3; }
.ani--dore.ani--gagne .ani__halo { animation-duration: 1.6s; }
.ani--dore.ani--gagne .ani__rayons { opacity: .8; animation-duration: 14s; }
.ani--dore.ani--gagne .ani__eclat { animation-duration: 1.2s; }
.ani--dore.ani--encourage .ani__paupiere-g, .ani--dore.ani--encourage .ani__paupiere-d { animation: pk-cligne 4.6s ease-in-out infinite; }
/* les serres restent agrippées à la carte : pas de « bras en l'air » */
.ani--dore.ani--gagne .ani__patte-g, .ani--dore.ani--gagne .ani__patte-d { animation: none; }
.ani--dore.ani--triste .ani__patte-g, .ani--dore.ani--triste .ani__patte-d { transform: none; }


/* ---- le hibou d'or (la « chouette » de la 2.55) : aigrettes basses (triste), tête qui pivote et clignement (encourageant), envol (gagnant) */
.ani--hibou.ani--triste .ani__oreille-g { transform: rotate(-30deg); }
.ani--hibou.ani--triste .ani__oreille-d { transform: rotate(30deg); }
.ani--hibou.ani--encourage .ani__corps { animation: pk-hibou-tete 5s ease-in-out infinite; }
.ani--hibou.ani--encourage .ani__oreille-g { animation: pk-oreille-g 2.4s ease-in-out infinite; }
.ani--hibou.ani--encourage .ani__oreille-d { animation: pk-oreille-d 2.4s ease-in-out 1.2s infinite; }
.ani--hibou.ani--encourage .ani__aile-g { animation: pk-deploie-g 3.6s ease-in-out infinite; }
.ani--hibou.ani--encourage .ani__aile-d { animation: pk-deploie-d 3.6s ease-in-out infinite; }
.ani--hibou.ani--gagne .ani__corps { animation: pk-plane 1.6s ease-in-out infinite; }
.ani--hibou.ani--gagne .ani__aile-g { animation: pk-bat-g .5s ease-in-out infinite alternate; }
.ani--hibou.ani--gagne .ani__aile-d { animation: pk-bat-d .5s ease-in-out infinite alternate; }
.ani--hibou.ani--gagne .ani__oreille-g { animation: pk-oreille-g .4s ease-in-out infinite; }
.ani--hibou.ani--gagne .ani__oreille-d { animation: pk-oreille-d .4s ease-in-out infinite; }

/* ---- la lueur dorée (à la place de l'ombre simple) et l'ombre de contact quand il plane */
.rj-compagnon .ani--dore { filter: drop-shadow(0 0 6px rgba(255, 196, 64, .55)) drop-shadow(0 8px 12px rgba(16, 36, 58, .22)); }
:root[data-theme="dark"] .rj-compagnon .ani--dore { filter: drop-shadow(0 0 7px rgba(255, 196, 64, .5)) drop-shadow(0 8px 12px rgba(0, 0, 0, .4)); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .rj-compagnon .ani--dore { filter: drop-shadow(0 0 7px rgba(255, 196, 64, .5)) drop-shadow(0 8px 12px rgba(0, 0, 0, .4)); }
}
@keyframes pk-ombre-plane { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(.82); opacity: .6; } }
.rj-compagnon--pattes.est-dore.est-gagne::before { animation: pk-ombre-plane 1.6s ease-in-out infinite; }
.rj-bulle.est-dore { color: #8a5806; border-color: #f2c94c; background: linear-gradient(180deg, #fffdf3, #fff6d8); box-shadow: 0 4px 16px rgba(201, 138, 20, .28); }
.rj-bulle.est-dore::after { background: #fff8e0; border-color: #f2c94c; }

/* ---- les accessoires : ils arrivent un à un */
.ani .ani__objet { animation: pk-pop .5s cubic-bezier(.34, 1.56, .64, 1) both; }
.ani .ani__objet--2 { animation-delay: .08s; } .ani .ani__objet--3 { animation-delay: .16s; } .ani .ani__objet--4 { animation-delay: .24s; }
.ani .ani__objet--5 { animation-delay: .32s; } .ani .ani__objet--6 { animation-delay: .4s; } .ani .ani__objet--7 { animation-delay: .48s; }
.ani .ani__objet--8 { animation-delay: .56s; } .ani .ani__objet--9 { animation-delay: .64s; }

/* ---- le bilan : le compagnon passe la tête au-dessus, et fait la fête */
.rj-carte--bilan { max-width: 48rem; margin: 70px auto 0; }   /* la largeur de .bilan */
.rj-carte--bilan > .bilan { position: relative; z-index: 1; margin-top: 0; }
.rj-carte--bilan .rj-compagnon { right: 96px; }
.rj-son {
  float: right; margin: 0 0 .4rem .8rem; display: inline-flex; align-items: center; gap: .3rem; padding: .3rem .6rem;
  border: 1px solid var(--trait); border-radius: 99px; background: var(--blanc); color: var(--encre-douce); font: 700 .74rem var(--titre); cursor: pointer;
}
.rj-son:hover { border-color: var(--cyan); color: var(--encre); }
.rj-son.est-coupe { color: var(--encre-douce); opacity: .75; }
.rj-son[hidden] { display: none; }

/* ---- le bandeau du jour du déblocage */
@keyframes pk-reflet { 0% { background-position: -160% 0; } 60%, 100% { background-position: 260% 0; } }
.cp-debloque {
  position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 1rem; align-items: center; margin: 0 0 1rem; padding: .85rem 1rem;
  border: 1.5px solid #e8b53a; border-radius: 16px; color: #3d2a04;
  background: linear-gradient(110deg, #fff6d6 0%, #ffe9a6 45%, #fff6d6 100%); overflow: hidden; text-align: left;
}
.cp-debloque::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(105deg, transparent 35%, rgba(255, 255, 255, .7) 50%, transparent 65%) no-repeat; background-size: 60% 100%;
  animation: pk-reflet 3.6s ease-in-out infinite;
}
.cp-debloque .cp-vignette { --cp-l: 96px; }
.cp-debloque__sur { margin: 0; font: 800 .7rem var(--titre); letter-spacing: .12em; text-transform: uppercase; color: #9a6405; }
.cp-debloque__titre { margin: .1rem 0 0; font: 800 1.15rem/1.25 var(--titre); color: #3d2a04; }
.cp-debloque__texte { margin: .25rem 0 0; font-size: .86rem; line-height: 1.45; color: #5c4210; }
.rj .cp-debloque { margin: 0; }

/* ---- les vignettes dorées : un ciel de nuit, un sol d'or */
.cp-vignette--dore {
  --cp-fond: radial-gradient(circle at 50% 38%, #4b3c8f 0%, #2a2160 55%, #161238 100%); --cp-sol: linear-gradient(180deg, #ffe08a, #c98a14);
  border-color: #e8b53a; box-shadow: 0 0 0 1px rgba(232, 181, 58, .35), 0 6px 18px rgba(201, 138, 20, .28);
}
.cp-vignette--dore.cp-vignette--cache { --cp-fond: radial-gradient(circle at 50% 38%, #3a3456 0%, #211d3d 100%); --cp-sol: linear-gradient(180deg, #8b7a4a, #5c4f2c); box-shadow: none; }
.cp-vignette--dore.cp-vignette--cache .cp-vignette__dessin { filter: brightness(0) invert(.85) sepia(.6); opacity: .2; }
.cp-vignette--dore .cp-vignette__question { color: #f2c94c; }
.cp-jour--dore { --cp-sol: #e8b53a; }
.cp-jour--dore .cp-vignette { background: radial-gradient(circle at 50% 38%, #4b3c8f 0%, #2a2160 55%, #161238 100%); }

/* ---- « Mes compagnons » : la rangée dorée */
.cp-dores { display: grid; gap: .7rem; padding: .9rem 1rem 1rem; border-radius: 16px; border: 1px solid #edd08a;
  background: linear-gradient(160deg, color-mix(in srgb, #ffe08a 22%, var(--blanc)), var(--blanc) 70%); }
.cp-fenetre .fenetre__corps .cp-dores__total { margin: 0; font: 700 .84rem var(--titre); color: #9a6405; }
.cp-fenetre .fenetre__corps .cp-dores__liste { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; margin: 0; padding: 0; list-style: none; }
.cp-dore { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .7rem; align-items: center; min-width: 0; }
.cp-dore .cp-vignette { --cp-l: 96px; }
.cp-fenetre .fenetre__corps .cp-dore__nom { margin: 0; font: 800 .92rem var(--titre); color: var(--encre); }
.cp-fenetre .fenetre__corps .cp-dore__etat { margin: .15rem 0 .35rem; font-size: .78rem; color: var(--encre-douce); }
.cp-dore.est-debloque .cp-dore__nom { color: #9a6405; }
.cp-jauge { display: block; width: 100%; height: 8px; }
.cp-jauge__fond { fill: color-mix(in srgb, #e8b53a 22%, var(--blanc)); }
.cp-jauge__plein { fill: #e8b53a; }
.cp-fenetre .fenetre__corps .cp-dores__aide, .cp-fenetre .fenetre__corps .cp-barre__aide { margin: 0; font-size: .78rem; line-height: 1.45; color: var(--encre-douce); }
.cp-fenetre .fenetre__corps .cp-barre__aide { margin-top: .2rem; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cp-dores { border-color: #6b5320; background: linear-gradient(160deg, #2b2410, var(--blanc) 70%); }
  :root:not([data-theme="light"]) .cp-dores__total, :root:not([data-theme="light"]) .cp-dore.est-debloque .cp-dore__nom { color: #f2c94c; }
}
:root[data-theme="dark"] .cp-dores { border-color: #6b5320; background: linear-gradient(160deg, #2b2410, var(--blanc) 70%); }
:root[data-theme="dark"] .cp-dores__total, :root[data-theme="dark"] .cp-dore.est-debloque .cp-dore__nom { color: #f2c94c; }

@media (max-width: 560px) {
  .rj-carte--bilan { margin-top: 64px; }
  .rj-carte--bilan .rj-compagnon { right: 64px; }
  .rj-son { margin-bottom: .6rem; }
  .cp-fenetre .fenetre__corps .cp-dores__liste { grid-template-columns: minmax(0, 1fr); }
  .cp-debloque { grid-template-columns: minmax(0, 1fr); justify-items: start; }
}
@media (prefers-reduced-motion: reduce) { .cp-debloque::after { animation: none; } }
/* le reflet qui passe sur la tête des dorés */
@keyframes pk-reflet-tete { 0%, 55% { transform: translateX(-40px); } 85%, 100% { transform: translateX(90px); } }
.ani--dore .ani__reflet { animation: pk-reflet-tete 4.5s ease-in-out infinite; }
.ani--dore.ani--triste .ani__reflet { animation: none; opacity: 0; }

/* =====================================================================================================
   2.56 (26/10 — retours de Matthias) : « Je révise le : » / « Cette semaine : » un peu plus haut sur ordinateur ;
   le menu ☰ passe devant la bulle « Ajouter » ; le menu « Ajouter 10 ▾ » laisse défiler la page et la bulle
   s'efface tant qu'il est ouvert ; la bulle « Ajouter + » se replie en « + » en douceur ; les cercles du Module
   de révision plus grands (ordinateur) et plus contrastés.
   ===================================================================================================== */
/* Le nom de la ligne : centré sur la boîte, il PARAÎT bas (des minuscules, pas de jambages) — remonté un peu. */
@media (min-width: 641px) {
  .rj-ligne__nom { position: relative; top: -.2em; }
}
/* Le tiroir ☰ (dans l'en-tête collant, z-index 40) passe devant la bulle (60) et sous son voile. */
.entete { transition: z-index 0s linear .28s; }   /* à la fermeture, il reste devant le temps que le tiroir glisse */
.entete:has(.nav-h.est-ouvert) { z-index: 80; transition-delay: 0s; }
/* « Ajouter 10 ▾ » ouvert : la bulle « Ajouter » ne cache plus les choix. */
.ajout-bulle { transition: padding .45s cubic-bezier(.4, 0, .2, 1), height .45s cubic-bezier(.4, 0, .2, 1), gap .45s cubic-bezier(.4, 0, .2, 1), opacity .2s ease, transform .2s ease, box-shadow .15s ease, visibility 0s linear 0s; }
html:has(.rj-ajouter__plus[open]) .ajout-bulle, html:has(.fichier__liens[open]) .ajout-bulle { opacity: 0; visibility: hidden; pointer-events: none; transform: translateY(14px) scale(.9);
  transition: padding .45s cubic-bezier(.4, 0, .2, 1), height .45s cubic-bezier(.4, 0, .2, 1), gap .45s cubic-bezier(.4, 0, .2, 1), opacity .2s ease, transform .2s ease, box-shadow .15s ease, visibility 0s linear .2s; }
/* La bulle « Ajouter + » → « + » : le mot se replie (largeur et opacité), la bulle se resserre et s'arrondit,
   le + grandit — plus de saut d'un coup. */
.ajout-bulle__lib { display: inline-block; max-width: 4.25rem; overflow: hidden; white-space: nowrap; opacity: 1; transition: max-width .45s cubic-bezier(.4, 0, .2, 1), opacity .24s ease .1s; }
.ajout-bulle__plus { transition: transform .3s ease, width .45s cubic-bezier(.4, 0, .2, 1), height .45s cubic-bezier(.4, 0, .2, 1); }
.ajout-bulle.est-repliee { width: auto; height: 3.875rem; padding: 0 1.0125rem; gap: 0; }
.ajout-bulle.est-repliee .ajout-bulle__lib { display: inline-block; max-width: 0; opacity: 0; transition: max-width .45s cubic-bezier(.4, 0, .2, 1), opacity .14s ease; }
.ajout-bulle.est-repliee .ajout-bulle__plus { width: 1.85rem; height: 1.85rem; }
@media (prefers-reduced-motion: reduce) { .ajout-bulle, .ajout-bulle__lib, .ajout-bulle__plus { transition: none; } }
/* Les cercles du Module de révision : un disque blanc, un trait plus épais, un fond teinté du cours. */
.parcours__noeud .anneau { background: var(--blanc); box-shadow: 0 0 0 5px var(--papier), 0 2px 10px rgba(16, 36, 58, .14); }
.parcours .anneau__fond { stroke: color-mix(in srgb, var(--teinte, var(--cyan)) 26%, var(--jauge-fond)); }
.parcours .anneau__fond, .parcours .anneau__plein { stroke-width: 4.2; }
.parcours .anneau__texte { font-weight: 800; }
@media (min-width: 641px) {
  .parcours::before { left: 47px; }
  .parcours__etape { grid-template-columns: 96px minmax(0, 1fr); }
  .parcours__noeud .anneau--cours { width: 92px; height: 92px; }
  .parcours__noeud .anneau--cours .anneau__texte { font-size: 1.45rem; }
  .parcours__noeud .anneau--chap { width: 66px; height: 66px; }
  .parcours__noeud .anneau--chap .anneau__texte { font-size: 1.22rem; }
  .parcours__noeud--vide { width: 56px; height: 56px; }
}
@media (max-width: 640px) {
  .parcours__noeud .anneau--cours { width: 50px; height: 50px; }
}

/* =====================================================================================================
   Compagnons, 2.56 (26/10 — demandes de Matthias) : l'ÉLÉPHANT D'OR (oreilles qui battent, trompe qui passe
   par-dessus le bord de la carte, qui claironne des étoiles ; céleste, la médaille dans la trompe), les variantes des
   dorés (hibou : lanterne, grimoire, mortier ; éléphant : sphère armillaire, lune, joyaux), les compagnons de SAISON
   (citrouille, renne, Gille de Binche, Doudou), leur rangée dans « Mes compagnons » et l'essai des délégué·es.
   ===================================================================================================== */
/* ---- l'éléphant d'or (2.56) */
.ani .ani__trompe, .ani .ani__trompe-levee, .ani .ani__oreille-g, .ani .ani__oreille-d { transform-box: view-box; }
.ani .ani__pompon-in, .ani .ani__breloque, .ani .ani__medaille-in { transform-box: fill-box; transform-origin: 50% 0; }
.ani .ani__jet { transform-box: fill-box; transform-origin: center; opacity: 0; }
.ani--elephant .ani__oreille-g { transform-origin: 44px 40px; } .ani--elephant .ani__oreille-d { transform-origin: 76px 40px; }
.ani--elephant .ani__paupiere-g { transform-origin: 48.6px 31px; } .ani--elephant .ani__paupiere-d { transform-origin: 71.4px 31px; }
.ani--elephant .ani__trompe { transform-origin: 60px 66px; }
.ani--elephant .ani__trompe-levee { transform-origin: 60px 50px; }
@keyframes pk-ele-oreille-g { 0%, 100% { transform: scaleX(1) rotate(0); } 50% { transform: scaleX(.8) rotate(5deg); } }
@keyframes pk-ele-oreille-d { 0%, 100% { transform: scaleX(1) rotate(0); } 50% { transform: scaleX(.8) rotate(-5deg); } }
@keyframes pk-ele-trompe { 0% { transform: rotate(-5deg); } 100% { transform: rotate(6deg); } }
@keyframes pk-ele-pend { 0%, 100% { transform: rotate(-2deg); } 50% { transform: rotate(2deg); } }
@keyframes pk-ele-claironne { 0% { transform: rotate(-4deg); } 100% { transform: rotate(5deg); } }
@keyframes pk-ele-hoche { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(1.6px); } }
@keyframes pk-balance { 0% { transform: rotate(-12deg); } 100% { transform: rotate(12deg); } }
@keyframes pk-jet { 0% { transform: translate(0, 0) scale(.3); opacity: 0; } 20% { opacity: 1; } 100% { transform: translate(12px, -22px) scale(1.1); opacity: 0; } }
.ani--elephant.ani--encourage .ani__corps { animation: pk-ele-hoche 3s ease-in-out infinite; }
.ani--elephant.ani--encourage .ani__oreille-g { animation: pk-ele-oreille-g 2.8s ease-in-out infinite; }
.ani--elephant.ani--encourage .ani__oreille-d { animation: pk-ele-oreille-d 2.8s ease-in-out infinite; }
.ani--elephant.ani--encourage .ani__trompe { animation: pk-ele-trompe 1.6s ease-in-out infinite alternate; }
.ani--elephant.ani--triste .ani__corps { animation: pk-souffle 3.6s ease-in-out infinite; }
.ani--elephant.ani--triste .ani__oreille-g { transform: rotate(-14deg) scaleX(.9); }
.ani--elephant.ani--triste .ani__oreille-d { transform: rotate(14deg) scaleX(.9); }
.ani--elephant.ani--triste .ani__trompe { animation: pk-ele-pend 4s ease-in-out infinite; }
.ani--elephant.ani--triste .ani__larme { animation: pk-larme 3.6s ease-in infinite; }
.ani--elephant.ani--gagne .ani__corps { animation: pk-plane 1.6s ease-in-out infinite; }
.ani--elephant.ani--gagne .ani__oreille-g { animation: pk-ele-oreille-g .5s ease-in-out infinite; }
.ani--elephant.ani--gagne .ani__oreille-d { animation: pk-ele-oreille-d .5s ease-in-out infinite; }
.ani--elephant.ani--gagne .ani__trompe-levee { animation: pk-ele-claironne .8s ease-in-out infinite alternate; }
.ani--elephant .ani__pompon-in { animation: pk-balance 1.4s ease-in-out infinite alternate; }
.ani--elephant .ani__breloque { animation: pk-balance 2s ease-in-out infinite alternate; }
.ani--elephant .ani__medaille-in { animation: pk-balance 1.1s ease-in-out infinite alternate; }
.ani--elephant.ani--triste .ani__pompon-in, .ani--elephant.ani--triste .ani__breloque { animation-duration: 4s; }
.ani--elephant.ani--gagne .ani__jet { animation: pk-jet 1.2s ease-out infinite; }
.ani--elephant.ani--gagne .ani__jet--2 { animation-delay: .2s; } .ani--elephant.ani--gagne .ani__jet--3 { animation-delay: .4s; }
.ani--elephant.ani--gagne .ani__jet--4 { animation-delay: .6s; } .ani--elephant.ani--gagne .ani__jet--5 { animation-delay: .8s; } .ani--elephant.ani--gagne .ani__jet--6 { animation-delay: 1s; }
/* ---- l'éléphant céleste : ses accessoires (2.56) — la sphère armillaire et ses anneaux, la lune qui flotte, les
   planètes et les étoiles filantes autour de lui */
.ani .ani__anneau, .ani .ani__sphere, .ani .ani__lune-astre, .ani .ani__planete, .ani .ani__filante { transform-box: fill-box; transform-origin: center; }
@keyframes pk-anneau-1 { 0%, 100% { transform: scaleY(1); } 50% { transform: scaleY(-1); } }
@keyframes pk-anneau-2 { 0%, 100% { transform: scaleX(1); } 50% { transform: scaleX(-1); } }
@keyframes pk-filante { 0%, 100% { transform: translate(0, 0); opacity: 1; } 45% { transform: translate(3px, 1.8px); opacity: .7; } 60% { transform: translate(3.4px, 2px); opacity: 1; } }
@keyframes pk-planete { 0%, 100% { transform: translate(0, 0) rotate(0); } 50% { transform: translate(0, -2.6px) rotate(12deg); } }
.ani--elephant .ani__lueur { animation: pk-lueur 2.6s ease-in-out infinite; }
.ani--elephant .ani__anneau--1 { animation: pk-anneau-1 3.2s ease-in-out infinite; }
.ani--elephant .ani__anneau--2 { animation: pk-anneau-2 4.4s ease-in-out infinite; }
.ani--elephant .ani__sphere, .ani--elephant .ani__lune-astre { animation: pk-flotte 3s ease-in-out infinite; }
.ani--elephant .ani__planete { animation: pk-planete 3.6s ease-in-out infinite; }
.ani--elephant .ani__filante { animation: pk-filante 2.4s ease-in-out infinite; }
.ani--elephant.ani--gagne .ani__anneau--1, .ani--elephant.ani--gagne .ani__anneau--2 { animation-duration: 1.2s; }
.ani--elephant.ani--gagne .ani__planete, .ani--elephant.ani--gagne .ani__filante { animation-duration: 1.2s; }
.ani--dore .ani__satellite--2 * { animation-delay: -.6s; } .ani--dore .ani__satellite--3 * { animation-delay: -1.2s; }
.ani--dore .ani__satellite--4 * { animation-delay: -1.8s; } .ani--dore .ani__satellite--5 * { animation-delay: -2.4s; }
.ani--dore .ani__satellite--6 * { animation-delay: -.3s; } .ani--dore .ani__satellite--7 * { animation-delay: -.9s; }
.ani--dore .ani__satellite--8 * { animation-delay: -1.5s; }
/* ---- le hibou d'or : ses accessoires (2.56) */
.ani .ani__lueur, .ani .ani__luciole, .ani .ani__lettre, .ani .ani__savoir, .ani .ani__page, .ani .ani__signet, .ani .ani__grimoire, .ani .ani__lanterne { transform-box: fill-box; }
.ani .ani__lueur, .ani .ani__luciole, .ani .ani__lettre, .ani .ani__savoir { transform-origin: center; }
.ani .ani__flamme { transform-origin: 50% 100%; }
.ani .ani__page { transform-origin: 0% 100%; }
.ani .ani__signet { transform-origin: 30% 0; }
@keyframes pk-lueur { 0%, 100% { transform: scale(1); opacity: .9; } 50% { transform: scale(1.18); opacity: .6; } }
@keyframes pk-vacille { 0%, 100% { transform: scale(1, 1); } 25% { transform: scale(.9, 1.1); } 50% { transform: scale(1.06, .94); } 75% { transform: scale(.96, 1.05); } }
@keyframes pk-luciole { 0%, 100% { transform: translate(0, 0); opacity: 1; } 25% { transform: translate(3px, -2.5px); opacity: .55; } 50% { transform: translate(-1px, -4px); opacity: 1; } 75% { transform: translate(-3px, -1px); opacity: .6; } }
@keyframes pk-flotte { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-2.4px); } }
@keyframes pk-page { 0% { transform: scaleX(1); opacity: 0; } 8%, 40% { transform: scaleX(1); opacity: 1; } 70% { transform: scaleX(-1); opacity: 1; } 85%, 100% { transform: scaleX(-1); opacity: 0; } }
@keyframes pk-savoir { 0% { transform: translateY(0) scale(.4); opacity: 0; } 30% { opacity: 1; } 100% { transform: translateY(-16px) scale(1); opacity: 0; } }
@keyframes pk-lettre { 0%, 100% { transform: translate(0, 0) rotate(-8deg); } 50% { transform: translate(1.5px, -3.5px) rotate(8deg); } }
@keyframes pk-astre { 0%, 100% { transform: scale(.6) rotate(0); opacity: .55; } 50% { transform: scale(1.1) rotate(45deg); opacity: 1; } }
.ani--hibou .ani__lueur { animation: pk-lueur 2.2s ease-in-out infinite; }
.ani--hibou .ani__flamme { animation: pk-vacille 1.1s ease-in-out infinite; }
.ani--hibou .ani__luciole { animation: pk-luciole 3.2s ease-in-out infinite; }
.ani--hibou .ani__grimoire { animation: pk-flotte 2.6s ease-in-out infinite; }
.ani--hibou .ani__page { animation: pk-page 3.6s ease-in-out infinite; }
.ani--hibou .ani__savoir { animation: pk-savoir 2.4s ease-out infinite; opacity: 0; }
.ani--hibou .ani__savoir--2 { animation-delay: .8s; } .ani--hibou .ani__savoir--3 { animation-delay: 1.6s; }
.ani--hibou .ani__signet { animation: pk-balance 1.8s ease-in-out infinite alternate; }
.ani--hibou .ani__lettre { animation: pk-lettre 3.4s ease-in-out infinite; }
.ani--hibou .ani__pompon-in { transform-box: fill-box; transform-origin: 50% 0; animation: pk-balance 1.3s ease-in-out infinite alternate; }
.ani .ani__astre { transform-box: fill-box; transform-origin: center; }
.ani--hibou .ani__astre { animation: pk-astre 2.2s ease-in-out infinite; }
.ani--hibou.ani--gagne .ani__luciole, .ani--hibou.ani--gagne .ani__lettre { animation-duration: 1.4s; }
.ani--hibou.ani--triste .ani__lueur { animation-duration: 5s; opacity: .5; }
/* ---- les compagnons de saison (2.56 : la citrouille, le renne, le Gille de Binche, le Doudou) */
.ani .ani__lumiere, .ani .ani__cloche, .ani .ani__crins, .ani .ani__grelot, .ani .ani__pupille, .ani .ani__fumee, .ani .ani__flamme, .ani .ani__couleurs, .ani .ani__vrille, .ani .ani__vol, .ani .ani__rubans, .ani .ani__ramon { transform-box: fill-box; }
.ani .ani__cloche, .ani .ani__grelot, .ani .ani__vrille, .ani .ani__rubans { transform-origin: 50% 0; }
.ani .ani__crins { transform-origin: 30% 0; }
.ani .ani__ramon { transform-origin: 20% 100%; }
.ani .ani__vol { transform-origin: center; }
.ani .ani__plume { transform-box: view-box; transform-origin: 0 0; }        /* à la base de chaque plume (groupe translaté) */
.ani .ani__machoire { transform-box: view-box; transform-origin: 60px 51px; }  /* la charnière de la gueule du Doudou */
.ani .ani__fumee { transform-origin: center; opacity: 0; }
.ani--saison .ani__queue { transform-box: view-box; transform-origin: 82px 72px; }
.ani--dragon .ani__queue { transform-origin: 92px 74px; }
.ani--dragon .ani__aile-d { transform-box: view-box; transform-origin: 98px 47px; }
.ani--renne .ani__oreille-g { transform-origin: 38px 43px; } .ani--renne .ani__oreille-d { transform-origin: 82px 43px; }
@keyframes pk-cs-d { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-14deg); } }
@keyframes pk-cs-vole-d { from { transform: rotate(6deg); } to { transform: rotate(-30deg); } }
@keyframes pk-clignote { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }
@keyframes pk-fumee { 0% { transform: translate(0, 0) scale(.4); opacity: 0; } 25% { opacity: .95; } 100% { transform: translate(-4px, -14px) scale(1.4); opacity: 0; } }
@keyframes pk-flamme { 0%, 100% { opacity: 1; } 40% { opacity: .55; } 70% { opacity: .85; } }
@keyframes pk-lueur-c { 0%, 100% { opacity: 1; } 30% { opacity: .72; } 55% { opacity: .95; } 75% { opacity: .62; } }
@keyframes pk-halo-c { 0%, 100% { opacity: .75; } 50% { opacity: 1; } }
@keyframes pk-couleurs { 0% { filter: hue-rotate(0deg); } 100% { filter: hue-rotate(360deg); } }
@keyframes pk-plume { 0%, 100% { transform: rotate(-2.5deg); } 50% { transform: rotate(2.5deg); } }
@keyframes pk-pupille-g { 0%, 40%, 100% { transform: translate(0, 0); } 50%, 70% { transform: translate(-2px, 1px); } 80%, 90% { transform: translate(1.6px, -1px); } }
@keyframes pk-pupille-d { 0%, 30%, 100% { transform: translate(0, 0); } 40%, 60% { transform: translate(2px, -1px); } 75%, 90% { transform: translate(-1px, 1.4px); } }
@keyframes pk-saison-queue { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-8deg); } }
@keyframes pk-machoire { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-7deg); } }
@keyframes pk-rire { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(5deg); } }
@keyframes pk-vol { 0%, 100% { transform: translate(0, 0) scaleY(1); } 25% { transform: translate(2px, -3px) scaleY(.4); } 50% { transform: translate(4px, -1px) scaleY(1); } 75% { transform: translate(2px, 2px) scaleY(.4); } }
@keyframes pk-ramon { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-6deg); } }
.ani--saison.ani--triste .ani__corps { animation: pk-souffle 3.6s ease-in-out infinite; }
.ani--saison.ani--triste .ani__larme { animation: pk-larme 3.6s ease-in infinite; }
.ani--saison.ani--encourage .ani__corps { animation: pk-penche 3s ease-in-out infinite; }
.ani--saison.ani--gagne .ani__corps { animation: pk-saut 1.2s ease-in-out infinite; }
.ani--saison .ani__cloche, .ani--saison .ani__grelot { animation: pk-balance 1s ease-in-out infinite alternate; }
.ani--saison .ani__grelot--2, .ani--saison .ani__grelot--4, .ani--saison .ani__grelot--6 { animation-delay: -.5s; }
.ani--saison.ani--gagne .ani__grelot { animation-duration: .3s; }
.ani--saison .ani__crins, .ani--saison .ani__rubans { animation: pk-balance 1.8s ease-in-out infinite alternate; }
.ani--saison .ani__lumiere { animation: pk-clignote 1.6s ease-in-out infinite; }
.ani--saison .ani__lumiere--2 { animation-delay: -.53s; } .ani--saison .ani__lumiere--3 { animation-delay: -1.06s; }
.ani--saison.ani--triste .ani__lumiere { animation-duration: 4s; }
.ani--saison .ani__flamme { animation: pk-flamme 1.3s ease-in-out infinite; }
.ani--saison .ani__plume { animation: pk-plume 2.6s ease-in-out infinite; }
.ani--saison .ani__plume--2, .ani--saison .ani__plume--6, .ani--saison .ani__plume--9 { animation-delay: -.9s; }
.ani--saison .ani__plume--3, .ani--saison .ani__plume--7 { animation-delay: -1.7s; } .ani--saison .ani__plume--4, .ani--saison .ani__plume--8 { animation-delay: -.4s; }
.ani--saison.ani--gagne .ani__plume { animation-duration: .7s; }
.ani--saison .ani__couleurs { animation: pk-couleurs 9s linear infinite; }
.ani--saison.ani--gagne .ani__couleurs { animation-duration: 2.4s; }
.ani--saison .ani__pupille--g { animation: pk-pupille-g 3.4s ease-in-out infinite; } .ani--saison .ani__pupille--d { animation: pk-pupille-d 3.4s ease-in-out infinite; }
.ani--saison .ani__queue { animation: pk-saison-queue 2.2s ease-in-out infinite; }
.ani--saison.ani--gagne .ani__queue { animation-duration: .7s; }
.ani--cameleon.ani--gagne .ani__ramon { animation: pk-ramon .6s ease-in-out infinite; }
.ani--citrouille .ani__lueur-c { animation: pk-lueur-c 2.2s ease-in-out infinite; }
.ani--citrouille .ani__halo-c { animation: pk-halo-c 2.2s ease-in-out infinite; }
.ani--citrouille.ani--triste .ani__lueur-c { animation-duration: 4.4s; opacity: .7; }
@keyframes pk-vrille { 0% { transform: rotate(-5deg); } 100% { transform: rotate(5deg); } }
.ani--citrouille .ani__vrille { animation: pk-vrille 2.4s ease-in-out infinite alternate; }
.ani--citrouille .ani__vrille--2 { animation-delay: -1.2s; }
.ani--citrouille.ani--gagne .ani__vol { animation: pk-vol .9s ease-in-out infinite; }
.ani--citrouille.ani--gagne .ani__vol--2 { animation-delay: -.3s; } .ani--citrouille.ani--gagne .ani__vol--3 { animation-delay: -.6s; }
.ani--dragon.ani--encourage .ani__machoire { animation: pk-machoire 1.6s ease-in-out infinite; }
.ani--dragon.ani--gagne .ani__machoire { animation: pk-rire .5s ease-in-out infinite; }
.ani--dragon.ani--encourage .ani__aile-d { animation: pk-cs-d 2.4s ease-in-out infinite; }
.ani--dragon.ani--gagne .ani__aile-d { animation: pk-cs-vole-d .28s ease-in-out infinite alternate; }
.ani--dragon.ani--triste .ani__aile-d { transform: rotate(12deg); }
.ani--dragon.ani--gagne .ani__fumee { animation: pk-fumee 1.4s ease-out infinite; }
.ani--dragon.ani--gagne .ani__fumee--2, .ani--dragon.ani--gagne .ani__fumee--5 { animation-delay: .25s; } .ani--dragon.ani--gagne .ani__fumee--3, .ani--dragon.ani--gagne .ani__fumee--6 { animation-delay: .5s; }
.ani--renne.ani--encourage .ani__oreille-g { animation: pk-oreille-g 2.4s ease-in-out infinite; } .ani--renne.ani--encourage .ani__oreille-d { animation: pk-oreille-d 2.4s ease-in-out 1.2s infinite; }
.ani--renne.ani--triste .ani__oreille-g { transform: rotate(-18deg); } .ani--renne.ani--triste .ani__oreille-d { transform: rotate(18deg); }
.ani--saison.ani--gagne .ani__cf { animation-name: pk-confetti; animation-duration: 1.4s; animation-timing-function: ease-in; animation-iteration-count: infinite; }
/* les compagnons de saison ne lèvent pas les pattes (relecture 2.56 : la règle « gagnant » des classiques les faisait
   tourner autour du coin du dessin, jusque sur la tête) — le Gille tient son ramon, le Doudou la carte, la citrouille
   n'a que des vrilles qui se balancent */
.ani--saison.ani--gagne .ani__patte-g, .ani--saison.ani--gagne .ani__patte-d { animation: none; }

/* ---- « Mes compagnons » : les vignettes et la rangée des compagnons de saison */
.cp-vignette--saison { --cp-fond: radial-gradient(circle at 50% 35%, #fff3d6 0%, #ffd9e6 55%, #d9e6ff 100%); --cp-sol: linear-gradient(90deg, #ff9426, #e2508a, #8a77c9, #009ee0, #3fb36b); border-color: #e2a4c4; }
.cp-vignette--saison.cp-vignette--cache { --cp-fond: var(--papier); --cp-sol: var(--trait); border-color: var(--trait); }
.cp-jour--saison { --cp-sol: #e2508a; }
.cp-saisons { display: grid; gap: .7rem; padding: .9rem 1rem 1rem; border-radius: 16px; border: 1px solid #f0c4d9;
  background: linear-gradient(160deg, color-mix(in srgb, #ffd9e6 30%, var(--blanc)), var(--blanc) 70%); }
.cp-fenetre .fenetre__corps .cp-saisons__liste { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; margin: 0; padding: 0; list-style: none; }
.cp-saison { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .7rem; align-items: center; min-width: 0; }
.cp-saison .cp-vignette { --cp-l: 84px; }
.cp-fenetre .fenetre__corps .cp-saison__nom { margin: 0; font: 800 .9rem var(--titre); color: var(--encre); }
.cp-fenetre .fenetre__corps .cp-saison__etat { margin: .15rem 0 0; font-size: .76rem; line-height: 1.35; color: var(--encre-douce); }
.cp-saison.est-vu .cp-saison__nom { color: #b0306a; }
.cp-fenetre .fenetre__corps .cp-saisons__aide { margin: 0; font-size: .78rem; line-height: 1.45; color: var(--encre-douce); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cp-saisons { border-color: #6b2f4b; background: linear-gradient(160deg, #2b1422, var(--blanc) 70%); }
  :root:not([data-theme="light"]) .cp-saison.est-vu .cp-saison__nom { color: #ff9ec7; }
}
:root[data-theme="dark"] .cp-saisons { border-color: #6b2f4b; background: linear-gradient(160deg, #2b1422, var(--blanc) 70%); }
:root[data-theme="dark"] .cp-saison.est-vu .cp-saison__nom { color: #ff9ec7; }
@media (max-width: 560px) { .cp-fenetre .fenetre__corps .cp-saisons__liste { grid-template-columns: minmax(0, 1fr); } }
/* ---- l'essai d'un compagnon (délégué·es, aidant·es — 2.56) */
.cp-essai { display: grid; gap: .5rem; padding: .75rem .9rem; border: 1px dashed var(--trait-fort, #b9c6d1); border-radius: 14px; background: var(--papier); }
.cp-fenetre .fenetre__corps .cp-essai__titre { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .5rem; margin: 0; font: 700 .88rem var(--titre); color: var(--encre); }
.cp-essai__titre small { font: 400 .76rem var(--texte, inherit); color: var(--encre-douce); }
.cp-essai__champs { display: flex; flex-wrap: wrap; align-items: end; gap: .5rem .7rem; }
.cp-essai__champ { display: grid; gap: .15rem; min-width: 0; font-size: .76rem; color: var(--encre-douce); }
.cp-essai__champ select { min-width: 9.5rem; max-width: 100%; padding: .35rem .5rem; border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc); color: var(--encre); font: inherit; font-size: .86rem; }
.cp-fenetre .fenetre__corps .cp-essai__aide { margin: 0; font-size: .76rem; line-height: 1.4; color: var(--encre-douce); }
@media (max-width: 560px) { .cp-essai__champ { flex: 1 1 100%; } .cp-essai__champ select { width: 100%; } }
@media (prefers-reduced-motion: reduce) { .ani--saison *, .ani--elephant *, .ani--hibou * { animation: none !important; } }

/* ---- Liens utiles (2.56, Matthias : « la vue tuiles ou liste casse l'homogénéité ») : la carte a la forme d'un
   document — l'aperçu (maillon et pastilles des sites), et « Ouvrir les liens ▾ » qui déroule de vrais boutons,
   chacun dans un nouvel onglet. */
.fichier__vignette--liens { width: auto; height: auto; border-radius: 0; background: none; box-shadow: none; display: grid; justify-items: center; gap: .7rem; }
.fichier__maillon { width: 3.6rem; height: 3.6rem; border-radius: 50%; display: grid; place-items: center; background: var(--blanc); color: var(--teinte, var(--lien)); box-shadow: 0 3px 12px rgba(16, 36, 58, .14); }
.fichier__maillon .icone { width: 1.6rem; height: 1.6rem; }
.fichier__pastilles { display: flex; padding-left: .5rem; }
.fichier__pastilles .lien-pastille { margin-left: -.5rem; border: 2px solid var(--blanc); }
.lien-pastille {
  flex: none; display: inline-grid; place-items: center; width: 1.85rem; height: 1.85rem; box-sizing: border-box; border-radius: 50%;
  color: #fff; font: 800 .8rem/1 var(--titre);
}
.lien-pastille--0 { background: #0f7cc4; } .lien-pastille--1 { background: #2f8a4a; } .lien-pastille--2 { background: #8a3fc4; }
.lien-pastille--3 { background: #c4581f; } .lien-pastille--4 { background: #c22a52; } .lien-pastille--5 { background: #3d5a98; }
.lien-pastille--plus { width: auto; min-width: 1.85rem; padding: 0 .45rem; border-radius: 99px; background: var(--marine, #10243a); font-size: .7rem; }
.fichier__liens { flex: 1 1 auto; display: flex; min-width: 0; }
.fichier__liens > summary { flex: 1 1 auto; cursor: pointer; user-select: none; }
.fichier__liens-chevron { transition: transform .2s ease; }
.fichier__liens[open] .fichier__liens-chevron { transform: rotate(180deg); }
.fichier__liens-court { display: none; }
.fichier__liens-liste { width: max-content; min-width: max(100%, 16rem); max-width: min(21rem, calc(100vw - 1.5rem)); }
.lien-boutons { list-style: none; margin: 0; padding: 0; display: grid; gap: .35rem; }
.lien-bouton {
  display: flex; align-items: center; gap: .6rem; min-height: 2.9rem; padding: .3rem .7rem; box-sizing: border-box;
  border: 1px solid var(--trait); border-radius: 10px; background: var(--blanc); color: var(--encre); text-decoration: none;
}
.lien-bouton:hover { background: var(--teinte-pale, var(--cyan-pale)); border-color: var(--teinte, var(--cyan)); color: var(--encre); }
.lien-bouton:focus-visible { outline: 3px solid var(--ambre); outline-offset: 2px; }
.lien-bouton__textes { flex: 1 1 auto; min-width: 0; display: grid; }
.lien-bouton__titre { font: 700 .88rem/1.25 var(--titre); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lien-bouton__domaine { font-size: .74rem; color: var(--encre-douce); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lien-bouton__icone { flex: none; width: 1rem; height: 1rem; color: var(--lien); }
/* en liste : la ligne d'un document (plus de liens empilés sous le ⋯) */
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__actions { padding-top: 1rem; justify-content: center; }
:is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__pastilles { display: none; }
@media (max-width: 760px) {
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__maillon { width: 2.6rem; height: 2.6rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier__maillon .icone { width: 1.15rem; height: 1.15rem; }
  :is(html[data-vue-documents="liste"] .fichiers, .fichiers--horizontal) .fichier--liens .fichier__actions { padding: .6rem 0 0; }
}
/* téléphone, tuiles étroites : « 6 liens ▾ » */
@media (max-width: 640px) {
  html:not([data-vue-documents="liste"]) .fichiers:not(.fichiers--horizontal) .fichier__liens-long { display: none; }
  html:not([data-vue-documents="liste"]) .fichiers:not(.fichiers--horizontal) .fichier__liens-court { display: inline; }
  .fichier__pastilles .lien-pastille { width: 1.5rem; height: 1.5rem; font-size: .68rem; }
  .fichier__ouvrir .fichier__liens-chevron { display: block; width: .85rem; height: .85rem; }
}

/* ---- 2.56 : le dernier geste de la révision du jour (« Voir le bilan », la dernière carte, « Voir le bilan du jour ») :
   le bouton fête la fin pendant que l'air joue (~1 s, assets/js/fin.js), puis la page suit. */
@keyframes pk-fete { 0% { transform: scale(1); } 30% { transform: scale(1.07); } 60% { transform: scale(.98); } 100% { transform: scale(1); } }
@keyframes pk-fete-reflet { from { background-position: 120% 0; } to { background-position: -120% 0; } }
.bouton.est-fete, .ji-btn.est-fete, .pile__rond.est-fete .pile__disque {
  background: linear-gradient(110deg, #e8a20c 0%, #ffd85e 38%, #fff6d6 50%, #ffd85e 62%, #e8a20c 100%) 0 0 / 250% 100%;
  color: #3d2a00; border-color: #c98a14; box-shadow: 0 0 0 4px rgba(255, 216, 94, .35), 0 6px 18px rgba(201, 138, 20, .35);
  animation: pk-fete .6s ease-out, pk-fete-reflet 1s linear;
}
@media (prefers-reduced-motion: reduce) { .bouton.est-fete, .ji-btn.est-fete, .pile__rond.est-fete .pile__disque { animation: none; } }

/* ---- 2.56 : ce qu'on a fait en plus (« +20 ») — sur la carte et dans « Cette semaine » */
.rj__bonus {
  display: inline-flex; align-items: center; gap: .4rem; justify-self: start; width: fit-content; margin: .35rem 0 0; padding: .3rem .7rem .3rem .55rem;
  border-radius: 99px; background: color-mix(in srgb, #ffd85e 30%, var(--blanc)); border: 1px solid #e8b53a; color: #6b4a00;
  font-size: .8rem; line-height: 1.3;
}
.rj__bonus .icone { flex: none; width: .95rem; height: .95rem; color: #c98a14; fill: #ffd85e; }
.rj__bonus b { font: 800 .86rem var(--titre); color: #8a5806; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .rj__bonus { background: #3a2e10; border-color: #7a5d1a; color: #f3d98a; }
  :root:not([data-theme="light"]) .rj__bonus b { color: #ffd85e; }
}
:root[data-theme="dark"] .rj__bonus { background: #3a2e10; border-color: #7a5d1a; color: #f3d98a; }
:root[data-theme="dark"] .rj__bonus b { color: #ffd85e; }
.rj-zone__bonus { display: none; }
.rj-zone--fait .rj-zone__bonus { display: inline; font: 800 .6rem/1 var(--titre); color: #fff; letter-spacing: .01em; }
.rj-zone--fait:has(.rj-zone__bonus) { display: flex; align-items: center; justify-content: center; gap: 2px; }

/* ==========================================================================
   Statistiques (site 2.57) — statistiques.php, délégué·es et administration.
   Des onglets sur le côté (en rangée qui défile sur téléphone), des tuiles chiffrées, des barres et des
   graphiques en SVG (la CSP interdit les styles en ligne : longueurs en attributs, couleurs en classes).
   Une marque n'a jamais la couleur pour seul sens : le niveau se dit aussi par une icône et un mot.
   ========================================================================== */
.st { display: grid; grid-template-columns: minmax(12.5rem, 14.5rem) minmax(0, 1fr); gap: 2rem; align-items: start; }
.st-nav {
  position: sticky; top: calc(var(--entete-h, 68px) + 4.4rem);
  background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; padding: .9rem .6rem .8rem;
  box-shadow: 0 1px 3px rgba(16, 36, 58, .06);
}
.st-nav__titre { display: flex; align-items: center; gap: .45rem; margin: 0 .5rem .5rem; font: 700 .78rem var(--titre); letter-spacing: .06em; text-transform: uppercase; color: var(--encre-douce); }
.st-nav__titre .icone { width: 1rem; height: 1rem; color: var(--lien); }
.st-nav__liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.st-nav__lien {
  display: flex; align-items: center; gap: .6rem; padding: .48rem .6rem; border-radius: 10px;
  color: var(--encre); text-decoration: none; font-size: .93rem; line-height: 1.25;
}
.st-nav__lien:hover { background: var(--papier); color: var(--encre); text-decoration: none; }
.st-nav__lien.est-actif { background: var(--cyan-pale); color: var(--encre); font-weight: 700; box-shadow: inset 3px 0 0 var(--cyan); }
.st-nav__icone { width: 1.1rem; height: 1.1rem; flex: none; color: var(--encre-douce); }
.st-nav__lien.est-actif .st-nav__icone { color: var(--lien); }
.st-nav__lien > span:not(.st-nav__direct) { min-width: 0; }
.st-nav__direct { margin-left: auto; width: .5rem; height: .5rem; border-radius: 50%; background: var(--juste); flex: none; animation: st-pouls 2s ease-in-out infinite; }
@keyframes st-pouls { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.st-nav__note { margin: .8rem .5rem 0; padding-top: .7rem; border-top: 1px solid var(--trait); font-size: .78rem; line-height: 1.45; color: var(--encre-douce); }

.st-corps { min-width: 0; }
.st-tete { display: flex; align-items: flex-end; justify-content: space-between; flex-wrap: wrap; gap: .8rem 1.5rem; margin: 0 0 1.4rem; }
.st-tete__titre { display: flex; align-items: center; gap: .55rem; margin: 0; font-size: clamp(1.45rem, 3vw, 1.9rem); }
.st-tete__icone { width: 1.15em; height: 1.15em; color: var(--lien); flex: none; }
.st-tete__sous { margin: .25rem 0 0; font-size: .92rem; color: var(--encre-douce); max-width: 60ch; }
.st-tete__outils { display: flex; align-items: center; flex-wrap: wrap; gap: .6rem 1rem; }
.st-periodes { display: inline-flex; padding: 3px; border-radius: 12px; background: var(--blanc); border: 1px solid var(--trait); }
.st-periodes__choix {
  padding: .38rem .75rem; border-radius: 9px; font-size: .85rem; font-weight: 700; color: var(--encre-douce); text-decoration: none; white-space: nowrap;
}
.st-periodes__choix:hover { color: var(--encre); text-decoration: none; background: var(--papier); }
.st-periodes__choix.est-actif { background: var(--cyan); color: #fff; }
.st-periodes__court { display: none; }
.st-recalculer { font-size: .85rem; }
.st-recalculer .icone { width: 1rem; height: 1rem; }

.st-section { margin: 0 0 1.6rem; padding: 1.15rem 1.35rem 1.25rem; background: var(--blanc); border: 1px solid var(--trait); border-radius: 16px; box-shadow: 0 1px 3px rgba(16, 36, 58, .05); }
.st-section__titre { display: flex; align-items: center; gap: .35rem; margin: 0 0 .9rem; font-size: 1.08rem; }
.st-sous-titre { margin: 1rem 0 .5rem; font: 700 .82rem var(--texte); letter-spacing: .02em; color: var(--encre-douce); }
.st-section > .st-sous-titre:first-child, .st-deux > div > .st-sous-titre:first-child { margin-top: 0; }
.st-note { margin: .7rem 0 0; font-size: .82rem; color: var(--encre-douce); max-width: none; }
.st-vide { margin: 0; padding: .9rem 1rem; border-radius: 12px; background: var(--papier); color: var(--encre-douce); font-size: .9rem; max-width: none; }
.st-deux { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem 1.6rem; }
.st-deux + .st-deux { margin-top: 1.1rem; }

/* Tuiles chiffrées */
.st-tuiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(11.5rem, 1fr)); gap: .7rem; margin: 0 0 1.4rem; }
.st-section .st-tuiles:last-child { margin-bottom: 0; }
.st-tuile {
  display: flex; flex-direction: column; gap: .15rem; min-width: 0;
  padding: .75rem .9rem .8rem; border-radius: 13px; background: var(--blanc); border: 1px solid var(--trait);
}
.st-section .st-tuile { background: var(--papier); border-color: transparent; }
.st-tuile__libelle { font-size: .8rem; color: var(--encre-douce); line-height: 1.3; }
.st-tuile__valeur { font: 700 1.45rem/1.15 var(--titre); color: var(--encre); overflow-wrap: anywhere; }
.st-tuile__detail { font-size: .76rem; line-height: 1.35; color: var(--encre-douce); }
.st-tuile__niveau { display: inline-flex; align-items: center; gap: .25rem; align-self: flex-start; margin-top: .15rem; padding: .05rem .45rem; border-radius: 99px; font-size: .72rem; font-weight: 700; }
.st-niveau__icone { width: .85rem; height: .85rem; flex: none; }
.st-tuile--ok .st-tuile__niveau { background: var(--juste-fond); color: var(--juste); }
.st-tuile--attention { border-color: color-mix(in srgb, var(--ambre) 55%, var(--trait)); }
.st-tuile--attention .st-tuile__niveau { background: var(--ambre-pale); color: var(--puce-texte); }
.st-tuile--critique { border-color: var(--grenat-bord); }
.st-section .st-tuile--attention, .st-section .st-tuile--critique { border-color: color-mix(in srgb, var(--ambre) 55%, var(--trait)); }
.st-tuile--critique .st-tuile__niveau { background: var(--grenat-pale); color: var(--grenat-vif); }

/* Les deux grands chiffres d'un onglet */
.st-heros { display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: .8rem; margin: 0 0 1rem; }
.st-hero {
  display: flex; flex-direction: column; gap: .2rem; padding: 1.05rem 1.25rem; border-radius: 16px;
  background: var(--cyan-pale); border: 1px solid color-mix(in srgb, var(--cyan) 28%, var(--trait));
}
.st-hero--ok { background: var(--juste-fond); border-color: var(--juste-trait); }
.st-hero__libelle { font-size: .85rem; font-weight: 700; color: var(--encre-douce); }
.st-hero__valeur { font: 700 clamp(2.2rem, 5vw, 3rem)/1.05 var(--texte); color: var(--encre); }
.st-hero__detail { font-size: .85rem; color: var(--encre-douce); }

/* Barres horizontales */
.st-barres { list-style: none; margin: 0; padding: 0; display: grid; gap: .45rem; }
.st-barres__ligne { display: grid; grid-template-columns: minmax(7rem, 38%) minmax(3rem, 1fr) auto; align-items: center; gap: .7rem; font-size: .88rem; }
.st-barres__libelle { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--encre); }
.st-barres__barre { display: block; width: 100%; height: .62rem; border-radius: 99px; overflow: hidden; }
.st-barres__fond { fill: var(--cyan-pale); }
.st-barres__valeur { fill: var(--cyan); }
.st-barres__masque { fill: var(--trait); }
.st-barres__valeur-texte { justify-self: end; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--encre); white-space: nowrap; }
.st-barres__part { margin-left: .45rem; font-weight: 400; color: var(--encre-douce); font-size: .8rem; }
/* Toutes les barres d'une liste commencent et finissent au même endroit, quelle que soit la longueur des nombres. */
@supports (grid-template-columns: subgrid) {
  .st-barres { grid-template-columns: minmax(7rem, 38%) minmax(3rem, 1fr) auto; gap: .45rem .7rem; }
  .st-barres__ligne { grid-column: 1 / -1; grid-template-columns: subgrid; }
}
.st-unite { font-weight: 400; color: var(--encre-douce); font-size: .8rem; }

/* Capacités (disque, salons, rôles) */
.st-capacites { display: grid; gap: .8rem; margin: 0 0 1.2rem; }
.st-section .st-capacites:last-child { margin-bottom: 0; }
.st-capacite__tete { display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap; font-size: .88rem; margin-bottom: .3rem; }
.st-capacite__tete strong { font-variant-numeric: tabular-nums; }
.st-capacite__barre { display: block; width: 100%; height: .75rem; border-radius: 99px; overflow: hidden; }
.st-capacite__fond { fill: var(--cyan-pale); }
.st-capacite__valeur { fill: var(--cyan); }
.st-capacite--attention .st-capacite__valeur { fill: var(--ambre); }
.st-capacite--critique .st-capacite__valeur { fill: var(--grenat); }
.st-capacite__niveau { display: inline-flex; align-items: center; gap: .25rem; margin-top: .3rem; font-size: .76rem; font-weight: 700; color: var(--puce-texte); }
.st-capacite--critique .st-capacite__niveau { color: var(--grenat-vif); }

/* Graphiques */
.st-figures { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(19rem, 100%), 1fr)); gap: 1rem 1.4rem; margin: 0 0 1.4rem; }
.st-section > .st-figure { max-width: 36rem; }
.st-section .st-figures:last-child { margin-bottom: 0; }
.st-figure { margin: 0; min-width: 0; }
.st-figures > .st-figure { padding: 1rem 1.1rem .9rem; border-radius: 16px; background: var(--blanc); border: 1px solid var(--trait); }
.st-section .st-figures > .st-figure { padding: 0; border: 0; background: none; }
.st-figure figcaption { margin: 0 0 .45rem; font-size: .85rem; font-weight: 700; color: var(--encre); }
.st-colonnes, .st-courbe { display: block; width: 100%; height: auto; overflow: visible; }
.st-axe__grille { stroke: var(--trait); stroke-width: 1; }
.st-axe__base { stroke: color-mix(in srgb, var(--encre-douce) 45%, var(--trait)); stroke-width: 1; }
.st-axe__texte { fill: var(--encre-douce); font: 11.5px var(--texte); font-variant-numeric: tabular-nums; }
.st-colonnes__barre { fill: var(--cyan); }
.st-colonnes--attention .st-colonnes__barre { fill: var(--ambre); }
.st-colonnes__masque { fill: var(--trait); }
.st-survol { fill: transparent; }
.st-survol:hover { fill: color-mix(in srgb, var(--cyan) 9%, transparent); }
.st-courbe__ligne { fill: none; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.st-courbe__aire { stroke: none; opacity: .12; }
.st-courbe__ligne.st-courbe--s1, .st-courbe__point.st-courbe--s1 { stroke: var(--lien); }
.st-courbe__point.st-courbe--s1 { fill: var(--lien); }
.st-courbe__aire.st-courbe--s1 { fill: var(--cyan); }
.st-courbe__ligne.st-courbe--s2, .st-courbe__point.st-courbe--s2 { stroke: #d98400; }
.st-courbe__point.st-courbe--s2 { fill: #d98400; }
.st-legende { list-style: none; margin: 0 0 .4rem; padding: 0; display: flex; flex-wrap: wrap; gap: .3rem 1rem; font-size: .8rem; color: var(--encre-douce); }
.st-legende li { display: inline-flex; align-items: center; gap: .35rem; }
.st-legende__trait { width: 18px; height: 6px; }

/* Tables (repliées sous un graphique, ou ouvertes) */
.st-table { margin: .6rem 0 0; font-size: .84rem; }
.st-table > summary { cursor: pointer; color: var(--lien); font-weight: 700; font-size: .8rem; }
.st-table__defile { overflow-x: auto; margin-top: .45rem; }
.st-table table { width: 100%; border-collapse: collapse; }
.st-table th, .st-table td { padding: .38rem .55rem; border-bottom: 1px solid var(--trait); text-align: left; white-space: nowrap; }
.st-table thead th { font-size: .74rem; font-weight: 700; color: var(--encre-douce); text-transform: uppercase; letter-spacing: .03em; }
.st-table tbody th { font-weight: 400; }
.st-table .st-nombre { text-align: right; font-variant-numeric: tabular-nums; }
.st-table--ouverte { margin-top: 1rem; }

/* Serveur en direct */
.st-etat { display: flex; align-items: center; flex-wrap: wrap; gap: .35rem .6rem; margin: 0 0 1rem; font-size: .88rem; color: var(--encre-douce); max-width: none; }
.st-etat__maj { margin-left: auto; font-variant-numeric: tabular-nums; }
.st-point { width: .6rem; height: .6rem; border-radius: 50%; flex: none; background: var(--trait); }
.st-point--ok { background: var(--juste); animation: st-pouls 2s ease-in-out infinite; }
.st-point--attention { background: var(--ambre); }
.st-jauges { display: grid; grid-template-columns: repeat(auto-fit, minmax(11.5rem, 1fr)); gap: .8rem; margin: 0 0 1rem; }
.st-jauge {
  position: relative; display: flex; flex-direction: column; align-items: center; gap: .25rem; padding: 1rem .9rem .8rem;
  border-radius: 16px; background: var(--blanc); border: 1px solid var(--trait); text-align: center; min-width: 0;
}
.st-jauge__anneau { width: 7.5rem; height: 7.5rem; }
.st-jauge__fond { fill: none; stroke: var(--cyan-pale); stroke-width: 10; }
.st-jauge__valeur { fill: none; stroke: var(--cyan); stroke-width: 10; stroke-linecap: round; transition: stroke-dasharray .6s ease; }
.st-jauge--attention .st-jauge__valeur { stroke: var(--ambre); }
.st-jauge--critique .st-jauge__valeur { stroke: var(--grenat); }
.st-jauge__centre { position: absolute; top: 1rem; left: 0; right: 0; height: 7.5rem; display: flex; flex-direction: column; align-items: center; justify-content: center; pointer-events: none; }
.st-jauge__centre strong { font: 700 1.4rem/1.1 var(--texte); color: var(--encre); font-variant-numeric: tabular-nums; }
.st-jauge__centre span { font-size: .76rem; color: var(--encre-douce); }
.st-jauge__niveau { display: inline-flex; align-items: center; gap: .25rem; margin: .1rem 0 0; padding: .05rem .5rem; border-radius: 99px; font-size: .72rem; font-weight: 700; background: var(--juste-fond); color: var(--juste); max-width: none; }
.st-jauge--attention .st-jauge__niveau { background: var(--ambre-pale); color: var(--puce-texte); }
.st-jauge--critique .st-jauge__niveau { background: var(--grenat-pale); color: var(--grenat-vif); }
.st-jauge--inconnu .st-jauge__niveau { background: var(--papier); color: var(--encre-douce); }
.st-jauge__detail { margin: 0; font-size: .78rem; color: var(--encre-douce); max-width: none; font-variant-numeric: tabular-nums; }
.st-jauge__trace { display: block; width: 100%; height: 1.5rem; margin-top: auto; }
.st-jauge__trace polyline { fill: none; stroke: var(--lien); stroke-width: 1.5; vector-effect: non-scaling-stroke; stroke-linejoin: round; }
.st-jauge--reseau { justify-content: space-between; }
.st-reseau { display: grid; grid-template-columns: auto 1fr; align-items: baseline; gap: .55rem .7rem; margin: .6rem 0 .4rem; width: 100%; text-align: left; }
.st-reseau__sens { font-size: .8rem; color: var(--encre-douce); white-space: nowrap; }
.st-reseau strong { font: 700 1.25rem/1.1 var(--texte); font-variant-numeric: tabular-nums; justify-self: end; }

/* Comment c'est compté */
.st-methode { display: grid; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); gap: .8rem; margin: 0 0 1.2rem; }
.st-methode__point { padding: 1rem 1.15rem; border-radius: 14px; background: var(--blanc); border: 1px solid var(--trait); }
.st-methode__point h3 { margin: 0 0 .35rem; font-size: .98rem; }
.st-methode__point p { margin: 0; font-size: .88rem; color: var(--encre-douce); max-width: none; }

@media (max-width: 900px) {
  .st { grid-template-columns: minmax(0, 1fr); gap: 1rem; }
  .st-nav {
    position: sticky; top: calc(var(--entete-h, 60px) + var(--fil-h, 3.2rem)); z-index: 20; padding: .45rem; border-radius: 14px;
    margin: 0 -.25rem;
  }
  .st-nav__titre, .st-nav__note { display: none; }
  .st-nav__liste { display: flex; overflow-x: auto; gap: .3rem; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .st-nav__liste::-webkit-scrollbar { display: none; }
  .st-nav__lien { white-space: nowrap; padding: .42rem .7rem; }
  .st-nav__lien.est-actif { box-shadow: inset 0 -3px 0 var(--cyan); }
}
@media (max-width: 640px) {
  .st-deux { grid-template-columns: minmax(0, 1fr); }
  .st-section { padding: 1rem .9rem 1.05rem; border-radius: 14px; }
  .st-tuiles { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; }
  .st-tuile { padding: .65rem .7rem; }
  .st-tuile__valeur { font-size: 1.2rem; }
  .st-jauges { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; }
  .st-jauge__anneau { width: 6rem; height: 6rem; }
  .st-jauge__centre { height: 6rem; }
  .st-jauge__centre strong { font-size: 1.15rem; }
  .st-barres__ligne { grid-template-columns: minmax(0, 1fr) auto; gap: .2rem .6rem; }
  .st-barres__barre { grid-column: 1 / -1; grid-row: 2; }
  .st-reseau { grid-template-columns: minmax(0, 1fr); gap: .05rem; text-align: center; }
  .st-reseau strong { justify-self: center; font-size: 1.08rem; margin-bottom: .35rem; }
  .st-periodes { width: 100%; box-sizing: border-box; justify-content: space-between; }
  .st-periodes__choix { padding: .38rem .45rem; font-size: .8rem; white-space: nowrap; flex: 0 1 auto; }
  .st-periodes__long { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .st-periodes__court { display: inline; }
  .st-etat__maj { margin-left: 0; }
}

/* ==========================================================================
   Statut des cours (site 2.58, 29/10) — « Cours inclus » refait, le questionnaire d'examen, les étiquettes
   (Réussi, À repasser, Examen passé, Cours terminé), la page « État des cours », le bouton « copier ».
   ========================================================================== */
/* -- les étiquettes -- */
.etiquette-statut {
  display: inline-flex; align-items: center; gap: .25rem; flex: none;
  padding: .12rem .45rem .12rem .35rem; border-radius: 999px; border: 1px solid transparent;
  font: 700 .7rem/1.3 var(--titre); white-space: nowrap;
}
.etiquette-statut__icone { width: .85rem; height: .85rem; }
.etiquette-statut--reussi { background: var(--juste-fond); color: var(--juste); border-color: var(--juste-trait); }
.etiquette-statut--rate { background: var(--ambre-pale); color: var(--puce-texte); border-color: var(--puce-bord); }
.etiquette-statut--examen { background: var(--papier); color: var(--encre-douce); border-color: var(--trait); }
.etiquette-statut--termine { background: var(--cyan-pale); color: var(--cyan-fonce); border-color: color-mix(in srgb, var(--cyan) 30%, transparent); }

/* -- « Cours inclus » : deux listes, un interrupteur par cours -- */
.rj-cours-choix { display: grid; gap: .6rem; }
.rj-cours-section { display: grid; gap: .35rem; }
.rj-cours-section__titre { display: flex; align-items: center; gap: .4rem; margin: 0; font: 700 .82rem var(--titre); color: var(--encre); }
.rj-cours-section__n {
  display: inline-grid; place-items: center; min-width: 1.4rem; height: 1.25rem; padding: 0 .3rem; border-radius: 999px;
  background: var(--cyan-pale); color: var(--cyan-fonce); font: 800 .7rem var(--titre);
}
.rj-cours-section--hors .rj-cours-section__n, .rj-cours-hors .rj-cours-section__n { background: var(--papier); color: var(--encre-douce); }
.rj-cours-section__quadri { margin: .35rem 0 0; font: 700 .68rem var(--titre); letter-spacing: .1em; text-transform: uppercase; color: var(--encre-douce); }
.rj-cours-section__vide { margin: 0; padding: .7rem .8rem; border: 1px dashed var(--trait); border-radius: 12px; color: var(--encre-douce); font-size: .85rem; }
.rj-reglages .rj-cours-liste, .rj-cours-liste { list-style: none; margin: 0; padding: 0; border: 1px solid var(--trait); border-radius: 12px; background: var(--blanc); overflow: hidden; }
.rj-cours-liste > li { margin: 0; }
.rj-cours-liste > li + li { border-top: 1px solid var(--trait); }
.rj-cours-ligne {
  display: grid; grid-template-columns: 2.1rem minmax(0, 1fr) auto; align-items: center; gap: .65rem;
  margin: 0; padding: .55rem .7rem; cursor: pointer; color: var(--encre);
}
.rj-cours-ligne > .pastille-numero { justify-self: center; }
.rj-cours-ligne:hover { background: var(--papier); }
.rj-cours-ligne__textes { display: grid; gap: .05rem; min-width: 0; }
.rj-cours-ligne__haut { display: flex; align-items: center; gap: .45rem; min-width: 0; flex-wrap: wrap; }
.rj-cours-ligne__code { font: 700 .88rem var(--titre); }
.rj-cours-ligne__nom { font-size: .8rem; color: var(--encre-douce); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rj-cours-ligne__pourquoi { font-size: .74rem; color: var(--encre-douce); font-style: italic; }
/* éteint : la ligne pâlit (sans bouger) */
.rj-cours-ligne:has(.rj-interrupteur:not(:checked)) .pastille-numero,
.rj-cours-ligne:has(.rj-interrupteur:not(:checked)) .rj-cours-ligne__code { opacity: .5; }
/* l'interrupteur (une case à cocher, rien d'autre : sans JavaScript, elle marche) */
.rj-interrupteur {
  appearance: none; -webkit-appearance: none; flex: none; position: relative; margin: 0; cursor: pointer;
  width: 2.6rem; height: 1.5rem; border-radius: 999px; background: color-mix(in srgb, var(--encre-douce) 35%, var(--blanc));
  transition: background .18s ease;
}
.rj-interrupteur::before {
  content: ""; position: absolute; top: 3px; left: 3px; width: calc(1.5rem - 6px); height: calc(1.5rem - 6px); border-radius: 50%;
  background: #fff; box-shadow: 0 1px 3px rgba(16, 36, 58, .3); transition: transform .18s ease;
}
.rj-interrupteur:checked { background: var(--cyan); }
.rj-interrupteur:checked::before { transform: translateX(1.1rem); }
.rj-interrupteur:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .rj-interrupteur, .rj-interrupteur::before { transition: none; } }
/* « De côté » : repliable, avec pourquoi */
.rj-cours-hors { display: grid; gap: .35rem; }
.rj-cours-hors__tete {
  list-style: none; display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; cursor: pointer;
  padding: .35rem 0; font: 700 .82rem var(--titre); color: var(--encre);
}
.rj-cours-hors__tete::-webkit-details-marker { display: none; }
.rj-cours-hors__tete > span:first-child { display: inline-flex; align-items: center; gap: .4rem; }
.rj-cours-hors__aide { font: 400 .78rem var(--texte); color: var(--encre-douce); }
.rj-cours-hors__chevron { margin-left: auto; color: var(--encre-douce); transition: transform .2s ease; }
.rj-cours-hors[open] .rj-cours-hors__chevron { transform: rotate(180deg); }
.rj-cours-hors .rj-cours-section { margin-top: .1rem; }
.rj-reglages__pied { position: sticky; bottom: 0; margin: 0 -1.2rem -1.2rem; padding: .75rem 1.2rem; background: var(--blanc); border-top: 1px solid var(--trait); }
@media (max-width: 640px) {
  .rj-cours-ligne { padding: .55rem .6rem; gap: .55rem; }
  .rj-cours-ligne__nom { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
}

/* -- « Comment s'est passé votre examen ? » -- */
.rj-examens {
  display: grid; gap: .8rem; margin: 0 0 1rem; padding: 1.05rem 1.2rem 1rem;
  background: var(--blanc); border: 1px solid var(--trait); border-top: 5px solid var(--jauge-juste, #23733d); border-radius: 16px; box-shadow: var(--ombre-drive);
}
.rj-examens .rj__surtitre { color: var(--juste); }
.rj-examens__tete { display: flex; gap: .8rem; align-items: flex-start; }
.rj-examens__icone { flex: none; width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; background: var(--juste-fond); color: var(--juste); }
.rj-examens__icone .icone { width: 1.3rem; height: 1.3rem; }
.rj-examens__titre { margin: .15rem 0 0; font-size: 1.15rem; line-height: 1.3; }
.rj-examens__formulaire { display: grid; gap: .7rem; margin: 0; }
.rj-examens__liste { list-style: none; margin: 0; padding: 0; display: grid; gap: .45rem; }
.rj-examens__ligne {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .5rem 1rem;
  padding: .55rem .7rem; border: 1px solid var(--trait); border-radius: 12px; background: var(--papier);
}
.rj-examens__cours { display: grid; gap: .1rem; min-width: 0; }
.rj-examens__session { font-size: .76rem; color: var(--encre-douce); }
.rj-examens__choix { display: flex; flex-wrap: wrap; gap: .3rem; }
.rj-examens__option { position: relative; margin: 0; cursor: pointer; }
.rj-examens__option input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.rj-examens__option span {
  display: inline-flex; align-items: center; gap: .3rem; padding: .38rem .7rem; border-radius: 999px;
  border: 1px solid var(--trait); background: var(--blanc); font: 700 .78rem var(--titre); color: var(--encre-douce);
}
.rj-examens__option:hover span { border-color: var(--cyan); color: var(--encre); }
.rj-examens__option input:focus-visible + span { outline: 2px solid var(--cyan); outline-offset: 2px; }
.rj-examens__option--reussi input:checked + span { background: var(--juste-fond); border-color: var(--juste); color: var(--juste); }
.rj-examens__option--rate input:checked + span { background: var(--ambre-pale); border-color: var(--ambre); color: var(--puce-texte); }
.rj-examens__option--attente input:checked + span { background: var(--cyan-pale); border-color: var(--cyan); color: var(--cyan-fonce); }
.rj-examens__actions { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; }
@media (max-width: 640px) {
  .rj-examens { padding: 1rem; }
  .rj-examens__ligne { grid-template-columns: minmax(0, 1fr); }
  .rj-examens__choix { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .rj-examens__option span { justify-content: center; padding: .45rem .3rem; font-size: .72rem; text-align: center; }
}

/* -- « État des cours » (staff) -- */
.etat-cours { display: grid; gap: 1rem; padding-bottom: 1rem; }
.etat-cours__groupe { padding: .9rem 1rem; }
.etat-cours__groupe-tete { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: 0 0 .55rem; }
.etat-cours__tout { display: inline-flex; align-items: center; gap: .55rem; margin: 0; font: 700 .95rem var(--titre); cursor: pointer; }
.etat-cours__tout input { width: 1.1rem; height: 1.1rem; margin: 0; accent-color: var(--cyan-fonce); }
.etat-cours__compte { font-size: .8rem; color: var(--encre-douce); }
.etat-cours__liste { list-style: none; margin: 0; padding: 0; border: 1px solid var(--trait); border-radius: 12px; overflow: hidden; background: var(--blanc); }
.etat-cours__liste > li + li { border-top: 1px solid var(--trait); }
.etat-cours__ligne {
  display: grid; grid-template-columns: auto 2.1rem minmax(0, 1fr) minmax(0, 1.1fr); align-items: center; gap: .4rem .75rem;
  margin: 0; padding: .6rem .8rem; cursor: pointer;
}
.etat-cours__ligne:hover { background: var(--papier); }
.etat-cours__ligne:has(input:checked) { background: var(--cyan-pale); }
.etat-cours__ligne > input { width: 1.1rem; height: 1.1rem; margin: 0; accent-color: var(--cyan-fonce); }
.etat-cours__ligne > .pastille-numero { justify-self: center; }
.etat-cours__cours { display: grid; min-width: 0; }
.etat-cours__cours b { font: 700 .9rem var(--titre); }
.etat-cours__cours small { font-size: .78rem; color: var(--encre-douce); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.etat-cours__statut { display: grid; justify-items: start; gap: .15rem; min-width: 0; }
.etat-cours__etat { display: inline-flex; align-items: center; gap: .3rem; padding: .15rem .5rem; border-radius: 999px; font: 700 .74rem var(--titre); border: 1px solid transparent; }
.etat-cours__etat--en-cours { background: var(--papier); color: var(--encre-douce); border-color: var(--trait); }
.etat-cours__etat--termine { background: var(--cyan-pale); color: var(--cyan-fonce); border-color: color-mix(in srgb, var(--cyan) 30%, transparent); }
.etat-cours__etat--evalue { background: var(--juste-fond); color: var(--juste); border-color: var(--juste-trait); }
.etat-cours__detail { font-size: .76rem; color: var(--encre-douce); }
.etat-cours__barre {
  position: sticky; bottom: .75rem; z-index: 20; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .6rem 1rem;
  padding: .75rem 1rem; border: 1px solid var(--trait); border-radius: 14px; background: var(--blanc); box-shadow: 0 8px 28px rgba(16, 36, 58, .16);
}
.etat-cours.a-une-selection .etat-cours__barre { border-color: var(--cyan); }
.etat-cours__selection { margin: 0; font: 700 .88rem var(--titre); }
.etat-cours__actions { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; }
.etat-cours__examen { display: inline-flex; align-items: stretch; }
.etat-cours__examen .bouton { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.etat-cours__examen input[type="date"] {
  border: 1px solid var(--cyan-fonce); border-left: 0; border-radius: 0 10px 10px 0; padding: 0 .55rem; font: inherit; font-size: .88rem;
  background: var(--blanc); color: var(--encre); min-height: 2.6rem;
}
.etat-cours__attente {
  display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; margin: 0 0 1rem; padding: .8rem 1rem;
  border: 1px solid var(--puce-bord); border-radius: 12px; background: var(--ambre-pale); color: var(--encre);
}
.etat-cours__attente > .icone { color: var(--puce-texte); }
.etat-cours__attente p { flex: 1 1 22rem; margin: 0; font-size: .9rem; }
.etat-cours__attente form { margin: 0; }
@media (max-width: 760px) {
  .etat-cours__ligne { grid-template-columns: auto 2.1rem minmax(0, 1fr); }
  .etat-cours__statut { grid-column: 3; }
  .etat-cours__barre { bottom: .5rem; }
}
@media (max-width: 640px) {
  .etat-cours__groupe { padding: .75rem .6rem; }
  .etat-cours__barre { padding: .6rem .7rem; gap: .45rem; }
  .etat-cours__actions { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .45rem .6rem; width: 100%; }
  .etat-cours__examen { grid-column: 1 / -1; order: -1; display: flex; }
  .etat-cours__examen .bouton { flex: 1; }
  .etat-cours__actions .bouton { padding: .5rem .75rem; font-size: .86rem; white-space: nowrap; }
  .etat-cours__examen input[type="date"] { min-height: 0; font-size: .85rem; }
}

/* -- page d'un cours : son état et « Dans ma révision du jour » -- */
.cours-statut { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .9rem; margin: -.35rem 0 1rem; }
.cours-statut__inclusion { display: inline-flex; flex-wrap: wrap; align-items: center; gap: .3rem .6rem; margin: 0; }
.cours-statut__bouton {
  display: inline-flex; align-items: center; gap: .5rem; padding: .3rem .7rem .3rem .35rem; cursor: pointer;
  border: 1px solid var(--trait); border-radius: 999px; background: var(--blanc); color: var(--encre); font: 700 .8rem var(--titre);
}
.cours-statut__bouton:hover { border-color: var(--cyan); }
.cours-statut__bouton:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
.rj-interrupteur-faux { position: relative; width: 2.1rem; height: 1.2rem; border-radius: 999px; background: color-mix(in srgb, var(--encre-douce) 35%, var(--blanc)); }
.rj-interrupteur-faux::before { content: ""; position: absolute; top: 2px; left: 2px; width: calc(1.2rem - 4px); height: calc(1.2rem - 4px); border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(16, 36, 58, .3); }
.est-inclus .rj-interrupteur-faux { background: var(--cyan); }
.est-inclus .rj-interrupteur-faux::before { left: auto; right: 2px; }
.cours-statut__pourquoi { font-size: .78rem; color: var(--encre-douce); font-style: italic; }
.cours-statut__gerer { margin-left: auto; }
@media (max-width: 640px) { .cours-statut__gerer { margin-left: 0; } }
/* dans la chemise ouverte : la ligne d'état fait partie de la carte, entre l'en-tête et les sous-dossiers */
.cours-ouvert > .cours-statut {
  margin: 0; padding: .85rem 1.6rem 0;
  background: var(--teinte-pale, var(--blanc)); border: 1px solid var(--teinte-trait, var(--trait)); border-top: 0; border-bottom: 0;
}
@media (max-width: 640px) { .cours-ouvert > .cours-statut { padding: .75rem 1rem 0; } }
.cours-statut__reponse > summary { list-style: none; }
.cours-statut__reponse > summary::-webkit-details-marker { display: none; }
.cours-statut__reponse form { display: grid; margin: 0; }
.cours-statut__reponse .menu-suivi__choix.est-choisi { background: var(--cyan-pale); color: var(--cyan-fonce); font-weight: 700; }

/* ==========================================================================
   Site 2.59 (30/10) — « rien à réviser » dans « Cette semaine », « Gérer mes cours », « Préparer mon cours »
   ========================================================================== */
.rj-zone__tiret { display: none; font: 800 .85rem/1 var(--titre); color: var(--cyan-fonce); }
.rj-zone--rien { background: var(--cyan-pale); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--cyan) 30%, transparent); }
.rj-zone--rien .rj-zone__tiret { display: block; }
.rj-legende__item--rien::before { background: var(--cyan-pale); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--cyan) 30%, transparent); }

/* « Préparer mon cours » : à gauche du bouton principal, deux lignes (quoi, quel cours et quand) */
.rj-prepa {
  display: inline-flex; align-items: center; gap: .6rem; min-height: 46px; padding: .35rem .95rem .35rem .75rem; border-radius: 10px;
  border: 1px solid var(--trait); background: var(--blanc); color: var(--encre); text-align: left; text-decoration: none; cursor: pointer; font: inherit;
}
.rj-prepa:hover { border-color: var(--cyan); background: var(--cyan-pale); color: var(--encre); }
.rj-prepa:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
.rj-prepa__icone { width: 1.2rem; height: 1.2rem; color: var(--cyan-fonce); }
.rj-prepa__textes { display: grid; gap: .05rem; min-width: 0; }
.rj-prepa__nom { font: 700 .88rem var(--titre); }
.rj-prepa__detail { font-size: .76rem; color: var(--encre-douce); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* la veille et le jour même : bien visible */
.rj-prepa--proche, .rj-prepa--reprendre { border-color: color-mix(in srgb, var(--cyan) 45%, var(--trait)); background: var(--cyan-pale); }
.rj-prepa-form { display: grid; gap: .8rem; }
.rj-prepa-form__aide { margin: 0; font-size: .86rem; color: var(--encre-douce); }
.rj-prepa-liste__heure { font: 700 .72rem var(--titre); color: var(--cyan-fonce); background: var(--cyan-pale); border-radius: 999px; padding: .1rem .45rem; }
.rj-cours-ligne.est-vide { cursor: default; opacity: .7; }
@media (max-width: 640px) {
  .rj__pied { display: grid; grid-template-columns: minmax(0, 1fr); }
  .rj__pied .rj-prepa, .rj__pied .rj__go, .rj__pied .rj-lancer { width: 100%; }
  .rj-prepa { justify-content: flex-start; }
}
