/* ---- Cursor-follow ambient glow (hero + testimonials sections, pointer:fine only) ---- */
.has-cursor-glow {
	position: relative;
}

/* Clip the glow to its container — only used where nothing inside needs to
   overflow (hero text columns). The testimonials section deliberately skips
   this since its carousel relies on overflow:visible to peek the next slide. */
.has-cursor-glow--clip {
	overflow: hidden;
}

.has-cursor-glow > :not(.cursor-glow) {
	position: relative;
	z-index: 1;
}

.cursor-glow {
	position: absolute;
	top: 0;
	left: 0;
	width: 520px;
	height: 520px;
	border-radius: 50%;
	background: radial-gradient(circle, rgba(201, 160, 44, 0.13) 0%, rgba(201, 160, 44, 0) 70%);
	pointer-events: none;
	opacity: 0;
	transition: opacity 0.5s ease;
	will-change: transform, opacity;
	z-index: 0;
}

.cursor-glow--gold {
	width: 640px;
	height: 640px;
	background: radial-gradient(circle, rgba(240, 217, 122, 0.14) 0%, rgba(240, 217, 122, 0) 70%);
}

.cursor-glow.is-active {
	opacity: 1;
}

@media not all and (hover: hover) and (pointer: fine) {
	.cursor-glow {
		display: none;
	}
}

/* ---- Nav sliding underline indicator ---- */
.primary-nav ul {
	position: relative;
}

.nav-indicator {
	position: absolute;
	bottom: -2px;
	left: 0;
	height: 1px;
	width: 0;
	background: var(--color-gold-deep);
	opacity: 0;
	transition: transform 0.35s var(--ease-premium), width 0.35s var(--ease-premium), opacity 0.2s var(--ease-premium);
	pointer-events: none;
	will-change: transform, width;
}

.nav-indicator.is-visible {
	opacity: 1;
}

@media (max-width: 900px) {
	.nav-indicator {
		display: none;
	}
}

/* ---- Scroll-reveal (IntersectionObserver driven, transform/opacity only) ---- */
[data-reveal] {
	opacity: 0;
	transform: translateY(24px);
	transition: opacity var(--dur-med) var(--ease-premium), transform var(--dur-med) var(--ease-premium);
	will-change: opacity, transform;
}

[data-reveal].is-visible {
	opacity: 1;
	transform: translateY(0);
}

[data-reveal="fade"] {
	transform: none;
}

[data-reveal="left"] {
	transform: translateX(-32px);
}
[data-reveal="left"].is-visible {
	transform: translateX(0);
}

[data-reveal="right"] {
	transform: translateX(32px);
}
[data-reveal="right"].is-visible {
	transform: translateX(0);
}

[data-reveal="scale"] {
	transform: scale(0.94);
}
[data-reveal="scale"].is-visible {
	transform: scale(1);
}

/* Stagger children via inline --delay custom property set from PHP/JS */
[data-reveal] {
	transition-delay: var(--reveal-delay, 0s);
}

/* ---- Botanical line-art divider: one-time stroke draw-in ---- */
.botanical-divider {
	display: flex;
	justify-content: center;
	color: var(--color-gold-deep);
	margin-block: var(--space-lg);
}

.botanical-divider svg {
	overflow: visible;
	width: 100%;
	max-width: 340px;
	height: auto;
}

.botanical-divider--wide svg {
	max-width: 480px;
}

.botanical-divider--dark {
	color: var(--color-gold-light);
}

.botanical-divider path,
.botanical-divider ellipse {
	fill: none;
	stroke: currentColor;
	stroke-width: 1.1;
	stroke-linecap: round;
	stroke-dasharray: var(--path-length, 600);
	stroke-dashoffset: var(--path-length, 600);
	transition: stroke-dashoffset 1.8s var(--ease-premium);
}

.botanical-divider.is-drawn path,
.botanical-divider.is-drawn ellipse {
	stroke-dashoffset: 0;
}

/* ---- Hero entrance (page-load, not scroll-triggered) ---- */
.hero-enter {
	opacity: 0;
	transform: translateY(18px);
	animation: aestaHeroEnter var(--dur-slow) var(--ease-premium) forwards;
}

@keyframes aestaHeroEnter {
	to {
		opacity: 1;
		transform: translateY(0);
	}
}

.hero-enter--d1 { animation-delay: 0.1s; }
.hero-enter--d2 { animation-delay: 0.25s; }
.hero-enter--d3 { animation-delay: 0.4s; }
.hero-enter--d4 { animation-delay: 0.55s; }

@media (prefers-reduced-motion: reduce) {
	[data-reveal] {
		opacity: 1 !important;
		transform: none !important;
	}
	.botanical-divider path,
	.botanical-divider ellipse {
		stroke-dashoffset: 0 !important;
	}
	.hero-enter {
		opacity: 1 !important;
		transform: none !important;
		animation: none !important;
	}
}
