/* Fusion Relocations — Design Tokens (extracted from live site fusionrelocations.ae, 2026-07-07)
   Source of truth: --fr-* custom properties found in production CSS.
   TYPE UPDATE (2026-07-08): brand type is Bricolage Grotesque (display) + Onest (body),
   replacing the site's Cormorant Garamond + Outfit. @font-face declarations below. */

:root {
  /* Brand color */
  --fr-navy-deep:   #1a2740;
  --fr-navy:        #2B3B59;
  --fr-navy-light:  #3a4f74;
  --fr-gold:        #B88A48;
  --fr-gold-light:  #d4a85c;
  /* #8D5C33, was #996338 — 4.45:1 on the warm cream tint missed AA. */
  --fr-gold-dark:   #8D5C33;
  --fr-cream:       #EFE8DA;
  --fr-cream-light: #f8f4ee;
  --fr-white:       #ffffff;
  --fr-blue:        #4CA6E1;
  /* #667080, was #8A94A3 — 3.06:1 on white (breadcrumbs, eyebrows). */
  --fr-grey:        #667080;
  /* #5F6774, was #6b7280 — 4.41:1 on the cream ground failed WCAG AA by a
     hair; this keeps the tone and clears 5.2:1. */
  --fr-body-text:   #5F6774;

  /* Type */
  --fr-font-display: "Hanken Grotesk", system-ui, sans-serif;
  --fr-font-body:    "Onest", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;

  /* Layout */
  --fr-container: 1560px;

  /* Spacing */
  --fr-space-xs: 8px;
  --fr-space-sm: 16px;
  --fr-space-md: 32px;
  --fr-space-lg: 64px;
  --fr-space-xl: 100px;

  /* Radius */
  --fr-radius-xs: 2px;
  --fr-radius-sm: 3px;
  --fr-radius-md: 6px;
  --fr-radius-lg: 12px;

  /* Elevation */
  --fr-shadow-navy:    0 8px 28px rgba(43,59,89,.15);
  --fr-shadow-lg:      0 20px 60px rgba(43,59,89,.2);
  --fr-shadow-gold:    0 8px 28px rgba(184,138,72,.35);
  --fr-shadow-gold-lg: 0 14px 40px rgba(184,138,72,.5);

  /* Motion */
  --fr-ease:            cubic-bezier(0.4, 0, 0.2, 1); /* @kind other */
  --fr-transition:      all 0.3s cubic-bezier(0.4, 0, 0.2, 1); /* @kind other */
  --fr-transition-fast: all 0.15s cubic-bezier(0.4, 0, 0.2, 1); /* @kind other */

  /* Z-index */
  --fr-z-base: 1; /* @kind other */
  --fr-z-raised: 5; /* @kind other */
  --fr-z-overlay: 10; /* @kind other */
  --fr-z-modal: 100; /* @kind other */
  --fr-z-nav: 200; /* @kind other */
}

/* ── Brand webfonts ──────────────────────────────────────────────────────────
   Brand type updated 2026-07-08: Bricolage Grotesque (display, variable 200–800)
   + Onest (body, variable 100–900), replacing Cormorant Garamond + Outfit.
   SELF-HOSTED (2026-07-27): both variable woff2 files are served from
   assets/fonts/ and preloaded in <head> by functions.php. No request ever leaves
   for fonts.googleapis.com or fonts.gstatic.com — that removes two third-party
   connections from the critical path and keeps visitor IPs off Google's CDN. */
@font-face {
  font-family: "Hanken Grotesk";
  src: url("fonts/hanken-grotesk.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bricolage Grotesque";
  src: url("fonts/bricolage-grotesque.woff2") format("woff2");
  font-weight: 200 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Onest";
  src: url("fonts/onest.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

/* ── theme runtime rules ── */
fr-if { display: contents; }
fr-if[hidden] { display: none !important; }
html { scroll-behavior: smooth; }
body.fr-page { margin: 0; }
/* keep the WP admin bar from overlapping the fixed header on dev */
body.admin-bar #fr-header { top: 32px; }

/* ── Mobile menu + overlay layout fixes (theme additions) ── */
#fr-mobilemenu {
  position: fixed; inset: 0; z-index: 9999; background: var(--fr-white);
  padding: 92px 22px 40px; overflow-y: auto; -webkit-overflow-scrolling: touch;
}
#fr-mobilemenu details { border-bottom: 1px solid rgba(43,59,89,.12); }
#fr-mobilemenu summary {
  font: 600 17px/1 var(--fr-font-body); color: var(--fr-navy-deep);
  padding: 16px 0; display: flex; justify-content: space-between; align-items: center;
}
#fr-mobilemenu summary::after { content: "+"; color: var(--fr-gold); font-size: 20px; }
#fr-mobilemenu details[open] summary::after { content: "–"; }
.fr-mm-links { display: flex; flex-direction: column; padding: 0 0 14px; }
.fr-mm-links a {
  font: 400 15px/1.4 var(--fr-font-body); color: var(--fr-navy); text-decoration: none;
  padding: 9px 0 9px 14px;
}
.fr-mm-flat { border-bottom: 1px solid rgba(43,59,89,.12); padding: 10px 0 14px; }
.fr-mm-flat a { padding-left: 0; font-weight: 500; color: var(--fr-navy-deep); }
.fr-mm-cta { display: flex; gap: 10px; margin-top: 20px; }
.fr-mm-cta a {
  flex: 1; text-align: center; padding: 14px 8px; border-radius: var(--fr-radius-md);
  font: 600 13px/1 var(--fr-font-body); letter-spacing: .08em; text-transform: uppercase;
  text-decoration: none; border: 1px solid var(--fr-navy); color: var(--fr-navy-deep);
}
.fr-mm-cta .fr-mm-quote {
  border: 0; background: linear-gradient(135deg, var(--fr-gold-light), var(--fr-gold));
  color: var(--fr-navy-deep); box-shadow: var(--fr-shadow-gold);
}

/* Sub-384px header fit. The logo (136px) plus the CTA-and-burger cluster
   (202px) plus gutters overflow a 360px viewport by ~26px — every page gained
   a horizontal scroll on small Androids. Targets the stable ids, not the
   generated frs-* classes, which differ per template. */
@media (max-width: 384px) {
  #fr-mainrow { gap: 8px; }
  #fr-logo { height: 38px !important; }
  #fr-mainrow > div:last-child { gap: 8px; }
  #fr-mainrow > div:last-child > a:first-child {
    padding: 10px 12px; font-size: 11.5px; letter-spacing: .04em;
  }
  #fr-mainrow > div:last-child > a:first-child svg { display: none; }
}

