/* BC download — placeholder "aucun fichier" */
.gpage-dl-placeholder {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    padding: 1rem 1.5rem;
    border: 2px dashed var(--border-ctrl);
    border-radius: 6px;
    color: var(--border-ctrl);
    cursor: pointer;
    transition: border-color 0.15s, color 0.15s;
}
.gpage-dl-placeholder:hover {
    border-color: var(--color-secondary);
    color: var(--color-secondary);
}
.gpage-dl-placeholder i {
    font-size: 2rem;
}

/* text */
.text-danger {
    color: var(--danger);
    font-size: 1.2rem;
    font-weight: bold;
}

/* formulaire de connexion */

.input_connexion {
    width: 100%;
    margin-bottom: 1rem;
    /* Pas de font-size : hérite du 16px global (INPUT{font-size:inherit}) — cohérent
       avec le reste d'EMG + a11y (≥16px évite le zoom iOS au focus). */
}

/* Champ de connexion : label au-dessus de l'input.
   Classe dédiée (PAS .form-control, réservée à Bootstrap 4 chargé globalement,
   qui transformerait le <div> en boîte bordée à hauteur fixe). */
.form_connexion .champ-connexion {
    display: flex;
    flex-direction: column;
    margin-bottom: 1.5rem;
}
.form_connexion .champ-connexion label {
    margin-bottom: 0.5rem;
    font-weight: 600;
}

/* Contrôles de connexion : padding confortable (façon ram2022) + radius grappe +
   bordure GRIS CLAIR comme ram2022. ram2022 applique `border: var(--border)`
   (= 1px solid #eee) via `.form-control input/select/textarea`. On réplique ce
   scope sur TOUS les contrôles du champ (input/select/textarea), pas seulement
   .input_connexion, via le wrapper .champ-connexion (équivalent non-Bootstrap).
   !important sur le padding pour écraser le reset global INPUT{padding:… !important}. */
.form_connexion .champ-connexion :is(input, select, textarea) {
    padding: 1rem 1.5rem !important;
    margin-bottom: 0;
    border-radius: var(--radius-sm);
    border: var(--border);   /* 1px solid #eee */
}

/* Le bouton principal du login utilise désormais la classe réutilisable
   .BUTTON.PRINCIPAL (voir plus bas), commune à toutes les pages d'auth. */

/* Focus visible (accessibilité — règle grappe §7), scopé aux contrôles du login. */
.form_connexion :is(input, button):focus-visible,
.container_connexion a:focus-visible {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}


/* ============================================
   RESET FORMULAIRES GPAGE
   Defaults robustes pour un rendu satisfaisant
   sans classes supplémentaires dans le gparam
   ============================================ */

/* Contrôles de saisie : padding confortable, héritage des polices */
/* Note: pas de width par défaut pour ne pas écraser les classes utilitaires (w-33, w-100, etc.) */
INPUT, SELECT, TEXTAREA {
    padding: 0.4rem 0.6rem !important;  /* !important pour écraser Bootstrap/Tailwind */
    margin-bottom: 0.5rem;
    border-radius: 3px;
    border: 1px solid var(--border-ctrl);
    font-size: inherit;
    font-family: inherit;
    box-sizing: border-box;
    background-color: white;
}

/* Checkbox et radio : alignement avec le label */
INPUT[type=checkbox],
INPUT[type=radio] {
    width: auto;
    margin-right: 0.5rem;
    vertical-align: middle;
}

input[type=radio] + label,
input[type=checkbox] + label {
    margin-right: 1rem;
    vertical-align: middle;
}

/* Labels : au-dessus de l'input par défaut */
LABEL {
    display: block;
    margin-bottom: 0.3rem;
    font-weight: normal;
}

BUTTON, .BUTTON {
    padding: 0.5rem 1rem;
    border-radius: 3px;
    border: 1px solid var(--border-ctrl);
}

BUTTON:hover, .BUTTON:hover {
    background: var(--primary-dark);
    color: white;

}

