/* =========================================================
   NexxusByte motion layer (GSAP + ScrollTrigger + SplitText + Lenis)
   Everything here is gated by html.isns-motion, which is only set when
   motion is allowed, and removed again if the motion script never starts.
   ========================================================= */

:root { --isns-ease: cubic-bezier(.22, 1, .36, 1); interpolate-size: allow-keywords; }

/* ---------- Lenis smooth scrolling ---------- */
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }
.lenis.lenis-smooth iframe { pointer-events: none; }

/* ---------- Initial states (revealed by motion.js) ---------- */
html.isns-motion :is(
	.isns-card, .isns-step, .isns-stat, .isns-ring, .isns-work-card, .isns-post, .isns-review, .isns-quote,
	.isns-compare, .isns-callout, .isns-faq, .isns-tags, .isns-panel,
	.isns-project__stats li, .isns-project__meta, .isns-project__faq details, .isns-table-wrap,
	.isns-section-head .elementor-widget:not(:has(h1, h2)),
	.isns-cta-band .elementor-widget:not(:has(h2)), .isns-cta-band:not(.e-con) .isns-wrap > :not(h2),
	.isns-preview, .isns-proof, .isns-project__media, .isns-photo-wrap,
	.isns-inner-hero .elementor-widget:not(:has(h1)):not(.isns-hero-art *),
	.isns-hero--page .isns-wrap > :not(h1)
) { opacity: 0; }

html.isns-motion :is(.isns-section-head h2, .isns-cta-band h2, .isns-hero--page h1, .isns-inner-hero h1:not(:has(.isns-rotator))) { visibility: hidden; }

/* ---------- Header: hides when scrolling down, returns when scrolling up ---------- */
.isns-header { transition: transform .5s var(--isns-ease), box-shadow .25s ease, background .25s ease; }
.isns-header.is-hidden { transform: translateY(-105%); }

/* ---------- Buttons: light sweep + soft press ---------- */
.isns-cta, .elementor-widget-button.isns-btn-grad .elementor-button, .elementor-widget-button.isns-btn-light .elementor-button { position: relative; overflow: hidden; isolation: isolate; }
.isns-cta::before, .elementor-widget-button.isns-btn-grad .elementor-button::before, .elementor-widget-button.isns-btn-light .elementor-button::before {
	content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
	background: linear-gradient(105deg, transparent 32%, rgba(255, 255, 255, .38) 50%, transparent 68%);
	transform: translateX(-130%); transition: transform .8s var(--isns-ease);
}
.isns-cta:hover::before, .elementor-widget-button.isns-btn-grad .elementor-button:hover::before, .elementor-widget-button.isns-btn-light .elementor-button:hover::before { transform: translateX(130%); }
.isns-cta:active, .elementor-widget-button .elementor-button:active { filter: brightness(.96); }

@media (hover: hover) and (pointer: fine) {
	/* GSAP drives the lift, magnet and tilt, so CSS must not fight it */
	html.isns-motion .isns-cta, html.isns-motion .elementor-widget-button.isns-btn-grad .elementor-button, html.isns-motion .elementor-widget-button.isns-btn-light .elementor-button { transition: background .2s ease, box-shadow .25s ease, filter .2s ease; }
	html.isns-motion .isns-work-card, html.isns-motion .elementor-widget.isns-card, html.isns-motion .e-con.isns-card { transition: box-shadow .25s ease, border-color .25s ease, background-color .25s ease; will-change: auto; }
	html.isns-motion .isns-work-card:hover, html.isns-motion .isns-card:hover { transform: none; }
}

/* ---------- FAQ: smooth open / close ---------- */
.isns-project__faq details::details-content { block-size: 0; overflow: clip; transition: block-size .4s var(--isns-ease), content-visibility .4s allow-discrete; }
.isns-project__faq details[open]::details-content { block-size: auto; }
.isns-project__faq summary { list-style: none; display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.isns-project__faq summary::-webkit-details-marker { display: none; }
.isns-project__faq summary::after { content: "+"; font-size: 1.3rem; line-height: 1; color: var(--isns-accent); transition: transform .35s var(--isns-ease); }
.isns-project__faq details[open] summary::after { transform: rotate(45deg); }

/* ---------- Soft link underline in body copy ---------- */
.isns-project__content p a, .isns-article__body p a { background: linear-gradient(currentColor, currentColor) 0 100% / 0 1.5px no-repeat; text-decoration: none; transition: background-size .4s var(--isns-ease); }
.isns-project__content p a:hover, .isns-article__body p a:hover { background-size: 100% 1.5px; }

/* ---------- Cross-page fade (Chrome / Edge; other browsers simply navigate) ---------- */
@media (prefers-reduced-motion: no-preference) {
	@view-transition { navigation: auto; }
	::view-transition-old(root) { animation: .3s ease both isns-vt-out; }
	::view-transition-new(root) { animation: .5s var(--isns-ease) both isns-vt-in; }
	.isns-header { view-transition-name: isns-header; }
	::view-transition-group(isns-header) { animation-duration: 0s; }
}
@keyframes isns-vt-out { to { opacity: 0; transform: translateY(-8px); } }
@keyframes isns-vt-in { from { opacity: 0; transform: translateY(10px); } }
