:root {
  --cdg-bleu: #0d6efd;
}

body {
  font-size: 0.95rem;
}

.navbar-brand span {
  font-weight: 600;
  letter-spacing: -0.01em;
}

/* Navbar : empeche le retour a la ligne DANS chaque item (ex: "Tableau de\nbord"). */
/* Combine a container-fluid dans base.html : plus de largeur + pas de casse       */
/* intra-item -> tout tient sur une ligne sur ecran de largeur raisonnable.        */
.navbar .nav-link {
  white-space: nowrap;
}

.card {
  border: 1px solid rgba(0, 0, 0, 0.075);
}

.card-header {
  border-bottom: 1px solid rgba(0, 0, 0, 0.075);
}

code {
  color: #495057;
  background: #f1f3f5;
  padding: 0.1rem 0.35rem;
  border-radius: 3px;
}

.table > :not(caption) > * > * {
  padding: 0.6rem 0.75rem;
}

.form-label {
  font-weight: 500;
  margin-bottom: 0.25rem;
}

.form-text {
  font-size: 0.8rem;
}

fieldset:disabled .form-control,
fieldset:disabled .form-select {
  background-color: #f8f9fa;
}

.htmx-request .table {
  opacity: 0.5;
  transition: opacity 150ms;
}

/* --- Grille d'edition des collectivites --- */
#grille input.form-control,
#grille select.form-select {
  border-color: transparent;
  background-color: transparent;
  box-shadow: none;
}

#grille input.form-control:hover,
#grille select.form-select:hover {
  border-color: #dee2e6;
  background-color: #fff;
}

#grille input.form-control:focus,
#grille select.form-select:focus {
  border-color: #0d6efd;
  background-color: #fff;
  box-shadow: 0 0 0 0.15rem rgba(13, 110, 253, 0.2);
}

td.cellule-ok {
  animation: flash-ok 1.4s ease-out;
}

@keyframes flash-ok {
  from { background-color: #a3cfbb; }
  to { background-color: transparent; }
}

td.cellule-erreur {
  background-color: #f8d7da;
}

/* Message d'erreur d'une cellule editable : positionne en absolute pour
   flotter sous la cellule sans etirer la hauteur de la ligne (sinon toutes
   les autres cellules de la ligne s'etirent aussi verticalement, effet visuel
   tres genant en grille dense). Le td parent doit avoir position: relative
   pour que le top: 100% se resolve par rapport a lui. */
.cellule-erreur-msg {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: 5;
  margin-top: 2px;
  padding: 0.25rem 0.5rem;
  background-color: #f8d7da;
  color: #842029;
  border: 1px solid #f5c2c7;
  border-radius: 0.25rem;
  font-size: 0.75rem;
  line-height: 1.2;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
  white-space: normal;
}

/* Zone de defilement : les deux ascenseurs restent visibles a l'ecran */
.grille-zone {
  max-height: calc(100vh - 340px);
  min-height: 300px;
  overflow: auto;
  overscroll-behavior: contain;
}

#grille {
  font-size: 0.82rem;
}

#grille input.form-control-sm,
#grille select.form-select-sm {
  font-size: 0.82rem;
  padding: 0.15rem 0.3rem;
}

/* Le padding ci-dessus ecrase celui que Bootstrap reserve a droite pour la
   fleche du <select> (image de fond) : sans cet espace, la fleche se
   superpose au texte. On le restaure uniquement pour les select. */
#grille select.form-select-sm {
  padding-right: 1.75rem;
}

/* En-tete fige en haut */
#grille thead th {
  position: sticky;
  top: 0;
  z-index: 3;
  background-color: #f8f9fa;
}

/* Grille des agents (cote collectivite) : meme confort de saisie que la
   grille des collectivites, mais SANS colonnes figees. Matricule et
   Origine ne sont pas des donnees que la collectivite doit garder sous
   les yeux en permanence en scrollant. */
#grille-agents-table {
  font-size: 0.82rem;
}

#grille-agents-table input.form-control-sm,
#grille-agents-table select.form-select-sm {
  font-size: 0.82rem;
  padding: 0.15rem 0.3rem;
}

#grille-agents-table select.form-select-sm {
  padding-right: 1.75rem;
}

#grille-agents-table thead th {
  position: sticky;
  top: 0;
  z-index: 3;
  background-color: #f8f9fa;
}

