/* Asteriscos de campos obrigatórios via CSS :has() — reage dinamicamente ao atributo required
   (substitui o .asteriskField estático do crispy-forms, que não acompanha mudanças via JS) */
.asteriskField {
    display: none;
}

label:has(+ input:required)::after,
label:has(+ select:required)::after {
    content: " *";
    color: red;
}

/* Tom Select — borda vermelha no estado inválido (tema bootstrap5 aplica só no wrapper, não no .ts-control) */
.ts-wrapper.is-invalid .ts-control {
    border-color: var(--bs-form-invalid-border-color, #dc3545);
}

/* Cards clicáveis com efeito de zoom no hover */
.card-link {
    transition: transform .3s ease, box-shadow .3s ease;
}
.card-link:hover {
    transform: scale(1.03);
    box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important;
}