/**
 * Site intro — large sharp logo → header → nav → hero
 * Layout geometry stays in place (opacity/visibility only — never display:none).
 */

/* --------------------------------------------------------------------------
   First-paint boot (set in wp_head before CSS paint races)
   -------------------------------------------------------------------------- */

html.wm-mobile-intro-boot .wm-header {
	opacity: 1 !important;
	transition: none !important;
}

html.wm-mobile-intro-boot .wm-header__logo,
html.wm-mobile-intro-boot .wm-header__burger,
html.wm-mobile-intro-boot .wm-header__nav-shell {
	opacity: 0 !important;
	visibility: hidden;
	pointer-events: none !important;
}

html.wm-mobile-intro-boot .wm-hero .reveal-line,
html.wm-mobile-intro-boot .wm-hero .reveal-up,
html.wm-mobile-intro-boot .wm-hero [data-hero-reveal] {
	opacity: 0 !important;
	transform: translateY(28px) !important;
	transition: none !important;
	visibility: hidden !important;
}

/* --------------------------------------------------------------------------
   Active intro — keep real chrome in layout, kill CSS/GSAP fights
   -------------------------------------------------------------------------- */

/*
 * Hard scroll lock for intro (boot + active).
 * Keep scrollbar-gutter so unlocking does not shift layout width.
 */
html.wm-mobile-intro-boot,
html.wm-mobile-intro-lock,
html.is-wm-intro {
	overflow: hidden !important;
	overscroll-behavior: none;
	height: 100%;
	scrollbar-gutter: stable;
}

html.wm-mobile-intro-boot body,
html.wm-mobile-intro-lock body,
html.is-wm-intro body {
	overflow: hidden !important;
	overscroll-behavior: none;
	touch-action: none;
	max-height: 100%;
}

html.is-wm-intro .wm-header {
	opacity: 1 !important;
	transition: none !important;
}

/* Hide real chrome until JS marks pieces as animating (geometry retained). */
html.is-wm-intro .wm-header__logo:not(.is-wm-intro-animating),
html.is-wm-intro .wm-header__burger:not(.is-wm-intro-animating),
html.is-wm-intro .wm-header__nav-shell:not(.is-wm-intro-animating) {
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
}

html.is-wm-intro .wm-header__logo.is-wm-intro-animating,
html.is-wm-intro .wm-header__burger.is-wm-intro-animating,
html.is-wm-intro .wm-header__nav-shell.is-wm-intro-animating {
	visibility: visible;
	pointer-events: none;
}

/* Ensure active link text stays above the black pill during intro. */
html.is-wm-intro .wm-header__nav-shell .wm-nav-menu a {
	position: relative;
	z-index: 2;
}

html.is-wm-intro .wm-header__nav-shell .wm-nav-indicator {
	z-index: 1;
}

/*
 * Safety: if intro classes leak onto a case study (PJAX mid-intro),
 * never keep header chrome hidden or scroll locked.
 */
html.is-wm-intro body.is-single-rad .wm-header__logo,
html.is-wm-intro body.is-single-rad .wm-header__burger,
html.is-wm-intro body.is-single-rad .wm-header__nav-shell,
html.wm-mobile-intro-boot body.is-single-rad .wm-header__logo,
html.wm-mobile-intro-boot body.is-single-rad .wm-header__burger,
html.wm-mobile-intro-boot body.is-single-rad .wm-header__nav-shell {
	opacity: 1 !important;
	visibility: visible !important;
	pointer-events: auto !important;
}

html.is-wm-intro body.is-single-rad,
html.wm-mobile-intro-lock body.is-single-rad,
html.wm-mobile-intro-boot body.is-single-rad {
	overflow: visible !important;
	max-height: none !important;
	touch-action: auto !important;
	position: static !important;
	top: auto !important;
	left: auto !important;
	right: auto !important;
	width: auto !important;
}

