/* ==========================================================================
   Wayvo "How it works" — [wayvo_how_it_works]

   Enqueued by shortcodes/wayvoHowItWorks.php, on pages that use the shortcode
   only.

   ── ON THE NUMBERS ──────────────────────────────────────────────────────────
   Built from the Figma export for "How it works 01", a 1440x800 frame. The four
   design PNGs are 2880x1600 — exactly 2x — so scale is 1.0 and the export's
   values go in literally.

   Every number in the export is a clean integer except the badge digit's
   13.7863px, which is a 16px style caught inside a 0.861645 scaled instance —
   the same artefact the featured brands card carried. Built at 14.

   ── --hiw-scale IS A LENGTH, AND THAT IS THE WHOLE POINT ────────────────────
   "How many rendered px per design px." The literals it multiplies are
   therefore UNITLESS Figma measurements: calc(325 * var(--hiw-scale)), not
   calc(325px * ...). Same convention as customHeader.css.

   WHY, AND IT IS THE ROOT OF EVERY SCALE PROBLEM THIS PROJECT HAS HAD:
   a Figma frame is exactly ONE width and a browser is every width. A fixed
   325px card is 22.6% of the 1440 frame but 27% of a 1200 container and 36% of
   a 900 one — the same CSS, a visibly different design. The first build of this
   section followed the export literally (the left column is `flex: none` at 325,
   the right `flex-grow: 1`), which is exactly right at 1440 and makes the cards
   read far too large at anything narrower. That is what Paul saw on the
   homepage.

   So the scale is derived from the CONTAINER rather than fixed:

       --hiw-scale: clamp(0.764px, calc(100cqw / 1440), 1.334px)

   100cqw is the container's own width, so at 1440 the scale is exactly 1px and
   every value is the design's, and at any other width the whole section keeps
   the design's proportions instead of only its absolute sizes.

   cqw and not vw: the section sits inside whatever the page gives it — an
   Elementor section, the OceanWP container — and the viewport is not that box.
   Measuring the wrong one is how a design ends up correct in isolation and
   wrong on the page.

   THE TWO LIMITS ARE DELIBERATE. The cap at 1.334 is 1920/1440: past that the
   section stops growing, because a 99px heading on an ultrawide monitor is not
   what anybody drew. The floor at 0.764 is 1100/1440, which is where the
   layout stacks anyway — below it the tiers set their own scale, since shrinking
   16px body copy proportionally would put it under 10px.

   --hiw-nudge is a plain multiplier on top, for "a bit smaller" without
   touching any of this. One number, as before.

   ── THE OPEN STEP IS AUTO-HEIGHT, NOT THE EXPORT'S 170 ──────────────────────
   The export reports 170 for the open card. That is not a fixed height; it is
   what a FOUR-LINE description comes to. Measured across all four PNGs:

       open height = 20 + 38 (title) + 4 (gap) + 22n (n body lines) + 20

       4 lines -> 170, list 464   (the export's own numbers)
       3 lines -> 148, list 442
       2 lines -> 126, list 420

   and the list's bottom edge is 760 in every one of them — 800 less the 40
   padding. So the column is bottom-anchored and the open step grows upward.
   Building to a fixed 170 would have clipped three steps out of four.

   The reveal therefore animates grid-template-rows 0fr -> 1fr rather than a
   height, which is the only way to transition to a content-driven height
   without measuring anything in JS.
   ========================================================================== */

/* The section cannot be its own container query container, so the scale is read
   from this wrapper. Everything else lives on .wayvo-hiw. */
.wayvo-hiw-wrap {
	container-type: inline-size;
	width: 100%;
}

.wayvo-hiw {
	/* Rendered px per design px. See the note at the top before changing it. */
	--hiw-nudge: 1;
	/* --wv-cw, not 100cqw (2026-10-21): the scale stops at 1 once the
	   container passes the content width, so the content row tops out at the
	   design's 1360 + 40 padding = 1440. The grey still bleeds (below). */
	--hiw-scale: calc(clamp(0.764px, calc(var(--wv-cw, 100cqw) / 1440), 1.334px) * var(--hiw-nudge));

	/* Palette. The ground is the same #F5F5F5 the gift card page uses. */
	--hiw-ground: #f5f5f5;
	--hiw-surface: #ffffff;
	--hiw-ink: #101011;
	--hiw-ink-soft: #8d8b8b;
	--hiw-badge-idle: #e5e5e5;

	/* Overridden per step by an inline custom property on each button, so one
	   declaration feeds the badge fill and anything else that needs the step's
	   colour. Falls back to the idle grey, which makes a step with no colour
	   degrade to "looks closed" rather than to a colour nobody chose. */
	--hiw-step-color: var(--hiw-badge-idle);

	/* The section's vertical padding, as a token because the Discover column has
	   to cancel exactly this much to reach the section's edges. Two places
	   needing the same number is precisely how they end up disagreeing. */
	--hiw-pad: calc(40 * var(--hiw-scale));

	position: relative;               /* the CTA is positioned against this */
	box-sizing: border-box;
	display: flex;
	flex-direction: row;
	align-items: flex-end;
	gap: calc(40 * var(--hiw-scale));

	width: 100%;
	min-height: calc(800 * var(--hiw-scale));

	/* FULL WIDTH, ALWAYS. The section used to carry
	   max-width: calc(1440 * var(--hiw-scale)) with auto margins, which left
	   bare page either side of the grey once the scale hit its cap. The grey is
	   the section, so it fills; what gets capped is the CONTENT ROW, and the
	   padding is what does the capping.

	   The plain padding is declared first as the fallback: 100cqw is invalid
	   without container query support, which would otherwise take the whole
	   declaration with it and leave the section with no padding at all. */
	padding: var(--hiw-pad);

	/* Below the cap this is EXACTLY equal to 40 * scale — (cqw - 0.9444cqw)/2
	   and 40 * cqw/1440 are the same number — so the two agree continuously and
	   this only starts doing anything once the scale stops growing. Past that
	   the extra width becomes margin and the content row stays 1360 * scale,
	   which is the design's content row. */
	padding-inline: calc((100cqw - 1360 * var(--hiw-scale)) / 2);

	background-color: var(--hiw-ground);

	/* ── THE GREY BLEEDS TO THE PAGE EDGES, THE CONTENT DOES NOT ──────────────
	   The section fills its container, but the container is the boxed one the
	   page gives it — 1180 on the homepage against a 1440 viewport — so the grey
	   stopped short with bare page either side. What is wanted is the BAND full
	   width and everything inside it exactly where it already is.

	   So this paints, and does not lay out. The shadow has no blur and no
	   offset: it is 100vmax of solid --hiw-ground spread evenly around the
	   border box, and the clip-path then cuts it back flush top and bottom while
	   leaving the sideways spread alone. Net result is a full-width band exactly
	   as tall as the section.

	   WHY NOT THE USUAL TRICKS. A `width: 100vw` pseudo-element is the common
	   answer and it is wrong here twice: 100vw INCLUDES the scrollbar, so it
	   overhangs by ~15px and gives the whole page a horizontal scrollbar, and it
	   needs `z-index: -1`, which escapes this element — .wayvo-hiw is
	   position:relative with z-index auto and so creates no stacking context —
	   and can land behind an Elementor ancestor's own background, where it is
	   invisible. A box-shadow is part of this element's own painting: it cannot
	   be covered by the content, cannot escape upwards, and contributes nothing
	   to the scrollable overflow area, so no scrollbar.

	   WIDENING THE WRAPPER IS NOT AN OPTION, and this is the real constraint.
	   .wayvo-hiw-wrap is the container query container every number in this file
	   is measured from. Stretching it to the viewport would take 100cqw from
	   1180 to 1440 and rescale the ENTIRE section by 22% — the thing asked for
	   was a wider background, not a bigger component.

	   Safe to clip at the border box because both Discover bleeds stop exactly
	   flush with it — the desktop column is 100% + 2 * pad tall against a
	   -1 * pad margin, which is the section's height precisely, and the mobile
	   one bleeds sideways, where the clip is open to 100vmax anyway. */
	box-shadow: 0 0 0 100vmax var(--hiw-ground);
	clip-path: inset(0 -100vmax);

	font-family: 'Geist', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
	color: var(--hiw-ink);
}

