/* core/base.css

   Socle : remise à zéro, typographie de base, focus visible, mouvement réduit.

   Chargé par index.html, dans l'ordre de css/README.md. Ne pas changer cet
   ordre sans relire la section « Ordre de chargement ». */

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--sans);
  font-size: var(--fs-4);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

[hidden] { display: none !important; }

button, input, select, textarea { font: inherit; color: inherit; }

:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

::-webkit-scrollbar { width: 10px; height: 10px; }

::-webkit-scrollbar-track { background: var(--bg); }

::-webkit-scrollbar-thumb { background: var(--border); }

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
}

/* =========================================================
   Tableau de bord enseignant
   ========================================================= */

.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* =========================================================
   Structure de page et en-tête
   ---------------------------------------------------------
   L'en-tête est collant mais reste dans le flux : il occupe sa propre
   hauteur, et le contenu commence dessous sans marge compensatoire. Aucune
   hauteur n'est supposée. Les ancres s'arrêtent sous l'en-tête grâce à
   scroll-padding-top, alimenté par la hauteur mesurée.
   ========================================================= */

html { scroll-padding-top: calc(var(--header-h) + var(--s-4)); }

/* Icônes : elles suivent la taille et la couleur du texte autour. */
.icon {
  width: 1.25em;
  height: 1.25em;
  flex: 0 0 auto;
  display: block;
}
