/* Prépa Excellence — écrans de l'application (compte, espace parent, direction). S'ajoute à site.css. */
body.app { background: var(--brume); min-height: 100vh; display: flex; flex-direction: column; }
body.fige { overflow: hidden; }
.app .entete { background: #fff; border-bottom: 1px solid var(--trait); }
.app .entete .conteneur { height: 66px; }
.app main { flex: 1; padding: 32px 0 64px; }
.app .pied-app { text-align: center; font-size: 12.5px; color: var(--doux); padding: 18px 0 26px; }
.outils-entete { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.btn-petit { min-height: 38px; padding: 0 14px; font-size: 14px; border-radius: 10px; }
.btn-icone { width: 40px; height: 40px; border-radius: 10px; border: 1px solid transparent; background: transparent; display: inline-grid; place-items: center; cursor: pointer; color: var(--doux); }
.btn-icone:hover { background: var(--brume); color: var(--encre); }
.btn-lien { background: none; border: 0; padding: 0; color: var(--marine-2); font: 600 14.5px var(--police); cursor: pointer; text-decoration: underline; text-underline-offset: 3px; }
.btn.occupe { position: relative; color: transparent !important; }
.btn.occupe::after { content: ""; position: absolute; width: 18px; height: 18px; border-radius: 50%; border: 2.5px solid currentColor; border-color: var(--marine) transparent var(--marine) transparent; animation: tourne .8s linear infinite; }
.btn-primaire.occupe::after, .btn-wa.occupe::after { border-color: #fff transparent #fff transparent; }
@keyframes tourne { to { transform: rotate(360deg); } }
.etroit { max-width: 520px; margin: 0 auto; }
.moyen { max-width: 760px; margin: 0 auto; }
.boite { background: #fff; border: 1px solid var(--trait); border-radius: var(--r-xl); padding: 30px; box-shadow: var(--ombre-2); }
@media (max-width: 560px) { .boite { padding: 22px 18px; border-radius: 18px; } .app main { padding-top: 20px; } }
.boite h1 { font-size: 28px; margin-bottom: 6px; }
.boite > .chapo { color: var(--doux); font-size: 15.5px; margin-bottom: 22px; }
.erreur-form { background: #FDECEA; color: #8A1C12; border-radius: 10px; padding: 10px 14px; font-size: 14px; margin-top: 14px; }
.separateur { display: flex; align-items: center; gap: 12px; color: var(--doux); font-size: 13px; margin: 20px 0; }
.separateur::before, .separateur::after { content: ""; flex: 1; height: 1px; background: var(--trait); }
.bascule { text-align: center; margin-top: 18px; font-size: 14.5px; color: var(--doux); }
.google { display: flex; justify-content: center; min-height: 44px; }
.mdp { position: relative; }
.mdp .saisie { padding-right: 48px; }
.mdp .btn-icone { position: absolute; right: 4px; top: 4px; }

/* Étapes d'inscription */
.etapes { display: flex; gap: 8px; margin: 0 0 22px; padding: 0; list-style: none; counter-reset: e; }
.etapes li { flex: 1; font-size: 12.5px; font-weight: 600; color: var(--doux); display: grid; gap: 7px; }
.etapes li::before { content: ""; height: 5px; border-radius: 99px; background: var(--trait); }
.etapes li.fait::before { background: var(--marine-2); }
.etapes li.en-cours::before { background: var(--or); }
.etapes li.en-cours { color: var(--encre); }

/* Paiement */
.recap { background: var(--brume); border-radius: 14px; padding: 16px 18px; display: grid; gap: 8px; font-size: 14.5px; margin-bottom: 20px; }
.recap div { display: flex; justify-content: space-between; gap: 12px; }
.recap .total { border-top: 1px dashed var(--trait-fort); padding-top: 10px; font-weight: 700; color: var(--encre); font-size: 17px; }
.operateur { font-size: 13px; font-weight: 600; color: var(--ok); min-height: 18px; }
.choix-montants { display: grid; gap: 8px; margin-bottom: 18px; }
.choix-montants label { display: flex; align-items: center; gap: 12px; border: 1px solid var(--trait-fort); border-radius: 12px; padding: 12px 14px; cursor: pointer; }
.choix-montants label:has(input:checked) { border-color: var(--marine-2); box-shadow: 0 0 0 3px color-mix(in srgb, var(--marine-2) 14%, transparent); }
.choix-montants input { accent-color: var(--marine-2); width: 18px; height: 18px; }
.choix-montants span { flex: 1; }
.choix-montants b { color: var(--encre); }
.attente { text-align: center; padding: 10px 0; }
.attente .anneau { width: 64px; height: 64px; border-radius: 50%; border: 4px solid var(--marine-pale); border-top-color: var(--or); animation: tourne 1s linear infinite; margin: 6px auto 18px; }
.rond-ok { width: 72px; height: 72px; border-radius: 50%; background: var(--ok-pale); color: var(--ok); display: grid; place-items: center; margin: 4px auto 16px; }
.rond-ok .lucide { width: 34px; height: 34px; stroke-width: 2.4; }
.bandeau-simulation { background: var(--alerte-pale); color: #7A3E06; border: 1px solid #F6D7A7; border-radius: 12px; padding: 12px 14px; font-size: 13.5px; margin: 16px 0; text-align: left; }
.bandeau-simulation b { display: block; margin-bottom: 2px; }
.actions-pile { display: grid; gap: 10px; margin-top: 18px; }

/* Espace parent */
.salut { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 14px; margin-bottom: 20px; }
.salut h1 { font-size: clamp(24px, 3vw, 32px); }
.salut p { color: var(--doux); margin: 4px 0 0; }
.enfants-onglets { display: flex; gap: 8px; overflow-x: auto; margin-bottom: 18px; padding-bottom: 2px; }
.enfants-onglets button { flex: none; border: 1px solid var(--trait-fort); background: #fff; border-radius: 99px; padding: 8px 16px; font: 600 14px var(--police); color: var(--texte); cursor: pointer; }
.enfants-onglets button[aria-selected="true"] { background: var(--marine); border-color: var(--marine); color: #fff; }
.tableau-parent { display: grid; grid-template-columns: 1.15fr .85fr; gap: 18px; align-items: start; }
@media (max-width: 900px) { .tableau-parent { grid-template-columns: 1fr; } }
.colonne { display: grid; gap: 18px; }
.bloc { background: #fff; border: 1px solid var(--trait); border-radius: var(--r-l); padding: 22px; box-shadow: var(--ombre-1); }
.bloc-tete { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.bloc-tete h2 { font: 700 17px var(--police); flex: 1; }
.bloc-tete .lucide { color: var(--marine-2); }
.eleve-carte { background: var(--marine); color: #C9D6EE; border-radius: var(--r-l); padding: 22px; position: relative; overflow: hidden; }
.eleve-carte::before { content: ""; position: absolute; inset: 0; background: radial-gradient(420px 220px at 100% 0%, rgba(42,85,181,.9), transparent 60%); }
.eleve-carte > * { position: relative; }
.eleve-carte h2 { color: #fff; font-size: 24px; }
.eleve-carte .lignes { display: flex; flex-wrap: wrap; gap: 8px 18px; margin-top: 10px; font-size: 14px; }
.eleve-carte .lignes span { display: inline-flex; gap: 7px; align-items: center; }
.eleve-carte .lucide { width: 17px; height: 17px; color: var(--or-2); }
.etat-paiement { display: flex; align-items: center; gap: 14px; padding: 14px; border-radius: 12px; margin-bottom: 14px; }
.etat-paiement.ok { background: var(--ok-pale); color: #14532D; }
.etat-paiement.retard { background: #FDECEA; color: #8A1C12; }
.etat-paiement.info { background: var(--marine-pale); color: var(--marine); }
.etat-paiement b { display: block; font-size: 16px; }
.etat-paiement small { font-size: 13px; }
.liste { list-style: none; margin: 0; padding: 0; }
.liste li { display: flex; align-items: center; gap: 12px; padding: 11px 0; border-bottom: 1px solid #EEF2F1; font-size: 14.5px; }
.liste li:last-child { border-bottom: 0; }
.liste .quand { min-width: 74px; font-weight: 700; color: var(--marine-2); font-size: 13px; }
.liste .grandit { flex: 1; min-width: 0; }
.liste small { display: block; color: var(--doux); font-size: 12.5px; }
.vide { color: var(--doux); font-size: 14px; padding: 6px 0; }
.edt { display: grid; gap: 10px; }
.edt-jour { display: grid; grid-template-columns: 92px 1fr; gap: 10px; align-items: start; }
.edt-jour > b { font-size: 13.5px; color: var(--encre); padding-top: 8px; }
.edt-jour ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.edt-jour li { background: var(--brume); border-radius: 10px; padding: 8px 12px; font-size: 14px; display: flex; gap: 10px; }
.edt-jour li span { color: var(--doux); font-variant-numeric: tabular-nums; min-width: 92px; }
.annonce { padding: 12px 0; border-bottom: 1px solid #EEF2F1; }
.annonce:last-child { border-bottom: 0; }
.annonce b { color: var(--encre); }
.annonce p { margin: 4px 0 0; font-size: 14.5px; white-space: pre-line; }
.annonce small { color: var(--doux); font-size: 12.5px; }

/* Fenêtre */
.voile { position: fixed; inset: 0; background: rgba(15,32,51,.45); z-index: 100; display: flex; align-items: flex-start; justify-content: center; padding: 6vh 16px; overflow-y: auto; animation: apparait .15s ease both; }
.fenetre { background: #fff; border-radius: 18px; width: 100%; max-width: 520px; box-shadow: var(--ombre-3); }
.fenetre.large { max-width: 860px; }
.fenetre-tete { display: flex; align-items: center; gap: 10px; padding: 16px 16px 0 22px; }
.fenetre-tete h2 { flex: 1; font-size: 21px; }
.fenetre-corps { padding: 14px 22px 22px; }
@media (max-width: 560px) { .voile { padding: 0; align-items: flex-end; } .fenetre { border-radius: 18px 18px 0 0; max-height: 92vh; overflow-y: auto; } }

.toast { position: fixed; left: 50%; bottom: 22px; transform: translate(-50%, 20px); background: var(--encre); color: #fff; padding: 12px 18px; border-radius: 12px; font-size: 14.5px; opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; z-index: 200; max-width: calc(100% - 32px); }
.toast.visible { opacity: 1; transform: translate(-50%, 0); }
.toast.erreur { background: #B42318; }

/* Direction */
.dir { display: grid; grid-template-columns: 230px 1fr; min-height: calc(100vh - 66px); }
.dir-menu { background: var(--marine); padding: 18px 12px; display: flex; flex-direction: column; gap: 2px; }
.dir-menu button { all: unset; box-sizing: border-box; display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 10px; color: #C9D6EE; font-size: 14.5px; font-weight: 500; cursor: pointer; }
.dir-menu button:hover { background: rgba(255,255,255,.07); color: #fff; }
.dir-menu button[aria-current="page"] { background: rgba(51,181,86,.14); color: #fff; }
.dir-menu button[aria-current="page"] .lucide { color: var(--or-2); }
.dir-menu button:focus-visible { outline: 2px solid var(--or); }
.dir-menu .lucide { width: 18px; height: 18px; }
.dir-contenu { padding: 28px clamp(16px, 3vw, 36px) 60px; min-width: 0; }
.dir-tete { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-bottom: 20px; }
.dir-tete h1 { font-size: 28px; flex: 1; }
@media (max-width: 900px) {
  .dir { grid-template-columns: 1fr; }
  .dir-menu { flex-direction: row; overflow-x: auto; padding: 8px; position: sticky; top: 66px; z-index: 20; }
  .dir-menu button { flex: none; padding: 9px 12px; font-size: 14px; }
}
.kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-bottom: 18px; }
@media (max-width: 1000px) { .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.kpi { background: #fff; border: 1px solid var(--trait); border-radius: var(--r-l); padding: 18px; box-shadow: var(--ombre-1); }
.kpi small { color: var(--doux); font-size: 13px; font-weight: 600; }
.kpi b { display: block; font: 700 26px var(--titres); color: var(--encre); margin-top: 6px; font-variant-numeric: tabular-nums; }
.kpi.alerte b { color: #B42318; }
.filtres { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 14px; }
.filtres .saisie { width: auto; min-width: 160px; flex: 1; min-height: 42px; }
.tab td.droite, .tab th.droite { text-align: right; font-variant-numeric: tabular-nums; }
.tab tr.cliquable { cursor: pointer; }
.tab tr.cliquable:hover td { background: #FAFBFC; }
.tab td small { display: block; color: var(--doux); font-size: 12.5px; }
.statut { display: inline-flex; height: 24px; align-items: center; padding: 0 10px; border-radius: 99px; font-size: 12px; font-weight: 700; }
.statut.inscrit, .statut.paye { background: var(--ok-pale); color: #14532D; }
.statut.attente { background: var(--alerte-pale); color: #7A3E06; }
.statut.parti, .statut.annule, .statut.echoue { background: #EEF2F1; color: var(--doux); }
.rouge { color: #B42318; font-weight: 700; }
.vert { color: var(--ok); font-weight: 700; }
.grille-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
@media (max-width: 900px) { .grille-2 { grid-template-columns: 1fr; } }
.ligne-edt { display: grid; grid-template-columns: 1.2fr .9fr .9fr 2fr 40px; gap: 8px; margin-bottom: 8px; }
.ligne-edt .saisie { min-height: 42px; padding: 0 10px; font-size: 14.5px; }
@media (max-width: 640px) { .ligne-edt { grid-template-columns: 1fr 1fr 1fr; } .ligne-edt .saisie:nth-child(4) { grid-column: 1 / 3; } }
.bandeau-abonnement { background: var(--alerte-pale); color: #7A3E06; padding: 10px 16px; font-size: 14px; text-align: center; }
.bandeau-abonnement.grave { background: #FDECEA; color: #8A1C12; }
.mot-de-passe-affiche { font: 700 22px ui-monospace, monospace; letter-spacing: .08em; background: var(--brume); border-radius: 10px; padding: 12px; text-align: center; margin: 10px 0; color: var(--encre); }

/* Direction : le menu prend toute la hauteur */
.dir-page main { padding: 0; }
.dir-page .pied-app { display: none; }
textarea.saisie { padding: 12px 14px; min-height: 110px; resize: vertical; }
.edt-jour li span { white-space: nowrap; }
@media (max-width: 560px) {
  .edt-jour { grid-template-columns: 1fr; gap: 6px; }
  .edt-jour > b { padding-top: 0; }
  .edt-jour li span { min-width: 104px; }
}

/* Liste d'appel */
.appel-jour { margin-left: auto; color: var(--doux); font-size: 14px; }
.compteur-appel { font-size: 14px; color: var(--doux); margin: 4px 0 2px; }
.liste-appel li { flex-wrap: wrap; }
.liste-appel small { display: block; color: var(--doux); font-size: 12.5px; }
.marques { display: inline-flex; border: 1px solid var(--trait-fort); border-radius: 10px; overflow: hidden; flex: none; }
.marque { border: 0; background: #fff; text-align: center; color: var(--texte); font: 600 13.5px var(--police); padding: 9px 12px; min-height: 40px; cursor: pointer; }
.marque + .marque { border-left: 1px solid var(--trait-fort); }
.marque.present[aria-checked="true"] { background: var(--ok); color: #fff; }
.marque.absent[aria-checked="true"] { background: #B42318; color: #fff; }
.marque.retard[aria-checked="true"] { background: var(--alerte); color: #fff; }
.marque:focus-visible { outline: 2px solid var(--marine-3); outline-offset: -2px; }
@media (max-width: 560px) { .liste-appel .marques { width: 100%; } .liste-appel .marque { flex: 1; padding: 9px 4px; } }
.presence-bilan { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 10px; }
.presence-bilan div { background: var(--brume); border-radius: 10px; padding: 10px; text-align: center; }
.presence-bilan b { display: block; font-size: 22px; color: var(--encre); }
.presence-bilan small { color: var(--doux); font-size: 12.5px; }
.statut.present { background: var(--ok-pale); color: #14532D; }
.statut.absent { background: #FDECEA; color: #8A1C12; }
.statut.retard { background: var(--alerte-pale); color: #7A3E06; }
