:root {
	--nexoy-ease: cubic-bezier(.625, .05, 0, 1);
}

/* Reveal text keeps each split line clipped so characters wipe cleanly. */
.reveal-text .split-line {
	overflow: hidden;
}
.reveal-text.indent .split-line:first-child {
	text-indent: 3em;
}

/* Letter wave targets injected by the engine. */
.at-letter-span,
.at-word-span {
	display: inline-block;
}

/* Title flip: letters sit above a shadow copy and swap on hover of the wrapper. */
.at-title-anim-inner {
	display: flex;
	justify-content: flex-start;
	align-items: flex-start;
	overflow-y: clip;
}
.at-title-text span {
	display: inline-block;
	text-shadow: 0 1.05em currentColor;
	transition: translate .3s var(--nexoy-ease), text-shadow .1s .15s ease;
}
.at-title-anim:hover .at-title-text span {
	translate: 0 -1.05em 0;
	transition: translate .5s calc((var(--char) - 1) * .024s) var(--nexoy-ease),
		text-shadow .175s calc((var(--char) - 1) * .024s + .225s) ease;
}

/* Zoom-in wrapper the engine injects around each image. */
.anim-zoomin-wrap {
	overflow: hidden;
}

/* Continuous marquee. */
.at-marquee {
	overflow: hidden;
}
.at-marquee__track {
	display: flex;
	flex-wrap: nowrap;
	width: max-content;
	will-change: transform;
}
.at-marquee__group {
	display: flex;
	flex-wrap: nowrap;
	flex-shrink: 0;
}

/* Smooth-scroll host structure, created only when smooth scrolling is on. */
#smooth-wrapper {
	overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
	.reveal-text .split-line {
		overflow: visible;
	}
}
