/* ==================================================================
   Thème commun de la plateforme « Mes cours » — M. Courcelle
   ------------------------------------------------------------------
   Une seule feuille pour toute la plateforme : la page d'aiguillage,
   les index de classe et les pages de module partagent ces jetons,
   cette typographie et ces composants. Les feuilles spécialisées
   (exercices-commune.css, jeux-differenciee.css, atelier-texte.css)
   ne redéfinissent jamais une couleur en dur : elles consomment les
   variables déclarées ici.

   Pour ajouter une classe :
     1. un couple --xxx-fond / --xxx-trait / --xxx-encre dans :root ;
     2. une règle .classe-xxx plus bas ;
     3. les règles de la tuile (.classe--xxx) dans index.html.
   ================================================================== */

:root {
  /* --- encres et papiers ------------------------------------------ */
  --encre: #16302B;          /* texte principal, vert très sombre */
  --encre-douce: #3E5751;    /* texte secondaire, AA sur tous les fonds */
  --papier: #FBFCFB;         /* fond de page */
  --blanc: #FFFFFF;          /* fond des cartes et des champs */
  --trait: #D5DEDA;          /* bordures neutres */
  --trait-fort: #B3C2BC;

  /* --- couleurs par classe ---------------------------------------- */
  /* -fond : aplat pâle ; -trait : filet vif, jamais du texte ;
     -encre : variante sombre du filet, contraste AA pour du texte.   */
  --tc-fond: #FBE1E7;   --tc-trait: #D6336C;   --tc-encre: #B82A59;
  --diff-fond: #DDF5EC; --diff-trait: #05BC8A; --diff-encre: #036F51;
  --comm-fond: #FDF0CF; --comm-trait: #E0A100; --comm-encre: #7F5B00;
  --ts-fond: #DFEAFB;   --ts-trait: #2F6FDB;   --ts-encre: #215FC2;
  --ae-fond: #F1E3F7;   --ae-trait: #9B4DCA;   --ae-encre: #8840B4;

  /* --- couleurs de verdict ---------------------------------------- */
  --juste: #1E7A4C;
  --juste-fond: #E3F3EA;
  --erreur: #B0322A;
  --erreur-fond: #F9E5E3;
  --cible: #F5C542;          /* surlignage, marqueur */
  --cible-fond: #FDF6E1;

  /* --- accent courant --------------------------------------------- */
  /* Neutre par défaut ; chaque page de classe le remplace en posant
     une classe .classe-xxx sur <body>. Tout le reste de la plateforme
     ne connaît que --accent, --accent-fond et --accent-encre.        */
  --accent: var(--encre);
  --accent-fond: #EDF2F0;
  --accent-encre: var(--encre);

  /* --- typographie ------------------------------------------------- */
  --police-titre: "JetBrains Mono", ui-monospace, "Cascadia Code", Consolas, monospace;
  --police-texte: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --police-doc: Cambria, Georgia, "Times New Roman", serif;  /* specimens de traitement de texte */

  /* --- mesures ------------------------------------------------------ */
  --lecture: 64ch;           /* largeur de confort d'un paragraphe */
  --page: 58rem;             /* largeur de la colonne de contenu */
  --gouttiere: 1.5rem;       /* marge latérale, identique partout */
  --base: 17px;
}

/* Identité de classe : posée sur <body>. */
.classe-tc   { --accent: var(--tc-trait);   --accent-fond: var(--tc-fond);   --accent-encre: var(--tc-encre); }
.classe-diff { --accent: var(--diff-trait); --accent-fond: var(--diff-fond); --accent-encre: var(--diff-encre); }
.classe-comm { --accent: var(--comm-trait); --accent-fond: var(--comm-fond); --accent-encre: var(--comm-encre); }
.classe-ts   { --accent: var(--ts-trait);   --accent-fond: var(--ts-fond);   --accent-encre: var(--ts-encre); }
.classe-ae   { --accent: var(--ae-trait);   --accent-fond: var(--ae-fond);   --accent-encre: var(--ae-encre); }

/* ==================================================================
   Base
   ================================================================== */

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

html {
  font-size: var(--base);
  scroll-behavior: smooth;
  scroll-padding-top: 1rem;
}

body {
  margin: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  background: var(--papier);
  color: var(--encre);
  font-family: var(--police-texte);
  font-size: 1rem;
  line-height: 1.55;
  -webkit-text-size-adjust: 100%;
}

/* Mode projection : agrandit toute la page d'un coup pour le TBI.
   Le jeton doit être posé sur <html> et non sur <body> : c'est <html>
   qui porte font-size, et donc la valeur du rem pour toute la page. */
html.projection { --base: 25px; }

p, ul, ol { max-width: var(--lecture); }
p { margin: 0 0 .9rem; }
li { margin-bottom: .35rem; }

