/*
 * form_validation_public.css
 * ==========================================================================
 * États de validation des formulaires publics.
 * ==========================================================================
 *
 * Le fond fonctionnel des formulaires n'est pas modifié :
 * ce fichier ajoute uniquement la couche de lisibilité des erreurs.
 */

.pfv-summary {
    margin-bottom: 1.25rem;
    padding: 1rem 1.1rem;
    border: 1px solid #d98a93 !important;
    border-left: 5px solid #b42332 !important;
    background: #fff4f5 !important;
    color: #7b1722 !important;
    box-shadow: 0 8px 20px rgba(123, 23, 34, .08);
}

.pfv-summary-title {
    margin-bottom: .4rem;
    font-weight: 700;
}

.pfv-summary-list {
    margin: 0;
    padding-left: 1.15rem;
}

.pfv-summary-list li + li {
    margin-top: .2rem;
}

.pfv-summary-link {
    padding: 0;
    color: #8f1d29;
    background: transparent;
    border: 0;
    text-align: left;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.pfv-summary-link:hover,
.pfv-summary-link:focus {
    color: #5f1119;
}

form .form-control.is-invalid,
form .form-select.is-invalid,
form input.is-invalid:not([type="checkbox"]):not([type="radio"]),
form textarea.is-invalid,
form select.is-invalid {
    background-color: #fff3f4 !important;
    border-color: #b42332 !important;
    border-width: 2px !important;
    box-shadow: 0 0 0 .15rem rgba(180, 35, 50, .08) !important;
}

form .form-control.is-invalid:focus,
form .form-select.is-invalid:focus,
form input.is-invalid:focus,
form textarea.is-invalid:focus,
form select.is-invalid:focus {
    border-color: #9d1e2c !important;
    box-shadow: 0 0 0 .22rem rgba(180, 35, 50, .20) !important;
}

form input[type="checkbox"].is-invalid,
form input[type="radio"].is-invalid {
    border-color: #b42332 !important;
    border-width: 2px !important;
    box-shadow: 0 0 0 .12rem rgba(180, 35, 50, .10);
}

.pfv-inline-error {
    display: flex !important;
    align-items: flex-start;
    gap: .4rem;
    margin-top: .35rem;
    color: #a51f2e !important;
    font-size: .88rem;
    font-weight: 600;
    line-height: 1.35;
}

.pfv-error-cross {
    display: inline-grid;
    width: 1.1rem;
    height: 1.1rem;
    flex: 0 0 1.1rem;
    place-items: center;
    margin-top: .05rem;
    border-radius: 50%;
    color: #fff;
    background: #b42332;
    font-size: .68rem;
    line-height: 1;
}

form .form-control.is-valid,
form .form-select.is-valid,
form input.is-valid:not([type="checkbox"]):not([type="radio"]),
form textarea.is-valid,
form select.is-valid {
    border-color: #43815a !important;
}

form .error-message {
    color: #a51f2e;
    font-size: .88rem;
    font-weight: 600;
}

/*
 * Les formulaires CakePHP ajoutent parfois "error" sur le conteneur mais
 * pas "is-invalid" sur l'input. Cette règle permet de voir immédiatement
 * le problème avant même l'exécution de jQuery.
 */
form .error > .form-control,
form .error > .form-select,
form .input.error > input,
form .select.error > select,
form .textarea.error > textarea {
    background-color: #fff3f4 !important;
    border-color: #b42332 !important;
    border-width: 2px !important;
}

@media (max-width: 575.98px) {
    .pfv-summary {
        padding: .85rem .9rem;
    }
}


/* === VALIDATION SUBMIT ONLY START === */
/*
 * Complément du CSS de validation :
 * mise en avant de la LISTE des champs à corriger.
 *
 * Les champs restent neutres tant que l'utilisateur n'a pas tenté de
 * valider le formulaire.
 */

.pfv-summary {
    scroll-margin-top: 110px;
}

.pfv-summary-heading {
    display: flex;
    align-items: center;
    gap: .55rem;
    margin-bottom: .3rem;
}

.pfv-summary-arrow {
    display: inline-grid;
    width: 1.65rem;
    height: 1.65rem;
    flex: 0 0 1.65rem;
    place-items: center;
    color: #fff;
    background: #b42332;
    border-radius: 50%;
    font-size: 1.05rem;
    font-weight: 800;
    line-height: 1;
}

.pfv-summary-title {
    margin: 0;
    color: #7b1722;
    font-family: "Oswald", Arial, sans-serif;
    font-size: 1.18rem;
    font-weight: 600;
}

.pfv-summary-intro {
    margin: .25rem 0 .55rem 2.2rem;
    color: #7b1722;
    font-size: .92rem;
}

.pfv-summary-list {
    margin: 0 0 0 2.15rem;
    padding-left: 1rem;
}

.pfv-summary-list li {
    padding-left: .15rem;
}

.pfv-summary-list li + li {
    margin-top: .28rem;
}

.pfv-summary-link {
    cursor: pointer;
}

/*
 * Tant qu'aucune classe .is-invalid / .is-valid n'a été posée par jQuery,
 * aucun état coloré supplémentaire n'est ajouté.
 */
/* === VALIDATION SUBMIT ONLY END === */

/* === FORM ERR UNIFORM COLORS V1 === */
/*
 * Priorité visuelle absolue aux états de validation.
 *
 * app.css distingue les champs obligatoires/facultatifs par couleur de fond.
 * Lorsqu'un champ devient invalide, cette distinction ne doit plus être
 * visible : tous les champs fautifs prennent exactement le même rendu.
 */

/* Erreur posée explicitement par PublicFormValidation / Bootstrap. */
.public-form .form-control.is-invalid,
.public-form .form-select.is-invalid,
.public-form input.is-invalid:not([type="checkbox"]):not([type="radio"]),
.public-form textarea.is-invalid,
.public-form select.is-invalid,

/* Erreur serveur CakePHP : classe .error sur le conteneur. */
.public-form .input.error > input:not([type="checkbox"]):not([type="radio"]),
.public-form .input.error > textarea,
.public-form .select.error > select,
.public-form .textarea.error > textarea,
.public-form .error > .form-control,
.public-form .error > .form-select,

/* Même convention hors .public-form pour les formulaires métier
 * qui chargent volontairement form_validation_public.css.
 */
form .form-control.is-invalid,
form .form-select.is-invalid,
form input.is-invalid:not([type="checkbox"]):not([type="radio"]),
form textarea.is-invalid,
form select.is-invalid,
form .input.error > input:not([type="checkbox"]):not([type="radio"]),
form .input.error > textarea,
form .select.error > select,
form .textarea.error > textarea {
    background-color: #fff3f4 !important;
    border-color: #b42332 !important;
    border-width: 2px !important;
    color: inherit !important;
    box-shadow: 0 0 0 .12rem rgba(180, 35, 50, .08) !important;
}

/* Le focus ne doit jamais refaire passer un champ invalide en bleu. */
.public-form .form-control.is-invalid:focus,
.public-form .form-select.is-invalid:focus,
.public-form input.is-invalid:focus,
.public-form textarea.is-invalid:focus,
.public-form select.is-invalid:focus,
.public-form .input.error > input:focus,
.public-form .input.error > textarea:focus,
.public-form .select.error > select:focus,
.public-form .textarea.error > textarea:focus,
form .form-control.is-invalid:focus,
form .form-select.is-invalid:focus,
form input.is-invalid:focus,
form textarea.is-invalid:focus,
form select.is-invalid:focus {
    background-color: #fff3f4 !important;
    border-color: #9d1e2c !important;
    box-shadow: 0 0 0 .22rem rgba(180, 35, 50, .20) !important;
}

/* Checkbox/radio invalides : même rouge. */
.public-form input[type="checkbox"].is-invalid,
.public-form input[type="radio"].is-invalid,
.public-form .error input[type="checkbox"],
.public-form .error input[type="radio"],
form input[type="checkbox"].is-invalid,
form input[type="radio"].is-invalid {
    border-color: #b42332 !important;
    border-width: 2px !important;
    box-shadow: 0 0 0 .12rem rgba(180, 35, 50, .10) !important;
}

/* État valide : homogène également, sans conflit avec obligatoire/facultatif. */
.public-form .form-control.is-valid,
.public-form .form-select.is-valid,
.public-form input.is-valid:not([type="checkbox"]):not([type="radio"]),
.public-form textarea.is-valid,
.public-form select.is-valid,
form .form-control.is-valid,
form .form-select.is-valid,
form input.is-valid:not([type="checkbox"]):not([type="radio"]),
form textarea.is-valid,
form select.is-valid {
    background-color: #f3fbf5 !important;
    border-color: #43815a !important;
}

/* Messages CakePHP et moteur PFV : même rouge et même graisse. */
.public-form .error-message,
.public-form .pfv-inline-error,
form .error-message,
form .pfv-inline-error {
    color: #a51f2e !important;
    font-weight: 600 !important;
}

/* === END FORM ERR UNIFORM COLORS V1 === */
