/**
 * Supra Force — Home hero (.supra-hero-intro / [supra_hero_intro]).
 *
 * Every rule below is scoped under .supra-hero-intro (or a descendant of
 * it), never a bare svg/h2/p/span selector, so nothing here can leak onto
 * any other part of the site.
 *
 * Default state = final state, always. With no JavaScript, with
 * prefers-reduced-motion, or the instant a script/GSAP/element check ever
 * fails, a visitor sees the finished composition directly (large filled
 * wings + "Seja," / "bem-vindo(a)." open to the sides) — nothing is ever
 * hidden waiting for a script that might not run. Outline, blue panel,
 * slogans and the auxiliary side copy belong only to the intermediate
 * animation phase and stay hidden here by default.
 *
 * The ONLY thing that changes the picture is a `supra-hero-will-animate`
 * class added to <html> — synchronously, before first paint, by a tiny
 * inline script in wp_head (see supra-force-custom.php). If hero-intro.js's
 * own deeper checks (elements present, paths measurable, GSAP actually
 * loaded) fail, it removes the class immediately and this file's default
 * rules put the approved final state right back.
 *
 * The filled wings are a SINGLE unified SVG (.supra-hero-fill-full,
 * asa-full.svg) — not two separate left/right halves. This is
 * deliberate: two separately-rendered SVG files meeting at a shared edge
 * always risk a visible seam no matter how precisely they're aligned, and
 * a single file has no seam to risk in the first place. Nothing here
 * clones or overlaps two halves.
 *
 * ROUND-3 SIMPLIFICATION: there is no blue full-background phase anymore
 * (no expansion, no metamorphosis, no mask). The hero stays light
 * throughout; the wing only ever fades (opacity) in and out, and the
 * slogans are blue text directly on the light background. See
 * hero-intro.js for the sequence.
 */

:root {
	/* Real header height is measured and written here by hero-intro.js
	   (ResizeObserver, same pattern as custom-nav-menu.js). 235px is the
	   actual measured height of .elementor-location-header today — a real
	   fallback, not a guess, so there is no layout jump before any JS runs. */
	--supra-header-height: 235px;
}

.supra-hero-intro {
	position: relative;
	width: 100%;
	overflow: hidden;
	background-color: #ffffff;
	min-height: max(540px, calc(100svh - var(--supra-header-height, 235px)));
}

/* Elementor's own widget wrapper and shortcode render wrapper must not be
   allowed to constrain the experience's width/height — both are stretched
   to fill .supra-hero-intro completely instead of sizing to content. */
.supra-hero-intro > .elementor-widget-shortcode,
.supra-hero-intro .elementor-shortcode {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	margin: 0;
	padding: 0;
}

.supra-hero-experience {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	/* This box is the containing block for the slogans (.supra-hero-slogans
	   is position:static, so the absolutely-positioned .supra-hero-slogan
	   children resolve against THIS element). Each slogan is inset:0, i.e.
	   already the full viewport width, and the entrance tween parks it at
	   x:+48 (TIMING.sloganTravel in hero-intro.js) before sliding to x:0 —
	   which pushed its right edge past the viewport and produced a
	   transient horizontal scrollbar on Desktop, measured at 25-34px from
	   ~1750ms to ~4000ms at 1280/1366/1440/1920. Clipping the animation
	   stage is the fix at the source: this box IS the window the slogans
	   are meant to slide through. `clip` and not `hidden` on purpose —
	   `clip` creates no scroll container and leaves any sticky/fixed
	   descendant alone. Measured across 10 viewports: the wing
	   (.supra-hero-wings-stage) always resolves within 0..viewport-width,
	   so nothing visible is ever cut. Tablet/Mobile are unaffected — the
	   intro is gated to min-width:1025px and already measured 0 there. */
	overflow-x: clip;
}

/* ------------------------------------------------------------------
 * Wings stage — outline-left/right + the single fill-full SVG all share
 * the exact same viewBox (0 0 1200 600), so stacking them at inset:0 with
 * equal width/height registers them pixel-perfect on top of each other.
 * ------------------------------------------------------------------ */
.supra-hero-wings-stage {
	position: absolute;
	left: 50%;
	/* Vertical centering is NOT "box middle at 50%" (top:50% +
	   translate(-50%,-50%)) — the wing's own bounding box inside its
	   1200x600 viewBox IS already perfectly symmetric (measured: x 53.7-
	   1146.3, y 87.2-512.8, center exactly 600/300 = 50%/50%), but the
	   FILLED area is not: the tips taper to almost nothing while the
	   feather cluster spreads wide near the bottom, so the area-weighted
	   visual centroid sits at y≈330.8 of 600 = 55.1% down the wing's own
	   box, not 50%. Centering the box's geometric middle at the hero's
	   50% therefore reads as "wing sitting low" — confirmed against a
	   flattened-bezier polygon-centroid calculation, not eyeballed.
	   top:50% + translate(-50%,-55.1%) instead anchors that 55.1%-down
	   point (the wing's true visual center of mass) at the hero's actual
	   vertical center, and does so independent of viewport size (a
	   percentage of the box's OWN height, not a fixed px value) — no path
	   geometry was touched to achieve this. */
	top: 50%;
	transform: translate(-50%, -55.1%);
	/* The wings are the composition's dominant element — sized to land at
	   roughly 62% of viewport width on large desktop screens. Kept
	   deliberately short of "filling the screen": min/max bounds stay a
	   firm ceiling/floor, and act as safety margin for the wing loop (a
	   few percent of breathing room around the wingtips so the loop's
	   subtle scale/translate never risks touching the container edges). */
	width: clamp(810px, 62vw, 1200px);
	max-width: 100%;
	aspect-ratio: 1200 / 600;
	pointer-events: none;
}

