/**
 * animations.css — keyframes + animation utility classes.
 *
 * Single responsibility: define @keyframes + animation classes. No layout
 * or color declarations beyond what the animation requires.
 *
 * Respects prefers-reduced-motion (handled in reset.css).
 *
 * @package ICE_GeneratePress_Child
 * @since   1.0.0
 */

/* ----- Fade in ----- */
@keyframes ice-fade-in {
	from { opacity: 0; }
	to   { opacity: 1; }
}

.ice-animate-fade-in {
	animation: ice-fade-in var(--ice-t-base) both;
}

/* ----- Fade in up ----- */
@keyframes ice-fade-in-up {
	from {
		opacity: 0;
		transform: translateY(20px);
	}
	to {
		opacity: 1;
		transform: translateY(0);
	}
}

.ice-animate-fade-in-up {
	animation: ice-fade-in-up var(--ice-t-slow) both;
}

/* ----- Fade in down ----- */
@keyframes ice-fade-in-down {
	from {
		opacity: 0;
		transform: translateY(-20px);
	}
	to {
		opacity: 1;
		transform: translateY(0);
	}
}

.ice-animate-fade-in-down {
	animation: ice-fade-in-down var(--ice-t-slow) both;
}

/* ----- Scale in ----- */
@keyframes ice-scale-in {
	from {
		opacity: 0;
		transform: scale(0.96);
	}
	to {
		opacity: 1;
		transform: scale(1);
	}
}

.ice-animate-scale-in {
	animation: ice-scale-in var(--ice-t-base) both;
}

/* ----- Slide in right ----- */
@keyframes ice-slide-in-right {
	from {
		opacity: 0;
		transform: translateX(40px);
	}
	to {
		opacity: 1;
		transform: translateX(0);
	}
}

.ice-animate-slide-in-right {
	animation: ice-slide-in-right var(--ice-t-slow) both;
}

/* ----- Slide in left ----- */
@keyframes ice-slide-in-left {
	from {
		opacity: 0;
		transform: translateX(-40px);
	}
	to {
		opacity: 1;
		transform: translateX(0);
	}
}

.ice-animate-slide-in-left {
	animation: ice-slide-in-left var(--ice-t-slow) both;
}

/* ----- Pulse (subtle) ----- */
@keyframes ice-pulse {
	0%, 100% {
		opacity: 1;
	}
	50% {
		opacity: 0.55;
	}
}

.ice-animate-pulse {
	animation: ice-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}

/* ----- Bounce ----- */
@keyframes ice-bounce {
	0%, 100% {
		transform: translateY(0);
	}
	50% {
		transform: translateY(-6px);
	}
}

.ice-animate-bounce {
	animation: ice-bounce 1.2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}

/* ----- Spin (for loaders) ----- */
@keyframes ice-spin {
	from { transform: rotate(0deg); }
	to   { transform: rotate(360deg); }
}

.ice-animate-spin {
	animation: ice-spin 1s linear infinite;
}

/* ----- Shimmer (skeleton loading) ----- */
@keyframes ice-shimmer {
	0%   { background-position: -200% 0; }
	100% { background-position: 200% 0; }
}

.ice-skeleton {
	background: linear-gradient(90deg, var(--ice-light) 25%, var(--ice-border) 37%, var(--ice-light) 63%);
	background-size: 200% 100%;
	animation: ice-shimmer 1.4s ease infinite;
	border-radius: var(--ice-btn-radius-sm);
}

/* ----- Scroll-driven reveal (uses IntersectionObserver in utilities.js) ----- */
.ice-reveal {
	opacity: 0;
	transform: translateY(24px);
	transition: opacity 700ms cubic-bezier(0.22, 0.61, 0.36, 1),
	            transform 700ms cubic-bezier(0.22, 0.61, 0.36, 1);
	will-change: opacity, transform;
}

.ice-reveal.is-revealed {
	opacity: 1;
	transform: translateY(0);
}

/* Stagger children when .ice-reveal-stagger is on the parent. */
.ice-reveal-stagger > .ice-reveal:nth-child(1) { transition-delay: 50ms;  }
.ice-reveal-stagger > .ice-reveal:nth-child(2) { transition-delay: 100ms; }
.ice-reveal-stagger > .ice-reveal:nth-child(3) { transition-delay: 150ms; }
.ice-reveal-stagger > .ice-reveal:nth-child(4) { transition-delay: 200ms; }
.ice-reveal-stagger > .ice-reveal:nth-child(5) { transition-delay: 250ms; }
.ice-reveal-stagger > .ice-reveal:nth-child(6) { transition-delay: 300ms; }
.ice-reveal-stagger > .ice-reveal:nth-child(7) { transition-delay: 350ms; }
.ice-reveal-stagger > .ice-reveal:nth-child(8) { transition-delay: 400ms; }

/* ----- Header slide-down ----- */
@keyframes ice-header-slide-down {
	from {
		transform: translateY(-100%);
	}
	to {
		transform: translateY(0);
	}
}

/* ----- Offcanvas slide-in ----- */
@keyframes ice-offcanvas-slide-in {
	from { transform: translateX(100%); }
	to   { transform: translateX(0); }
}

/* ----- Caret rotate ----- */
@keyframes ice-caret-rotate {
	from { transform: rotate(0deg); }
	to   { transform: rotate(180deg); }
}