html.is-wm-intro:has(body.is-single-rad),
html.wm-mobile-intro-lock:has(body.is-single-rad),
html.wm-mobile-intro-boot:has(body.is-single-rad) {
	overflow: visible !important;
	height: auto !important;
}

/* No CSS transitions while WAAPI owns transform/opacity/clip-path. */
html.is-wm-intro .wm-header__logo,
html.is-wm-intro .wm-header__burger,
html.is-wm-intro .wm-header__nav-shell,
html.is-wm-intro .wm-header__nav-shell *,
html.is-wm-intro .wm-nav-menu a,
html.is-wm-intro .wm-nav-indicator {
	transition: none !important;
}

/* Keep hero hidden after boot clears until hero phase. */
html.is-wm-intro:not(.wm-mobile-intro-revealing) .wm-hero .reveal-line,
html.is-wm-intro:not(.wm-mobile-intro-revealing) .wm-hero .reveal-up,
html.is-wm-intro:not(.wm-mobile-intro-revealing) .wm-hero [data-hero-reveal] {
	opacity: 0;
	visibility: hidden;
	transform: translateY(28px);
	transition: none;
}

/* --------------------------------------------------------------------------
   Overlay — exact same page background (no color flash)
   -------------------------------------------------------------------------- */

.wm-site-intro {
	position: fixed;
	inset: 0;
	z-index: 2147483000;
	background: var(--light-bg, #FBFCFE);
	pointer-events: none;
	opacity: 1;
	will-change: opacity;
}

/* Header rises above solid overlay so nav can reveal without bg flash. */
html.wm-mobile-intro-chrome-live #wm-header {
	position: relative;
	z-index: 2147483001;
}

/*
 * Intro logo leaves the overlay DOM layer and sits above header during flight
 * handoff (see JS). Keep wrap styles shared.
 */
.wm-site-intro__logo-wrap,
.wm-site-intro-logo-fly {
	position: absolute;
	left: 50%;
	top: 50%;
	width: clamp(260px, 78vw, 380px);
	transform: translate(-50%, -50%) scale(1);
	transform-origin: center center;
	will-change: transform, opacity;
	z-index: 3;
	pointer-events: none;
}

.wm-site-intro-logo-fly {
	position: fixed;
	z-index: 2147483002;
	margin: 0;
}

@media (min-width: 768px) {
	.wm-site-intro__logo-wrap,
	.wm-site-intro-logo-fly {
		width: clamp(420px, 34vw, 620px);
	}

	html.wm-mobile-intro-boot .wm-hero .reveal-line,
	html.wm-mobile-intro-boot .wm-hero .reveal-up,
	html.wm-mobile-intro-boot .wm-hero [data-hero-reveal] {
		transform: translateY(36px) !important;
	}
}

.wm-site-intro__logo-img {
	display: block;
	width: 100%;
	height: auto;
	clip-path: inset(0 100% 0 0);
	will-change: clip-path;
	user-select: none;
	-webkit-user-drag: none;
	filter: none;
	image-rendering: auto;
}

html.wm-mobile-intro-revealing .wm-hero .wm-hero__title-line {
	display: block;
	overflow: hidden;
}

html.wm-mobile-intro-revealing .wm-hero .wm-hero__title-line > .wm-site-intro-mask {
	display: block;
	will-change: transform;
}

/* Mask wrappers stay after intro — same geometry, no unwrap reflow. */
body:is(.is-front-page, .is-home) .wm-hero__title-line > .wm-site-intro-mask {
	display: block;
}

/* While WAAPI owns hero entrance, kill CSS reveal transitions. */
html.wm-mobile-intro-revealing .wm-hero .reveal-line,
html.wm-mobile-intro-revealing .wm-hero .reveal-up,
html.wm-mobile-intro-revealing .wm-hero .stagger-item,
html.wm-mobile-intro-revealing .wm-hero [data-hero-reveal] {
	transition: none !important;
}