.supra-hero-outline-left,
.supra-hero-outline-right,
.supra-hero-fill-full,
.supra-hero-fill-reveal {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	/* Origin sits at the wings' own root/junction point (x=600 of the
	   1200-wide canvas = 50%; y≈455 of the 600-tall canvas ≈ 76%), not the
	   element's geometric center — the resting breathing loop's
	   scale/translate (hero-intro.js) is anchored here, so the wings
	   always breathe from where they actually attach. */
	transform-origin: 50% 76%;
}

.supra-hero-outline-left svg,
.supra-hero-outline-right svg,
.supra-hero-fill-full svg,
.supra-hero-fill-reveal svg {
	display: block;
	width: 100%;
	height: 100%;
}

/* ------------------------------------------------------------------
 * Outline half-clip — each outline SVG's own path geometry reaches to
 * (and very slightly past, at stroke-width scale) the shared center
 * junction (x=600 of the 1200-wide canvas = 50%). Clipping each wrapper
 * to its own half prevents either stroke from ever rendering a pixel on
 * the opposite side of that centerline, which is what produced the
 * brief "X" during the draw/fade-in — this never touches the SVG files
 * or their path geometry, only what each wrapper is allowed to paint.
 * ------------------------------------------------------------------ */
.supra-hero-outline-left {
	clip-path: inset(0 50% 0 0);
}

.supra-hero-outline-right {
	clip-path: inset(0 0 0 50%);
}

/* Final static state: only the filled wings are visible. */
.supra-hero-outline-left,
.supra-hero-outline-right {
	display: none;
}

/* ------------------------------------------------------------------
 * Fill reveal — a second, geometrically-identical copy of asa-full.svg
 * (same position/size/transform-origin as .supra-hero-fill-full),
 * layered on top. Hidden/closed by default; hero-intro.js opens it via
 * clip-path (center -> edges) for the brief internal color-reveal after
 * the slogans, then hides it again once .supra-hero-fill-full has been
 * restored to full opacity underneath (see file header / JS). Never a
 * scale change, never a shape other than the wing's own silhouette.
 * ------------------------------------------------------------------ */
.supra-hero-fill-reveal {
	opacity: 0;
	clip-path: inset(0% 50% 0% 50%);
	pointer-events: none;
}

/* ------------------------------------------------------------------
 * Blue panel — kept only for markup compatibility (see hero-intro.php).
 * There is no blue full-background phase: no expansion, no metamorphosis,
 * no mask, no clip-path. Forced fully inert here, unconditionally, and
 * hero-intro.js never queries or touches this element at all.
 * ------------------------------------------------------------------ */
.supra-hero-blue-panel {
	display: none;
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
}

/* ------------------------------------------------------------------
 * Slogans — animation-only, hidden in the static final state.
 * ------------------------------------------------------------------ */
.supra-hero-slogans {
	display: none;
}

.supra-hero-slogan {
	display: none;
	position: absolute;
	inset: 0;
	margin: 0;
	align-items: center;
	justify-content: center;
	font-family: "Gunterz", sans-serif;
	font-weight: 900;
	font-style: italic;
	text-transform: uppercase;
	font-size: clamp(28px, 4vw, 56px);
	/* Blue text directly on the hero's own light background — there is no
	   blue backdrop behind the slogans anymore. */
	color: #425fdb;
}

/* ------------------------------------------------------------------
 * Final stage — houses the welcome text (always visible, the permanent
 * resting content) and the auxiliary side copy (intermediate-phase only,
 * hidden below).
 * ------------------------------------------------------------------ */
.supra-hero-final-stage {
	position: absolute;
	inset: 0;
}

/* Auxiliary copy — NOT part of the permanent final state. Belongs only to
   an intermediate animation phase (bottom corners, never the top, so it
   never competes with the wings above). Positioning is prepared here in
   full so hero-intro.js only ever toggles visibility/opacity, never
   repositions these elements. */
.supra-hero-copy-left,
.supra-hero-copy-right {
	display: none;
	position: absolute;
	/* Bottom-anchored only — top is explicitly reset so no cascaded/
	   inherited top value can ever compete with bottom at the same time. */
	top: auto;
	bottom: 8%;
	max-width: min(320px, 26%);
	margin: 0;
	font-family: "LUXE UNO", sans-serif;
	font-weight: 300;
	/* ONE continuous fluid scale, Mobile through large Desktop — added
	   2026-07-24, replacing the old split system (this line was
	   14-18px, plus a separate 12-15px override below <=1024px). At
	   ~1098px ("small Desktop") the old value was pinned to its 14px
	   floor — measured ~10px smaller than it should read, per live
	   validation — while Desktop maior (1440px) only reached 16.56px.
	   New curve: 13px at the narrowest phones, ~22px at 1098px (closing
	   almost exactly that ~10px gap), capping at 23px around 1000px so
	   it stays legible/supportive without competing with "Seja,"/
	   "bem-vindo(a)." above it. See the old <=1024px override further
	   down — its own font-size line is removed, this single rule now
	   covers that whole range too. */
	font-size: clamp(13px, calc(11px + 1vw), 23px);
	line-height: 1.5;
	color: #0e0e66;
	pointer-events: none;
	/* Bottom-to-top reveal: the box's own top edge sweeps down from fully
	   clipped (inset 100% from the top = nothing visible) to fully open
	   (inset 0% = the whole box). No separate masking element/band — the
	   clip-path IS the mask, so there's nothing to misalign or leave a
	   visible seam. Line-height/padding are untouched, so descenders and
	   accents are never cut once the reveal finishes opening. */
	clip-path: inset(100% 0 0 0);
}

.supra-hero-copy-left {
	left: 4%;
	text-align: left;
}

.supra-hero-copy-right {
	right: 4%;
	text-align: right;
}

.supra-hero-copy-left span,
.supra-hero-copy-right span {
	color: #425fdb;
	font-weight: 400;
}

