/* Animation helpers */
.reveal-up,
.reveal-fade {
	opacity: 0;
	will-change: transform, opacity;
	transition-property: transform, opacity;
	transition-duration: 620ms;
	transition-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
	transition-delay: var(--reveal-delay, 0ms);
	transform: translate3d(0, 18px, 0);
}

.reveal-fade {
	transform: none;
}

.reveal-up.is-revealed,
.reveal-fade.is-revealed {
	opacity: 1;
	transform: none;
}

.anim {
	animation-duration: 0.6s;
	animation-fill-mode: both;
	animation-timing-function: ease;
	will-change: transform, opacity;
}

.anim-fast {
	animation-duration: 0.35s;
}

.anim-slow {
	animation-duration: 1s;
}

.anim-delay-1 {
	animation-delay: 0.1s;
}

.anim-delay-2 {
	animation-delay: 0.2s;
}

.anim-delay-3 {
	animation-delay: 0.3s;
}

/* Entrance animations */
.anim-fade-in {
	animation-name: fade-in;
}

.anim-slide-up {
	animation-name: slide-up;
}

.anim-slide-down {
	animation-name: slide-down;
}

.anim-slide-left {
	animation-name: slide-left;
}

.anim-slide-right {
	animation-name: slide-right;
}

.anim-zoom-in {
	animation-name: zoom-in;
}

/* Looping animations */
.anim-pulse {
	animation: pulse 1.8s ease-in-out infinite;
}

.anim-float {
	animation: float 2.8s ease-in-out infinite;
}

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

@keyframes slide-up {
	from {
		opacity: 0;
		transform: translateY(20px);
	}
	to {
		opacity: 1;
		transform: translateY(0);
	}
}

@keyframes slide-down {
	from {
		opacity: 0;
		transform: translateY(-20px);
	}
	to {
		opacity: 1;
		transform: translateY(0);
	}
}

@keyframes slide-left {
	from {
		opacity: 0;
		transform: translateX(24px);
	}
	to {
		opacity: 1;
		transform: translateX(0);
	}
}

@keyframes slide-right {
	from {
		opacity: 0;
		transform: translateX(-24px);
	}
	to {
		opacity: 1;
		transform: translateX(0);
	}
}

@keyframes zoom-in {
	from {
		opacity: 0;
		transform: scale(0.92);
	}
	to {
		opacity: 1;
		transform: scale(1);
	}
}

@keyframes pulse {
	0%,
	100% {
		transform: scale(1);
	}
	50% {
		transform: scale(1.04);
	}
}

@keyframes float {
	0%,
	100% {
		transform: translateY(0);
	}
	50% {
		transform: translateY(-8px);
	}
}

/* Accessibility */
@media (prefers-reduced-motion: reduce) {
	.reveal-up,
	.reveal-fade,
	.reveal-up.is-revealed,
	.reveal-fade.is-revealed {
		opacity: 1 !important;
		transform: none !important;
		transition: none !important;
	}

	.anim,
	.anim-fast,
	.anim-slow,
	.anim-fade-in,
	.anim-slide-up,
	.anim-slide-down,
	.anim-slide-left,
	.anim-slide-right,
	.anim-zoom-in,
	.anim-pulse,
	.anim-float {
		animation: none !important;
		transition: none !important;
	}
}