@media (max-width: 782px) {
  /* overlay policy: nothing may cover the sticky action bar or each other */
  body.fr-page { padding-bottom: 66px; }
  #fr-consent {
    bottom: 78px !important; left: 12px !important;
    width: min(300px, calc(100vw - 96px)) !important;
    font-size: 12.5px !important; padding: 12px 14px !important;
  }
  #fr-wa-bubble { bottom: 78px !important; right: 12px !important; width: 48px !important; height: 48px !important; }
}

/* ── Consent + form feedback ──────────────────────────────────────────────
   The consent control is injected by the converter (the design system has no
   equivalent yet — see convert-ds-to-theme.py). Styled from DS tokens only. */
.fr-consent {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  margin: 14px 0 4px;
  font: 400 12.5px/1.5 var(--fr-font-body);
  color: var(--fr-body-text);
  cursor: pointer;
}
.fr-consent input { margin-top: 2px; accent-color: var(--fr-gold); flex: none; }
.fr-consent a { color: var(--fr-gold-dark); font-weight: 600; }

.fr-form-error {
  margin: 10px 0 0;
  padding: 9px 12px;
  border-radius: var(--fr-radius-md);
  background: #FDEAEA;
  color: #B30000;
  font: 500 13px/1.45 var(--fr-font-body);
}

/* Keyboard focus. The design system's style-focus rules are compiled into
   fusion-generated.css; this is the site-wide default for anything without one. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 2px solid var(--fr-gold);
  outline-offset: 2px;
  border-radius: var(--fr-radius-xs);
}


/* ── Image slots ──────────────────────────────────────────────────────────
   fr_image_slot() renders these. They must cover their frame exactly as the
   design system's own slot markup did — without this the hero photo renders at
   its intrinsic width and leaves a gap at wide viewports. */
.fr-slot-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

/* Gold accent on the second half of a hero headline — the design system's
   two-tone H1, preserved now that the text itself is dynamic. */
.fr-h1-accent { color: var(--fr-gold-dark); font-style: normal; }

/* ── Breadcrumbs ──────────────────────────────────────────────────────────
   inc/seo.php emits a <nav><ol> for the Breadcrumb schema on 199 pages and no
   rule ever styled it, so every one of them opened with a browser-default
   numbered list — "1. Home  2. Destinations  3. Moving to UK from Dubai" —
   stacked vertically above the H1. The markup is correct and the schema is
   valid, which is why nothing flagged it; it is only wrong to look at. */
.fr-breadcrumbs { margin: 0 0 var(--fr-space-sm); }
.fr-breadcrumbs ol {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  margin: 0; padding: 0; list-style: none;
}
.fr-breadcrumbs li { display: flex; align-items: center; gap: 8px; }
.fr-breadcrumbs li + li::before {
  content: "/"; color: var(--fr-grey); opacity: .55; font-size: 12px;
}
.fr-breadcrumbs a,
.fr-breadcrumbs [aria-current="page"] {
  font: 400 13px/1.4 var(--fr-font-body); letter-spacing: .2px;
}
.fr-breadcrumbs a { color: var(--fr-body-text); text-decoration: none; }
.fr-breadcrumbs a:hover { color: var(--fr-gold-dark); text-decoration: underline; }
.fr-breadcrumbs [aria-current="page"] { color: var(--fr-grey); }

/* ── Reviews carousel ─────────────────────────────────────────────────────
   Card markup mirrors the design system's own review figure, so it inherits
   the section styling. Scroll-snap does the carousel: it works with no JS,
   scrolls natively with a keyboard, and the arrows are enhancement only. */
/* The band this drops into is itself a grid — the design system lays the
   static review figures out in four columns. The carousel is one element, so
   without this it sits in column one and the other three collapse to zero. */
/* min-width: 0 is load-bearing. A grid item defaults to min-width: auto, so
   the carousel could not shrink below its 300px column floor: at 320, 820,
   912 and 1024 the track grew wider than its parent and took the whole
   DOCUMENT into horizontal scroll. Overflow belongs inside the track. */
.fr-reviews { position: relative; grid-column: 1 / -1; min-width: 0; }
.fr-reviews__track {
  min-width: 0;
  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(300px, 1fr);
  gap: var(--fr-space-md); overflow-x: auto; scroll-snap-type: x mandatory;
  scroll-behavior: smooth; padding-bottom: 6px; scrollbar-width: thin;
}
.fr-reviews__track:focus-visible { outline: 2px solid var(--fr-gold); outline-offset: 4px; }
/* Three cards visible, the rest reached by scrolling.
   The track width must be FIXED, not a minmax() with a zero floor. A floor of
   zero lets every column shrink to fit the container instead of overflowing it,
   so nine reviews rendered as nine 123px ribbons of one word per line rather
   than three readable cards. Three cards and two gaps make up the width, so
   each card is a third less two-thirds of one gap. */