a { color: var(--accent-encre); }
a:hover { text-decoration-thickness: 2px; }

strong { font-weight: 600; }

code, kbd {
  font-family: ui-monospace, "JetBrains Mono", Consolas, "Courier New", monospace;
  font-size: .92em;
  background: var(--accent-fond);
  padding: .05rem .3rem;
  border-radius: .2rem;
}

:focus-visible {
  outline: 3px solid var(--accent-encre);
  outline-offset: 2px;
}

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

/* ==================================================================
   En-tête de page
   Fil d'Ariane, titre, sous-titre, et le filet de couleur de la
   classe — le même motif que les tuiles de la page d'accueil.
   ================================================================== */

.entete {
  background: var(--blanc);
  border-bottom: .5rem solid var(--accent);
}

.entete__interieur {
  max-width: calc(var(--page) + 2 * var(--gouttiere));
  margin: 0 auto;
  padding: 1rem var(--gouttiere) 1.1rem;
}

.ariane {
  font-size: .85rem;
  color: var(--encre-douce);
  margin-bottom: .5rem;
}
.ariane a { color: var(--encre-douce); }
.ariane a:hover { color: var(--accent-encre); }
.ariane span[aria-hidden] { padding: 0 .35rem; color: var(--trait-fort); }
.ariane strong { color: var(--encre); font-weight: 600; }

.entete h1 {
  margin: 0;
  font-family: var(--police-titre);
  font-size: clamp(1.35rem, 3.2vw, 1.9rem);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.15;
}

.entete__meta {
  margin: .35rem 0 0;
  max-width: none;
  color: var(--encre-douce);
  font-size: .95rem;
}

/* Outils à droite du titre (bouton « Agrandir », par exemple) */
.entete__barre {
  display: flex;
  flex-wrap: wrap;
  gap: .6rem 1.2rem;
  align-items: flex-end;
  justify-content: space-between;
}

/* ==================================================================
   Corps de page
   ================================================================== */

.contenu {
  flex: 1;
  width: 100%;
  max-width: calc(var(--page) + 2 * var(--gouttiere));
  margin: 0 auto;
  padding: 2rem var(--gouttiere) 4rem;
}

.chapeau {
  font-size: 1.08rem;
  color: var(--encre-douce);
  max-width: var(--lecture);
}

h2 {
  font-family: var(--police-titre);
  font-size: clamp(1.15rem, 2.6vw, 1.45rem);
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.25;
  margin: 2.8rem 0 .8rem;
  padding-top: .8rem;
  border-top: 2px solid var(--accent);
  max-width: var(--lecture);
}

.contenu > h2:first-child,
section > h2:first-child,
.inner > h2:first-child {
  border-top: 0;
  padding-top: 0;
  margin-top: .5rem;
}

h3 {
  font-family: var(--police-titre);
  font-size: 1.02rem;
  font-weight: 700;
  margin: 1.8rem 0 .5rem;
  color: var(--accent-encre);
}

h4 {
  font-size: .95rem;
  font-weight: 600;
  margin: 1.2rem 0 .4rem;
}

/* ==================================================================
   Encadrés
   .encadre            rappel neutre
   .encadre--theorie   ce qu'il faut savoir avant de jouer
   .encadre--cle       la règle à retenir
   .encadre--attention piège fréquent
   ================================================================== */

.encadre {
  background: var(--accent-fond);
  border-left: .4rem solid var(--accent);
  border-radius: 0 .4rem .4rem 0;
  padding: .9rem 1.1rem;
  margin: 1.4rem 0;
  max-width: var(--lecture);
}
.encadre > :first-child { margin-top: 0; }
.encadre > :last-child { margin-bottom: 0; }
.encadre h3 { margin-top: 0; color: var(--encre); }

.encadre--theorie { background: var(--accent-fond); }
.encadre--cle { background: var(--cible-fond); border-left-color: var(--cible); }
.encadre--attention { background: var(--erreur-fond); border-left-color: var(--erreur); }

/* ==================================================================
   Boutons
   ================================================================== */

.action {
  font: inherit;
  font-weight: 600;
  font-size: .95rem;
  background: var(--encre);
  color: var(--papier);
  border: 2px solid var(--encre);
  border-radius: .4rem;
  padding: .5rem 1.05rem;
  cursor: pointer;
}
.action:hover { background: var(--accent-encre); border-color: var(--accent-encre); }

.action--secondaire {
  background: var(--blanc);
  color: var(--encre);
}
.action--secondaire:hover { background: var(--encre); color: var(--papier); border-color: var(--encre); }

.action[disabled] { opacity: .5; cursor: default; }
.action[disabled]:hover { background: var(--encre); border-color: var(--encre); }

.actions {
  display: flex;
  gap: .5rem;
  flex-wrap: wrap;
  margin: .9rem 0;
}

