.invalid-feedback {
    display: none;
}
.is-invalid + .invalid-feedback {
    display: block;
}

@keyframes shake {
    0% { transform: translateX(0); }
    25% { transform: translateX(-10px); }
    50% { transform: translateX(10px); }
    75% { transform: translateX(-10px); }
    100% { transform: translateX(0); }
}
.shake {
    animation: shake 0.5s;
}