.supra-hero-welcome {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 0 4%;
	box-sizing: border-box;
	pointer-events: none;
}

.supra-hero-welcome-left,
.supra-hero-welcome-right {
	font-family: "LUXE UNO", sans-serif;
	font-weight: 400;
	/* ONE continuous fluid scale, Mobile through large Desktop — added
	   2026-07-24, replacing the old split system (this line was
	   28-44px, plus a separate 20-36px override below <=1024px).
	   Deliberately smaller across the board than before, especially at
	   Desktop: at ~1098px the old value was ~32.9px (reading as
	   competing with the wing per live validation); at 1440px it
	   reached its 44px ceiling. New curve caps at 30px around 1155px
	   and never grows past that — "Seja,"/"bem-vindo(a)." stay
	   secondary to the wing at any Desktop width instead of continuing
	   to grow with the viewport. See the old <=1024px override further
	   down — its own font-size line is removed, this single rule now
	   covers that whole range too. */
	font-size: clamp(20px, calc(15px + 1.3vw), 30px);
	color: #0e0e66;
	white-space: nowrap;
}

/* +6px at large Desktop only, added 2026-07-24 — explicit request: the
   base clamp above is already flat at its 30px ceiling from ~1155px
   onward (including 1440px+), so this is a direct, deliberate step up
   from that ceiling (30 + 6 = 36px), not a new curve — scoped narrowly
   to >=1440px only, leaving 1025-1439px (and the <=1199px top/bottom
   composition) exactly as already approved. */
@media (min-width: 1440px) {
	.supra-hero-welcome-left,
	.supra-hero-welcome-right {
		font-size: 36px;
	}
}

/* ------------------------------------------------------------------
 * Animating mode — html.supra-hero-will-animate. Flips the composition
 * to its starting point: outline containers become visible (the actual
 * stroke is still invisible via stroke-dashoffset, set inline by
 * hero-intro.js before the timeline starts), fill-full and welcome start
 * transparent, slogans/copy stay display:none until hero-intro.js flips
 * each one's display individually right before animating it. Nothing
 * here is ever the ONLY path to the final state — every override is
 * undone the instant the will-animate class is removed (success,
 * interruption, or a failed safety check).
 * ------------------------------------------------------------------ */
html.supra-hero-will-animate .supra-hero-outline-left,
html.supra-hero-will-animate .supra-hero-outline-right {
	display: block;
}

html.supra-hero-will-animate .supra-hero-fill-full {
	opacity: 0;
}

html.supra-hero-will-animate .supra-hero-welcome-left,
html.supra-hero-will-animate .supra-hero-welcome-right {
	opacity: 0;
}

html.supra-hero-will-animate .supra-hero-slogan,
html.supra-hero-will-animate .supra-hero-copy-left,
html.supra-hero-will-animate .supra-hero-copy-right {
	pointer-events: none;
}

/* ------------------------------------------------------------------
 * Replay control — a single small, public button. Hidden by default
 * (opacity:0 + pointer-events:none, so it can never be clicked while
 * invisible) and only revealed by hero-intro.js adding `.is-visible` once
 * the intro reaches its final resting state. Purely cosmetic/positional:
 * no effect on the hero's size or flow (absolute, outside the document
 * flow) and no interaction with the animation timing itself.
 * ------------------------------------------------------------------ */
.supra-hero-intro .supra-hero-replay-btn {
	position: absolute;
	top: -2px;
	right: 18px;
	z-index: 20;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	/* Restricted, exhaustive reset — scoped only to this exact button, never
	   a site-wide `button` rule. !important is used on every property
	   confirmed (via live DevTools inspection) to be contested by the
	   active theme's hello-commerce-woocommerce.css, which targets
	   essentially every <button>/[type=button] on the site with its own
	   box-model (12px/24px padding), near-black background, white text,
	   and border — and ties this rule's specificity, so without
	   !important, source order alone decides the winner (backwards, once
	   the theme's own stylesheet loads after this one). First pass only
	   forced background/border/color and left the theme's 12px/24px
	   padding in place, which squeezed the button's content box down to
	   ~0x4px and made the icon invisible — box-sizing/width/height/padding
	   are forced here too so the 28px box is genuinely what renders. */
	box-sizing: border-box !important;
	width: 68px !important;
	height: 68px !important;
	min-width: 0 !important;
	max-width: none !important;
	min-height: 0 !important;
	max-height: none !important;
	margin: 0 !important;
	padding: 0 !important;
	background: transparent !important;
	background-color: transparent !important;
	background-image: none !important;
	border: 0 !important;
	border-radius: 0;
	box-shadow: none !important;
	outline: none;
	filter: none;
	appearance: none;
	-webkit-appearance: none;
	-moz-appearance: none;
	color: #425fdb !important;
	cursor: pointer;
	line-height: 0;
	opacity: 0;
	pointer-events: none;
	transition: opacity 0.35s ease;
}

.supra-hero-intro .supra-hero-replay-btn::before,
.supra-hero-intro .supra-hero-replay-btn::after {
	content: none;
	display: none;
	background: none;
}

.supra-hero-intro .supra-hero-replay-btn.is-visible {
	opacity: 1;
	pointer-events: auto;
}

.supra-hero-intro .supra-hero-replay-btn svg {
	display: block !important;
	width: 60px !important;
	height: 60px !important;
	max-width: none !important;
	max-height: none !important;
	fill: currentColor;
	pointer-events: none;
}

/* Discreet hover/focus feedback on the ICON only — never a background,
   never a box, per this round's explicit instruction. Scoped to
   .is-visible so it can only ever trigger while the button is actually
   shown and clickable. */
.supra-hero-intro .supra-hero-replay-btn.is-visible:hover {
	background: transparent !important;
	opacity: 0.7;
}

.supra-hero-intro .supra-hero-replay-btn:focus-visible {
	background: transparent !important;
	outline: 2px solid #425fdb;
	outline-offset: 3px;
}

