:root {
  --sges-sidebar: #12263f;
  --sges-sidebar-texte: #c9d4e3;
  --sges-sidebar-actif: #ffffff;
  --sges-accent: #1f7a6d;
  --sges-accent-clair: #e3f2ef;
  --sges-fond: #f4f6f9;
  --sges-bordure: #e3e8ef;
  --bs-primary: #1f7a6d;
  --bs-primary-rgb: 31, 122, 109;
  --bs-link-color: #1f6b60;
  --bs-link-color-rgb: 31, 107, 96;
}

body {
  background: var(--sges-fond);
  font-size: .925rem;
}
html[dir="rtl"] body { font-family: "Segoe UI", Tahoma, "Noto Naskh Arabic", "Arial", sans-serif; font-size: 1rem; }

.btn-primary { --bs-btn-bg: #1f7a6d; --bs-btn-border-color: #1f7a6d; --bs-btn-hover-bg: #186357; --bs-btn-hover-border-color: #186357; --bs-btn-active-bg: #145249; }
.btn-outline-primary { --bs-btn-color: #1f7a6d; --bs-btn-border-color: #1f7a6d; --bs-btn-hover-bg: #1f7a6d; --bs-btn-hover-border-color: #1f7a6d; --bs-btn-active-bg: #186357; }
.form-check-input:checked { background-color: #1f7a6d; border-color: #1f7a6d; }
.text-bg-primary { background-color: #1f7a6d !important; }

/* ---------- Disposition ---------- */
.sges-shell { display: flex; min-height: 100vh; }
.sges-sidebar {
  width: 248px; flex-shrink: 0; background: var(--sges-sidebar); color: var(--sges-sidebar-texte);
  display: flex; flex-direction: column; position: sticky; top: 0; height: 100vh; overflow-y: auto;
}
.sges-sidebar .marque { padding: 1rem 1.1rem; display: flex; gap: .7rem; align-items: center; border-bottom: 1px solid rgba(255,255,255,.08); }
.sges-sidebar .marque img, .sges-sidebar .marque .logo-txt {
  width: 38px; height: 38px; border-radius: 8px; object-fit: contain; background: #fff;
  display: inline-flex; align-items: center; justify-content: center; color: var(--sges-sidebar); font-weight: 700; font-size: .8rem;
}
.sges-sidebar .marque img.embleme { background: transparent; border-radius: 0; width: 40px; height: 40px; }
.sges-sidebar .propulse { margin-top: auto; display: flex; align-items: center; gap: .5rem; padding: .7rem 1.1rem 1rem; color: var(--sges-sidebar-texte);
  opacity: .6; font-size: .72rem; letter-spacing: .04em; text-decoration: none; border-top: 1px solid rgba(255,255,255,.08); }
.sges-sidebar .propulse:hover { opacity: 1; color: #fff; }
.sges-sidebar .marque .nom { color: #fff; font-weight: 600; line-height: 1.15; font-size: .9rem; }
.sges-sidebar .marque .sous { font-size: .72rem; opacity: .7; }
.sges-nav { padding: .6rem .5rem 1.5rem; }
.sges-nav .titre { font-size: .68rem; text-transform: uppercase; letter-spacing: .08em; opacity: .55; padding: .9rem .75rem .3rem; }
html[dir="rtl"] .sges-nav .titre { letter-spacing: 0; }
.sges-nav a {
  display: flex; align-items: center; gap: .65rem; color: var(--sges-sidebar-texte); text-decoration: none;
  padding: .48rem .75rem; border-radius: 7px; font-size: .88rem;
}
.sges-nav a:hover { background: rgba(255,255,255,.06); color: #fff; }
.sges-nav a.actif { background: var(--sges-accent); color: var(--sges-sidebar-actif); }
.sges-nav a .bi { font-size: 1.05rem; opacity: .9; }
.sges-nav a.bientot { opacity: .45; pointer-events: none; }
.sges-nav a.bientot::after { content: attr(data-bientot); margin-inline-start: auto; font-size: .62rem; border: 1px solid currentColor; border-radius: 4px; padding: 0 .3rem; }

.sges-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.sges-topbar {
  background: #fff; border-bottom: 1px solid var(--sges-bordure); padding: .55rem 1.25rem;
  display: flex; align-items: center; gap: .75rem; position: sticky; top: 0; z-index: 20;
}
.sges-topbar .periode-badge { font-size: .78rem; background: var(--sges-accent-clair); color: #155e54; border-radius: 20px; padding: .2rem .7rem; }
.sges-contenu { padding: 1.4rem 1.5rem 3rem; }
.sges-entete-page { display: flex; flex-wrap: wrap; align-items: center; gap: .75rem; margin-bottom: 1.2rem; }
.sges-entete-page h1 { font-size: 1.35rem; margin: 0; font-weight: 600; }
.sges-entete-page .actions { margin-inline-start: auto; display: flex; gap: .5rem; flex-wrap: wrap; }
.fil { font-size: .8rem; color: #6b7a90; margin-bottom: .25rem; }
.fil a { color: inherit; }

.card { border: 1px solid var(--sges-bordure); border-radius: 10px; box-shadow: none; }
.card-header { background: #fff; border-bottom: 1px solid var(--sges-bordure); font-weight: 600; }
.table > :not(caption) > * > * { padding: .55rem .7rem; }
.table thead th { font-size: .76rem; text-transform: uppercase; letter-spacing: .03em; color: #5b6b80; font-weight: 600; background: #f8fafc; }
html[dir="rtl"] .table thead th { letter-spacing: 0; font-size: .85rem; }

.kpi { padding: 1rem 1.1rem; }
.kpi .val { font-size: 1.6rem; font-weight: 700; line-height: 1.1; }
.kpi .lib { font-size: .8rem; color: #6b7a90; }
.kpi .bi { font-size: 1.4rem; color: var(--sges-accent); }

.badge-statut { font-weight: 500; }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: var(--sges-accent-clair); color: #155e54; display: inline-flex; align-items: center; justify-content: center; font-weight: 600; font-size: .8rem; }

.perm-grille { columns: 2 320px; column-gap: 1.25rem; }
.perm-module { break-inside: avoid; border: 1px solid var(--sges-bordure); border-radius: 8px; padding: .6rem .8rem; margin-bottom: 1rem; background: #fff; }
.perm-module h6 { font-size: .85rem; display: flex; align-items: center; gap: .5rem; margin-bottom: .4rem; }
.perm-module .form-check { font-size: .86rem; margin-bottom: .15rem; }

.journal-diff td { font-size: .82rem; vertical-align: top; }
.journal-diff .avant { color: #9b2c2c; text-decoration: line-through; }
.journal-diff .apres { color: #1d6b3a; }

.page-connexion { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(160deg, #0b1f3a 0%, #123f78 55%, #137a4b 100%); padding: 1rem; }
.page-connexion .logo-produit img { width: 100%; max-width: 300px; height: auto; }
.page-connexion .card { width: 100%; max-width: 420px; border: 0; box-shadow: 0 20px 50px rgba(0,0,0,.25); }

@media (max-width: 991px) {
  .sges-sidebar { position: fixed; inset-inline-start: -260px; z-index: 50; transition: inset-inline-start .2s; }
  .sges-sidebar.ouvert { inset-inline-start: 0; }
  .sges-contenu { padding: 1rem; }
}

.progress-bar { background-color: #1f7a6d; }
.progress-bar.bg-danger { background-color: #c0392b !important; }
.list-group-item.active { background-color: #1f7a6d; border-color: #1f7a6d; }
.nav-tabs .nav-link { color: #1f6b60; }

/* ---------------------------------------------------------- emplois du temps */
.edt-grille { table-layout: fixed; min-width: 760px; background: #fff; }
.edt-grille th { text-align: center; background: #f4f7f6; font-weight: 600; font-size: .85rem; }
.edt-grille .edt-heure { width: 64px; font-size: .75rem; color: #5b6b68; font-weight: 500; line-height: 1.2; }
.edt-grille td { padding: 3px; vertical-align: top; height: 58px; position: relative; }
.edt-grille td.edt-inactive { background: repeating-linear-gradient(45deg, #fafafa, #fafafa 6px, #f0f0f0 6px, #f0f0f0 12px); }
.edt-grille tr.edt-pause td { text-align: center; font-size: .75rem; color: #7a8986; background: #f8faf9; height: auto; font-style: italic; }
.edt-cours { position: relative; background: #e8f3f1; border-inline-start: 3px solid #1f7a6d; border-radius: 4px; padding: 3px 6px; font-size: .78rem; line-height: 1.25; margin-bottom: 2px; }
.edt-cours .m { font-weight: 600; color: #123f39; }
.edt-cours .d { color: #4b5d59; font-size: .72rem; }
.edt-cours.suite { opacity: .55; }
.edt-cours.conflit { background: #fdecea; border-color: #c0392b; }
.edt-cours:hover { filter: brightness(.97); }
.edt-alerte { position: absolute; top: 2px; inset-inline-end: 4px; color: #c0392b; font-size: .7rem; z-index: 2; }
.edt-ajout { display: flex; align-items: center; justify-content: center; height: 100%; min-height: 50px; color: #b5c2bf; text-decoration: none; border-radius: 4px; }
.edt-ajout:hover { background: #f1f6f5; color: #1f7a6d; }
.edt-jours ul, .edt-jours > div { display: flex; flex-wrap: wrap; gap: 0 .6rem; list-style: none; padding: 0; margin: 0; }
.edt-entete-impression { border-bottom: 2px solid #333; padding-bottom: .4rem; margin-bottom: .6rem; }

@media print {
  .sges-sidebar, .sges-topbar, .d-print-none, .alert, .fil { display: none !important; }
  .sges-main { margin: 0 !important; padding: 0 !important; }
  .sges-contenu, .sges-main main { padding: 0 !important; }
  body, .sges-main { background: #fff !important; }
  .row > [class*="col-"] { flex: 0 0 100% !important; max-width: 100% !important; width: 100% !important; }
  .edt-grille { min-width: 0; font-size: 10px; }
  .edt-grille td { height: 46px; }
  .edt-cours { background: #fff !important; border: 1px solid #999; border-inline-start: 3px solid #333; }
  .edt-cours.suite { opacity: 1; }
  @page { size: A4 landscape; margin: 10mm; }
}

/* ---------------------------------------------------------- portail parents */
.portail-photo { width: 64px; height: 64px; border-radius: 50%; background: #e8f3f1; display: flex; align-items: center; justify-content: center; overflow: hidden; flex-shrink: 0; font-size: 28px; color: #1f7a6d; }
.portail-photo img { width: 100%; height: 100%; object-fit: cover; }

/* ---------------------------------------------------------- recherche globale */
.sges-recherche { position: relative; width: 300px; }
.sges-recherche .bi { position: absolute; inset-inline-start: 10px; top: 50%; transform: translateY(-50%); color: #8a9a97; font-size: .85rem; }
.sges-recherche input { padding-inline-start: 30px; border-radius: 20px; background: #f4f7f6; border-color: #e3e9e8; }

/* ---------------------------------------------------------------- élèves : liste */
.recherche-eleves { position: relative; }
.recherche-eleves > .bi-search { position: absolute; inset-inline-start: .85rem; top: 50%; transform: translateY(-50%); color: #8a94a3; pointer-events: none; }
.recherche-eleves input { padding-inline-start: 2.4rem; padding-inline-end: 2.2rem; height: 42px; }
.recherche-eleves .recherche-attente { position: absolute; inset-inline-end: .8rem; top: 50%; margin-top: -.5rem; display: none; }
#filtres-eleves.en-cours .recherche-attente { display: inline-block; }
#filtres-eleves .mb-3 { margin-bottom: .4rem !important; }
.liste-eleves .eleve-ligne { position: relative; display: grid; grid-template-columns: 40px minmax(0, 1fr) 11rem 10rem; gap: .9rem; align-items: center; padding: .6rem 1rem; }
.liste-eleves .avatar { width: 38px; height: 38px; }
.liste-eleves .avatar-photo { object-fit: cover; border-radius: 50%; }
.liste-eleves .eleve-matricule { color: #475467; background: #f2f4f7; border-radius: 5px; padding: .15rem .45rem; justify-self: start; font-size: .8rem; }
.liste-eleves .eleve-classe { font-weight: 500; }
@media (max-width: 767px) {
  .liste-eleves .eleve-ligne { grid-template-columns: 40px minmax(0, 1fr) auto; grid-template-areas: "photo nom classe" "photo matricule classe"; row-gap: .1rem; }
  .liste-eleves .eleve-ligne > .avatar, .liste-eleves .eleve-ligne > img { grid-area: photo; }
  .liste-eleves .eleve-nom { grid-area: nom; }
  .liste-eleves .eleve-matricule { grid-area: matricule; background: none; padding: 0; }
  .liste-eleves .eleve-classe { grid-area: classe; font-size: .85rem; }
}
.colonnes-export .form-check { margin-bottom: .1rem; }

/* ---------------------------------------------------------------- élèves : fiche */
.fiche-entete .card-body { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.5rem; }
.fiche-identite { display: flex; align-items: center; gap: 1rem; flex: 1 1 340px; min-width: 0; }
.fiche-photo { position: relative; flex: 0 0 auto; width: 84px; height: 112px; border-radius: 10px; overflow: hidden; border: 2px solid #fff; box-shadow: 0 2px 8px rgba(16,24,40,.15); padding: 0; background: #e8edf3; }
button.fiche-photo { cursor: pointer; }
.fiche-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.fiche-photo-icone { position: absolute; inset-inline-end: 4px; bottom: 4px; width: 26px; height: 26px; border-radius: 50%; background: rgba(18,38,63,.85); color: #fff; display: flex; align-items: center; justify-content: center; font-size: .8rem; transition: transform .15s; }
button.fiche-photo:hover .fiche-photo-icone, button.fiche-photo:focus-visible .fiche-photo-icone { transform: scale(1.15); }
.fiche-nom { min-width: 0; }
.fiche-nom h1 { font-size: 1.45rem; margin: 0 0 .15rem; overflow-wrap: anywhere; }
.fiche-puces { display: flex; flex-wrap: wrap; gap: .4rem .6rem; align-items: center; margin-top: .45rem; font-size: .85rem; }
.fiche-puces .puce { background: #f2f4f7; border-radius: 20px; padding: .2rem .65rem; white-space: nowrap; }
.fiche-puces code { color: inherit; }

.fiche-actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-inline-start: auto; }
.fiche-actions .action { display: inline-flex; align-items: center; gap: .45rem; padding: .5rem .9rem; border-radius: 8px; border: 1px solid; font-weight: 500; font-size: .92rem; text-decoration: none; background: #fff; line-height: 1.2; }
.fiche-actions .action i { font-size: 1.1rem; }
.fiche-actions .action-succes { color: #067647; border-color: #a6e2c4; } .fiche-actions .action-succes:hover { background: #ecfdf3; }
.fiche-actions .action-info { color: #175cd3; border-color: #b2ccff; } .fiche-actions .action-info:hover { background: #eff4ff; }
.fiche-actions .action-primaire { color: #fff; background: var(--sges-accent, #1f7a6d); border-color: transparent; } .fiche-actions .action-primaire:hover { filter: brightness(.93); }
.fiche-actions .action-statut { color: #344054; border-color: #d0d5dd; }
.fiche-actions .action-statut.statut-inscrit { color: #067647; border-color: #a6e2c4; background: #f6fef9; }
.fiche-actions .action-statut.statut-preinscrit { color: #0e7090; border-color: #a5f0fc; background: #f0fdff; }
.fiche-actions .action-statut.statut-suspendu, .fiche-actions .action-statut.statut-exclu_temporaire { color: #b54708; border-color: #fedf89; background: #fffcf5; }
.fiche-actions .action-statut.statut-exclu, .fiche-actions .action-statut.statut-decede { color: #b42318; border-color: #fecdca; background: #fffbfa; }
.fiche-actions .action:disabled { opacity: .55; }
@media (max-width: 575px) {
  .fiche-actions { width: 100%; display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: .4rem; }
  .fiche-actions .action, .fiche-actions .action-situation .action { flex-direction: column; justify-content: center; gap: .15rem; padding: .5rem .25rem; font-size: .72rem; width: 100%; }
  .fiche-actions .action i { font-size: 1.25rem; }
  .fiche-actions .dropdown-toggle::after { display: none; }
  .fiche-photo { width: 66px; height: 88px; }
  .fiche-nom h1 { font-size: 1.15rem; }
}

.cadre-fiche .card-header { font-weight: 600; }
dl.infos { display: grid; grid-template-columns: minmax(7rem, 38%) 1fr; gap: .45rem .9rem; font-size: .9rem; }
dl.infos dt { font-weight: 500; color: #667085; }
dl.infos dd { margin: 0; overflow-wrap: anywhere; }
dl.infos-compactes { font-size: .85rem; gap: .25rem .9rem; }
.tuteur a { text-decoration: none; }
.panneau-annee .classe-annee { font-size: 1.25rem; font-weight: 600; }
.panneau-annee .titre-bloc { font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; color: #667085; margin: 1.3rem 0 .5rem; padding-top: 1rem; border-top: 1px solid #eaecf0; }
html[dir="rtl"] .panneau-annee .titre-bloc { letter-spacing: 0; }

/* fenêtre photo */
.choix-source { display: flex; flex-direction: column; align-items: center; gap: .3rem; padding: 1.6rem 1rem; border: 2px dashed #b2ccff; border-radius: 12px; background: #f5f8ff; color: #175cd3; cursor: pointer; text-align: center; height: 100%; }
.choix-source:hover { background: #eaf1ff; }
.choix-source i { font-size: 2rem; }
.choix-source span { font-size: .8rem; color: #667085; }
.cadre-photo { position: relative; width: 300px; max-width: 100%; aspect-ratio: 3 / 4; margin: 0 auto; border-radius: 10px; overflow: hidden; background: #101828; touch-action: none; }
.cadre-photo video, .cadre-photo canvas { width: 100%; height: 100%; display: block; }
.cadre-photo video { object-fit: cover; transform: scaleX(-1); }
.cadre-photo canvas { cursor: grab; } .cadre-photo canvas:active { cursor: grabbing; }
.guide-photo { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.liste-eleves .eleve-ligne > a.stretched-link { position: absolute; inset: 0; z-index: 1; }

/* ---------------------------------------------------------------- actualités */
.fil-actualites { max-width: 720px; margin: 0 auto; }
.avatar-sm { width: 30px; height: 30px; font-size: .7rem; flex: 0 0 auto; }
.publication .pub-texte { white-space: normal; overflow-wrap: anywhere; font-size: .97rem; }
.pub-photos { display: grid; gap: 3px; background: #f2f4f7; }
.pub-photos .pub-photo { border: 0; padding: 0; background: #e4e7ec; cursor: zoom-in; overflow: hidden; aspect-ratio: 1; }
.pub-photos .pub-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pub-photos.n1 .pub-photo { aspect-ratio: auto; max-height: 520px; } .pub-photos.n1 .pub-photo img { object-fit: contain; background: #101828; max-height: 520px; }
.pub-photos.n2 { grid-template-columns: 1fr 1fr; }
.pub-photos.n3 { grid-template-columns: 2fr 1fr; grid-template-rows: 1fr 1fr; } .pub-photos.n3 .pub-photo:first-child { grid-row: span 2; aspect-ratio: auto; }
.pub-photos.n4 { grid-template-columns: 1fr 1fr; }
.pub-photos.n5 { grid-template-columns: repeat(6, 1fr); } .pub-photos.n5 .pub-photo { grid-column: span 2; } .pub-photos.n5 .pub-photo:nth-child(-n+2) { grid-column: span 3; }
.pub-actions { display: flex; border-top: 1px solid #eaecf0; border-bottom: 1px solid #eaecf0; margin: .3rem 0 .6rem; }
.pub-actions > * { flex: 1; } .pub-actions .btn { width: 100%; border: 0; color: #475467; font-weight: 500; }
.pub-actions .btn:hover { background: #f2f4f7; } .pub-actions .btn.aime { color: #175cd3; }
.fil-com { margin-bottom: .45rem; }
.commentaire { display: flex; gap: .5rem; align-items: flex-start; margin-bottom: .3rem; }
.commentaire.reponse { margin-inline-start: 2.4rem; }
.commentaire .bulle { background: #f2f4f7; border-radius: 14px; padding: .4rem .75rem; display: inline-block; max-width: 100%; font-size: .9rem; }
.commentaire .com-texte { overflow-wrap: anywhere; }
.commentaire .mention { color: #175cd3; font-weight: 500; }
.commentaire.nouveau .bulle { animation: surbrillance 1.6s ease-out; }
@keyframes surbrillance { from { background: #fef0c7; } to { background: #f2f4f7; } }
.com-actions { display: flex; gap: .8rem; font-size: .76rem; padding-inline-start: .75rem; margin-top: .1rem; }
.btn-lien { background: none; border: 0; padding: 0; color: #475467; font-weight: 600; font-size: inherit; }
.btn-lien:hover { text-decoration: underline; } .btn-lien.aime { color: #175cd3; }
.form-commentaire { display: flex; gap: .5rem; align-items: flex-start; margin-top: .4rem; }
.form-commentaire textarea { resize: none; border-radius: 18px; min-height: 38px; }
.form-commentaire .btn { border-radius: 50%; width: 38px; height: 38px; padding: 0; flex: 0 0 auto; }
.form-publication textarea { resize: vertical; }
.apercu-photos .vignette { position: relative; width: 84px; height: 84px; border-radius: 8px; overflow: hidden; }
.apercu-photos .vignette img { width: 100%; height: 100%; object-fit: cover; }
.apercu-photos .vignette .btn-close { position: absolute; top: 3px; inset-inline-end: 3px; background-color: rgba(0,0,0,.55); border-radius: 50%; padding: .35rem; }
.photo-retirer { width: 120px; } .photo-retirer img { width: 120px; height: 90px; object-fit: cover; border-radius: 6px; display: block; }
#galerie .carousel-item img { max-height: 85vh; max-width: 100%; }
/* carte du tableau de bord */
.actu-apercu { display: flex; gap: .7rem; padding: .7rem 1rem; text-decoration: none; color: inherit; border-bottom: 1px solid #eaecf0; }
.actu-apercu:last-child { border-bottom: 0; } .actu-apercu:hover { background: #f9fafb; }
.actu-apercu .vignette { width: 56px; height: 56px; border-radius: 8px; object-fit: cover; flex: 0 0 auto; background: #f2f4f7; }
.actu-apercu .vignette.vide { display: flex; align-items: center; justify-content: center; color: #98a2b3; font-size: 1.3rem; }
.actu-apercu .extrait { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: .88rem; }

/* ---------------------------------------------------------------- tableau de bord */
.kpi .detail { font-size: .75rem; color: #98a2b3; margin-top: .15rem; }
.kpi-perso { background: linear-gradient(135deg, #f5f8ff 0%, #fff 70%); }
.kpi-perso .bi { color: #175cd3; }
.titre-section { font-size: .72rem; text-transform: uppercase; letter-spacing: .07em; color: #667085; font-weight: 600; margin: .3rem 0 .5rem; }
html[dir="rtl"] .titre-section { letter-spacing: 0; }
.min-w-0 { min-width: 0; }

/* ---------------------------------------------------------------- enregistrement automatique */
.cellule-note { flex-wrap: nowrap; align-items: center; }
.cellule-note .etat-cellule { width: 20px; flex: 0 0 20px; display: inline-flex; align-items: center; justify-content: center; font-size: .85rem; margin-inline-start: 3px; }
.cellule-note .etat-cellule .spinner-border { width: .8rem; height: .8rem; border-width: .15em; }
.cellule-note .etat-cellule.estompe { opacity: 0; transition: opacity .8s; }
.cellule-note.en-erreur input.note { border-color: #d92d20; }
.etat-global { display: inline-flex; align-items: center; gap: .35rem; }
.brouillon-info { font-size: .78rem; color: #667085; }
.brouillon-info .bi { color: #067647; }
.cellule-obs .etat-cellule { width: 20px; flex: 0 0 20px; display: inline-flex; justify-content: center; margin-inline-start: 4px; }
.cellule-obs .etat-cellule.estompe { opacity: 0; transition: opacity .8s; }
.cellule-obs .etat-cellule .spinner-border { width: .8rem; height: .8rem; border-width: .15em; }
.barre-saisie { position: sticky; bottom: 0; z-index: 5; box-shadow: 0 -4px 12px rgba(16,24,40,.08); }

/* ------------------------------------------------------------ vie scolaire : appel */
.onglets-defilants { flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; }
.onglets-defilants .nav-link { white-space: nowrap; }
.appel-ligne { padding-top: .7rem; padding-bottom: .7rem; }
.pastille { width: 30px; height: 30px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: #f2f4f7; color: #667085; flex: 0 0 auto; }
.pastille.faite { background: #dcfae6; color: #067647; }
.compteurs-appel { display: flex; flex-wrap: wrap; gap: .5rem 1rem; align-items: center; }
.compteurs-appel .compteur { display: inline-flex; align-items: center; gap: .3rem; font-size: .9rem; }
.compteurs-appel .compteur.present .bi { color: #067647; }
.compteurs-appel .compteur.absent .bi { color: #d92d20; }
.compteurs-appel .compteur.retard .bi { color: #b54708; }
.recherche-appel { position: relative; min-width: 180px; }
.recherche-appel > .bi-search { position: absolute; inset-inline-start: .6rem; top: 50%; transform: translateY(-50%); color: #8a94a3; pointer-events: none; font-size: .8rem; }
.recherche-appel input { padding-inline-start: 1.8rem; }
.ligne-appel { display: flex; align-items: center; gap: .6rem; padding-top: .55rem; padding-bottom: .55rem; border-inline-start: 4px solid transparent; }
.ligne-appel.absent { background: #fef3f2; border-inline-start-color: #d92d20; }
.ligne-appel.retard { background: #fffaeb; border-inline-start-color: #f79009; }
.ligne-appel .numero { width: 1.6rem; text-align: end; flex: 0 0 auto; }
.ligne-appel .avatar { flex: 0 0 auto; }
.ligne-appel .nom-appel { flex: 1 1 auto; min-width: 0; }
.ligne-appel .nom-appel bdi { overflow-wrap: anywhere; }
.choix-appel { display: flex; align-items: center; gap: .3rem; flex: 0 0 auto; }
.choix-appel .btn { min-width: 40px; min-height: 36px; }
.choix-appel .minutes { width: 64px; display: none; }
.ligne-appel.retard .choix-appel .minutes { display: block; }
.choix-appel .etat-cellule { width: 20px; flex: 0 0 20px; display: inline-flex; align-items: center; justify-content: center; font-size: .85rem; }
.choix-appel .etat-cellule .spinner-border { width: .8rem; height: .8rem; border-width: .15em; }
.choix-appel .etat-cellule.estompe { opacity: 0; transition: opacity .8s; }
.ligne-appel.en-erreur { box-shadow: inset 0 0 0 1px #d92d20; }
@media (max-width: 575.98px) {
  .ligne-appel { flex-wrap: wrap; }
  .ligne-appel .numero { display: none; }
  .choix-appel { width: 100%; justify-content: flex-end; }
  .choix-appel .btn { flex: 1 1 0; }
  .recherche-appel { width: 100%; margin-inline-start: 0 !important; }
}
.tableau-releve td.alerte { background: #fffaeb; }
.ligne-sanction.annulee { opacity: .6; }
.ligne-sanction.annulee .type-sanction { text-decoration: line-through; }
@media print { .ligne-appel .choix-appel input, .barre-saisie { display: none !important; } }

/* ------------------------------------------------------------ en-tête compact */
.choix-langue .code-langue { display: inline-block; min-width: 1.4em; font-weight: 600; }
.choix-langue .dropdown-item.active .code-langue { color: inherit !important; }
.sges-topbar .periode-badge { white-space: nowrap; }
@media (max-width: 767.98px) {
  .sges-topbar .periode-badge { padding: .2rem .5rem; }
  .sges-topbar .periode-badge .bi { display: none; }
  .choix-langue .btn { padding-inline: .45rem; }
}
