/* ==============================================================
   THE GAME DR - HOMEPAGE HERO CINEMATIC
   Loaded on the front page only (inc/gamedr-hero-cinematic.php).
   Ported from the approved standalone prototype.

   Every rule is gated on html.gd-cine-on and scoped to the Elementor
   homepage hero (.elementor-24 .elementor-element-0ce16c2), so nothing here
   reaches the header, footer, other homepage sections or other pages.

   html.gd-cine-on      set in <head> before first paint; sizes the hero only
   .gd-cine-track       added by the script; pinning only exists inside it
   html.gd-cine-bg-ready the zoom layer has decoded; Elementor's own
                         background is then hidden underneath it
   ============================================================== */

html.gd-cine-on {
	--gd-cine-pin: 90px; /* header bottom edge; the script re-measures it */
	--gd-cine-scroll: 600vh; /* pinned scroll distance; the script reads it */
}

/* ---------- Hero size: one viewport under the header ---------- */
html.gd-cine-on .elementor-24 .elementor-element.elementor-element-0ce16c2 {
	--min-height: 0px;
	min-height: 0;
	height: calc(100vh - var(--gd-cine-pin));
}

/* ---------- Scroll track + pinned stage ---------- */
html.gd-cine-on .gd-cine-track {
	position: relative;
	height: calc(100vh - var(--gd-cine-pin) + var(--gd-cine-scroll));
}

@supports (height: 100dvh) {
	html.gd-cine-on .elementor-24 .elementor-element.elementor-element-0ce16c2 {
		height: calc(100dvh - var(--gd-cine-pin));
	}

	html.gd-cine-on .gd-cine-track {
		height: calc(100dvh - var(--gd-cine-pin) + var(--gd-cine-scroll));
	}
}

html.gd-cine-on .gd-cine-track > .elementor-element.elementor-element-0ce16c2 {
	position: sticky;
	top: var(--gd-cine-pin);
	overflow: hidden;
	isolation: isolate;
}

/* The zoom layer has taken over: hide Elementor's identical background */
html.gd-cine-on.gd-cine-bg-ready .gd-cine-track > .elementor-element.elementor-element-0ce16c2 {
	background-image: none;
}

/* Layer order inside the hero:
   0 zoom image | 1 Elementor overlay | 2 dim | 3 hero copy | 4 scenes */
html.gd-cine-on .gd-cine-track > .elementor-element.elementor-element-0ce16c2::before {
	position: absolute;
	inset: 0;
	z-index: 1;
	pointer-events: none;
}

html.gd-cine-on .gd-cine-track .elementor-element.elementor-element-1890722 {
	position: relative;
	z-index: 3;
	/* Elementor's container transitions would lag scroll-linked transforms */
	transition: none;
}

html.gd-cine-on .gd-cine-track .elementor-element.elementor-element-1890722.gd-cine-gone {
	pointer-events: none;
}

/* Layer 0: the single composite hero image, zoomed as one layer */
.elementor-24 .gd-cine-bg {
	position: absolute;
	inset: 0;
	z-index: 0;
	overflow: hidden;
	pointer-events: none;
}

.elementor-24 .gd-cine-bg .gd-cine-bg__img {
	display: block;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: center center;
	transform-origin: 50% 50%;
}

/* Layer 2: darkens the zoomed image so the staged words read clearly */
.elementor-24 .gd-cine-dim {
	position: absolute;
	inset: 0;
	z-index: 2;
	background: radial-gradient(ellipse at center, rgba(7, 7, 9, .45) 0%, rgba(7, 7, 9, .82) 100%);
	opacity: 0;
	pointer-events: none;
}

/* ---------- Layer 4: staged scenes ---------- */
.elementor-24 .gd-cine-scenes {
	position: absolute;
	inset: 0;
	z-index: 4;
	pointer-events: none;
}

.elementor-24 .gd-cine-scene {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 0 32px;
	opacity: 0;
}

.elementor-24 .gd-cine-scene__word-wrap {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 18px;
	text-align: center;
}

