/* ==========================================================================
   בלבן — הדרכת כלות · דף הנחיתה

   Two Figma canvases, drawn at their intrinsic size and scaled to the window:
   desktop 1728 x 11808 (node 689:2), mobile 390 x 9444 (node 758:357).
   Every coordinate below is Figma's own; nothing here is eyeballed.

   This file starts as the machinery from the previous build — the canvas and
   stage system, the carousel, the accordion, the form shell, the lightbox — with
   every rule belonging to that design removed. What was kept is what does not
   know which design it is drawing.
   ========================================================================== */
/* ==========================================================================
   Submarine Max Pro — landing page
   Two independent Figma canvases (desktop 1728x15162, mobile 440x11658).
   Coordinates below are taken verbatim from Figma; nothing here is eyeballed.
   ========================================================================== */

/* ---------- Fonts (the exact families used in the design) ---------- */
/* ---------- Stage / canvas ---------------------------------------------
   The canvas is rendered at its intrinsic Figma size and scaled to the
   viewport. transform-origin is top-left because Figma coordinates are
   measured from the left edge even in an RTL design.
   --------------------------------------------------------------------- */
.bel-root {
	background: var( --bel-ground, #faf0e5 );   /* was #fff — see the note by --bel-ground */
	overflow-x: hidden;
	width: 100%;
}

/* Headings carry the page s outline for a screen reader and for Google, but
   the design decides how they look. Every heading here is an absolutely
   positioned node whose font is set by its own rule, so the UA defaults —
   margin, size, weight — would only move things. Reset them once, here, and
   promoting a <p> to an <h2> costs nothing visually. */
/* :where(), NOT :is(). This rule has to beat the browser's defaults for a
   heading and lose to every rule in this file that styles one. :is() takes
   the specificity of its argument, which made this (0,1,1) — higher than
   `.d-s9__title` at (0,1,0) — so promoting a <p> to an <h2> silently threw
   away that title's size, weight and colour and left it inheriting the
   theme's body text. Every one of the thirty headings on the page went that
   way at once. :where() contributes nothing, so a UA default loses to it and
   a design rule beats it. */
.bel-root :where( h1, h2, h3, h4, h5, h6 ) {
	margin: 0;
	font-size: inherit;
	font-weight: inherit;
	line-height: inherit;
	color: inherit;
}

/* The FAQ question is a button inside its own heading. The heading is only a
   landmark — the button keeps the whole width and all of the styling. */
.bel-faq__head { margin: 0; font: inherit; display: block; }

.bel-stage {
	position: relative;
	width: 100%;
	overflow: hidden;
	/* Height is set by JS to designH * scale, since a transform does not
	   contribute to layout. */
}

/* The canvas is anchored explicitly rather than left in flow: it is wider than
   its stage, and in an RTL context an over-wide box overflows to the LEFT, which
   would push the whole design off-screen. Its own direction is LTR because Figma
   coordinates are measured from the left edge in every design, RTL included —
   the text nodes carry their own dir="rtl". */
.bel-canvas {
	position: absolute;
	left: 0;
	top: 0;
	direction: ltr;
	transform-origin: top left;
	/* NO background. The canvas is exactly the design width and centred, so a
	   colour here stops at its edge and leaves a seam down each side of any
	   wider window — which is what Ariel saw. The page ground lives on
	   .bel-root instead, and the sections that carry a picture bleed past the
	   canvas with --bel-bleed. */
	/* Set by JS: transform: scale(n), and left, to centre it once the scale caps. */
}

/* Past the scale cap the canvas is narrower than the window, which would leave a
   white strip down each side wherever a section is not white. Only the full-bleed
   background bands need to cover them — everything between those bands is white in
   the design already — so those bands are widened by exactly the shortfall.
   --bel-bleed-x is 1 until the cap bites, which makes this rule a no-op below it. */
/* Scoped to .bel-stage purely for specificity: a bare .bel-bleed--c ties with the
   band's own .m-band-top rule, which is declared later in this file and therefore
   won its transform back — the two centred bands then sat inside the canvas and
   left a white strip down each side of the page at every width past the cap. */
.bel-stage .bel-bleed { transform: scaleX( var( --bel-bleed-x, 1 ) ); }
/* Bands that already carry a transform have to keep it; scaleX alone would drop
   the centring translate and shove the band half its width to the right. */
.bel-stage .bel-bleed--c { transform: translateX( -50% ) scaleX( var( --bel-bleed-x, 1 ) ); }

/* Only elements with NOTHING inside them may be tagged .bel-bleed. scaleX on a
   box that holds copy stretches the copy with it — tagging the hero <section>
   was the first attempt and it drew the headline 1.7x too wide on a tablet.
   The hero therefore gets two empty stand-ins behind it instead. The bar's
   second gradient layer is the seam fix: the first layer repaints the real
   1728/440px ramp over the middle, and the half-and-half underneath extends the
   ramp's own end colour into each gutter, so the join is invisible. */

/* The hero photo is anchored to the LEFT of the canvas and cannot be widened
   (it is masked, and the section clips it), so the left gutter meets the photo
   rather than the section colour. Sampled down the photo's own left edge it runs
   #2A2828…#301D1E…#291B1B, so the gutter carries #2c2122 instead of the flat
   #212121 and the join stops reading as an edge. The right gutter meets the flat
   colour and keeps it. */

.bel-stage--mobile { display: none; }

@media (max-width: 900px) {
	.bel-stage--desktop { display: none; }
	.bel-stage--mobile { display: block; }
}


/* Editor preview forces a single canvas regardless of viewport. */
.bel-root--force-desktop .bel-stage--desktop { display: block !important; }
.bel-root--force-desktop .bel-stage--mobile { display: none !important; }
.bel-root--force-mobile  .bel-stage--mobile { display: block !important; }
.bel-root--force-mobile  .bel-stage--desktop { display: none !important; }

/* ---------- Canvas reset -----------------------------------------------
   Every position in this file is an absolute Figma coordinate, so the browser's
   default margins must go: a <p> carries margin-block 1em and an <h1> 0.67em,
   which pushes each text node down by exactly its own font size and silently
   breaks every measurement. border-box keeps a bordered element (the glass pill)
   at its Figma width instead of growing by the border.
   --------------------------------------------------------------------- */
:is(.bel-canvas,.bel-hero-canvas) *,
:is(.bel-canvas,.bel-hero-canvas) *::before,
:is(.bel-canvas,.bel-hero-canvas) *::after {
	box-sizing: border-box;
}

:is(.bel-canvas,.bel-hero-canvas) p,
:is(.bel-canvas,.bel-hero-canvas) h1,
:is(.bel-canvas,.bel-hero-canvas) h2,
:is(.bel-canvas,.bel-hero-canvas) h3,
:is(.bel-canvas,.bel-hero-canvas) h4,
:is(.bel-canvas,.bel-hero-canvas) h5,
:is(.bel-canvas,.bel-hero-canvas) h6,
:is(.bel-canvas,.bel-hero-canvas) ul,
:is(.bel-canvas,.bel-hero-canvas) ol,
:is(.bel-canvas,.bel-hero-canvas) li,
:is(.bel-canvas,.bel-hero-canvas) figure,
:is(.bel-canvas,.bel-hero-canvas) blockquote {
	margin: 0;
	padding: 0;
	/* NB: do not neutralise font-weight here. A element+class selector outranks the
	   single-class rules below, so anything set in this block wins over the
	   per-node values taken from Figma. Weights are declared per element. */
}

/* Typographic baseline. These are set on the canvas itself (inherited, and easy
   for the per-node rules to override) purely to stop the active theme's own
   typography from leaking in — a stray letter-spacing changes where every line
   wraps, which is exactly the kind of drift this file exists to prevent. */
.bel-canvas {
	letter-spacing: normal;
	word-spacing: normal;
	font-style: normal;
	font-variant: normal;
	text-transform: none;
	text-decoration: none;
	text-indent: 0;
	font-kerning: auto;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}
:is(.bel-canvas,.bel-hero-canvas) * {
	letter-spacing: inherit;
	word-spacing: inherit;
}

/* ---------- Primitives used by the templates ---------- */
.bel-abs { position: absolute; }

:is(.bel-canvas,.bel-hero-canvas) img { display: block; max-width: none; }

/* Text nodes: Figma centres text inside a fixed-width box. */
.bel-txt {
	position: absolute;
	margin: 0;
	padding: 0;
	text-align: center;
	white-space: pre-wrap;
	word-break: break-word;
}

/* ==========================================================================
   DESKTOP — 1728 x 15162
   ========================================================================== */

/* --- Section 1: Hero (Figma 75:3, 1728x1182) --- */
/* The root frame is white; the hero is a dark block sitting on it (Figma 75:3). */

/* Top bar (75:18) */

/* Top bar text (75:16) — Gveret Levin 30px */

/* Masked background photo (82:93 / 75:8) */

/* Decorative glows (75:90 / 82:91) — exported SVGs carry their own blur */

/* Headline (75:19) — gradient-filled text */

/* Sub-headline (75:20) */

/* Product badge plate (75:27) — rotated -2deg */

/* Product badge text (75:25) */

/* Tagline (75:28) */

/* Device shot (75:30) */

/* Glass pill (75:31) */

/* Glass pill text (75:33) */

/* Body copy (75:35) */

/* ==========================================================================
   Forms (shared shell; each instance is positioned by its section rule)
   ========================================================================== */
.bel-form { margin: 0; }

.bel-hp {
	position: absolute !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	white-space: nowrap;
}

.bel-form-error {
	color: #ff383c;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-size: 16px;
	margin: 0 0 8px;
	text-align: center;
}

.bel-field input {
	width: 100%;
	height: 100%;
	box-sizing: border-box;
	background: transparent;
	border: 0;
	outline: 0;
	font-family: 'Tel Aviv Modernist', sans-serif;
	color: #fff;
	text-align: center;
}
.bel-field input::placeholder { color: rgba(255, 255, 255, 0.85); opacity: 1; }

.bel-field button {
	width: 100%;
	height: 100%;
	box-sizing: border-box;
	border: 0;
	cursor: pointer;
	font-family: 'Tel Aviv Modernist', sans-serif;
	color: #fff;
	background: transparent;
}

/* ==========================================================================
   Reduced motion
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
	.bel-canvas *,
	.bel-canvas *::before,
	.bel-canvas *::after {
		animation-duration: 0.001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.001ms !important;
	}
}


/* --- Section 2: FDA band + video + CTA ring (Figma 94:2 … 94:18) --- */

/* Gradient band behind the video (94:2). The SVG carries its own blur/falloff. */

/* Video plate (94:5) */

/* Play button circle (94:6) */

/* Play triangle (94:7) — Figma rotates it 90deg inside a 69x72 box. */

/* FDA approval copy (94:11) */

/* CTA rings (94:15 outer, 94:16 inner) */

/* CTA label (94:17) */

/* Arrow icon inside the CTA ring (94:18) */

/* --- Section 3: "אז מה זה בעצם הצוללת?" (94:25, 94:27, 94:29) --- */

/* Section heading with a black→grey→black gradient fill (94:25) */

/* Product line (94:27) — Brutalist Light on the white background */

/* Body copy (94:29) */

/* --- Shared: frosted-glass plate (used by the hero pill and every label pill) --- */

/* Label sitting on a glass plate — Modernist 25px, never wraps. */

/* --- Section 4: mechanism (94:37, 94:26, glass pills, 94:43) --- */

/* "הצוללת עובדת על ידי מנגנון חכם" (94:37) */

/* Mechanism photo (94:26) — Figma crops it inside a shorter frame. */

/* The five callout plates (94:40, 94:31, 94:38, 94:35, 94:33) */

/* Their labels (94:41, 94:32, 94:39, 94:36, 94:34) */

/* "וכל זה קורה כי…" (94:43) */

/* --- Section 5: "סוגי הטיפולים" (94:44, 94:45) --- */

/* Oversized watermark headline with a near-transparent gradient fill (94:44) */

/* Sub-headline over the watermark (94:45) */

/* --- Section 7: "טכנולוגיה אחת / 5 אורכי גל / 7 סוגי טיפולים" (103:99) --- */

/* --- Section 6: six wavelength cards (94:49 … 94:82) ------------------------
   Two columns of three. Titles and bodies are right-anchored (translateX(-100%)
   off a calc'd left edge) exactly as Figma emits them for this RTL block.
   --------------------------------------------------------------------------- */

/* Glow ring behind the dot; the SVG carries the blur, hence the big negative inset. */

/* Right-hand anchor for each column. */

/* Section 7 body copy (103:100) */

/* --- Section 8: audience band + lead form 1 (103:91 … 105:112) --- */

/* Figma has this band at left 3 / width 1728, i.e. 3px short of the canvas on the
   left and 3px past it on the right. The right side is covered either way; the
   left one showed as a white hairline down the page edge at every width. Same
   right edge, left edge closed. */

/* Right-anchored headings on the band (103:92, 103:93, 103:94) */

/* Four logo placeholders (103:95 … 103:98) */

/* --- Lead form, instance 1 (103:101 … 105:111) ------------------------------
   The form element itself is left unpositioned so its fields resolve against the
   canvas and can carry their literal Figma coordinates.
   --------------------------------------------------------------------------- */

/* Form heading (182:15) */

/* Field shells */
.bel-form .bel-field { position: absolute; }
.bel-form .bel-field input,
.bel-form .bel-field button {
	border-radius: 9px;
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	font-size: 23px;
	line-height: normal;
	color: #000;
	text-align: right;
	backdrop-filter: blur(150px);
	-webkit-backdrop-filter: blur(150px);
	background: #e9e9e9;
}
.bel-form .bel-field input::placeholder { color: #000; opacity: 1; }
.bel-form .bel-field--submit button {
	text-align: center;
	/* Inherited from the other project s palette. Belavan s button is the pink
	   gradient Figma states on 602:115. */
	background: linear-gradient( to right, #bf6f81, #ffb3c4 );
	cursor: pointer;
}

/* The placeholder sits where Figma's label sits: pad by the gap between the
   field's right edge and the label's right edge. */
.bel-form--1 .bel-field--name  input { padding-right: 25px; }
.bel-form--1 .bel-field--phone input { padding-right: 23px; }
.bel-form--1 .bel-field--years input { padding-right: 25px; }

/* --- Section 9 heading (105:112) --- */

/* Hero-area form heading (182:13) */

/* --- Section 9: seven differentiator rows (105:113 … 105:157) --- */

/* Row geometry, straight from each node's own left/top. */

/* Vertical divider running down the row stack (105:125) */

/* --- Section 10: video still (106:160) --- */

/* --- Section 11: "מי עומד מאחורי הטכנולוגיה" + lead form 2 (106:163 … 106:177) --- */

.bel-form--2 .bel-field--name { left: 860px; top: 8706px; width: 354px; height: 78px; }
.bel-form--2 .bel-field--phone { left: 484px; top: 8706px; width: 340px; height: 78px; }
.bel-form--2 .bel-field--years { left: 484px; top: 8803px; width: 730px; height: 78px; }
.bel-form--2 .bel-field--submit { left: 488px; top: 8915px; width: 730px; height: 63px; }
.bel-form--2 .bel-field--name  input { padding-right: 25px; }
.bel-form--2 .bel-field--phone input { padding-right: 23px; }
.bel-form--2 .bel-field--years input { padding-right: 25px; }
/* Figma centres the button label 11px right of the button's own centre. */
.bel-form--2 .bel-field--submit button { padding-left: 22px; }

/* --- Section 16/17: bottom band, closing CTA + lead form 3 (112:227 … 112:242) --- */

/* Figma gives this third panel no heading at all (112:234 holds only the four
   fields), so it reserves 76px above them where panels 1 and 2 reserve 135px.
   The site does carry a heading here, and at the shared 385px width it wrapped
   to two lines and ran 38px into the name and phone fields. One line at 700px
   fits the 76px Figma left, and the panel geometry stays untouched. */

.bel-form--3 .bel-field--name { left: 873px; top: 14668px; width: 354px; height: 78px; }
.bel-form--3 .bel-field--phone { left: 497px; top: 14668px; width: 340px; height: 78px; }
.bel-form--3 .bel-field--years { left: 497px; top: 14765px; width: 730px; height: 78px; }
.bel-form--3 .bel-field--submit { left: 501px; top: 14877px; width: 730px; height: 63px; }
.bel-form--3 .bel-field--name  input { padding-right: 25px; }
.bel-form--3 .bel-field--phone input { padding-right: 23px; }
.bel-form--3 .bel-field--years input { padding-right: 25px; }
.bel-form--3 .bel-field--submit button { padding-left: 22px; }

/* --- Section 12: client photo wall (108:179 … 108:184) --- */

/* The five cards Figma pins at 59 / 391 / 723 / 1056 / 1389 — a 252px card on a
   332px pitch — are now driven by the shared carousel further down this file.
   Their geometry is preserved there as the card size and the 80px gap. */

/* --- Section 13: long testimonial (108:185 … 108:194) --- */

/* Figma puts `opacity-30` on this image — it is a backdrop behind the letter,
   not a portrait. Never transcribed, so the photo was competing with the copy
   laid over it. Same omission as the pricing watermark. */

/* --- Section 14: four benefit cards + photo (112:198 … 75:10) --- */

/* --- Section 15: WhatsApp screenshots (112:219 … 112:226) --- */

/* The five before/after shots Figma pins at 81 / 337 / 685 / 1132 / 1383 — heights
   194-199, widths 199 / 291 / 390 / 194 / 291, a consistent 57px apart. Each box
   matches its own photo's aspect (1:1, 3:2, 2:1, 1:1, 3:2). They are driven by the
   shared carousel further down this file, which keeps that rule: a fixed-height
   slot with the image at its natural width inside it. */

/* --- Section 16: pricing copy (106:162, 112:228 … 112:231) --- */
/* The watermark is a backdrop, not a picture — at full strength the white
   laurel competed with the copy sitting on top of it. 20%. The mobile carried
   0.3 from the frame; both are on the same value now so the section reads the
   same on either canvas. */

/* ==========================================================================
   MOBILE — 440 x 11658 (Figma node 133:465)
   A different layout, not a scaled desktop: its own coordinates throughout.
   ========================================================================== */

/* Hero block (133:466) — note this one is pure black, unlike the desktop's #212121. */

/* Background photo — mobile drops the desktop's mask and just scrims it. */

/* Glass pill + copy below the hero block (133:475 … 133:477) */

/* Section 2 — band, video, FDA, CTA ring (133:478 … 133:312) */

/* Figma insets the mark by 6.7% each side and 25% off the bottom. Expressed as
   width/height rather than left+right+top+bottom with width:auto — the auto
   form did not resolve against the rotated parent and the image rendered at
   its natural 51x62 instead of the 24x20 the frame allows. */

/* Rotated node: these values come from Figma's own CSS, not from get_metadata,
   which reports a different origin for anything with a rotation. */

/* ==========================================================================
   QA fixes
   ========================================================================== */

/* A <form> here is an unpositioned box at the canvas origin (its fields carry the
   real coordinates), so anything rendered in normal flow inside it — the error
   message — landed on top of the hero. Pin each message above its own panel. */
.bel-form-error {
	position: absolute;
	width: 1005px;
	margin: 0;
	padding: 8px 0;
	border-radius: 8px;
	background: rgba(255, 56, 60, 0.12);
	color: #ff383c;
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	font-size: 22px;
	line-height: 28px;
	text-align: center;
}
.bel-stage--desktop .bel-form-error {
	left: calc(50% - 0.5px);
	transform: translateX(-50%);
}
.bel-stage--desktop .bel-form-error--1 { top: 5554px; }
.bel-stage--desktop .bel-form-error--2 { top: 8526px; }
.bel-stage--desktop .bel-form-error--3 { top: 14547px; }

.bel-stage--mobile .bel-form-error {
	left: 50%;
	transform: translateX(-50%);
	width: 403px;
	font-size: 15px;
	line-height: 20px;
}

/* Invalid field feedback */
.bel-field input.bel-invalid {
	outline: 2px solid #ff383c;
	outline-offset: -2px;
}

/* Click targets over the round CTAs — kept as a transparent overlay so the
   composition of ring + label + arrow is untouched. */

/* Video facade: the whole plate is the button, and the play mark rides above it. */

/* Sibling combinator, not descendant. Figma composes the ring and the mark as
   their own canvas nodes, so they sit NEXT TO the plate rather than inside it —
   the descendant form matched nothing and the play button stayed on top of the
   running video. They are printed after the plate, so `~` reaches them. */

/* --- Mobile sections 3-7 (133:299 … 133:372) --- */

 
 
 
 
 
 

/* --- Mobile sections 8-17 (133:362 … 148:522) --- */

   /* see .d-aud-logo */

   

.bel-stage--mobile .bel-form .bel-field input,
.bel-stage--mobile .bel-form .bel-field button { font-size:14px; }
.bel-form--m1 .bel-field--name { left:50px; top:3948px; width:343px; height:59px; }
.bel-form--m1 .bel-field--phone { left:50px; top:4025px; width:343px; height:59px; }
.bel-form--m1 .bel-field--years { left:50px; top:4102px; width:343px; height:59px; }
.bel-form--m1 .bel-field--submit { left:51px; top:4188px; width:342px; height:49px; }
.bel-form--m2 .bel-field--name { left:50px; top:6089px; width:343px; height:59px; }
.bel-form--m2 .bel-field--phone { left:50px; top:6166px; width:343px; height:59px; }
.bel-form--m2 .bel-field--years { left:50px; top:6243px; width:343px; height:59px; }
.bel-form--m2 .bel-field--submit { left:51px; top:6329px; width:342px; height:49px; }
.bel-form--m3 .bel-field--name { left:45px; top:11269px; width:343px; height:59px; }
.bel-form--m3 .bel-field--phone { left:45px; top:11346px; width:343px; height:59px; }
.bel-form--m3 .bel-field--years { left:45px; top:11423px; width:343px; height:59px; }
.bel-form--m3 .bel-field--submit { left:46px; top:11509px; width:342px; height:49px; }
.bel-stage--mobile .bel-field--name input,
.bel-stage--mobile .bel-field--phone input,
.bel-stage--mobile .bel-field--years input { padding-right: 24px; }
.bel-stage--mobile .bel-form-error--m1 { top:3820px; }
.bel-stage--mobile .bel-form-error--m2 { top:5961px; }
.bel-stage--mobile .bel-form-error--m3 { top:11141px; }

/* 133:409. Three values were wrong here: the centre (Figma anchors this at
   calc(50% - 11px), matching the photo below it, not at 50% — the heading sat
   11px right of the image it titles), the size (20px, not 19), and the leading
   (Figma says leading-[normal], which is ~24px at 20px, not 25). Width is the
   contained form of Figma's 1314px box; the centre is what positions the text. */

/* 133:408. The child <p> carries leading-[35px]; 21px came from the container's
   leading-[0]. Fourteen pixels a line too tight over the whole paragraph. */

/* 35px, not 21. Node 133:439 carries leading-[0] and its children carry
   leading-[35px] — the same value the desktop letter uses, even though the type
   is 17px here rather than 25. That wide leading is what the section is drawn
   around: at 21 the letter ended 477px above the photo and left a black void,
   at 35 it runs to 8046 and the photo starts at 8033. */

 
 
 
 

/* THE WHITE STRIP DOWN THE LEFT OF THE CLOSING SECTION.
   Every band SVG carries 30px of transparent padding around its artwork for the
   drop shadow: m-band-bottom.svg is a 501.068-wide viewBox whose path runs
   x=30…471.068. The element is the artwork's width (441.068), so the image has
   to be pulled 30px left for the paint to land on the element's edge.
   This rule carried the DESKTOP percentage, -1.69%, which is 30px of 1775 but
   only 7.45px of 441 — so the artwork started 22px inside the canvas and left a
   22px strip of bare white page down the left of the whole section, right where
   the closing copy sits. That is the "it's cut" that was reported four times.
   Percentages cannot be shared between the canvases here; the padding is an
   absolute 30px in every file, so the offset is written in px.
   Only the LEFT gap showed: the <img> is a replaced element with width:auto, so
   it renders at its intrinsic 501px and ignores the right inset entirely, which
   pushed the artwork's right edge past the canvas and covered that side.
   d-band-top (-1.74% of 1728.857), d-band-bottom (-1.69% of 1774.999) and
   m-band-top (-6.73% of 445.436) all already resolve to -30px. This was the one
   that did not. */

/* ==========================================================================
   MOBILE — finishing pass
   Three categories, each verified against the mobile frame's own Figma data
   before it was changed. Nothing here moves a composition; the coordinates
   above are still the source of truth.
   ========================================================================== */

/* --- 1. Opacity the first pass dropped ---------------------------------
   Two nodes in the mobile frame carry an opacity that never made it into the
   CSS, which is why both read as broken rather than as the background art
   they are. Figma is explicit about both. */

/* 133:436 — the EMP-TECH mark is a watermark that bleeds off the left edge on
   purpose (the desktop frame does the same at left:-1132/w:1650). At full
   opacity it competed with the pricing copy in front of it. The frame carries
   30%; both canvases are on 20% so the section reads the same either way. The
   inner image is sized exactly as Figma sizes it and clipped by the box. */

/* 133:438 — the testimonial's background texture sits at 60%. */

/* --- 2. Frame containment for oversized text boxes ---------------------
   Thirteen text nodes were drawn in boxes far wider than their own copy —
   m-ben-kicker is 1314px wide around 208px of text. Figma does not care; a
   browser does, because the box still takes pointer events and still reports
   a bounding rect that leaves the 440px frame, which makes the layout
   unmeasurable and blocks taps on whatever sits under it.

   Narrowing is safe here and was checked before it was applied: every one of
   these nodes breaks its lines on hard <br> (BEL_Render::text converts the
   Figma newlines), not on soft wrap, so no line can re-wrap. The anchor is
   preserved in every case — a centred box keeps its centre, a
   translateX(-100%) box keeps its right edge — so the text renders at exactly
   the same coordinates. Widths below are the measured ink width plus ~10%
   headroom for font-loading variance. */
   /* ink 208 */
   /* ink 260 */
   /* ink 130 */
/* 230, not 200: the widest line is 186px, not the 174px the widest bidi
   fragment reports — the Hebrew line "5 אורכי גל שונים" splits into separate
   runs for the digit and the words, and only their sum is the real line. */

/* Same defect, worse: the hero headline runs 421px of ink and clears each edge
   by 9.3px — the tightest line on the canvas. 18.5px brings it to ~390. */

/* Figma sets this at 17px inside a 1039px box, so on the 440px frame the first
   hard-broken line measures 405px of ink and sits 12px from each screen edge —
   Figma's own render of the mobile frame has it touching both edges, which is
   what "the words are cut above the form" was. The line cannot be narrowed
   (the break is a hard newline in the copy; a narrower box would wrap it into a
   ragged third line), so the type comes down instead: 16px puts the ink at
   ~381px and the margin at ~29px, in line with every other block on this canvas. */

   /* ink 276, 3 hard-broken lines */
   /* ink 334 */
   /* widest ink of the four is 284 */
   /* ink 232 / 206 */

/* --- 3. The WhatsApp series -------------------------------------------
   Figma lays the five screenshots out as one continuous row: widths
   169 / 247 / 332 / 165 / 247 separated by gaps of 49 / 46 / 48 / 49, so the
   row measures 1352px inside a 440px frame. Two of them sit at left:-765 and
   left:-547 and never appeared at all.

   That is not a mistake in the design — it is a row that cannot fit, drawn on
   a canvas that has no edge. It is the shared carousel now; see `.m-wa` and
   `.bel-wall--fit` further down. */

/* Second batch of oversized text boxes, same method: measured widest LINE
   (bidi fragments summed, not the widest fragment), narrowed to that plus
   headroom, anchor preserved. All break on hard <br>, so none can re-wrap. */
   /* widest line 169 */
   /* 319 */
   /* 292 */
   /* 354 */
   /* 394 — 435 would have crossed the left edge */

/* Right-aligned but positioned from the left with no transform, so narrowing
   alone would drag the right edge inward. left moves by the same amount the
   width loses (447-365 = 82; -44 + 82 = 38) to pin the right edge at 403. */
   /* 329 */

/* The badge label was given a 795px box around ~200px of text, and the box is
   rotated -2deg, so its sweep reached far past the frame. The plate behind it
   is 283px; the label now matches it. Both stay centre-anchored, so the text
   does not move. */

/* --- "לקוחות שלנו משתפות" carousel, both canvases ----------------------
   One behaviour, two geometries, and it advances ONE card per step.

   Figma draws both rows bleeding past the frame — the mobile one runs -75 to
   482 in a 440 frame. On a canvas with no edge that is fine; in a browser it is
   a photo sliced in half. Stepping one card at a time normally makes that worse,
   because the window edge lands wherever the arithmetic leaves it.

   So the geometry is arranged to make a cut impossible rather than avoided:

     - each card carries HALF the design gap as a margin, so its slot is exactly
       one pitch wide (mobile 97 + 2x9 = 115, desktop 252 + 2x40 = 332);
     - the TRACK is given a width that is a whole number of those slots
       (3 x 115 = 345, 4 x 332 = 1328) and centred in the frame.

   Every scroll position is then a whole number of pitches, and the window is a
   whole number of slots — so the visible set is always N complete cards, at
   every step, for any number of photos. The cards land on exactly the same
   pixels the previous page-based version put them on: 56.5 and 240. */
.bel-wall { position: absolute; }
.bel-wall__track {
	display: flex;
	box-sizing: border-box;     /* the vertical padding below is inside height:100% */
	height: 100%;
	margin-inline: auto;        /* the track is narrower than the frame; centre it */
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
}
.bel-wall__track::-webkit-scrollbar { display: none; }

.bel-wall-photo {
	position: relative;
	overflow: hidden;
	scroll-snap-align: start;
	transition: transform .45s cubic-bezier(.22,.61,.36,1), box-shadow .45s;
	will-change: transform;
}
.bel-wall-photo img { width: 100%; height: 100%; object-fit: cover; }

/* Inherited from the other project, where the row was a strip of client photos
   and lifting the middle one read as "this is the current card". Here the design
   draws a row of equal boxes, and the lift did what it says: it made the first
   mobile card 200x566 in a row of 186x534, sticking out past the row on three
   sides. The class is still set — front.js uses it — but it no longer moves
   anything. */
.bel-wall-photo--active { transform: none; box-shadow: none; }

/* The wall is TALLER than the card row, and the track carries the difference as
   vertical padding. A horizontal scroll container clips vertically too — CSS
   computes `overflow-y: visible` to `auto` the moment the other axis scrolls —
   so the lifted card was being sliced: 19.4px off its top and 7.5px off its
   bottom on the desktop, 10.8px off the top on the phone. That is the cut.

   The padding is the room the lift needs, the wall grows by twice it, and its
   `top` moves up by exactly one, so every card still lands on the pixel the
   design puts it on: 9321 = 9297 + 24, 6532 = 6518 + 14. The wall's centre is
   unchanged too, which keeps the arrows where they were.

   scroll-margin cancels the card's own margin, so `snap-align: start` lands on
   the slot edge — the same position front.js scrolls to. */
   /* 174 + 2x14 */
   /* 3 x 115 */

 /* 453 + 2x24 */
 /* 4 x 332 */

/* --- The before/after results row, same carousel ------------------------
   One difference from the client photos: those are five identical 252x453
   boxes, these are five DIFFERENT boxes, each matching its own photo's aspect
   (1:1, 3:2, 2:1, 1:1, 3:2). A before/after pair cannot be cropped to a common
   shape without losing half of what it is there to show.

   So the slot is uniform — which is what the one-card-per-step geometry needs —
   and the image sits inside it at a fixed height and its natural width. The
   design's own widths come back on their own, because Figma sized each box to
   its photo: at height 195 a 2:1 photo is 390 wide, which is exactly what node
   112:223 is drawn at. A photo uploaded later gets the same treatment with no
   code change, and `max-width` keeps an unusually wide one inside its slot.

   Slot = widest card + the design's gap: 390 + 57 desktop, 332 + 48 mobile.
   The phone shows one at a time — a 332px card in a 440px frame leaves no room
   for a second, and for before/after detail that is the right call anyway. */
.bel-wall--fit .bel-wall-photo {
	display: flex;
	align-items: center;
	justify-content: center;
	overflow: visible;         /* the radius belongs to the image, not the slot */
}
.bel-wall--fit .bel-wall-photo img {
	width: auto;
	height: 100%;
	max-width: 100%;
	object-fit: contain;
	border-radius: 15px;
}

   /* 165 + 2x12 */
    /* 1 x 380 */

  /* 195 + 2x14 */
   /* 3 x 447 */

.bel-wall__arrow {
	position: absolute;
	top: 50%;
	display: grid;
	place-items: center;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.92);
	color: #9f6739;
	box-shadow: 0 3px 10px rgba(0, 0, 0, 0.22);
	cursor: pointer;
	z-index: 4;
	transition: transform .2s, background .2s, opacity .25s;
}
/* Scoped to the canvas, not to one carousel — both rows on a given canvas want
   the same control size. */
.bel-stage--mobile .bel-wall__arrow { width: 34px; height: 34px; margin-top: -17px; }
.bel-stage--mobile .bel-wall__arrow svg { width: 18px; height: 18px; display: block; }
.bel-stage--mobile .bel-wall__arrow--prev { left: 2px; }
.bel-stage--mobile .bel-wall__arrow--next { right: 2px; }

.bel-stage--desktop .bel-wall__arrow { width: 62px; height: 62px; margin-top: -31px; }
.bel-stage--desktop .bel-wall__arrow svg { width: 32px; height: 32px; display: block; }
.bel-stage--desktop .bel-wall__arrow--prev { left: 6px; }
.bel-stage--desktop .bel-wall__arrow--next { right: 6px; }

/* The ring stays as drawn because that is what suits the row. The tap area does
   not: on a 320px phone the canvas shrinks the 34px ring to 24px, well under the
   44px floor. This grows the target to a true 44px on every handset and leaves
   the drawn ring alone — the same --bel-scale trick the form inputs use. */
.bel-stage--mobile .bel-wall__arrow::before {
	content: '';
	position: absolute;
	left: 50%;
	top: 50%;
	width: calc( 44px / var(--bel-scale, 1) );
	height: calc( 44px / var(--bel-scale, 1) );
	transform: translate(-50%, -50%);
}
.bel-wall__arrow:hover { background: #fff; transform: scale(1.1); }
.bel-wall__arrow:active { transform: scale(0.94); }
/* An arrow with nowhere to go fades rather than disappearing, so the control
   does not jump around as the row is driven. */
.bel-wall__arrow[disabled] { opacity: 0.3; cursor: default; }
/* One page of cards means nothing to drive — hide the whole control set. */
.bel-wall--static .bel-wall__arrow,
.bel-wall--static .bel-wall__dots { display: none; }

.bel-wall__dots {
	position: absolute;
	left: 0;
	right: 0;
	display: flex;
	justify-content: center;
	gap: 6px;
}
/* Each row sets its own offset: the wall grew by its lift padding, so what was
   -18 and -34 is now -4 and -10. */

.bel-stage--desktop .bel-wall__dots { gap: 10px; }
.bel-wall__dots span {
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.22);
	cursor: pointer;
	transition: background .3s, width .3s;
}
.bel-stage--desktop .bel-wall__dots span { width: 10px; height: 10px; }
.bel-wall__dots span.is-on { width: 16px; border-radius: 3px; background: #9f6739; }
.bel-stage--desktop .bel-wall__dots span.is-on { width: 28px; border-radius: 5px; }

@media (prefers-reduced-motion: reduce) {
	.bel-wall__track { scroll-behavior: auto; }
	.bel-wall-photo, .bel-wall__arrow, .bel-wall__dots span { transition: none; }
	.bel-wall-photo--active { transform: none; }
}


/* --- Rendered-size floors -------------------------------------------
   The mobile canvas scales by viewport/440, so on a 360px phone every drawn
   size lands at 78% of itself. For most of the page that is the point — the
   composition scales as a whole. For two things it is a defect:

   1. A focused input under 16px makes iOS zoom the page, and the page then
      slides sideways. This is the horizontal slide reported on real handsets;
      it never appears in a desktop browser at a narrow window, which is why
      measuring the document width alone did not find it.
   2. A tap target under 44px is below the accessibility floor.

   --bel-scale is published by front.js on the stage. Dividing by it cancels the
   canvas transform for that property only, so these land at a true rendered
   size on every phone while everything around them stays as drawn. */
.bel-stage--mobile {
	--bel-scale: 1;
}
.bel-stage--mobile .bel-form .bel-field input {
	/* Drawn LARGER so the canvas transform lands it at exactly 16px rendered. */
	font-size: calc( 16px / var(--bel-scale) );
}

/* The button must NOT follow the inputs here, and used to.
   iOS zooms on focusing an input, select or textarea under 16px — never on a
   button, which cannot be focused into that state. So the button was paying the
   cost of a protection it never needed: dividing by the scale drew its label at
   17.6px on a 400px phone and 23.1px on a 320px one, and "אני רוצה לשמוע פרטים
   על ״הצוללת״" only stays on one line up to 16.5px in a 342px button. It broke
   to two lines below ~380px wide and spilled 8px out of the button by 320px —
   on the one control the whole page exists to get pressed.
   Capped at the design's own 16px, so it can still grow toward a true 16px on a
   wide phone but can never reach a size that wraps. */
.bel-stage--mobile .bel-form .bel-field button {
	font-size: 16px;
	font-size: min( calc( 16px / var(--bel-scale) ), 16px );
}
@supports not (font-size: calc(1px / 1)) {
	.bel-stage--mobile .bel-form .bel-field input,
	.bel-stage--mobile .bel-form .bel-field button { font-size: 16px; }
}


/* --- Audience band, rebuilt in CSS, both canvases (112:218 / 133:362) ---
   Neither exported SVG can render correctly inside an <img>. Each has three
   layers: a white base rect, the gradient WEDGE, and a white 30% rect carrying
   `backdrop-filter: blur(300px)`. That last one lives in a <foreignObject>,
   which SVG-in-<img> restricted mode drops — so both the wash and, more
   importantly, the 300px blur are lost. Without the blur the wedge stays a hard
   diagonal and the white base shows through above and below it: the band read
   as a sloping ramp with white triangles in the corners.

   A 300px blur over a 605px-tall shape erases that wedge completely. Figma's
   own render of both nodes is an even gradient, corner to corner, with no
   diagonal anywhere. These stops are sampled from that render rather than
   recomputed from the authored ones, because the blur mixes the white base in
   and no formula over `#9F6739 -> #CEC5BC -> #786452` reproduces the result.

   The 10px #9F6739 rules top and bottom are the SVG's own `mask` path. */

/* The mobile band is a 716px element pinned to the frame's right edge, so only
   its right 440px is ever on screen — element 38.55% to 100%. The sampled stops
   are mapped onto that span; the remainder holds the first colour and never
   renders. This is why the ramp looks so much gentler than the desktop's: the
   phone only ever sees the middle third of the same gradient. */

/* An empty logo slot is a #d9d9d9 placeholder in the frame — the designer had
   not received the client logos yet. On a live page four blank grey squares
   read as broken images, and they sit in the one section built to earn trust
   ("הן כבר עשו את זה"). A slot with no image is hidden; :has() means it comes
   back on its own the moment a logo is set in the editor, with no code change. */

/* --- Section 10 as a second video plate (106:160 / 133:464) ---------------
   Figma drew this one flat, with the poster carrying a screenshot of a player
   baked into it. It is a real plate now: the image is the poster and the link
   set in the editor plays in place, the same facade the hero plate uses.
   Figma has no play mark here to match, so the mark is centred in the box
   rather than placed by coordinate, and it only appears once a link exists —
   a play button over a plate that cannot play is worse than no button. */

.bel-play {
	position: absolute;
	left: 50%;
	top: 50%;
	width: 127px;
	height: 128px;
	margin: -64px 0 0 -63.5px;
	pointer-events: none;
	z-index: 2;
	transition: transform .25s cubic-bezier(.22,.61,.36,1);
}

/* Two classes, because `.d-still img` / `.m-still img` already claim every
   image in the box for the poster (100%/100%/cover) and would swallow these. */
.bel-play .bel-play__circle { position: absolute; inset: 0; width: 100%; height: 100%; }
.bel-play .bel-play__tri {
	position: absolute;
	left: 50%;
	top: 50%;
	/* The mark's own 62.35x51.75, as a share of the 127x128 ring — the same
	   proportion the hero plate draws. Rotated because the exported polygon
	   points up. */
	width: 49.1%;
	height: 40.4%;
	object-fit: fill;
	transform: translate(-50%, -50%) rotate(90deg);
}

.bel-video-playing .bel-play { display: none; }

/* --- {{ … }} accent runs -------------------------------------------------
   BEL_Render::inline() turns {{text}} into this span. It rides the same custom
   property as the accent heading control, so the editor's gold picker moves
   these runs with it, and falls back to the design's own #9f6739 when unset. */
.bel-accent { color: var( --bel-title-accent, #9f6739 ); }

/* The button breathes with light rather than with size.
   It used to scale up and down, which on a plate this wide reads as a flicker —
   the whole shape jumps and the eye catches the edges moving. A glow says the
   same "press me" without anything changing position.
   drop-shadow, not box-shadow: the plate is an SVG with rounded ends, and
   box-shadow would halo the element's rectangle instead of the shape itself.
   Two shadows stacked — a tight bright one and a wide soft one — so the light
   falls off the way real light does instead of stopping at one hard radius.
   The colour is the plate's own gold (#e8bf69, the light stop of its gradient),
   so it reads as the button glowing rather than as a coloured ring behind it. */
@keyframes bel-cta-glow {
	from {
		filter: drop-shadow( 0 0 3px rgba( 232, 191, 105, 0.25 ) )
		        drop-shadow( 0 0 10px rgba( 232, 191, 105, 0.10 ) );
	}
	to {
		filter: drop-shadow( 0 0 8px rgba( 232, 191, 105, 0.70 ) )
		        drop-shadow( 0 0 26px rgba( 232, 191, 105, 0.35 ) );
	}
}

/* ==========================================================================
   Stage layout — a full-screen hero above a fixed-coordinate canvas
   ========================================================================== */

/* The hero owns the first screen. 100svh, not 100vh: on a phone the URL bar
   hides on scroll and vh follows it, which would resize the hero under the
   reader's thumb. svh is the small viewport height and stays put. */
.bel-hero-stage {
	position: relative;
	width: 100%;
	/* The taller of one screen and the hero's own drawn height — the same max()
	   JS writes. A flat 100vh was 194px short of the desktop hero, and
	   everything below it moved by that much the moment fit() ran. */
	height: 100vh;
	height: max( 100svh, var( --bel-hero-drawn, 100vh ) );
	overflow: hidden;
}
/* Scaled to COVER by fit(); whichever axis overflows is centred, so the crop
   falls evenly on both edges instead of eating one of them. */
.bel-hero-canvas {
	position: absolute;
	left: 0;
	/* Centred in whatever room the block has: zero when the hero is the taller
	   of the two, half the difference when the screen is. */
	top: calc( ( 100% - var( --bel-hero-drawn, 100% ) ) / 2 );
	direction: ltr;
	transform-origin: top left;
}

/* No clipping here. Figma puts the video band at y=1037 and its title at 1122,
   both ABOVE the hero s 1194 — so a stage that starts at the hero s end and
   hides its overflow cut the band s whole upper chevron off and swallowed the
   title completely. .bel-stage above already clips the canvas horizontally,
   which is what the hidden was there for. */
/* --- The page at its right size before a line of JS has run ---------------
   Everything below is what fit() computes, stated in CSS so the browser has it
   in its FIRST layout pass. Leaving it all to JS meant the design was laid out
   at full size and then moved: the browser scored that moment as a layout shift
   of 1.0000 on a phone — the entire document, under a reader who had already
   started scrolling.

   The scale is `min( 1, viewport / designWidth )`, and CSS can say that because
   a length over a length is a number: `calc( 100vw / ( w * 1px ) )`. The two
   design figures are printed unitless by stage() for exactly this.

   fit() still has the last word — it writes --bel-scale as an inline style,
   which beats this rule, and it knows the stage's real width where this only
   knows the window's. It simply no longer has the first word.

   No cap is needed on the heights: the scale is already capped at 1. An earlier
   version put `max-height` here to do that job and it clamped the height JS
   sets — the questions make the page 1,663px taller than the constant, and all
   of it was being thrown away. */
.bel-stage {
	--bel-scale: min( 1, calc( 100vw / ( var( --bel-design-w, 1 ) * 1px ) ) );
	--bel-hero-drawn: calc( var( --bel-hero-h, 0 ) * var( --bel-scale, 1 ) * 1px );
}
.bel-canvas {
	transform: scale( var( --bel-scale, 1 ) );
	left: calc( ( 100% - var( --bel-design-w, 1 ) * var( --bel-scale, 1 ) * 1px ) / 2 );
}

/* The hero gets a scale of its own. Everything below it is read by scrolling, so
   width is the only constraint that matters there; the hero has to be the whole
   of what a screen shows, so it is contained in BOTH directions. On a wide short
   window the column narrows; on a tall one this resolves to the same number and
   nothing changes. fit() overwrites it with the exact figure. */
.bel-stage { --bel-hero-scale: var( --bel-scale, 1 ); }
.bel-stage[data-hero-fit="contain"] {
	--bel-hero-scale: min(
		var( --bel-scale, 1 ),
		calc( 100svh / ( var( --bel-hero-h, 1 ) * 1px ) )
	);
}
.bel-hero-canvas {
	transform: scale( var( --bel-hero-scale, 1 ) );
	left: calc( ( 100% - var( --bel-design-w, 1 ) * var( --bel-hero-scale, 1 ) * 1px ) / 2 );
}
.bel-stage[data-hero-fit="contain"] {
	--bel-hero-drawn: calc( var( --bel-hero-h, 0 ) * var( --bel-hero-scale, 1 ) * 1px );
}
.bel-rest-stage {
	position: relative;
	width: 100%;
	height: calc( var( --bel-rest-h, 0 ) * var( --bel-scale, 1 ) * 1px );
}

/* Pulled up by exactly the hero's design height so every section below keeps
   Figma's own top value. Written by stage() as an inline style, because the
   number differs per canvas. */
.bel-rest {
	position: absolute;
	left: 0;
}

/* The hero's ground. #faf6f1 is the design's own cream, sampled off the export
   at the 46% opacity Figma draws it with, so the area around the contained
   canvas is the same colour as the area inside it. */
/* This design's ground is a picture at full strength, not a 46% wash — and
   it lives on the STAGE, which is never scaled, so it covers the window
   however narrow the column inside it becomes. */
.bel-hero-stage { background: var( --bel-ground, #faf0e5 ); }
.bel-hero-stage::before {
	content: '';
	position: absolute;
	inset: 0;
	background-image: var( --bel-hero-bg );
	background-size: cover;
	background-position: center;
	pointer-events: none;
}

/* Two cards visible instead of four, and narrower — 186 wide against desktop's
   283, at the same 534 height and the same 66px gap. Same slot geometry: half
   the gap as a margin so the slot is one pitch, and a track that is a whole
   number of slots. */
/* The row bleeds past both edges of the panel, which is what Figma draws: the
   first card s ink starts at x=1, so its slot — the card plus half the gap —
   starts at -32. The panel clips it, and that clip IS the design. The arrows
   are pulled back inside the visible width below. */
/* ---------- Section 2's wall is videos, not photos ----------------------
   Figma drew four tall placeholders; the client's footage is landscape. A 16:9
   video inside a 283x534 card fills a third of its height, so the card takes
   the video's shape and two of them span the row the four used to.
   The cards are shorter than the band they sit in, so they centre in it and
   nothing around the section moves. */
.bel-wall--video .bel-wall__track { align-items: center; }
.bel-wall-video {
	position: relative;
	overflow: hidden;
	cursor: pointer;
	background: #ded9d2;
	box-shadow: 0 10px 30px rgba( 0, 0, 0, 0.18 );
}
.bel-wall-video img {
	display: block;
	width: 100%;
	height: 100%;
	/* cover, because hqdefault — the fallback still — is 4:3 with letterbox bars
	   baked in, and cropping to the card's 16:9 removes them. */
	object-fit: cover;
}
/* The same disc and triangle as the video plate in section 3, at 45% of its
   size, so the two players read as the same control. */
.bel-wall-video__play {
	position: absolute;
	left: 50%;
	top: 50%;
	width: 58px;
	height: 58px;
	margin: -29px 0 0 -29px;
	border-radius: 50%;
	background: linear-gradient( #f0a6b6, #88505d );
	box-shadow: 0 6px 18px rgba( 0, 0, 0, 0.3 );
	transition: transform .25s cubic-bezier( .22, .61, .36, 1 );
}
.bel-wall-video__play::after {
	content: '';
	position: absolute;
	left: 21px;
	top: 16px;
	width: 0;
	height: 0;
	border-left: 23px solid #fff;
	border-top: 13px solid transparent;
	border-bottom: 13px solid transparent;
}
.bel-wall-video:hover .bel-wall-video__play,
.bel-wall-video:focus-visible .bel-wall-video__play { transform: scale( 1.08 ); }
/* Once playing, the poster and the button are gone and the iframe fills it. */
.bel-wall-video.bel-video-playing .bel-wall-video__play,
.bel-wall-video.bel-video-playing img { display: none; }
.bel-wall-video iframe,
.bel-wall-video video { display: block; width: 100%; height: 100%; border: 0; }

/* --- the before / after table -------------------------------------------
   Written in its own coordinates: 0,0 is the pink panel's top-left corner.
   Each canvas then places the block and scales it — desktop at 1 from
   (411, 5426), mobile at 0.5155 from (26, 4782). The mobile table is that
   same table scaled, not a second design: run the desktop rule rows through
   0.5155 and they land on 5060 / 5123 / 5185 / 5253, which is where the
   render draws them. */
.bel-s5-table {
	position: absolute;
	width: 764px;
	height: 1083px;
	transform-origin: top left;
}
.bel-s5-table > * { position: absolute; }

/* The cream panel is 764 wide and starts at the same x as the pink one; the
   pink panel is painted over its left half, and that overlap is what makes the
   two columns. Order matters, so the template keeps it too. */
.bel-s5-table__now {
	left: 0;
	top: 63px;
	width: 764px;
	height: 943px;
	box-sizing: border-box;
	border: 1px solid #ff7700;
	border-radius: 20px;
	background: linear-gradient( to right, #fff 56.977%, #fff3d9 98.626% );
	backdrop-filter: blur( 50px );
	-webkit-backdrop-filter: blur( 50px );
}
/* Figma's export gives this node a border and no fill — the gradient it is
   actually drawn with did not survive. Measured off the render instead: light
   at the top right, dark at the bottom left. */
.bel-s5-table__after {
	left: 0;
	top: 0;
	width: 427px;
	height: 1083px;
	box-sizing: border-box;
	border: 1px solid #9e5c6b;
	border-radius: 20px;
	background: linear-gradient( 200deg, #e39aaa 0%, #975765 100% );
}

/* White at 18% over the pink, which is why it reads as a lighter plate rather
   than a white one. */
.bel-s5-table__plate {
	left: 53px;
	top: 51px;
	width: 328px;
	height: 103px;
	border-radius: 30px;
	background: rgba( 255, 255, 255, 0.18 );
	backdrop-filter: blur( 150px );
	-webkit-backdrop-filter: blur( 150px );
	box-shadow: 0 4px 4px rgba( 0, 0, 0, 0.25 );
}

.bel-s5-table__head {
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 45px;
	line-height: normal;
	text-align: center;
}
/* The gradient is Figma's own, off the node's style attribute. */
.bel-s5-table__head--after {
	left: 37px;
	top: 76px;
	width: 363px;
	background: linear-gradient( 89.353deg, #000 12.819%, #666 85.893% );
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}
.bel-s5-table__head--now { left: 525px; top: 99px; width: 175px; color: #000; }

/* Both columns are right-aligned on two fixed edges. The widths are per row
   because they are what makes a row wrap where Figma wraps it — give them all
   one width and rows one, two and five change shape. */
.bel-s5-table__cell {
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	/* 24, not Figma's 22 — asked for, to make the rows easier to read. */
	font-size: 24px;
	line-height: normal;
	text-align: right;
}
.bel-s5-table__cell--now { color: #000; }
.bel-s5-table__cell--after { color: #fff; }

.bel-s5-table__cell--now-1 { left: 461px; top: 205px; width: 281px; }
.bel-s5-table__cell--now-2 { left: 506px; top: 328px; width: 236px; }
.bel-s5-table__cell--now-3 { left: 455px; top: 457px; width: 287px; }
.bel-s5-table__cell--now-4 { left: 477px; top: 585px; width: 265px; }
.bel-s5-table__cell--now-5 { left: 516px; top: 705px; width: 226px; }
.bel-s5-table__cell--now-6 { left: 529px; top: 828px; width: 213px; }
.bel-s5-table__cell--now-7 { left: 477px; top: 945px; width: 265px; }

.bel-s5-table__cell--after-1 { left: 136px; top: 220px; width: 232px; }
.bel-s5-table__cell--after-2 { left:  20px; top: 337px; width: 348px; }
.bel-s5-table__cell--after-3 { left: 102px; top: 453px; width: 266px; }
.bel-s5-table__cell--after-4 { left: 116px; top: 588px; width: 252px; }
.bel-s5-table__cell--after-5 { left: 154px; top: 683px; width: 214px; }
.bel-s5-table__cell--after-6 { left: 153px; top: 826px; width: 215px; }
.bel-s5-table__cell--after-7 { left: 133px; top: 945px; width: 235px; }

/* 748x1 at #9a9a9a, crossing both columns. */
.bel-s5-table__rule { left: 19px; width: 748px; height: 1px; background: #9a9a9a; }
.bel-s5-table__rule--top { top: 175px; }
.bel-s5-table__rule--2 { top: 297px; }
.bel-s5-table__rule--3 { top: 418px; }
.bel-s5-table__rule--4 { top: 540px; }
.bel-s5-table__rule--5 { top: 662px; }
.bel-s5-table__rule--6 { top: 783px; }
.bel-s5-table__rule--7 { top: 914px; left: 26px; }

/* --- one card, three variants ------------------------------------------ */
/* Each card is two rectangles. Figma exports only the back one — the pale card
   in front did not come through — but the render shows both: the back slab at
   the exported position, and the pale card offset 17 right and 29 down from it,
   so the slab shows as a coloured edge along the top and the left.

   The card element paints nothing itself. The slab is ::before and the pale
   card is ::after, which stacks them in tree order — a z-index on a pseudo
   element would have dropped the slab behind the section instead. */
.bel-s8-card { position: absolute; height: 644px; }
.bel-s8-card::before,
.bel-s8-card::after {
	content: '';
	position: absolute;
	border-radius: 15px;
}
/* The slab sits square behind a panel that is SHEARED off it. This was an
   ordinary offset — the panel pushed down and right — which draws an even
   coloured band along two sides and reads as a border. The render draws
   something else: the coloured band is fat at the top-left and runs out to
   nothing around 55% across, because the panel's top edge climbs to the right
   while its left edge stays vertical. A rotation cannot do that — it would
   tilt both edges by the same angle — so the panel is sheared, not turned.
   Measured off the render: the top edge climbs 37px over 246px, which is the
   7° here. The shear also lifts the panel's bottom-right corner clear of the
   slab, which is where the second wedge of colour comes from. */
.bel-s8-card::before { inset: 0; background: var( --bel-s8-slab ); }
.bel-s8-card::after {
	/* Negative on the right and the bottom: the transform pivots at the panel's
	   top-left, so it drags the far edges up and in. The panel is cut oversize
	   there and the transform brings it back to the card's own edge — measured
	   against the render, the colour left showing down the right side runs
	   4-11-18-24px where the render has 4-12-19-25. */
	inset: 42px -22px -55px 23px;
	/* Turned AND sheared. The render's two edges do not agree on an angle —
	   the panel's top edge climbs 9.6° to the right while its left edge leans
	   only 4.8° — and no single rotation can produce that, because a rotation
	   moves both by the same amount. The rotation supplies the 4.8° the left
	   edge needs and the shear adds the rest to the top edge. Measured against
	   the render at six points, this lands within 3px at every one. */
	transform: rotate( 4.8deg ) skewY( -14.4deg );
	transform-origin: left top;
	box-sizing: border-box;
	border: var( --bel-s8-border );
	background-image:
		linear-gradient( rgba( 255, 255, 255, 0.82 ), rgba( 255, 255, 255, 0.82 ) ),
		var( --bel-s8-fill );
}
.bel-s8-card > * { position: absolute; z-index: 1; }

.bel-s8-card__plate {
	left: 50%;
	transform: translateX( -50% );
	top: 64px;
	width: 328px;
	height: 103px;
	border-radius: 30px;
	background: rgba( 255, 255, 255, 0.18 );
	backdrop-filter: blur( 150px );
	-webkit-backdrop-filter: blur( 150px );
	box-shadow: 0 4px 4px rgba( 0, 0, 0, 0.25 );
}
.bel-s8-card__title {
	left: 50%;
	transform: translateX( -50% );
	width: 272px;
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	font-size: 25px;
	line-height: normal;
	color: #000;
	text-align: center;
}
.bel-s8-card__line1,
.bel-s8-card__line2,
.bel-s8-card__body {
	left: 50%;
	transform: translateX( -50% );
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	color: #000;
	text-align: center;
	white-space: pre-wrap;
}
.bel-s8-card__line1 { width: 221px; }
.bel-s8-card__line2 { width: 182px; top: 300px; }
.bel-s8-card__body { width: 308px; }

/* 337x1, mauve, fading out at both ends — Figma's own stops. */
.bel-s8-card__rule {
	left: 50%;
	transform: translateX( -50% );
	width: 337.024px;
	height: 1px;
	background: linear-gradient( to right,
		rgba( 158, 92, 107, 0 ) 2.4%,
		#9e5c6b 56.7%,
		rgba( 158, 92, 107, 0 ) 100% );
}
.bel-s8-card__rule--1 { top: 276px; }
.bel-s8-card__rule--2 { top: 352px; }

/* The three fills. Two of the slabs are one flat colour end to end; the third
   runs gold at the top into pink at the bottom, which is why it is a gradient
   and the other two are not. */
.bel-s8-card--1 {
	--bel-s8-fill: linear-gradient( 180deg, #fff 1.9231%, #e8bf69 52.404%, #826320 100% );
	--bel-s8-slab: #e8bf69;
	--bel-s8-border: 2px solid #e8bf69;
}
.bel-s8-card--2 {
	--bel-s8-fill: linear-gradient( 180deg, #fff 1.9231%, #f0a5b6 52.404%, #9e5c6b 100% );
	--bel-s8-slab: #f0a5b6;
	--bel-s8-border: 2px solid #f0a5b6;
}
.bel-s8-card--3 {
	--bel-s8-fill: linear-gradient( 180deg, #9e5c6b 1.9231%, #e8bf69 100% );
	--bel-s8-slab: linear-gradient( 180deg, #c3a055, #f0a5b6 );
	--bel-s8-border: 3px solid #c3a055;
}
.bel-s8-card--1 .bel-s8-card__title { top:  88px; }
.bel-s8-card--2 .bel-s8-card__title { top: 100px; }
.bel-s8-card--3 .bel-s8-card__title { top: 103px; }
.bel-s8-card--1 .bel-s8-card__line1 { top: 217px; width: 182px; }
.bel-s8-card--2 .bel-s8-card__line1 { top: 198px; }
.bel-s8-card--3 .bel-s8-card__line1 { top: 201px; }
.bel-s8-card--1 .bel-s8-card__body { top: 391px; }
.bel-s8-card--2 .bel-s8-card__body { top: 391px; }
.bel-s8-card--3 .bel-s8-card__body { top: 334px; }

.bel-s9-row {
	position: absolute;
	border-radius: 8px;
	background: rgba( 255, 255, 255, 0.1 );
	backdrop-filter: blur( 50px );
	-webkit-backdrop-filter: blur( 50px );
	box-shadow: 0 10px 30px rgba( 0, 0, 0, 0.25 );
}
.bel-s9-row > * { position: absolute; }
.bel-s9-row__title {
	top: 22px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 30px;
	line-height: normal;
	color: #000;
}
.bel-s9-row__body {
	top: 62px;
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	color: #000;
	white-space: pre-wrap;
}

/* ---------- A wall that keeps each picture's own shape ------------------
   These are screenshots of conversations, not photographs, and the two want
   opposite things. Covering one 259x561 box with all of them threw away up to
   39% of a picture's WIDTH — which on a screenshot is the sender's name down one
   edge and the timestamps down the other, so every card showed a column of
   half-words.

   So the row fixes the one dimension a row needs — its height — and each card
   takes its width from its own picture. That is the ordinary photo-wall layout:
   nothing is cropped, the strip still reads as a strip, and a screenshot from a
   different phone needs no code.

   The ratio is a custom property the renderer prints from the file itself, so
   the row is the right shape at first paint rather than after the pictures
   arrive. The fallback is the design's own 259x561, for a picture whose file
   cannot be read — a URL on someone else's server. */
.bel-wall--natural .bel-wall-photo {
	flex: 0 0 auto;
	width: auto;
	/* Shorter than the row it sits in, and centred in what is left. 561 is the
	   design's box for a photograph; these are pages of somebody's handwriting,
	   and at 561 only three and a half of them fit across the frame. The row
	   keeps its own height so nothing below it moves. */
	height: var( --bel-card-h, 470px );
	align-self: center;
	aspect-ratio: var( --bel-ar, 259 / 561 );
	background: transparent;
}

/* The row runs off both edges — but a photograph cut in half reads as one that
   continues, and a screenshot cut in half reads as a mistake. So the edges melt
   into the page instead of being sliced by it.

   White, not a mask: masking the scroller would put it on its own compositing
   layer, and a composited layer inside the canvas's `scale()` is rasterised at
   the wrong resolution — which shows up as exactly the softness these
   screenshots cannot afford. The page behind is white here; a background that
   ever stops being white changes this one colour.

   `rgba(255,255,255,0)`, not `transparent`: the keyword is transparent BLACK,
   and interpolating white to it draws a grey bruise down the middle of the
   gradient in engines that do not premultiply. */
.bel-wall--natural::before,
.bel-wall--natural::after {
	content: '';
	position: absolute;
	top: 0;
	bottom: 0;
	width: var( --bel-fade, 90px );
	pointer-events: none;   /* the row still scrolls under it */
	z-index: 2;
}
.bel-wall--natural::before {
	left: 0;
	background: linear-gradient( to right, #fff 12%, rgba( 255, 255, 255, 0 ) );
}
.bel-wall--natural::after {
	right: 0;
	background: linear-gradient( to left, #fff 12%, rgba( 255, 255, 255, 0 ) );
}
/* White screenshots on a white page have no edges, so seven testimonials read as
   one wall of text — which is most of why the row still looked broken after the
   cropping was fixed. A hairline and a soft shadow are enough to say "seven
   things", and they sit on the card rather than the picture so a screenshot with
   its own background is not double-framed. */
.bel-wall--natural .bel-wall-photo {
	box-shadow: 0 2px 14px rgba( 60, 40, 20, 0.10 ), 0 0 0 1px rgba( 60, 40, 20, 0.07 );
}

/* A card is a picture of text at a third of its size — legible only once it is
   opened. The cursor said so to a mouse and to nobody else. */
.bel-wall-photo__open {
	position: absolute;
	left: 10px;          /* physical: a logical property flips to the far side in RTL */
	bottom: 10px;
	width: 34px;
	height: 34px;
	border-radius: 50%;
	background: rgba( 255, 255, 255, 0.94 ) url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%239f6739%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%3E%3Ccircle%20cx%3D%2210.5%22%20cy%3D%2210.5%22%20r%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M15.5%2015.5L21%2021%22%2F%3E%3Cpath%20d%3D%22M10.5%207.8v5.4M7.8%2010.5h5.4%22%2F%3E%3C%2Fsvg%3E") center / 18px 18px no-repeat;
	box-shadow: 0 2px 10px rgba( 60, 40, 20, 0.22 );
	pointer-events: none;   /* the whole card is the button */
	transition: transform .25s cubic-bezier(.22,.61,.36,1);
}
.bel-stage--mobile .bel-wall-photo__open { width: 30px; height: 30px; background-size: 16px 16px; }
.bel-wall-photo[data-image-lightbox]:hover .bel-wall-photo__open,
.bel-wall-photo[data-image-lightbox]:focus-visible .bel-wall-photo__open { transform: scale( 1.12 ); }
@media ( prefers-reduced-motion: reduce ) {
	.bel-wall-photo__open { transition: none; }
}

/* The two cards at the ends of the row are never cut, so nothing there needs
   fading — and a card the fade reaches is a card washed out for no reason. The
   row is held clear of both strips by exactly their width, which also stops the
   first card from starting under the arrow. */
.bel-wall--natural .bel-wall-photo:first-child { margin-inline-start: var( --bel-fade, 90px ); }
.bel-wall--natural .bel-wall-photo:last-child { margin-inline-end:   var( --bel-fade, 90px ); }

/* The arrows sit in the faded strip, so they belong above it. */
.bel-wall--natural .bel-wall__arrow { z-index: 3; }
.bel-wall--natural .bel-wall-photo img {
	width: 100%;
	height: 100%;
	object-fit: contain;
}
/* A screenshot at card size is a picture of text, not text. The card opens it
   full size, which is the only way the words on it can actually be read. */
.bel-wall--natural .bel-wall-photo[data-image-lightbox] { cursor: zoom-in; }
.bel-wall--natural .bel-wall-photo[data-image-lightbox]:focus-visible {
	outline: 3px solid #9f6739;
	outline-offset: 3px;
}

.bel-s12-card { position: absolute; border-radius: 15px; box-sizing: border-box; }
.bel-s12-card > * { position: absolute; }
.bel-s12-card__plate {
	left: 50%;
	transform: translateX( -50% );
	width: 328px;
	border-radius: 30px;
	background: rgba( 255, 255, 255, 0.18 );
	backdrop-filter: blur( 150px );
	-webkit-backdrop-filter: blur( 150px );
	box-shadow: 0 4px 4px rgba( 0, 0, 0, 0.25 );
}
.bel-s12-card__title {
	left: 50%;
	transform: translateX( -50% );
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 22px;
	line-height: normal;
	color: #000;
	text-align: center;
}
.bel-s12-card__body {
	left: 50%;
	transform: translateX( -50% );
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	color: #000;
	text-align: center;
	white-space: pre-wrap;
}
.bel-s12-card--fit {
	border: 2px solid #f0a5b6;
	background-image:
		linear-gradient( rgba( 255, 255, 255, 0.82 ), rgba( 255, 255, 255, 0.82 ) ),
		linear-gradient( 180deg, #fff 1.9231%, #f0a5b6 52.404%, #9e5c6b 100% );
}
/* Figma states this one as a flat #d3d3d3 under the same white wash. */
.bel-s12-card--nofit {
	border: 2px solid #cecece;
	background-image:
		linear-gradient( rgba( 255, 255, 255, 0.82 ), rgba( 255, 255, 255, 0.82 ) ),
		linear-gradient( #d3d3d3, #d3d3d3 );
}

.bel-faq { position: absolute; }
/* Figma leaves a wider gap under the open row than under a closed one — 30
   against 23 on desktop, 20 against 11 on mobile — so the two are separate. */
/* The row is a two-track grid so the answer can open to whatever height its own
   copy needs. The alternative — animating max-height — means picking a number
   big enough for the longest answer anyone might ever type, and every answer
   shorter than that opens with a pause at the end while the transition runs out
   the leftover. 0fr to 1fr has no number in it. */
.bel-faq__row {
	display: grid;
	grid-template-rows: auto 0fr;
	/* Named because front.js reads them: it has to know what an open row
	   costs before one is open, to reserve the height in advance. */
	margin-bottom: var( --bel-faq-gap, 23px );
	transition: grid-template-rows 380ms cubic-bezier( 0.2, 0.8, 0.2, 1 ),
	            margin-bottom 380ms cubic-bezier( 0.2, 0.8, 0.2, 1 );
}
.bel-faq__row.is-open { grid-template-rows: auto 1fr; margin-bottom: var( --bel-faq-gap-open, 30px ); }
.bel-faq__q {
	display: flex;
	align-items: center;
	justify-content: flex-start;
	width: 100%;
	box-sizing: border-box;
	margin: 0;
	border: 0;
	border-radius: 15px;
	background: #f0a5b6;
	color: #000;
	text-align: right;
	cursor: pointer;
}
.bel-faq__q[disabled] { cursor: default; }
/* The track: no look of its own, and min-height:0 so a grid item is actually
   allowed to shrink below its content — without it the row will not collapse. */
.bel-faq__a {
	overflow: hidden;
	min-height: 0;
	/* Clipped to zero is still readable by a screen reader, so the closed
	   answer is taken out of the tree as well. The delay holds it visible for
	   the length of the collapse and drops it at the end; opening restores it
	   with no delay at all. */
	visibility: hidden;
	transition: visibility 0s linear 380ms;
}
.bel-faq__row.is-open .bel-faq__a { visibility: visible; transition-delay: 0s; }
/* The panel: everything the design says an answer looks like. It keeps its full
   height at all times and is simply clipped by the track above. */
.bel-faq__panel {
	box-sizing: border-box;
	/* The client writes some answers as two or three lines. They arrive as
	   newlines in one text field, and this is what makes them lines. */
	white-space: pre-line;
	border-radius: 15px;
	background: #9e5c6b;
	color: #fff;
}


/* --- the privacy consent -------------------------------------------------
   Not in the Figma frame — added because the form must not send without it.
   Desktop drops it into the gap the design already leaves between the message
   field and the button; mobile has no such gap, so its panel grows by 40px and
   the button moves down with it. */
/* justify-content, because the label is a flex item and shrinks to its text:
   left alone it sat at the field's left edge while the inputs above it ran
   to the right one. The field is ltr (the canvas is), so flex-end is right. */
.bel-field--consent { display: flex; align-items: center; justify-content: flex-end; }
.bel-consent {
	display: flex;
	align-items: center;
	gap: 10px;
	/* The canvas is ltr because Figma's coordinates are, which put this row's
	   box on the left of its own Hebrew. The row is read right to left. */
	direction: rtl;
	cursor: pointer;
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	color: #000;
	line-height: 1.2;
}
.bel-consent input { position: absolute; opacity: 0; width: 0; height: 0; }
.bel-consent__box {
	flex: 0 0 auto;
	width: 20px;
	height: 20px;
	border: 2px solid #9e5c6b;
	border-radius: 5px;
	background: #fff;
	position: relative;
	transition: background .15s, border-color .15s;
}
.bel-consent input:checked + .bel-consent__box { background: #9e5c6b; }
.bel-consent input:checked + .bel-consent__box::after {
	content: '';
	position: absolute;
	left: 5.5px; top: 1.5px;
	width: 5px; height: 10px;
	border: solid #fff;
	border-width: 0 2.5px 2.5px 0;
	transform: rotate( 45deg );
}
/* Visible focus, because the box itself is a styled span. */
.bel-consent input:focus-visible + .bel-consent__box { outline: 2px solid #9e5c6b; outline-offset: 2px; }
.bel-consent__text a { color: inherit; text-decoration: underline; }

/* Until it is ticked the button reads as unavailable rather than silently
   failing on submit. */
.bel-form .bel-field--submit button[disabled] { opacity: 0.45; cursor: not-allowed; }

/* The CTAs jump to the form, and a jump of ten thousand pixels with no motion
   reads as a page change rather than a scroll. scroll-margin keeps the panel
   clear of the very top edge when it lands. */
html { scroll-behavior: smooth; }
@media ( prefers-reduced-motion: reduce ) {
	html { scroll-behavior: auto; }
}

#bel-form-panel-d, #bel-form-panel-m { scroll-margin-top: 60px; }

/* Someone who has asked their OS for less motion still gets a working
   accordion — it simply opens at once instead of easing. */
@media ( prefers-reduced-motion: reduce ) {
	.bel-faq__row { transition: none; }
}


/* ---------- Video lightbox ---------------------------------------------
   The section-2 cards are portrait and the uploads are 16:9 with the picture
   padded into the middle. Playing inside the card would box an already-boxed
   frame down to nothing, so the click opens the player at the shape it wants,
   over the page. */
.bel-lightbox {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 24px;
	background: rgba( 11, 10, 10, 0.88 );
	backdrop-filter: blur( 6px );
	animation: bel-lightbox-in 220ms ease-out;
}
@keyframes bel-lightbox-in { from { opacity: 0; } to { opacity: 1; } }
.bel-lightbox__frame {
	position: relative;
	width: min( 1100px, 92vw );
	aspect-ratio: 16 / 9;
	max-height: 84vh;
	background: #000;
	border-radius: 10px;
	overflow: hidden;
	box-shadow: 0 30px 80px rgba( 0, 0, 0, 0.55 );
}
.bel-lightbox__frame iframe,
.bel-lightbox__frame video { display: block; width: 100%; height: 100%; border: 0; }
.bel-lightbox__close {
	position: absolute;
	top: -46px;
	inset-inline-end: 0;
	width: 38px;
	height: 38px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba( 255, 255, 255, 0.15 );
	color: #fff;
	font-size: 22px;
	line-height: 38px;
	cursor: pointer;
}
.bel-lightbox__close:hover { background: rgba( 255, 255, 255, 0.28 ); }
/* A picture sets its own shape and, as far as the window allows, its own size.
   The frame is 16:9 for a player because that is the shape of the footage; for a
   screenshot it is whatever the screenshot is.

   Only the WIDTH is capped. Capping the height too drew an 888x1446 conversation
   at 516 wide — 58% of the pixels it has, which is most of the way back to the
   unreadable card this overlay exists to escape. Width alone means a desktop
   gets the screenshot at its own size and scrolls down it, and a phone, where
   nothing fits at full width, gets the whole thing at once. */
.bel-lightbox--image {
	overflow-y: auto;
	align-items: flex-start;
	padding: 56px 24px 40px;
	overscroll-behavior: contain;
}
.bel-lightbox--image .bel-lightbox__frame {
	width: auto;
	height: auto;
	aspect-ratio: auto;
	max-width: 100%;
	max-height: none;
	margin: auto;            /* centres one that fits, top-aligns one that does not */
	overflow: visible;       /* the radius belongs to the picture now, not the frame */
	background: transparent;
	box-shadow: none;
}
.bel-lightbox--image .bel-lightbox__frame img {
	display: block;
	width: auto;
	height: auto;
	max-width: 100%;
	max-height: none;
	border-radius: 10px;
	box-shadow: 0 30px 80px rgba( 0, 0, 0, 0.55 );
}
/* Fitted to the width is the default; a tap asks for the file's own pixels, and
   the overlay pans in both directions while it is showing them. The class is set
   by front.js, and only when there is more picture to show. */
.bel-lightbox--image.can-zoom .bel-lightbox__frame img { cursor: zoom-in; }
.bel-lightbox--image.is-full { overflow: auto; }
.bel-lightbox--image.is-full .bel-lightbox__frame { max-width: none; }
.bel-lightbox--image.is-full .bel-lightbox__frame img {
	max-width: none;
	cursor: zoom-out;
}
/* The close button hangs above the frame, and the frame's top is now the top of
   the scroll area — so it pins to the corner of the window instead. */
.bel-lightbox--image .bel-lightbox__close {
	position: fixed;
	top: 12px;
	inset-inline-end: 12px;
	background: rgba( 255, 255, 255, 0.22 );
}
/* Nothing behind the overlay should scroll while it is open. */
body.bel-lightbox-open { overflow: hidden; }
@media ( prefers-reduced-motion: reduce ) {
	.bel-lightbox { animation: none; }
}


/* The card is a button whose only visible content is a picture, so its name
   has to be text a screen reader can read and a sighted visitor cannot see. */
.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}
.bel-tyh .bel-tyh__pill-light { font-weight: 300; }

/* ---- The vertical rhythm, without the portrait to fill it ----------------
   The hero leaves 247px between the gold line and the paragraph, and that gap
   is the top of the portrait. Keep the hero's tops with no portrait in them and
   the column reads as one with a hole punched through it.

   So the gold line comes down to 95px above the paragraph, and everything below
   the paragraph keeps the hero's own offsets from it — the bar at +213, its text
   at +235, the arrow disc at +408, the plate at +421, the label at +442. Those
   five are the hero's rhythm and are not touched here; only where the group
   sits is.

   The block is then centred in the canvas, which is what decides the canvas
   height: 35 of gold + 95 of gap + 506 of group = 636, and 900 leaves 132 above
   and below. The phone's hero is already tight — 50px between its gold line and
   its paragraph — so it only moves down as a whole to centre 429 in 490. */
/* --bel-tyh-top is where the frosted bar starts, and front.js writes it from
   where the paragraph actually ENDS. The hero's tops assume the hero's
   paragraph — seven lines — so reproducing them under a three-line one left
   109px of hole, and tightening them by hand would fix this copy and print the
   next one straight through the bar. The client edits this text.

   Everything in the group keeps the hero's own offsets from the bar: its text at
   +22, the arrow disc at +195, the plate at +208, the label at +229. Only where
   the group begins is measured.

   The fallbacks are the tops that suit the copy shipping today, so the page is
   right before any JS runs and stays right if none ever does. --bel-tyh-air is
   the space above the gold line, which front.js also uses as the space below the
   button — that is what keeps the column centred at any length. */
.bel-tyh .bel-hero-canvas { --bel-tyh-air: 132px; --bel-tyh-gap: 40px; }

/* The phone's own offsets from its bar: text +22, disc +110, plate +118.29,
   label +132. Its column is narrower, so the copy runs longer and the gap can
   be smaller. */
.bel-tyh .bel-stage--mobile .bel-hero-canvas,
.bel-tyh.bel-stage--mobile .bel-hero-canvas { --bel-tyh-air: 30px; --bel-tyh-gap: 28px; }
/* ---- the button follows the paragraph ----------------------------------
   front.js has been computing --bel-tyh-top since this page was written —
   where the group under the paragraph should start — AND NOTHING READ IT.
   The button stayed at the hero's coordinate, which assumes the hero's
   seven-line paragraph. Measured with the copy shipping now: the paragraph
   ended at 471 and the button began at 457. They overlapped, and one more
   line would have printed the text through the button.

   The three desktop nodes keep the hero's own relationships to each other —
   the label 21px below the plate, the disc 12px below it — so only where the
   group begins is measured. The fallbacks are the hero's own coordinates, so
   the page is right in the first layout pass and stays right if the script
   never runs.

   The client edits this copy, which is the whole reason this is measured
   rather than placed. */
.bel-tyh .d-hero__cta-plate,
.bel-tyh .d-hero__hit   { top: var( --bel-tyh-top, 457px ); }
.bel-tyh .d-hero__cta-label { top: calc( var( --bel-tyh-top, 457px ) + 21px ); }
.bel-tyh .d-hero__cta-arrow { top: calc( var( --bel-tyh-top, 457px ) + 12px ); }
/* The phone's is one element, so there is nothing to keep in step. */
.bel-tyh .m-hero__cta { top: var( --bel-tyh-top, 352px ); }

/* One screen: the stage has no sections below the hero. */
.bel-tyh .bel-rest-stage { display: none; }


/* ==========================================================================
   DESKTOP — 1728 x 11808 (Figma node 689:2)
   Every value below is a literal Figma coordinate. Nothing here is eyeballed.
   ========================================================================== */

/* --- The page's heading ---------------------------------------------------
   A DELIBERATE DEPARTURE FROM FIGMA, at the client's request and with the
   difference understood. Figma gives each section its own heading: 45px in the
   hero, 55 in the questions, 70 in "what we learn", and two different middle
   stops in the gold — #edcc7d above, #d9bb72 below. Every heading on this page
   is the hero's instead.

   The gradient is painted THROUGH the glyphs, so the text itself has to be
   transparent; a colour here would hide it. `background-clip: text` needs the
   -webkit- prefix to reach Safari.

   Sections state only WHERE their heading sits — top, width, side. Nothing
   about how it looks is written twice, which is what makes every section still
   to be built inherit this without being told. */
.bel-title {
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	/* 36, not the hero's 45. The hero is contain-scaled to the screen's
	   height and the body below it is not, so at an ordinary window the
	   hero's 45px lands at roughly 33 on screen while a section's lands at
	   45 — the same number reading a third larger. This is the size that
	   makes them match; the hero overrides it back to 45 in its own block. */
	font-size: 36px;
	line-height: normal;
	text-align: center;
	background: linear-gradient( to right, #d89948 28.951%, #edcc7d 66.184%, #d89948 100% );
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

/* --- Section 1 — hero (718:2), 1728 x 1250 ------------------------------- */
/* Figma's own numbers throughout. The hero fits a screen because the canvas
   is contained in both directions — not because anything here was made
   smaller by hand. */
.d-hero {
	position: absolute;
	left: 0;
	top: 0;
	width: 1728px;
	height: 1250px;
	/* NOT overflow:hidden. The band across the top is deliberately wider than
	   the canvas — it has to reach the window edges when the column is
	   narrower than the window — and a clip here painted it exactly canvas-
	   wide while getBoundingClientRect() still reported it full width. A box
	   measurement cannot see a clip; only the pixels can. Nothing else in the
	   hero overflows: the ground moved to the stage. */
	overflow: visible;
	/* No ground of its own: the stage paints the picture and this sits on top
	   of it. A fill here would cover the picture wherever the column is
	   narrower than the window. */
	background: transparent;
}

/* Figma draws the ground 1206 tall inside a 1250 frame and scales the picture
   to 107.46% of that height — both its own numbers. */

/* Figma draws this band edge to edge. A contained hero is narrower than the
   window, so it is widened by exactly the shortfall on each side —
   --bel-hero-bleed, written by fit(), and zero whenever the canvas already
   fills the width. */
.d-hero__bar {
	position: absolute;
	left: calc( 0px - var( --bel-hero-bleed, 0px ) );
	top: 0;
	width: calc( 1728px + 2 * var( --bel-hero-bleed, 0px ) );
	height: 68px;
	background: #edc995;
}
.d-hero__bar-text {
	position: absolute;
	left: calc( 50% - 583px );
	top: 20px;
	white-space: nowrap;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 35px;
	line-height: normal;
	color: var( --bel-title-dark, #000 );
}

/* Gold gradient type: the gradient is painted THROUGH the glyphs, so the text
   itself has to be transparent. A colour here would hide the gradient.
   Figma's stops: #d89948 at 28.951%, #edcc7d at 66.184%, #d89948 at 100%. */
.d-hero__gold {
	position: absolute;
	/* The design's box. The large lit headline is .d-hero__gold--feature, which
	   a page opts into: on a long headline 68px ran over the paragraph. */
	left: calc( 50% - 565.5px );
	top: 162px;
	width: 1131px;
	font-size: 45px;   /* the hero is drawn at its own scale — see .bel-title */
}

.d-hero__body {
	position: absolute;
	left: calc( 50% - 588px );
	top: 295px;
	width: 1176px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 35px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
}

/* The button. Figma's gradient is five stops across 89.96deg, which at this
   width is indistinguishable from a horizontal one. */
.d-hero__cta-plate {
	position: absolute;
	/* 850 rather than Figma's 754, at the client's request. Measured before
	   it was changed: the label's ink ended 2px from the arrow disc and 47px
	   from the far edge, and it is that lopsidedness that reads as cramped
	   rather than the width itself. Everything inside is placed off this
	   number. */
	left: calc( 50% - 425px );   /* Figma: -377 */
	top: 457px;
	width: 850px;                /* Figma: 754 */
	height: 101px;
	border-radius: 50.5px;
	background: linear-gradient( to right,
		#9902d4 3.055%, #e39dff 28.717%, #9902d4 52.226%, #e39dff 75.954%, #9902d4 98.815% );
}
.d-hero__cta-label {
	position: absolute;
	/* The middle of the room beside the disc: the box starts one inset after
	   the disc and ends one inset before the button, so centring the text in
	   it leaves the same gap on both sides of the words. */
	left: calc( 50% - 324px );   /* 439 + 12 + 77 + 12 */
	top: 478px;
	width: 737px;                /* 850 − 77 − 36 */
	height: 57px;
	font-family: 'Birzia', sans-serif;
	font-weight: 900;
	font-size: 35px;
	line-height: normal;
	text-align: center;
	color: #fff;
}
/* Figma mirrors the arrow and turns it 46.25deg. */
/* THE DISC IS CONCENTRIC WITH THE PILL'S ROUNDED END.
   The pill ends in a half-circle of radius (height / 2); putting the disc's
   centre on that same point leaves one even band of purple all the way
   round it. So the inset is (height − disc) / 2 — the SAME number left, top
   and bottom. It used to be 21 on the left against 12 above and below,
   which left three pixels of purple at the rounded end and read as jammed
   against it.
   The disc itself stays 76% of the button's height.

   the hero, plate 850x101 at 439,457 */
.d-hero__cta-arrow {
	position: absolute;
	left: calc( 50% - 413px );   /* plate 850x101 at 439 — end centre 489.5, disc centre 489.5 */
	top: 469px;
	width: 77px;
	height: 77px;
	display: flex;
	align-items: center;
	justify-content: center;
	pointer-events: none;
}
.d-hero__cta-arrow span { display: block; width: 100%; height: 100%; transform: rotate( 46.25deg ) scaleY( -1 ); }
.d-hero__cta-arrow span img { display: block; width: 100%; height: 100%; }
.d-hero__hit { position: absolute; left: calc( 50% - 425px ); top: 457px; width: 850px; height: 101px; display: block; }

/* Three 44px discs at 965, 987 and 1016 — Figma overlaps them by 22 and 29. */
/* .d-hero__faces — the three overlapping discs — removed at Ariel's request.
   The line below them carried a -45.5 offset that existed only to leave
   room for them, and that offset went with them. */

.d-hero__proof {
	position: absolute;
	/* Centred, full stop. The design's -45.5 was room for the three discs
	   beside it and they are gone; without removing it too the line would
	   simply sit off to one side.

	   620 rather than the design's 279: that box was drawn for a seven-word
	   line, and a page duplicated for another product carries whatever it
	   carries — measured at 575px here, which broke into two lines with three
	   words alone on the second. Centred and centre-aligned, so a wider box
	   moves nothing; the words stay on the same axis and stop wrapping. */
	left: calc( 50% - 310px );
	top: 599px;
	width: 620px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
}

.d-hero__devices { position: absolute; left: calc( 50% - 387px ); top: 625px; width: 774px; height: 581px; }
.d-hero__devices img { display: block; width: 100%; height: 100%; object-fit: contain; }


/* The page ground. Sampled off the Figma render at six points across four
   sections and identical at every one: #faf0e5. The hero paints its own
   picture over the top of it. */
/* THE GROUND BELONGS TO THE PAGE, not to the canvas.
   .bel-canvas is exactly the design's width and centred, so painting the
   cream there left a seam at each edge on any window wider than 1728 —
   measured at 1908: cream 90..1818, the theme's own background outside it.
   .bel-root is the page, so the page's colour goes there. The canvas keeps
   none of its own, which also stops it covering a section that bleeds. */
:root { --bel-ground: #faf0e5; }
/* was #fff — the white that showed either side of the canvas. */

/* --- Section 2 — the questions (718:3), page y 1250, 1728 x 936 ---------- */
.d-s2 { position: absolute; left: 0; top: 1250px; width: 1728px; height: 936px; }

/* Gold gradient type, as in the hero — the gradient is painted through the
   glyphs. This one's middle stop is #d9bb72, not the hero's #edcc7d. */
.d-s2__title {
	position: absolute;
	left: calc( 50% - 515px );      /* Figma: centre -0.5, width 1029 */
	/* 9 in the design, which put it directly under the gold diagonal that
	   ends the hero. The smaller type leaves the room to drop it. */
	top: 48px;
	width: 1029px;   /* Figma also set 55px here, and a #d9bb72 middle stop */
}
.d-s2__lead {
	position: absolute;
	left: calc( 50% - 291px );      /* Figma: centre -0.5, width 581 */
	top: 154px;
	width: 581px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
}

/* Each row is a 938x77 slot. The pill behind it is an SVG carrying its own
   blur and shadow, drawn 30px wider on each side and 20 above / 40 below —
   Figma's own insets, which is why it is placed rather than stretched. */
.d-s2__row { position: absolute; width: 938px; height: 77px; }
.d-s2__pill { position: absolute; left: -30px; top: -20px; width: 998px; height: 137px; max-width: none; display: block; }
/* Given the ROW and centred in it, rather than placed at a top.
   `top: 26px` was right for the one-line question the design drew; every
   question here runs to two, and a block placed by its top grows DOWNWARD —
   the second line ran 7px past the pill's lower edge with 26px of air above
   the first. Centred, one line and two both sit in the middle, and so will
   three the day somebody writes a longer one. */
.d-s2__q {
	position: absolute;
	top: 0;
	height: 77px;                   /* the row's own height */
	display: flex;
	align-items: center;
	justify-content: center;
	/* 820, not 606: a third of the pill's width was going unused, which is why
	   every question wrapped — and two lines take 58px in a pill that is 77
	   tall, so there was nowhere for them to go. 59 either side now, which is
	   the rounded end plus air. */
	width: 820px;
	left: calc( 50% - 397px );      /* the text sits 13px right of the pill's centre */
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
}

/* Three rows on the frame's centre, two 67px left of it. */
.d-s2__row--1 { left: calc( 50% - 469px ); top: 234px; }
.d-s2__row--2 { left: calc( 50% - 536px ); top: 346px; }
.d-s2__row--3 { left: calc( 50% - 469px ); top: 448px; }
.d-s2__row--4 { left: calc( 50% - 536px ); top: 560px; }
.d-s2__row--5 { left: calc( 50% - 469px ); top: 662px; }

.d-s2__close {
	position: absolute;
	left: calc( 50% - 402px );
	top: 774px;
	width: 804px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
}
/* Figma sets the first line in Modernist Bold and leaves an empty line under
   it before the rest — the blank line is the design's own spacing. */
.d-s2__close-a { font-weight: 700; margin: 0 0 1em; }
.d-s2__close-b { margin: 0; }


/* --- "מה נלמד" (718:5), page y 3700, 1728 x 1200 ------------------------- */
/* 1290, from 1200: ten pixels between each of the nine rows. Every section
   below is at an absolute page coordinate, so .d-s6, .d-s7 and DESKTOP_H
   move by the same 90. */
.d-s5 { position: absolute; left: 0; top: 3974px; width: 1728px; height: 1290px; }

/* Figma turns the band 0.36deg and draws it 115.251 tall inside a 126.03 box. */
/* Bled to the window, like section 3's — all three behave alike. */
.d-s5__band {
	position: absolute;
	left: calc( 50% - 864px - var( --bel-bleed, 0px ) - 1px );
	top: calc( 23px + ( 126.03px - 115.251px ) / 2 );
	width: calc( 1728px + 2 * ( var( --bel-bleed, 0px ) + 1px ) );
	height: 115.251px;
	transform: rotate( 0.36deg );
	background: linear-gradient( to right, #edc995, #fff );
}
.d-s5__title {
	position: absolute;
	left: calc( 50% - 446px );
	top: 53px;
	width: 892px;   /* Figma also set 70px here, and a #d9bb72 middle stop */
}

/* The panel SVG carries its own blur and shadow, drawn 30px wider each side and
   20 above / 40 below the 938x847 box — Figma's insets, so it is placed at
   those offsets rather than stretched to fit. */
/* The panel itself is no longer printed — see the note in desktop.php. The
   rule is kept because the asset ships and someone may put it back; it is
   the height the nine spaced cards need, not Figma's 907. */
.d-s5__panel { position: absolute; left: calc( 50% - 499px ); top: 226px; width: 998px; height: 986px; max-width: none; display: block; }

.d-s5__list { position: absolute; left: 0; top: 0; width: 1728px; margin: 0; padding: 0; list-style: none; }

/* One row, nine times. --bel-row is the step; every other value here is shared,
   which is the point of writing it once. */
.d-s5__row { position: absolute; left: 0; top: 0; width: 1728px; height: 0; }
/* Rounded, because a row with space around it is a card and a card has
   corners. --alt is the odd rows, which used to be the panel showing
   through — see the loop in desktop.php. */
.d-s5__bar  { position: absolute; left: 395px; top: calc( 246px + var( --bel-row ) ); width: 939px; height: 94px; background: #edc995; border-radius: 14px; }
/* Opaque now. The 78% was there to let the frosted panel through; with the
   panel gone it only let the page's cream through, and a card the colour of
   the gap beside it is not a card. */
.d-s5__bar--alt { background: #fffdfb; }
.d-s5__disc { position: absolute; left: 1259px; top: calc( 264px + var( --bel-row ) ); width: 59px; height: 59px; }
/* The circle SVG is 75x75 for a 59px disc — 8px of shadow on each side. */
.d-s5__disc img { position: absolute; left: -8px; top: -4px; width: 75px; height: 75px; max-width: none; display: block; }
.d-s5__num {
	position: absolute;
	left: 1266px;
	top: calc( 281px + var( --bel-row ) );
	width: 45px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 25px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
}
/* Both text columns are anchored to their RIGHT edge at 1238 — Figma writes
   that as `left: calc(50% + 374px)` with translateX(-100%). */
.d-s5__name,
.d-s5__desc {
	position: absolute;
	right: 490px;               /* 1728 - 1238 */
	text-align: right;
	color: var( --bel-title-dark, #000 );
	font-family: 'Tel Aviv Modernist', sans-serif;
	margin: 0;
}
.d-s5__name { top: calc( 269px + var( --bel-row ) ); width: 381px; font-weight: 700; font-size: 27px; line-height: normal; }
.d-s5__desc { top: calc( 304px + var( --bel-row ) ); width: 793px; font-weight: 400; font-size: 18px; line-height: normal; }


/* --- Section 3 — "ההדרכה והיתרונות" (718:4), page y 2186, 1728 x 1514 ----
   Figma wraps all of this in one clipped 1729x1466 box (689:6) and then leaves
   the sixth card (689:78) OUTSIDE it. Nothing here is actually clipped by that
   box except the last 4px of the background, so the box is not reproduced: the
   three pictures that hang off the left edge get their own frame, and the
   background is shortened by those 4px instead. Written that way because a
   clip is what hid the hero's bleeding band for a whole round of fixes.

   Element order below is Figma's paint order, which is also the order in the
   template — the woman has to paint over both photo prints. */
/* 1788 rather than 1514: a third row of cards. Every section below is placed
   at an absolute page coordinate, so .d-s5, .d-s6, .d-s7 and DESKTOP_H in
   class-bel-render.php all move by the same 274. */
.d-s3 { position: absolute; left: 0; top: 2186px; width: 1728px; height: 1788px; }

/* The swirl. Bled, because it is the only thing behind the section: without it
   a window wider than 1728 shows bare cream down both sides. 1298 rather than
   Figma's 1302 — the last 4px were clipped there and are dropped here. */
/* 1572, not the 1298 the design drew. That number ended the picture at 1466,
   48px short of the section it was drawn for — correct then. With a third row
   of cards the section is 1788 and the picture stopped in the middle of the
   block, leaving the last two cards on bare ground. Same 48px tail as before:
   1788 - 48 - 168. */
.d-s3__bg {
	position: absolute;
	left: calc( 50% - 868px - var( --bel-bleed, 0px ) - 1px );
	top: 168px;
	width: calc( 1736px + 2 * ( var( --bel-bleed, 0px ) + 1px ) );
	height: 1572px;
	border-radius: 40px;
	overflow: hidden;
}
.d-s3__bg img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* The frosted strip. Like every plate in this design the SVG carries its own
   blur and shadow and is drawn 30px wider each side, 20 above and 40 below the
   938x72 box — so it is placed at those offsets, never stretched to fit. */
.d-s3__eyebrow { position: absolute; left: calc( 50% - 173.5px ); top: 235px; width: 998px; height: 132px; max-width: none; display: block; }
.d-s3__eyebrow-text {
	position: absolute;
	left: calc( 50% - 7.5px );
	top: 281px;
	width: 667px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
}

/* Right-aligned, unlike the hero's. .bel-title says how a heading LOOKS; where
   it sits and which edge it hangs from stays the section's own business. */
.d-s3__title {
	position: absolute;
	left: calc( 50% - 186.5px );    /* Figma: right edge 1635.5, width 958 */
	top: 382px;
	width: 958px;
	text-align: right;
}
.d-s3__body {
	position: absolute;
	left: calc( 50% - 32.5px );     /* the same right edge, 1635.5 */
	top: 461px;
	width: 804px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 22px;
	line-height: normal;
	text-align: right;
	color: var( --bel-title-dark, #000 );
}

/* The purple button. Three nodes in Figma, none of them clickable, so one
   transparent hit area covers all of it — the hero's arrangement exactly. */
.d-s3__cta-plate {
	position: absolute;
	left: calc( 50% + 205px );
	top: 601px;
	width: 565px;
	height: 58px;
	border-radius: 50.5px;
	background: linear-gradient( 89.949deg, #9902d4 3.055%, #e39dff 28.717%, #9902d4 52.226%, #e39dff 75.954%, #9902d4 98.815% );
}
/* The label's box runs 70px past the plate's right edge, and the text is
   centred in it — which is what puts the words in the middle of the room the
   arrow disc leaves, rather than in the middle of the plate. Figma's own. */
.d-s3__cta-label {
	position: absolute;
	/* The middle of the room beside the disc: the box starts one inset after
	   the disc and ends one inset before the button, so centring the text in
	   it leaves the same gap on both sides of the words. */
	left: calc( 50% + 263px );   /* 1069 + 7 + 44 + 7 */
	top: 611px;
	width: 500px;                /* 565 − 44 − 21 */
	font-family: 'Birzia', sans-serif;
	font-weight: 900;
	font-size: 25px;
	line-height: normal;
	text-align: center;
	color: #fff;
}
/* section 3, plate 565x58 at 1069,601 — sized and placed from the plate: 76% of its height
   across, 21% of it in from the left, centred top to bottom. */
.d-s3__cta-arrow {
	position: absolute;
	left: calc( 50% + 212px );   /* plate 565x58 at 1069 — inset 7, the same as top and bottom */
	top: 608px;
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
	pointer-events: none;
}
.d-s3__cta-arrow span { display: block; width: 100%; height: 100%; transform: rotate( 46.25deg ) scaleY( -1 ); }
.d-s3__cta-arrow span img { display: block; width: 100%; height: 100%; }
.d-s3__hit { position: absolute; left: calc( 50% + 205px ); top: 601px; width: 565px; height: 58px; display: block; }

/* The three pictures that hang off the left edge of the frame. They are the
   only reason a clip exists at all, so it is put around them and nothing else.
   NOT bled: Figma cuts the woman at the frame edge and that cut is part of the
   composition — widening the clip would show 86px of her the design hides. */
/* pointer-events: none, and it matters more than it looks. This is a
   transparent 1728x1466 box painted LAST over the whole section so the
   portrait and the prints inside it are cut at the section's edge — and it
   also lay on top of the section's call to action. Measured at nine points
   across the button, the frame was on top at all nine. The button was not
   partly obstructed. It was dead, and the page looked perfectly fine.

   Anything aria-hidden wants this: "not for a screen reader" and "not for
   a pointer" are the same claim, and whichever one you write you meant
   both. */
.d-s3__frame { position: absolute; left: calc( 50% - 864px ); top: 0; width: 1728px; height: 1466px; overflow: hidden; pointer-events: none; }

/* Both prints are the same photograph, turned opposite ways. Figma centres the
   turned print inside a larger box, so the box is kept and the print centred
   in it — rotating in place would move it. */
.d-s3__print { position: absolute; display: flex; align-items: center; justify-content: center; }
.d-s3__print span { display: block; width: 209.174px; height: 321.221px; }
.d-s3__print img { display: block; width: 100%; height: 100%; object-fit: cover; }
.d-s3__print--r { left: 514px; top: 461px; width: 254.814px; height: 348.865px; }
.d-s3__print--r span { transform: rotate( 8.59deg ); }
.d-s3__print--l { left: -11.19px; top: 335.51px; width: 261.196px; height: 352.353px; }
.d-s3__print--l span { transform: rotate( -9.88deg ); }

/* The woman. Figma mirrors her — a 180 turn plus a vertical flip is a
   horizontal flip — and the mirror is applied to a box that already holds a
   crop, so the two have to stay separate: crop inside, mirror outside. */
.d-s3__her { position: absolute; left: -86px; top: 34px; width: 714px; height: 719px; transform: scaleX( -1 ); }
.d-s3__her span { position: absolute; inset: 0; overflow: hidden; display: block; }
.d-s3__her img { position: absolute; left: -165.72px; top: -0.29px; width: 908.49px; height: 1361.85px; max-width: none; display: block; }

/* The gold band, turned 0.36deg and drawn 115.251 tall inside a 126.007 box —
   the same construction as the one in "מה נלמד". Bled to the window. */
.d-s3__band {
	position: absolute;
	left: calc( 50% - 864px - var( --bel-bleed, 0px ) - 1px );
	top: calc( 738px + ( 126.007px - 115.251px ) / 2 );
	width: calc( 1728px + 2 * ( var( --bel-bleed, 0px ) + 1px ) );
	height: 115.251px;
	transform: rotate( 0.36deg );
	background: linear-gradient( to right, #edc995, #fff );
}
.d-s3__band-title {
	position: absolute;
	left: calc( 50% - 558.5px );
	top: 779px;
	width: 1116px;   /* Figma also set 55px here, and a #d9bb72 middle stop */
}

/* --- the six cards -------------------------------------------------------
   Slots are numbered in reading order — right to left, top row then bottom —
   so the list in the editor runs the way the page does. Every card is its own
   size in Figma, and the white panel behind it is an SVG carrying its own
   shadow, drawn 30px wider each side and 20 above / 40 below its box. */
.d-s3__card { position: absolute; }
.d-s3__card-panel { position: absolute; top: 51px; max-width: none; display: block; }
.d-s3__card-text {
	position: absolute;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	line-height: normal;
	text-align: right;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.d-s3__card-text b { font-weight: 700; }
/* One sprite sheet, three columns by two rows, shared with the phone —
   see .bel-cell. The window here is 154x141. */
.d-s3__card-icon { position: absolute; top: 0; width: 154px; height: 141px; overflow: hidden; }
/* The offsets live in .bel-cell--1..6, which the phone uses as well. */

.d-s3__card--1 { left: calc( 50% + 324px ); top: 873px;  width: 442px; height: 301px; }
.d-s3__card--1 .d-s3__card-panel { left: 2px;   width: 451px;     height: 238px; }
.d-s3__card--1 .d-s3__card-text  { left: 32px;  top: 131px; width: 375px; font-size: 22px; }
.d-s3__card--1 .d-s3__card-icon  { left: 288px; }

.d-s3__card--2 { left: calc( 50% - 267px ); top: 873px;  width: 499px; height: 287px; }
.d-s3__card--2 .d-s3__card-panel { left: 18px;  width: 492px;     height: 238px; }
.d-s3__card--2 .d-s3__card-text  { left: 57px;  top: 131px; width: 407px; font-size: 20px; }
.d-s3__card--2 .d-s3__card-icon  { left: 345px; }

.d-s3__card--3 { left: calc( 50% - 781px ); top: 864px;  width: 442px; height: 290px; }
.d-s3__card--3 .d-s3__card-panel { left: 2px;   width: 451px;     height: 238px; }
.d-s3__card--3 .d-s3__card-text  { left: 87px;  top: 122px; width: 315px; font-size: 22px; }
.d-s3__card--3 .d-s3__card-icon  { left: 288px; }

.d-s3__card--4 { left: calc( 50% + 324px ); top: 1146px; width: 442px; height: 308px; }
.d-s3__card--4 .d-s3__card-panel { left: 1.8px; width: 451.192px; height: 253px; }
.d-s3__card--4 .d-s3__card-text  { left: 32px;  top: 131px; width: 375px; font-size: 22px; }
.d-s3__card--4 .d-s3__card-icon  { left: 288px; }

.d-s3__card--5 { left: calc( 50% - 251px ); top: 1146px; width: 483px; height: 300px; }
.d-s3__card--5 .d-s3__card-panel { left: 11px;  width: 483px;     height: 253px; }
.d-s3__card--5 .d-s3__card-text  { left: 118px; top: 131px; width: 330px; font-size: 22px; }
.d-s3__card--5 .d-s3__card-icon  { left: 329px; }

.d-s3__card--6 { left: calc( 50% - 781px ); top: 1137px; width: 442px; height: 309px; }
.d-s3__card--6 .d-s3__card-panel { left: 2px;   width: 451px;     height: 253px; }
.d-s3__card--6 .d-s3__card-text  { left: 32px;  top: 131px; width: 375px; font-size: 22px; }
.d-s3__card--6 .d-s3__card-icon  { left: 288px; }

/* A third row, for a page that has eight of these rather than the six the
   design drew. 1419 is row 2's 1146 plus the 273 the design already uses
   between rows.

   CENTRED, not pushed into the right two columns. Two cards in a three-wide
   grid leave a hole wherever they go; centred, the hole is symmetrical and
   the row reads as a deliberate last one. Their insides are cards 4 and 2's,
   which are the same two widths. */
.d-s3__card--7 { left: calc( 50% + 70px );  top: 1419px; width: 442px; height: 308px; }
.d-s3__card--7 .d-s3__card-panel { left: 1.8px; width: 451.192px; height: 253px; }
.d-s3__card--7 .d-s3__card-text  { left: 32px;  top: 131px; width: 375px; font-size: 22px; }
.d-s3__card--7 .d-s3__card-icon  { left: 288px; }

.d-s3__card--8 { left: calc( 50% - 512px ); top: 1419px; width: 499px; height: 287px; }
.d-s3__card--8 .d-s3__card-panel { left: 18px;  width: 492px;     height: 238px; }
.d-s3__card--8 .d-s3__card-text  { left: 57px;  top: 131px; width: 407px; font-size: 20px; }
.d-s3__card--8 .d-s3__card-icon  { left: 345px; }


/* --- Section 6 — "הכלות שלי משתפות" (718:6), page y 4900, 1728 x 1226 -----
   Ten client pictures in two rows over a frosted panel, with the woman cut out
   on top of the left third. Both rows are numbered right to left, the way the
   page reads, so the galleries in the editor run in the same order the visitor
   sees — Figma's own child order is left to right and would have put the last
   testimonial first. */
/* 1072 rather than 1226: the section lost the height the portrait filled.
   Section 7 moves up by the same 154 and DESKTOP_H in class-bel-render.php
   comes down by it — this canvas places its sections at absolute page
   coordinates, so a shorter section is three numbers, not one. */
.d-s6 { position: absolute; left: 0; top: 5264px; width: 1728px; height: 1072px; }

/* The swirl. Bled, and cropped from the top rather than stretched: Figma draws
   the picture 1296 tall inside a 1206 box, which is exactly what `cover` with
   `object-position: top` does — and it keeps doing it at any bled width. */
.d-s6__bg {
	position: absolute;
	left: calc( 50% - 867px - var( --bel-bleed, 0px ) - 1px );
	top: 20px;
	width: calc( 1728px + 2 * ( var( --bel-bleed, 0px ) + 1px ) );
	height: 1052px;
	overflow: hidden;
}
.d-s6__bg img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }

.d-s6__title {
	position: absolute;
	left: calc( 50% - 355px );     /* Figma: centre +91, width 892 */
	top: 145px;
	width: 892px;   /* Figma also set 70px here, and a #d9bb72 middle stop */
}

/* Frosted glass, not an SVG this time — Figma wrote it as a real blur, so it
   is a real blur here. Browsers without backdrop-filter still get the 30%
   white, which is what the row of pictures actually needs to sit on. */
.d-s6__panel {
	position: absolute;
	left: calc( 50% - 702px );
	top: 188px;
	width: 1469px;
	height: 839px;
	background: rgba( 255, 255, 255, 0.3 );
	-webkit-backdrop-filter: blur( 15px );
	backdrop-filter: blur( 15px );
}

/* Both rows: a fixed box per slot, the picture cropped to fill it. The crop is
   already baked into the shipped files, so `cover` here is what keeps a
   replacement the client uploads from stretching. */

/* --- the carousels ------------------------------------------------------
   Two strips of testimonials that run in opposite directions, on both
   canvases. The set is printed three times and the track slides by exactly
   one third of its own width, so when the animation lands it is showing
   what it showed at the start and the jump back is invisible.

   Three copies rather than two: the shift has to leave the whole window
   covered, and the desktop's window is 1469 wide against a set of ~1070.

   The gap is a MARGIN on every item, including the last of a set, and not
   `gap`. With `gap` three sets carry fourteen gaps rather than fifteen, one
   third of the track stops being one set, and the loop drifts a few pixels
   every lap until the seam shows. */
/* A picture sliding into a hard edge reads as a rendering fault: the eye
   sees a half-picture and looks for the missing half. The last stretch
   fades instead, which says the window is a window. --bel-mq-fade is set
   per strip. */
.bel-marquee {
	position: absolute;
	overflow: hidden;
	-webkit-mask-image: linear-gradient( to right, transparent 0,
		#000 var( --bel-mq-fade, 48px ),
		#000 calc( 100% - var( --bel-mq-fade, 48px ) ), transparent 100% );
	mask-image: linear-gradient( to right, transparent 0,
		#000 var( --bel-mq-fade, 48px ),
		#000 calc( 100% - var( --bel-mq-fade, 48px ) ), transparent 100% );
}
.bel-marquee__track {
	display: flex;
	align-items: center;
	width: max-content;
	/* The track is laid out left to right whatever the page's direction; the
	   template hands it the list backwards so the design's first picture is
	   still the rightmost one. */
	direction: ltr;
	will-change: transform;
	animation: bel-run var( --bel-run, 40s ) linear infinite;
}
.bel-marquee__item { flex: 0 0 auto; overflow: hidden; margin-right: var( --bel-mq-gap, 10px ); }
.bel-marquee__item img { display: block; width: 100%; height: 100%; object-fit: cover; }
@keyframes bel-run {
	from { transform: translate3d( var( --bel-run-a, 0% ), 0, 0 ); }
	to   { transform: translate3d( var( --bel-run-b, -33.3333% ), 0, 0 ); }
}
/* The other way round is the same animation read backwards. */
.bel-marquee--right .bel-marquee__track { --bel-run-a: -33.3333%; --bel-run-b: 0%; }
/* Held still while someone is reading one — these carry text. */
.bel-marquee:hover .bel-marquee__track,
.bel-marquee:focus-within .bel-marquee__track { animation-play-state: paused; }
@media ( prefers-reduced-motion: reduce ) {
	.bel-marquee__track { animation: none; }
}

/* The two windows. Their left and width are the frosted panel's, because
   past the panel a picture is floating on the background swirl; on the left
   they run behind the portrait, which is painted after them. Top and height
   are the design's own for each strip. */
.d-s6__mq { left: calc( 50% - 702px ); width: 1469px; }
/* -154 on both strips, the panel and the section's height. The rabbanit
   stood between the heading and these, and taking her out left 284px of
   nothing where the section's own rhythm is 130. A gap twice the rhythm
   reads as something missing, which is what it was. */
.d-s6__mq--1 { top: 320px; height: 274px; --bel-mq-gap: 10px; --bel-run: 24s; }
.d-s6__mq--2 { top: 650px; height: 293px; --bel-mq-gap: 19px; --bel-run: 27s; }
/* Not the same length, so the two rows never fall into step. */

/* Row one — the screenshots. Each is its own width in Figma; only the height
   is shared. */
/* Only the widths survive from the design's ten coordinates — the track
   places them now, and the design's own 10px and 19px between them became
   the two --bel-mq-gap values above. */
.d-s6__mq--1 .bel-marquee__item { height: 274px; }
.d-s6__mq--1 .bel-marquee__item--1 { width: 183px; }
.d-s6__mq--1 .bel-marquee__item--2 { width: 220px; }
.d-s6__mq--1 .bel-marquee__item--3 { width: 196px; }
.d-s6__mq--1 .bel-marquee__item--4 { width: 220px; }
.d-s6__mq--1 .bel-marquee__item--5 { width: 209px; }

/* Row two — the photographs. Same size throughout, 239 apart. */
.d-s6__mq--2 .bel-marquee__item { width: 220px; height: 293px; }

/* The woman, painted over everything and cut by the canvas edge — the same
   arrangement as section 3, and cut for the same reason: 63px of her is
   outside the frame in the design and has to stay outside it here. */
/* Same box, same reason — see .d-s3__frame. Nothing in section 6 sits under
   it today, but the carousels do now run beneath it and a testimonial that
   cannot be hovered is the same class of fault. */
.d-s6__frame { position: absolute; left: calc( 50% - 864px ); top: 0; width: 1728px; height: 1226px; overflow: hidden; pointer-events: none; }
.d-s6__her { position: absolute; left: -63px; top: 97px; width: 904px; height: 1129px; }
.d-s6__her img { display: block; width: 100%; height: 100%; object-fit: cover; }


/* --- Section 7 — "תהליך ומחיר" (718:7), page y 6126, 1728 x 4782 ----------
   The tallest section on the page, and really four: the four steps, the price
   card, the comparison table and "מי אני". Figma wraps them in one frame
   (689:137) that adds nothing, so they are written here as four blocks with
   their own prefixes.

   Colours that Figma exports as vectors were read off the SVGs rather than
   guessed. The one exception is the comparison table's gold column: Figma
   exports it as a radial gradient whose transform does not reproduce what
   Figma itself renders — the render is a clean top-to-bottom ramp — so the
   ramp was fitted to the design's own pixels instead. It matches to the byte:
   white at 70% over #af998b is exactly the #e7e1dc the render shows. */
.d-s7 { position: absolute; left: 0; top: 6336px; width: 1728px; height: 4392px; }


/* --- 7a. the four steps -------------------------------------------------- */
.d-s7__title {
	position: absolute;
	left: calc( 50% - 248px );      /* Figma: 616, width 496 */
	top: 132px;
	width: 496px;
}

/* One card, four times. Only where it sits changes. */
.d-s7__card {
	position: absolute;
	width: 885px;
	border-radius: 8px;
	/* #d89948 to #faf1e8, fitted to the render — the design's own end colour is
	   below the card's drop shadow and cannot be sampled directly. */
	background: linear-gradient( 180deg, #d89948 0%, #faf1e8 100% );
	box-shadow: 0 3px 5px rgba( 60, 40, 20, 0.35 );
}
.d-s7__num {
	position: absolute;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 100px;
	line-height: normal;
	text-align: center;
	color: #d2d2d2;
}
.d-s7__step-text {
	position: absolute;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 27px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.d-s7__step-text b,
.d-s7__step-text strong { font-weight: 700; }

/* Figma sizes the numeral's box differently for the first one — 163 wide
   against 1067 for the rest — but centres the digits in all four, so each keeps
   its own box. */
.d-s7__num--1  { left: calc( 50% + 260px ); top: 259px;  width: 163px; }
.d-s7__card--1 { left: calc( 50% - 101px ); top: 338px;  height: 148px; }
.d-s7__text--1 { left: calc( 50% + 9px );   top: 368px;  width: 665px; }

.d-s7__num--2  { left: calc( 50% - 873px ); top: 498px;  width: 1067px; }
.d-s7__card--2 { left: calc( 50% - 782px ); top: 580px;  height: 149px; }
.d-s7__text--2 { left: calc( 50% - 700px ); top: 601px;  width: 718px; }

.d-s7__num--3  { left: calc( 50% - 194px ); top: 750px;  width: 1067px; }
.d-s7__card--3 { left: calc( 50% - 103px ); top: 823px;  height: 148px; }
.d-s7__text--3 { left: calc( 50% - 56px );  top: 851px;  width: 785px; }

.d-s7__num--4  { left: calc( 50% - 871px ); top: 978px;  width: 1067px; }
.d-s7__card--4 { left: calc( 50% - 780px ); top: 1065px; height: 149px; }
.d-s7__text--4 { left: calc( 50% - 682px ); top: 1097px; width: 686px; }

/* The thread the four steps hang on.
   Figma draws it only from under the fourth card to the price card; here it
   runs the length of the steps as well, because it is what the cards arrive
   on. It still ends where the design ends it, at the top of the price card.
   Two pixels rather than one: a hairline that fills as you scroll reads as a
   rendering artefact at 1px on a scaled canvas.
   The track is the faint full-length line; the fill is the part that has
   been drawn, and motion.js scales it from 0 to 1 against the scroll. */
.d-s7__spine {
	position: absolute;
	left: calc( 50% - 57px );
	top: 240px;
	width: 2px;
	height: 1116px;   /* to the top of the price card at 1356 */
	background: rgba( 216, 153, 72, 0.22 );
}
/* Starts drawn, so the section is complete for anyone who never scrolls it
   into a trigger — a reader on a very tall window, or with motion off.
   motion.js sets it to 0 and grows it only once it has a scroll to follow. */
/* The ring rides the line. Its top is the line's top; motion.js moves it
   down by exactly the length the fill has drawn, so the two cannot drift
   apart. The soft gold glow is what keeps it legible where it crosses a
   card — it passes over all four. */
.d-s7__ring {
	position: absolute;
	/* The line runs at 50% − 57px and is 2 wide, so its centre is 50% − 56px;
	   an 84px disc centred on that starts 42 to its left. */
	left: calc( 50% - 98px );
	top: 198px;                 /* centre on the line s first point, at 240 */
	width: 84px;
	height: 84px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	background: #fffaf1;
	box-shadow: 0 4px 14px rgba( 168, 117, 47, 0.28 ), 0 0 0 1px rgba( 216, 153, 72, 0.35 );
	pointer-events: none;
}
.d-s7__ring img { display: block; width: 46px; height: 54px; }
/* Nothing moves for a reader who asked for stillness, so the ring rests
   at the top of the line rather than halfway down it. */
@media ( prefers-reduced-motion: reduce ) {
	.d-s7__ring { opacity: 0.9; }
}

.d-s7__spine i { position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: #dda555; transform-origin: 50% 0; display: block; }


/* --- 7b. the price card (689:204) ---------------------------------------- */
.d-s7__price {
	position: absolute;
	left: calc( 50% - 817px );      /* Figma: 47 */
	top: 1356px;
	width: 1634px;
	height: 949px;
	border-radius: 40px;
	overflow: hidden;
}
/* Figma draws the picture 126.53% of the card's height and pulls it up 22.8%,
   which shows its lower two thirds. Written as those numbers rather than as
   `cover`, because `cover` would centre it. */
.d-s7__price-bg { position: absolute; inset: 0; overflow: hidden; }
.d-s7__price-bg img { position: absolute; left: 0; top: -22.8%; width: 100%; height: 126.53%; max-width: none; display: block; }
.d-s7__price-tint {
	position: absolute;
	inset: 0;
	background: linear-gradient( 89.991deg, rgba( 216, 153, 72, 0.1 ) 3.055%, rgba( 237, 204, 125, 0.1 ) 45%, rgba( 216, 153, 72, 0.1 ) 99.995% );
}
/* Two runs, one black and one gold. The gold one carries .bel-title, so it is
   the hero's gold at the hero's size; the black run is the design's own
   emphasis and stays black. */
.d-s7__price-title {
	position: absolute;
	left: 73px;
	top: 64px;
	width: 753px;
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	font-size: 45px;              /* Figma: 55 */
	line-height: normal;
	text-align: right;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.d-s7__laptop { position: absolute; left: 771px; top: 93px; width: 879px; height: 659px; }
.d-s7__laptop img { display: block; width: 100%; height: 100%; object-fit: cover; }

.d-s7__price-a,
.d-s7__price-b {
	position: absolute;
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 25px;
	line-height: normal;
	text-align: right;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.d-s7__price-a { left: 52.9px; top: 215px; width: 773.7px; }
.d-s7__price-b { left: 51px;   top: 660px; width: 773.6px; }
.d-s7__price-a b,
.d-s7__price-a strong { font-weight: 700; }

/* Gold type with a 20% black wash over it — Figma stacks the two as separate
   gradient layers, and both have to be painted through the glyphs. */
.d-s7__price-give {
	position: absolute;
	left: 597.1px;
	top: 484px;
	width: 227.5px;
	font-family: 'Assistant', sans-serif;
	font-weight: 800;
	font-size: 25px;
	line-height: normal;
	text-align: right;
	background:
		linear-gradient( 90deg, rgba( 0, 0, 0, 0.2 ), rgba( 0, 0, 0, 0.2 ) ),
		linear-gradient( 89.964deg, #d89948 3.055%, #edcc7d 45%, #d89948 99.995% );
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
	margin: 0;
}

/* The price. One gold plate sits behind the discounted number, and a red rule
   crosses the full one. */
.d-s7__price-plate {
	position: absolute;
	left: 234px;
	top: 419px;
	width: 245px;
	height: 58px;
	border-radius: 8px;
	background: linear-gradient( 89.978deg, #d89948 3.055%, #edcc7d 45%, #d89948 99.995% );
}
.d-s7__price-nums {
	position: absolute;
	left: 28px;
	top: 375px;
	width: 953px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 33px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.d-s7__price-nums b,
.d-s7__price-nums strong { font-weight: 700; font-size: 45px; }
.d-s7__price-strike { position: absolute; left: 373px; top: 394px; width: 109px; height: 4px; background: #ff0404; }

/* Four white capsules. Figma right-aligns three of them inside their own pill
   and centres the fourth, so the offset is per pill. */
.d-s7__pill {
	position: absolute;
	height: 41px;
	border-radius: 30px;
	background: #fff;
	overflow: hidden;
}
.d-s7__pill p {
	position: absolute;
	top: 4px;
	font-family: 'Assistant', sans-serif;
	font-weight: 800;
	font-size: 25px;
	line-height: normal;
	color: var( --bel-title-dark, #000 );
	white-space: nowrap;
	margin: 0;
}
/* Numbered right to left, top row then bottom — the order the list in the
   editor is written in, so the two agree. */
.d-s7__pill--1 { left: 610.01px; top: 541px; width: 214px; }
.d-s7__pill--1 p { right: 28px; text-align: right; }
.d-s7__pill--2 { left: 198.01px; top: 541px; width: 397px; }
.d-s7__pill--2 p { left: 0; right: 0; text-align: center; }
.d-s7__pill--3 { left: 461.01px; top: 594px; width: 367px; }
.d-s7__pill--3 p { right: 22px; text-align: right; }
.d-s7__pill--4 { left: 222.01px; top: 594px; width: 225px; }
.d-s7__pill--4 p { right: 46px; text-align: right; }

/* The same three-node button as the hero, at the hero's size. */
.d-s7__cta-plate {
	position: absolute;
	left: 114px;
	top: 790px;
	width: 754px;
	height: 101px;
	border-radius: 50.5px;
	background: linear-gradient( 89.961deg, #9902d4 3.055%, #e39dff 28.717%, #9902d4 52.226%, #e39dff 75.954%, #9902d4 98.815% );
}
.d-s7__cta-label {
	position: absolute;
	/* The middle of the room beside the disc: the box starts one inset after
	   the disc and ends one inset before the button, so centring the text in
	   it leaves the same gap on both sides of the words. */
	left: 215px;                 /* 114 + 12 + 77 + 12 */
	top: 811px;
	width: 641px;                /* 754 − 77 − 36 */
	font-family: 'Birzia', sans-serif;
	font-weight: 900;
	font-size: 35px;
	line-height: normal;
	text-align: center;
	color: #fff;
	margin: 0;
}
/* the price card, plate 754x101 at 114,790 — sized and placed from the plate: 76% of its height
   across, 21% of it in from the left, centred top to bottom. */
.d-s7__cta-arrow {
	position: absolute;
	left: 126px;   /* plate 754x101 at 114 */
	top: 802px;
	width: 77px;
	height: 77px;
	display: flex;
	align-items: center;
	justify-content: center;
	pointer-events: none;
}
.d-s7__cta-arrow span { display: block; width: 100%; height: 100%; transform: rotate( 46.25deg ) scaleY( -1 ); }
.d-s7__cta-arrow span img { display: block; width: 100%; height: 100%; }
.d-s7__hit { position: absolute; left: 114px; top: 790px; width: 754px; height: 101px; display: block; }


/* --- 7c. the comparison table (689:155) ---------------------------------- */
.d-s7__cmp-title {
	position: absolute;
	left: calc( 50% - 882px );      /* Figma: -18, width 1764 */
	top: 2391px;
	width: 1764px;
}
.d-s7__cmp-lead {
	position: absolute;
	left: calc( 50% - 462px );
	top: 2475px;
	width: 946px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 27px;
	line-height: normal;
	text-align: center;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}

/* Figma's container adds 38.4px of padding above the table and nothing else,
   so the table itself is placed at 2581 + 38.4. */
.d-s7__cmp { position: absolute; left: calc( 50% - 517px ); top: 2619.4px; width: 1056px; height: 712.375px; }

/* The gold column runs the full height; the dark block is inset from it top,
   bottom and left, which is what makes the gold appear to stick out. */
/* The winning column has to LOOK like the winning column. Figma washes it
   with 70% white at the top, which made its header the palest thing on the
   page — paler than the cream ground behind the table. It now begins at a
   light gold instead of near-white and ends deeper, and the shadow lifts it
   off the dark block so it reads as sitting on top of the table rather than
   beside it. Every coordinate is the design's, untouched. */
.d-s7__cmp-gold {
	position: absolute;
	left: 0;
	top: 0;
	width: 434.758px;
	height: 712.375px;
	border-radius: 10.476px;
	background: linear-gradient( 180deg, #f5e2bd 0%, #e8bd72 38%, #d89948 72%, #c07f30 100% );
	box-shadow: 0 10px 34px rgba( 120, 74, 16, 0.30 ), 0 0 0 1px rgba( 255, 245, 224, 0.55 ) inset;
}
.d-s7__cmp-dark {
	position: absolute;
	left: 110.03px;
	top: 12.54px;
	width: 945.97px;
	height: 689.33px;
	border-radius: 10.476px;
	background: #5e5e5e;
}
/* Seven rules across and one down, all white and half a pixel — Figma's own
   0.5238, kept rather than rounded up, because eight lines rounded to 1px is
   a visibly heavier table. */
.d-s7__cmp-h { position: absolute; left: 0; width: 1055.99px; height: 0.524px; background: #fff; }
/* Every one of these is the export's percentage MINUS Figma's own 38.4px of
   container padding, which the export folds into the blocks but not into the
   rules. The seven values below are where the design's pixels actually are:
   page 8822, 8904, 8985, 9067, 9153, 9237, 9321. */
.d-s7__cmp-h--1 { top: 76.60px; }
.d-s7__cmp-h--2 { top: 158.29px; }
.d-s7__cmp-h--3 { top: 240.00px; }
.d-s7__cmp-h--4 { top: 321.72px; }
.d-s7__cmp-h--5 { top: 407.62px; }
.d-s7__cmp-h--6 { top: 491.43px; }
.d-s7__cmp-h--7 { top: 575.24px; }
.d-s7__cmp-v { position: absolute; left: 821.83px; top: 12.54px; width: 0.524px; height: 689.33px; background: #fff; }

/* Three columns, each with one centre for every row: 216.4 for the course,
   628.2 for the meeting, 947 for the name of the thing being compared. */
/* The two headers share the band between the dark block's top edge and the
   first rule, and are centred in it. The export sits them 17px low, hard
   against the rule; centred, they agree with each other and with the rows. */
.d-s7__cmp-head {
	position: absolute;
	top: 12.53px;
	height: 64.06px;
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 35px;
	line-height: normal;
	text-align: center;
	margin: 0;
}
.d-s7__cmp-head--gold { left: 16.4px;  width: 400px; color: var( --bel-title-dark, #000 ); }
.d-s7__cmp-head--mid  { left: 493.2px; width: 270px; color: #fff; }

/* A cell is given its ROW — the band between two white rules — and centred
   in it, rather than placed at a top of its own. That is what makes the
   three cells of a row agree with each other however many lines each turns
   out to be, and what keeps them agreeing if the client rewrites one.
   The template writes --bel-row and --bel-row-h per row; the three little
   per-column nudges the export wanted are gone, and so is the drift. */
.d-s7__cmp-cell {
	position: absolute;
	top: var( --bel-row );
	height: var( --bel-row-h );
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: 'Tel Aviv Modernist', sans-serif;
	line-height: normal;
	text-align: center;
	margin: 0;
}
.d-s7__cmp-name { left: 842px;   width: 210px; font-weight: 700; font-size: 27px; color: #fff; }
.d-s7__cmp-mid  { left: 493.2px; width: 270px; font-weight: 400; font-size: 20px; color: #fff; }
/* Deeper than the body ink: the gold behind it is stronger now. */
.d-s7__cmp-gold-cell { left: 16.4px; width: 400px; font-weight: 600; font-size: 20px; color: #3b2a12; }


/* --- 7d. "מי אני" (689:193) ---------------------------------------------- */
.d-s7__me-title {
	position: absolute;
	left: calc( 50% - 405px );      /* Figma: 459, width 809 */
	top: 3468px;
	width: 809px;
}
.d-s7__me {
	position: absolute;
	left: calc( 50% - 834px );      /* Figma: 30 */
	top: 3600px;
	width: 1668px;
	/* 620, from 1045. The box was drawn for a bio three times this length and
	   left 615px of white under the words. Everything on the picture side is
	   scaled 0.6 to match — see the prints and the portrait below; cropping the
	   box alone would have cut the portrait in half. */
	height: 620px;
	background: #fff;
	border: 1px solid #000;
	border-radius: 30px;
	box-shadow: 0 10px 10px rgba( 0, 0, 0, 0.25 );
	overflow: hidden;
}

/* Four prints at 30%, each turned the same 7.16deg and each with its own crop
   inside its own box — Figma centres the turned print in a larger box, so the
   box is kept and the print centred in it. */
.d-s7__print { position: absolute; display: flex; align-items: center; justify-content: center; opacity: 0.3; }
.d-s7__print > span { display: block; overflow: hidden; position: relative; transform: rotate( -7.16deg ); }
.d-s7__print img { position: absolute; max-width: none; display: block; }
/* Every number here is Figma's times 0.6 — position and size both, so the
   four prints keep their arrangement instead of sliding over one another.
   See .d-s7__me for why. */
.d-s7__print--a { left: 190.47px; top: -39px;    width: 292.551px; height: 344.353px; }
.d-s7__print--a > span { width: 255.274px; height: 314.986px; }
.d-s7__print--a img { left: 0; top: -34.96px; width: 255.274px; height: 453.768px; }
.d-s7__print--b { left: 228.05px; top: 280.48px; width: 293.945px; height: 377.242px; }
.d-s7__print--b > span { width: 252.47px; height: 348.485px; }
.d-s7__print--b img { left: 0; top: 0; width: 261.36px; height: 348.485px; }
.d-s7__print--c { left: -44.4px;  top: -5.28px;  width: 276.962px; height: 346.1px; }
.d-s7__print--c > span { width: 239.086px; height: 318.781px; }
.d-s7__print--c img { left: 0; top: 0; width: 100%; height: 100%; object-fit: cover; }
.d-s7__print--d { left: -7.2px;   top: 313.29px; width: 283.416px; height: 391.712px; }
.d-s7__print--d > span { width: 239.825px; height: 364.658px; }
.d-s7__print--d img { left: 1.559px; top: -58.97px; width: 238.29px; height: 423.624px; }

.d-s7__me-photo { position: absolute; left: 2.4px; top: 86.4px; width: 423.6px; height: 450px; overflow: hidden; }
/* Figma's ring is a 600px disc with a dilated, offset, blurred shadow —
   feMorphology 10 is a 10px spread and stdDeviation 15 is a 30px blur. */
.d-s7__me-ring {
	position: absolute;
	left: 27.6px;
	top: 33px;
	width: 360px;
	height: 360px;
	border-radius: 50%;
	background: #fff3d9;
	box-shadow: 0 4px 30px 10px rgba( 0, 0, 0, 0.5 );
}
/* Figma masks the portrait with a plain 649x737 ellipse, so it is a clip-path
   here rather than a downloaded mask: same shape, one less request. */
.d-s7__me-cut {
	position: absolute;
	left: 0;
	top: -25.2px;
	width: 411px;
	height: 420.6px;
	clip-path: ellipse( 194.7px 221.1px at 209.7px 197.1px );
	overflow: hidden;
}
.d-s7__me-cut img { position: absolute; left: 0; top: 12.66px; width: 411px; height: 437.16px; max-width: none; display: block; }

.d-s7__me-name {
	position: absolute;
	left: 806px;                  /* Figma: right edge 1629, width 823 */
	/* 143, not Figma's 97: the box lost 425px of height when the pictures
	   shrank, and the words are centred against them now. */
	top: 143px;
	width: 823px;
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	font-size: 45px;              /* Figma: 55 */
	line-height: normal;
	text-align: right;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
/* Inside these two headings the {{…}} run is not the flat accent colour but
   the heros gold gradient, so the gold half matches every other heading on
   the page — the clients rule applied to the run rather than the whole
   line, because the black half is the designs own emphasis. */
.d-s7__price-title .bel-accent,
.d-s7__me-name .bel-accent {
	background: linear-gradient( to right, #d89948 28.951%, #edcc7d 66.184%, #d89948 100% );
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.d-s7__me-bio {
	position: absolute;
	left: 870.9px;
	top: 310px;
	width: 760px;
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 25px;
	line-height: normal;
	text-align: right;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.d-s7__me-bio p { margin: 0 0 1em; }
.d-s7__me-bio p:last-child { margin-bottom: 0; }

/* The questions heading belongs to section 7 in Figma even though the
   questions themselves are the next frame. */
.d-s7__faq-title {
	position: absolute;
	left: calc( 50% - 565px );
	/* 4720, from 4776. Measured as ink: at 4776 the heading ended 23px INSIDE the
	   question list below it (the list is on the canvas, the heading inside
	   .d-s7, and the two had drifted). Up, not the list down: the heading ends
	   33px above the first question, the page does not grow, and there is room —
	   the block above shrank when the portrait collage did. */
	/* 4330 now — up another 390 to close the 500px left above it. */
	top: 4330px;
	width: 1130px;
}


/* --- Section 8 — the questions (718:8), page y 10908, 1728 x 652 ----------
   The accordion machinery — the two-track grid, the one-open-at-a-time
   behaviour, and fit()'s reservation of the tallest answer's height — is
   already in the plugin. All this adds is what the design says it looks like.

   The list is a direct child of the canvas rather than of a section wrapper,
   because fit() reads `list.offsetTop` to work out where the closing button
   goes: nested inside a positioned section that number would be 132 instead of
   11040, and the button would not follow the questions at all. */
.bel-faq--d {
	left: calc( 50% - 581px );
	/* 11040 + 90. This list sits on the canvas, not inside .d-s7, so it
	   missed the +90 cascade that moved .d-s7 — and the heading inside it —
	   when the flight rows got their gaps; the heading ended up inside the
	   list. fit() places the closing button and the canvas height from here. */
	/* 10740 now: up 390 with its heading. */
	top: 10740px;
	width: 1162px;
	/* Figma leaves the same 23px under an open row as under a closed one; the
	   15px above an open answer is the panel's own margin. */
	--bel-faq-gap: 23px;
	--bel-faq-gap-open: 23px;
	/* From the end of the list to the top of the closing button, and from the
	   button to the bottom of the canvas — both from the design, and both read
	   by fit() rather than hard-coded there. */
	--bel-faq-cta-gap: 47px;
	--bel-faq-tail: 102px;
}
/* Figma paints a 20% white wash over the gold rather than picking a lighter
   gold, so it is written the same way — one wash over one colour, which keeps
   the two bars visibly related. */
.bel-faq--d .bel-faq__q {
	height: 88px;
	padding-inline-start: 34px;
	border-radius: 15px;
	background: linear-gradient( rgba( 255, 255, 255, 0.2 ), rgba( 255, 255, 255, 0.2 ) ), #d89948;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 23px;
	line-height: normal;
	color: var( --bel-title-dark, #000 );
}
.bel-faq--d .bel-faq__panel {
	margin-top: 15px;
	/* No min-height: 193 was drawn for a longer answer and left 73px blank under these. */
	min-height: 0;
	padding: 23px 24px 23px 64px;
	border-radius: 15px;
	background: linear-gradient( rgba( 255, 255, 255, 0.2 ), rgba( 255, 255, 255, 0.2 ) ), #d9bb72;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 26px;
	line-height: normal;
	text-align: right;
	color: var( --bel-title-dark, #000 );
}


/* --- Section 9 — the closing button (718:9), page y 11560 -----------------
   Its top is --bel-cta-top, which fit() sets from where the questions actually
   ended. The fallback is the design's own coordinate, so the button is in the
   right place before a line of JS has run and whenever there are no questions
   at all. */
.d-s9 {
	position: absolute;
	left: 0;
	top: var( --bel-cta-top, 11215px );
	width: 1728px;
	height: 101px;
}
.d-s9__plate {
	position: absolute;
	left: calc( 50% - 357px );
	top: 0;
	width: 754px;
	height: 101px;
	border-radius: 50.5px;
	background: linear-gradient( 89.961deg, #9902d4 3.055%, #e39dff 28.717%, #9902d4 52.226%, #e39dff 75.954%, #9902d4 98.815% );
}
.d-s9__label {
	position: absolute;
	/* The middle of the room beside the disc: the box starts one inset after
	   the disc and ends one inset before the button, so centring the text in
	   it leaves the same gap on both sides of the words. */
	left: calc( 50% - 256px );   /* 507 + 12 + 77 + 12 */
	top: 21px;
	width: 641px;                /* 754 − 77 − 36 */
	font-family: 'Birzia', sans-serif;
	font-weight: 900;
	font-size: 35px;
	line-height: normal;
	text-align: center;
	color: #fff;
	margin: 0;
}
/* the closing button, plate 754x101 at 507,0 — sized and placed from the plate: 76% of its height
   across, 21% of it in from the left, centred top to bottom. */
.d-s9__arrow {
	position: absolute;
	left: calc( 50% - 345px );   /* plate 754x101 at 507 */
	top: 12px;
	width: 77px;
	height: 77px;
	display: flex;
	align-items: center;
	justify-content: center;
	pointer-events: none;
}
.d-s9__arrow span { display: block; width: 100%; height: 100%; transform: rotate( 46.25deg ) scaleY( -1 ); }
.d-s9__arrow span img { display: block; width: 100%; height: 100%; }
.d-s9__hit { position: absolute; left: calc( 50% - 357px ); top: 0; width: 754px; height: 101px; display: block; }


/* ==========================================================================
   THE PHONE — Figma frame 758:357, 390 x 9444
   ==========================================================================
   The mobile frame carries real text styles, which the desktop one does not:
   Belavan/M-H1 (Brutalist Bold 22/1.25), M-Lead (Modernist Regular 17/1.45),
   M-Body (Modernist Regular 15/1.55), M-CTA (Modernist Bold 17/1.2) and
   M-Caption (Assistant Regular 13/1.4). Those five are written once, here, and
   the sections state only where things sit. */

/* --- The phone's heading --------------------------------------------------
   The same rule the desktop has, at the phone's own size: every heading on the
   phone is its hero's, which is what the client asked for and is what the
   mobile frame very nearly does anyway. Its gold is the desktop's under a 20%
   black wash — Figma stacks the two as separate layers and so does this, both
   painted through the glyphs. */
.bel-title-m {
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	font-size: 22px;
	line-height: 1.25;
	text-align: center;
	background:
		linear-gradient( 90deg, rgba( 0, 0, 0, 0.2 ), rgba( 0, 0, 0, 0.2 ) ),
		linear-gradient( 89.978deg, #d89948 3.055%, #edcc7d 45%, #d89948 99.995% );
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
	margin: 0;
}
/* M-Lead, M-Body and M-Caption. Sections say where; these say what. */
.m-lead,
.m-body,
.m-caption {
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	text-align: center;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.m-lead    { font-size: 17px; line-height: 1.45; }
.m-body    { font-size: 15px; line-height: 1.55; }
.m-caption { font-family: 'Assistant', sans-serif; font-size: 13px; line-height: 1.4; }
.m-body b,
.m-body strong,
.m-lead b,
.m-lead strong { font-weight: 700; }

/* --- Mobile section 1 — hero (758:358), 390 x 745.572 -------------------- */
.m-hero { position: absolute; left: 0; top: 0; width: 390px; height: 745.572px; }

/* Bled, so a phone wider than 390 design-pixels is not left with cream down
   its sides. `cover` with `object-position: top` reproduces Figma's own
   107.46%-tall, top-anchored crop at any bled width. */
.m-hero__bg {
	position: absolute;
	left: calc( 0px - var( --bel-hero-bleed, 0px ) - 1px );
	top: 0;
	width: calc( 390px + 2 * ( var( --bel-hero-bleed, 0px ) + 1px ) );
	height: 745.572px;
	overflow: hidden;
}
.m-hero__bg img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }
.m-hero__bar {
	position: absolute;
	left: calc( 0px - var( --bel-hero-bleed, 0px ) - 1px );
	top: 25px;
	width: calc( 390px + 2 * ( var( --bel-hero-bleed, 0px ) + 1px ) );
	height: 59px;
	background: #edc995;
}
.m-hero__bar-text { position: absolute; left: calc( 50% - 160px ); top: 30px; width: 319px; }
.m-hero__gold     { position: absolute; left: 16px; top: 96px;  width: 358px; }
.m-hero__body     { position: absolute; left: 16px; top: 196px; width: 358px; }

/* The button is a real flex row in the design, not three placed nodes the way
   the desktop's is — arrow, then label, centred as a pair. */
.m-hero__cta {
	position: absolute;
	left: 16px;
	top: 304px;
	width: 358px;
	height: 64.072px;
	box-sizing: border-box;
	display: flex;
	align-items: center;
	/* flex-start, not center: centring the pair shared the spare width out
	   and pushed the disc 5px past its margin. The label takes the rest and
	   centres its own text in it. */
	justify-content: flex-start;
	gap: 10px;
	/* 7 all round on the left: the same rule as the desktop's — the disc is
	   concentric with the pill's rounded end, so its inset from the left is
	   (64.07 − 50) / 2, the same 7 as above and below. It was 13, which left
	   the disc crowding the rounded end. */
	/* 10 on the right, not 16: it puts the label's box symmetrically about
	   the middle of the room beside the disc, the same balance the desktop
	   buttons get from their box. */
	padding: 7px 10px 7px 7px;
	border-radius: 24px;
	overflow: hidden;
	background: linear-gradient( 89.971deg, #9902d4 3.055%, #e39dff 28.717%, #9902d4 52.226%, #e39dff 75.954%, #9902d4 98.815% );
	text-decoration: none;
}
/* Superseded by .m-cta__arrow — the hero uses the shared button now. */
.m-hero__cta-arrow img { display: block; width: 100%; height: 100%; }
.m-hero__cta-label {
	flex: 0 0 auto;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 17px;
	line-height: 1.2;
	color: #fff;
	white-space: nowrap;
	margin: 0;
}

/* Three 26px discs overlapping by 8, then the count. Plain circles in the
   design, so they are circles here rather than three more requests. */
/* The three discs are gone at Ariel's request. The row was placed at 103.5
   so that DISCS PLUS LINE came out centred — measured, the pair sat at 193.4
   against a centre of 195. With the discs removed that number centres
   nothing, so the row is centred across the full width instead and stays
   centred whatever the client writes in it. */
.m-hero__proof {
	position: absolute;
	left: 0;
	width: 390px;
	top: 384.07px;
	display: flex;
	align-items: center;
	justify-content: center;
}
.m-hero__proof p { white-space: nowrap; }

.m-hero__devices { position: absolute; left: calc( 50% - 179px ); top: 426.07px; width: 358px; height: 268.5px; }
.m-hero__devices img { display: block; width: 100%; height: 100%; object-fit: cover; }


/* --- The phone's sections stack ------------------------------------------
   Not one absolute box per section, the way the desktop does it: every mobile
   frame in the design is an auto-layout column with its own padding and gap,
   and its height is whatever its text comes to. Fixed boxes would mean guessing
   where Chrome breaks each line, and the first wrong guess would put one
   section on top of the next.

   fit() measures this wrapper and takes the taller of it and the design's own
   9444, so the canvas is as long as the page turned out. */
.m-flow { position: absolute; left: 0; top: 745.572px; width: 390px; }

/* One column, the shape Figma's auto-layout gives it. Every section sets only
   its own padding, gap and ground. */
.m-sec {
	box-sizing: border-box;
	width: 390px;
	display: flex;
	flex-direction: column;
	align-items: center;
}
.m-sec > * { width: 100%; }
/* Figma puts empty 6px rows inside these columns rather than changing the gap;
   kept, because it is the design's own rhythm. */
.m-spacer { height: 6px; flex: 0 0 auto; }

/* Belavan/M-Card Title. */
.m-card-title {
	font-family: 'Assistant', sans-serif;
	font-weight: 800;
	font-size: 18px;
	line-height: 1.3;
	text-align: center;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}

/* --- Mobile section 2 — the questions (758:371) -------------------------- */
.m-s2 { gap: 14px; padding: 36px 16px; background: var( --bel-ground, #faf0e5 ); }
/* Row/Question Mobile — a real backdrop blur in the design, so a real one here.
   Browsers without it still get the 10% white and the shadow, which is what
   separates the row from the ground. */
.m-q {
	box-sizing: border-box;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 12px 18px;
	border-radius: 26px;
	background: rgba( 255, 255, 255, 0.1 );
	-webkit-backdrop-filter: blur( 19px );
	backdrop-filter: blur( 19px );
	box-shadow: 0 4px 12px rgba( 0, 0, 0, 0.25 );
	overflow: hidden;
}
.m-q p { flex: 1 0 0; min-width: 0; }


/* --- The phone's button, once -------------------------------------------
   Figma makes it a component (704:7) and drops instances of it into the hero
   and into four sections below. One rule here, one class in each of them. */
.m-cta {
	box-sizing: border-box;
	height: 64.072px;
	display: flex;
	align-items: center;
	/* flex-start, not center: centring the pair shared the spare width out
	   and pushed the disc 5px past its margin. The label takes the rest and
	   centres its own text in it. */
	justify-content: flex-start;
	gap: 10px;
	/* 7 all round on the left: the same rule as the desktop's — the disc is
	   concentric with the pill's rounded end, so its inset from the left is
	   (64.07 − 50) / 2, the same 7 as above and below. It was 13, which left
	   the disc crowding the rounded end. */
	/* 10 on the right, not 16: it puts the label's box symmetrically about
	   the middle of the room beside the disc, the same balance the desktop
	   buttons get from their box. */
	padding: 7px 10px 7px 7px;
	border-radius: 24px;
	overflow: hidden;
	background: linear-gradient( 89.971deg, #9902d4 3.055%, #e39dff 28.717%, #9902d4 52.226%, #e39dff 75.954%, #9902d4 98.815% );
	text-decoration: none;
}
/* 50 across — 78% of the button's height, the proportion in the picture
   Ariel sent. The box and the circle are the same size now; they used to be
   48 and 34, which is where the disc's smallness came from. */
.m-cta__arrow { flex: 0 0 auto; width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; }
.m-cta__arrow span { display: block; width: 100%; height: 100%; transform: rotate( 46.25deg ) scaleY( -1 ); }
.m-cta__arrow img { display: block; width: 100%; height: 100%; }
.m-cta__label {
	/* Shrinks and wraps rather than pushing the arrow out of the button —
	   nowrap plus a fixed size is what let a 3px overflow cut the disc.
	   16 rather than the design's 17: the extra sixteen pixels are what
	   leave ten pixels spare in the row once the disc is its proper size. */
	flex: 1 1 auto;
	min-width: 0;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 16px;   /* Figma: 17 */
	line-height: 1.2;
	color: #fff;
	text-align: center;
	margin: 0;
}

/* --- Mobile section 3 — "ההדרכה" (758:388) ------------------------------
   Placed, not stacked: this frame is the one the designer composed by hand,
   with the woman and two photo prints overlapping. It sits in the flow as a
   block of its own height and arranges its own contents inside. */
/* 890, from Figma’s 793.58: the chips and the line under the button live
   below it now, and this canvas is real flow — growing it moves the page down
   and needs no cascade. Without the extra height overflow:hidden would simply
   eat them. */
/* No white on the phone. These sections were #fff — Figma's — and on the
   cream page they read as white boxes stacked in it (Ariel, 10.9.2026). All
   eight now take the page's own ground, as .m-s2 already did. Two of them
   (.m-s6, and .m-s3 above the height its picture covers) sit under an image
   layer: they change anyway, so no white flashes before the image loads and
   .m-s3 keeps no white strip under its swirl. */
/* 793.58 — Figma's — unless the section carries the promises or the line under
   its button, which sit below the button and need the extra 96. It was 890 for
   every page, and on the live bride page (which has neither) that left a 96px
   empty strip at the foot of the section: measured, 9825 -> 9921 tall. */
.m-s3 { position: relative; height: 793.58px; background: var( --bel-ground, #faf0e5 ); overflow: hidden; }
.m-s3:has( > .m-s3__chips, > .m-s3__note ) { height: 890px; }
.m-s3__bg { position: absolute; left: -16px; top: -17.57px; width: 422px; height: 811px; border-radius: 40px; overflow: hidden; }
.m-s3__bg img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* Eyebrow pill — the same frosted row as section 2's questions, over a gold
   wash instead of a white one. */
.m-s3__eyebrow {
	position: absolute;
	left: 16px;
	top: 36px;
	width: 358px;
	height: 66px;
	box-sizing: border-box;
	display: flex;
	align-items: center;
	padding: 10px 18px;
	border-radius: 24px;
	background: linear-gradient( to right, rgba( 216, 153, 72, 0.3 ) 28.951%, rgba( 217, 187, 114, 0.3 ) 66.184%, rgba( 216, 153, 72, 0.3 ) 100% );
	-webkit-backdrop-filter: blur( 19px );
	backdrop-filter: blur( 19px );
	box-shadow: 0 4px 12px rgba( 0, 0, 0, 0.25 );
	overflow: hidden;
}
.m-s3__eyebrow p { flex: 1 0 0; min-width: 0; }

.m-s3__title { position: absolute; left: 16px; top: 118px; width: 358px; }
.m-s3__body  { position: absolute; left: 16px; top: 186px; width: 358px; text-align: right; }

/* Both prints are the same photograph turned opposite ways, and the woman is
   painted over them — Figma's order, kept. */
.m-s3__print { position: absolute; display: flex; align-items: center; justify-content: center; }
.m-s3__print span { display: block; width: 116.543px; height: 178.971px; }
.m-s3__print img { display: block; width: 100%; height: 100%; object-fit: cover; }
.m-s3__print--r { left: 247px; top: 507.43px; width: 141.972px; height: 194.373px; }
.m-s3__print--r span { transform: rotate( 8.59deg ); }
.m-s3__print--l { left: -4px;  top: 369.43px; width: 143.081px; height: 194.986px; }
.m-s3__print--l span { transform: rotate( -8.99deg ); }

/* A 179.83deg turn plus a vertical flip: very nearly a mirror, and the 0.17deg
   it is short of one is the design's own tilt. The crop inside has to stay
   separate from the turn, so it keeps its own box. */
.m-s3__her { position: absolute; left: 82.998px; top: 315.43px; width: 260.544px; height: 399.808px; display: flex; align-items: center; justify-content: center; }
.m-s3__her > span { display: block; width: 259.387px; height: 399.057px; overflow: hidden; position: relative; transform: rotate( -179.83deg ) scaleY( -1 ); }
.m-s3__her img { position: absolute; left: -92.13px; top: -0.64px; width: 504.92px; height: 756.9px; max-width: none; display: block; }

.m-s3__cta { position: absolute; left: 16px; top: 693.51px; width: 358px; }


/* --- The six benefit icons, on both canvases -----------------------------
   One sheet, three columns by two rows. Figma nudges each card to its own cell
   by a percentage of the window it is seen through, and the window is a
   different size on the desktop (154x141) and on the phone (72x66) — so the
   percentages are what both share, and these six lines are written once
   instead of twice in pixels. */
.bel-cell { position: absolute; width: 304.16%; height: 221.17%; max-width: none; display: block; }
.bel-cell--1 { left: -5.92%;   top: -6.56%; }
.bel-cell--2 { left: -110.49%; top: -10.82%; }
.bel-cell--3 { left: -204.42%; top: -10.42%; }
.bel-cell--4 { left: -0.27%;   top: -104.98%; }
.bel-cell--5 { left: -109.35%; top: -105.69%; }
.bel-cell--6 { left: -204.14%; top: -104.27%; }
/* Cards 7 and 8 borrow the first two cells — the icon file holds a 3x2 grid
   of six and there is no seventh. A repeated icon is visibly a repeat; a
   missing one is a broken image. An eight-cell sprite replaces these two
   lines. */
.bel-cell--7 { left: -5.92%;   top: -6.56%; }
.bel-cell--8 { left: -110.49%; top: -10.82%; }

/* --- Mobile section 4 — the benefits (758:398) ---------------------------
   Figma's export of this frame's background is broken — it asks for a picture
   -140077% wide at 243% from the left — so the texture is placed the way the
   render shows it instead: filling the section, cropped to its centre. It is an
   abstract swirl, so `cover` is both what it looks like and what survives the
   section growing with its text. */
.m-s4 { position: relative; gap: 14px; padding-bottom: 36px; }
.m-s4__bg { position: absolute; inset: 0; overflow: hidden; z-index: -1; }
.m-s4__bg img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* Header/Section Mobile — the full-width gold-to-white band. */
/* Bled with margins rather than with left/width: this one is in the flow,
   not placed, so it widens by pulling its own edges out past the canvas. */
.m-band {
	box-sizing: border-box;
	margin-left: calc( 0px - var( --bel-bleed, 0px ) - 1px );
	margin-right: calc( 0px - var( --bel-bleed, 0px ) - 1px );
	width: calc( 100% + 2 * ( var( --bel-bleed, 0px ) + 1px ) );
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 16px 12px;
	background: linear-gradient( to right, #edc995, #fff );
	overflow: hidden;
}
.m-band > * { flex: 1 0 0; min-width: 0; }

/* Card/Benefit Mobile — icon, title, body, right-aligned. */
.m-card {
	box-sizing: border-box;
	width: 358px;
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 6px;
	padding: 14px 16px 16px;
	border-radius: 18px;
	background: #fff;
	-webkit-backdrop-filter: blur( 50px );
	backdrop-filter: blur( 50px );
	box-shadow: 0 10px 30px rgba( 0, 0, 0, 0.25 );
	overflow: hidden;
}
.m-card__icon { position: relative; width: 72px; height: 66.012px; overflow: hidden; flex: 0 0 auto; }
.m-card__title,
.m-card__body { width: 100%; text-align: right; }


/* --- Mobile section 5 — "מה נלמד" (758:425) -----------------------------
   The desktop draws this as a panel with nine rows placed on it 94px apart;
   the phone stacks the same nine rows and lets each be as tall as its own
   text. Same content field, two shapes. */
.m-s5 { padding-bottom: 36px; background: var( --bel-ground, #faf0e5 ); }
.m-s5__list {
	box-sizing: border-box;
	/* An <ol>, so the browser default marker and padding have to go. */
	list-style: none;
	margin: 0;
	padding: 0;
	width: 358px;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	border-radius: 20px;
	background: rgba( 255, 255, 255, 0.1 );
	-webkit-backdrop-filter: blur( 50px );
	backdrop-filter: blur( 50px );
	box-shadow: 0 10px 30px rgba( 0, 0, 0, 0.25 );
	overflow: hidden;
}
/* Scoped to the canvas on purpose. The reset near the top of this file zeroes
   padding on every li with an element+class selector, which outranks a bare
   .m-row — the same trap its own comment warns about for font-weight. Without
   the extra class here every row lost its 12/14 and the list came out 235px
   shorter than the design. */
.bel-canvas .m-row {
	box-sizing: border-box;
	width: 100%;
	display: flex;
	align-items: flex-start;
	gap: 12px;
	padding: 12px 14px;
	overflow: hidden;
}
/* Every other row is gold, starting with the first — the same alternation the
   desktop's highlight bars make. */
.bel-canvas .m-row:nth-child(odd) { background: #edc995; }
.m-row__text { flex: 1 0 0; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 2px; }
.m-row__text > * { width: 100%; text-align: right; }
.m-row__num {
	flex: 0 0 auto;
	width: 38px;
	height: 38px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 999px;
	background: #fff;
	overflow: hidden;
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 13px;
	line-height: 1.4;
	color: var( --bel-title-dark, #000 );
}


/* --- Mobile section 6 — "הכלות שלי משתפות" (758:483) --------------------
   The desktop lays the ten pictures out in two rows on a frosted panel; the
   phone puts them in two strips that run off the side of the screen. Figma
   simply clips them there, which on a phone means five testimonials of which
   two and a half can ever be seen — so the strips scroll. Nothing about the
   first frame changes; what changes is that the rest can be reached. */
/* -298, the same closing-up as the desktop. No cascade here: the phone's
   sections are in flow and everything below follows on its own. */
.m-s6 { position: relative; height: 546.8px; background: var( --bel-ground, #faf0e5 ); overflow: hidden; }
.m-s6__bg {
	position: absolute;
	left: calc( 50% - 195px - var( --bel-bleed, 0px ) - 1px );
	top: 0;
	width: calc( 390px + 2 * ( var( --bel-bleed, 0px ) + 1px ) );
	height: 551.795px;
	overflow: hidden;
}
.m-s6__bg img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }
.m-s6__title { position: absolute; left: 16px; top: 32px; width: 358px; }
.m-s6__her { position: absolute; left: 0; top: 49.78px; width: 391px; height: 488px; }
.m-s6__her img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* A plain left-to-right row, with the list handed to it BACKWARDS by the
   template. Both `direction: rtl` and `flex-direction: row-reverse` were
   tried first and both do the same thing: they put the first picture on the
   right and then open the scroll on it, so the strip starts on the wrong
   frame. Reversing the list instead leaves the scroll origin alone — the
   strip opens where the design opens, on the fifth picture, and swiping
   reaches the first. */
/* The phone's two, on the same mechanism. They used to be a swipeable
   scroller; they now run on their own, which is what Ariel asked for on
   both canvases. Edge to edge rather than the old 16px inset — a carousel
   that stops short of the screen looks like a mistake. */
.m-strip { left: 0; width: 390px; --bel-mq-fade: 22px; }

/* Strip one — the screenshots, each its own width at a shared height. */
/* nth-child would have been wrong the moment the set was printed three
   times — the sixth item is the first picture again, not a sixth picture.
   The index is on the item itself. */
.m-s6__strip--1 { top: 100.39px; height: 200.17px; --bel-mq-gap: 10px; --bel-run: 22s; }
.m-s6__strip--1 .bel-marquee__item { height: 200.17px; }
.m-s6__strip--1 .bel-marquee__item--1 { width: 152.555px; }
.m-s6__strip--1 .bel-marquee__item--2 { width: 160.584px; }
.m-s6__strip--1 .bel-marquee__item--3 { width: 143.066px; }
.m-s6__strip--1 .bel-marquee__item--4 { width: 160.584px; }
.m-s6__strip--1 .bel-marquee__item--5 { width: 133.577px; }
/* Strip two — the photographs, all the same size. */
.m-s6__strip--2 { top: 314.57px; height: 200.228px; --bel-mq-gap: 10px; --bel-run: 25s; }
.m-s6__strip--2 .bel-marquee__item { width: 150.171px; height: 200.228px; }


/* --- Mobile section 7 — "איך זה עובד" (758:499) -------------------------
   The desktop alternates four wide cards left and right of a spine; the phone
   stacks them against one, with the number on the outside. */
.m-s7 { position: relative; gap: 14px; padding: 36px 16px; background: var( --bel-ground, #faf0e5 ); }
/* The thread the four badges sit on.
   Its top and height are written by motion.js, measured from the first
   badge's centre to the last one's — the steps are in flow here and each is
   as tall as its own text, so a number in this file would be right only for
   the copy it was written against. Figma's 101 and 406 stay as the value
   before the measurement lands, so the line is never in the wrong place
   even for a moment. */
.m-s7__spine { position: absolute; left: 353px; top: 101px; width: 2px; height: 406px; background: rgba( 216, 153, 72, 0.22 ); }
.m-s7__spine i { position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: #dda555; transform-origin: 50% 0; display: block; }
/* The ring rides the line. 56 rather than the desktop's 84: the phone's row
   is 40px of badge, and an ornament twice that size stops being an ornament.
   Its top is written by motion.js alongside the track's. */
.m-s7__ring {
	position: absolute;
	left: 326px;                /* the line is at 353 and 2 wide; 56 centred on it */
	top: 73px;
	width: 56px;
	height: 56px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	background: #fffaf1;
	box-shadow: 0 3px 10px rgba( 168, 117, 47, 0.28 ), 0 0 0 1px rgba( 216, 153, 72, 0.35 );
	pointer-events: none;
	z-index: 2;
}
.m-s7__ring img { display: block; width: 31px; height: 36px; }
.m-step { display: flex; align-items: flex-start; gap: 12px; overflow: hidden; }
.m-step__card {
	flex: 1 0 0;
	min-width: 0;
	box-sizing: border-box;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 4px;
	padding: 14px 16px;
	border-radius: 16px;
	/* Gold at the top fading to nothing, so the card sits ON the ground rather
	   than in a box — Figma's own to-transparent stop, kept as a colour with
	   zero alpha because `transparent` interpolates through black in Safari. */
	background: linear-gradient( to bottom, #d89948, rgba( 237, 201, 149, 0 ) );
	overflow: hidden;
}
.m-step__card > * { width: 100%; text-align: right; }
.m-step__badge {
	flex: 0 0 auto;
	width: 40px;
	height: 40px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 999px;
	background: #d89948;
	overflow: hidden;
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 13px;
	line-height: 1.4;
	color: #fff;
}

/* --- Mobile section 8 — the price (758:526) -----------------------------
   Placed rather than stacked, and its background export is broken the same way
   section 4's is — the same picture, in fact — so it is filled the way the
   render shows it. */
.m-s8 { position: relative; height: 1079.57px; overflow: hidden; }
.m-s8__bg { position: absolute; inset: 0; overflow: hidden; z-index: -1; }
.m-s8__bg img { display: block; width: 100%; height: 100%; object-fit: cover; }

.m-s8__title  { position: absolute; left: 16px; top: 36px;  width: 358px; }
.m-s8__lead   { position: absolute; left: 16px; top: 102px; width: 358px; }
.m-s8__bold   { position: absolute; left: 16px; top: 162px; width: 358px; }
.m-s8__laptop { position: absolute; left: 16px; top: 245px; width: 358px; height: 268.5px; }
.m-s8__laptop img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* Both price lines are the phone's H2 size. The plate goes behind the second
   and the red rule across the first — both placed by the design, not by the
   text, so a longer number will not carry them with it. */
.m-s8__price1,
.m-s8__price2 {
	position: absolute;
	left: 16px;
	width: 358px;
	font-family: 'Tel Aviv Brutalist', sans-serif;
	font-weight: 700;
	font-size: 20px;
	line-height: 1.3;
	text-align: center;
	color: var( --bel-title-dark, #000 );
	margin: 0;
}
.m-s8__price1 { top: 527.98px; }
/* 374 rather than 358, and no wrapping: the line wants 360.7px, so in the
   old box it missed by under three pixels and broke in two — which is what
   carried the gold away from the price. Thirteen pixels of room now. A much
   longer price line would still need the size dropped a point. */
.m-s8__price2 { top: 567.98px; left: 8px; width: 374px; white-space: nowrap; }
/* THE GOLD IS THE PRICE'S OWN BACKGROUND, not a rectangle placed near it.
   Figma draws a 75x37 plate at a fixed coordinate; painted on the <strong>
   the editor's ** already puts around the number, it cannot drift from the
   number again — at any size, in any wording. */
.m-s8__price2 strong {
	font-weight: inherit;
	padding: 4px 9px;
	border-radius: 8px;
	background: linear-gradient( 89.989deg, #d89948 3.055%, #edcc7d 45%, #d89948 99.995% );
}
.m-s8__strike { position: absolute; left: 100px; top: 536.98px; width: 71px; height: 4px; background: #ff0404; }
/* .m-s8__plate is gone — the gold moved onto the price itself, above. */

.m-s8__give {
	position: absolute;
	left: 16px;
	top: 624.5px;
	width: 358px;
	font-family: 'Assistant', sans-serif;
	font-weight: 800;
	font-size: 18px;
	line-height: 1.3;
	text-align: center;
	color: #a6702b;
	margin: 0;
}
/* The four perks are a white capsule each, 53px apart. */
.m-s8__perk {
	position: absolute;
	left: 16px;
	width: 358px;
	height: 39px;
	box-sizing: border-box;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 8px 16px;
	border-radius: 999px;
	background: #fff;
	box-shadow: 0 2px 8px rgba( 102, 71, 31, 0.14 );
	overflow: hidden;
}
.m-s8__perk p { flex: 1 0 0; min-width: 0; }
.m-s8__perk--1 { top: 661.5px; }
.m-s8__perk--2 { top: 714.5px; }
.m-s8__perk--3 { top: 767.5px; }
.m-s8__perk--4 { top: 820.5px; }

.m-s8__body { position: absolute; left: 16px; top: 873.5px; width: 358px; }
.m-s8__cta  { position: absolute; left: 16px; top: 979.5px; width: 358px; }


/* --- Mobile section 9 — the comparison (758:546) -------------------------
   The same seven rows the desktop draws 1056 wide, at 358. Figma gives each row
   a fixed height; here they are minimums, so a row grows rather than clipping
   when the client writes a longer line — and the gold panel and the column rule
   are stretched between top and bottom rather than being told 528, so they grow
   with it. */
.m-s9 { gap: 14px; padding: 36px 16px; background: var( --bel-ground, #faf0e5 ); }
.m-cmp {
	position: relative;
	box-sizing: border-box;
	width: 358px;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	/* Only the two LEFT corners are rounded — the end the gold column is at. */
	border-radius: 20px 0 0 20px;
	background: #5e5e5e;
	overflow: hidden;
}
/* The winning column, as on the desktop: a real gold from the top rather
   than a white wash that opened almost the colour of the page. The shadow
   falls to the RIGHT because that is where the dark column is — one the
   other way would be clipped by the table's own overflow. */
.m-cmp__gold {
	position: absolute;
	left: 0;
	top: 0;
	bottom: 0;
	width: 166px;
	border-radius: 20px 0 0 20px;
	background: linear-gradient( 180deg, #f5e2bd 0%, #e8bd72 38%, #d89948 72%, #c07f30 100% );
	box-shadow: 5px 0 16px rgba( 58, 33, 2, 0.38 );
}
.m-cmp__rule { position: absolute; left: 274px; top: 0; bottom: 0; width: 1px; background: #fff; }

.m-cmp__row { position: relative; display: flex; align-items: stretch; width: 100%; border-bottom: 1px solid #fff; overflow: hidden; }
.m-cmp__row:last-child { border-bottom: 0; }
.m-cmp__cell {
	box-sizing: border-box;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	overflow: hidden;
	text-align: center;
	margin: 0;
}
.m-cmp__cell > * { width: 100%; margin: 0; }
/* The three columns: the course, the meeting, and the thing being compared. */
.m-cmp__cell--a { width: 166px; padding: 10px; }
.m-cmp__cell--b { width: 108px; padding: 10px 6px; }
.m-cmp__cell--c { width: 84px;  padding: 10px 5px; }

/* Belavan/M-Table Head, Lead, Cell and Topic. */
.m-cmp__head-a { font-family: 'Assistant', sans-serif;      font-weight: 800; font-size: 19px; line-height: 1.35; color: var( --bel-title-dark, #000 ); }
.m-cmp__head-b { font-family: 'Tel Aviv Brutalist', sans-serif; font-weight: 700; font-size: 12px; line-height: 1.35; color: #fff; }
.m-cmp__a      { font-family: 'Tel Aviv Modernist', sans-serif; font-weight: 700; font-size: 13px; line-height: 1.35; color: #3b2a12; }
.m-cmp__b      { font-family: 'Tel Aviv Modernist', sans-serif; font-weight: 400; font-size: 10px; line-height: 1.35; color: #fff; }
.m-cmp__c      { font-family: 'Tel Aviv Brutalist', sans-serif; font-weight: 700; font-size: 12px; line-height: 1.35; color: #fff; }

/* Figma's own row heights, kept as minimums. */
.m-cmp__row--head { min-height: 72px; }
.m-cmp__row--1 { min-height: 64px; }
.m-cmp__row--2 { min-height: 68px; }
.m-cmp__row--3 { min-height: 64px; }
.m-cmp__row--4 { min-height: 64px; }
.m-cmp__row--5 { min-height: 68px; }
.m-cmp__row--6 { min-height: 64px; }
.m-cmp__row--7 { min-height: 64px; }


/* --- Mobile section 10 — "מי אני" (758:607) ------------------------------
   The same card as the desktop's, at 379 instead of 1668, and with one
   difference the design makes for itself: the portrait and the cream disc
   behind it arrive as a single flattened picture rather than as a ring plus a
   masked photograph. */
.m-s10 { gap: 14px; padding: 36px 0; background: var( --bel-ground, #faf0e5 ); }
.m-s10 > * { width: auto; }
.m-s10__card {
	position: relative;
	box-sizing: border-box;
	width: 379px;
	height: 465px;
	background: #fff;
	border: 1px solid #000;
	border-radius: 30px;
	box-shadow: 0 10px 10px rgba( 0, 0, 0, 0.25 );
	overflow: hidden;
}
/* Four prints at 30%, all turned the same 7.16deg, each with its own crop. */
.m-s10__print { position: absolute; display: flex; align-items: center; justify-content: center; opacity: 0.3; }
.m-s10__print > span { display: block; overflow: hidden; position: relative; transform: rotate( -7.16deg ); }
.m-s10__print img { position: absolute; max-width: none; display: block; }
.m-s10__print--a { left: 152.05px; top: -33px;    width: 225.562px; height: 265.502px; }
.m-s10__print--a > span { width: 196.82px; height: 242.859px; }
.m-s10__print--a img { left: 0; top: -26.96px; width: 196.82px; height: 349.86px; }
.m-s10__print--b { left: 186.36px; top: 199.23px; width: 226.637px; height: 290.859px; }
.m-s10__print--b > span { width: 194.658px; height: 268.688px; }
.m-s10__print--b img { left: 0; top: 0; width: 201.51px; height: 268.688px; }
.m-s10__print--c { left: -40px;    top: -12.74px;  width: 213.543px; height: 266.849px; }
.m-s10__print--c > span { width: 184.339px; height: 245.785px; }
.m-s10__print--c img { left: 0; top: 0; width: 100%; height: 100%; object-fit: cover; }
.m-s10__print--d { left: -6.17px;  top: 217.98px;  width: 218.519px; height: 302.016px; }
.m-s10__print--d > span { width: 184.91px; height: 281.157px; }
.m-s10__print--d img { left: 1.2px; top: -45.46px; width: 183.73px; height: 326.63px; }

.m-s10__photo { position: absolute; left: 20px; top: 53px; width: 338px; height: 359px; }
.m-s10__photo img { display: block; width: 100%; height: 100%; object-fit: cover; }
.m-s10__p { width: 358px; text-align: right; }

/* --- Mobile section 11 — the questions (758:621) -------------------------
   The same accordion the desktop uses, in the phone's clothes. */
.m-s11 { gap: 10px; padding: 36px 16px; background: var( --bel-ground, #faf0e5 ); }
.bel-faq--m { position: static; width: 100%; --bel-faq-gap: 10px; --bel-faq-gap-open: 10px; }
.bel-faq--m .bel-faq__q {
	box-sizing: border-box;
	padding: 12px 14px;
	border-radius: 12px;
	background: linear-gradient( rgba( 255, 255, 255, 0.2 ), rgba( 255, 255, 255, 0.2 ) ), #d89948;
	font-family: 'Assistant', sans-serif;
	font-weight: 800;
	font-size: 18px;
	line-height: 1.3;
	color: var( --bel-title-dark, #000 );
}
.bel-faq--m .bel-faq__panel {
	box-sizing: border-box;
	padding: 12px 14px;
	border-radius: 12px;
	background: rgba( 255, 255, 255, 0.6 );
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 15px;
	line-height: 1.55;
	text-align: right;
	color: var( --bel-title-dark, #000 );
}

/* --- Mobile section 12 — the closing button (758:634) -------------------- */
.m-s12 { gap: 14px; padding: 36px 16px; background: var( --bel-ground, #faf0e5 ); }
.m-s12__cta { width: 100%; }


/* The carousels were running for the whole length of the page, including the
   nine thousand pixels where they are nowhere near the screen. front.js adds
   this class while they are out of sight. */
.bel-marquee.is-idle .bel-marquee__track { animation-play-state: paused; }


/* --- decoration does not take clicks --------------------------------------
   Every one of these is aria-hidden ornament: the angled prints, the two
   portraits, the ring on the timeline, the numbers behind the steps. They sit
   above content often enough that leaving them in the hit-testing tree is how
   a button quietly dies — see .d-s3__frame for the one that actually did. */
.d-s3__print, .d-s3__her,
.d-s6__her,
.d-s7__print, .d-s7__me-ring, .d-s7__num,
.m-s3__print, .m-s3__her,
.m-s6__her,
.m-s10__print { pointer-events: none; }


/* --- the credit ----------------------------------------------------------
   Outside every canvas, so it is the same size in every window rather than
   being scaled with the page. On the ground colour, with enough air above
   it that it reads as a signature under the page and not as one more thing
   in it. */
.bel-credit {
	display: flex;
	justify-content: center;
	align-items: center;
	padding: 34px 16px 40px;
	background: var( --bel-ground, #faf0e5 );
}
.bel-credit__link {
	display: block;
	line-height: 0;
	/* Quiet by default and answering a pointer: it is a credit, not a
	   call to action, and it should not compete with the button above it. */
	opacity: 0.72;
	transition: opacity .28s ease, transform .28s cubic-bezier( .22, .61, .36, 1 );
}
.bel-credit__link img { display: block; width: 188px; height: 58px; object-fit: contain; }
@media ( hover: hover ) and ( pointer: fine ) {
	.bel-credit__link:hover { opacity: 1; transform: translateY( -2px ); }
}
.bel-credit__link:focus-visible {
	outline: 3px solid #d89948;
	outline-offset: 6px;
	border-radius: 6px;
	opacity: 1;
}
/* The phone gets it a size down — 188px is a fifth of a 390px screen. */
@media ( max-width: 520px ) {
	.bel-credit { padding: 26px 16px 30px; }
	.bel-credit__link img { width: 150px; height: 46px; }
}


/* --- the lead window -----------------------------------------------------
   The form the four buttons open. In the page's own language so it reads as
   part of it, and outside both canvases so it is the same size in every
   browser window rather than being scaled with the page.

   TWO WAYS IT OPENS. `:target` needs no JavaScript at all — the buttons are
   real links to #bel-lead and the browser reveals it on its own. `.is-open`
   is what front.js uses, because a script that could only ever set :target
   would have to change the address bar to open a form. Either is enough.

   Both set display:flex because the element carries `hidden`, and that
   attribute is what keeps a browser with neither CSS nor script from
   printing a stray form at the foot of the page. */
.bel-lead {
	position: fixed;
	inset: 0;
	z-index: 90;
	display: none;
	align-items: center;
	justify-content: center;
	padding: 20px;
}
.bel-lead:target,
.bel-lead.is-open { display: flex; }
.bel-lead__scrim {
	position: absolute;
	inset: 0;
	background: rgba( 40, 24, 6, 0.55 );
	-webkit-backdrop-filter: blur( 3px );
	backdrop-filter: blur( 3px );
}
.bel-lead__panel {
	position: relative;
	width: min( 460px, 100% );
	max-height: calc( 100dvh - 40px );
	overflow-y: auto;
	box-sizing: border-box;
	padding: 34px 30px 30px;
	border-radius: 20px;
	background: var( --bel-ground, #faf0e5 );
	box-shadow: 0 24px 70px rgba( 60, 34, 4, 0.42 );
	text-align: center;
	/* The gold rule the rest of the page opens its sections with. */
	border-top: 4px solid #d89948;
}
.bel-lead__x {
	position: absolute;
	inset-inline-end: 14px;
	top: 10px;
	width: 34px;
	height: 34px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	font-size: 26px;
	line-height: 1;
	text-decoration: none;
	color: #8a6a3a;
	background: rgba( 216, 153, 72, 0.14 );
	transition: background-color .2s ease, color .2s ease;
}
.bel-lead__x:hover { background: rgba( 216, 153, 72, 0.28 ); color: #4a3410; }
.bel-lead__title {
	margin: 0 0 8px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 27px;
	line-height: 1.25;
	color: var( --bel-title-dark, #000 );
}
.bel-lead__text {
	margin: 0 0 20px;
	font-family: 'Assistant', sans-serif;
	font-size: 16px;
	line-height: 1.5;
	color: #5c4a34;
}

/* The form inside it. The markup is BEL_Render::form()'s, which was written
   for this build and never printed until now. */
.bel-lead .bel-form { display: flex; flex-direction: column; gap: 12px; text-align: start; }
.bel-lead .bel-hp { position: absolute; left: -9999px; }
.bel-lead .bel-field input[type="text"],
.bel-lead .bel-field input[type="tel"] {
	box-sizing: border-box;
	width: 100%;
	padding: 14px 16px;
	border: 1px solid rgba( 216, 153, 72, 0.45 );
	border-radius: 12px;
	background: #fff;
	font-family: 'Assistant', sans-serif;
	font-size: 16px;   /* 16 exactly: anything smaller makes iOS zoom the page */
	color: #2b2115;
}
.bel-lead .bel-field input::placeholder { color: #9b8a72; }
.bel-lead .bel-field input:focus-visible {
	outline: 3px solid rgba( 216, 153, 72, 0.55 );
	outline-offset: 1px;
	border-color: #d89948;
}
.bel-lead .bel-consent {
	display: flex;
	align-items: flex-start;
	gap: 9px;
	font-family: 'Assistant', sans-serif;
	font-size: 14px;
	line-height: 1.4;
	color: #5c4a34;
	cursor: pointer;
}
.bel-lead .bel-consent input { margin: 2px 0 0; accent-color: #d89948; width: 17px; height: 17px; flex: 0 0 auto; }
.bel-lead .bel-consent__box { display: none; }
.bel-lead .bel-consent a { color: #a8752f; }
.bel-lead .bel-field--submit { margin-top: 4px; }
.bel-lead .bel-field--submit button {
	width: 100%;
	padding: 15px 18px;
	border: 0;
	border-radius: 999px;
	cursor: pointer;
	font-family: 'Assistant', sans-serif;
	font-weight: 800;
	font-size: 17px;
	color: #fff;
	/* The page's own call-to-action purple. */
	background: linear-gradient( 90deg, #9902d4, #e39dff 50%, #9902d4 );
	transition: filter .2s ease, transform .16s cubic-bezier( .3, .8, .4, 1 );
}
.bel-lead .bel-field--submit button:hover { filter: brightness( 1.07 ); }
.bel-lead .bel-field--submit button:active { transform: scale( .98 ); }
.bel-lead .bel-form-error {
	margin: 0;
	padding: 10px 14px;
	border-radius: 10px;
	background: rgba( 163, 57, 43, 0.1 );
	color: #a3392b;
	font-family: 'Assistant', sans-serif;
	font-size: 15px;
}
/* Nothing behind the window scrolls while it is open. */
body.bel-lead-open { overflow: hidden; }
@media ( max-width: 520px ) {
	.bel-lead__panel { padding: 30px 20px 24px; border-radius: 16px; }
	.bel-lead__title { font-size: 23px; }
}


/* --- the window's fields stand up ----------------------------------------
   `.bel-form .bel-field { position: absolute }` above is inherited from a
   project where the form was drawn at Figma coordinates, every field placed
   by hand. Correct there. In a window it means all five fields resolve
   against the panel and land in the same place — three inputs, a consent
   line and a button stacked on one band, which is exactly what the first
   render showed.

   That block also gives them a 23px Brutalist face on #e9e9e9 behind a 150px
   backdrop blur, and paints the submit in the other project's pink. None of
   it is wrong where it was written; all of it is wrong here.

   One class more specific than the rule it beats — the least force that does
   the job. The canvas form keeps its coordinates untouched. */
.bel-lead .bel-form .bel-field { position: static; }
.bel-lead .bel-form .bel-field input,
.bel-lead .bel-form .bel-field button {
	backdrop-filter: none;
	-webkit-backdrop-filter: none;
	font-family: 'Assistant', sans-serif;
	font-weight: 400;
	font-size: 16px;   /* 16 exactly — anything smaller makes iOS zoom the page */
	line-height: 1.4;
	text-align: start;
	border-radius: 12px;
	background: #fff;
	color: #2b2115;
}
.bel-lead .bel-form .bel-field input::placeholder { color: #9b8a72; opacity: 1; }
.bel-lead .bel-form .bel-field--submit button {
	text-align: center;
	font-weight: 800;
	font-size: 17px;
	color: #fff;
	border-radius: 999px;
	/* This page's own call to action, not the other project's pink. */
	background: linear-gradient( 90deg, #9902d4, #e39dff 50%, #9902d4 );
}

/* The real checkbox, visible. It is at opacity 0 further up — the earlier
   design hid it and drew its own box in its place, and this window hides
   that drawn box because it belongs to a look this window does not use.
   What was left was a checkbox that is present, clickable and completely
   invisible — and since the server rejects a lead with no consent, that is
   a form that refuses every submission while pointing at a control nobody
   can see. */
.bel-lead .bel-consent input[type="checkbox"] {
	opacity: 1;
	position: static;
	appearance: auto;
	-webkit-appearance: checkbox;
	width: 17px;
	height: 17px;
	margin: 2px 0 0;
	accent-color: #d89948;
	flex: 0 0 auto;
}


/* --- the headline is lit ---------------------------------------------------
   The hero's line only. `.bel-title` dresses nine headings on this page and a
   page where every heading pulses is a page nobody can read.

   TWO EFFECTS DOING DIFFERENT JOBS.

   The SHINE is the gold itself moving. The heading is already a gradient
   painted through the glyphs; at three times the width of the text, sliding
   it turns those same colours into a sweep of light across the letters —
   nothing is added, the same gold simply travels.

   The GLOW is a drop-shadow in the gold's own colour, breathing. `filter`,
   not `text-shadow`: the text here is transparent and its colour comes from a
   clipped background, so a text-shadow would be cast by nothing and paint a
   hard slab behind the line. drop-shadow follows the shapes the clip paints.

   Different lengths — 6s and 3.4s — so they never fall into step and the
   light never looks like it is ticking. */
.d-hero__gold--feature,
.m-hero__gold--feature {
	background-size: 300% 100%;
	background-position: 100% 50%;
	animation: bel-shine 6s linear infinite, bel-glow 3.4s ease-in-out infinite;
	will-change: background-position, filter;
}
@keyframes bel-shine {
	to { background-position: -200% 50%; }
}
@keyframes bel-glow {
	0%, 100% { filter: drop-shadow( 0 0 6px rgba( 216, 153, 72, 0.30 ) ); }
	50%      { filter: drop-shadow( 0 0 22px rgba( 237, 204, 125, 0.72 ) ); }
}
/* Asked for less motion, gets the gold standing still — and still gold. */
@media ( prefers-reduced-motion: reduce ) {
	.d-hero__gold--feature,
	.m-hero__gold--feature {
		animation: none;
		background-position: 50% 50%;
	}
}


/* --- the paragraphs breathe ------------------------------------------------
   Forty elements here carry `line-height: normal` — about 1.2 for these faces,
   lines almost touching. That is what makes a page read as cramped rather than
   as considered, and no amount of margin fixes it: the crowding is INSIDE the
   paragraph.

   NOT all forty. This is a canvas of fixed coordinates, so a paragraph that
   grows runs into whatever is beneath it. Each was measured — lines, and the
   clear space below it — and only the ones with room are opened. Left alone:
   section 2's heading and lead (18px and 6px of clearance), the price card's
   title and lead (the block is already full) and the comparison cells (zero —
   they are centred in fixed bands).

   Headings keep their own leading everywhere. A heading is one or two lines
   meant to read as one block; opening it pulls it apart.

   1.45, not 1.6 — Hebrew has almost no descenders, and past about 1.5 a
   paragraph starts to read as a list of separate lines. */
.d-hero__body,
.d-s2__close-b,
.d-s3__body,
.d-s3__card-text,
.d-s5__desc,
.d-s7__step-text,
.d-s7__price-b,
.d-s7__cmp-lead,
.d-s7__me-bio { line-height: 1.45; }
/* A little less on the question rows: each sits inside a pill of fixed
   height, and 1.45 on two lines would push the second into its lower edge. */
.d-s2__q { line-height: 1.32; }


/* The struck price, drawn through the text rather than over it. Same red as
   the old fixed bar, and thick enough to read at these sizes — the browser's
   default hairline disappears against a 34px number. */
.bel-struck {
	text-decoration: line-through;
	-webkit-text-decoration-color: #ff0404;
	text-decoration-color: #ff0404;
	text-decoration-thickness: 4px;
	text-underline-offset: 0;
}
.m-s8__price1 .bel-struck { text-decoration-thickness: 3px; }


/* A price that is not the bride page's paints its own gold plate, behind the
   bold run and only as wide as it — rather than the fixed 245x58 rectangle
   Figma placed under one exact number. Same gradient, same corner. */
.d-s7__price-nums--own strong {
	display: inline-block;
	padding: 2px 14px 5px;
	border-radius: 8px;
	background: linear-gradient( 89.978deg, #d89948 3.055%, #edcc7d 45%, #d89948 99.995% );
}
/* The bold run in an own-plate price is body-sized, not the 45px a bare
   number wants — a whole phrase at 45px would not fit the card. */
.d-s7__price-nums--own strong { font-size: 33px; }


/* --- the capsules at a count other than four -------------------------------
   `display: contents` is the whole trick: at four the wrapper is not in the
   layout at all, so the four pills keep the absolute coordinates above and
   the bride page renders exactly as it always did.

   At any other count the wrapper takes over — one centred row, capsules as
   wide as their own words. It sits on the first row's top and the same axis
   the four-slot rows are centred on (198..824, so 511), which is why the
   block does not jump when a line is deleted. */
.d-s7__pills { display: contents; }
.d-s7__pills--flow {
	display: flex;
	position: absolute;
	left: 34px;                  /* 511 − 953/2, so the row centres on the same axis */
	top: 541px;
	width: 953px;
	flex-wrap: wrap;
	justify-content: center;
	gap: 12px 15px;
}
.d-s7__pills--flow .d-s7__pill {
	position: static;
	width: auto;
	padding: 0 26px;
	display: flex;
	align-items: center;
}
.d-s7__pills--flow .d-s7__pill p { position: static; top: auto; right: auto; left: auto; text-align: center; }


/* --- section 3's promises and its nudge ------------------------------------
   Both are additions, not Figma: the section had one line of body in a very
   large empty column and a button with nothing under it.

   Neither exists unless the page fills the field in, so the bride page —
   which has neither — is untouched, and no coordinate below moves. */
.d-s3__chips {
	position: absolute;
	left: calc( 50% - 32.5px );  /* the body's own left edge and width */
	top: 537px;                  /* body ends at ~525, the button starts at 601 */
	width: 804px;
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	justify-content: flex-start;
}
.d-s3__chip {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	height: 38px;
	padding: 0 18px;
	border-radius: 30px;
	background: #fff;
	box-shadow: 0 2px 10px rgba( 168, 117, 47, 0.14 );
	font-family: 'Assistant', sans-serif;
	font-weight: 700;
	font-size: 19px;
	color: var( --bel-title-dark, #000 );
	white-space: nowrap;
}
/* The marker is drawn rather than typed, so the editor writes words and gets
   the gold dot for free — and cannot lose it by deleting a character. */
.d-s3__chip::before,
.m-s3__chip::before {
	content: '';
	flex: 0 0 auto;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: linear-gradient( 135deg, #edcc7d, #d89948 );
}
.d-s3__note {
	position: absolute;
	left: calc( 50% + 205px );   /* centred on the button's own plate */
	top: 670px;                  /* the plate ends at 659, the band starts at 738 */
	width: 565px;
	margin: 0;
	font-family: 'Assistant', sans-serif;
	font-weight: 600;
	font-size: 18px;
	line-height: 1.4;
	text-align: center;
	color: #8a6a3c;
}

/* The phone puts both under the button — see the note in mobile.php. */
.m-s3__chips {
	position: absolute;
	left: 16px;
	/* The button ends at 757.5. */
	top: 770px;
	width: 358px;
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	justify-content: center;
}
.m-s3__chip {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	height: 32px;
	padding: 0 13px;
	border-radius: 30px;
	background: #fff;
	box-shadow: 0 2px 8px rgba( 168, 117, 47, 0.14 );
	font-family: 'Assistant', sans-serif;
	font-weight: 700;
	font-size: 14px;
	color: var( --bel-title-dark, #000 );
}
.m-s3__note {
	position: absolute;
	left: 16px;
	/* The chips wrap to two rows in a 358px column and end at 842. */
	top: 854px;
	width: 358px;
	margin: 0;
	font-family: 'Assistant', sans-serif;
	font-weight: 600;
	font-size: 14px;
	line-height: 1.4;
	text-align: center;
	color: #8a6a3c;
}


/* --- section 4 as photographs ------------------------------------------------
   Chosen per page (s4.style). The bride page keeps its icons and none of this
   applies to it.

   THE ENVELOPE. The eight icon cards occupy 864 to 1723 inside .d-s3, and every
   section below sits at an absolute page coordinate. So the photographs are
   fitted INTO that envelope rather than given the height they might like:
   four columns of 365 by two rows of 380, from 904 to 1696. 40px under the
   band, and nothing below this section moves on any page.

   1547 = 4 × 365 + 3 × 29, the same outer width the icon cards span (83 to
   1630), centred. Flex rather than grid so a shorter list centres its last
   row instead of leaving it hanging to one side. */
.d-s3__photos {
	position: absolute;
	left: calc( 50% - 773.5px );
	top: 904px;
	width: 1547px;
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 32px 29px;
}
.d-s3__pcard {
	position: relative;
	isolation: isolate;
	flex: 0 0 365px;
	width: 365px;
	height: 380px;
	border-radius: 16px;
	overflow: hidden;
	display: flex;
	align-items: flex-end;
	/* The ground under a card that has no picture yet: warm and dark, so the
	   white words read and the card looks deliberate rather than broken. */
	background: linear-gradient( 160deg, #8a6534 0%, #3b2710 100% );
	box-shadow: 0 24px 46px -24px rgba( 120, 82, 30, 0.5 ), 0 2px 8px rgba( 120, 82, 30, 0.1 );
}
.d-s3__pcard-img {
	position: absolute;
	inset: 0;
	z-index: -2;
	width: 100%;
	height: 100%;
	max-width: none;
	display: block;
	object-fit: cover;
	/* Faces sit in the upper third of almost every photograph of people; a
	   centred crop cuts them at the forehead. */
	object-position: 50% 25%;
	transition: transform 0.9s cubic-bezier( 0.2, 0.7, 0.2, 1 );
}
/* Dark only where the words are. The top of the picture is left alone. */
.d-s3__pcard::before {
	content: '';
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background: linear-gradient( to top, rgba( 26, 16, 4, 0.94 ) 0%, rgba( 26, 16, 4, 0.62 ) 38%, rgba( 26, 16, 4, 0 ) 70% );
}
.d-s3__pcard-text { width: 100%; padding: 0 28px 26px; text-align: right; }
.d-s3__pcard-rule {
	display: block;
	width: 46px;
	height: 3px;
	/* margin-left:auto right-aligns a fixed-width block whatever the direction
	   of its parent — physical, so it cannot flip. */
	margin: 0 0 14px auto;
	border-radius: 2px;
	background: linear-gradient( to right, #d89948 28.951%, #edcc7d 66.184%, #d89948 100% );
}
.d-s3__pcard-title {
	margin: 0 0 8px;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 700;
	font-size: 23px;
	line-height: 1.25;
	color: #fff;
}
.d-s3__pcard-body {
	margin: 0;
	font-family: 'Tel Aviv Modernist', sans-serif;
	font-weight: 400;
	font-size: 19px;
	line-height: 1.45;
	color: rgba( 255, 255, 255, 0.9 );
}
@media ( hover: hover ) {
	.d-s3__pcard:hover .d-s3__pcard-img { transform: scale( 1.06 ); }
}

/* The phone: the same cards, stacked. Flow, so they are as tall as they need. */
.m-card--photo {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	min-height: 250px;
	justify-content: flex-end;
	gap: 0;
	padding: 0 18px 18px;
	background: linear-gradient( 160deg, #8a6534 0%, #3b2710 100% );
	-webkit-backdrop-filter: none;
	backdrop-filter: none;
}
.m-card__photo {
	position: absolute;
	inset: 0;
	z-index: -2;
	width: 100%;
	height: 100%;
	max-width: none;
	display: block;
	object-fit: cover;
	object-position: 50% 25%;
}
.m-card--photo::before {
	content: '';
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background: linear-gradient( to top, rgba( 26, 16, 4, 0.94 ) 0%, rgba( 26, 16, 4, 0.6 ) 45%, rgba( 26, 16, 4, 0 ) 78% );
}
.m-card__rule {
	display: block;
	flex: 0 0 auto;
	width: 40px;
	height: 3px;
	margin: 0 0 9px auto;
	border-radius: 2px;
	background: linear-gradient( to right, #d89948 28.951%, #edcc7d 66.184%, #d89948 100% );
}
.m-card--photo .m-card__title { color: #fff; margin-bottom: 4px; }
.m-card--photo .m-card__body { color: rgba( 255, 255, 255, 0.9 ); }

@media ( prefers-reduced-motion: reduce ) {
	.d-s3__pcard-img { transition: none; }
}

/* --- a photograph where the design has a mock-up ---------------------------
   hero.frame / s8.frame = "photo". The mock-ups are transparent cut-outs and
   are shown whole; a photograph is a rectangle and needs the opposite: cover
   the box, round the corners, lift it off the page. object-position comes from
   the stored #focus (BEL_Render::photo_focus), so each picture keeps its own
   subject in view. The gold hairline is the same gold as every heading. */
.bel-photo { overflow: hidden; border-radius: 28px; isolation: isolate;
	box-shadow: 0 34px 70px -34px rgba( 80, 50, 10, 0.6 ), 0 2px 10px rgba( 80, 50, 10, 0.12 ); }
.bel-photo::after { content: ''; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
	box-shadow: inset 0 0 0 1.5px rgba( 237, 204, 125, 0.6 ); }
.bel-photo img { object-fit: cover; }
.d-hero__devices--photo img { object-fit: cover; }
.m-hero__devices--photo,
.m-s8__laptop--photo { border-radius: 18px; }

/* --- the destination pin ----------------------------------------------------
   A location chip in the photograph's top corner, the way a map app marks where
   you are headed. The pin breathes: a gold ring leaves it and fades, the way a
   live location dot does — and stands still for a reader who asked for less
   motion. */
.bel-pin {
	position: absolute;
	top: 22px;
	right: 22px;
	z-index: 2;
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 9px 12px 9px 22px;
	border-radius: 999px;
	background: rgba( 255, 255, 255, 0.9 );
	-webkit-backdrop-filter: blur( 10px );
	backdrop-filter: blur( 10px );
	box-shadow: 0 14px 34px -12px rgba( 60, 34, 4, 0.5 );
}
.bel-pin__icon {
	position: relative;
	flex: 0 0 auto;
	width: 44px;
	height: 44px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	background: linear-gradient( 135deg, #f1d58f 0%, #d89948 100% );
	box-shadow: 0 6px 14px -6px rgba( 168, 117, 47, 0.8 );
}
.bel-pin__icon::before {
	content: '';
	position: absolute;
	inset: 0;
	border-radius: 50%;
	background: rgba( 216, 153, 72, 0.5 );
	z-index: -1;
	animation: bel-pin-pulse 2.4s cubic-bezier( 0.2, 0.7, 0.2, 1 ) infinite;
}
.bel-pin__icon svg { width: 22px; height: 22px; fill: #fff; }
.bel-pin__text { display: flex; flex-direction: column; text-align: right; line-height: 1.12; }
.bel-pin__small { font-family: 'Assistant', sans-serif; font-weight: 700; font-size: 15px; color: #9a7440; }
.bel-pin__place { font-family: 'Tel Aviv Modernist', sans-serif; font-weight: 700; font-size: 23px; color: #1d1407; white-space: nowrap; }
@keyframes bel-pin-pulse {
	0%   { transform: scale( 1 );   opacity: 0.75; }
	100% { transform: scale( 2.1 ); opacity: 0; }
}
.m-hero__devices .bel-pin { top: 10px; right: 10px; gap: 7px; padding: 5px 8px 5px 13px; }
.m-hero__devices .bel-pin__icon { width: 30px; height: 30px; }
.m-hero__devices .bel-pin__icon svg { width: 15px; height: 15px; }
.m-hero__devices .bel-pin__small { font-size: 10px; }
.m-hero__devices .bel-pin__place { font-size: 14px; }

/* --- section 6 as a video carousel -----------------------------------------
   The same marquee as the picture carousels (.bel-marquee, front.css above),
   one row instead of two, centred in the frosted panel (188 to 1027): cards of
   315x560 from 328. Slow — 60s a lap — because these are things to click, and
   the existing rule pauses the strip under the pointer. The phone keeps its
   546.8 section: one row of 214x380 from 96. */
.d-s6__vq { top: 328px; height: 560px; --bel-mq-gap: 24px; --bel-run: 60s; }
.d-s6__vq .bel-vid { width: 315px; height: 560px; border-radius: 22px; }
.m-s6__vq { top: 96px; height: 380px; --bel-mq-gap: 12px; --bel-run: 40s; }
.m-s6__vq .bel-vid { width: 214px; height: 380px; border-radius: 16px; }

.bel-vid {
	position: relative;
	display: block;
	padding: 0;
	border: 0;
	font: inherit;
	color: inherit;
	cursor: pointer;
	-webkit-appearance: none;
	appearance: none;
	background: linear-gradient( 160deg, #8a6534 0%, #3b2710 100% );
	box-shadow: 0 20px 40px -22px rgba( 60, 34, 4, 0.55 );
}
/* A little dark at the foot, so the card reads as a video rather than a photo
   even before the play button is noticed. */
.bel-vid::after {
	content: '';
	position: absolute;
	inset: 0;
	pointer-events: none;
	background: linear-gradient( to top, rgba( 26, 16, 4, 0.5 ) 0%, rgba( 26, 16, 4, 0 ) 45% );
}
.bel-vid__play {
	position: absolute;
	left: 50%;
	top: 50%;
	z-index: 1;
	width: 76px;
	height: 76px;
	margin: -38px 0 0 -38px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	background: rgba( 255, 255, 255, 0.93 );
	box-shadow: 0 12px 28px -8px rgba( 60, 34, 4, 0.6 ), 0 0 0 6px rgba( 255, 255, 255, 0.25 );
	transition: transform 0.35s cubic-bezier( 0.2, 0.7, 0.2, 1 );
}
.bel-vid__play svg { width: 30px; height: 30px; fill: #c48a3a; margin-left: 4px; }
.m-s6__vq .bel-vid__play { width: 56px; height: 56px; margin: -28px 0 0 -28px; }
.m-s6__vq .bel-vid__play svg { width: 22px; height: 22px; margin-left: 3px; }
@media ( hover: hover ) {
	.bel-vid:hover .bel-vid__play { transform: scale( 1.1 ); }
}
.bel-vid:focus-visible { outline: 3px solid #d89948; outline-offset: -3px; }

/* --- the window a video plays in -------------------------------------------
   Sized by front.js to the video's own shape inside the window, so a portrait
   clip is tall and a landscape one wide, neither letterboxed. The close button
   sits on the window's corner, not on the video, so it never covers the
   picture. */
.bel-video { position: fixed; inset: 0; z-index: 95; display: none; align-items: center; justify-content: center; padding: 20px; }
.bel-video.is-open { display: flex; }
.bel-video__scrim { position: absolute; inset: 0; background: rgba( 20, 12, 3, 0.84 ); -webkit-backdrop-filter: blur( 4px ); backdrop-filter: blur( 4px ); }
.bel-video__box { position: relative; border-radius: 18px; overflow: hidden; background: #000; box-shadow: 0 30px 80px rgba( 0, 0, 0, 0.55 ); }
.bel-video__box iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
.bel-video__x {
	position: absolute;
	top: 18px;
	right: 18px;
	z-index: 2;
	width: 46px;
	height: 46px;
	border: 0;
	border-radius: 50%;
	display: grid;
	place-items: center;
	background: rgba( 255, 255, 255, 0.93 );
	color: #3b2710;
	font-size: 30px;
	line-height: 1;
	cursor: pointer;
}
body.bel-video-open { overflow: hidden; }

@media ( prefers-reduced-motion: reduce ) {
	.bel-pin__icon::before { animation: none; opacity: 0; }
	.bel-vid__play { transition: none; }
}

/* --- photo mode, fitted to what is around it --------------------------------
   The mock-ups these boxes were drawn for are transparent at the edges, so their
   boxes could run under neighbouring text without anything being seen. A
   photograph fills its box to the corner, and in the same box it covered the
   price card's heading and the included-list (Ariel, 10.9.2026).

   CTA CARD. The words end at x≈895 inside the card (the pill row); the heading
   at 825. So the photograph starts at 943 — 48px clear of the pills — and ends
   48px inside the card's right edge: 643 wide, 540 tall, centred on the card's
   949. 1.19 against the picture's 1.33 cuts ~5% off each side, which leaves
   both wing tips and the nose in. The button below starts near 800.

   HERO. The proof line ended on the photograph's top edge. Down 24 and 32
   narrower, same ratio, so its foot stays where the mock-up's was. */
.d-s7__laptop--photo { left: 943px; top: 205px; width: 643px; height: 540px; }
.d-hero__devices--photo { left: calc( 50% - 371px ); top: 649px; width: 742px; height: 557px; }


/* The phone's CTA card in photo mode. Measured on the Uman page: the bold
   paragraph's INK ends at 255 and the photograph's box began at 245 — the
   laptop mock-up was transparent at its top, so the overlap had always been
   there and never showed. The photograph and everything under it move 30px
   down (a 20px gap), and the card grows by the same 30.

   `translate`, not `top`: it composes with the transform the motion layer
   writes, and it moves nine elements without restating nine coordinates.
   Scoped with :has() to a card that holds a photograph — the bride page's
   laptop is not touched. 30 is this copy's number: a longer paragraph needs
   more, and hcv-check2.js is the test that says so. */
.m-s8:has( > .m-s8__laptop--photo ) { height: 1109.57px; }
.m-s8:has( > .m-s8__laptop--photo ) > :is( .m-s8__laptop, .m-s8__price1, .m-s8__price2, .m-s8__strike, .m-s8__give, .m-s8__perk, .m-s8__body, .m-s8__cta ) { translate: 0 30px; }


/* --- the floating WhatsApp button -----------------------------------------
   Document level, never inside a canvas: a transformed ancestor would make
   `fixed` mean fixed-to-the-canvas and the button would scroll away. z 80,
   under the lead and video windows, and hidden while either is open.

   Bottom-left: on a right-to-left page it is the corner the reading does not
   start from. The label sits to the icon's right, toward the page; on a phone
   there is no label, only the disc, clear of the home indicator. */
.bel-wa {
	position: fixed;
	left: 24px;
	bottom: 24px;
	z-index: 80;
	display: flex;
	align-items: center;
	gap: 10px;
	direction: rtl;
	text-decoration: none;
	animation: bel-wa-in 0.5s cubic-bezier( 0.2, 0.7, 0.2, 1 ) 0.4s both;
	transition: opacity 0.25s ease, transform 0.3s cubic-bezier( 0.2, 0.7, 0.2, 1 );
}
.bel-wa__icon {
	position: relative;
	flex: 0 0 auto;
	width: 62px;
	height: 62px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	background: #25d366;
	color: #fff;
	box-shadow: 0 12px 28px -8px rgba( 18, 140, 70, 0.6 ), 0 2px 6px rgba( 0, 0, 0, 0.12 );
}
.bel-wa__icon svg { width: 33px; height: 33px; display: block; }
/* A ring that leaves the disc and fades — the page's destination pin does the
   same, so the two read as one family. */
.bel-wa__icon::before {
	content: '';
	position: absolute;
	inset: 0;
	border-radius: 50%;
	background: rgba( 37, 211, 102, 0.45 );
	z-index: -1;
	animation: bel-pin-pulse 2.6s cubic-bezier( 0.2, 0.7, 0.2, 1 ) 1.2s infinite;
}
.bel-wa__label {
	padding: 10px 18px;
	border-radius: 999px;
	background: #fff;
	color: #1d1407;
	font-family: 'Assistant', sans-serif;
	font-weight: 700;
	font-size: 17px;
	line-height: 1.2;
	white-space: nowrap;
	box-shadow: 0 10px 26px -10px rgba( 60, 34, 4, 0.45 );
}
@media ( hover: hover ) {
	.bel-wa:hover { transform: translateY( -3px ); }
}
.bel-wa:focus-visible { outline: none; }
.bel-wa:focus-visible .bel-wa__icon { box-shadow: 0 0 0 3px #fff, 0 0 0 6px #25d366; }
@keyframes bel-wa-in {
	from { opacity: 0; transform: translateY( 14px ) scale( 0.9 ); }
	to   { opacity: 1; transform: none; }
}
body.bel-lead-open .bel-wa,
body.bel-video-open .bel-wa { opacity: 0; pointer-events: none; }

@media ( max-width: 700px ) {
	.bel-wa { left: 16px; bottom: calc( 16px + env( safe-area-inset-bottom, 0px ) ); }
	.bel-wa__label { display: none; }
	.bel-wa__icon { width: 56px; height: 56px; }
	.bel-wa__icon svg { width: 30px; height: 30px; }
}
@media ( prefers-reduced-motion: reduce ) {
	.bel-wa { animation: none; }
	.bel-wa__icon::before { animation: none; opacity: 0; }
}

/* The large lit headline, for a page that asks for it (hero.gold_style).
   Wider than the design's 1131 because the line is larger; 1440 still leaves
   144 either side of the canvas. Appended last so it wins over the base. */
.d-hero__gold--feature { left: calc( 50% - 720px ); top: 150px; width: 1440px; font-size: 68px; }
.m-hero__gold--feature { top: 92px; font-size: 30px; }


/* ── Hotel gallery — a per-page section between the flight rows (s5) and the
      media carousel (s6). Renders only when the page has hotel photos; the
      stage then carries .bel-stage--gallery, which pushes everything below down
      by --bel-gh (this section's own height) so nothing overlaps. ─────────── */
.d-gallery {
	position: absolute; left: 0; top: 5264px; width: 1728px; height: 560px;
	display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 34px;
}
.d-gallery__title { margin: 0; font-size: 50px; line-height: 1.1; text-align: center; }
.d-gallery__row { display: flex; gap: 24px; justify-content: center; }
.d-gallery__item { width: 400px; height: 267px; border-radius: 24px; overflow: hidden; box-shadow: 0 18px 40px rgba( 93, 63, 17, .18 ); }
.d-gallery__item img { width: 100%; height: 100%; object-fit: cover; display: block; }

.bel-stage--gallery .d-s6 { top: calc( 5264px + var( --bel-gh, 0 ) * 1px ); }
.bel-stage--gallery .d-s7 { top: calc( 6336px + var( --bel-gh, 0 ) * 1px ); }
.bel-stage--gallery .bel-faq--d { top: calc( 10740px + var( --bel-gh, 0 ) * 1px ); }
.bel-stage--gallery .d-s9 { top: var( --bel-cta-top, calc( 11215px + var( --bel-gh, 0 ) * 1px ) ); }

.m-gallery { padding: 42px 20px; display: flex; flex-direction: column; gap: 18px; background: var( --bel-ground, #faf0e5 ); }
.m-gallery__title { margin: 0; font-size: 27px; line-height: 1.15; text-align: center; }
.m-gallery__row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.m-gallery__item { aspect-ratio: 3 / 2; border-radius: 16px; overflow: hidden; box-shadow: 0 10px 24px rgba( 93, 63, 17, .16 ); }
.m-gallery__item img { width: 100%; height: 100%; object-fit: cover; display: block; }


/* ── The price card's checklist (s8.facts) — a per-page list that opens under
      the first line of the card's closing paragraph. The stage then carries
      .bel-stage--facts, and front.js writes --bel-fx: how far the paragraph
      now runs past the room the design gave it. Everything under the
      paragraph moves down by that much, so the list can be any length. With
      no list there is no class, and nothing here applies. ─────────────────── */

/* Where the button sits in the design and the gap above it — read by front.js,
   which measures the paragraph against them. Offsets within the card (desktop)
   and within the section (phone), the same boxes offsetTop is taken in. */
.d-s7__price-b--facts { --bel-fx-cta: 790; --bel-fx-gap: 21; }
.m-s8__body--facts    { --bel-fx-cta: 979.5; --bel-fx-gap: 13; }

.bel-facts__lead,
.bel-facts__rest { display: block; }
/* :is(.bel-canvas) ul/li reset margins at (0,1,1) — so the list's own spacing
   is written at (0,2,0). */
.bel-canvas .bel-facts {
	list-style: none;
	margin: 12px 0 14px;
	padding: 0;
	display: grid;
	grid-template-columns: repeat( 2, max-content );
	justify-content: start;
	gap: 12px 48px;
}
.bel-canvas .bel-facts li {
	display: flex;
	align-items: center;
	gap: 12px;
	font-weight: 700;
	line-height: 1.3;
	text-align: right;
}
/* A gold disc with a white tick: the page's own gold, drawn rather than typed,
   so it is the same in every font the text falls back to. */
.bel-facts li::before {
	content: "";
	flex: 0 0 auto;
	width: 30px;
	height: 30px;
	border-radius: 50%;
	background:
		url( "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.5 12.5l3.6 3.6L17.5 8.6' fill='none' stroke='%23fff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E" ) center / 100% no-repeat,
		linear-gradient( 135deg, #d89948 0%, #edcc7d 50%, #d89948 100% );
	box-shadow: 0 3px 8px rgba( 160, 110, 40, .28 );
}
/* The phone: one column, centred as a block, each line still starting at the
   right beside its tick. */
.bel-canvas .m-s8__body--facts .bel-facts {
	grid-template-columns: max-content;
	justify-content: center;
	gap: 8px;
	margin: 10px 0 12px;
}
.bel-canvas .m-s8__body--facts .bel-facts li { gap: 10px; font-size: 16px; }
.m-s8__body--facts .bel-facts li::before { width: 24px; height: 24px; }

/* Desktop: the card grows, its button follows the paragraph, and everything
   after the card — inside .d-s7 and the questions on the canvas — moves with
   it. MARGIN-TOP inside .d-s7: those nodes each carry their own top, and on an
   absolutely placed box a top margin moves it down just the same. Not
   `translate` — GSAP folds a CSS translate into its own transform and writes
   `translate: none`, so every heading motion.js unmasks lost the shift and
   landed on the card. None of these nodes has a margin of its own (measured).
   The questions are measured (fit() reads their offsetTop for the closing
   button and the canvas height), so they move by `top`, which offsetTop sees. */
.bel-stage--facts .d-s7__price { height: calc( 949px + var( --bel-fx, 0 ) * 1px ); }
/* The card's picture is sized off the card; cover keeps a taller card from
   stretching it. */
.bel-stage--facts .d-s7__price-bg img { object-fit: cover; }
.bel-stage--facts :is( .d-s7__cta-plate, .d-s7__cta-label, .d-s7__cta-arrow, .d-s7__hit ),
.bel-stage--facts .d-s7__price ~ * { margin-top: calc( var( --bel-fx, 0 ) * 1px ); }
.bel-stage--facts .bel-faq--d { top: calc( 10740px + ( var( --bel-gh, 0 ) + var( --bel-fx, 0 ) ) * 1px ); }
.bel-stage--facts .d-s9 { top: var( --bel-cta-top, calc( 11215px + ( var( --bel-gh, 0 ) + var( --bel-fx, 0 ) ) * 1px ) ); }

/* Phone: the section is a fixed box in the flow, so it grows and the flow
   wrapper carries everything below down on its own. */
.bel-stage--facts .m-s8 { height: calc( 1079.57px + var( --bel-fx, 0 ) * 1px ); }
.bel-stage--facts .m-s8:has( > .m-s8__laptop--photo ) { height: calc( 1109.57px + var( --bel-fx, 0 ) * 1px ); }
.bel-stage--facts .m-s8__cta { top: calc( 979.5px + var( --bel-fx, 0 ) * 1px ); }


/* ── Buttons as wide as their words (cta.fit = text) ────────────────────────
   The phone's buttons are one flex row each, so CSS can size them: the
   content's width, capped by the column, centred in it. The desktop's are
   three placed nodes and front.js moves them (hugButtons). */
.bel-root--cta-fit :is( .m-hero__cta, .m-s3__cta, .m-s8__cta ) {
	right: 16px;
	width: fit-content;
	margin-inline: auto;
}
.bel-root--cta-fit .m-sec > .m-s12__cta {
	width: fit-content;
	max-width: 100%;
}
/* The label's end of the pill: more air than the full-width pill needed,
   where the label's own centring supplied it. */
.bel-root--cta-fit .m-cta { gap: 14px; padding-right: 24px; }


/* ── Section 3's chips: their side padding, restored. The chips are <li>s,
      and `:is(.bel-canvas) li { padding: 0 }` (0,1,1) outranks the chips' own
      single-class rules (0,1,0) — so the words ran into the rounded end on the
      far side from the dot. Same values as those rules, at (0,2,0). ────────── */
.bel-canvas .d-s3__chip { padding: 0 18px; }
.bel-canvas .m-s3__chip { padding: 0 13px; }


/* ── The hero's tick list (hero.facts) — under the opening button. The line
      under the button and the picture move down by --bel-hfx, which front.js
      measures from the list; the hero is drawn that much taller. MARGIN-TOP,
      not translate — motion.js animates both nodes. The hero canvas is not
      .bel-canvas, so the list carries its own face and the reset's (0,1,1) is
      outranked at (0,2,0). ─────────────────────────────────────────────────── */
.bel-hero-canvas .d-hero__facts {
	position: absolute;
	left: calc( 50% - 720px );
	top: 588px;                  /* the button ends at 558 */
	width: 1440px;
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 10px 44px;
	font-family: 'Assistant', sans-serif;
	font-size: 25px;
	color: var( --bel-title-dark, #000 );
	/* the proof line's design top, and the air kept above it */
	--bel-hfx-next: 599;
	--bel-hfx-gap: 24;
}
.bel-hero-canvas .m-hero__facts {
	position: absolute;
	left: 16px;
	top: 380px;                  /* the button ends at 368 */
	width: 358px;
	margin: 0;
	padding: 0;
	list-style: none;
	display: grid;
	grid-template-columns: repeat( 2, max-content );
	justify-content: center;
	gap: 8px 16px;
	font-family: 'Assistant', sans-serif;
	font-size: 14px;
	color: var( --bel-title-dark, #000 );
	--bel-hfx-next: 384;
	--bel-hfx-gap: 12;
}
.bel-hero-canvas :is( .d-hero__facts, .m-hero__facts ) li {
	display: flex;
	align-items: center;
	gap: 12px;
	font-weight: 700;
	line-height: 1.3;
	white-space: nowrap;
}
.bel-hero-canvas .m-hero__facts li { gap: 7px; }
.m-hero__facts li::before { width: 20px; height: 20px; }

.bel-stage--hero-facts :is( .d-hero__proof, .d-hero__devices, .m-hero__proof, .m-hero__devices ) {
	margin-top: calc( var( --bel-hfx, 0 ) * 1px );
}
.bel-stage--hero-facts .d-hero { height: calc( 1250px + var( --bel-hfx, 0 ) * 1px ); }
.bel-stage--hero-facts .m-hero,
.bel-stage--hero-facts .m-hero__bg { height: calc( 745.572px + var( --bel-hfx, 0 ) * 1px ); }