/* ====================================================================
 * TABLET/MOBILE FINAL-STATE COMPOSITION
 * added 2026-07-22, REVISED 2026-07-23, TYPOGRAPHY PASS 2026-07-23
 * ====================================================================
 *
 * WHY THIS EXISTS: every rule above this banner has zero media queries
 * (confirmed by grep before writing this section) — the final resting
 * composition uses the exact same values at every viewport width,
 * including mobile.
 *
 * FIRST VERSION (2026-07-22) pushed "Seja," to the container's own top
 * edge and "bem-vindo(a)." to its own bottom edge via flex-direction:
 * column + justify-content:space-between, fixing the original overlap
 * with the wing. Live validation of THAT version found a new problem:
 * both texts ended up too far FROM the wing (too much empty space) and
 * "bem-vindo(a)." landed too close to the WooCommerce ordering/filter
 * row that sits directly below the hero on the Home page.
 *
 * SECOND VERSION (2026-07-23) replaced edge-anchoring with center-
 * anchoring: both texts are positioned relative to the HERO'S OWN
 * CENTER (the same point the wing is centered on — see
 * .supra-hero-wings-stage's own top:50% + translate(-50%,-55.1%)
 * above), offset up/down by a single shared distance
 * (--supra-welcome-offset). A smaller offset pulls both texts closer to
 * the wing AND away from the hero's own edges (so "bem-vindo(a)." also
 * gains distance from the filter row below, addressed by the SAME
 * variable, not a second one).
 *
 * THIS PASS (2026-07-23, later same day) adds two things without
 * touching the offset/positioning logic above: (1) !important on
 * position/transform, a defensive measure against GSAP inline styles
 * (see the rule's own comment below for why); (2) font-size for
 * .supra-hero-welcome(-left/-right) and a retuned .supra-hero-slogan
 * scale, both previously inheriting/using a floor too close to
 * Desktop's own size at the narrowest phones.
 *
 * SCOPE: .supra-hero-welcome(-left/-right) and .supra-hero-slogan are
 * touched. The wing itself — .supra-hero-wings-stage's width/aspect-
 * ratio, .supra-hero-fill-full/-reveal, WING_ORIGIN, the breathing
 * loop's own scale/duration in hero-intro.js — is NOT touched by this
 * section, per this round's explicit instruction to keep the wing's
 * size and animation intact. asa-full.svg and the outline SVGs are
 * untouched (no rule here targets an svg element).
 *
 * A single @media(max-width:1024px) covers both Tablet and Mobile
 * together (not split, unlike the footer/grid work) because the wing's
 * own behavior is identical across that whole range (always at its
 * max-width:100%-capped floor below ~1300px) — there is no compositional
 * difference between Tablet and Mobile here that would justify two
 * separate blocks; --supra-welcome-offset itself is one continuous
 * clamp() covering both, growing gradually with viewport width rather
 * than stepping at the 768px boundary. Desktop (>=1025px) has no rule
 * in this section at all, so it inherits the original, unmodified,
 * approved values above.
 */
