/* ===== Traventia UI — Microinterações ===== */

@keyframes tv-fade-in {
	from { opacity: 0; }
	to { opacity: 1; }
}

@keyframes tv-fade-in-up {
	from { opacity: 0; transform: translateY(12px); }
	to { opacity: 1; transform: translateY(0); }
}

/**
 * Sem JS (ou antes do traventia-reveal.js rodar), o elemento fica com a
 * aparência final normal — só quando o JS marca .tv-reveal-init é que ele
 * começa oculto, esperando entrar na viewport (.is-visible) pra animar.
 * Isso evita o "always-animate-on-load" (gasta ciclo de animação em algo
 * fora da tela) sem quebrar a visibilidade quando o JS não carrega.
 */
.tv-animate-fade-in.tv-reveal-init,
.tv-animate-fade-in-up.tv-reveal-init { opacity: 0; }

.tv-animate-fade-in-up.tv-reveal-init { transform: translateY(12px); }

.tv-animate-fade-in.tv-reveal-init.is-visible { animation: tv-fade-in var(--tv-transition-slow) ease both; }
.tv-animate-fade-in-up.tv-reveal-init.is-visible { animation: tv-fade-in-up var(--tv-transition-slow) ease both; }

.tv-hover-lift { transition: transform var(--tv-transition-base), box-shadow var(--tv-transition-base); }
.tv-hover-lift:hover { transform: translateY(-2px); box-shadow: var(--tv-shadow-md); }

.tv-hover-scale { transition: transform var(--tv-transition-base); }
.tv-hover-scale:hover { transform: scale(1.02); }

@media (prefers-reduced-motion: reduce) {
	.tv-animate-fade-in,
	.tv-animate-fade-in-up,
	.tv-hover-lift,
	.tv-hover-scale {
		animation: none !important;
		transition: none !important;
		opacity: 1 !important;
		transform: none !important;
	}
}