/* ==========================================================================
   Emploi du temps élèves (§9.3).

   Aucune couleur en dur : tout vient de tokens.css. Deux mises en page pour un
   même contenu — un tableau créneaux × jours au-dessus de 900 px, une liste
   d'un jour à la fois en dessous. Le §6 interdit le défilement horizontal, et
   cinq jours de onze créneaux ne tiennent pas dans 375 px.

   Le préfixe est « edt » et non « emploi-du-temps » : ces classes apparaissent
   des dizaines de fois par grille, et un nom de quarante caractères rendrait
   les vues illisibles pour rien.
   ========================================================================== */

/* --- Bandeau du détecteur de conflits -------------------------------------- */

.edt__bandeau {
  padding: calc(var(--pas) * 3);
  border: 1px solid var(--bordure);
  border-radius: var(--r-md);
  background: var(--carte);
  display: grid;
  gap: calc(var(--pas) * 2);
}
.edt__bandeau--calme { border-color: color-mix(in srgb, var(--succes) 45%, var(--bordure)); background: var(--succes-doux); }
.edt__bandeau--alerte { border-color: var(--alerte); background: var(--alerte-doux); }

.edt__bandeau-titre {
  display: flex;
  align-items: center;
  gap: calc(var(--pas) * 2);
  font-weight: 600;
  font-family: var(--police-titre);
}
.edt__bandeau-titre svg { width: 1.15rem; height: 1.15rem; flex: none; }

.edt__conflits { display: grid; gap: calc(var(--pas) * 1); }
.edt__conflit { font-size: 0.85rem; line-height: 1.45; }
.edt__conflit-phrase { display: block; }

.edt__trous summary { cursor: pointer; font-size: 0.85rem; min-height: var(--cible-tactile); display: flex; align-items: center; }
.edt__trous-liste {
  display: grid;
  gap: calc(var(--pas) * 0.5);
  margin-top: calc(var(--pas) * 2);
  font-size: 0.8rem;
  color: var(--texte-doux);
}

/* --- Sélecteur de jour ----------------------------------------------------- */

/* Il pilote la liste mobile ; en vue Synthèse il choisit le jour comparé et
   reste utile sur grand écran. La variante « mobile » est celle de la vue par
   classe, où le tableau montre déjà la semaine entière. */
.edt__selecteur-jour { flex-wrap: wrap; }

@media (min-width: 900px) {
  .edt__selecteur-jour--mobile { display: none; }
}

/* --- Les deux mises en page ------------------------------------------------ */

.edt__grille { display: grid; }
.edt__enveloppe { display: none; }
.edt__jours { display: grid; }

@media (min-width: 900px) {
  .edt__enveloppe { display: block; overflow-x: auto; }
  .edt__jours { display: none; }
  /* En vue par classe, le sélecteur de jour ne sert plus : le tableau montre
     la semaine entière. La vue Synthèse le garde — voir .edt__table--synthese. */
  .edt__grille ~ * .edt__selecteur-jour { display: flex; }
}

/* --- Tableau --------------------------------------------------------------- */

.edt__table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 0.85rem;
}
.edt__table th,
.edt__table td {
  padding: calc(var(--pas) * 1.5);
  border-bottom: 1px solid var(--bordure);
  text-align: left;
  vertical-align: top;
}
.edt__table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--carte);
  border-bottom: 2px solid var(--bordure);
  white-space: nowrap;
  font-family: var(--police-titre);
}
.edt__table--synthese { font-size: 0.8rem; }

.edt__horaire {
  background: var(--carte-douce);
  white-space: nowrap;
  font-weight: 500;
  min-width: 7.5rem;
}
.edt__numero {
  display: inline-grid;
  place-items: center;
  width: 1.35rem;
  height: 1.35rem;
  margin-right: calc(var(--pas) * 1);
  border-radius: var(--r-pill);
  background: var(--primaire-clair);
  color: var(--primaire-profond);
  font-size: 0.72rem;
  font-weight: 600;
}

.edt__ligne-pause td { background: color-mix(in srgb, var(--neutre) 6%, transparent); }
.edt__pause {
  font-size: 0.75rem;
  color: var(--texte-tenu);
  text-align: center;
  font-style: italic;
}

.edt__case { min-width: 9.5rem; }
.edt__case.est-vide { background: color-mix(in srgb, var(--neutre) 4%, transparent); }
.edt__case.est-survolee { background: var(--primaire-clair); outline: 2px dashed var(--primaire); }

/* --- Le cours lui-même ---------------------------------------------------- */

.edt__cours {
  display: grid;
  gap: 2px;
  width: 100%;
  min-height: var(--cible-tactile);
  padding: calc(var(--pas) * 1.5);
  font: inherit;
  color: inherit;
  text-align: left;
  border: 1px solid var(--bordure);
  border-left: 3px solid var(--primaire-moyen);
  border-radius: var(--r-sm);
  background: var(--carte);
  transition: background var(--duree-anim) ease, border-color var(--duree-anim) ease;
}
button.edt__cours { cursor: pointer; }
button.edt__cours:hover { background: var(--survol); border-color: var(--primaire); }
.edt__cours.est-partage { border-left-color: var(--succes); }
.edt__cours.est-portee { opacity: 0.45; }