@media (max-width: 1024px) {
	/* Raises the whole composition (wing + welcome + slogans, all
	   centered on THIS box's own center — nothing below repositions
	   itself individually) by shrinking the box itself, rather than
	   nudging each child element separately. The base rule's
	   max(540px, 100svh-header) was sized for Desktop's own wing/text
	   proportions — on a tall, narrow phone/tablet viewport that formula
	   reserves nearly the full screen height, leaving the vertically-
	   centered content looking "sunk" with large empty margins above/
	   below. 68svh (down from 100svh) + a lower floor (460px, down from
	   540px) keep the section shorter here specifically — the --supra-
	   header-height fallback also drops from Desktop's 235px to 90px,
	   matching this round's now-compact single-row Tablet/Mobile header
	   (the real value is still measured live by hero-intro.js via
	   ResizeObserver, unchanged — only the pre-JS fallback used for
	   first paint changes here).

	   RETUNED 2026-07-24: live screenshots at 627/758/800 x860 showed a
	   large empty gap between "bem-vindo(a)." and whatever follows the
	   hero (Home's ordering dropdown) — at a device height of 860px,
	   68svh - 90 = ~495px, well above the ~390-410px the centered wing +
	   welcome content actually needs at this scale, leaving that
	   difference as dead space at the bottom of the box. Ratio and floor
	   both reduced together, calibrated against this same 860px
	   reference height: 58svh - 90 = ~409px (down from ~495px, a ~86px
	   reduction), floor lowered 460px -> 400px so it doesn't clip that
	   result (400 < 409, so the fluid part still governs at this
	   height). This is a viewport-HEIGHT-driven formula (svh), not a
	   width one — the three widths reported were incidental (all tested
	   near the same ~860px device height); the fix applies to any
	   width in this block's own 1024px range. Only re-validated against
	   the one height actually reported (860px) — recommend re-checking
	   at a few other real device heights (e.g. ~740px, ~926px) before
	   calling this fully closed, since svh scales with height, not just
	   width. */
	.supra-hero-intro {
		min-height: max(400px, calc(58svh - var(--supra-header-height, 90px)));
		/* Top clearance floor, added 2026-07-24 — the shorter box above
		   (retuned the same day) centers the wing/welcome composition
		   closer to the header divider at some widths (reported live at
		   771x857 — "Seja," nearly touching the divider). box-sizing is
		   made explicit border-box here (already the effective value via
		   the site-wide */*::before/*::after{box-sizing:border-box}
		   reset, confirmed in theme.css/Elementor's own frontend.min.css
		   — stated explicitly rather than relied on implicitly) so this
		   padding-top is carved OUT of min-height's own box rather than
		   added on top of it: the section's total rendered height is
		   unchanged, only how much of it sits above vs. below the
		   composition's own centerline shifts. max(24px, 4%) — the 4% is
		   relative to this element's own WIDTH (a CSS rule for ALL
		   padding percentages, top/bottom included — not a typo), which
		   happens to track the same width range the problem was reported
		   in; 24px is a hard floor for any narrower width where 4% alone
		   would be too thin.
		   +20px added 2026-07-24 (explicit request, screenshot at 768px —
		   "aumente levemente (20px) o limite... o resto está perfeito"),
		   then +20px more the same day (screenshot at 781px — "Seja"
		   still too close to the top) — total +40px flat on top of the
		   whole max(24px,4%) result, not a change to the floor or the
		   percentage individually, so the relative curve/shape already
		   approved at every other width stays the same, just shifted
		   down by a larger constant (768px: ~30.7px -> ~70.7px). */
		box-sizing: border-box;
		padding-top: calc(max(24px, 4%) + 40px);
	}

	/* .supra-hero-welcome(-left/-right) positioning previously lived here.
	   Moved 2026-07-24 into its own shared block below (see "DESKTOP
	   ESTREITO" section, right after this one) so the exact same rules
	   also cover 1025–1199px, not just this block's own <=1024px range —
	   nothing about the values themselves changed, only where they apply. */

	/* Slogan scale, retuned this round: the previous clamp(34px,5vw,56px)
	   (itself already raised once from an original 28px floor) still
	   read as too large at the narrowest phones relative to the wing.
	   Floor lowered to 24px, ceiling lowered to 48px (below Desktop's
	   own base clamp ceiling of 56px, so Tablet never reads as large as
	   Desktop) — same continuous clamp() technique, no step between
	   Mobile and Tablet, gradual growth with viewport width throughout. */
	.supra-hero-slogan {
		font-size: clamp(24px, 5.5vw, 48px);
	}

	/* .supra-hero-copy-left/-right ("Só você é capaz de mudar..." /
	   "Nós apenas te ajudamos.") are display:none by default (base rule
	   above) and only ever shown by hero-intro.js during the GSAP
	   entrance timeline — which per MIN_WIDTH:1025 should never run
	   below 1025px. Reported live as rendering cramped against the
	   right edge on Mobile anyway: the same class of race already fixed
	   for .supra-hero-welcome-left/right two rounds ago (a run mid-
	   flight when the viewport crosses below 1025px leaves GSAP's own
	   inline styles active) — the base rule's right:4% was never given
	   a Tablet/Mobile-specific safe margin because it was assumed
	   unreachable here. !important on left/right for the same reason
	   !important was added to .supra-hero-welcome: GSAP's inline styles
	   beat a plain stylesheet rule regardless of specificity. max-width
	   is also reduced — the Desktop value (320px/26vw wide) was never
	   meant to fit a phone-width column to begin with. font-size no
	   longer set here — 2026-07-24: the base (unconditional) rule above
	   now uses ONE continuous clamp() spanning Mobile through Desktop,
	   already covering this range. */
	.supra-hero-copy-left,
	.supra-hero-copy-right {
		max-width: min(200px, 46%);
	}

	.supra-hero-copy-left {
		left: clamp(16px, 5vw, 28px) !important;
	}

	.supra-hero-copy-right {
		right: clamp(16px, 5vw, 28px) !important;
	}

	/* Replay button: Desktop's 68px/60px-icon box (see the rule above,
	   heavily !important'd against the parent theme's own global button
	   styles) reads as too heavy against this round's smaller Tablet/
	   Mobile composition. Matching !important + equal-or-higher
	   specificity (.supra-hero-intro .supra-hero-replay-btn, same as
	   the rule being overridden) is required to win — a later plain
	   declaration would lose to the existing !important ones. Position
	   (top/right) is untouched: the button stays anchored to the same
	   corner, just smaller. */
	.supra-hero-intro .supra-hero-replay-btn {
		width: clamp(40px, 8vw, 52px) !important;
		height: clamp(40px, 8vw, 52px) !important;
	}

	.supra-hero-intro .supra-hero-replay-btn svg {
		width: clamp(34px, 7vw, 44px) !important;
		height: clamp(34px, 7vw, 44px) !important;
	}
}

/* ====================================================================
 * DESKTOP ESTREITO (1025–1199px) — WELCOME TOP/BOTTOM COMPOSITION
 * added 2026-07-24
 * ====================================================================
 *
 * PROBLEM: >=1025px inherits only the unconditional base rules above
 * (.supra-hero-welcome: display:flex + justify-content:space-between,
 * i.e. the lateral "Seja," left / "bem-vindo(a)." right composition).
 * Live validation at ~1050px found "Seja," crowding the wing and
 * "bem-vindo(a)." overlapping it outright — that lateral composition
 * needs more side room than a ~1025–1199px viewport has once the wing
 * (see .supra-hero-wings-stage below) is factored in.
 *
 * FIX: reuse — not reimplement — the exact same top/bottom, center-
 * anchored composition already approved for Tablet/Mobile (the block
 * directly above), by widening the media query that applies it rather
 * than writing a second copy of the same four rule groups. This is a
 * plain source-order comma OR: "(max-width:1024px), (min-width:1025px)
 * and (max-width:1199px)" — >=1200px (Desktop amplo) is not listed, so
 * it keeps inheriting the unmodified lateral base rules untouched.
 *
 * WHY THE SAME --supra-welcome-offset VALUE NEEDS NO RETUNING: the two
 * quantities that actually drive this composition's spacing are both
 * already flat/unchanging across the ENTIRE 810px–1306px viewport span,
 * which fully contains 1025–1199px:
 *   - the wing (.supra-hero-wings-stage): width:clamp(810px,62vw,1200px)
 *     — 62vw only exceeds the 810px floor once viewport > ~1306px, so
 *     the rendered wing is a constant 810px through all of Tablet's
 *     upper end AND the whole 1025–1199px range. It is not "bigger"
 *     just past 1025px — it's the identical size it already was at
 *     1024px.
 *   - the offset itself: clamp(115px,22vw,190px) reaches its own 190px
 *     ceiling once viewport > 115/0.22 ≈ 864px — already flat at 1024px
 *     and remains flat (190px) throughout 1025–1199px too.
 * Same wing size + same offset ceiling on both sides of the 1025px line
 * means reusing the value unchanged reproduces the exact spacing already
 * validated at Tablet's own upper end, with no numeric adjustment and no
 * jump at 1025px.
 */
