/* ============================================================
   Swift Tree & Landscape — Animation layer (pure CSS portions)
   ------------------------------------------------------------
   Pairs with assets/js/animations.js (GSAP layer).
   CSS-only effects: infinite marquee, magnetic button, hero char.
   ============================================================ */

/* ---------- Hero H1 character split -------------------------------------- */
.swift-hero-char {
	display: inline-block;
	white-space: pre;
	will-change: opacity, transform;
}

/* ---------- Word-mask reveals on H2s ------------------------------------- */
.swift-word-mask {
	display: inline-block;
	overflow: hidden;
	vertical-align: top;
	line-height: inherit;
}
.swift-word-inner {
	display: inline-block;
	will-change: transform;
}

/* ---------- Magnetic 3D card tilt transition ----------------------------- */
.swift-county-card,
.swift-wedge-premium {
	transition: transform .35s cubic-bezier(.45, 0, .15, 1), box-shadow .35s cubic-bezier(.45, 0, .15, 1), border-color .35s cubic-bezier(.45, 0, .15, 1), background-color .35s cubic-bezier(.45, 0, .15, 1);
}

/* Clip-path image reveal removed per client request. */

/* ---------- Showreel — single refined horizontal text scroll ------------- */
.swift-showreel {
	background: var(--color-primary);
	color: var(--color-birch-bark);
	overflow: hidden;
	padding: 14px 0;
	border-top: 1px solid rgba(255, 185, 29, 0.18);
	border-bottom: 1px solid rgba(255, 185, 29, 0.18);
}
.swift-showreel-row { overflow: hidden; padding: 6px 0; }
.swift-showreel-track {
	display: flex;
	gap: 28px;
	width: max-content;
	animation: swift-showreel-left 38s linear infinite;
	will-change: transform;
}
.swift-showreel-row:hover .swift-showreel-track { animation-play-state: paused; }

.swift-showreel-item {
	font-family: var(--ff-display);
	font-weight: 700;
	font-size: clamp(0.95rem, 1.4vw, 1.2rem);
	letter-spacing: -0.005em;
	white-space: nowrap;
	display: inline-flex;
	align-items: center;
	gap: 28px;
	color: var(--color-birch-bark);
	text-transform: uppercase;
}
.swift-showreel-item::after {
	content: "✦";
	color: var(--color-accent);
	font-size: 0.75em;
	display: inline-block;
}
@keyframes swift-showreel-left {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}
@media (max-width: 767px) {
	.swift-showreel { padding: 10px 0; }
	.swift-showreel-track { gap: 20px; animation-duration: 30s; }
	.swift-showreel-item { gap: 20px; font-size: 0.88rem; }
}
@media (prefers-reduced-motion: reduce) {
	.swift-showreel-track { animation: none; flex-wrap: wrap; justify-content: center; }
}

/* ---------- Magnetic button radial glow ---------------------------------- */
.swift-btn-primary,
.swift-btn-secondary,
.swift-btn-ghost {
	position: relative;
	overflow: hidden;
	isolation: isolate;
}
.swift-btn-primary::before,
.swift-btn-secondary::before,
.swift-btn-ghost::before {
	content: "";
	position: absolute;
	left: var(--mx, 50%);
	top: var(--my, 50%);
	width: 240px;
	height: 240px;
	border-radius: 50%;
	transform: translate(-50%, -50%);
	background: radial-gradient(circle, rgba(255, 255, 255, 0.35) 0%, transparent 60%);
	opacity: 0;
	pointer-events: none;
	transition: opacity .4s cubic-bezier(.4, 0, .2, 1);
	z-index: -1;
}
.swift-btn-primary:hover::before,
.swift-btn-secondary:hover::before,
.swift-btn-ghost:hover::before { opacity: 1; }

/* Primary tint variant for the gold button */
.swift-btn-primary::before {
	background: radial-gradient(circle, rgba(13, 47, 38, 0.25) 0%, transparent 60%);
}

/* ---------- Trust strip — infinite marquee, 4 visible at a time ---------- */
.swift-trust-strip {
	overflow: hidden;
	padding: 22px 0;
	--swift-marquee-visible: 4;
}
.swift-trust-strip .swift-container {
	overflow: hidden;
	max-width: none;
	padding: 0;
}
.swift-trust-list {
	display: flex !important;
	grid-template-columns: none !important;
	gap: 0 !important;
	width: max-content;
	animation: swift-marquee 28s linear infinite;
	will-change: transform;
	margin: 0 !important;
	padding: 0 !important;
}
.swift-trust-list li {
	/* Each item = (viewport / 4) so exactly 4 fit on screen at once */
	flex: 0 0 calc(min(100vw, var(--container-max, 1360px)) / var(--swift-marquee-visible)) !important;
	white-space: nowrap !important;
	grid-column: auto !important;
	justify-content: center !important;
	padding: 0 12px;
}
.swift-trust-list:hover { animation-play-state: paused; }
@keyframes swift-marquee {
	0%   { transform: translateX(0); }
	100% { transform: translateX(-50%); }
}
@media (max-width: 1023px) {
	.swift-trust-strip { --swift-marquee-visible: 3; }
	.swift-trust-list { animation-duration: 24s; }
}
@media (max-width: 639px) {
	.swift-trust-strip { --swift-marquee-visible: 2; }
	.swift-trust-list { animation-duration: 20s; }
}
@media (prefers-reduced-motion: reduce) {
	.swift-trust-list { animation: none; flex-wrap: wrap; justify-content: center; width: 100%; }
	.swift-trust-list li { flex: 0 0 auto !important; }
}

/* ---------- ScrollTrigger sets opacity:0 via gsap.from — keep visible if JS doesn't run ---- */
.no-js .swift-services-section,
.no-js .swift-why-section,
.no-js .swift-wedges-section,
.no-js .swift-process-section,
.no-js .swift-areas-section,
.no-js .swift-contact-section,
.no-js .swift-reviews-section { opacity: 1 !important; }

/* ---------- Reduced motion: kill all big animations ---------------------- */
@media (prefers-reduced-motion: reduce) {
	.swift-hero-char { opacity: 1 !important; transform: none !important; }
	.swift-btn-primary::before,
	.swift-btn-secondary::before,
	.swift-btn-ghost::before { display: none; }
}
