/* ==========================================================================
   iOTA GCC — animations
   Keyframes and the scroll-reveal system. All motion is disabled wholesale
   under prefers-reduced-motion at the bottom of this file.
   ========================================================================== */

@keyframes i-marquee {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}

@keyframes i-rise {
	from { opacity: 0; transform: translateY(26px); }
	to   { opacity: 1; transform: translateY(0); }
}

@keyframes i-fadein {
	from { opacity: 0; }
	to   { opacity: 1; }
}

@keyframes i-softfade {
	from { opacity: 0; }
	to   { opacity: 1; }
}

@keyframes i-maskrise {
	from { clip-path: inset(115% 0 0 0); transform: translateY(18px); }
	to   { clip-path: inset(-30% 0 0 0); transform: translateY(0); }
}

@keyframes i-linegrow {
	from { transform: scaleX(0); }
	to   { transform: scaleX(1); }
}

@keyframes i-mrise {
	from { opacity: 0; transform: translateY(16px); }
	to   { opacity: 1; transform: none; }
}

/* --------------------------------------------------------------------------
   Scroll reveal
   Elements are marked by JS, hidden, then revealed as they enter the viewport.
   The .i-reveal-ready class is only added once JS is running, so content stays
   visible if scripts fail.
   -------------------------------------------------------------------------- */

.i-reveal-ready [data-reveal]:not([data-revealed]) {
	opacity: 0;
	will-change: opacity, transform;
}

[data-revealed] {
	animation: i-mrise .75s cubic-bezier(.16, 1, .3, 1) both;
	animation-delay: var(--reveal-delay, 0ms);
}

/* Hero content lifts in once the preloader has cleared. */
.i-hero__inner {
	animation: i-rise .9s ease both;
	animation-delay: var(--hero-delay, 0ms);
}

.i-no-loader .i-hero__inner { --hero-delay: 120ms; }

/* --------------------------------------------------------------------------
   Reduced motion
   -------------------------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }

	*,
	*::before,
	*::after {
		animation-duration: .001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .001ms !important;
		scroll-behavior: auto !important;
	}

	.i-reveal-ready [data-reveal]:not([data-revealed]) { opacity: 1; }

	.i-logos__track { animation: none; }

	.i-cursor { display: none; }

	.i-case:hover .i-case__frame,
	.i-tiercard:hover .i-tiercard__img,
	.i-brand:hover { transform: none; }
}
