/* Form fade-in animation for form */
.form-fade-in {
    opacity: 0;
    transform: translateY(10px);
    animation: fadeInUp 1.6s ease-out forwards;
}

@keyframes fadeInUp {
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Smooth invalid-feedback appearance */
.invalid-feedback {
    opacity: 0;
    transition: opacity .25s ease;
}

.was-validated .form-control:invalid ~ .invalid-feedback,
.form-control.is-invalid ~ .invalid-feedback {
    opacity: 1;
}

/* Valid icon */
.form-control.is-valid {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2328a745' viewBox='0 0 16 16'%3E%3Cpath d='M13.485 1.929L6 9.414 2.515 5.929 1.1 7.343 6 12.243l8.9-8.9z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right .75rem center;
    background-size: 1rem;
}

/* Invalid state — no icon */
.form-control.is-invalid {
    background-image: none !important;
}

/* Remove native browser validation icons */
input:invalid,
textarea:invalid {
    box-shadow: none !important;
    background-image: none !important;
}

/* Remove WebKit validation bubble */
input:invalid::-webkit-validation-bubble-message,
textarea:invalid::-webkit-validation-bubble-message {
    display: none;
}