/* Duo auth (façon ram2022 .btn) : PAS de bordure, portés par une ombre douce,
   radius unifié. Remplace le défaut gPage (bordure grise, sans ombre). */
.BUTTON.PRINCIPAL,
.BUTTON.ANNULER {
    border: none;
    border-radius: var(--radius-md);
    box-shadow: var(--box-shadow);
}

/* Bouton PRIMAIRE (façon ram2022 .btn-primary) : vert plein accessible au repos,
   fonce au survol. Modificateur réutilisable sur toutes les pages d'auth. */
.BUTTON.PRINCIPAL {
    background: var(--color-primary-strong);   /* #4a7330, vert AA */
    color: var(--color-primary-text);          /* #fff */
    font-weight: 700;
}
.BUTTON.PRINCIPAL:hover {
    background: var(--color-primary-dark);      /* #5a8c39 */
    color: var(--color-primary-text);
}

/* Bouton ANNULER (secondaire, façon ram2022) : clair au repos, survol CALME
   (gris clair) — plus de rouge foncé agressif pour une action non destructive. */
.BUTTON.ANNULER {
    background: whitesmoke;
    color: var(--text);
}
.BUTTON.ANNULER:hover {
    background: var(--button-hover);   /* #e4e7eb */
    color: var(--text);
}




/* le forçage en lecture seule */
.gpage-force-lecture {
    display: inline-block;
    font-family: var(--font-family);
    color: var(--force-lecture);
    font-weight: bold;
}


/* Les synthèses filtre de recherche et résultats */
#bloc_filtre {
    /*margin-bottom: 0.5rem; */
}

#bloc_filtre button {
    padding: 0.5rem 0.5rem;
    margin-bottom: 0.5rem;
}

#info_resultat {
    padding: 0.5rem 1rem;
    margin-bottom: 0.5rem;
    border-radius: 3px;
    background-color: rgba(255, 248, 78, 0.2);
}

#resultat {
    padding: 0.5rem 1rem;
    margin-bottom: 0.5rem;
    border-radius: 3px;
    background-color: #FAFAFA;
}

#resultat a {
    color: var(--lien);
    text-decoration: underline;
    border-radius: 1px;
}

/* Fieldset : groupement de champs */
/* !important pour écraser Bootstrap/Tailwind qui peuvent reset ces styles */
fieldset {
    border: 1px solid var(--border-ctrl) !important;
    padding: 1rem !important;
    margin: 0 0 1rem 0 !important;
    border-radius: 3px;
    min-width: 0;  /* Fix Firefox */
}

/* Legend : titre du fieldset, largeur auto (pas 100%) */
legend {
    width: auto !important;
    max-width: 100%;
    padding: 0.2rem 0.8rem !important;
    margin-bottom: 0.5rem;
    background-color: var(--button-hover);
    border-radius: 3px;
    font-weight: bold;
    font-size: 1.4rem;
    float: none;  /* Reset Bootstrap float */
    display: block;
}

#resultat a:hover {
    background-color: var(--background-aside);
}


/* les formulaires gpage */
.gpage-commentaire {
    display: block;
    height: 10rem;
    width: 100%;
}

/* === HOOKS DE PERSONNALISATION PORTAIL ===
   Ces classes vides permettent aux portails dérivés
   de personnaliser le style des formulaires gPage
   sans modifier le foncier. */
.gpage-form { /* Container du formulaire */ }
.gpage-form-entete { /* En-tête du formulaire (card-header) */ }
.gpage-form-corps { /* Corps du formulaire (card-body) */ }
.gpage-form-bas { /* Pied du formulaire (card-footer) */ }

.gpage-annee {
    width: 5rem;
}

.gpage-oblig::after {
    content: "*";
    color: var(--gpage-degnoir);
    font-weight: bold;
    margin: 0 0.5rem;
}

.gpage-cadre-messerr {
    padding: 2rem;
}

