/* Scroll-Reveals: NUR transform animieren, nie opacity:0 als Startzustand —
   sonst bleiben Sections in Full-Page-Screenshots/Crawlern leer. Reales
   Markup ist immer vollständig sichtbar, JS liefert nur die Bewegung obendrauf. */
.reveal {
	transform: translateY(28px);
	transition: transform 700ms var(--ease-out);
	transition-delay: var(--reveal-delay, 0ms);
}

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

.reveal-row > * {
	transform: translateY(28px);
	transition: transform 700ms var(--ease-out);
}

.reveal-row.is-visible > * {
	transform: translateY(0);
}

.reveal-row.is-visible > *:nth-child(1) {
	transition-delay: 0ms;
}
.reveal-row.is-visible > *:nth-child(2) {
	transition-delay: 60ms;
}
.reveal-row.is-visible > *:nth-child(3) {
	transition-delay: 120ms;
}
.reveal-row.is-visible > *:nth-child(4) {
	transition-delay: 180ms;
}
.reveal-row.is-visible > *:nth-child(5) {
	transition-delay: 240ms;
}
.reveal-row.is-visible > *:nth-child(6) {
	transition-delay: 300ms;
}

/* Hero: sanfte Einblendung beim Laden (nur beim initialen Paint, per JS-Klasse) */
.hero-copy > * {
	transform: translateY(16px);
	opacity: 1;
	transition: transform 650ms var(--ease-out);
}

.is-loaded .hero-copy > *:nth-child(1) {
	transition-delay: 40ms;
}
.is-loaded .hero-copy > *:nth-child(2) {
	transition-delay: 100ms;
}
.is-loaded .hero-copy > *:nth-child(3) {
	transition-delay: 160ms;
}
.is-loaded .hero-copy > *:nth-child(4) {
	transition-delay: 220ms;
}

body:not(.is-loaded) .hero-copy > * {
	transform: translateY(16px);
}

body.is-loaded .hero-copy > * {
	transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
	.reveal,
	.reveal-row > *,
	.hero-copy > * {
		transition: none !important;
		transform: none !important;
	}
}