/* ==================================================================
   Sommaire d'un module (bandeau de blocs / de séances)
   ================================================================== */

.sommaire {
  background: var(--accent-fond);
  border-bottom: 1px solid var(--trait);
}

.sommaire__interieur {
  max-width: calc(var(--page) + 2 * var(--gouttiere));
  margin: 0 auto;
  padding: .7rem var(--gouttiere);
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
}

.sommaire a,
.sommaire button {
  font: inherit;
  font-size: .9rem;
  font-weight: 600;
  text-decoration: none;
  color: var(--encre);
  background: var(--blanc);
  border: 1px solid var(--trait-fort);
  border-radius: .35rem;
  padding: .35rem .8rem;
  cursor: pointer;
}
.sommaire a:hover,
.sommaire button:hover { border-color: var(--encre); }

.sommaire a[aria-current="page"],
.sommaire button[aria-current="true"] {
  background: var(--encre);
  border-color: var(--encre);
  color: var(--papier);
}

/* ==================================================================
   Index de classe : la liste des modules
   Un <li class="module"> par module. Voir le gabarit en commentaire
   dans chaque index de classe.
   ================================================================== */

.modules {
  list-style: none;
  padding: 0;
  margin: 1.2rem 0 0;
  max-width: none;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr));
  gap: 1rem;
}

.module { margin: 0; }

.module__lien {
  display: flex;
  flex-direction: column;
  height: 100%;
  gap: .3rem;
  background: var(--blanc);
  border: 1px solid var(--trait);
  border-top: .4rem solid var(--accent);
  border-radius: .5rem;
  padding: 1.1rem 1.2rem 1.2rem;
  color: var(--encre);
  text-decoration: none;
}
@media (hover: hover) {
  .module__lien:hover { border-color: var(--accent); border-top-color: var(--accent); }
  .module__lien:hover .module__titre { text-decoration: underline; text-decoration-thickness: 2px; }
}

.module__num {
  font-family: var(--police-titre);
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--accent-encre);
}

.module__titre {
  font-family: var(--police-titre);
  font-size: 1.12rem;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}

.module__resume {
  color: var(--encre-douce);
  font-size: .95rem;
  margin-top: .2rem;
}

.module__meta {
  margin-top: auto;
  padding-top: .8rem;
  color: var(--encre-douce);
  font-size: .85rem;
}

/* Module annoncé mais pas encore en ligne : même carte, sans lien. */
.module--bientot .module__lien {
  border-top-color: var(--trait-fort);
  background: var(--papier);
  color: var(--encre-douce);
  cursor: default;
}
.module--bientot .module__num { color: var(--encre-douce); }

/* Classe sans aucun module publié */
.vide {
  background: var(--blanc);
  border: 2px dashed var(--trait-fort);
  border-radius: .5rem;
  padding: 2rem 1.5rem;
  text-align: center;
  color: var(--encre-douce);
  max-width: none;
}

/* ==================================================================
   Tableaux, figures, captures
   ================================================================== */

table {
  border-collapse: collapse;
  width: 100%;
  max-width: var(--lecture);
  margin: 1.2rem 0;
  font-size: .95rem;
}
th, td {
  border-bottom: 1px solid var(--trait);
  padding: .45rem .6rem;
  text-align: left;
  vertical-align: top;
}
th {
  background: var(--accent-fond);
  border-bottom: 2px solid var(--accent);
  font-weight: 600;
}

figure {
  margin: 1.4rem 0;
  max-width: var(--lecture);
}
figure img {
  width: 100%;
  display: block;
  border: 1px solid var(--trait);
  border-radius: .3rem;
}
figcaption {
  font-size: .86rem;
  color: var(--encre-douce);
  margin-top: .4rem;
}

/* Capture pas encore déposée : la page reste lisible et dit quoi ajouter. */
.manque {
  border: 2px dashed var(--trait-fort);
  background: var(--papier);
  border-radius: .3rem;
  padding: 2rem 1rem;
  text-align: center;
  color: var(--encre-douce);
  font-size: .9rem;
}

/* ==================================================================
   Pied de page
   ================================================================== */

.pied {
  border-top: 1px solid var(--trait);
  background: var(--blanc);
  color: var(--encre-douce);
  font-size: .88rem;
}
.pied__interieur {
  max-width: calc(var(--page) + 2 * var(--gouttiere));
  margin: 0 auto;
  padding: 1.2rem var(--gouttiere) 2rem;
}
.pied a { color: var(--encre-douce); }

/* ==================================================================
   Impression
   ================================================================== */

@media print {
  body { background: #fff; }
  .sommaire, .action, .actions, .entete__barre button { display: none; }
  .entete { border-bottom-width: 2px; }
  .contenu { max-width: none; padding: 0; }
}