@media (min-width: 900px) {
  .fr-reviews__track {
    grid-auto-columns: calc(33.333% - (var(--fr-space-md) * 2 / 3));
  }
}
.fr-review {
  scroll-snap-align: start; margin: 0; background: var(--fr-white);
  border: 1px solid #E2E6ED;
  border: 1px solid color-mix(in srgb, var(--fr-navy) 12%, transparent);
  border-radius: var(--fr-radius-lg); padding: var(--fr-space-md);
  display: flex; flex-direction: column; gap: 14px;
}
.fr-review__stars { display: flex; gap: 3px; color: var(--fr-gold); }
.fr-review__quote {
  margin: 0; font: 300 15.5px/1.7 var(--fr-font-body); color: var(--fr-body-text);
}
.fr-review__by { display: flex; align-items: center; gap: 12px; margin-top: auto; }
.fr-review__avatar {
  width: 38px; height: 38px; flex: none; border-radius: 999px;
  display: grid; place-items: center; background: var(--fr-cream);
  color: var(--fr-navy-deep); font: 600 15px/1 var(--fr-font-display);
}
.fr-review__by b { display: block; font: 600 14px/1.3 var(--fr-font-body); color: var(--fr-navy-deep); }
.fr-review__route { display: block; font: 400 12.5px/1.4 var(--fr-font-body); color: var(--fr-grey); }
.fr-reviews__nav { display: flex; gap: 8px; justify-content: flex-end; margin-top: var(--fr-space-sm); }
.fr-reviews__btn {
  width: 40px; height: 40px; border-radius: 999px; cursor: pointer;
  border: 1px solid color-mix(in srgb, var(--fr-navy) 20%, transparent);
  background: var(--fr-white); color: var(--fr-navy-deep); font-size: 16px;
}
.fr-reviews__btn:hover { border-color: var(--fr-gold); color: var(--fr-gold-dark); }
.fr-reviews__btn:focus-visible { outline: 2px solid var(--fr-gold); outline-offset: 2px; }

.fr-reviews-empty { text-align: center; }
.fr-reviews-empty__score {
  display: inline-flex; align-items: center; gap: 8px;
  font: 400 16px/1.5 var(--fr-font-body); color: var(--fr-body-text);
}
.fr-reviews-empty__score svg { color: var(--fr-gold); }
.fr-reviews-empty__link { color: var(--fr-gold-dark); font-weight: 600; }


/* ── Content sections ─────────────────────────────────────────────────────
   The page's own content, rendered as design-system sections rather than a
   block of pasted HTML. Type is taken from the DS sections verbatim: h2 at
   600 clamp(28px,3.4vw,40px)/1.15 display, body at 300 17px/1.75, so a content
   section is indistinguishable from a designed one. Grounds alternate white and
   cream per the DS composition rule. */
/* Consecutive content sections share a rhythm — each one carrying the full XL
   section padding stacked 13 × 200px of dead space onto a long guide. The band
   opens and closes at full padding; the joins between are tighter. */
.fr-cs { padding: var(--fr-space-xl) var(--fr-space-md); }
.fr-cs + .fr-cs { padding-top: var(--fr-space-md); }
.fr-cs--white + .fr-cs--white,
.fr-cs--cream + .fr-cs--cream { padding-top: 0; }
.fr-cs:first-of-type { padding-top: var(--fr-space-xl); }
.fr-cs--white { background: var(--fr-white); }
.fr-cs--cream { background: var(--fr-cream-light); }
.fr-cs__inner { max-width: 860px; margin: 0 auto; }
.fr-cs__h2 {
  font: 600 clamp(28px, 3.4vw, 40px)/1.15 var(--fr-font-display);
  color: var(--fr-navy-deep); margin: 0 0 20px; text-wrap: balance;
}
.fr-cs__body > :first-child { margin-top: 0; }
.fr-cs__body p,
.fr-cs__body li { font: 300 17px/1.75 var(--fr-font-body); color: var(--fr-body-text); }
.fr-cs__body p { margin: 0 0 18px; }
.fr-cs__body h3 {
  font: 600 21px/1.2 var(--fr-font-display); color: var(--fr-navy-deep); margin: 32px 0 12px;
}
.fr-cs__body h4 {
  font: 600 17px/1.3 var(--fr-font-display); color: var(--fr-navy); margin: 24px 0 8px;
}
.fr-cs__body ul, .fr-cs__body ol { margin: 0 0 20px; padding-left: 22px; }
.fr-cs__body li { margin-bottom: 8px; }
.fr-cs__body a {
  color: var(--fr-gold-dark); font-weight: 500;
  text-decoration: underline;
  text-decoration-color: rgba(184,138,72,.35);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}
.fr-cs__body a:hover { text-decoration-color: var(--fr-gold-dark); }
.fr-cs__body .fr-cs__card--link a,
.fr-cs__body summary a { text-decoration: none; }
.fr-cs__body strong { color: var(--fr-navy-deep); font-weight: 600; }
/* Inherited decorations — country flags, clipart, stock photos — carried
   explicit widths up to 1024px and rendered a Union Jack 800px wide in the
   middle of an article. Those attributes are stripped from the content; this
   caps what is left so an illustration reads as an illustration. */
.fr-cs__body img {
  max-width: min(100%, 420px); height: auto; border-radius: var(--fr-radius-md);
  display: block; margin: 24px auto;
  border: 1px solid #EAEDF2;
  border: 1px solid color-mix(in srgb, var(--fr-navy) 8%, transparent);
}
.fr-cs__body table { width: 100%; border-collapse: collapse; margin: 0 0 24px; }
.fr-cs__body th, .fr-cs__body td {
  padding: 12px 14px; text-align: left;
  border-bottom: 1px solid var(--fr-border, rgba(43,59,89,.18));
  font: 300 16px/1.6 var(--fr-font-body); color: var(--fr-body-text);
}
.fr-cs__body th { font-weight: 600; color: var(--fr-navy-deep); }

/* ── Imported sections, composed into design-system shapes ────────────────
   Mirrors the metrics the design system uses for its own bands, taken from
   DestinationLanding.dc.html rather than guessed at:

     band            padding  --fr-space-xl, alternating white / cream-light
     header          max-width 640px, centred, h2 + standfirst
     process grid    repeat(auto-fit, minmax(min(100%, 230px), 1fr)), centred
     feature grid    repeat(auto-fit, minmax(min(100%, 300px), 1fr)), 24px pad
     card            --fr-radius-lg, hairline border, white ground

   Matching those numbers is what makes an imported band sit in the same
   rhythm as a designed one instead of looking like the article underneath. */

.fr-cs__inner--wide { max-width: 1180px; }

