/* =======================================================
   SCROLL REVEALS
   Wichtig: Startzustand bleibt opacity:1 (kein class-gated
   visibility) — nur ein dezenter Transform-Offset, damit
   Inhalte auch ohne JS/in Screenshots sichtbar bleiben.
   ======================================================= */
.reveal {
	opacity: 1;
	transform: translateY(22px);
	transition: transform 640ms var(--ease-out), opacity 640ms var(--ease-out);
}
.reveal.is-in { transform: translateY(0); }

.reveal-scale {
	opacity: 1;
	transform: scale(0.97);
	transition: transform 560ms var(--ease-out);
}
.reveal-scale.is-in { transform: scale(1); }

/* Staggered children (40-80ms) — delay applied inline via JS custom property */
.reveal-stagger { transition-delay: var(--reveal-delay, 0ms); }

@media (prefers-reduced-motion: reduce) {
	.reveal, .reveal-scale {
		transform: none !important;
		transition: opacity 200ms linear !important;
	}
}

/* =======================================================
   HERO PARALLAX (JS sets --parallax-y custom property)
   ======================================================= */
.hero-media {
	transform: translate3d(0, var(--parallax-y, 0), 0) scale(1.02);
}
@media (prefers-reduced-motion: reduce) {
	.hero-media { transform: none !important; }
}

/* Nature section floating images parallax offsets */
.nature-media .np-1 { transform: translate3d(0, var(--parallax-slow, 0), 0); }
.nature-media .np-2 { transform: translate3d(0, var(--parallax-fast, 0), 0); }
@media (prefers-reduced-motion: reduce) {
	.nature-media .np-1, .nature-media .np-2 { transform: none !important; }
}

/* =======================================================
   TILT-ON-HOVER (JS sets --rx / --ry via mousemove)
   ======================================================= */
.tilt-card {
	transform: perspective(1000px) rotateX(var(--ry, 0deg)) rotateY(var(--rx, 0deg)) translateZ(0);
}
@media (prefers-reduced-motion: reduce) {
	.tilt-card { transform: none !important; }
}
@media (hover: none) {
	.tilt-card { transform: none !important; }
}

/* Fade-in for whole sections observed once */
.fade-in-up {
	opacity: 1;
	transform: translateY(28px);
	transition: transform 700ms var(--ease-out);
}
.fade-in-up.is-in { transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
	.fade-in-up { transform: none !important; }
}

/* Loading shimmer removed on paint (avoids blank flash) */
.no-js .reveal,
.no-js .fade-in-up { transform: none; }