.edt__matiere { font-weight: 600; line-height: 1.3; }
.edt__matiere-he {
  font-family: var(--police-hebreu);
  font-size: 0.78rem;
  color: var(--texte-doux);
  line-height: 1.4;
}
.edt__enseignant { font-size: 0.78rem; color: var(--texte-doux); line-height: 1.35; }
.edt__enseignant--absent { font-style: italic; color: var(--texte-tenu); }

.edt__pied { display: flex; flex-wrap: wrap; gap: calc(var(--pas) * 1); margin-top: 2px; }
.edt__salle,
.edt__groupe,
.edt__partage {
  font-size: 0.7rem;
  padding: 1px calc(var(--pas) * 1.5);
  border-radius: var(--r-pill);
  background: var(--carte-douce);
  color: var(--texte-doux);
  border: 1px solid var(--bordure);
}
.edt__groupe { background: var(--primaire-clair); color: var(--primaire-profond); border-color: var(--primaire-moyen); }
.edt__partage { background: var(--succes-doux); color: var(--succes); border-color: color-mix(in srgb, var(--succes) 40%, transparent); }

/* --- Case vide, case signalée --------------------------------------------- */

.edt__vide { color: var(--texte-tenu); font-size: 0.85rem; }

.edt__poser {
  display: grid;
  place-items: center;
  width: 100%;
  min-height: var(--cible-tactile);
  cursor: pointer;
  color: var(--texte-tenu);
  border: 1px dashed var(--bordure);
  border-radius: var(--r-sm);
  background: transparent;
  transition: color var(--duree-anim) ease, border-color var(--duree-anim) ease;
}
.edt__poser:hover { color: var(--primaire-profond); border-color: var(--primaire); background: var(--primaire-clair); }
.edt__poser svg { width: 1.1rem; height: 1.1rem; }
/* Le bouton « ajouter un groupe parallèle » reste une cible tactile pleine :
   le §6 ne fait pas d'exception pour les actions secondaires, et un bouton de
   31 px se rate au doigt aussi sûrement qu'un bouton principal. */
.edt__poser--secondaire { margin-top: calc(var(--pas) * 1); }

.edt__signale {
  display: flex;
  align-items: center;
  gap: calc(var(--pas) * 1);
  width: 100%;
  min-height: var(--cible-tactile);
  padding: calc(var(--pas) * 1.5);
  font: inherit;
  font-size: 0.78rem;
  text-align: left;
  color: var(--alerte);
  border: 1px dashed var(--alerte);
  border-radius: var(--r-sm);
  background: var(--alerte-doux);
}
button.edt__signale { cursor: pointer; }
.edt__signale svg { width: 1rem; height: 1rem; flex: none; }

/* --- Liste par jour (mobile) ---------------------------------------------- */

/* Un seul bloc à la fois : le sélecteur de jour désigne lequel. */
.edt__bloc { display: none; }
.edt__bloc.est-actif { display: block; }

.edt__liste { display: grid; gap: calc(var(--pas) * 2); }
.edt__carte {
  display: grid;
  grid-template-columns: 5.5rem 1fr;
  align-items: start;
  gap: calc(var(--pas) * 2);
  padding: calc(var(--pas) * 2) 0;
  border-bottom: 1px solid var(--bordure);
}
.edt__carte:last-child { border-bottom: 0; }
.edt__carte-horaire { font-size: 0.78rem; color: var(--texte-tenu); padding-top: calc(var(--pas) * 1.5); }
.edt__carte-corps { display: grid; gap: calc(var(--pas) * 1); min-width: 0; }

/* --- Panneau de saisie ---------------------------------------------------- */

.edt__bascule { display: flex; justify-content: flex-end; }

.edt__candidats {
  display: grid;
  gap: 0;
  max-height: 16rem;
  overflow-y: auto;
  border: 1px solid var(--bordure);
  border-radius: var(--r-sm);
}
.edt__candidats--classes { max-height: 11rem; }

.edt__candidat {
  display: flex;
  align-items: center;
  gap: calc(var(--pas) * 2);
  padding: 0 calc(var(--pas) * 2);
  min-height: var(--cible-tactile);
  border-bottom: 1px solid var(--bordure);
}
.edt__candidat:last-child { border-bottom: 0; }
.edt__candidat.est-indisponible { background: var(--carte-douce); color: var(--texte-tenu); }

.edt__candidat-choix {
  display: flex;
  align-items: center;
  gap: calc(var(--pas) * 2);
  flex: 1;
  min-width: 0;
  min-height: var(--cible-tactile);
  cursor: pointer;
}
.edt__candidat-nom { font-size: 0.9rem; }
.edt__candidat-motif { font-size: 0.72rem; color: var(--texte-tenu); text-align: right; }
.edt__candidat-note { font-size: 0.7rem; color: var(--alerte); }

.edt__rapport-titre { font-family: var(--police-titre); font-size: 0.9rem; font-weight: 600; }

/* --- Charge hebdomadaire -------------------------------------------------- */

.edt__charge--choisi { background: var(--primaire-clair); }

/* --- Impression : la grille au mur --------------------------------------- */

@media print {
  .edt__enveloppe { display: block; }
  .edt__jours,
  .edt__selecteur-jour,
  .edt__bandeau,
  .edt__poser,
  .barre-outils__actions { display: none; }
  .edt__cours { border-left-width: 2px; background: transparent; }
  .edt__table { font-size: 0.72rem; }
}
