/* AeroTickets — keyframes and motion primitives. */

@keyframes float-y {
	0%, 100% { transform: translate3d(0, 0, 0); }
	50%      { transform: translate3d(0, -22px, 0); }
}

@keyframes float-y-slow {
	0%, 100% { transform: translate3d(0, 0, 0); }
	50%      { transform: translate3d(0, -38px, 0); }
}

@keyframes drift {
	0%   { transform: translate3d(0, 0, 0); }
	50%  { transform: translate3d(14px, -18px, 0); }
	100% { transform: translate3d(0, 0, 0); }
}

@keyframes pulse-glow {
	0%, 100% { box-shadow: 0 0 0 0 rgba(31, 43, 224, 0.4); }
	50%      { box-shadow: 0 0 0 16px rgba(31, 43, 224, 0); }
}

@keyframes shimmer {
	0%   { background-position: -200% 0; }
	100% { background-position: 200% 0; }
}

@keyframes marquee {
	0%   { transform: translate3d(0, 0, 0); }
	100% { transform: translate3d(-50%, 0, 0); }
}

@keyframes marquee-reverse {
	0%   { transform: translate3d(-50%, 0, 0); }
	100% { transform: translate3d(0, 0, 0); }
}

@keyframes fade-up {
	0%   { opacity: 0; transform: translate3d(0, 24px, 0); }
	100% { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes fade-in {
	0%   { opacity: 0; }
	100% { opacity: 1; }
}

@keyframes scale-in {
	0%   { opacity: 0; transform: scale(0.92); }
	100% { opacity: 1; transform: scale(1); }
}

@keyframes blob {
	0%, 100% { transform: translate(0, 0) scale(1); }
	33%      { transform: translate(60px, -40px) scale(1.1); }
	66%      { transform: translate(-40px, 30px) scale(0.95); }
}

@keyframes spin-slow {
	from { transform: rotate(0deg); }
	to   { transform: rotate(360deg); }
}

@keyframes draw-line {
	from { stroke-dashoffset: 100; }
	to   { stroke-dashoffset: 0; }
}

@keyframes glitch-shift {
	0%, 100% { transform: translate(0, 0); }
	20%      { transform: translate(-1px, 1px); }
	40%      { transform: translate(1px, -1px); }
	60%      { transform: translate(-1px, -1px); }
	80%      { transform: translate(1px, 1px); }
}

/* Scroll reveal — applied via JS adding .is-revealed */
.reveal,
.section,
.ticket-card,
.attraction-card,
.info__stat,
.program__item {
	opacity: 0;
	transform: translate3d(0, 28px, 0);
	transition: opacity 700ms var(--ease-out), transform 700ms var(--ease-out);
	will-change: opacity, transform;
}

.is-revealed,
.reveal.is-revealed,
.section.is-revealed,
.ticket-card.is-revealed,
.attraction-card.is-revealed,
.info__stat.is-revealed,
.program__item.is-revealed {
	opacity: 1;
	transform: translate3d(0, 0, 0);
}

/* Stagger children */
.stagger > * {
	opacity: 0;
	transform: translate3d(0, 20px, 0);
	transition: opacity 600ms var(--ease-out), transform 600ms var(--ease-out);
}
.stagger.is-revealed > * { opacity: 1; transform: translate3d(0, 0, 0); }
.stagger.is-revealed > *:nth-child(1) { transition-delay: 0ms; }
.stagger.is-revealed > *:nth-child(2) { transition-delay: 80ms; }
.stagger.is-revealed > *:nth-child(3) { transition-delay: 160ms; }
.stagger.is-revealed > *:nth-child(4) { transition-delay: 240ms; }
.stagger.is-revealed > *:nth-child(5) { transition-delay: 320ms; }
.stagger.is-revealed > *:nth-child(6) { transition-delay: 400ms; }
.stagger.is-revealed > *:nth-child(7) { transition-delay: 480ms; }
.stagger.is-revealed > *:nth-child(8) { transition-delay: 560ms; }

/* Hero entrance — runs once on load */
.hero__layout > * {
	opacity: 0;
	animation: fade-up 1000ms var(--ease-out) forwards;
}
.hero__kicker        { animation-delay: 100ms; }
.hero__date-stamp    { animation-delay: 240ms; }
.hero__poster-block  { animation-delay: 360ms; }
.hero__footer-row    { animation-delay: 720ms; }

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
	.reveal, .section, .ticket-card, .attraction-card, .info__stat, .program__item, .stagger > *,
	.hero__layout > * {
		opacity: 1 !important;
		transform: none !important;
		animation: none !important;
	}
	.hero__balloon, .hero__particle, .hero__blob, .hero__sun, .legend__sun { animation: none !important; }
}

/* Top scroll progress bar */
.scroll-progress {
	position: fixed;
	top: 0;
	left: 0;
	height: 3px;
	width: 100%;
	background: rgba(31,43,224,0.12);
	z-index: var(--z-toast);
	pointer-events: none;
}
.scroll-progress__bar {
	height: 100%;
	width: 0;
	background: var(--brand-gradient);
	transform-origin: left;
	transition: width 90ms linear;
	box-shadow: 0 0 12px rgba(31, 43, 224, 0.6);
}

/* Body scroll lock when nav is open (mobile) */
body.nav-open {
	overflow: hidden;
}
