/* Overlay de chargement/enregistrement global */
.loading_overlay {
    position: fixed;
    inset: 0;
    z-index: 9999;
    display: none;
    align-items: center;
    justify-content: center;
    background-color: rgba(0, 0, 0, 0.35);
}

/* LE VOILE EST CELUI DU DÉPART, JAMAIS CELUI DE L'ARRIVÉE (§4.4). On l'a essayé au
   chargement de la page, le temps que les modules arrivent : on le voit alors DEUX fois pour
   un seul déplacement – au clic sur le lien, puis de nouveau sur la page qui s'ouvre. Une
   page qui n'a pas fini de charger ses modules ne l'annonce donc pas. */
.loading_overlay.active {
    display: flex;
}

.loading_overlay_content {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 28px;
    background: var(--color-white, #fff);
    border-radius: 8px;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
    font-size: var(--text-body);
    font-weight: 500;
    color: var(--color-gray-700, #374151);
}

.loading_spinner {
    width: 20px;
    height: 20px;
    border: 3px solid var(--color-gray-200, #e5e7eb);
    border-top-color: var(--color-primary, #2563eb);
    border-radius: 50%;
    animation: loading_spin 0.7s linear infinite;
    flex-shrink: 0;
}

@keyframes loading_spin {
    to { transform: rotate(360deg); }
}

/* Spinner dans un bouton (modale – centré seul) */
.btn_spinner {
    width: 16px;
    height: 16px;
    border-width: 2px;
    border-top-color: currentColor;
    border-right-color: transparent;
    border-bottom-color: transparent;
    border-left-color: transparent;
    margin: 0 auto;
    display: block;
}

/* Spinner dans un bouton à côté du texte */
.btn_spinner_inline {
    width: 16px;
    height: 16px;
    border-width: 2px;
    border-top-color: currentColor;
    border-right-color: transparent;
    border-bottom-color: transparent;
    border-left-color: transparent;
    display: inline-block;
    vertical-align: middle;
    margin-left: 8px;
}

/* Loader LOCAL (showLocalLoader) : remplace le contenu d'un conteneur pendant qu'il se
   recharge. Il vivait dans planning.css alors que le helper est commun – hors du
   planning, le spinner sortait sans mise en forme. Le nom de classe est conservé : il
   est aussi posé en dur dans app/pages/admin/planning.php. */
.planning_card_loading {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 60px 20px;
}

/* Un voile d'attente ne s'imprime pas – et fixé, il ouvrirait une page de plus. */
@media print {
    .loading_overlay {
        display: none;
    }
}
