/**
 * Keyframes ported verbatim from ApniPharmacy.dc.html.
 * All usages respect prefers-reduced-motion via base.css's global override.
 */
@keyframes apc-fade-up {
	from { opacity: 0; transform: translateY(22px); }
	to { opacity: 1; transform: translateY(0); }
}
@keyframes apc-pop-in {
	0% { transform: scale(1); }
	40% { transform: scale(1.35); }
	100% { transform: scale(1); }
}
@keyframes apc-shimmer {
	0% { background-position: -300px 0; }
	100% { background-position: 300px 0; }
}
@keyframes apc-spin {
	to { transform: rotate(360deg); }
}
@keyframes apc-floaty {
	0%, 100% { transform: translateY(0); }
	50% { transform: translateY(-14px); }
}
@keyframes apc-check-pop {
	0% { transform: scale(0.6); opacity: 0; }
	60% { transform: scale(1.15); opacity: 1; }
	100% { transform: scale(1); opacity: 1; }
}

.apc-anim-fade-up { animation: apc-fade-up 0.6s ease both; }
.apc-anim-fade-up--slow { animation: apc-fade-up 0.8s ease both; }
.apc-anim-float { animation: apc-floaty 6s ease-in-out infinite; }
.apc-anim-float--delay { animation: apc-floaty 7s ease-in-out infinite 1s; }
.apc-anim-check { animation: apc-check-pop 0.5s ease both; }
.apc-anim-pop { animation: apc-pop-in 0.4s ease; }

/* Scroll-reveal: sections start hidden and reveal via IntersectionObserver
   (see assets/js/main.js) — but if JS fails to run for any reason, content
   still renders fully visible (progressive enhancement, no [hidden] class
   on the server-rendered markup). */
.apc-reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.5s ease, transform 0.5s ease; }
.apc-reveal.is-visible { opacity: 1; transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
	.apc-reveal { opacity: 1; transform: none; transition: none; }
}
.apc-no-js .apc-reveal { opacity: 1; transform: none; }
