/* Pre-animation states — JS toggles .is-ready to reveal.
   This avoids FOUC before GSAP kicks in. */

html.js-ready [data-ffb-fade]    { opacity: 1; transform: none; transition: opacity var(--dur-2) var(--ease-out-quint), transform var(--dur-2) var(--ease-out-quint); }

html.js-ready [data-ffb-fade]:not(.is-in) { opacity: 0; transform: translateY(1.5rem); }
html.js-ready [data-ffb-stagger] > *:not(.is-in) { opacity: 0; transform: translateY(1.75rem); }

html.js-ready [data-ffb-parallax] {
	will-change: transform;
}

/* Fallback — if JS fails to load, show content after 3s */
@media (prefers-reduced-motion: no-preference) {
	html:not(.js-ready) [data-ffb-fade],
	html:not(.js-ready) [data-ffb-stagger] > * {
		animation: ffb-reveal-fallback 0.6s 3s both ease-out;
	}
}
@keyframes ffb-reveal-fallback {
	from { opacity: 0; transform: translateY(1rem); }
	to   { opacity: 1; transform: none; }
}

/* Icon animations intentionally removed per design feedback —
   the What We Do (.service-item__icon) and Why Choose Us
   (.reason-row__icon) sections used to carry continuous idle loops
   plus hover signatures (wobble / spin / pulse / bounce / tick /
   drive / gear) and an entrance pop. All of that is gone now;
   icons render as plain marks and inherit only the section's
   reveal-from-below animation handled by GSAP/data-ffb-stagger. */

/* Focus rings */
:where(a, button, input, textarea, select):focus-visible {
	outline: 0.15rem solid var(--c-accent);
	outline-offset: 0.15rem;
	border-radius: var(--r-sm);
}