@media (max-width: 1024px), (min-width: 1025px) and (max-width: 1199px) {
	.supra-hero-welcome {
		--supra-welcome-offset: clamp(115px, 22vw, 190px);
		display: block;
		padding: 0;
	}

	/* !important on position/transform: below 1025px hero-intro.js's own
	   canAnimate/loopEligible gates (MIN_WIDTH:1025) mean the entrance
	   timeline never runs, so this guards only against a stale mid-flight
	   inline style crossing the boundary (see the wing-loop race fixed
	   earlier this project). At 1025–1199px specifically, the timeline
	   DOES run for real (isDesktopWidth() is min-width:1025px) — GSAP
	   tweens welcomeLeft/Right's opacity and its own internal y (0->7px)
	   via inline style on the same element. A stylesheet !important always
	   outranks a plain (non-!important) inline style regardless of when
	   it was written, so this position/transform stays authoritative for
	   the whole fade: only opacity animates, "Seja," fades in already at
	   its top position and "bem-vindo(a)." already at its bottom position,
	   neither ever resting over the wing mid-transition. No hero-intro.js
	   change was needed for this — confirmed by reading the exact tween
	   (opacity 0->1, y 7->0) before writing this rule, not assumed. */
	.supra-hero-welcome-left,
	.supra-hero-welcome-right {
		position: absolute !important;
		left: 50% !important;
		top: 50% !important;
		width: max-content;
		max-width: calc(100% - 32px);
		text-align: center;
		white-space: normal;
	}

	.supra-hero-welcome-left {
		transform: translate(-50%, -50%) translateY(calc(-1 * var(--supra-welcome-offset))) !important;
	}

	.supra-hero-welcome-right {
		transform: translate(-50%, -50%) translateY(var(--supra-welcome-offset)) !important;
	}
}

/* ====================================================================
 * MOBILE-ONLY VERTICAL LIFT — added 2026-07-23
 * ====================================================================
 *
 * Separate from the @media(max-width:1024px) block above on purpose:
 * everything above is shared Tablet+Mobile (confirmed no compositional
 * difference between them for the wing/welcome/slogans). This one is
 * NOT — max-width:767px only, so Tablet keeps exactly the composition
 * tuned in the previous round, untouched.
 *
 * Shifts three siblings under .supra-hero-experience up by a flat 60px
 * on Mobile: the wing, the final-stage block (which is what actually
 * carries "Seja,"/"bem-vindo(a)." and the side copy — shifting it moves
 * all of them together as one unit, not three separate offsets), and
 * the slogans. .supra-hero-replay-btn is a fourth, separate sibling
 * under the same parent — deliberately NOT listed below, so its own
 * size/position (set above, and in the base rules) is fully unaffected.
 *
 * transform:translateY(-60px) rather than margin/top: none of these
 * three elements participate in normal document flow to begin with
 * (all position:absolute), so a layout-affecting property would do
 * nothing (or worse, need inset math redone) — transform is the
 * correct tool here, consistent with how .supra-hero-wings-stage
 * already positions itself. For .supra-hero-wings-stage specifically,
 * this REPLACES (doesn't just add to) the base rule's own
 * transform:translate(-50%,-55.1%) — the new value keeps that same
 * centering pair and appends the lift, rather than fighting the base
 * rule's translate with a second, separate transform declaration
 * (only the last transform on an element wins, they don't stack
 * across rules).
 */
