/* Scroll reveal, hero sequence, stagger, micro-interactions */



:root {

	--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);

	--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);

	--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);

	--anim-duration: 0.65s;

	--anim-duration-fast: 0.35s;

}



/* Base reveal */

.anim {

	opacity: 0;

	transition:

		opacity var(--anim-duration) var(--ease-out-expo),

		transform var(--anim-duration) var(--ease-out-expo);

}



.anim--fade-up { transform: translate3d(0, 36px, 0); }

.anim--fade-left { transform: translate3d(-36px, 0, 0); }

.anim--fade-right { transform: translate3d(36px, 0, 0); }

.anim--scale { transform: scale(0.94); }



.anim.is-visible {

	opacity: 1;

	transform: none;

}



/* Hero load sequence */

.anim--hero {

	transform: translate3d(0, 28px, 0);

	transition-duration: 0.8s;

}



.anim--delay-1 { transition-delay: 0.1s; }

.anim--delay-2 { transition-delay: 0.22s; }

.anim--delay-3 { transition-delay: 0.34s; }

.anim--delay-4 { transition-delay: 0.46s; }

.anim--delay-5 { transition-delay: 0.58s; }

.anim--delay-6 { transition-delay: 0.7s; }



.is-loaded .anim--hero,

.is-loaded .anim--search {

	opacity: 1;

	transform: none;

}



/* Search box entrance */

.anim--search {

	opacity: 0;

	transform: translate3d(0, 48px, 0) scale(0.97);

	transition:

		opacity 0.85s var(--ease-out-expo) 0.35s,

		transform 0.85s var(--ease-spring) 0.35s,

		box-shadow var(--transition);

}



.is-loaded .anim--search {

	box-shadow: var(--shadow-float);

}



/* Stagger children */

.anim-stagger > * {

	opacity: 0;

	transform: translate3d(0, 32px, 0);

	transition:

		opacity var(--anim-duration) var(--ease-out-expo),

		transform var(--anim-duration) var(--ease-out-expo);

}



.anim-stagger.is-visible > * {

	opacity: 1;

	transform: none;

}



.anim-stagger.is-visible > *:nth-child(1) { transition-delay: calc(var(--stagger-base, 0ms) + 0ms); }

.anim-stagger.is-visible > *:nth-child(2) { transition-delay: calc(var(--stagger-base, 0ms) + 80ms); }

.anim-stagger.is-visible > *:nth-child(3) { transition-delay: calc(var(--stagger-base, 0ms) + 160ms); }

.anim-stagger.is-visible > *:nth-child(4) { transition-delay: calc(var(--stagger-base, 0ms) + 240ms); }

.anim-stagger.is-visible > *:nth-child(5) { transition-delay: calc(var(--stagger-base, 0ms) + 320ms); }

.anim-stagger.is-visible > *:nth-child(6) { transition-delay: calc(var(--stagger-base, 0ms) + 400ms); }

.anim-stagger.is-visible > *:nth-child(7) { transition-delay: calc(var(--stagger-base, 0ms) + 480ms); }

.anim-stagger.is-visible > *:nth-child(8) { transition-delay: calc(var(--stagger-base, 0ms) + 560ms); }



.gallery-masonry__row > * {

	opacity: 0;

	transform: translate3d(0, 28px, 0);

	transition:

		opacity var(--anim-duration) var(--ease-out-expo),

		transform var(--anim-duration) var(--ease-out-expo);

}



.gallery-masonry.anim-stagger.is-visible .gallery-masonry__row > *:nth-child(1) { transition-delay: 0ms; opacity: 1; transform: none; }

.gallery-masonry.anim-stagger.is-visible .gallery-masonry__row > *:nth-child(2) { transition-delay: 90ms; opacity: 1; transform: none; }

.gallery-masonry.anim-stagger.is-visible .gallery-masonry__row > *:nth-child(3) { transition-delay: 180ms; opacity: 1; transform: none; }

.gallery-masonry.anim-stagger.is-visible .gallery-masonry__row > *:nth-child(4) { transition-delay: 270ms; opacity: 1; transform: none; }

.gallery-masonry.anim-stagger.is-visible .gallery-masonry__row--lg > *:nth-child(1) { transition-delay: 360ms; opacity: 1; transform: none; }

.gallery-masonry.anim-stagger.is-visible .gallery-masonry__row--lg > *:nth-child(2) { transition-delay: 450ms; opacity: 1; transform: none; }

.tour-grid.anim-stagger > .tour-card {
	opacity: 0;
	transform: translate3d(0, 32px, 0);
	transition:
		opacity var(--anim-duration) var(--ease-out-expo),
		transform var(--anim-duration) var(--ease-out-expo);
}

.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(1) { transition-delay: 60ms; opacity: 1; transform: none; }
.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(2) { transition-delay: 140ms; opacity: 1; transform: none; }
.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(3) { transition-delay: 220ms; opacity: 1; transform: none; }
.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(4) { transition-delay: 300ms; opacity: 1; transform: none; }
.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(5) { transition-delay: 380ms; opacity: 1; transform: none; }
.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(6) { transition-delay: 460ms; opacity: 1; transform: none; }
.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(7) { transition-delay: 540ms; opacity: 1; transform: none; }
.tour-grid.anim-stagger.is-visible > .tour-card:nth-child(8) { transition-delay: 620ms; opacity: 1; transform: none; }

/* Button shine on hover — subtle, travel-site friendly */

.btn {
	position: relative;
	overflow: hidden;
}

.btn::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(105deg, transparent 42%, rgba(255, 255, 255, 0.12) 50%, transparent 58%);
	transform: translateX(-130%);
	transition: transform 0.9s cubic-bezier(0.22, 1, 0.36, 1);
	pointer-events: none;
}

.btn:hover::after,
.btn:focus-visible::after {
	transform: translateX(130%);
}

/* Card & outline buttons: no shine sweep */
.tour-card__btn::after,
.btn--tour-more::after,
.btn--outline::after,
.btn--ghost::after {
	display: none;
}



/* Card image zoom — refined easing */

.tour-card__image,

.destination-card__image,

.gallery-item__image {

	transition: transform 0.55s var(--ease-out-expo);

}



.tour-card,

.destination-card,

.testimonial-card,

.gallery-item {

	transition:

		transform var(--anim-duration-fast) var(--ease-out-expo),

		box-shadow var(--anim-duration-fast) var(--ease-out-expo);

}



/* Section heading subtle underline grow */

.section-heading__title::after {

	content: '';

	display: block;

	width: 0;

	height: 3px;

	margin: 14px auto 0;

	background: linear-gradient(90deg, var(--color-heading), var(--color-accent-yellow));

	border-radius: 2px;

	transition: width 0.7s var(--ease-out-expo) 0.2s;

}



.section-heading.is-visible .section-heading__title::after {

	width: 56px;

}



/* CTA — no fixed attachment (causes bleed-through on scroll) */

@media (prefers-reduced-motion: reduce) {

	.anim,

	.anim--hero,

	.anim--search,

	.anim-stagger > *,

	.gallery-masonry__row > * {

		opacity: 1;

		transform: none;

		transition: none;

	}



	.hero__bg {

		animation: none;

		inset: 0;

	}



	.btn::after {

		display: none;

	}



	.tour-card,

	.destination-card,

	.testimonial-card,

	.gallery-item,

	.btn,

	.destination-card__image,

	.tour-card__image,

	.gallery-item__image {

		transition: none;

	}



	.section-heading__title::after {

		width: 56px;

		transition: none;

	}

}