/* Centred section header, exactly as the design opens each of its own. */
.fr-cs__head {
  max-width: 640px; margin: 0 auto var(--fr-space-md); text-align: center;
}
/* Eyebrow above the band title — the design system's own section opener. */
.fr-cs__eyebrow {
  margin: 0 0 12px; font: 600 12px/1 var(--fr-font-body);
  letter-spacing: .16em; text-transform: uppercase; color: var(--fr-gold-dark);
}
.fr-cs__head .fr-cs__h2 { margin: 0; }
.fr-cs__head .fr-cs__lede {
  margin: 14px 0 0; font: 300 18px/1.7 var(--fr-font-body);
  color: var(--fr-body-text);
  /* The base lede rule mutes navy with opacity .88; this variant is already a
     muted grey, and inheriting the opacity double-muted it (and its links)
     below WCAG AA. */
  opacity: 1;
}
/* A composed band centres its prose too, so the eye has one axis. */
.fr-cs__body--grid > p,
.fr-cs__body--grid > ul,
.fr-cs__body--grid > ol:not(.fr-cs__steps) {
  max-width: 760px; margin-left: auto; margin-right: auto;
}

.fr-cs__lede {
  font: 300 19px/1.75 var(--fr-font-body);
  color: var(--fr-navy-deep); opacity: .88; margin: 0 0 28px;
}

/* Feature cards — the "Shipping Options" pattern. */
.fr-cs__cards {
  display: grid; gap: var(--fr-space-md); margin: 0 0 var(--fr-space-md);
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
}
.fr-cs__card {
  background: var(--fr-white); border-radius: var(--fr-radius-lg);
  border: 1px solid #E2E6ED;
  border: 1px solid color-mix(in srgb, var(--fr-navy) 10%, transparent);
  padding: 24px; display: flex; flex-direction: column;
}
.fr-cs--white .fr-cs__card { background: var(--fr-cream-light); border-color: transparent; }
.fr-cs__card > :first-child { margin-top: 0; }
.fr-cs__card > :last-child { margin-bottom: 0; }
.fr-cs__card h3, .fr-cs__card h4 {
  font: 600 18px/1.35 var(--fr-font-display); color: var(--fr-navy-deep);
  margin: 0 0 10px;
}
/* A gold rule under the card title, the way the design marks its own. */
.fr-cs__card h3::after, .fr-cs__card h4::after {
  content: ""; display: block; width: 28px; height: 2px; margin-top: 12px;
  background: var(--fr-gold); opacity: .75;
}
.fr-cs__card p { margin: 0 0 12px; font-size: 15.5px; line-height: 1.7; }

/* A card that is itself a link. Without this the anchor's styling reaches the
   whole card and every word of the blurb renders gold and underlined — the
   title alone should carry the affordance. */
/* A card that is itself a link, built as an overlay anchor by
   fr_prepare_link_cards(). The anchor carries no text — it covers the card —
   so the heading and blurb keep their normal colour instead of the whole card
   rendering as one underlined block of link text. */
.fr-cs__card--link { position: relative; transition: var(--fr-transition-fast); }
.fr-cs__card--link .fr-cs__card-go {
  position: absolute; inset: 0; border-radius: inherit;
  text-decoration: none; z-index: 1;
}
.fr-cs__card--link > p:has(> .fr-cs__card-go:only-child) { margin: 0; }
.fr-cs__card--link h3, .fr-cs__card--link h4 { color: var(--fr-navy-deep); }
.fr-cs__card--link p { color: var(--fr-body-text); }
.fr-cs__card--link::after {
  content: "→"; display: block; margin-top: auto; padding-top: 14px;
  color: var(--fr-gold-dark); font-size: 17px; line-height: 1;
}
.fr-cs__card--link:hover {
  border-color: #D4B577;
  border-color: color-mix(in srgb, var(--fr-gold) 55%, transparent);
  box-shadow: var(--fr-shadow-navy);
}
.fr-cs__card--link:hover h3, .fr-cs__card--link:hover h4 { color: var(--fr-gold-dark); }
.fr-cs__card--link:has(.fr-cs__card-go:focus-visible) {
  outline: 2px solid var(--fr-gold); outline-offset: 3px;
}
.fr-cs__card ul { margin: 0; padding-left: 18px; }
.fr-cs__card li { font-size: 15px; }

/* Coverage chips — a set of places, read at a glance rather than as a
   run-on line of emoji and names. */
.fr-cs__chips {
  list-style: none; display: flex; flex-wrap: wrap; justify-content: center;
  gap: 8px; margin: 0 0 var(--fr-space-md); padding: 0;
}
.fr-cs__chips li {
  font: 500 13.5px/1 var(--fr-font-body); color: var(--fr-navy-deep);
  background: var(--fr-white); padding: 9px 14px; border-radius: 999px;
  border: 1px solid #E2E6ED;
  border: 1px solid color-mix(in srgb, var(--fr-navy) 12%, transparent);
  margin: 0;
}
.fr-cs--white .fr-cs__chips li {
  background: var(--fr-cream-light); border-color: transparent;
}

/* Process steps — the "How It Works" pattern: centred, numeral above title. */
.fr-cs__steps {
  list-style: none; counter-reset: fr-step; margin: 0 0 var(--fr-space-md);
  padding: 0; display: grid; gap: var(--fr-space-md);
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr));
}
.fr-cs__step {
  counter-increment: fr-step; margin: 0; text-align: center; padding: 0 6px;
}
.fr-cs__step::before {
  content: counter(fr-step, decimal-leading-zero);
  display: grid; place-items: center; margin: 0 auto 16px;
  width: 54px; height: 54px; border-radius: 999px;
  font: 600 19px/1 var(--fr-font-display); color: var(--fr-gold-dark);
  background: #F5EDDF;
  background: color-mix(in srgb, var(--fr-gold) 14%, transparent);
  border: 1px solid #E3CDA4;
  border: 1px solid color-mix(in srgb, var(--fr-gold) 34%, transparent);
}
.fr-cs__step h3, .fr-cs__step h4 {
  font: 600 17px/1.35 var(--fr-font-display); color: var(--fr-navy-deep);
  margin: 0 0 8px;
}
.fr-cs__step h3::after, .fr-cs__step h4::after { content: none; }
.fr-cs__step p { margin: 0; font-size: 15px; line-height: 1.7; }
.fr-cs__step > :last-child { margin-bottom: 0; }

@media (max-width: 640px) {
  .fr-cs__step { text-align: left; display: grid; grid-template-columns: 54px 1fr;
                 column-gap: 16px; align-items: start; }
  .fr-cs__step::before { margin: 0; }
  .fr-cs__step h3, .fr-cs__step h4, .fr-cs__step p { grid-column: 2; }
}

