/**
 * NO MODAL SHAKE CSS
 * Supprime toutes les animations de vibration/shake sur les modals et formulaires
 * Ce fichier doit être chargé APRÈS Bootstrap pour override ses styles
 */

/* Désactiver TOUTES les animations sur les modals */
.modal,
.modal *,
.modal-dialog,
.modal-content,
.modal-backdrop,
.modern-modal,
.modern-modal *,
.modal-container,
.modal-header,
.modal-body,
.modal-footer {
    animation: none !important;
    -webkit-animation: none !important;
    -moz-animation: none !important;
    -o-animation: none !important;
    transition: opacity 0.15s linear !important;
}

/* Désactiver les animations sur les formulaires et champs invalides */
.form-control,
.form-control:invalid,
.form-control.is-invalid,
.form-select,
.form-select:invalid,
.form-select.is-invalid,
.form-check-input,
.form-check-input:invalid,
.form-check-input.is-invalid,
.was-validated .form-control:invalid,
.was-validated .form-select:invalid,
.was-validated .form-check-input:invalid {
    animation: none !important;
    -webkit-animation: none !important;
    -moz-animation: none !important;
    -o-animation: none !important;
}

/* Désactiver les transformations qui pourraient causer des tremblements */
.modal.show .modal-dialog,
.modern-modal.show .modal-container {
    transform: none !important;
    -webkit-transform: none !important;
    -moz-transform: none !important;
    -o-transform: none !important;
}

/* Override Bootstrap modal fade animation */
.modal.fade .modal-dialog {
    transition: transform 0.3s ease-out !important;
    transform: translate(0, 0) !important;
}

.modal.show .modal-dialog {
    transform: none !important;
}

/* Empêcher toute animation @keyframes */
@keyframes shake {
    from, to { transform: translateX(0); }
}

@-webkit-keyframes shake {
    from, to { -webkit-transform: translateX(0); }
}

/* Forcer l'arrêt des animations shake sur les modals et formulaires */
.modal *:not(.spinner-border):not(.spinner-grow):not([class*="fade"]),
.modern-modal *:not(.spinner-border):not(.spinner-grow),
.form-control,
.form-select,
.form-check-input {
    animation-duration: 0s !important;
    animation-delay: 0s !important;
}

/* Assurer que les modals modernes ne bougent pas */
.modern-modal {
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    width: 100% !important;
    height: 100% !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
}

.modern-modal .modal-container {
    position: relative !important;
    transform: none !important;
    -webkit-transform: none !important;
}

/* Bootstrap modal centering sans animation */
.modal-dialog-centered {
    display: flex !important;
    align-items: center !important;
    min-height: calc(100% - 1rem) !important;
}

.modal-dialog-centered::before {
    display: block !important;
    height: calc(100vh - 1rem) !important;
    height: -webkit-fill-available !important;
    content: "" !important;
}

/* Empêcher le shake sur les éléments avec classe .has-error */
.has-error,
.has-error * {
    animation: none !important;
    -webkit-animation: none !important;
}

/* S'assurer qu'aucun élément ne peut utiliser l'animation shake */
[class*="shake"],
[id*="shake"] {
    animation: none !important;
    -webkit-animation: none !important;
}

/* Important : Override des animations de feedback */
.invalid-feedback,
.valid-feedback,
.invalid-tooltip,
.valid-tooltip {
    animation: none !important;
}

/* Désactiver les transitions sur les modals qui pourraient causer des effets visuels */
.modal,
.modal-backdrop {
    transition: opacity 0.15s linear !important;
}

.modal-dialog {
    transition: none !important;
}

/* Forcer les modals Bootstrap à rester stables */
.modal.show {
    display: block !important;
}

.modal-backdrop.show {
    opacity: 0.5 !important;
}

/* Empêcher les effets de scale qui pourraient sembler être un shake */
.modal-content,
.modal-dialog,
.modern-modal .modal-container {
    transform: scale(1) !important;
    -webkit-transform: scale(1) !important;
}

/* Media query pour réduire les mouvements (accessibilité) */
@media (prefers-reduced-motion: reduce) {
    * {
        animation: none !important;
        transition: none !important;
    }
}
