/**
 * Animatie-utilities: scroll-reveal, "ademende" pulse (vitaliteit) en zachte
 * parallax. Toegepast via classes, geactiveerd door animations.js
 * (IntersectionObserver). Geen externe library — zie plan voor de afweging.
 */

.reveal {
	opacity: 0;
	transform: translateY(20px);
	transition: opacity var(--duration-medium) var(--ease-calm), transform var(--duration-medium) var(--ease-calm);
}

.reveal.is-visible {
	opacity: 1;
	transform: translateY(0);
}

/* Gestaffelde reveal binnen een groep (bv. de "mogelijkheden"-stappen op Home). */
.reveal-group > * {
	transition-delay: calc(var(--reveal-index, 0) * 120ms);
}

@keyframes optima-breathe {
	0%,
	100% {
		transform: scale(1);
	}
	50% {
		transform: scale(1.03);
	}
}

.pulse-breathe {
	animation: optima-breathe 4s var(--ease-calm) infinite;
}

.parallax-soft {
	will-change: transform;
	transition: transform 0.1s linear;
}

@media (prefers-reduced-motion: reduce) {
	.reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}

	.pulse-breathe,
	.parallax-soft {
		animation: none;
		transform: none;
	}
}
