/* Plateforme Établissements — Dibsoft. Couleurs de l'établissement : --primaire, --accent */
:root {
  --primaire: #143D27;
  --accent: #B3560F;
  --fond: #F7F4EC;
  --surface: #FFFFFF;
  --surface-2: #FBFAF6;
  --texte: #1D2A22;
  --texte-doux: #4A5A50;
  --bordure: #E3DDCC;
  --erreur: #9B1C1C;
  --succes: #1F5B3A;
  --rayon: 12px;
  --police-titre: 'Fraunces', Georgia, serif;
  --police: 'Source Sans 3', system-ui, -apple-system, 'Segoe UI', sans-serif;
}
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; font-family: var(--police); font-size: 17px; line-height: 1.6; color: var(--texte); background: var(--fond); overflow-x: hidden; }
img { max-width: 100%; height: auto; }
a { color: var(--primaire); }
a:hover { color: var(--accent); }
h1, h2, h3 { font-family: var(--police-titre); line-height: 1.15; color: var(--primaire); margin: 0 0 .4em; }
h1 { font-size: clamp(30px, 4.2vw, 44px); }
code { background: #EFEBDF; padding: 1px 6px; border-radius: 4px; font-size: .92em; }
.saut { position: absolute; left: -999px; top: 0; background: var(--accent); color: #fff; padding: 8px 12px; z-index: 10; }
.saut:focus { left: 8px; }
.visuellement-cache { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

.conteneur { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 16px; }
.section { padding-top: 56px; padding-bottom: 56px; }
.etroit { max-width: 480px; }
.etroit-texte { max-width: 820px; }
.principal { min-height: 60vh; }
.fort { font-weight: 700; }
.aide { color: var(--texte-doux); font-size: 15px; }
.lien-fort { font-weight: 700; text-decoration: none; }
.lien-clair { color: #F2B36B; font-weight: 700; text-decoration: none; }

/* Bandeau institutionnel */
.bandeau { background: var(--primaire); color: #E8EFE9; font-size: 14px; }
.bandeau-ligne { display: flex; justify-content: space-between; gap: 12px; padding-top: 8px; padding-bottom: 8px; flex-wrap: wrap; }
.bandeau-droite { display: flex; gap: 20px; align-items: center; }
.bandeau a { color: #F2B36B; font-weight: 700; text-decoration: none; }
.devise-nationale { font-style: italic; }

/* En-tête & navigation */
.entete { background: var(--surface); border-bottom: 1px solid var(--bordure); position: relative; }
.entete-ligne { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-top: 14px; padding-bottom: 14px; }
.marque { display: flex; align-items: center; gap: 12px; text-decoration: none; color: inherit; min-width: 0; }
.logo { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.logo-vide { display: inline-flex; align-items: center; justify-content: center; background: var(--primaire); color: #fff; font-weight: 700; text-transform: uppercase; }
.marque-texte { display: flex; flex-direction: column; min-width: 0; }
.marque-nom { font-family: var(--police-titre); font-weight: 700; font-size: 21px; color: var(--primaire); line-height: 1.2; }
.marque-devise { font-size: 14px; color: var(--texte-doux); }
.nav { display: flex; align-items: center; gap: 4px 18px; font-weight: 600; flex-wrap: wrap; justify-content: flex-end; }
.nav > a:not(.bouton) { text-decoration: none; color: var(--texte); padding: 8px 0; border-bottom: 2px solid transparent; }
.nav > a[aria-current="page"] { border-bottom-color: var(--accent); color: var(--primaire); }
.menu-bascule, .menu-bouton { display: none; }
.en-ligne { display: inline; margin: 0; }
.lien-bouton { background: none; border: 0; padding: 0; font: inherit; font-weight: 600; color: var(--texte-doux); cursor: pointer; text-decoration: underline; min-height: 44px; }
.lien-danger { color: var(--erreur); }

/* Boutons */
.bouton { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 10px 20px; border-radius: 8px; border: 2px solid transparent; font: inherit; font-weight: 700; text-decoration: none; cursor: pointer; text-align: center; }
.nav a.bouton-accent, .bouton-accent { background: var(--accent); color: #fff; }
.bouton-accent:hover { filter: brightness(.92); color: #fff; }
.bouton-contour { border-color: var(--primaire); color: var(--primaire); background: transparent; }
.bouton-clair { border-color: #fff; color: #fff; background: transparent; }
.bouton-clair:hover { background: rgba(255,255,255,.12); color: #fff; }
.bouton-grand { padding: 14px 28px; font-size: 18px; }
.bouton-large { width: 100%; margin-top: 8px; }

/* Héros */
.heros { background: var(--primaire); color: #fff; }
.heros-grille { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 48px; align-items: center; padding-top: 64px; padding-bottom: 96px; }
.heros-grille:not(:has(.heros-photo)) { grid-template-columns: minmax(0, 1fr); max-width: 900px; margin-left: 0; }
.heros h1 { color: #fff; font-size: clamp(34px, 5vw, 58px); }
.heros-texte { font-size: 19px; color: #D7E4DA; max-width: 60ch; }
.heros-photo { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 16px; }
.surtitre { text-transform: uppercase; letter-spacing: .12em; font-size: 14px; font-weight: 700; color: var(--accent); margin: 0 0 .6em; }
.heros .surtitre, .entete-page .surtitre { color: #F2B36B; }
.actions { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 24px; }

/* Chiffres clés (chevauchent le héros) */
.chiffres { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-top: -48px; position: relative; }
.chiffre-carte { background: var(--surface); border-radius: var(--rayon); padding: 24px; box-shadow: 0 6px 20px rgba(20,61,39,.10); display: flex; flex-direction: column; color: var(--texte-doux); }
.chiffre-valeur { font-family: var(--police-titre); font-size: 40px; font-weight: 700; line-height: 1.1; color: var(--primaire); }
.chiffre-accent { color: var(--accent); }

/* En-tête des pages intérieures */
.entete-page { background: var(--primaire); color: #fff; padding: 48px 0; }
.entete-page h1 { color: #fff; margin: 0; }
.entete-page-sous { color: #D7E4DA; margin: 8px 0 0; }

/* Grilles */
.grille-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 48px; }
.grille-large { grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); }
.grille-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
.grille-4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.grille-serree { gap: 16px; }
.formulaire .grille-serree > div { display: flex; flex-direction: column; gap: 6px; }
.pile { display: flex; flex-direction: column; gap: 24px; }
.titre-section { font-size: 28px; margin-top: 8px; }
.titre-ligne { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px; flex-wrap: wrap; margin-bottom: 24px; }
.bande-claire { background: var(--surface); }
.texte p, .texte ul { margin: 0 0 1em; }
.texte { font-size: 18px; }

/* Mot du chef d'établissement */
.mot { display: flex; flex-direction: column; gap: 16px; }
.mot-tete { display: flex; align-items: center; gap: 16px; margin-bottom: 8px; }
.mot-photo { width: 88px; height: 88px; border-radius: 50%; object-fit: cover; }
.mot-photo-grande { width: 120px; height: 120px; }
.mot-titre { font-size: 22px; margin: 0; }
.mot-texte { margin: 0; font-size: 18px; font-style: italic; line-height: 1.7; }

/* Cartes d'actualité & albums */
.carte-actu, .carte-album { background: var(--surface-2); border: 1px solid var(--bordure); border-radius: 14px; overflow: hidden; display: flex; flex-direction: column; }
.carte-actu-lien, .carte-album { text-decoration: none; color: inherit; display: flex; flex-direction: column; height: 100%; }
.carte-actu-img, .carte-album img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; display: block; }
.carte-actu-vide { display: flex; align-items: center; justify-content: center; background: #E6EDE7; color: var(--texte-doux); font-weight: 700; aspect-ratio: 16 / 9; }
.carte-actu-corps, .carte-album-corps { display: flex; flex-direction: column; gap: 8px; padding: 20px; flex-grow: 1; }
.carte-actu-titre { font-size: 20px; font-weight: 700; color: var(--texte); line-height: 1.3; }
.carte-actu-lien:hover .carte-actu-titre, .carte-album:hover .carte-actu-titre { color: var(--accent); }
.carte-actu-resume { color: var(--texte-doux); }
.carte-actu-date { font-size: 14px; color: #6B776F; margin-top: auto; }
.etiquette { align-self: flex-start; display: inline-block; font-size: 13px; font-weight: 700; color: #fff; background: var(--primaire); padding: 3px 10px; border-radius: 999px; }
.etiquette-examens { background: var(--accent); }
.etiquette-evenement { background: #F2D9B8; color: #143D27; }
.etiquette-vie_scolaire { background: #2F5E8A; }
.etiquette-gris { background: #6B776F; }
.titre-article { font-size: clamp(28px, 4vw, 42px); margin-top: 12px; }
.article-image { width: 100%; border-radius: 14px; margin: 8px 0 20px; }
.chapeau { font-size: 20px; font-weight: 600; }

/* Tableaux */
.defile { overflow-x: auto; }
.tableau { width: 100%; border-collapse: collapse; background: var(--surface); border: 1px solid var(--bordure); border-radius: var(--rayon); overflow: hidden; margin-bottom: 24px; }
.tableau th { background: var(--primaire); color: #fff; text-align: left; padding: 12px 16px; font-weight: 700; }
.tableau td { padding: 12px 16px; border-top: 1px solid #EEE7D6; }
.tableau td.fort { color: var(--succes); }
.actions-ligne { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; }
.actions-ligne form { margin: 0; }

/* Listes diverses */
.liste-equipe, .liste-liens, .liste-calendrier, .liste-coord { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.liste-equipe li, .liste-calendrier li { display: flex; justify-content: space-between; gap: 12px; padding: 10px 0; border-bottom: 1px solid #EEE7D6; flex-wrap: wrap; }
.liste-liens li { padding: 10px 0; border-bottom: 1px solid #EEE7D6; display: flex; flex-direction: column; }
.liste-coord li { display: flex; flex-direction: column; padding: 8px 0; }
.liste-honneur { margin: 0; padding-left: 20px; }
.liste-honneur li { padding: 6px 0; }
.liste-honneur li span:last-child { float: right; }

/* Galerie */
.mosaique { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-bottom: 16px; }
.mosaique img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 8px; display: block; }
.grille-photos { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }
.grille-photos figure { margin: 0; }
.grille-photos img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 10px; display: block; }
.grille-photos figcaption { font-size: 14px; color: var(--texte-doux); padding-top: 4px; }
.grille-photos-admin { margin: 24px 0; }

/* Filtres & pagination */
.filtres { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 24px; }
.filtre, .pagination a { text-decoration: none; padding: 8px 16px; border-radius: 999px; border: 1px solid var(--bordure); background: var(--surface); color: var(--texte); font-weight: 600; min-height: 44px; display: inline-flex; align-items: center; }
.filtre[aria-current="page"], .pagination a[aria-current="page"] { background: var(--primaire); color: #fff; border-color: var(--primaire); }
.pagination { display: flex; gap: 8px; margin-top: 32px; flex-wrap: wrap; }

/* Bandeau d'appel */
.appel { background: var(--accent); color: #fff; }
.appel h2 { color: #fff; }
.appel-ligne { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding-top: 40px; padding-bottom: 40px; flex-wrap: wrap; }
.appel .bouton-accent { background: #fff; color: var(--accent); }

/* Cartes & formulaires */
.carte { background: var(--surface); border: 1px solid var(--bordure); border-radius: 16px; padding: 28px; }
.carte-sombre { background: var(--primaire); color: #fff; border: 0; }
.carte-sombre strong { font-size: 18px; }
.titre-carte { font-size: 30px; }
.note { background: var(--surface); border: 1px dashed var(--bordure); border-radius: var(--rayon); padding: 16px 20px; color: var(--texte-doux); }
.formulaire { display: flex; flex-direction: column; gap: 6px; margin: 16px 0; }
.formulaire label { font-weight: 600; margin-top: 10px; }
.formulaire input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=color]), .formulaire select, .formulaire textarea { width: 100%; min-height: 48px; border: 1px solid #BFB8A4; border-radius: 8px; padding: 10px 14px; font: inherit; background: #fff; color: var(--texte); }
.formulaire textarea { resize: vertical; line-height: 1.5; }
.formulaire input[type=color] { width: 72px; height: 44px; border: 1px solid #BFB8A4; border-radius: 8px; padding: 2px; background: #fff; }
.formulaire input[type=file] { padding: 8px 0; font: inherit; }
.formulaire :focus-visible { outline: 3px solid color-mix(in srgb, var(--accent) 40%, transparent); outline-offset: 1px; }
.formulaire fieldset { margin: 0 0 20px; display: flex; flex-direction: column; gap: 6px; }
.formulaire legend { font-family: var(--police-titre); font-weight: 700; font-size: 22px; color: var(--primaire); padding: 0 6px; }
.case { display: flex !important; gap: 10px; align-items: center; font-weight: 600; min-height: 44px; }
.case input { width: 20px; height: 20px; }
.champ-image { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.apercu { max-width: 220px; max-height: 160px; object-fit: cover; border-radius: 8px; border: 1px solid var(--bordure); }
.aligne-bas { display: flex; align-items: flex-end; }
.piege { position: absolute; left: -5000px; width: 1px; height: 1px; overflow: hidden; }
.alerte { border-radius: 10px; padding: 12px 16px; margin: 16px 0; font-weight: 600; }
.alerte-erreur { background: #FBEAEA; color: var(--erreur); border: 1px solid #F0C4C4; }
.alerte-succes { background: #E6EDE7; color: var(--succes); border: 1px solid #C5D6C9; }
.alerte-info { background: #FDF3E6; color: #7A3A0A; border: 1px solid #F0D2AA; }

/* Espaces */
.titre-espace { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; flex-wrap: wrap; margin-bottom: 24px; }
.tuile { background: var(--surface); border: 1px solid var(--bordure); border-radius: var(--rayon); padding: 20px; display: flex; flex-direction: column; color: var(--texte-doux); }
.tuile-lien { text-decoration: none; }
.tuile-lien:hover { border-color: var(--accent); }
.tuile-valeur { font-family: var(--police-titre); font-size: 34px; font-weight: 700; color: var(--primaire); }
.tuile-alerte .tuile-valeur { color: var(--accent); }
.edt { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; }
.edt-jour { background: var(--surface); border: 1px solid var(--bordure); border-radius: var(--rayon); padding: 16px; }
.edt-aujourdhui { border: 2px solid var(--accent); }
.edt-jour h3 { font-size: 20px; }
.edt-jour ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.edt-jour li { display: flex; flex-direction: column; padding: 8px 10px; background: var(--fond); border-radius: 8px; font-size: 15px; }
.edt-creneau { font-weight: 700; color: var(--primaire); }
.edt-salle { color: var(--texte-doux); font-size: 14px; }
.pastille { font-family: var(--police); font-size: 12px; font-weight: 700; background: var(--accent); color: #fff; border-radius: 999px; padding: 2px 8px; vertical-align: middle; }

/* Back-office */
.admin { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 32px; align-items: start; }
.admin-menu { display: flex; flex-direction: column; gap: 2px; background: var(--surface); border: 1px solid var(--bordure); border-radius: var(--rayon); padding: 16px; position: sticky; top: 16px; }
.admin-menu a { text-decoration: none; color: var(--texte); padding: 10px 12px; border-radius: 8px; font-weight: 600; min-height: 44px; display: flex; align-items: center; gap: 8px; }
.admin-menu a[aria-current="page"] { background: var(--primaire); color: #fff; }
.admin-menu .admin-voir { color: var(--accent); margin-top: 8px; }
.admin-corps > .grille-3 { margin: 24px 0; }
.note-carte ol { margin: 0; padding-left: 20px; }
.note-carte li { padding: 4px 0; }
.message { margin-bottom: 16px; }
.message-lu { opacity: .75; }

/* Pied de page */
.pied { background: #0F2E1D; background: color-mix(in srgb, var(--primaire) 78%, #000); color: #CFDCD3; margin-top: 0; }
.pied a { color: #E8EFE9; }
.pied p { margin: 4px 0; }
.pied-grille { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) minmax(0, 1fr); gap: 32px; padding-top: 40px; padding-bottom: 24px; }
.pied-nom { color: #fff; font-family: var(--police-titre); font-size: 20px; }
.pied-liens { display: flex; flex-direction: column; gap: 6px; }
.pied-liens a { text-decoration: none; font-weight: 600; }
.pied-bas { border-top: 1px solid rgba(255,255,255,.12); padding-top: 16px; padding-bottom: 24px; font-size: 14px; color: #9FB3A6; }

.page-erreur { display: flex; align-items: center; min-height: 100vh; }

/* Tablette */
@media (max-width: 1100px) {
  .menu-bouton { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 8px 14px; border: 1px solid var(--bordure); border-radius: 8px; font-weight: 700; cursor: pointer; flex-shrink: 0; }
  .menu-icone, .menu-icone::before, .menu-icone::after { display: block; width: 18px; height: 2px; background: var(--primaire); position: relative; }
  .menu-icone::before, .menu-icone::after { content: ''; position: absolute; left: 0; }
  .menu-icone::before { top: -6px; } .menu-icone::after { top: 6px; }
  .nav { display: none; position: absolute; top: 100%; left: 0; right: 0; background: var(--surface); border-bottom: 1px solid var(--bordure); flex-direction: column; align-items: stretch; padding: 8px 16px 16px; z-index: 5; box-shadow: 0 12px 24px rgba(0,0,0,.08); }
  .nav > a:not(.bouton) { padding: 12px 0; border-bottom: 1px solid #EEE7D6; }
  .nav > a[aria-current="page"] { color: var(--accent); }
  .nav .bouton { margin-top: 8px; }
  .menu-bascule:checked ~ .nav { display: flex; }
  .menu-bascule:focus-visible + .menu-bouton { outline: 3px solid var(--accent); }
  .admin { grid-template-columns: 1fr; }
  .admin-menu { position: static; flex-direction: row; flex-wrap: wrap; }
  .admin-menu .surtitre, .admin-menu .admin-voir { flex-basis: 100%; }
  .grille-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Téléphone */
@media (max-width: 760px) {
  body { font-size: 16px; }
  .section { padding-top: 40px; padding-bottom: 40px; }
  .heros-grille { grid-template-columns: 1fr; padding-top: 40px; padding-bottom: 80px; gap: 24px; }
  .grille-2, .grille-large, .grille-3, .pied-grille { grid-template-columns: minmax(0, 1fr); gap: 28px; }
  .grille-4 { grid-template-columns: 1fr 1fr; }
  .carte { padding: 20px; }
  .marque-nom { font-size: 18px; }
  .logo { width: 44px; height: 44px; }
  .bandeau-ligne { font-size: 12px; }
  .devise-nationale { display: none; }
  .bouton-grand { width: 100%; }
  .mosaique { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tableau th, .tableau td { padding: 10px; }
}

/* Espace Personnel */
.bloc-espace { margin: 24px 0; }
.surtitre-menu { margin-top: 16px; }
.demande { margin-bottom: 16px; }
.demande p { margin: 8px 0; }
.decision { margin: 12px 0 0; }
.statut { display: inline-block; font-size: 13px; font-weight: 700; padding: 3px 10px; border-radius: 999px; white-space: nowrap; }
.statut-en_attente, .statut-incomplete { background: #FDF3E6; color: #7A3A0A; border: 1px solid #F0D2AA; }
.statut-accordee, .statut-acceptee { background: #E6EDE7; color: #1F5B3A; border: 1px solid #C5D6C9; }
.statut-incomplete { border-style: dashed; }
.statut-refusee { background: #FBEAEA; color: #9B1C1C; border: 1px solid #F0C4C4; }
.statut-annulee { background: #EEEEEE; color: #555; border: 1px solid #DDD; }
.ligne-passee td { color: #8A948D; }
.tableau select { min-height: 40px; border: 1px solid #BFB8A4; border-radius: 6px; padding: 4px 8px; font: inherit; background: #fff; }
.fiches-remise { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }
.fiche-remise { border: 2px dashed #BFB8A4; border-radius: 12px; padding: 16px 20px; background: #fff; break-inside: avoid; }
.fiche-remise p { margin: 4px 0; }
@media print {
  .bandeau, .entete, .pied, .admin-menu, .non-imprime, .saut { display: none !important; }
  body { background: #fff; }
  .admin { display: block; }
  .section { padding: 0; }
  .imprime-seul { display: flex !important; }
}
/* Signature et cachet du chef sous un emploi du temps imprimé depuis le navigateur */
.imprime-seul { display: none; }
.signature-imprimee { justify-content: flex-end; align-items: center; gap: 10px; margin: 14px 0 0; break-inside: avoid; }
.signature-imprimee .signature-textes { text-align: center; }
.signature-imprimee p { margin: 2px 0; }
.signature-imprimee .petit { font-size: 11px; }
.signature-imprimee .signature-chef-img { height: 26mm; width: auto; }
.signature-imprimee .cachet-img { height: 28mm; width: auto; }

/* Rôles & droits */
.tableau-roles th.col-perm { font-size: 13px; font-weight: 600; min-width: 96px; line-height: 1.25; vertical-align: bottom; }
.tableau-roles td.col-perm { text-align: center; }
.coche { color: var(--succes); font-weight: 700; font-size: 18px; }
.permissions { border: 1px solid var(--bordure); border-radius: 12px; padding: 12px 16px; margin-top: 16px !important; }
.case-perm { align-items: flex-start !important; padding: 6px 0; font-weight: 400 !important; }
.case-perm input { margin-top: 4px; flex-shrink: 0; }

/* Circuit DRENAET */
.carte-drena { border-left: 4px solid var(--accent); }
.ligne-drena { padding: 12px 0; border-top: 1px solid #EEE7D6; display: flex; flex-direction: column; gap: 8px; }
.reponse-drena summary { cursor: pointer; font-weight: 700; color: var(--accent); min-height: 44px; display: flex; align-items: center; }
.reponse-drena .formulaire { margin-top: 4px; }
.interim { border: 1px solid var(--bordure); border-radius: 12px; padding: 8px 14px 12px; margin: 12px 0 0; }
.interim legend { font-weight: 700; padding: 0 6px; font-family: var(--police); font-size: 16px; color: var(--texte); }
.interim .case { margin-top: 6px; }

/* Lot 4 : signature électronique, documents scellés, portail DRENAET */
.document-signe { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; justify-content: space-between; background: #F1F6F2; border: 1px solid #C5D6C9; border-radius: 10px; padding: 10px 14px; margin: 8px 0; }
.document-signe .actions-ligne { margin: 0; }
.bouton-partage { color: var(--primaire); display: inline-flex; align-items: center; gap: 6px; }
.bouton-partage::before { content: ""; width: 18px; height: 18px; background: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18 16a3 3 0 0 0-2.4 1.2l-6.7-3.4a3 3 0 0 0 0-1.6l6.7-3.4A3 3 0 1 0 15 7a3 3 0 0 0 .1.8L8.4 11.2a3 3 0 1 0 0 3.6l6.7 3.4A3 3 0 1 0 18 16z'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18 16a3 3 0 0 0-2.4 1.2l-6.7-3.4a3 3 0 0 0 0-1.6l6.7-3.4A3 3 0 1 0 15 7a3 3 0 0 0 .1.8L8.4 11.2a3 3 0 1 0 0 3.6l6.7 3.4A3 3 0 1 0 18 16z'/%3E%3C/svg%3E") center / contain no-repeat; }
.apercu-signature { background: repeating-conic-gradient(#F4F1E8 0 25%, #fff 0 50%) 0 0 / 16px 16px; border: 1px dashed var(--bordure); border-radius: 8px; padding: 12px; text-align: center; }
.apercu-signature img { max-height: 110px; }
.intro { max-width: 75ch; }
dl.fiche-demande { display: grid; grid-template-columns: minmax(110px, 30%) 1fr; gap: 6px 16px; margin: 0 0 12px; }
dl.fiche-demande dt { color: var(--texte-doux); }
dl.fiche-demande dd { margin: 0; font-weight: 600; overflow-wrap: anywhere; }
.choix-decision { border: 0; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 4px; }
.aide-menu { margin: -8px 0 8px; font-size: 14px; }
.champ-pin { max-width: 180px; letter-spacing: .3em; }
.portail-drena .logo-vide { background: var(--accent); }
@media (max-width: 560px) { dl.fiche-demande { grid-template-columns: 1fr; gap: 0; } dl.fiche-demande dd { margin-bottom: 8px; } }

/* Lot 5 : programme des devoirs */
.barre-programme { margin: 16px 0 8px; align-items: center; }
.formulaire .choix-creneaux, .choix-creneaux { flex-direction: row; border: 1px solid var(--bordure); border-radius: 8px; padding: 10px 14px; margin: 12px 0; display: flex; flex-wrap: wrap; gap: 4px 18px; }
.formulaire .choix-creneaux legend, .choix-creneaux legend { font-family: var(--police); font-size: 16px; font-weight: 700; padding: 0 6px; }
.situation { display: inline-block; font-size: 13px; font-weight: 700; padding: 2px 10px; border-radius: 999px; white-space: nowrap; }
.situation-libre, .situation-libere { background: #E6EDE7; color: #1F5B3A; }
.situation-administration { background: #EAF0F8; color: #1B365D; }
.situation-en_cours { background: #FDF3E6; color: #7A3A0A; }
.situation-deja_pris, .situation-absent { background: #EEEEEE; color: #555; }
.formulaire-ligne { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 0; }
.ligne-surv { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ligne-moi td { background: #FFF6E5; }
.formulaire .choix-creneaux .case, .choix-creneaux .case { display: inline-flex; width: auto; margin: 0; min-height: 40px; align-items: center; gap: 6px; }

/* Lot 6 : emplois du temps, heures perdues, rattrapages */
.grille-edt { width: 100%; border-collapse: separate; border-spacing: 4px; min-width: 720px; }
.grille-edt th { font-size: 14px; color: var(--primaire); text-align: center; padding: 4px; }
.grille-edt th[scope=row] { text-align: left; white-space: nowrap; }
.grille-edt td { vertical-align: top; background: var(--surface); border: 1px solid var(--bordure); border-radius: 8px; padding: 6px; min-width: 110px; height: 56px; font-size: 14px; }
.grille-edt td.libre { background: var(--surface-2); text-align: center; }
.grille-edt td.conflit { border: 2px solid var(--erreur); }
.grille-edt td.perdu { background: #FDE7D2; border-color: var(--accent); }
.grille-edt th.jour-absent { background: #FDE7D2; border-radius: 6px; }
.grille-edt .separation td { height: 6px; padding: 0; border: 0; background: transparent; }
.grille-edt .seance { display: flex; flex-direction: column; line-height: 1.3; }
.grille-edt .seance + .seance { margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--bordure); }
.grille-edt details summary { font-size: 13px; color: var(--texte-doux); cursor: pointer; }
.grille-edt details .formulaire { gap: 4px; margin: 6px 0; }
.grille-edt details select { min-height: 36px !important; padding: 4px 8px !important; }
.grille-edt-compacte td { height: 40px; }
.ajout-cellule { display: inline-flex; width: 32px; height: 32px; align-items: center; justify-content: center; border-radius: 50%; color: var(--texte-doux); text-decoration: none; font-size: 20px; }
.ajout-cellule:hover { background: var(--fond); color: var(--accent); }
.choix-edt { margin: 8px 0; padding-top: 8px; padding-bottom: 8px; }
.heures-perdues { border-top: 1px solid var(--bordure); margin-top: 12px; padding-top: 8px; }
.tableau-rattrapage select { min-width: 200px; }
.plan-rattrapage { margin: 8px 0; } .plan-rattrapage summary { cursor: pointer; font-weight: 600; }
.plan-rattrapage ul { margin: 6px 0 0; padding-left: 20px; }
@media print { .grille-edt td { height: auto; } }

/* Lot 7 : cours supplémentaires, statistiques */
.cours-sup { padding-top: 14px; padding-bottom: 14px; }
.etiquette-type { display: inline-block; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; padding: 2px 8px; border-radius: 6px; margin-right: 6px; background: #EAF0F8; color: #1B365D; }
.etiquette-renforcement { background: #EFEAF8; color: #4a3aa7; }
.liste-creneaux-libres { list-style: none; padding: 0; margin: 0; columns: 2; font-size: 15px; }
.liste-creneaux-libres li { padding: 3px 0; break-inside: avoid; }
details.refus { display: inline-block; } details.refus summary { list-style: none; display: inline; }
.barre-filtres { display: flex; flex-wrap: wrap; gap: 8px 24px; align-items: center; margin: 8px 0 20px; }
.barre-filtres .filtres { margin: 0; }
.filtre-perso label { font-weight: 600; }
.filtre-perso input, .filtre-perso select { min-height: 40px; border: 1px solid #BFB8A4; border-radius: 8px; padding: 6px 10px; font: inherit; background: #fff; }
.tuiles-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin-bottom: 20px; }
.tuile-libelle { font-size: 14px; color: var(--texte-doux); }
.tuile-hero { grid-column: span 2; background: var(--primaire); color: #fff; border-color: var(--primaire); }
.tuile-hero .tuile-libelle, .tuile-hero .aide { color: #D7E4DA; }
.tuile-hero .tuile-valeur { color: #fff; }
.tuile-hero-valeur { font-family: var(--police); font-size: 52px; font-weight: 700; line-height: 1.1; }
@media (max-width: 560px) { .tuile-hero { grid-column: auto; } }
.bloc-stats { margin-bottom: 20px; }
.grille-stats { gap: 20px; }
.graphique { width: 100%; height: auto; display: block; margin: 8px 0 12px; font-family: var(--police); }
.graphique .grille { stroke: #e1e0d9; stroke-width: 1; }
.graphique .base { stroke: #c3c2b7; stroke-width: 1; }
.graphique .axe { fill: #898781; font-size: 12px; font-variant-numeric: tabular-nums; }
.graphique .etiquette { fill: #52514e; font-size: 13px; }
.graphique .valeur { fill: #0b0b0b; font-size: 13px; font-weight: 600; }
.graphique path { cursor: default; outline: none; }
.graphique path:hover, .graphique path:focus { opacity: .85; }
.legende { list-style: none; padding: 0; margin: 4px 0; display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: 14px; color: #52514e; }
.pastille-legende { display: inline-block; width: 12px; height: 12px; border-radius: 3px; margin-right: 6px; vertical-align: -1px; }
.tableau-stats td, .tableau-stats tfoot th { font-variant-numeric: tabular-nums; text-align: right; }
.tableau-stats th[scope=row] { text-align: left; }
.tableau-stats tfoot { font-weight: 700; border-top: 2px solid var(--bordure); }
.infobulle { position: fixed; z-index: 50; background: #0b0b0b; color: #fff; font-size: 13px; padding: 6px 10px; border-radius: 6px; pointer-events: none; max-width: 280px; }
@media print { .bloc-stats { break-inside: avoid; } .tuile-hero { color: #000; background: #fff; } .tuile-hero .tuile-libelle, .tuile-hero .aide { color: #333; } }
.admin > * { min-width: 0; }
@media (max-width: 900px) { .admin { grid-template-columns: minmax(0, 1fr); } }
.tableau-stats tbody th, .tableau-stats tfoot th { background: transparent; color: var(--texte); font-weight: 700; }
.graphique-etroit { max-width: 760px; }
.grille-2 > *, .grille-3 > *, .grille-4 > * { min-width: 0; }
.formulaire select { max-width: 100%; }
.tableau-stats th, .tableau-stats td { padding: 8px 10px; font-size: 15px; }
.tableau-stats thead th { white-space: normal; vertical-align: bottom; }

/* Lot 9 : appel, élèves, parents */
.tableau-appel th[scope=row] { text-align: left; white-space: nowrap; }
.tableau-appel td { text-align: center; }
.case-appel { display: inline-flex; width: 44px; height: 44px; align-items: center; justify-content: center; cursor: pointer; margin: 0 !important; }
.case-appel input { width: 22px; height: 22px; }
.ligne-absent th, .ligne-absent td { background: #FBEAEA; }
.tableau-appel input[name^=justif] { min-height: 36px; padding: 4px 8px; }
.filtres.ancres { margin: 8px 0 0; }
.liste-appel { list-style: none; counter-reset: eleve; margin: 0; padding: 0; border: 1px solid var(--bordure); border-radius: var(--rayon); background: var(--surface); }
.ligne-eleve { counter-increment: eleve; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; padding: 10px 14px; border-top: 1px solid var(--bordure); }
.ligne-eleve:first-child { border-top: 0; }
.ligne-eleve:has(.presence-absent input:checked) { background: #FBEAEA; }
.ligne-eleve:has(.presence-retard input:checked) { background: #FFF6E0; }
.nom-eleve { font-weight: 700; min-width: 0; }
.nom-eleve::before { content: counter(eleve) ". "; color: var(--texte-doux); font-weight: 400; }
.choix-presence { border: 0; margin: 0; padding: 0; display: inline-flex; gap: 6px; }
.pastille-presence { position: relative; margin: 0 !important; cursor: pointer; }
.pastille-presence input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.pastille-presence span { display: inline-flex; align-items: center; min-height: 40px; padding: 6px 12px; border: 1px solid #BFB8A4; border-radius: 999px; font-weight: 600; font-size: 15px; background: #fff; }
.pastille-presence input:focus-visible + span { outline: 3px solid color-mix(in srgb, var(--accent) 40%, transparent); }
.presence-present input:checked + span { background: #E6EDE7; border-color: #1F5B3A; color: #1F5B3A; }
.presence-absent input:checked + span { background: #d03b3b; border-color: #d03b3b; color: #fff; }
.presence-retard input:checked + span { background: #FDF3E6; border-color: #B26B00; color: #6B4000; }
.justif-appel { flex-basis: 100%; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.justif-appel input[type=text], .justif-appel input:not([type]) { flex: 1; min-width: 180px; }
.choix-presence { display: block; min-width: 0; }
.pastilles-presence { display: flex; gap: 6px; flex-wrap: nowrap; }
.nom-eleve { flex: 1 1 180px; }

/* ---------- Lot 10 : visites de classe, canevas, structures ---------- */
.bulletin .rubrique-bulletin { border: 1px solid #E5DFD0; padding: 14px 16px 6px; margin: 0 0 14px; }
.bulletin .rubrique-bulletin legend { font-weight: 700; padding: 0 6px; color: var(--primaire, #1B365D); }
.critere { display: grid; grid-template-columns: minmax(0, 1fr) minmax(140px, 220px); gap: 6px 14px; align-items: center; padding: 8px 0; border-bottom: 1px solid #F0EBDF; }
.critere:last-child { border-bottom: 0; }
.critere label { margin: 0; font-weight: 400; }
.critere textarea { grid-column: 1 / -1; }
.critere:has(textarea) { grid-template-columns: minmax(0, 1fr); }
.actions-bulletin { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; }
.actions-bulletin label { margin: 0; }
.actions-bulletin .champ-pin { width: 9em; }
.choix-seances { border: 1px solid #E5DFD0; border-radius: 8px; padding: 10px 14px; margin: 0 0 12px; display: flex; flex-direction: column; gap: 6px; }
.choix-seances legend { font-weight: 600; padding: 0 6px; }
.rubrique-canevas { margin-bottom: 14px; }
.titre-rubrique { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.critere-canevas { display: flex; flex-wrap: wrap; gap: 6px 8px; align-items: center; padding: 6px 0; border-bottom: 1px solid #F0EBDF; }
.champ-ordre { width: 4.5em; flex: none; }
.libelle-critere { flex: 1 1 260px; min-width: 0; }
@media (max-width: 560px) {
  .critere { grid-template-columns: minmax(0, 1fr); }
  .critere select { width: 100%; }
}
.defile { position: relative; }
.formulaire-ligne select, .formulaire-ligne input { max-width: 100%; min-width: 0; }
.liste-puces { margin: 0; padding-left: 1.1em; }
.liste-puces li { margin: 2px 0; }
.formulaire .choix-seances.cases-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 4px 12px; }
.cases-grille legend { grid-column: 1 / -1; }

/* ---------- Lot 13 : profils et fiche de l'établissement ---------- */
.avatar { border-radius: 50%; object-fit: cover; flex: none; display: inline-block; vertical-align: middle; background: #E8E2D2; }
.avatar-vide { display: inline-grid; place-items: center; color: var(--primaire); font-weight: 700; background: #E6EFE9; border: 1px solid var(--bordure); }
.avatar-grand { box-shadow: 0 2px 10px rgba(20,61,39,.12); }
.profil-tete { display: flex; align-items: center; gap: 16px; margin-bottom: 18px; flex-wrap: wrap; }
.profil-tete h1 { margin: 0; }
.photo-profil { display: flex; justify-content: center; margin: 4px 0 12px; }
.fiche-infos { display: grid; grid-template-columns: minmax(110px, 40%) 1fr; gap: 6px 12px; margin: 0 0 10px; }
.fiche-infos dt { color: var(--texte-doux); font-size: 14px; }
.fiche-infos dd { margin: 0; font-weight: 600; overflow-wrap: anywhere; }
.menu-profil { display: flex !important; align-items: center; gap: 10px; padding: 6px 12px 12px; text-decoration: none; border-bottom: 1px solid var(--bordure); margin-bottom: 8px; }
.menu-profil > span:not(.avatar) { display: flex; flex-direction: column; font-weight: 700; line-height: 1.25; }
.menu-profil .aide { font-weight: 400; }
.logo-fiche { width: 80px; height: 80px; object-fit: contain; border-radius: 12px; background: #fff; border: 1px solid var(--bordure); font-size: 26px; }
.chiffres-fiche { margin-bottom: 18px; }
.cellule-agent { display: flex; align-items: center; gap: 10px; }
@media (max-width: 560px) { .fiche-infos { grid-template-columns: 1fr; gap: 0; } .fiche-infos dd { margin-bottom: 8px; } }
fieldset { min-width: 0; }
.grille-2 > *, .pile > * { min-width: 0; }
.bloc-edt summary { cursor: pointer; }
.bloc-edt form { margin-top: 14px; }
.rapport-import { border-left: 4px solid var(--accent); }
.formulaire input[type=radio] { width: 20px; height: 20px; min-height: 0; padding: 0; flex: none; }
.grille-plein { grid-column: 1 / -1; }
/* Ronde de présence des enseignants */
.ligne-ronde { padding: 12px 16px; }
.ligne-ronde .pastilles-presence { flex-wrap: wrap; }
.ligne-ronde .nom-eleve { flex: 1 1 260px; min-width: 0; }
.ligne-ronde .choix-presence { flex: 0 1 auto; }
.ligne-ronde:has(.presence-absent input:checked) { background: #FBEAEA; }
.ligne-ronde:has(.presence-retard input:checked) { background: #FFF6E0; }
.presence-vide input:checked + span { background: #EEE; color: #555; }
.presence-vide span { font-weight: 500; font-size: 13px; }
.details-ronde { display: flex; gap: 8px; margin-top: 6px; flex-wrap: wrap; align-items: center; }
.details-ronde label { display: inline-flex; gap: 6px; align-items: center; margin: 0; font-weight: 600; }
.details-ronde input { min-height: 36px; padding: 4px 8px; }
.formulaire .details-ronde input { width: auto; flex: 1 1 160px; }
.formulaire .details-ronde input.etroit { width: 70px; flex: 0 0 70px; }
.ligne-ronde:not(:has(.presence-retard input:checked)) .champ-retard { display: none; }
.ligne-ronde:not(:has(.presence-absent input:checked)) .champ-justif { display: none; }
.details-ronde select { min-height: 36px; padding: 4px 8px; width: auto; }
.navigation-periode { align-items: center; }
.cellule-alerte { color: #9B1C1C; font-weight: 700; }
/* Saisie assistée des localités */
.champ-localite, .saisie-localite { position: relative; }
.liste-localites { position: absolute; z-index: 20; left: 0; right: 0; top: 100%; margin: 2px 0 0; padding: 4px 0; list-style: none; background: #fff; border: 1px solid var(--bordure); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,.12); max-height: 300px; overflow-y: auto; }
.liste-localites li { padding: 8px 12px; cursor: pointer; line-height: 1.3; }
.liste-localites li[aria-selected="true"], .liste-localites li:hover { background: #E6EDE7; }
.localite-invalide input[type=text] { border-color: #d03b3b; }
.localite-invalide::after { content: "Choisissez une localité dans la liste proposée."; display: block; color: #9B1C1C; font-size: 14px; margin-top: 4px; }
.choix-lieu { border: 0; padding: 0; margin: 12px 0 0; }
.choix-lieu legend { font-family: inherit; font-size: 16px; }
.choix-lieu .case { display: flex; gap: 8px; align-items: flex-start; font-weight: 500; margin: 6px 0; }
.form-absence:not(:has(input[name=lieu_absence][value=deplacement]:checked)) .bloc-destination { display: none; }
/* Localités en cascade */
.champ-geo { border: 1px solid var(--bordure); border-radius: var(--rayon); padding: 12px 16px 14px; margin: 12px 0; background: #FCFBF7; }
.champ-geo legend { padding: 0 6px; font-family: inherit; font-size: 16px; }
.geo-types { display: flex; flex-wrap: wrap; gap: 4px 18px; }
.geo-types .case { display: inline-flex; gap: 6px; align-items: center; margin: 4px 0; font-weight: 500; }
.formulaire .geo-types input[type=radio] { width: auto; }
.geo-niveaux { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0 12px; }
.geo-niveau[hidden] { display: none; }
.geo-resume { font-weight: 600; color: var(--primaire); margin: 8px 0 0; }
.geo-invalide { border-color: #d03b3b; }
.geo-invalide::after { content: "Complétez la localité (nature, région… jusqu'au dernier menu)."; display: block; color: #9B1C1C; font-size: 14px; margin-top: 6px; }
/* Marché */
.carte-interne { border: 1px dashed var(--bordure); border-radius: var(--rayon); padding: 10px 14px; margin: 12px 0; }
.verif-badge { max-width: 560px; margin: 0 auto; }
.verif-badge .profil-tete { align-items: center; gap: 16px; }
/* Photos au smartphone */
.champ-photo { margin: 10px 0; }
.photo-apercu { width: 120px; height: 120px; border-radius: 12px; overflow: hidden; background: #EEE; display: flex; align-items: center; justify-content: center; margin: 6px 0; border: 1px solid var(--bordure); }
.photo-apercu img { width: 100%; height: 100%; object-fit: cover; }
.photo-vide { color: #777; font-size: 13px; }
.photo-boutons { display: flex; flex-wrap: wrap; gap: 8px; }
.photo-boutons .bouton { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.photo-ok .photo-etat { color: #1F5B3A; font-weight: 700; }
.photo-erreur .photo-etat { color: #9B1C1C; font-weight: 700; }
.grille-photos-serie { display: grid; grid-template-columns: repeat(auto-fill, minmax(165px, 1fr)); gap: 10px; }
.carte-photo { padding: 10px; font-size: 14px; }
.carte-photo .photo-boutons { flex-direction: column; }
.carte-photo .photo-boutons .bouton { justify-content: center; padding-left: 8px; padding-right: 8px; }
.carte-photo .photo-apercu { width: 100%; height: auto; aspect-ratio: 1; max-width: 180px; }
/* Présence au poste */
.ligne-repos { opacity: .7; }
.connexion-qr { max-width: 420px; margin: 16px auto 0; }
.connexion-qr input[inputmode=numeric] { font-size: 28px; letter-spacing: 12px; text-align: center; }

/* Menu de l'espace en accordéons (groupes de commandes) */
.menu-accordeon { gap: 4px; max-height: calc(100vh - 32px); overflow-y: auto; }
.menu-accordeon .menu-accueil { margin-bottom: 4px; }
.menu-groupe { border-top: 1px solid var(--bordure); }
.menu-groupe > summary { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 8px;
  min-height: 44px; padding: 8px 12px; font-size: .78rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--primaire); border-radius: 8px; }
.menu-groupe > summary::-webkit-details-marker { display: none; }
.menu-groupe > summary::after { content: ''; width: 8px; height: 8px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); transition: transform .15s; margin-left: auto; flex-shrink: 0; }
.menu-groupe[open] > summary::after { transform: rotate(-135deg); }
.menu-groupe > summary:hover { background: #F3F1EA; }
.menu-groupe > summary:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }
.menu-groupe > summary > span:first-child { flex: 1; }
.menu-groupe .menu-liens { display: flex; flex-direction: column; gap: 2px; padding: 0 0 8px 6px; }
@media (max-width: 1100px) {
  .admin-menu.menu-accordeon { max-height: none; overflow: visible; flex-direction: column; flex-wrap: nowrap; }
  .menu-groupe .menu-liens { flex-direction: row; flex-wrap: wrap; }
}

/* L'École ivoirienne (données nationales) */
.onglets-ecole { margin: 20px 0 0; }
.cartes-ecole .carte { display: flex; flex-direction: column; gap: 4px; }
.carte-lien { text-decoration: none; color: var(--texte); transition: border-color .15s, box-shadow .15s; }
.carte-lien:hover, .carte-lien:focus-visible { border-color: var(--primaire); box-shadow: 0 6px 18px rgba(0,0,0,.06); color: var(--texte); }
.filtres-ecole { margin-bottom: 24px; }
.filtres-ecole .grille-3 { gap: 12px 24px; }
.bloc-stats { gap: 16px; margin-bottom: 24px; }
.pastille-serie { display: inline-block; width: 12px; height: 12px; border-radius: 3px; margin-right: 6px; vertical-align: -1px; }
.pastille-bande { background: rgba(20, 61, 39, .12); border: 1px solid rgba(20, 61, 39, .3); }
.legende-graphique { display: flex; gap: 18px; flex-wrap: wrap; margin: 0 0 4px; font-weight: 600; color: var(--texte-doux); }
.graphique-zone { position: relative; }
.graphique-courbes .point { cursor: pointer; }
.graphique-courbes .point:hover, .graphique-courbes .point:focus { r: 6; outline: none; }
.graphique-courbes .bande { fill: rgba(20, 61, 39, .08); }
.info-bulle { position: absolute; background: #1D2A22; color: #fff; padding: 6px 10px; border-radius: 8px; font-size: 14px; font-weight: 600; pointer-events: none; white-space: nowrap; z-index: 2; }
.carte-indicateurs .indic-hero { font-family: var(--police-titre); font-size: 30px; font-weight: 700; color: var(--primaire); margin: 0 0 8px; }
.indic { display: grid; grid-template-columns: auto 1fr; gap: 2px 12px; margin: 0; font-size: 15px; }
.indic dt { color: var(--texte-doux); } .indic dd { margin: 0; font-weight: 600; font-variant-numeric: tabular-nums; }
.ligne-actuelle td { background: #EEF4EF; }
.ligne-passee td { color: #8A8F88; }
.frise-ministres { list-style: none; padding: 0; margin: 0; display: grid; gap: 14px; }
.ministre { display: flex; gap: 16px; align-items: flex-start; }
.ministre-en-poste { border-color: var(--primaire); border-width: 2px; }
.ministre-photo { width: 64px; height: 64px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.ministre-initiales { display: inline-flex; align-items: center; justify-content: center; background: var(--primaire); color: #fff; font-weight: 700; font-size: 20px; }
.ministre-texte { min-width: 0; }
.ministre-texte p { margin: 4px 0; }
.ministre-resultats { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; }
.groupe-iepp { padding: 12px 20px; margin-bottom: 10px; }
.groupe-iepp summary { cursor: pointer; min-height: 40px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.liste-iepp { columns: 2; column-gap: 32px; margin: 8px 0 0; padding-left: 18px; }
.liste-iepp li { break-inside: avoid; margin-bottom: 6px; }
.frise-annee { position: relative; height: 54px; background: #F3F1EA; border-radius: 10px; margin: 20px 0 4px; overflow: hidden; }
.frise-periode { position: absolute; top: 0; bottom: 0; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; color: #fff; overflow: hidden; white-space: nowrap; border-right: 2px solid #fff; }
.frise-p0 { background: #2a78d6; } .frise-examen { background: #1baf7a; } .frise-p1 { background: #1f62b3; } .frise-p2 { background: #164d8f; }
.frise-conge { position: absolute; bottom: 0; height: 16px; background: #eb6834; border-left: 1px solid #fff; }
.frise-ferie, .frise-evenement, .frise-autre { background: #c0392b; height: 54px; width: 3px !important; opacity: .85; }
.frise-aujourdhui { position: absolute; top: -2px; bottom: -2px; width: 3px; background: #1D2A22; }
.frise-mois { position: relative; height: 20px; font-size: 12px; color: var(--texte-doux); margin-bottom: 4px; }
.frise-mois span { position: absolute; transform: translateX(-2px); }
.legende-frise .cle { display: inline-block; width: 14px; height: 10px; border-radius: 2px; margin: 0 4px 0 12px; vertical-align: 0; }
.cle-periode { background: #2a78d6; } .cle-examen { background: #1baf7a; } .cle-vacances { background: #eb6834; } .cle-ferie { background: #c0392b; } .cle-auj { background: #1D2A22; width: 4px !important; }
@media (max-width: 760px) { .liste-iepp { columns: 1; } .ministre-photo { width: 48px; height: 48px; } .frise-periode { font-size: 11px; } }

/* ---- Formulaires publics : marché, inscriptions en ligne (lot 30) ---- */
.section-courte { padding-top: 28px; padding-bottom: 0; }
.cartes-actions .carte-lien { display: flex; flex-direction: column; gap: 6px; }
.cartes-actions .carte-lien .lien-fort { margin-top: auto; color: var(--primaire); }
.carte-mise-en-avant { border: 2px solid var(--primaire); }
.numero-dossier { font-size: 22px; letter-spacing: .04em; font-family: ui-monospace, Menlo, Consolas, monospace; }
.carte-sombre .mot-titre { color: #fff; }
.etiquettes { list-style: none; margin: 6px 0 10px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.etiquettes li { font-size: 13px; font-weight: 600; padding: 3px 10px; border-radius: 999px; background: #E6EDE7; color: #1F5B3A; border: 1px solid #C5D6C9; }
.tableau .etiquettes { margin: 0; } .tableau .etiquettes li { font-size: 12px; padding: 2px 8px; }
.logo-partenaire { object-fit: contain; background: #fff; border: 1px solid var(--bordure); border-radius: 12px; padding: 4px; flex-shrink: 0; }
.logo-initiales { display: inline-flex; align-items: center; justify-content: center; background: #E6EDE7; color: var(--primaire); font-weight: 800; font-size: 15px; letter-spacing: .04em; text-align: center; line-height: 1.1; }
.ligne-logo { display: flex; gap: 14px; align-items: center; }
.carte-partenaire { align-items: flex-start; }
.mur-logos { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 14px; margin-bottom: 24px; }
.mur-logos a { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 14px 8px; background: #fff; border: 1px solid var(--bordure); border-radius: 14px; text-decoration: none; color: var(--texte); text-align: center; font-size: 13px; font-weight: 700; }
.mur-logos a:hover, .mur-logos a:focus-visible { border-color: var(--primaire); }
.mur-logos .logo-partenaire { border: 0; }
@media (max-width: 560px) { .carte-partenaire { flex-direction: column; } }
.etoiles { display: inline-flex; gap: 1px; font-size: 18px; line-height: 1; letter-spacing: 0; white-space: nowrap; vertical-align: middle; }
.etoiles .pleine { color: #E3A008; } .etoiles .vide { color: #D6D3CB; }
.etoiles .demi { background: linear-gradient(90deg, #E3A008 50%, #D6D3CB 50%); -webkit-background-clip: text; background-clip: text; color: transparent; }
.etoiles-grandes { font-size: 26px; }
.synthese-note { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.note-moyenne { font-family: var(--police); font-size: 40px; font-weight: 700; color: var(--primaire); line-height: 1; }
.repartition-avis { list-style: none; padding: 0; margin: 14px 0 0; display: grid; gap: 6px; }
.repartition-avis li { display: grid; grid-template-columns: 38px 1fr 32px; gap: 8px; align-items: center; font-size: 14px; }
.repartition-avis .barre { height: 9px; background: #EEE9DD; border-radius: 99px; overflow: hidden; }
.repartition-avis .barre span { display: block; height: 100%; background: #E3A008; border-radius: 99px; }
.avis .avis-tete { margin-bottom: 8px; align-items: center; }
.reponse-avis { border-left: 4px solid var(--primaire); background: #F3F7F4; padding: 8px 12px; border-radius: 6px; margin-top: 8px; }
.reponse-avis p { margin: 2px 0; }
.choix-etoiles { border: 0; padding: 0; margin: 8px 0 0; min-width: 0; }
.choix-etoiles legend { padding: 0; }
.etoiles-saisie { display: flex; flex-direction: row-reverse; justify-content: flex-end; gap: 4px; }
.etoiles-saisie input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.etoiles-saisie label { font-size: 38px; line-height: 1; color: #D6D3CB; cursor: pointer; margin: 0 !important; padding: 2px; }
.etoiles-saisie label:hover, .etoiles-saisie label:hover ~ label, .etoiles-saisie input:checked ~ label { color: #E3A008; }
.etoiles-saisie input:focus-visible + label { outline: 3px solid var(--primaire); outline-offset: 2px; border-radius: 6px; }
.priorite { display: inline-block; font-size: 12px; font-weight: 700; padding: 2px 9px; border-radius: 99px; border: 1px solid; }
.priorite-haute { background: #FBEAEA; color: #9B1C1C; border-color: #F0C4C4; } .priorite-moyenne { background: #FDF3E6; color: #7A3A0A; border-color: #F0D2AA; }
.priorite-basse { background: #EEF2F7; color: #34495E; border-color: #D5DEE8; }
.carte-besoin { display: flex; flex-direction: column; gap: 6px; } .carte-besoin .bouton { margin-top: auto; align-self: flex-start; }
.message-pret { background: #F3F7F4; border-left: 4px solid #25D366; padding: 10px 12px; border-radius: 6px; white-space: pre-wrap; }
.entonnoir { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); }
.entonnoir [aria-current="page"] { border-color: var(--primaire); box-shadow: inset 0 0 0 2px var(--primaire); }
@media (max-width: 760px) { .cartes-besoins { grid-template-columns: 1fr; } }
.case-legere { font-weight: 500 !important; min-height: 36px; }
.formulaire .label { display: block; font-weight: 600; margin-top: 10px; }
.choix-ligne { display: flex; flex-wrap: wrap; gap: 4px 18px; align-items: center; }
.formulaire .choix-ligne .case { display: inline-flex !important; margin: 0; font-weight: 500; min-height: 40px; }
.choix-ligne input.etroit { max-width: 180px; }
.circuit-liste { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 16px; }
@media (max-width: 560px) { .circuit-liste { grid-template-columns: 1fr; } }
.etapes { padding-left: 20px; margin: 0; } .etapes li { margin: 6px 0; }
.case-seule { display: flex; align-items: flex-end; padding-bottom: 8px; }
.alerte-bloc { border-left: 5px solid var(--primaire); }
.photo-dossier { width: 120px; height: 120px; object-fit: cover; border-radius: 10px; border: 1px solid var(--bordure); }
.fiche-demande { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 20px; margin: 0; }
.fiche-demande dt { font-size: 13px; color: var(--texte-doux); margin-top: 8px; } .fiche-demande dd { margin: 0; font-weight: 600; overflow-wrap: anywhere; }
@media (max-width: 760px) { .cartes-actions { grid-template-columns: 1fr; } .fiche-demande { grid-template-columns: 1fr; } }