/* position: relative sur chaque td : necessaire pour que .cellule-erreur-msg
   (position: absolute) se positionne par rapport a la cellule et non a un
   ancetre lointain. Sans effet visuel sur les cellules sans message. */
#grille-agents-table tbody td {
  position: relative;
}

/* Confort de saisie : bordure/fond restaures au survol et au focus, par
   parite avec la grille collectivites (sans quoi l'utilisateur ne voit
   pas clairement quelle cellule est active). */
#grille-agents-table input.form-control,
#grille-agents-table select.form-select {
  border-color: transparent;
  background-color: transparent;
  box-shadow: none;
}

#grille-agents-table input.form-control:hover,
#grille-agents-table select.form-select:hover {
  border-color: #dee2e6;
  background-color: #fff;
}

#grille-agents-table input.form-control:focus,
#grille-agents-table select.form-select:focus {
  border-color: #0d6efd;
  background-color: #fff;
  box-shadow: 0 0 0 0.15rem rgba(13, 110, 253, 0.2);
}

/* Colonnes Code et Agents figees a gauche */
#grille th:nth-child(1),
#grille td:nth-child(1) {
  position: sticky;
  left: 0;
  z-index: 2;
  background-color: #f1f3f5;
}

#grille th:nth-child(2),
#grille td:nth-child(2) {
  position: sticky;
  left: 90px;
  z-index: 2;
  background-color: #f1f3f5;
  box-shadow: 2px 0 4px -2px rgba(0, 0, 0, 0.15);
}

#grille thead th:nth-child(1),
#grille thead th:nth-child(2) {
  z-index: 4;
  background-color: #e9ecef;
}

/* ---------------------------------------------------------------------
 * Marqueurs visuels des modifications post-gel (staff CDG uniquement)
 * ---------------------------------------------------------------------
 * - tr.tr-cree-post-gel     : ligne verte       -> agent ajoute post-gel
 * - tr.tr-retire-post-gel   : texte raye+gris   -> agent retire post-gel
 * - td.cellule-modif-post-gel : fond jaune      -> cellule dont la valeur
 *                                                  a change depuis le gel
 * - .badge-modif-post-gel   : petit badge "modifie le X par Y" sur la
 *                             colonne actions
 * -------------------------------------------------------------------- */

#grille-agents-table tr.tr-cree-post-gel td {
  background-color: #d1e7dd;
}
#grille-agents-table tr.tr-cree-post-gel td:first-child {
  border-left: 3px solid #198754;
}

#grille-agents-table tr.tr-retire-post-gel td {
  background-color: #f8d7da;
  color: #842029;
  text-decoration: line-through;
  opacity: 0.75;
}
#grille-agents-table tr.tr-retire-post-gel td:first-child {
  border-left: 3px solid #dc3545;
  text-decoration: none;
}
#grille-agents-table tr.tr-retire-post-gel input,
#grille-agents-table tr.tr-retire-post-gel select {
  text-decoration: line-through;
  color: #842029;
}

#grille-agents-table td.cellule-modif-post-gel {
  background-color: #fff3cd;
  box-shadow: inset 0 0 0 2px #ffc107;
}
/* Garder la cellule jaune visible meme sur une ligne verte/rouge */
#grille-agents-table tr.tr-cree-post-gel td.cellule-modif-post-gel,
#grille-agents-table tr.tr-retire-post-gel td.cellule-modif-post-gel {
  background-color: #fff3cd;
}

.badge-modif-post-gel {
  display: inline-block;
  font-size: 0.7rem;
  padding: 0.15rem 0.4rem;
  background-color: #fff3cd;
  color: #664d03;
  border: 1px solid #ffe69c;
  border-radius: 0.25rem;
  white-space: nowrap;
}

/* Bandeau mode staff post-gel en haut de la grille electeurs - version
 * sobre : fond crème clair + bordure dorée a gauche, lisible sans crier. */
.bandeau-staff-post-gel {
  background-color: #fff8e1;
  color: #665200;
  padding: 0.6rem 1rem;
  border: 1px solid #ffe08a;
  border-left: 4px solid #ffc107;
  border-radius: 0.375rem;
  margin-bottom: 1rem;
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 0.75rem;
}
.bandeau-staff-post-gel .bi {
  color: #d19d00;
}