.wayvo-hiw *,
.wayvo-hiw *::before,
.wayvo-hiw *::after {
	box-sizing: border-box;
}

/* --------------------------------------------------------------------------
   Left column — Frame 545
   -------------------------------------------------------------------------- */

/* space-between over the fixed 720 puts the heading at the top and the steps at
   the bottom. That bottom anchoring is the mechanism, not a side effect: the
   open step grows UPWARD, so the list's last card never moves. */
.wayvo-hiw__col {
	flex: 0 0 calc(325 * var(--hiw-scale));
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	align-items: flex-start;
	gap: calc(40 * var(--hiw-scale));
	align-self: stretch;
	min-height: calc(720 * var(--hiw-scale));
}

/* THE HEADING IS WIDER THAN ITS COLUMN, and that is what the design does: the
   column is 325 and the H2's own box is 536. It overflows to the right, where
   the right column's content is centred in 995 and never reaches it. Not
   clipped, and deliberately not forced to wrap inside 325 — at 56px that would
   break it into five or six lines. */
.wayvo-hiw__heading {
	flex: none;
	width: calc(536 * var(--hiw-scale));
	max-width: none;
	margin: 0;
	font-size: calc(56 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1;
	letter-spacing: -0.02em;
	color: var(--hiw-ink);
}

/* Two-tone in the design: the first clause muted, the rest ink. */
.wayvo-hiw__heading-muted {
	color: var(--hiw-ink-soft);
}

/* --------------------------------------------------------------------------
   Steps — Frame 549
   -------------------------------------------------------------------------- */

.wayvo-hiw__steps {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	gap: calc(20 * var(--hiw-scale));
	width: 100%;
}

/* A real <button>: the section is a tablist, so hovering is not the only way
   in. Every button default is reset here, because TWO vendors paint every
   <button> on the site: OceanWP's customizer (`body button`, 0,1,1) and
   Elementor's Site Settings -> Buttons (`.elementor-kit-N button`, 0,1,1, in a
   sheet that loads after this one). One class is 0,1,0 and loses every
   property either sets — which is how all four cards went solid black when the
   kit's buttons were set. So the class is DOUBLED (0,2,0), the convention
   tokens.css uses, and everything a kit can set is declared here: the
   type properties too, because the spans inside inherit family, transform and
   shadow from this element. */
.wayvo-hiw__step.wayvo-hiw__step {
	display: flex;
	flex-direction: row;
	align-items: flex-start;
	gap: calc(16 * var(--hiw-scale));
	width: 100%;
	min-height: 0;
	padding: calc(20 * var(--hiw-scale));
	margin: 0;
	border: 0;
	border-radius: calc(8 * var(--hiw-scale));
	background-color: var(--hiw-surface);
	background-image: none;
	box-shadow: none;
	text-align: left;
	cursor: pointer;
	font-family: inherit;
	font-style: normal;
	text-transform: none;
	text-decoration: none;
	text-shadow: none;
	color: inherit;
	transition: background-color 0.2s ease;
}

/* THE CARD DOES NOT CHANGE COLOUR ON HOVER, and saying so explicitly is the
   point of this rule. Both vendors above also paint `button:hover` and
   (Elementor) `button:focus` at 0,2,1, so the resting colour is restated for
   every interactive state at 0,3,0.

   :active as well as :hover — a mousedown on the card would otherwise flash the
   kit's colour for as long as the button is held. */
.wayvo-hiw__step.wayvo-hiw__step:hover,
.wayvo-hiw__step.wayvo-hiw__step:focus,
.wayvo-hiw__step.wayvo-hiw__step:active {
	background-color: var(--hiw-surface);
	background-image: none;
	color: inherit;
	border-color: transparent;
	box-shadow: none;
}

.wayvo-hiw__step:focus-visible {
	outline: 2px solid var(--hiw-ink);
	outline-offset: 3px;
}

/* ── The number badge ─────────────────────────────────────────────────────
   32x32 round. Idle grey, and the step's own colour when open. flex: none or
   it squashes as the description makes the row taller. */
.wayvo-hiw__badge {
	flex: none;
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(32 * var(--hiw-scale));
	height: calc(32 * var(--hiw-scale));
	border-radius: 9999px;
	background-color: var(--hiw-badge-idle);

	/* Export says 13.7863 — a 16px style inside a scaled instance. */
	font-size: calc(14 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1.4;
	letter-spacing: -0.02em;
	/* Tabular, lining figures: the export asks for both, and it keeps the four
	   digits optically identical in their circles. */
	font-feature-settings: 'tnum' on, 'lnum' on;
	font-variant-numeric: tabular-nums lining-nums;
	color: var(--hiw-ink-soft);

	transition: background-color 0.2s ease, color 0.2s ease;
}

.wayvo-hiw__step.is-open .wayvo-hiw__badge {
	background-color: var(--hiw-step-color);
	color: var(--hiw-ink);
}

/* ── Title and description — Frame 693 ───────────────────────────────────── */

.wayvo-hiw__step-body {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: center;
	gap: calc(4 * var(--hiw-scale));
	flex: 1 1 auto;
	min-width: 0;
}

/* The open step's title goes from muted to ink. It does NOT change weight —
   the export gives both states 500, and the design's apparent "bolder" is this
   colour shift. Changing the weight as well would reflow the text on hover. */
.wayvo-hiw__step-title {
	font-size: calc(32 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1.2;
	letter-spacing: -0.02em;
	color: var(--hiw-ink-soft);
	transition: color 0.2s ease;
}

.wayvo-hiw__step.is-open .wayvo-hiw__step-title {
	color: var(--hiw-ink);
}

/* THE REVEAL. A 0fr grid track collapses to nothing and animates to its content
   height at 1fr — the one way to transition to an auto height without
   measuring it in JS. The child needs `overflow: hidden` or its text spills out
   of the collapsed track instead of being clipped by it. */
.wayvo-hiw__step-reveal {
	display: grid;
	grid-template-rows: 0fr;
	width: 100%;
	transition: grid-template-rows 0.25s ease;
}

.wayvo-hiw__step.is-open .wayvo-hiw__step-reveal {
	grid-template-rows: 1fr;
}

.wayvo-hiw__step-text {
	overflow: hidden;
	min-height: 0;
	font-size: calc(16 * var(--hiw-scale));
	font-weight: 400;
	line-height: 1.4;
	letter-spacing: -0.01em;
	color: var(--hiw-ink-soft);
	/* Fades slightly behind the height, so a closed step is not briefly showing
	   a sliver of legible text mid-transition. */
	opacity: 0;
	transition: opacity 0.2s ease;
}

.wayvo-hiw__step.is-open .wayvo-hiw__step-text {
	opacity: 1;
	/* The 4px gap above only applies once there is something to separate. */
	padding-top: calc(4 * var(--hiw-scale));
}

/* --------------------------------------------------------------------------
   Right column — Frame 546
   -------------------------------------------------------------------------- */

/* The panels are stacked on one grid cell rather than positioned absolutely, so
   only one is visible at a time and nothing has to be measured.

   ── A FIXED HEIGHT, NOT A MINIMUM, AND THAT IS THE WHOLE FIX ────────────────
   This was min-height, which is a floor the content can push past. The artwork
   is 1780x2337 and 3244x1948, so whichever panel was tallest set the row height
   and the section grew to suit it.

   Worse, the attempt before this one bounded the image with max-height: 100%.
   A percentage height resolves against the parent's height — and the parent's
   height was coming from this same content, so it was indefinite and the
   percentage computed to `none`. The image took its full intrinsic 2337px and
   made the entire section enormous. The panel sized from the image while the
   image sized from the panel.

   A definite height breaks the loop in one line: the box is known before
   anything inside it is laid out, so every percentage below resolves, and the
   artwork is fitted INTO the box rather than the box being grown to suit the
   artwork. */
.wayvo-hiw__panels {
	/* ── flex-basis 0, NOT auto ───────────────────────────────────────────────
	   With `auto` the basis comes from the CONTENT, and during intrinsic sizing
	   a percentage width counts as auto — so the image contributed its full
	   intrinsic 1780px and this column was sized BY THE ARTWORK, then shrunk
	   back by the flex algorithm. It only landed on the right number when the
	   shrink arithmetic happened to work out, and overflowed the section when it
	   did not.

	   With basis 0 the column is the free space and nothing else: the section's
	   content row, less the fixed left column, less the gap. The artwork's own
	   dimensions play no part in the layout at all, which is the property that
	   makes the rest of this predictable. */
	flex: 1 1 0;
	min-width: 0;

	display: grid;
	height: calc(720 * var(--hiw-scale));
}

/* Fills the grid cell — the default stretch does it, so the panel inherits the
   definite height above and every percentage inside resolves. */
/* Grid rather than flex. The image was a FLEX ITEM, which meant the flex
   algorithm could resize it independently of the width and height set on it —
   default flex-shrink is 1, and a flex item's automatic minimum is its content
   size. A centred grid cell has neither behaviour: the child is laid out at
   exactly the size it asks for. */
.wayvo-hiw__panel {
	grid-area: 1 / 1;
	display: grid;
	/* ONE CELL AT THE FULL SIZE OF THE PANEL. `place-items: center` alone leaves
	   the row CONTENT-sized, which makes the child's height: 100% indefinite and
	   reintroduces the same circularity one level down — the cell sizing from
	   the image while the image sizes from the cell. Stating the track sizes
	   makes the cell definite before the image is laid out. */
	grid-template: 100% / 100%;
	place-items: center;
	min-width: 0;
	min-height: 0;
	opacity: 0;
	transition: opacity 0.25s ease;
	pointer-events: none;
}

.wayvo-hiw__panel.is-open {
	opacity: 1;
	pointer-events: auto;
}

/* The artwork is not one shape — panel 1 is landscape 3244x1948 and panel 3
   portrait 1780x2337 — and this is exactly what object-fit exists for.

   OBJECT-FIT ONLY DOES ANYTHING WHEN THE BOX IS FORCED TO A SIZE. With
   width: auto / height: auto it is inert, which is what it was before: the
   declaration was present and doing nothing while the image sized itself from
   its own intrinsic dimensions and overflowed.

   So the box is given a size — the panel, times the step's media scale — and
   `contain` fits the picture inside it at its own aspect ratio, letterboxing
   whichever axis is short. A portrait image and a landscape one both sit inside
   the same box without either knowing which it is, and neither can crop or
   overflow, because the box never changes size to suit them. */
/* ── THE SELECTOR IS LONG ON PURPOSE. DO NOT SHORTEN IT. ────────────────────
   Elementor ships `.elementor img { height: auto }` — one class and one element,
   (0,1,1). The obvious `.wayvo-hiw__media` is (0,1,0) and LOSES to it, so the
   height declared below was discarded while width, max-* and object-fit all
   applied normally. The image then took its height from its own aspect ratio:
   the landscape one came out short, and the portrait one ran past the bottom of
   the panel. That is the crop.

   Diagnosed on the live page, not from this repo — Elementor's stylesheet is
   cross-origin and cannot be read from script, so the competing rule was found
   by trialling selectors until one won. No !important is involved: (0,1,1) is
   enough, and this is (0,2,1) for margin.

   Same shape as the gift card page's sticky bug: a PER-PROPERTY loss, where the
   rule looks present and correct because the properties that did apply are the
   ones you happen to check. */
.wayvo-hiw__panel img.wayvo-hiw__media {
	display: block;
	width: calc(100% * var(--hiw-media-scale, 1));
	height: calc(100% * var(--hiw-media-scale, 1));
	/* Belt and braces. The width and height above are already at most 100%, so
	   these never bite — but if anything ever makes the media scale exceed 1 the
	   image is capped by the panel rather than escaping it. */
	max-width: 100%;
	max-height: 100%;

	object-fit: contain;
	/* Centres the letterboxing rather than pinning the picture to one edge. */
	object-position: center center;
}

/* KEEP THE ARTWORK OUT OF THE BUTTON'S CORNER (Paul, 2026-10-20). On wider
   screens a near-square picture (the welcome design's Register artwork) is
   limited by the panel's HEIGHT, so at 0.92 it ran down into the bottom-right
   corner and its gift card sat on top of the button. Capping the height at
   the panel less two button rows (46 + 10 clear, top and bottom, as the box
   is centred) keeps it clear. Only height-limited artwork shrinks: anything
   already limited by width, or already this short (Choose at 0.80), is
   untouched — checked on the live page at a 1081-wide section. Desktop only;
   the phone layout places the button below the panel. */
@media (min-width: 901px) {

	.wayvo-hiw__panel img.wayvo-hiw__media {
		max-height: calc(100% - 112 * var(--hiw-scale));
	}
}

/* ── Placeholder, until the artwork exists ────────────────────────────────
   Sized to the 771x447 group the export gives for panel 1. Carries the step's
   own colour so it is obvious at a glance which panel is showing. */
.wayvo-hiw__placeholder {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: calc(8 * var(--hiw-scale));

	width: calc(771 * var(--hiw-scale));
	max-width: 100%;
	aspect-ratio: 771 / 447;

	border-radius: calc(20 * var(--hiw-scale));
	/* The step colour at low opacity, over white, without needing a second
	   token per step. */
	background-color: var(--hiw-step-color);
	box-shadow: inset 0 0 0 1px rgba(16, 16, 17, 0.06);
}

.wayvo-hiw__placeholder-label {
	font-size: calc(48 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1;
	letter-spacing: -0.02em;
	color: var(--hiw-ink);
}

.wayvo-hiw__placeholder-note {
	font-size: calc(16 * var(--hiw-scale));
	font-weight: 400;
	letter-spacing: -0.01em;
	color: rgba(16, 16, 17, 0.55);
}


/* --------------------------------------------------------------------------
   Testimonial card — Figma frame 2341292, panel 4

   BUILT RATHER THAN EXPORTED. Everything here is real text: selectable,
   translatable, searchable, and legible to a screen reader. A PNG of a quote is
   none of those, and it also has to be re-exported every time a word changes.

   ── ON THE NUMBERS ──────────────────────────────────────────────────────────
   673.32 x 400 closes exactly: 20 padding + 269.32 photo + 40 gap + 324 text
   + 20 padding. Scale is 1.0, as with the rest of the section; the only long
   decimals are the familiar 0.861645 artefacts — 13.7863 is a 16px style caught
   in a scaled instance (built at 14) and 34.4659 just means "fully round".

   The text column is space-between over 360 with 40/0/40/20 padding. Its three
   children come to 20 + 204 + 23 = 247 in a 280 content box, so the export's
   `gap: 40` cannot also hold — 247 + 80 would overflow. space-between wins and
   distributes the 33px that are actually spare, which is what the design shows:
   stars pinned to the top, tags to the bottom edge.

   SUPERSEDED 2026-10-15: a longer quote broke that, so the three now sit as
   one centred block with fixed 16 gaps, and the card's height is a floor.
   See .wayvo-hiw-quote__body.
   -------------------------------------------------------------------------- */

.wayvo-hiw-quote {
	display: flex;
	flex-direction: row;
	align-items: flex-start;
	gap: calc(40 * var(--hiw-scale));

	width: calc(673.32 * var(--hiw-scale));
	max-width: 100%;
	/* A FLOOR, not a fixed height (2026-10-15). With the design's short quote
	   the card is exactly 400; a longer one used to push the tags out of the
	   bottom of a fixed box. Now the card grows just enough to hold it, and
	   the photo stretches with it. The panel is 720 tall, so there is room. */
	min-height: calc(400 * var(--hiw-scale));

	margin: 0;
	padding: calc(20 * var(--hiw-scale));
	background-color: var(--hiw-surface);
	border-radius: calc(16 * var(--hiw-scale));
}

/* 269.32 x 360 — a 0.748 portrait. flex: none or the photo gives up width to
   the text column as the quote wraps. */
.wayvo-hiw-quote__photo {
	flex: none;
	align-self: stretch;
	width: calc(269.32 * var(--hiw-scale));
	border-radius: calc(8 * var(--hiw-scale));
	overflow: hidden;
	/* Shows through until a photo is supplied, at the design's exact
	   proportions so the card holds its shape either way. */
	background-color: var(--hiw-badge-idle);
}

/* Same specificity lesson as the panel media: Elementor's `.elementor img`
   is (0,1,1) and beats a single class, so `height` would be discarded and the
   photo would size itself from its own aspect ratio. */
.wayvo-hiw-quote__photo img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center center;
}

/* STARS, QUOTE AND TAGS ARE ONE BLOCK, CENTRED (Paul, 2026-10-15). They used
   to be space-between — stars pinned top, tags pinned bottom — which only
   looked right while the quote happened to leave ~16px for each gap. With a
   longer quote the gaps collapsed to nothing. Now the gaps are fixed at 16
   (what the original quote rendered at) and the spare height goes equally
   above and below the block. */
.wayvo-hiw-quote__body {
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: flex-start;
	flex: 1 1 auto;
	min-width: 0;
	align-self: stretch;
	/* The block is centred, so this is only the minimum clearance from the
	   card's edge — the visible space above and below is equal either way. */
	padding: calc(20 * var(--hiw-scale)) calc(20 * var(--hiw-scale)) calc(20 * var(--hiw-scale)) 0;
	gap: calc(16 * var(--hiw-scale));
}

/* Five 20px stars with a 2px gap = 108, which is the export's width. */
.wayvo-hiw-quote__stars {
	display: flex;
	flex-direction: row;
	align-items: center;
	gap: calc(2 * var(--hiw-scale));
	flex: none;
}

.wayvo-hiw-quote__star {
	display: block;
	width: calc(20 * var(--hiw-scale));
	height: calc(20 * var(--hiw-scale));
	fill: var(--hiw-ink);
}

/* ── RESETTING OceanWP's BARE `blockquote` ──────────────────────────────────
   style.css:1793 gives every blockquote on the site:

       font-style: italic;  margin: 20px 40px;  padding-left: 20px;
       border-left-width: 3px;  border-style: solid;
       border-left-color: var(--owp-primary-color)

   None of which the design has. Note `border-style: solid` is on ALL FOUR
   sides, and the initial border-width is `medium` — so it is a full 3px box,
   not just the coloured left edge that is easy to spot. The other three take
   currentColor, which is the ink, so they are dark on white and read as a
   frame. `border: 0` rather than `border-left: 0` for that reason.

   A plain class is enough: this is (0,1,0) against a bare element's (0,0,1).
   No !important, and no need for the longer selector the panel media needed —
   that one was up against Elementor's `.elementor img`, which is (0,1,1). */
.wayvo-hiw-quote__text {
	flex: none;
	margin: 0;
	padding: 0;
	border: 0;
	font-style: normal;

	/* The quote and the name are one block with a 16 gap between them. */
	display: flex;
	flex-direction: column;
	gap: calc(16 * var(--hiw-scale));
}

.wayvo-hiw-quote__text p {
	margin: 0;
	font-size: calc(20 * var(--hiw-scale));
	font-weight: 400;
	line-height: 1.4;
	letter-spacing: -0.01em;
	color: var(--hiw-ink);
}

.wayvo-hiw-quote__name {
	font-size: calc(14 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1.4;
	letter-spacing: -0.01em;
	color: var(--hiw-ink-soft);
}

.wayvo-hiw-quote__tags {
	display: flex;
	flex-direction: row;
	align-items: flex-start;
	gap: calc(8 * var(--hiw-scale));
	flex: none;
}

/* Each tag carries its own two colours inline, so a new one needs no CSS. */
.wayvo-hiw-quote__tag {
	display: inline-flex;
	align-items: center;
	padding: calc(2 * var(--hiw-scale)) calc(8 * var(--hiw-scale));
	/* The export's 34.4659 radius is the 0.861645 artefact again; it only ever
	   meant "fully round". */
	border-radius: 9999px;
	background-color: var(--tag-bg, var(--hiw-ink));

	/* Export says 13.7863 — a 16px style inside a scaled instance. */
	font-size: calc(14 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1.4;
	letter-spacing: -0.02em;
	font-feature-settings: 'tnum' on, 'lnum' on;
	font-variant-numeric: tabular-nums lining-nums;
	white-space: nowrap;
	color: var(--tag-fg, var(--hiw-surface));
}


/* --------------------------------------------------------------------------
   Discover column — panel 2

   An adaptation of the frogger grid to ONE column, and deliberately NOT its
   linear drift. Measured off wayvo-how-it-works-2-2.mp4 by sampling frames and
   cross-correlating them, because "less linear" is a motion property and no
   still shows it:

       period      exactly 3.00s, repeating
       ~0.25s      still
       ~0.75s      fast movement
       ~0.50s      hard ease-out
       ~1.75s      DEAD HOLD

   So it steps one card and waits, rather than drifting. The live timing has
   since moved to Paul's Arqe template (1.6s move, no hold) — timings live in
   the JS, where the current numbers are; the CSS owns only the geometry.

   Card geometry measured off "How it works 02.png" (2880x1600 = 2x):
   column 286 wide, cards 316 tall, 23 between them — a 339 pitch, which is one
   step. The column is TALLER than the panel and bleeds off both edges, which is
   what the design shows.
   -------------------------------------------------------------------------- */

.wayvo-hiw-column {
	--hiw-card-w: calc(286 * var(--hiw-scale));
	--hiw-card-h: calc(316 * var(--hiw-scale));
	--hiw-card-gap: calc(23 * var(--hiw-scale));

	position: relative;
	width: var(--hiw-card-w);

	/* ── FULL SECTION HEIGHT, EDGE TO EDGE ──────────────────────────────────
	   The column runs the whole height of the section rather than sitting
	   inside the panel, so the cards are cut by the section's own top and
	   bottom edges — which is what the design shows.

	   The panel is the section's height LESS both paddings, so adding them back
	   and cancelling them with an equal negative margin puts the column exactly
	   edge to edge. Both halves read --hiw-pad, so they cannot drift; a literal
	   40 in one of them would leave a silent sliver of ground.

	   Nothing between here and the section clips, which is what lets this
	   overflow the panel rather than be cut by it.

	   The focused card stays centred, so the neighbours now show ~69% each
	   rather than the 50% the shorter window gave. That is what "full height"
	   costs: the window grew and the card did not. */
	height: calc(100% + 2 * var(--hiw-pad));
	margin-block: calc(-1 * var(--hiw-pad));

	/* The clip is the whole point: the neighbours are cut by this edge. */
	overflow: hidden;
}

.wayvo-hiw-column__track {
	display: flex;
	flex-direction: column;
	gap: var(--hiw-card-gap);
	position: absolute;
	left: 0;
	width: 100%;
	will-change: transform;

	/* CENTRING LIVES HERE, NOT IN THE JS. The track is offset once so that the
	   card at translate 0 sits in the middle of the window; the script then only
	   ever translates by whole pitches. Two jobs, two owners — and the script
	   never has to know the window's height. */
	top: calc((100% - var(--hiw-card-h)) / 2);
}

.wayvo-hiw-brand {
	position: relative;
	flex: none;
	width: 100%;
	height: var(--hiw-card-h);
	border-radius: calc(16 * var(--hiw-scale));
	overflow: hidden;
	background-color: var(--hiw-badge-idle);
}

/* Names the element, clearing Elementor's `.elementor img` at (0,1,1) — the
   same fight the panel media lost, where `height` was silently discarded and
   the image sized itself from its own aspect ratio. */
.wayvo-hiw-brand img.wayvo-hiw-brand__image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center center;
}

/* A scrim so a white name stays legible over a light photo. Behind the text,
   in front of the image. */
.wayvo-hiw-brand::after {
	content: '';
	position: absolute;
	inset: 50% 0 0;
	background: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.55));
	pointer-events: none;
}

.wayvo-hiw-brand__pill {
	position: absolute;
	top: calc(12 * var(--hiw-scale));
	left: calc(12 * var(--hiw-scale));
	z-index: 1;

	display: inline-flex;
	align-items: center;
	padding: calc(2 * var(--hiw-scale)) calc(10 * var(--hiw-scale));
	border-radius: 9999px;
	background-color: var(--pill-bg, var(--hiw-badge-idle));

	font-size: calc(14 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1.4;
	letter-spacing: -0.01em;
	white-space: nowrap;
	/* Ink on every category colour, as on the featured brands card: near-black
	   clears 4.5:1 against all twelve, where the registry's own `on` would fail
	   on eight of them. */
	color: var(--hiw-ink);
}

.wayvo-hiw-brand__name {
	position: absolute;
	left: calc(16 * var(--hiw-scale));
	right: calc(16 * var(--hiw-scale));
	bottom: calc(14 * var(--hiw-scale));
	z-index: 1;

	font-size: calc(28 * var(--hiw-scale));
	font-weight: 500;
	line-height: 1.1;
	letter-spacing: -0.02em;
	color: var(--hiw-surface);
}

/* No motion: show the column stationary rather than stepping. The cards are
   still the point; the movement is not. */
@media (prefers-reduced-motion: reduce) {
	.wayvo-hiw-column__track {
		transition: none !important;
	}
}

/* --------------------------------------------------------------------------
   CTA — bottom right of the padding box
   -------------------------------------------------------------------------- */

/* The button itself is the site system — `wv-btn wv-btn-primary` in the
   markup, styled by tokens.css: ink fill, inverts to an outline on hover, the
   pressed and disabled states, the font. This rule only PLACES it and opts it
   into the export's 46px tier, the same way giftCardProduct.css and the
   frogger grid do: by overriding the tokens on the element, not by restyling
   the button. The tier values are scaled like everything else in the section,
   so the button keeps shrinking with it below 1440 as it did before.

   The export positions it at left 1244 / top 714 in the 1440x800 frame, which
   is exactly the bottom-right corner inside the 40 padding: 1244 + 156 = 1400
   = 1440 - 40, and 714 + 46 = 760 = 800 - 40. Expressed as an offset from those
   two edges rather than as those coordinates, so it stays put at any width. */
.wayvo-hiw__cta {
	--wv-btn-pad-y: calc(15 * var(--hiw-scale));
	--wv-btn-pad-x: calc(20 * var(--hiw-scale));
	--wv-btn-min-h: calc(46 * var(--hiw-scale));
	--wv-btn-size: calc(16 * var(--hiw-scale));

	position: absolute;
	right: calc(40 * var(--hiw-scale));
	/* The content row's right edge, which is 40 * scale up to the content
	   width and moves in with padding-inline past it. Plain value first for
	   the same no-container-query reason as the section's padding. */
	right: calc((100cqw - 1360 * var(--hiw-scale)) / 2);
	bottom: calc(40 * var(--hiw-scale));
}

.wayvo-hiw__cta:focus-visible {
	outline: 2px solid var(--hiw-ink);
	outline-offset: 3px;
}

/* Container queries are Chrome 105 / Safari 16 / Firefox 110, so this is only
   for something genuinely old. Falls back to the design's own size, which is
   the behaviour the first build had — correct at 1440, large below it. Better
   than 0, which is what an unsupported cqw would compute to. */
@supports not (container-type: inline-size) {
	.wayvo-hiw {
		--hiw-scale: 1px;
	}
}

/* --------------------------------------------------------------------------
   TABLET — a scaled-down laptop, not a different layout

   The two-column layout is kept all the way down to the mobile breakpoint and
   simply shrinks with the container, which is what Paul asked for. The scale
   is already container-derived, so this tier needs no rules of its own beyond
   moving the floor: the stacking used to happen at 1100, and now does not.

   THE TRADE-OFF, STATED RATHER THAN HIDDEN: at the 900 breakpoint the scale is
   0.625, which puts the 16px body copy at 10px. That is small. It is the
   arithmetic consequence of "scale the laptop down" — the layout needs 1440
   design px of room and a 900 container is 62% of that. If it reads too small
   on a real tablet, the lever is MOVE_THIS_BREAKPOINT up (so tablets get the
   mobile layout sooner), not a separate tablet design.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   MOBILE — "How it works mobile.png", a 400px frame

   A genuine re-layout, not a stack of the desktop:
     - the heading is CENTRED, and the panel sits ABOVE the steps
     - the CTA is centred at the bottom rather than pinned bottom-right
     - the Discover column runs HORIZONTALLY

   ── ON THE NUMBERS ──────────────────────────────────────────────────────────
   Measured off the 800x1784 export (= 400x892 at 2x). Two independent signals
   agree on the scale:

       heading line pitch  38.5 / 56 = 0.688
       number badge        22   / 32 = 0.688

   so --hiw-scale is 0.688 at a 400px container, and proportional either side of
   that. THREE THINGS ARE DELIBERATELY OFF THAT SCALE, measured from the design
   rather than derived:

       section padding   20  (0.688 would give 27.5)
       card padding      10  (0.688 would give 13.8)
       card gap          20  (0.688 would give 13.8 — the gap does NOT shrink)

   The card is then 10 + 22 + 10 = 42 exactly, which is what the design shows.
   -------------------------------------------------------------------------- */

@media (max-width: 900px) {

	.wayvo-hiw {
		/* 0.688 at the design's 400px frame, proportional either side, clamped
		   so a very narrow or very wide phone does not run away with it. */
		--hiw-scale: calc(clamp(0.55px, 0.688 * 100cqw / 400, 0.82px) * var(--hiw-nudge));

		/* Off-scale, from the design. */
		--hiw-pad: 20px;

		flex-direction: column;
		align-items: center;
		min-height: 0;
		gap: calc(28 * var(--hiw-scale));

		padding: var(--hiw-pad);
		/* The desktop rule centres the content row inside a capped width; on
		   mobile the section IS the content row. */
		padding-inline: var(--hiw-pad);
		/* Top and bottom opened up from the design's 20 (Paul, 2026-10-23): the
		   heading sat tight under the section above's button, and the bottom
		   was as tight. Only the BLOCK padding — --hiw-pad stays 20 because the
		   panel's side bleed reads it. */
		padding-block: 60px;
	}

	/* THE PANEL GOES ABOVE THE STEPS. order rather than reordering the markup:
	   the DOM order is the reading order a screen reader follows, and the steps
	   are the content — the artwork illustrates them. */
	/* ── flex: none, AND IT IS NOT TIDYING ──────────────────────────────────
	   The desktop rule sets `flex: 1 1 0` on this, which is right there: the
	   section is a ROW, so basis 0 means "take the free width", and that is
	   exactly what stopped the column being sized by the artwork.

	   Here the section is a COLUMN, so the main axis is vertical and that same
	   basis 0 applies to the HEIGHT. With no free space to grow into, the panel
	   collapsed to ZERO — the explicit height below never got a look in, and
	   every panel rendered empty. One declaration, opposite meanings, decided
	   by a property on the parent.

	   Diagnosed in the browser: `flex: 1 1 0px` with `height: 0px` computed,
	   against a calc that probed perfectly correct on a test element. */
	.wayvo-hiw__panels {
		flex: none;
		order: 1;
		width: 100%;
		height: calc(360 * var(--hiw-scale));
		min-height: 0;
	}

	/* THE COLUMN'S BOX DISAPPEARS, its children do not.
	   Mobile order is heading, artwork, steps, CTA — but the heading and the
	   steps are both inside .wayvo-hiw__col, so with the column intact they can
	   only move together. `display: contents` drops the wrapper's box and
	   promotes its children to flex items of the section, which is what lets
	   the artwork sit BETWEEN them. No markup change, and the DOM order — which
	   is the reading order — is untouched. */
	.wayvo-hiw__col {
		display: contents;
	}

	/* Centred, and free of the 536px box it overflows its column with on
	   desktop. */
	.wayvo-hiw__heading {
		order: 0;
		width: 100%;
		text-align: center;
	}

	.wayvo-hiw__steps {
		order: 2;
		width: 100%;
		gap: 20px;              /* off-scale: the gap does not shrink */
	}

	.wayvo-hiw__step.wayvo-hiw__step {
		padding: 10px;          /* off-scale, from the design */
		gap: calc(12 * var(--hiw-scale));
		align-items: center;
	}

	/* The row is the badge's height, so the card comes to 10 + 22 + 10 = 42.
	   A 1.2 line-height on the title would make the row 26 and the card 46. */
	.wayvo-hiw__step-title {
		line-height: 1;
	}

	.wayvo-hiw__step.wayvo-hiw__step.is-open {
		align-items: flex-start;
	}

	/* Centred at the bottom, in the flow — absolutely positioned it would sit
	   on top of the stacked content. */
	.wayvo-hiw__cta {
		position: static;
		order: 3;
		align-self: center;
	}

	/* ── THE DISCOVER COLUMN TURNS SIDEWAYS ──────────────────────────────────
	   Same idea rotated: a focused card with its neighbours either side, moving
	   left. The direction is declared HERE and nowhere else — the script reads
	   the computed flex-direction and works out which axis to translate, so the
	   stylesheet stays the single owner of "which way does this go".

	   ── THE CARD IS A LENGTH, NOT A FRACTION OF THE WINDOW ───────────────────
	   This used to derive the card from the window — `(100% - 2*gap)/2`, i.e.
	   always exactly two across — with the height left to an aspect-ratio. That
	   is two bugs, and they are both the percentage's fault:

	   1. IT CROPPED TOP AND BOTTOM. The width came from the window's WIDTH,
	      which grows without limit, while the window's HEIGHT is 360 * scale and
	      scale is CLAMPED at 0.82px. Past roughly a 560 container the card was
	      taller than the box holding it: 22px over at 600, 188px over at 900,
	      where nearly 40% of the card was cut away. Anything that sizes one axis
	      from an unclamped measurement and the other from a clamped one comes
	      apart at the width where the clamp bites.

	   2. IT CENTRED OFF-CENTRE. A percentage in a custom property resolves at
	      the point of USE, and this one was used in two places with different
	      containing blocks — `left` below resolves against the COLUMN, while
	      `width` on the card resolves against the TRACK, which is absolutely
	      positioned at width:auto and therefore shrink-to-fit from its content.
	      So the offset that is supposed to centre the strip was computed from a
	      different number than the cards actually rendered at, and the leading
	      card showed a different sliver than the trailing one.

	   Both go away by not using a percentage. The card keeps the design's own
	   286x316 at the current scale — the same two tokens the desktop column
	   uses, only the gap is a mobile decision — so it is a real length in both
	   places and cannot resolve to two different values.

	   The count then falls out of the width instead of being pinned to two: the
	   card and the window scale together below the cap (so a narrow phone still
	   shows one card and two halves, as designed), and above it the card holds
	   still while the window grows, which shows MORE BRANDS rather than a bigger
	   cropped one. About 1.9 cards at a 400 container, 2.4 at 600, 3.6 at 900.

	   Nothing in the JS needed changing: pitch() measures a card plus a gap off
	   the DOM rather than recomputing it from the tokens, so the step follows
	   the new geometry on its own. */
	.wayvo-hiw-column {
		--hiw-card-gap: calc(16 * var(--hiw-scale));

		/* Bleeds to the section's left and right edges, as the vertical one
		   bleeds top and bottom. Both halves read --hiw-pad so they cannot
		   drift apart. */
		width: calc(100% + 2 * var(--hiw-pad));
		margin-inline: calc(-1 * var(--hiw-pad));
		height: 100%;
		margin-block: 0;
	}

	.wayvo-hiw-column__track {
		flex-direction: row;
		/* The vertical offset is not just unneeded here, it would push the row
		   down out of the window. */
		top: 0;
		/* Centres the card at translate 0 in the window, exactly as the desktop
		   `top` does. The 100% is the column and --hiw-card-w is now a plain
		   length, so this is the same arithmetic at every width — which is what
		   makes the sliver on the left equal the one on the right. */
		left: calc((100% - var(--hiw-card-w)) / 2);
		width: auto;
		height: 100%;
		/* The card is 316 in a 360 window, so it sits centred with a little air
		   above and below rather than being cut by either edge. */
		align-items: center;
	}

	/* The desktop rule says `width: 100%`, which is right there — the column IS
	   one card wide. Here the column is the full bleed and the track is
	   shrink-to-fit, so the card has to name its own width; 100% would either
	   swallow the whole strip or resolve circularly against an auto-width
	   parent. The HEIGHT deliberately is not restated: it comes from the base
	   rule's --hiw-card-h, which is the one place that number lives. */
	.wayvo-hiw-brand {
		width: var(--hiw-card-w);
	}

	/* ── THE TESTIMONIAL SCALES AS ONE PIECE ─────────────────────────────────
	   The card is 673 design px wide and the panel on a phone is ~350 real px,
	   so `max-width: 100%` used to cap the CARD while the photo (a fixed 269)
	   and the gaps stayed full size — every pixel lost came out of the text
	   column, which went to ~117px wide, wrapped the quote into a dozen lines
	   and pushed the tags out of the bottom.

	   So the card gets its own scale: the section's, or whatever makes 673
	   fit the panel, whichever is smaller. Everything in the card shrinks
	   together, so the quote wraps exactly as it does on desktop and fits for
	   the same reason. 100cqw is .wayvo-hiw-wrap, and the panel is that less
	   the section's padding either side.

	   Declared HERE and read on the card, rather than written as
	   `--hiw-scale: min(var(--hiw-scale), …)` on the card, because a custom
	   property that references itself is a cycle and computes to nothing. */
	.wayvo-hiw {
		/* Three limits, smallest wins:
		     1. the section's own scale — never bigger than the rest of it;
		     2. WIDTH — 673.32 design px across the panel;
		     3. HEIGHT — added 2026-10-15 after the width fit alone left the
		        card taller than the panel, so it spilled up over the heading
		        and down over step 1. The panel is 360 * scale tall. 480 is
		        the card's design height with the current quote (~445) plus
		        headroom, since the card grows with its text — a longer quote
		        needs this number raised. */
		--hiw-quote-fit: min(
			var(--hiw-scale),
			(100cqw - 2 * var(--hiw-pad)) / 673.32,
			var(--hiw-scale) * 360 / 480
		);
	}

	.wayvo-hiw-quote {
		--hiw-scale: var(--hiw-quote-fit);
	}

	/* ── SHOW MORE (Paul, 2026-10-25) ────────────────────────────────────────
	   The 15px phone floor (below) keeps the quote from shrinking with the
	   rest of the card, so the full quote no longer fits the panel and the
	   card spilled over the heading and step 1. js/wayvo-how-it-works.js
	   (fitQuote) now cuts the quote to as many lines as fit — it sets
	   -webkit-line-clamp inline and adds .is-clamped — and shows the button
	   only when it had to cut. Show more lifts the clamp and gives the panels
	   an inline height tall enough for the whole card, which pushes the steps
	   and the button down; picking another step takes both off again. */
	.wayvo-hiw__panels {
		transition: height 0.3s ease;
	}

	.wayvo-hiw-quote.is-clamped .wayvo-hiw-quote__text p {
		display: -webkit-box;
		-webkit-box-orient: vertical;
		overflow: hidden;
	}

	/* Two classes on purpose: OceanWP and the Elementor kit style every bare
	   `button` (fill, padding, radius, uppercase) at up to (0,1,2), and all of
	   that has to come off for a plain text link. */
	.wayvo-hiw-quote__text .wayvo-hiw-quote__more {
		display: inline-block;
		align-self: flex-start;
		/* Sits with the quote it opens, not a full gap away from it. */
		margin: calc(-8 * var(--hiw-scale)) 0 0;
		padding: 0;
		min-height: 0;
		border: 0;
		border-radius: 0;
		background: none;
		box-shadow: none;
		color: var(--hiw-ink);
		font-family: inherit;
		font-size: calc(14 * var(--hiw-scale));
		font-weight: 500;
		line-height: 1.4;
		letter-spacing: -0.01em;
		text-transform: none;
		text-decoration: underline;
		text-underline-offset: 0.2em;
		cursor: pointer;
	}

	.wayvo-hiw-quote__text .wayvo-hiw-quote__more:hover,
	.wayvo-hiw-quote__text .wayvo-hiw-quote__more:focus {
		background: none;
		color: var(--hiw-ink);
	}

	.wayvo-hiw-quote__text .wayvo-hiw-quote__more[hidden] {
		display: none;
	}

	/* A closed panel is only opacity 0 — still laid out, so still reachable
	   by Tab. visibility takes the button out of the focus order without
	   changing what fitQuote() measures. */
	.wayvo-hiw__panel:not(.is-open) .wayvo-hiw-quote__more {
		visibility: hidden;
	}
}

@media (prefers-reduced-motion: reduce) {

	.wayvo-hiw__step.wayvo-hiw__step,
	.wayvo-hiw__badge,
	.wayvo-hiw__step-title,
	.wayvo-hiw__step-reveal,
	.wayvo-hiw__step-text,
	.wayvo-hiw__panel,
	.wayvo-hiw__panels,
	.wayvo-hiw__cta {
		transition: none;
	}
}

/* ── Phones: no copy under 15px (Paul, 2026-10-21) ───────────────────────────
   The same size as the phone buttons (tokens.css). max() so anything already
   bigger keeps its size; same selectors as above, later, so they win. */
@media (max-width: 767px) {

	.wayvo-hiw__badge {
		font-size: max(15px, calc(14 * var(--hiw-scale)));
	}

	.wayvo-hiw__step-text {
		font-size: max(15px, calc(16 * var(--hiw-scale)));
	}

	.wayvo-hiw-quote__text p {
		font-size: max(15px, calc(20 * var(--hiw-scale)));
	}

	.wayvo-hiw-quote__name,
	.wayvo-hiw-quote__tag,
	.wayvo-hiw-quote__text .wayvo-hiw-quote__more {
		font-size: max(15px, calc(14 * var(--hiw-scale)));
	}

	.wayvo-hiw-brand__pill {
		font-size: max(15px, calc(14 * var(--hiw-scale)));
	}
}