@media (max-width: 767px) {
	/* REVERTED 2026-07-24: briefly bumped -60px -> -88px earlier the same
	   day ("subir mais ou menos 28px o hero"), then reverted back to the
	   original -60px per explicit follow-up correction — the actual goal
	   was always to raise what comes AFTER the hero (the ordering
	   dropdown + cards), not the hero's own wing/text content. That's
	   handled entirely by margin-bottom below (and the extra <=599px
	   block further down), which never touches this transform or the
	   composition's own centering. Back to the original, long-approved
	   -60px lift here — same three siblings, same technique. */
	.supra-hero-wings-stage {
		transform: translate(-50%, -55.1%) translateY(-60px);
	}

	.supra-hero-final-stage {
		transform: translateY(-60px);
	}

	.supra-hero-slogan {
		transform: translateY(-60px);
	}

	/* Pulls whatever comes AFTER the hero (Home's own ordering dropdown,
	   then the product grid) up, added 2026-07-24 — explicit request.
	   The three translateY(-88px) rules above only shift content INSIDE
	   the hero's own box (all position:absolute; they never change the
	   box's own rendered height), so nothing after the hero would move
	   without this. A negative margin-bottom on the section itself is
	   the correct, minimal tool here: it shortens the space the hero's
	   box actually occupies in normal document flow, without touching
	   min-height/padding-top (both handled separately above) or the
	   wing/welcome content's own centering inside the box — confirmed
	   explicitly this round as a hard requirement ("não pode mover a
	   asa/textos"). -36px -> -56px (+20px more, same day, same reason:
	   the gap before the ordering dropdown still read as too large). */
	/* Pulls the ordering dropdown, the product grid and everything after the
	   hero up as ONE block, without touching the hero's own box or the wing.

	   !important is required, and the reason is subtle. This hero is an
	   Elementor container: frontend.min.css declares
	       .e-con { margin-block-end: var(--margin-block-end); }
	   which is the LOGICAL twin of margin-bottom. Both resolve to the same
	   used value in horizontal-tb writing mode, both weigh the same (0,1,0),
	   so the winner is decided purely by source order — and Elementor's
	   stylesheet loads after this one. The plain `margin-bottom: -56px` that
	   sat here computed to 0px in the browser: the rule was dead from the day
	   it was written, which is why earlier rounds never actually closed this
	   gap. Verified in DevTools before this change.

	   -40px, matching the requested shift. Chosen over shrinking the hero:
	   the composition is absolutely positioned and centred on the box, so any
	   min-height change would move the wing, which must not move. A negative
	   margin only shortens the space the hero occupies in normal flow — the
	   40px it gives back is empty background under the right-hand phrase. */
	.supra-hero-intro {
		margin-bottom: -40px !important;
	}

	/* Micro-adjustment pass, same day: 5px more breathing room between
	   the wing and each welcome text — pushes "Seja," 5px further up
	   and "bem-vindo(a)." 5px further down from the hero's own center
	   (the shared --supra-welcome-offset from the 1024px block above is
	   untouched; this just adds a flat 5px on top, Mobile only).
	   !important + matching selector specificity + later source order
	   is required to win over the 1024px block's own !important rule
	   for the same property on the same element — a lower-specificity
	   or non-important override would lose to it. */
	.supra-hero-welcome-left {
		transform: translate(-50%, -50%) translateY(calc(-1 * var(--supra-welcome-offset) - 5px)) !important;
	}

	.supra-hero-welcome-right {
		transform: translate(-50%, -50%) translateY(calc(var(--supra-welcome-offset) + 5px)) !important;
	}

	/* The two auxiliary side phrases ("Só você é capaz de mudar seus
	   resultados." / "Nós apenas te ajudamos.") — 10px further up,
	   stacking on top of the -60px .supra-hero-final-stage shift above
	   (they're children of it, so both apply together: parent's -60px
	   plus this element's own -10px). No !important needed here — the
	   base rule sets no transform on .supra-hero-copy-left/-right at
	   all, so there's nothing to out-specificity, only to add to. */
	.supra-hero-copy-left,
	.supra-hero-copy-right {
		transform: translateY(-10px);
	}

	/* ----------------------------------------------------------------
	   DIAGONAL COMPOSITION — MOBILE ONLY — added 2026-08-01
	   ----------------------------------------------------------------
	   copy-left moves from the bottom-left corner to the TOP-left, leaving
	   copy-right alone in the bottom-right, so the two phrases read as a
	   diagonal across the wing instead of sitting side by side along the
	   bottom edge (which is what the base rule's shared bottom:8% produces).

	   Scoped to THIS <=767px block on purpose. Tablet (768-1024px) must stay
	   exactly as approved, so nothing here may live in the shared
	   @media(max-width:1024px) block above — it would reach Tablet too.
	   Desktop (>=1025px) has no rule in either block and is untouched.
	   The matching JS gate lives in hero-intro.js (INTRO_MQ) and in the
	   pre-paint script in supra-force-custom.php; all three describe the same
	   discontinuous range (Desktop OR Mobile, never Tablet).

	   top/bottom, deliberately NOT transform: hero-intro.js animates these two
	   elements with GSAP's `y`, which writes an inline transform and would
	   overwrite any transform set here (that is exactly why the
	   translateY(-10px) above is inert whenever the timeline actually runs).
	   top/bottom are never touched by the timeline, so the entry animation and
	   its final state are preserved and there is no jump when it finishes. */
	/* --------------------------------------------------------------
	   Vertical placement of the top phrase — ONE owner for the whole
	   Mobile range. Nothing else in this file sets its `top`.
	   --------------------------------------------------------------
	   Deliberately driven by vw, never by a percentage of the container:
	   the hero box is a fixed 35rem (560px) tall — Elementor's own
	   --min-height wins over this file's min-height rule — but a
	   percentage would still re-anchor if that ever changes, and the
	   brief asks for a value that does not drift with container height.
	   Measured identical at 844px and 939px viewport heights.

	   The free band between the header and the wing's INK closes from
	   BOTH ends as the viewport widens: the phrase grows with its own
	   font clamp (67px tall at 390, 71 at 480, 78 at 635, 84 at 767)
	   while the ink's top edge rises (297 at 390, 278 at 480, 251 at
	   635, 230 at 767 — measured with isPointInFill on the real path
	   geometry, not the SVG bounding box, which carries a lot of
	   transparent margin). Net slack: 95px at 390, 33px at 635, 1px at
	   767.

	   The phrase is placed at 60% of that slack rather than centred at
	   50% — that is the "descer levemente" of this round, and it is why
	   the drop is ~9px at 390-480 and ~3px at 635: past ~700px there is
	   simply no slack left to spend. calc is the linear fit of that 60%
	   line (390 -> 87px, 480 -> 73px, 635 -> 50px, 767 -> 30px, each
	   reproduced within ~1px). clamp() only guards widths outside the
	   measured range. Declared on the hero itself (not :root) so it stays
	   scoped to this component and simply inherits down to the phrase. */
	.supra-hero-intro {
		--supra-mobile-copy-top: clamp(30px, calc(145px - 14.96vw), 88px);
	}

	.supra-hero-copy-left {
		/* bottom:auto is explicit for the same reason the base rule sets
		   top:auto — top and bottom must never both be live here. */
		top: var(--supra-mobile-copy-top);
		bottom: auto;
	}

	.supra-hero-copy-right {
		/* Pulled up toward the wing. The lower band (wing ink bottom -> the
		   ordering dropdown) is enormous on Mobile — 281px at 390 for a 22px
		   phrase — and the previous value left it sitting 146px below the wing
		   but only 113px above the ordering, i.e. drifting toward the products
		   instead of belonging to the hero.

		   Measured gap to the wing before: 146px at 390, 130 at 481, 111 at
		   680, 70 at 767. 767 was already right (the phrase wraps to two lines
		   there, so it starts higher on its own); 390 was the worst. This calc
		   therefore shortens the distance by ~36px at 390 and tapers to ~0 at
		   767, landing every width near a ~100px gap to the wing while keeping
		   well over 110px of clearance to the ordering dropdown.

		   NOT compensated for the parent's -60px: this one is bottom-anchored,
		   so that lift only helps it clear the ordering dropdown below. */
		bottom: clamp(64px, calc(138px - 9.55vw), 104px);
	}

	/* Replay: +1px on both ends of the previous round's clamp() — Mobile
	   only (the shared 1024px block's own clamp is left untouched, so
	   Tablet keeps exactly its previous size). Same specificity as the
	   rule being overridden (.supra-hero-intro .supra-hero-replay-btn)
	   plus !important plus later source order — required to win, same
	   reasoning as the welcome-left/right override above. Position
	   (top/right) and behavior are untouched — size only. */
	.supra-hero-intro .supra-hero-replay-btn {
		width: clamp(41px, 8vw, 53px) !important;
		height: clamp(41px, 8vw, 53px) !important;
	}

	.supra-hero-intro .supra-hero-replay-btn svg {
		width: clamp(35px, 7vw, 45px) !important;
		height: clamp(35px, 7vw, 45px) !important;
	}
}