/* Messages d'erreur de validation (fich.php) */
.message_erreur {
    color: var(--danger);
    font-size: 1rem;
    font-weight: bold;
    background-color: var(--danger-bg, #f8d7da);
    border: 1px solid var(--danger, #dc3545);
    border-radius: 0.5rem;
    padding: 0.5rem 1rem;
    width: 100%;
    box-sizing: border-box;
}

/* Phase B : message_erreur dans bc-row - positionné juste sous le contrôle */
.bc-row .message_erreur {
    display: block;
    margin-top: 0.25rem;  /* Petit espace au-dessus */
    margin-bottom: 0;     /* bc-row gère le margin-bottom */
}

/* Conteneur d'erreur à l'état caché : .sr-only le passe en position:absolute,
   mais .message_erreur { width:100% } écrase le width:1px de .sr-only. Hors d'un
   ancêtre positionné (ex. champ 'hidden' rendu en dehors de la .card Bootstrap :
   meta_modif_par/date), cette boîte absolue prend 100% du viewport, échappe au
   overflow-x:hidden de .mon-container et déborde la page → ascenseur horizontal.
   On restaure l'empreinte nulle de sr-only (spécificité 0-2-0 > .message_erreur).
   Quand l'erreur s'affiche, le JS retire 'sr-only' → .message_erreur reprend. */
.message_erreur.sr-only {
    width: 1px;
    height: 1px;
    padding: 0;
    border: 0;
}

/* ============================================
   PHASE B - Structure BC compatible Tailwind
   ============================================ */

/**
 * bc-row : Wrapper simple pour un BC (label + contrôle + erreur)
 * Remplace bc-groupe (flex problématique) pour permettre les classes Tailwind directes
 * Utilisation : fich.php via generateBcWrapper()
 *
 * Avec bc-row, les classes comme w-25, w-75 fonctionnent directement
 * car il n'y a pas de display:flex qui les réinterprète en flex-basis
 */
.bc-row {
    margin-bottom: 0.5rem;
}

/* Supprime la marge des éléments de formulaire dans bc-row
   (bc-row gère l'espacement via son propre margin-bottom) */
.bc-row input,
.bc-row select,
.bc-row textarea,
.bc-row label,
.bc-row .gpage-force-lecture {
    margin-bottom: 0;
    vertical-align: top;  /* Uniformise l'alignement vertical (évite espace fantôme) */
}

/* Select : largeur auto par défaut (ajustée au contenu)
   Pour forcer une largeur, utiliser 'c' => 'w-100' ou 'w-50' dans le BC */
.bc-row select {
    width: auto;
}

/* Alignement label/input en ligne pour bc-row */
.bc-row > label {
    display: inline-block;
    vertical-align: top;
}

/* Pour les checkbox/radio avec label après */
.bc-row > input[type="checkbox"],
.bc-row > input[type="radio"] {
    display: inline-block;
    vertical-align: middle;
    margin-right: 0.5rem;
}

.bc-row > input[type="checkbox"] + label,
.bc-row > input[type="checkbox"] + span,
.bc-row > input[type="radio"] + label,
.bc-row > input[type="radio"] + span {
    display: inline;
    vertical-align: middle;
}

.gpage-btn-annuler {
    color: var(--border-ctrl);
    cursor: pointer;
    margin-right: 1rem;
    padding: 0.7rem 1rem;
    border-radius: 3px;
    border: 1px solid var(--border-ctrl);

}

.gpage-btn-annuler:hover {
    color: #FFF;
    text-decoration: none;
    background-color: var(--button-hover);
}

/*----------------------*/
/* tableau gForm = List */
/*----------------------*/

.tableau_list, .gpage-menubar-list {
    border: 1px solid var(--gris-leger);
    border-radius: 0.5rem;
    background-color: var(--background-aside);
    margin-bottom: 1rem;
}

.gpage-quoi {
    font-weight: bold;
}


/* Bloc recherche dans gList */
#formRech {
    display: flex;
    align-items: center;
    max-width: 100%;
}

.gpage-btn-recherche {
    padding: 0.2rem 0.8rem;
    flex-shrink: 0;
}

.gpage-btn-recherche:hover {
    box-shadow: var(--bouton-shadow);
}

.gpage-input-recherche {
    display: inline-block;
    padding: 0.2rem 0.8rem;
    margin: 0 0.5rem 0 0;
    outline: none;
}

/* Bouton Ajouter dans gList */
.gpage-btn-list-ajout {
    border: 1px solid var(--border-ctrl);
    border-radius: 0.4rem;
    padding: 0.2rem 0.8rem;
}

.gpage-btn-list-ajout:hover {
    box-shadow: var(--bouton-shadow);
    text-decoration: none;
    color: var(--text);
    background: var(--button-hover);
}

/* Bouton supprimer dans gList */
.gpage-btn-supprimer:hover {
    background-color: var(--background-aside);
}

/* Le tableau de Glist */

.gpage-list-tableau {
    width: 100%;
}

/* Hook personnalisation portail */
.gpage-entete-tableau { /* En-tête tableau gList */ }

tr.gpage-entete-tableau {
    border-width: 0 0 1px 0;
    border-style: solid;
    border-color: var(--gris-leger);
}

tr.gpage-entete-tableau td {
    padding: 0.2rem 0.5rem;
}

tr.gpage-ligneab:first-child {
    border-width: 1px 0 1px 0;
    border-style: solid;
    border-color: var(--gris-leger);
}

tr.gpage-ligneab {
    border-width: 0 0 1px 0;
    border-style: solid;
    border-color: var(--gris-leger);
}

tr.gpage-ligneab td {
    padding: 0rem 0.5rem;
}

tr.gpage-ligneab td i {
    font-size: 1.8rem;
}

tr.gpage-ligneab:nth-child(2n+1) {
    background-color: #fffffe;
}

tr.gpage-ligneab:nth-child(2n) {
    background-color: #fffffe;
}

tr.gpage-ligneab:hover {
    background-color: beige;
}

/*.ANNU_ENTETE_TR td:first-child, tr.gpage-ligneab td:first-child  {*/
/*    border-left: none;*/
/*}*/

/*.ANNU_ENTETE_TR td:last-child, tr.gpage-ligneab td:last-child  {*/
/*    border-right: none;*/
/*}*/

tr.gpage-ligneab:first-child td {
    border-top: none;
}

tr.gpage-ligneab:last-child td {
    /*border-bottom : none;*/
}


/* le navigateur de bas de page de gList */

.gpage-cadrenav {
    display: grid;
    grid-template-columns: 1fr 70% 1fr;
    grid-template-areas:
            "cg pc cd"
            "cg fo cd";
    justify-items: center;
    margin: 0.5rem;
}

.gpage-list-noresult {
    padding: 1rem;
    display: grid;
    justify-items: center;
}

.gpage-chevron {
    margin: 1rem;
    padding: 0.7rem 1rem 0.7rem 1rem;
    font-size: 2rem;
    border-radius: 3px;
    text-decoration: none;
    background-color: var(--border-ctrl);
    opacity: 0.3;
    color: white;
}

.gpage-chevron:hover {
    opacity: 1;
    color: white;
    background: var(--button-hover);
    box-shadow: var(--bouton-shadow);
}

.gpage-nav-gauche {
    grid-area: cg;
    display: flex;
    text-align: center;
}

.gpage-nav-central {
    margin: 0.5rem;
}

.gpage-nav-droite {
    grid-area: cd;
    display: flex;
    text-align: center;
}

.gpage-nav-infos {
    font-size: 1.2rem;
    grid-area: pc;
    display: flex;
    justify-content: center;
    margin-bottom: 1rem;
}

.gpage-nav-page {
    grid-area: fo;
    display: flex;
    justify-content: center;
}

.gpage-numpage {
    display: inline-block;
    padding: 0 0.5rem;
    margin: 0 0.2rem;
    border-radius: 2px;
}

a.gpage-numpage {
    text-decoration: none;
    background-color: var(--border-ctrl);
    opacity: 0.3;
    color: white;
}

a.gpage-numpage:hover {
    opacity: 1;
    background: var(--button-hover);
    box-shadow: var(--bouton-shadow);
}

span.gpage-numpage {
    /*box-shadow: var(--bouton-shadow);*/
    font-weight: bold;
    background-color: white;
    color: var(--text);
}

.gpage-annuler-recherche {
    padding: 0.2rem 0.6rem;
    margin: 0 0.7rem;
    font-size: 1.2rem;
    display: inline-block;
    border-radius: 0.5rem;
    border: 1px solid var(--border-ctrl);
}

a.gpage-annuler-recherche:hover {
    color: var(--text);
    text-decoration: none;
    background: var(--button-hover);
    box-shadow: var(--bouton-shadow);
}

.bloc_id {
    display: flex;
    flex-direction: row;
}

.envoi_ind {
    margin-left: 1rem;
    font-size: 1.2rem;
}

/* === HOOKS ACTION GLIST ===
   Personnalisation du bloc d'actions en bas de gList */
.gpage-cadre-action { /* Container des actions */ }
.gpage-select-action { /* Select des actions */ }
.gpage-cac-action { /* Checkbox de sélection ligne */ }

/* aucun enregistrement */
.tableau_list_aucun_enr {
    padding: 3rem;
    min-height: 10rem;
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    color: var(--gris-fonce, #666);
    border: 1px solid var(--gris-leger);
    border-radius: 0.5rem;
}

/* ============================================
   SWEETALERT2 - Personnalisation gPage
   Harmonisation avec la charte graphique
   ============================================ */

/* Container de la modale */
/* Note: le site utilise font-size: 62.5% sur :root donc 1rem = 10px */
.swal2-popup.gpage-swal {
    font-family: var(--font-family);
    font-size: 1.6rem;  /* = 16px, comme le body */
    border-radius: 8px;
    box-shadow: var(--box-shadow);
}

/* Titre */
.swal2-popup.gpage-swal .swal2-title {
    font-size: 1.8rem;  /* = 18px */
    font-weight: 600;
    color: var(--text);
}

/* Texte */
.swal2-popup.gpage-swal .swal2-html-container {
    font-size: 1.6rem;  /* = 16px, comme le body */
    color: var(--text-color);
    line-height: 1.5;
}

/* Boutons */
.swal2-popup.gpage-swal .swal2-actions {
    gap: 1rem;
}

.swal2-popup.gpage-swal .swal2-confirm,
.swal2-popup.gpage-swal .swal2-cancel {
    font-family: var(--font-family);
    font-size: 1.4rem;  /* = 14px */
    font-weight: 500;
    padding: 0.8rem 1.6rem;
    border-radius: 4px;
    min-width: 140px;
}

/* --- Variante DANGER (warning, error) : Confirmer = rouge, Annuler = vert --- */
.swal2-popup.gpage-swal-danger .swal2-confirm {
    background-color: var(--color-danger) !important;
}

.swal2-popup.gpage-swal-danger .swal2-confirm:hover {
    background-color: #c0392b !important;
}

.swal2-popup.gpage-swal-danger .swal2-cancel {
    background-color: var(--color-primary) !important;
}

.swal2-popup.gpage-swal-danger .swal2-cancel:hover {
    background-color: var(--color-primary-dark) !important;
}

/* --- Variante POSITIVE (question, info) : Confirmer = vert, Annuler = gris --- */
.swal2-popup.gpage-swal-positive .swal2-confirm {
    background-color: var(--color-primary) !important;
}

.swal2-popup.gpage-swal-positive .swal2-confirm:hover {
    background-color: var(--color-primary-dark) !important;
}

.swal2-popup.gpage-swal-positive .swal2-cancel {
    background-color: #6c757d !important;
}

.swal2-popup.gpage-swal-positive .swal2-cancel:hover {
    background-color: #5a6268 !important;
}

/* --- Icônes --- */
.swal2-popup.gpage-swal .swal2-icon.swal2-warning {
    border-color: var(--color-warning);
    color: var(--color-warning);
}

.swal2-popup.gpage-swal .swal2-icon.swal2-question {
    border-color: var(--color-info);
    color: var(--color-info);
}