/* FAQ accordions, rebuilt from the imported content, styled as the DS does. */
.fr-cs__body details {
  border-bottom: 1px solid var(--fr-border, rgba(43,59,89,.18));
}
.fr-cs__body summary {
  cursor: pointer; list-style: none; padding: 18px 0;
  font: 500 17px/1.45 var(--fr-font-body); color: var(--fr-navy-deep);
  display: flex; align-items: center; gap: 14px;
}
.fr-cs__body summary::-webkit-details-marker { display: none; }
.fr-cs__body summary::after {
  content: "+"; margin-left: auto; font-size: 22px; line-height: 1;
  color: var(--fr-gold-dark); flex: none;
}
.fr-cs__body details[open] summary::after { content: "–"; }
.fr-cs__body summary:focus-visible { outline: 2px solid var(--fr-gold); outline-offset: 3px; }
.fr-cs__body details > p { padding: 0 0 18px; margin: 0; }

/* ── Mobile tap targets ───────────────────────────────────────────────────
   The footer link columns are 20px-tall text links with an 8px gap — a 28px
   effective target, under Google's 48px guidance and only marginally over the
   24px WCAG 2.2 AA minimum. Measured at 390px wide.

   Padding rather than margin, and only below the tablet breakpoint: the links
   stay exactly where they are visually and the hit area grows around them, so
   the design is untouched on the viewports it was drawn for. The negative
   margin keeps the column from growing by the full padding on both sides. */
@media (max-width: 767px) {
  footer a {
    padding-block: 12px;
    margin-block: -6px;
  }
  /* Logo and icon links already have their own box — leave those alone. */
  footer a:has(> img),
  footer a:has(> svg:only-child) {
    padding-block: 0;
    margin-block: 0;
  }
}

/* ── Search results ───────────────────────────────────────────────────────
   Only reachable via /?s=; styled to match the content sections rather than
   introducing a layout the design system does not own. */