/* ====================================================================
 * NARROW MOBILE — EXTRA HERO -> ORDERING GAP REDUCTION — added 2026-07-24
 * ====================================================================
 * Explicit request, screenshots at 461px and 601px: below 600px the gap
 * between the hero and Home's ordering dropdown still reads as too big
 * even after the -36px margin-bottom above (which covers the whole
 * <=767px range uniformly). 600-767px was confirmed good as-is, so this
 * only narrows further, on top of (not instead of) the existing rule —
 * consolidated on the same property/selector, just a bigger negative
 * value for this sub-range.
 * -80px (was -60px, +20px more the same day, same reason/technique as
 * the <=767px baseline above — confirmed this must NOT move the wing/
 * welcome content at all, only margin-bottom qualifies, since it never
 * touches min-height/padding-top or the composition's own centering).
 */
/* ====================================================================
 * MOBILE LARGO (681-767px) — AJUSTE DA FRASE ESQUERDA — added 2026-08-01
 * ====================================================================
 * The only band where the composition does not fit on geometry alone.
 * Below 681px nothing here applies and the approved composition is
 * untouched; at 768px and above this block is dark and Tablet keeps its
 * own (phrase-free) layout.
 *
 * WHY IT WAS TIGHT. Two things close the band between the header and the
 * wing as the viewport widens: the phrase grows with the shared font
 * clamp (17.81px at 681, 18.67px at 767) while the wing's ink top edge
 * rises (244 -> 230). Free band: 102px at 681 against an 81px phrase,
 * 85px at 767 against an 84px phrase. Measured, not estimated.
 *
 * THE FEEDBACK LOOP THAT MAKES THIS CHEAP. Shrinking the font also
 * NARROWS the phrase, and the wing's upper feather rises with x — so a
 * narrower phrase is measured against a lower part of the wing. Past a
 * threshold the right edge clears the feather entirely and the usable
 * band jumps (at 767: ink 230 -> 276 between 15.5px and 15px). The
 * reduction needed is therefore far smaller than a naive
 * height-versus-band calculation suggests.
 *
 * FONT. Linear in vw, anchored so that at exactly 681px it evaluates to
 * 17.81px — the same value the shared clamp already produces there. The
 * transition across the 680/681 boundary is therefore continuous: there
 * is no step to see. It tapers to 14.20px at 767px, a 24% reduction at
 * the far end and none at all at the near end.
 *
 * line-height is deliberately NOT touched: it is a unitless 1.5, so the
 * three lines shrink proportionally on their own and the approved line
 * breaks are preserved.
 */
@media (min-width: 681px) and (max-width: 767px) {
	.supra-hero-copy-left {
		font-size: calc(46.4px - 4.198vw);

		/* The font alone cannot satisfy the 10px minimum against the HEADER.
		   That gap is set by `top`, not by the type size: shrinking the text
		   only opens the gap below it. With the shared
		   --supra-mobile-copy-top the header gap runs 13px at 681 down to
		   2px at 767, so it has to be re-anchored here.

		   Flat 40px, because with the font rule above the remaining free
		   space measures a near-constant ~22px from 681 to 750 (and 67px at
		   767, once the phrase clears the feather). 40px splits that ~50/50
		   and yields >=10px on BOTH sides across the whole band — measured
		   11/11 at 681, 11/11 at 700, 12/10 at 720, 11/11 at 740, 11/56 at
		   767.

		   Cost, stated plainly: at the 680/681 boundary the shared formula
		   evaluates to 43.3px, so the phrase steps 3.3px UP entering this
		   band. That is the price of holding the 10px floor: a `top` that
		   stayed continuous at 681 (43.3px) would leave only 8px against the
		   wing there, and 41px would leave 9px at 700. Nothing at 680px or
		   below changes. */
		top: 40px;
	}
}

/* The <=599px block that used to live here declared `margin-bottom: -80px` on
   .supra-hero-intro, meaning to shave extra space on narrow phones. It never
   had any effect: same dead-rule problem described in the <=767px block above
   (Elementor's .e-con margin-block-end wins on source order), confirmed by a
   computed value of 0px in the browser. Removed rather than revived — the
   <=767px rule now owns this single shift for the whole Mobile range with one
   value, and reviving a second, larger offset here would re-introduce exactly
   the "vários offsets compensatórios" this round asks to avoid. Removing it
   changes nothing visually, because it was already changing nothing. */