/* Game DR purple display word */
.elementor-24 .gd-cine-word {
	display: block;
	font-family: "Rajdhani", sans-serif;
	font-weight: 700;
	font-size: clamp(88px, 12.5vw, 210px);
	line-height: .9;
	letter-spacing: 2px;
	text-transform: uppercase;
	background-image: linear-gradient(180deg, #B44CFF 0%, #8A2BFF 100%);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: transparent;
	filter: drop-shadow(0 0 28px rgba(138, 43, 255, .45));
}

/* THE GAME DR keeps the live wordmark treatment (metal + purple DR).
   Same values as the Customizer GAMEDR-HERO block, scoped here so the
   cinematic does not depend on that block. */
.elementor-24 .gd-cine-word--brand {
	background: none;
	-webkit-text-fill-color: initial;
	color: #F7F7F8;
	filter: none;
	font-size: clamp(76px, 10vw, 168px);
	white-space: nowrap;
}

.elementor-24 .gd-cine-scenes .gd-hero-title .gd-metal {
	background-image: linear-gradient(180deg, #FFFFFF 0%, #EDEDF3 34%, #9A9AA9 60%, #F4F4F8 100%);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: transparent;
}

.elementor-24 .gd-cine-scenes .gd-hero-title .gd-dr {
	color: #B44CFF;
	-webkit-text-fill-color: #B44CFF;
	text-shadow: 0 0 22px rgba(138, 43, 255, .45);
}

.elementor-24 .gd-cine-scene__support,
.elementor-24 .gd-cine-scene__eyebrow {
	font-family: "Inter", sans-serif;
	font-weight: 600;
	line-height: 1.6em;
	text-transform: uppercase;
	letter-spacing: 3px;
	color: #B44CFF;
}

.elementor-24 .gd-cine-scene__support {
	font-size: 16px;
	letter-spacing: 2px;
	color: #DCDCE2;
	font-weight: 500;
	text-transform: none;
}

.elementor-24 .gd-cine-scene__eyebrow {
	font-size: 16px;
}

/* Product scenes: word on one side, product visual on the other */
.elementor-24 .gd-cine-scene--product {
	gap: clamp(32px, 5vw, 96px);
	max-width: 1400px;
	margin: 0 auto;
}

.elementor-24 .gd-cine-scene--product .gd-cine-word {
	font-size: clamp(72px, 8.5vw, 170px);
}

.elementor-24 .gd-cine-scene--flip {
	flex-direction: row-reverse;
}

.elementor-24 .gd-cine-scene__text {
	display: flex;
	flex-direction: column;
	gap: 10px;
	flex: 0 0 auto;
}

.elementor-24 .gd-cine-scene--flip .gd-cine-scene__text {
	align-items: flex-end;
	text-align: right;
}

.elementor-24 .gd-cine-scene__media {
	position: relative;
	flex: 0 0 auto;
	width: min(38vw, 62vh, 620px);
	aspect-ratio: 1 / 1;
	border-radius: 10px;
	overflow: hidden;
	border: 1px solid rgba(180, 76, 255, .35);
	box-shadow:
		0 0 70px rgba(138, 43, 255, .35),
		0 30px 90px rgba(0, 0, 0, .65);
	background: #070709;
}

.elementor-24 .gd-cine-scene__media--wide {
	aspect-ratio: 4 / 3;
	width: min(46vw, 76vh, 760px);
}

.elementor-24 .gd-cine-scene__media img {
	display: block;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: center 55%;
	transform-origin: 50% 50%;
	border-radius: 0;
}

/* Inner vignette so the frame edge melts into the dark stage */
.elementor-24 .gd-cine-scene__media::after {
	content: "";
	position: absolute;
	inset: 0;
	box-shadow: inset 0 0 80px rgba(7, 7, 9, .75);
	pointer-events: none;
}

/* ---------- Breakpoints (match the prototype; Elementor tablet = 1120px) ---------- */
@media (max-width: 1120px) {
	.elementor-24 .gd-cine-scene--product,
	.elementor-24 .gd-cine-scene--flip {
		flex-direction: column;
		gap: 24px;
	}

	.elementor-24 .gd-cine-scene--flip .gd-cine-scene__text {
		align-items: flex-start;
		text-align: left;
	}

	.elementor-24 .gd-cine-scene__media {
		width: min(70vw, 46vh, 520px);
	}

	.elementor-24 .gd-cine-scene__media--wide {
		width: min(80vw, 54vh, 600px);
	}
}

@media (max-width: 767px) {
	.elementor-24 .gd-cine-word {
		font-size: clamp(56px, 18vw, 96px);
	}

	.elementor-24 .gd-cine-word--brand {
		font-size: clamp(44px, 13vw, 72px);
	}

	.elementor-24 .gd-cine-scene--product .gd-cine-word {
		font-size: clamp(56px, 16vw, 88px);
	}

	.elementor-24 .gd-cine-scene__media,
	.elementor-24 .gd-cine-scene__media--wide {
		width: min(84vw, 44vh);
	}
}


/* ==============================================================
   SCROLL CUE — bottom-centre hint on the cinematic hero.
   Gated the same as the rest of the cinematic (html.gd-cine-on); added
   purely as an overlay, nothing else in the hero is touched.

   Visible at the very top of the page with a gentle animated wheel.
   The script (gamedr-hero-cinematic.js) toggles .gd-cine-scrollcue--hidden
   as soon as the user scrolls, and removes it again back at the top.
   ============================================================== */

html.gd-cine-on .gd-cine-scrollcue {
	position: absolute;
	left: 50%;
	bottom: clamp(18px, 4vh, 36px);
	z-index: 5;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	transform: translateX(-50%);
	opacity: 1;
	pointer-events: none;
	transition: opacity .35s ease;
	will-change: opacity;
}

html.gd-cine-on .gd-cine-scrollcue.gd-cine-scrollcue--hidden {
	opacity: 0;
}

html.gd-cine-on .gd-cine-scrollcue__mouse {
	position: relative;
	width: 26px;
	height: 42px;
	border: 1.5px solid rgba(180, 76, 255, .85);
	border-radius: 14px;
	box-shadow:
		0 0 14px rgba(138, 43, 255, .45),
		0 0 3px rgba(180, 76, 255, .6);
}

html.gd-cine-on .gd-cine-scrollcue__dot {
	position: absolute;
	top: 7px;
	left: 50%;
	width: 4px;
	height: 8px;
	border-radius: 2px;
	background: linear-gradient(180deg, #B44CFF 0%, #8A2BFF 100%);
	transform: translateX(-50%);
	animation: gd-cine-scrollcue-wheel 1.8s ease-in-out infinite;
}

html.gd-cine-on .gd-cine-scrollcue__label {
	font-family: "Inter", sans-serif;
	font-weight: 600;
	font-size: 11px;
	letter-spacing: 3px;
	text-transform: uppercase;
	color: #DCDCE2;
	text-shadow: 0 0 10px rgba(138, 43, 255, .35);
}

@keyframes gd-cine-scrollcue-wheel {
	0% {
		opacity: 0;
		transform: translate(-50%, 0);
	}

	20% {
		opacity: 1;
	}

	80% {
		opacity: 1;
	}

	100% {
		opacity: 0;
		transform: translate(-50%, 16px);
	}
}

@media (prefers-reduced-motion: reduce) {
	html.gd-cine-on .gd-cine-scrollcue__dot {
		animation: none;
		opacity: 1;
	}
}

@media (max-width: 767px) {
	html.gd-cine-on .gd-cine-scrollcue {
		bottom: clamp(14px, 3vh, 22px);
		gap: 6px;
	}

	html.gd-cine-on .gd-cine-scrollcue__mouse {
		width: 20px;
		height: 32px;
		border-radius: 11px;
	}

	html.gd-cine-on .gd-cine-scrollcue__dot {
		top: 5px;
		width: 3px;
		height: 6px;
	}

	html.gd-cine-on .gd-cine-scrollcue__label {
		font-size: 9px;
		letter-spacing: 2px;
	}
}