.fr-search-results { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--fr-space-lg, 28px); }
.fr-search-results h3 { margin: 0 0 4px; font: 600 21px/1.25 var(--fr-font-display); }
.fr-search-results h3 a { color: var(--fr-navy, #16233c); text-decoration: none; }
.fr-search-results h3 a:hover { color: var(--fr-gold-dark, #9a6f33); text-decoration: underline; }
.fr-search-results p { margin: 0; font: 300 17px/1.7 var(--fr-font-body); color: var(--fr-body-text); }

/* Link chips: the "Where to go next" / "Next steps" nav lists, promoted from
   bullet stubs. The anchor fills the pill so the whole chip is the target. */
.fr-cs__chips--links li { padding: 0; }
.fr-cs__chips--links li a {
  display: block; padding: 9px 14px; color: var(--fr-navy-deep);
  text-decoration: none; font: 500 13.5px/1 var(--fr-font-body);
}
.fr-cs__chips--links li:hover { border-color: var(--fr-gold); }

/* ── Print ──────────────────────────────────────────────────────────────────
   A page printed (or saved as the checklist PDF) keeps its content bands and
   drops the interactive chrome: navigation, forms, sticky bar, WhatsApp
   bubble, consent banner and CTA bands have no meaning on paper. */
@media print {
  #fr-header, #fr-mobilebar, #fr-wa-bubble, #fr-consent, footer,
  section[data-screen-label="Checklist"], section[data-screen-label="CTA"],
  section[data-screen-label="Hero"] .fr-hero__form, form,
  section[data-screen-label="Hero"] img, .fr-cs img { display: none !important; }
  body { background: #fff !important; }
  .fr-cs { break-inside: avoid-page; }
  a { text-decoration: none; color: inherit; }
}

/* Content tables (legacy blog posts carry transit-time tables) scroll in
   place on narrow screens instead of stretching the page. */
.fr-cs__body table { display: block; overflow-x: auto; max-width: 100%; border-collapse: collapse; }
/* A pasted URL used as link text must never widen the page. */
.fr-cs__body a { overflow-wrap: anywhere; }
/* Emergency break for any unbreakable string (pasted URLs, long references)
   so a text node can never widen the page on a phone. */
.fr-cs__body { overflow-wrap: anywhere; }

/* ── Global type inheritance ────────────────────────────────────────────────
   The DS compiles a font shorthand onto every element it authors, so the page
   LOOKED right while body itself fell back to the UA serif — and everything
   that merely inherits (plugin modal text, inputs, selects, consent lines)
   rendered in Times. Set the brand body face at the root and make form
   controls inherit it; compiled DS classes still override where they choose. */
body {
  font-family: var(--fr-font-body);
  color: var(--fr-body-text);
}
input, select, textarea, button {
  font-family: inherit;
}

/* Lead reference line on form confirmations */
.fr-ref-line {
  margin: 2px 0 6px;
  font: 500 13px/1.5 var(--fr-font-body);
  color: var(--fr-body-text);
}
.fr-ref-line b {
  font-weight: 650;
  letter-spacing: .05em;
  color: var(--fr-navy-deep);
}
.fr-ref-line--ty {
  margin: 14px 0 0;
  font-size: 15px;
}

/* Phone dial selector row */
.fr-phone-row { display: flex; gap: 8px; width: 100%; }
.fr-phone-row .fr-phone-input { flex: 1; min-width: 0; }
.fr-dial {
  flex: 0 0 auto;
  width: 96px;
  box-sizing: border-box;
  background: var(--fr-white);
  border: 1px solid rgba(43,59,89,0.22);
  border: 1px solid color-mix(in srgb, var(--fr-navy) 22%, transparent);
  border-radius: var(--fr-radius-md);
  padding: 11px 8px;
  color: var(--fr-navy-deep);
  font: 400 13.5px var(--fr-font-body);
}
/* Invalid-field state (set by the validators) */
.fr-invalid {
  border-color: #C0392B !important;
  box-shadow: 0 0 0 3px rgba(192, 57, 43, 0.12) !important;
}

/* ── Uniform selects across every form ──────────────────────────────────────
   Native appearance varies wildly per platform (the Mac popover read as a
   glitch). All form selects now share one styled control with a drawn
   chevron; the compiled DS classes keep their spacing. */
select[class*="frs-"], select.fr-dial {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23B88A48' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  padding-right: 34px !important;
  font-size: 14px !important;
  line-height: 1.3;
  max-height: 48px;
  cursor: pointer;
}
select[class*="frs-"]:focus, select.fr-dial:focus {
  outline: none;
  border-color: var(--fr-gold);
  box-shadow: 0 0 0 3px rgba(184, 138, 72, 0.18);
}

/* ── Field tooltips (all forms) ─────────────────────────────────────────────
   A small "?" beside the label; bubble on hover/focus, native title on tap. */
.fr-tip-q {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 15px; height: 15px;
  margin-left: 6px;
  border-radius: 50%;
  background: color-mix(in srgb, var(--fr-gold) 18%, var(--fr-white));
  background-color: #F3E7D4;
  color: var(--fr-gold-dark, #96703B);
  font: 700 10px/1 var(--fr-font-body);
  cursor: help;
  position: relative;
  vertical-align: middle;
}
/* The bubble is anchored to the tip's RIGHT edge and grows leftward, into the
   page. Centring it on the anchor (left: 50%; translateX(-50%)) pushed roughly
   119px past the anchor, and because an absolutely positioned descendant still
   contributes to an ancestor's scrollable overflow, that put the WHOLE PAGE
   into horizontal scroll at 320, 820, 912 and 1024. Growing inward cannot. */
.fr-tip-q::after {
  content: attr(data-tip);
  position: absolute;
  bottom: calc(100% + 8px);
  right: 0;
  left: auto;
  transform: none;
  width: max-content;
  max-width: min(230px, 62vw);
  background: var(--fr-navy-deep, #1a2740);
  color: #fff;
  font: 400 12px/1.45 var(--fr-font-body);
  padding: 8px 11px;
  border-radius: 8px;
  opacity: 0;
  pointer-events: none;
  transition: opacity .15s ease;
  z-index: 50;
  text-transform: none;
  letter-spacing: 0;
  text-align: left;
  white-space: normal;
}
.fr-tip-q:hover::after, .fr-tip-q:focus::after { opacity: 1; }

/* ── photography inside content bands ─────────────────────────────────────
   A prose section and a photograph, side by side, alternating which side the
   picture takes. Stacks on narrow screens with the image first, because a
   picture is a better entry point to a section than a paragraph is. */
.fr-cs__split {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
  gap: clamp(24px, 4vw, 56px);
  align-items: start;
}
.fr-cs__split--flip .fr-cs__body { order: 2; }
.fr-cs__split--flip .fr-cs__media { order: 1; }
.fr-cs__media {
  margin: 0;
  border-radius: var(--fr-radius-lg, 16px);
  overflow: hidden;
  box-shadow: 0 18px 40px -28px rgba(26, 39, 64, 0.45);
  position: sticky;
  top: 96px;
}
.fr-cs__media-img {
  display: block;
  width: 100%;
  height: 100%;
  max-height: 460px;
  object-fit: cover;
  aspect-ratio: 4 / 3;
}
/* Tablets stack. At 912-1023px the two columns leave a ~430px text measure
   beside a 400px picture: technically not overflowing, but a cramped read on
   the exact widths a Fold or an iPad lands on. */
@media (max-width: 1023px) {
  .fr-cs__split { grid-template-columns: 1fr; gap: 22px; }
  .fr-cs__split .fr-cs__body,
  .fr-cs__split--flip .fr-cs__body { order: 2; }
  .fr-cs__split .fr-cs__media,
  .fr-cs__split--flip .fr-cs__media { order: 1; position: static; }
  .fr-cs__media-img { max-height: 300px; aspect-ratio: 16 / 10; }
}

/* Full-width photograph between content bands. */
.fr-photoband { padding: clamp(18px, 3vw, 34px) clamp(16px, 4vw, 40px); }
.fr-photoband--white { background: var(--fr-white, #fff); }
.fr-photoband--cream { background: var(--fr-cream, #FBF8F2); }
.fr-photoband__fig { margin: 0 auto; max-width: 1160px; }
.fr-photoband__img {
  display: block;
  width: 100%;
  height: auto;
  max-height: 420px;
  object-fit: cover;
  border-radius: var(--fr-radius-lg, 16px);
  box-shadow: 0 18px 44px -30px rgba(26, 39, 64, 0.5);
}
@media (max-width: 900px) { .fr-photoband__img { max-height: 260px; } }

/* ── corporate hero capture card ──────────────────────────────────────────
   The corporate hero is a full-bleed navy panel: copy left, photograph
   showing through on the right. The card takes that right-hand space on
   desktop so the first field is on screen, and drops below the copy on
   narrow screens where a two-column hero cannot work. */
.fr-corp-hero-card { max-width: 420px; margin-top: 20px; }
@media (min-width: 1080px) {
  .fr-corp-hero-card {
    position: absolute;
    right: max(24px, 4vw);
    top: 50%;
    transform: translateY(-50%);
    width: min(400px, 34vw);
    max-width: none;
    margin-top: 0;
    z-index: 4;
  }
}

/* ── contact links on very narrow screens ─────────────────────────────────
   The address dxb.relocations@fusionshipping.co is a single unbreakable
   token inside an inline-flex link, so at 320px it forced its grid 87px
   wider than the viewport and put /contact-us/ into horizontal scroll.
   Targeted by href rather than by a generated class, which changes on every
   rebuild of the stylesheet. */
a[href^="mailto:"], a[href^="tel:"] { min-width: 0; overflow-wrap: anywhere; }
@media (max-width: 430px) {
  a[href^="mailto:"] { flex-wrap: wrap; }
}

/* ── consent banner buttons ───────────────────────────────────────────────
   Accept/Reject shipped at 11px in a 15px-high box — the smallest actionable
   text on the site, on the one control every visitor meets first. Targeted by
   the stable handler attribute, not the generated class. */
/* NB: fusion-generated.css is enqueued AFTER this file, so a single-class
   selector there beats a single-attribute selector here on a specificity tie.
   Adding the element name (0,1,1) is what makes these declarations stick. */
a[data-fr-on="click:dismissConsent"],
a[data-fr-on="click:acceptConsent"],
a[data-fr-on="click:rejectConsent"],
button[data-fr-on="click:dismissConsent"],
button[data-fr-on="click:acceptConsent"],
button[data-fr-on="click:rejectConsent"] {
  font-size: 13px;
  min-height: 40px;
  padding: 10px 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* ── grey on dark grounds ─────────────────────────────────────────────────
   --fr-grey was darkened to pass on white; the footer sets the same token's
   text on deep navy, where no single grey can pass both. Scope the original
   value back for dark-ground contexts. */
footer,
section[data-screen-label="CTA"] { --fr-grey: #9AA5B5; }

/* The Final CTA band puts body copy over a photo whose navy gradient fades to
   transparent — on mobile the whole text column sits over the faded side and
   the muted grey disappears into the image. A full-bleed scrim under the text
   (and the light-on-navy grey this band was missed by, above) fixes both. */
section[data-screen-label="Final CTA"] { --fr-grey: #9AA5B5; position: relative; }
section[data-screen-label="Final CTA"]::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(16, 24, 40, .48);
  pointer-events: none;
}
section[data-screen-label="Final CTA"] > div:has(h2),
section[data-screen-label="Final CTA"] > div:has(a) {
  position: relative;
  z-index: 1;
}

/* Quote band: the text column is sticky so it keeps pace with the tall form
   in the desktop split. Stacked into one column on mobile, sticky makes that
   column ride down the screen OVER the form as you scroll. */
@media (max-width: 1023px) {
  section[data-screen-label="Quote Form"] div:has(> h2) { position: static; }
}

/* The hero quick-quote card carries a fixed width from the desktop composition;
   inside the collapsed one-column hero grid it overhung the viewport's left
   edge. Let the column size it on small screens. */
@media (max-width: 1023px) {
  [data-comment-anchor="hero-quick-quote"] {
    box-sizing: border-box;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    margin-inline: auto;
  }
}

/* Corporate and service heroes read cramped against the bands below them. */
.page-template-template-corporate-php section[data-screen-label="Hero"],
.page-template-template-service-php section[data-screen-label="Hero"] {
  padding-top: 140px;
  padding-bottom: 140px;
}
@media (max-width: 767px) {
  .page-template-template-corporate-php section[data-screen-label="Hero"],
  .page-template-template-service-php section[data-screen-label="Hero"] {
    padding-top: 120px;
    padding-bottom: 120px;
  }
}

/* Multi-step quote form (mobile). The stepper only hides units; nothing moves. */
.fr-step-hide { display: none !important; }
.fr-steps { display: none; }
.fr-steps--on { display: block; margin-top: 18px; }
.fr-steps__count {
  font: 600 12.5px/1 var(--fr-font-body);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--fr-grey);
  margin: 0 0 10px;
}
.fr-steps__row { display: flex; gap: 10px; }
.fr-steps__btn {
  flex: 1;
  min-height: 48px;
  border-radius: var(--fr-radius-md, 10px);
  font: 600 14px/1 var(--fr-font-body);
  letter-spacing: .04em;
  cursor: pointer;
}
.fr-steps__btn--next {
  background: var(--fr-navy);
  color: var(--fr-white);
  border: 1px solid var(--fr-navy);
}
.fr-steps__btn--back {
  background: transparent;
  color: var(--fr-navy);
  border: 1px solid color-mix(in srgb, var(--fr-navy) 35%, transparent);
}
.fr-steps__btn:focus-visible { outline: 3px solid var(--fr-gold); outline-offset: 2px; }
/* The quote band sits on navy on some templates — keep the controls legible. */
section[data-screen-label="Quote Form"] .fr-steps__btn--back { color: inherit; }

/* Optional-field hint (mobile number after the WhatsApp-first decision). */
.fr-optional { font-weight: 400; color: var(--fr-grey); font-size: .92em; text-transform: none; letter-spacing: 0; }

/* Reviews band footer: Google's verified aggregate + the review invitation. */
.fr-reviews__meta { display: flex; align-items: center; justify-content: center; gap: 18px; flex-wrap: wrap; margin-top: 22px; }
.fr-reviews__agg { display: inline-flex; align-items: center; gap: 8px; color: var(--fr-body-text); font-size: 14.5px; }
.fr-reviews__cta {
  display: inline-block; padding: 10px 18px; border-radius: 8px;
  border: 1px solid var(--fr-gold); color: var(--fr-gold-dark);
  font: 600 13px/1 inherit; text-decoration: none; letter-spacing: .04em;
}
.fr-reviews__cta:focus-visible { outline: 3px solid var(--fr-gold); outline-offset: 2px; }

/* Footer "Cookie settings" — a button that reads as its sibling links. */
.fr-linklike { background: none; border: 0; padding: 0; cursor: pointer; font: inherit; color: inherit; letter-spacing: inherit; }
.fr-linklike:focus-visible { outline: 3px solid var(--fr-gold); outline-offset: 2px; }

/* The consent notice used to float over page content — first the hero stats
   (review 2.3), then, re-docked right, the quote forms' submit buttons. A
   floating card ALWAYS covers something, so it is now a slim full-width bar
   pinned to the very bottom, and the body reserves exactly its height while
   it is open — nothing is ever underneath it. On phones it sits directly
   above the action bar. */
#fr-consent {
  left: 0 !important; right: 0 !important; bottom: 0 !important;
  width: 100% !important; max-width: none !important;
  border-radius: 0 !important; border-left: 0 !important; border-right: 0 !important; border-bottom: 0 !important;
  display: flex; align-items: center; justify-content: center; gap: 10px 22px; flex-wrap: wrap;
  padding: 12px 20px !important; text-align: left;
}
#fr-consent b { margin: 0; }
#fr-consent .frs-87, #fr-consent > div { margin: 0 !important; }
body:has(fr-if[data-cond="showConsent"]:not([hidden])) { padding-bottom: 120px; }
@media (max-width: 900px) {
  #fr-consent { bottom: 56px !important; }
  body:has(fr-if[data-cond="showConsent"]:not([hidden])) { padding-bottom: 210px; }
}
body:has(fr-if[data-cond="showConsent"]:not([hidden])) #fr-wa-bubble { display: none; }
/* Wherever the fixed action bar shows (its breakpoint is 900px), the floating
   WhatsApp bubble duplicates the bar's own button — show one, never both. */
@media (max-width: 900px) {
  #fr-wa-bubble { display: none !important; }
}

/* Footer site search (review 2.6 — the engine existed, the control did not). */
.fr-search { display: flex; gap: 8px; align-items: center; max-width: 460px; margin: 0 0 18px; }
.fr-search__label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
.fr-search__input {
  flex: 1; min-width: 0; box-sizing: border-box; padding: 11px 14px;
  border-radius: 8px; border: 1px solid color-mix(in srgb, var(--fr-cream) 25%, transparent);
  background: color-mix(in srgb, var(--fr-white) 7%, transparent); color: var(--fr-cream);
  font: 400 13.5px/1 inherit;
}
.fr-search__input::placeholder { color: var(--fr-grey); }
.fr-search__btn {
  padding: 11px 18px; border-radius: 8px; border: 1px solid var(--fr-gold);
  background: transparent; color: var(--fr-gold-light); font: 600 13px/1 inherit;
  letter-spacing: .05em; cursor: pointer;
}
.fr-search__btn:focus-visible, .fr-search__input:focus-visible { outline: 3px solid var(--fr-gold); outline-offset: 2px; }

/* The consent-gated contact map. */
[data-fr-map] { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 320px; border-radius: var(--fr-radius-lg, 12px); background: var(--fr-cream); overflow: hidden; }
[data-fr-map] iframe { width: 100%; height: 100%; min-height: 320px; border: 0; display: block; }
.fr-map__load {
  padding: 13px 22px; border-radius: 8px; border: 1px solid var(--fr-gold-dark);
  background: var(--fr-white); color: var(--fr-gold-dark); font: 600 13.5px/1 inherit; cursor: pointer;
}
.fr-cs__media--own { display: block; }

/* Skip link (review 5.2) — invisible until it receives keyboard focus. */
.fr-skip {
  position: fixed; top: -60px; left: 16px; z-index: 9999;
  padding: 12px 20px; border-radius: 0 0 10px 10px;
  background: var(--fr-navy-deep); color: var(--fr-white);
  font: 600 14px/1 var(--fr-font-body, sans-serif); text-decoration: none;
  transition: top .15s ease;
}
.fr-skip:focus-visible { top: 0; outline: 3px solid var(--fr-gold); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .fr-skip { transition: none; } }

/* Touch targets (review 5.3): every interactive control reaches 40px+.
   The consent checkbox measured 13px against a 44px guideline. */
input[type="checkbox"], input[type="radio"] { width: 22px; height: 22px; min-width: 22px; accent-color: var(--fr-gold); }
.fr-consent > input { margin-top: 0; }
.fr-consent { align-items: center; }
label:has(> input[type="checkbox"]), label:has(> input[type="radio"]) { min-height: 40px; display: flex; align-items: center; gap: 10px; }
#fr-consent a[data-fr-on] { min-height: 40px; display: inline-flex; align-items: center; }
.frs-79 { display: inline-flex; align-items: center; min-height: 40px; }
.frs-78 { display: inline-flex; flex-wrap: wrap; align-items: center; max-width: 100%; }
#fr-utility a { min-height: 40px; display: inline-flex; align-items: center; }

/* Card grids cap at three columns so nine cards make three full rows and six
   make two — no orphan card beside a shaded void (review 3.1). */
@media (min-width: 1024px) {
  .frs-348 { grid-template-columns: repeat(3, 1fr); }
  .frs-354 { grid-template-columns: repeat(3, 1fr); }
}

/* Honeypot: off-screen for humans and screen readers, present for scrapers. */
.fr-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; opacity: 0; pointer-events: none; }

/* Ad landers: fully self-contained hero + proof bands (never reuse frs-* here —
   those classes are context-generated and restyle unpredictably). */
.fr-lp-hero { background: linear-gradient(135deg, #142442 0%, #1d3358 100%); padding: 64px 24px; }
.fr-lp-hero__in { max-width: 1160px; margin: 0 auto; display: grid; grid-template-columns: 1.1fr .9fr; gap: 48px; align-items: center; }
.fr-lp-hero__eyebrow { color: #D4A85C; font-size: 14px; letter-spacing: .08em; text-transform: uppercase; font-weight: 600; margin: 0 0 14px; }
.fr-lp-hero__h1 { color: #fff; font-size: clamp(30px, 4vw, 44px); line-height: 1.12; margin: 0 0 16px; }
.fr-lp-hero__sub { color: #c9d2e2; font-size: 17px; line-height: 1.65; margin: 0 0 18px; max-width: 56ch; }
.fr-lp-points { list-style: none; margin: 0 0 22px; padding: 0; }
.fr-lp-points li { color: #eef2f8; font-weight: 600; margin: 8px 0; padding-left: 28px; position: relative; }
.fr-lp-points li::before { content: ''; position: absolute; left: 0; top: 3px; width: 16px; height: 16px; border-radius: 50%; background: #B88A48; box-shadow: inset 0 0 0 3px #142442; outline: 2px solid #B88A48; }
.fr-lp-stats { display: flex; flex-wrap: wrap; gap: 12px 34px; padding-top: 18px; border-top: 1px solid rgba(184,138,72,.4); }
.fr-lp-stats span { font-size: 13px; color: #9BA7BD; }
.fr-lp-stats b { display: block; font-size: 21px; color: #fff; }
.fr-lp-hero__media { margin: 0; }
.fr-lp-hero__media img { width: 100%; height: 420px; object-fit: cover; border-radius: 14px; display: block; }
.fr-lp-proof { padding: 56px 24px 72px; background: #F7F4EC; }
.fr-lp-proof__in { max-width: 760px; margin: 0 auto; }
.fr-lp-proof h2 { color: #1A2740; font-size: 27px; margin: 0 0 14px; }
.fr-lp-proof p { color: #3E4652; line-height: 1.7; margin: 0 0 14px; }
@media (max-width: 900px) {
  .fr-lp-hero { padding: 44px 18px; }
  .fr-lp-hero__in { grid-template-columns: 1fr; gap: 28px; }
  .fr-lp-hero__media img { height: 260px; }
}
