/** Shopify CDN: Minification failed

Line 2276:11 Expected identifier but found whitespace
Line 2276:20 Unexpected ";"
Line 5837:0 Unexpected "}"

**/
/* lcg2-lander.css — the L-Carnitine/GLP-1 **v2** lander's stylesheet.
   Copy of lcg-lander.css taken 2026-09-09 when page.lcarnitine-glp1-2 was
   created. It is a separate file on purpose: v2 exists to diverge, and a
   shared sheet would push every v2 style change onto the live v1 lander.
   Both scope under #fonLcg and only one ever loads per page (see the
   template.suffix case in snippets/fon-scripts-header.liquid).

   Original header follows.
   lcg-lander.css — the L-Carnitine/GLP-1 lander's stylesheet.
   BUILT BY HAND FROM THE SECTION, and it lives here for one reason: Shopify
   rejects any template over 256KB, and the section had reached 267.5KB with
   this 146KB of CSS inline. That rejection is silent from git's side - the push
   succeeds, the theme simply keeps serving the previous version - so if the
   lander ever stops updating, check the size before anything else.

   The font and icon URLs were `asset_url` filters when this was inline. A
   stylesheet served out of assets/ resolves relative url() against its own
   folder, which is where all of these files are, so the bare filenames below
   are equivalent. Do not "fix" them into absolute CDN paths: those go stale
   when the theme changes.

   Loaded from snippets/fon-scripts-header.liquid for template.suffix
   lcarnitine-glp1, in the head, so the page never paints unstyled. */

/* ==========================================================================
   FON — "L-CARNITINE IS THE NEW GLP-1" CAMPAIGN LANDING PAGE
   Tokens: type, palette, surfaces, components.

   EVERY VALUE IN THIS FILE IS READ OUT OF THE LIVE FON THEME EXPORT
   (theme_export__usefon-com-fon-shopify-theme-main__27JUL2026-1051pm).
   Nothing here is a new brand decision. Sources are cited per token.

     Tomato Grotesk        assets/font-tomato.css — FON's licensed brand face,
                           nine cuts. Served from usefon.com's own CDN rather
                           than committed here; the live site already serves
                           these exact files publicly.
     #0171E3               THE action colour. It is the button fill in
                           fon-index-2026.css, onefit-all-jan-2026.css
                           (.fon-button-dark), fon-conquesting*.css
                           (.pre-heading) and the "sachets" badge in
                           product-info-onefit-all-jan-2026.liquid. Every CTA
                           on this page is this blue and nothing else is.
     #3E3E3E               body/heading grey, fon-index-2026.css h2 + .fon-button-light
     #FFFFFC #F9F8F7       the homepage's WARM neutral family, from the
     #F5F3F1 #F2F1EE       design-d sections that templates/index.json renders
     #DAD9D5               (index-design-d-hero, design-d-faqs,
                           design-d-complete-the-quiz). See SURFACES below.
     1300px                settings_data.json page_width
     radius 2-4px          .fon-button 2px, .fon-button-dark 4px. The theme's
                           global block_border_radius is 0; campaign sections
                           soften to 4-10px. This page stays in that band.

   THE PAGE IS WARM, NOT GREY.
   FON's homepage runs cream and bone — #FFFFFC through #DAD9D5 — and the ad
   creative for this campaign is shot on the same pale warm ground. The first
   build of this file used #FAFAFA / #F6F6F8, the cool greys from the other half
   of the theme, and the result read subtly wrong: cool grey panels sitting on
   warm photography, with blue-black hairlines over cream. Every surface, rule
   and edge below is now warm-tinted to match.

   THE BAND IS A SURFACE, NOT A SECOND ACCENT.
   --sand carries the ad creative's tone into the page so the visitor recognises
   where they landed. But a second ACCENT colour alongside FON blue would give
   the page two competing things that look clickable and blunt the CTA — so
   --sand is only ever a band the page sits on, and #0171E3 stays the only thing
   on the page that means "click".
   ========================================================================== */

/* --------------------------------------------------------------------------
   0. TYPE — Tomato Grotesk, registered as ONE family with real weights.
   The theme declares nine separate font-families ("Tomato Grotesk Medium" as
   its own family name, etc). That works in Liquid where each rule names its
   cut, but it makes `font-weight: 500` a no-op. Registered properly here so
   the weight axis behaves and there is one family name on the page.
   -------------------------------------------------------------------------- */@font-face { font-family:"Tomato Grotesk"; src:url("Tomato-Grotesk-Light.woff2") format("woff2"); font-weight:300; font-style:normal; font-display:swap; }@font-face { font-family:"Tomato Grotesk"; src:url("Tomato-Grotesk-Regular.woff2") format("woff2"); font-weight:400; font-style:normal; font-display:swap; }@font-face { font-family:"Tomato Grotesk"; src:url("Tomato-Grotesk-Medium.woff2") format("woff2"); font-weight:500; font-style:normal; font-display:swap; }@font-face { font-family:"Tomato Grotesk"; src:url("Tomato-Grotesk-Semibold.woff2") format("woff2"); font-weight:600; font-style:normal; font-display:swap; }@font-face { font-family:"Tomato Grotesk"; src:url("Tomato-Grotesk-Bold.woff2") format("woff2"); font-weight:700; font-style:normal; font-display:swap; }#fonLcg {
  --font: "Tomato Grotesk", system-ui, -apple-system, "Segoe UI", sans-serif;

  /* --- Ink scale, straight from the theme --- */
  --ink:      #131210;   /* settings text_color is #000000, warmed and softened so large
                            display type sits in the cream rather than on it. */
  --ink-900:  #1A1A1A;   /* settings product_card_text_color / checkout_button_color */
  --grey-700: #3E3E3E;   /* fon-index-2026.css h2, .fon-button-light label */
  --grey-500: #707170;   /* fon-section-onefit-all-jan-26.liquid */
  --grey-400: #8D8B8B;   /* onefit-all-reviews.liquid secondary label */
  --grey-300: #AFAFAF;   /* fon-index-2026.css .pre-heading */

  /* --- Surfaces: THE HOMEPAGE'S WARM NEUTRALS ---
     The first pass built these out of #FAFAFA / #F6F6F8, the cool greys in
     fon-index-2026.css. That was the wrong half of the theme. The homepage
     template (templates/index.json) also renders index-design-d-hero,
     design-d-faqs and design-d-complete-the-quiz, and those sections run an
     entirely warm family — which is what the site actually looks like, and
     what the ad creative for this campaign is shot on. Cool grey next to warm
     cream is the specific thing that made the page feel slightly "off".

     Every value below is lifted from those sections verbatim, except --sand,
     which is noted. */
  /* EVERY LIGHT BAND IS WHITE, ON REQUEST.
     These were the theme's four warm neutrals — #FFFFFC, #F9F8F7, #F2F1EE and
     the sand band below — and the page alternated between them so each section
     read as its own surface. On a phone that reads as beige-on-beige: the steps
     between them are two or three points of luminance, which is not enough to
     separate a section but is more than enough to make the whole page look
     slightly dirty next to a bright reference lander.

     All four collapse to white. The page keeps its structure from the CARD
     edges instead of from the bands: every panel, option and tile already
     carries a hairline and most carry a shadow, and against white those finally
     do visible work. --stone stays warm — it is only ever a rule or an edge,
     never a fill, and a warm hairline on white reads as part of the design where
     a grey one reads as a border. */
  --paper: #FFFFFF;
  --mist:  #FFFFFF;
  --fog:   #FFFFFF;
  --stone: #DAD9D5;      /* design-d — the warm mid-grey, used for rules/edges */

  /* THE CAMPAIGN BAND. Sits between --fog (#F2F1EE) and --stone (#DAD9D5) on
     the theme's own warm line, so it is a step of the homepage palette rather
     than a new colour. It is what carries the ad creative's pale sage-cream
     into the page. NOT an accent — see the header note. */
  --sand:      #FFFFFF;
  /* Still warm, and still only a backing plate: this sits BEHIND the hero
     photograph, where it is never seen except as the letterbox around an image
     that has not painted yet. White there would flash white-on-white. */
  --sand-deep: #F2F0EC;

  /* --- THE action colour ---
     #EAF6AB, sampled off the RENDERED usefon.com homepage, where it is the
     announcement bar and the "Get Started" button — the site's only CTA fill.

     The first build used #0171E3 here, taken from fon-index-2026.css and
     onefit-all-jan-2026.css. Those files are real, but they are older campaign
     sections; blue is not what the site currently ships. Measured on the live
     page: bg rgb(234,246,171), label rgb(51,51,51) / rgb(63,63,63),
     Tomato Grotesk SemiBold 13-14px, radius 3px in the header and 100px on the
     larger pill buttons.

     LIME IS A HIGHLIGHT, NOT THE ACTION COLOUR, AND NOT TEXT.
     A pass that put lime on the buttons AND the ticks AND the step discs AND
     the numerals AND the marquee AND a full section band left the page with no
     hierarchy — eight things shouting the same colour reads as mess, not as
     branding. Lime now appears in exactly four places, and all four are the
     same idea, 'this is the number that matters':

       the promo strip        the brand signature, as on usefon.com
       the 1,000 figure       the page's single loudest fact
       the L-Carnitine chip   the same fact, on the product
       the 'Best value' tag   the one choice being recommended

     Everything else — buttons, ticks, discs, rules, numerals — is ink. At
     1.2:1 on white lime can never carry text anyway; it only works as a fill
     behind something near-black, or reversed out on ink at 15:1. */
  --blue:     #0171E3;   /* live PDP body CTA */
  --blue-dk:  #0159B4;
  --lime:     #EAF6AB;
  --lime-dk:  #DFEE93;   /* hover. The live site hovers with a lift and a shadow
                            only; a tone step is added so the change does not
                            depend on motion alone. */
  --lime-ink: #333333;   /* the live label colour, 11.6:1 on lime */

  /* Rating stars. Ink stars read as glyphs; a rating reads as a rating when it
     is gold, which is the convention every review platform uses. This is the
     theme's own gold (#F0C417 in the design-d sections), not a new colour. */
  --star:     #F0C417;
  --star-dk:  #C79F0F;   /* the same hue darkened for small 12px star rows,
                            where the light gold alone is too faint on cream */

  /* --- Geometry: the theme's own button radii --- */
  --r-sm: 2px;           /* .fon-button */
  --r:    4px;           /* .fon-button-dark, .fon-button-light */
  --r-md: 10px;          /* campaign card radius band */
  --r-lg: 16px;
  --r-pill: 999px;

  /* --- Space --- */
  /* THE MOBILE FLOORS WERE SET BY A DESKTOP EYE. At 390px a 64px band top and
     bottom put 128px of nothing between every section, and over eleven bands
     that is a screen and a half of empty page — which is most of why the phone
     rendering read as "too tall" beside the reference lander, which runs ~40px
     at this width. Only the floors move; the clamp ceilings are untouched, so
     desktop is exactly as it was. */
  --sect-y:    clamp(48px, 5.4vw, 84px);
  --sect-y-lg: clamp(44px, 6.8vw, 106px);
  --sect-y-sm: clamp(34px, 4vw, 60px);
  --gutter: clamp(20px, 5vw, 56px);
  --shell:  1300px;      /* settings page_width */
  --shell-narrow: 940px;

  /* --- Elevation, from .fon-button / .fon-button-light --- */
  --shadow-btn: 0 4px 4px 0 rgba(0, 0, 0, .10);
  --lcg-shadow-sm:  0 2px 8px rgba(16, 16, 16, .06);
  --lcg-shadow:     0 5px 15px 0 rgba(76, 76, 76, .14);
  --shadow-lg:  0 18px 44px -16px rgba(16, 16, 16, .22);

  /* --- Motion. The brief says no unnecessary animation: one easing, short
         durations, and reveals only. Nothing loops, nothing bounces. --- */
  --ease: cubic-bezier(.22, 1, .36, 1);
  --d-fast: .22s;
  --d: .5s;
}

/* --------------------------------------------------------------------------
   1. SURFACES
   Each band sets the same variable names so components never need to know what
   they are sitting on — one .btn, one .card, one .rule for the whole page.
   -------------------------------------------------------------------------- */
/* All rules and edges are warm-tinted (a brown-black, not a blue-black) so a
   hairline over cream reads as part of the surface rather than a grey line
   pasted on top of it. */#fonLcg,
#fonLcg .s-paper {
  --surface: var(--paper);
  --fg: var(--ink);
  --fg-mut: var(--grey-700);
  --fg-soft: var(--grey-500);
  --rule: rgba(32, 28, 20, .13);
  --rule-str: rgba(32, 28, 20, .27);
  --card: #FFFFFF;
  --card-edge: rgba(32, 28, 20, .11);
  --chip: var(--fog);
}#fonLcg .s-mist { --surface: var(--mist); --fg: var(--ink); --fg-mut: var(--grey-700); --fg-soft: var(--grey-500);
  --rule: rgba(32,28,20,.13); --rule-str: rgba(32,28,20,.27); --card: #FFFFFC; --card-edge: rgba(32,28,20,.11); --chip: #FFFFFC; }#fonLcg .s-fog { --surface: var(--fog);  --fg: var(--ink); --fg-mut: var(--grey-700); --fg-soft: var(--grey-500);
  --rule: rgba(32,28,20,.14); --rule-str: rgba(32,28,20,.28); --card: #FFFFFC; --card-edge: rgba(32,28,20,.12); --chip: #FFFFFC; }

/* SAND — the campaign band. Carries the ad creative into the page. */#fonLcg .s-sage {
  --surface: var(--sand);
  --fg: var(--ink);
  --fg-mut: #423C31;          /* 9.1:1 on sand — the body grey warmed to the
                                 band so copy doesn't read cold against it */
  --fg-soft: #665F51;         /* 5.2:1 */
  --rule: rgba(38, 32, 20, .15);
  --rule-str: rgba(38, 32, 20, .3);
  --card: #FFFFFC;
  --card-edge: rgba(38, 32, 20, .13);
  --chip: rgba(255, 255, 252, .66);
}

/* INK — the two dark bands: "Why it matters" and the closing CTA.
   The CTA stays blue on ink: #0171E3 is 3.5:1 on #101010 as a fill, and it
   carries a white label at 4.9:1, so the button is legible and the page never
   has to invent a second action colour for dark. */#fonLcg .s-ink {
  --surface: #17150F;
  --fg: #FFFFFF;
  --fg-mut: rgba(255, 255, 255, .82);
  --fg-soft: rgba(255, 255, 255, .60);
  --rule: rgba(255, 255, 255, .18);
  --rule-str: rgba(255, 255, 255, .40);
  --card: #1A1A1A;
  --card-edge: rgba(255, 255, 255, .16);
  --chip: rgba(255, 255, 255, .08);
}

/* --------------------------------------------------------------------------
   2. BASE
   -------------------------------------------------------------------------- */#fonLcg *,
#fonLcg *::before,
#fonLcg *::after { box-sizing: border-box; }html {
  scroll-behavior: smooth;
  /* promo bar + sticky header + air */
  scroll-padding-top: 108px;
  -webkit-text-size-adjust: 100%;
}#fonLcg {
  margin: 0;
  /* THE WASH BELONGS TO THE PAGE, NOT TO ONE SECTION.
     It used to be painted on .hero, centred at 92% of that section’s own
     height with a 42% radius — so the ellipse was still around 40% alpha
     when the hero’s box ended, and the section boundary sliced it into a
     hard horizontal line directly under the CTA. Painting it on the wrapper
     instead makes it ONE continuous fill across the hero and the top of the
     listicle: there is no boundary left for it to be cut against.

     Sized in vh/vw, not %, so the glow always belongs to the first
     screenful rather than to whatever height the hero happens to be, and
     the ellipse is inscribed (centre 62vh, radius 62vh) so it reaches zero
     alpha at the top edge as well. It bleeds off the left and right of the
     viewport, where there is no adjacent surface to draw an edge against. */
  background:
    radial-gradient(126vw 62vh at 0% 62vh,
      rgba(234, 246, 171, .62) 0%,
      rgba(234, 246, 171, .34) 34%,
      rgba(234, 246, 171, .12) 63%,
      rgba(234, 246, 171, 0) 100%),
    var(--paper);
  background-repeat: no-repeat;
  color: var(--ink);
  font-family: var(--font);
  font-weight: 400;
  font-size: 16px;
  line-height: 1.6;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* Room for the sticky mobile buy bar so the footer is never trapped under it. */
  padding-bottom: env(safe-area-inset-bottom);
}#fonLcg img,
#fonLcg svg,
#fonLcg video { display: block; max-width: 100%; }#fonLcg a { color: inherit; text-decoration: none; }#fonLcg button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }#fonLcg table { border-collapse: collapse; width: 100%; }#fonLcg .shell { width: 100%; max-width: var(--shell); margin-inline: auto; padding-inline: var(--gutter); }#fonLcg .shell--narrow { max-width: var(--shell-narrow); }#fonLcg .section {
  position: relative;
  padding-block: var(--sect-y);
  background: var(--surface);
  color: var(--fg);
}#fonLcg .section--tall { padding-block: var(--sect-y-lg); }#fonLcg .section--tight { padding-block: var(--sect-y-sm); }#fonLcg .vh {
  position: absolute !important;
  width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}#fonLcg :focus-visible { outline: 2px solid var(--ink); outline-offset: 3px; }#fonLcg .s-ink :focus-visible { outline-color: #FFFFFF; }

/* --------------------------------------------------------------------------
   3. TYPE SCALE
   Seven sizes, no one-offs. The theme's own scale is Liquid-driven
   (--text-h0..h6 in css-variables.liquid) and lands at 2.5rem/3.25rem/4rem for
   h0 across its three breakpoints; these clamps track that curve continuously
   instead of stepping at 700/1400px.
   -------------------------------------------------------------------------- */
/* Kickers were 600 in the soft grey, which put them a whisker away from
   invisible on cream. Bold and one step darker: a kicker is a signpost, and a
   signpost nobody reads is just noise above a heading. */#fonLcg .eyebrow,
#fonLcg .micro {
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--fg-mut);
  margin: 0;
}#fonLcg h1,
#fonLcg h2,
#fonLcg h3,
#fonLcg h4,
#fonLcg .d1,
#fonLcg .h2,
#fonLcg .h3,
#fonLcg .h4,
#fonLcg .stmt { margin: 0; text-wrap: balance; }

/* HEADINGS ARE BOLD, NOT MEDIUM.
   Every heading on the page ran at 500 — Tomato Grotesk Medium, which is the
   weight the theme's own desktop hero uses. On a 1440px screen with a 70px
   headline that is plenty. At 390px, where this page actually gets read, a 30px
   heading in Medium sitting over 15.5px body copy in Regular is barely a step
   at all: two greys of type, one slightly larger, and no sense anywhere of
   arriving at something.

   Bold (700) is a licensed cut of the same family and is already being loaded.
   It costs nothing, and it is what makes a heading land on a phone. Tracking is
   pulled tighter at the same time — heavier letterforms need less air between
   them or the word starts to spread. */#fonLcg .d1 {
  font-size: clamp(38px, 7.4vw, 82px);
  font-weight: 700;
  line-height: 1.02;
  letter-spacing: -.035em;
}#fonLcg .h2 {
  font-size: clamp(28px, 3.7vw, 46px);
  font-weight: 700;
  line-height: 1.06;
  letter-spacing: -.03em;
}
/* THE OFFER HEADLINE IS THE ONE THAT OPENS THE SELL, so it is set above the
   section rule rather than level with it - Akaash asked for three to five steps
   and this is four on the same 1.15 scale the page already uses: 46 -> 53 -> 61
   -> 70 on desktop, 28 -> 38 on the phone. The line is broken by a <br> in the
   markup, so a bigger size costs no extra wrapping. Tracking tightens as it
   grows, which is the rule the d1 above already follows. */#fonLcg .h2--xl {
  font-size: clamp(38px, 5.6vw, 70px);
  line-height: 1.02;
  letter-spacing: -.035em;
}#fonLcg .head--center .h2--xl { max-width: 16ch; }

/* "L-Carnitine" and "GLP-1" carry hyphens, and a browser will happily break a
   line at one — which produced "Nobody should buy L- / Carnitine on its own."
   in a centred headline. Every occurrence inside a heading is wrapped in this. */#fonLcg .nb { white-space: nowrap; }#fonLcg .h3 { font-size: clamp(19px, 1.7vw, 24px); font-weight: 700; line-height: 1.2; letter-spacing: -.022em; }#fonLcg .h4 { font-size: clamp(16px, 1.2vw, 18px); font-weight: 700; line-height: 1.32; letter-spacing: -.015em; }

/* The one statement line a section may lead with. */#fonLcg .stmt { font-size: clamp(21px, 2.4vw, 32px); font-weight: 500; line-height: 1.24; letter-spacing: -.022em; }#fonLcg .body { margin: 0; font-size: clamp(16px, 1.1vw, 18px); line-height: 1.62; color: var(--fg-mut); text-wrap: pretty; }#fonLcg .body--lead { font-size: clamp(17px, 1.35vw, 20px); line-height: 1.56; }#fonLcg .body--sm { font-size: 15px; line-height: 1.58; }#fonLcg .body + .body { margin-top: 1em; }#fonLcg .num { font-weight: 600; letter-spacing: -.04em; line-height: .94; font-variant-numeric: tabular-nums; }#fonLcg .num--xl { font-size: clamp(46px, 6.4vw, 92px); }#fonLcg .num--lg { font-size: clamp(30px, 3.4vw, 48px); }

/* Section head: eyebrow + heading + one supporting line.
   Two measures, not one. A heading set to the same width as its body copy
   wraps into a paragraph-shaped block and stops reading as a headline, so the
   heading gets ~24ch and the supporting line ~50ch. Centred heads are narrower
   again — a centred line longer than ~26ch has no fixed left edge for the eye
   to return to. */#fonLcg .head { margin-bottom: clamp(30px, 3.4vw, 52px); }#fonLcg .head .eyebrow { margin-bottom: 13px; color: var(--fg-soft); }#fonLcg .s-ink .head .eyebrow { color: rgba(255, 255, 255, .6); }   /* 6.8:1 on ink; #0171E3 is 3.5:1 and fails as text */#fonLcg .head .h2 { max-width: 24ch; }#fonLcg .head .h2 + .body { margin-top: 16px; max-width: 50ch; }#fonLcg .head--center { margin-inline: auto; text-align: center; max-width: 780px; }#fonLcg .head--center .h2 { max-width: 22ch; margin-inline: auto; }#fonLcg .head--center .body { margin-inline: auto; max-width: 54ch; }

/* --------------------------------------------------------------------------
   4. BUTTONS — the theme's .fon-button family
   49px tall, 4px radius, Medium label, soft drop shadow, lift on hover.
   -------------------------------------------------------------------------- */#fonLcg .btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 52px;
  padding: 14px 30px;
  border-radius: var(--r-pill);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -.01em;
  line-height: 1.2;
  text-align: center;
  white-space: nowrap;
  transition: background-color var(--d-fast) var(--ease),
              transform var(--d-fast) var(--ease),
              box-shadow var(--d-fast) var(--ease),
              border-color var(--d-fast) var(--ease),
              color var(--d-fast) var(--ease);
}
/* PRIMARY — .fon-button-dark. The only thing on the page that is this blue. */#fonLcg .btn--primary {
  background: var(--blue);
  border: 1px solid var(--blue);
  color: #FFFFFF;
  box-shadow: 0 4px 14px -4px rgba(1, 113, 227, .4);
}#fonLcg .btn--primary:hover { background: var(--blue-dk); border-color: var(--blue-dk); transform: translateY(-2px); box-shadow: 0 8px 20px -6px rgba(1, 113, 227, .48); }

/* SECONDARY — .fon-button / .fon-button-light: white card with a hairline. */#fonLcg .btn--ghost {
  background: var(--card);
  border: 1px solid var(--rule-str);
  color: var(--fg);
  box-shadow: var(--shadow-btn);
}#fonLcg .btn--ghost:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, .16); }#fonLcg .s-ink .btn--ghost { background: transparent; border-color: var(--rule-str); color: #FFFFFF; box-shadow: none; }#fonLcg .s-ink .btn--ghost:hover { background: rgba(255, 255, 255, .08); }#fonLcg .btn--wide { width: 100%; }#fonLcg .btn--lg { min-height: 58px; font-size: 15px; padding-inline: 38px; }
/* THE HERO CTA WAS THE PAGE'S ONLY HORIZONTAL OVERFLOW, at 320px.
   `.btn` is `white-space: nowrap`, which is right for a pill, and the hero CTA
   carries the longest label on the page ("Shop OneFit® · 1,000mg per serve")
   inside 38px of padding either side. On a 320px screen that is wider than the
   column, so the label pushed the document 24px wide and the whole page could
   be dragged sideways. It has been there since before the campaign copy landed
   on the button.

   Below 380px the large buttons give back some padding and are allowed to take
   a second line. A CTA on two lines is ordinary; a page that scrolls sideways
   on the smallest phones in the traffic is not. */@media (max-width: 379.98px) {#fonLcg .btn--lg { padding-inline: 16px; white-space: normal; }
}

/* Text link with a rule that extends on hover. */#fonLcg .link {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 14px; font-weight: 600; color: var(--fg);
  border-bottom: 1px solid currentColor; padding-bottom: 2px;
  transition: gap var(--d-fast) var(--ease), color var(--d-fast) var(--ease);
}#fonLcg .link:hover { gap: 13px; }#fonLcg .s-ink .link { color: #FFFFFF; }

/* --------------------------------------------------------------------------
   5. PARTS — chip, card, rule, plate
   -------------------------------------------------------------------------- */#fonLcg .chip {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 7px 13px;
  border-radius: var(--r-pill);
  background: var(--chip);
  border: 1px solid var(--card-edge);
  font-size: 12.5px; font-weight: 600; letter-spacing: .04em;
  color: var(--fg-mut);
  white-space: nowrap;
}#fonLcg .card {
  position: relative;
  background: var(--card);
  border: 1px solid var(--card-edge);
  border-radius: var(--r-md);
  padding: clamp(22px, 2.4vw, 32px);
}#fonLcg .hr { height: 1px; background: var(--rule); border: 0; margin: 0; }

/* One photo treatment for the whole page. Ratio is set per use; the image is
   absolutely positioned so an intrinsic size can never drive layout height. */#fonLcg .plate {
  display: block; position: relative; overflow: hidden;
  border-radius: var(--r-md);
  background: var(--fog);
  aspect-ratio: var(--ar, 3 / 4);
}#fonLcg .plate img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }#fonLcg .plate--env { --ar: 16 / 9; }#fonLcg .plate--sq { --ar: 1 / 1; }#fonLcg .plate--tall { --ar: 3 / 4; }#fonLcg .plate--contain { background: none; }#fonLcg .plate--contain img { object-fit: contain; }

/* --------------------------------------------------------------------------
   6. REVEAL — the page's only motion, plus a fail-safe.
   Content starts hidden ONLY once page.js has confirmed it is running and has
   set .anim on <html>. If the script never runs, everything renders visible.
   -------------------------------------------------------------------------- */.anim .rv { opacity: 0; transform: translateY(20px); transition: opacity .6s var(--ease), transform .6s var(--ease); transition-delay: var(--d-i, 0ms); }.anim .rv.in { opacity: 1; transform: none; }@media (prefers-reduced-motion: reduce) {html { scroll-behavior: auto; }#fonLcg *,
#fonLcg *::before,
#fonLcg *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }.anim .rv { opacity: 1 !important; transform: none !important; }#fonLcg .btn:hover { transform: none; }
}


/* ==========================================================================
   FON — L-CARNITINE / GLP-1 CAMPAIGN LANDING PAGE
   Section styles. Tokens and components live in tokens.css.

   MOBILE FIRST, AND NOT AS A SLOGAN. Traffic arrives from paid social, so the
   390px rendering is the real design and the desktop grid is the enhancement.
   Every layout below starts as one column and only earns a second at a
   breakpoint where the content genuinely needs it.

   THE PAGE FOLLOWS THE REFERENCE'S INFORMATION ARCHITECTURE, NOT ITS LOOK:
   hero with audience badge + proof metrics → one numbered listicle carrying
   the whole education load with the CTA re-injected between beats → aggregate
   rating + UGC gallery + "what to expect" timeline → product configurator +
   pricing + value stack + trust badges → collapsed reference stack → FAQ →
   close. The visual system is FON's throughout.
   ========================================================================== */#fonLcg .skip {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  padding: 12px 18px; background: var(--ink); color: #fff; font-weight: 600;
}#fonLcg .skip:focus { left: 8px; top: 8px; }

/* --------------------------------------------------------------------------
   PROMO BAR + HEADER
   -------------------------------------------------------------------------- */
/* ---- THE PROMO STRIP -------------------------------------------------------
   IT MOVES AT EVERY WIDTH NOW, AND IT LOOPS WITHOUT A SEAM.
   The old strip ran `padding-left: 100%` and translated by -100%, which is the
   "slide in from the right, exit left" trick: the content crosses the screen,
   then the bar is empty for a beat before it starts again. It also stopped
   moving entirely above 760px and simply centred, so on the widest screens the
   one animated element on the page was static.

   Two identical halves and a -50% translate is the seamless version. The moment
   the first half has fully left, the second is exactly where the first started,
   so there is no gap and no jump. Each half repeats the four promises three
   times so a half is ~2000px — wider than the viewport at any size this is seen
   at, which is the condition for the loop never showing its own end.

   Each promise now carries the icon FON uses for it on its own PDP, so the bar
   reads as four guarantees rather than as one long sentence of grey text. */#fonLcg .promo {
  background: var(--lime);
  color: var(--lime-ink);
  overflow: hidden;
  display: flex; align-items: center;
  height: 38px;
  border-bottom: 1px solid rgba(38, 32, 20, .1);
}#fonLcg .promo__track {
  display: flex; width: max-content;
  animation: promo-scroll 60s linear infinite;
  will-change: transform;
}#fonLcg .promo__half { display: flex; align-items: center; }#fonLcg .promo__i {
  display: inline-flex; align-items: center; gap: 7px;
  padding-inline: 18px;
  font-size: 12px; font-weight: 600; letter-spacing: .01em; line-height: 1;
  white-space: nowrap;
}
/* The separator is drawn rather than typed: a "·" between items is one more
   thing to keep in the markup twenty-four times, and a border cannot fall out
   of sync with the repeat count. */#fonLcg .promo__i + .promo__i { border-left: 1px solid rgba(38, 32, 20, .22); }#fonLcg .promo__half + .promo__half .promo__i:first-child { border-left: 1px solid rgba(38, 32, 20, .22); }#fonLcg .promo__i img { width: 15px; height: 15px; flex: none; opacity: .8; }@keyframes promo-scroll {from { transform: translateX(0); }to { transform: translateX(-50%); }
}
/* Pause on hover so the bar can actually be read, and stop it entirely for
   anyone who has asked for less motion — a permanently moving strip pinned to
   the top of the page is exactly what that setting exists for. */#fonLcg .promo:hover .promo__track { animation-play-state: paused; }@media (prefers-reduced-motion: reduce) {#fonLcg .promo__track { animation: none; }#fonLcg .promo__half + .promo__half { display: none; }#fonLcg .promo { justify-content: center; }
}#fonLcg .hdr {
  position: sticky; top: 0; z-index: 90;
  background: rgba(255, 255, 252, .93);
  backdrop-filter: saturate(1.6) blur(12px);
  -webkit-backdrop-filter: saturate(1.6) blur(12px);
  border-bottom: 1px solid rgba(32, 28, 20, .1);
}#fonLcg .hdr__in { display: flex; align-items: center; gap: 20px; min-height: 62px; }#fonLcg .hdr__logo { flex: none; }#fonLcg .hdr__logo img { width: 112px; height: auto; }#fonLcg .hdr__proof { display: none; margin: 0 auto 0 0; align-items: center; gap: 7px; font-size: 13px; color: var(--grey-700); white-space: nowrap; }#fonLcg .hdr__proof b { font-weight: 600; color: var(--ink); }#fonLcg .hdr__stars { letter-spacing: .08em; color: var(--star-dk); font-size: 12px; }#fonLcg .hdr__sep { color: var(--rule-str); }#fonLcg .hdr__nav { display: none; gap: 24px; font-size: 14px; font-weight: 500; }#fonLcg .hdr__nav a { color: var(--grey-700); padding-block: 6px; border-bottom: 1px solid transparent; transition: color var(--d-fast) var(--ease), border-color var(--d-fast) var(--ease); }#fonLcg .hdr__nav a:hover { color: var(--ink); border-color: var(--ink); }#fonLcg .hdr__cta {
  margin-left: auto; min-height: 40px; padding: 9px 18px; font-size: 13px;
  background: var(--lime); border-color: var(--lime); color: var(--lime-ink);
  box-shadow: none;
}#fonLcg .hdr__cta:hover { background: var(--lime-dk); border-color: var(--lime-dk); }@media (min-width: 900px) {#fonLcg .hdr__in { min-height: 70px; }#fonLcg .hdr__logo img { width: 132px; }#fonLcg .hdr__nav { display: flex; margin-left: auto; }#fonLcg .hdr__cta { margin-left: 0; min-height: 44px; padding: 11px 22px; }
}
/* The proof line only appears where all four items fit without crowding. Below
   1180px the nav and the CTA are the priority — proof is still in the hero. */@media (min-width: 1180px) {#fonLcg .hdr__proof { display: flex; margin-left: 26px; }#fonLcg .hdr__nav { margin-left: auto; margin-right: 26px; }
}

/* --------------------------------------------------------------------------
   THE GRADIENT WASH

   Taking every band to white fixed the "dirty beige" problem and created a new
   one: eleven sections of identical #FFFFFF with no edge between any of them,
   so the page reads as one continuous sheet and nothing announces that a new
   argument has started. The reference lander solves this without any beige at
   all — its hero is white with a barely-there tint of its own brand green
   washing in from one corner, so the surface has a direction and a temperature
   while still reading as white.

   This is that, in lime instead of green. The strongest stop is
   rgba(234,246,171,.42), which resolves to about #FAFCEF: roughly two points of
   luminance off white, well under where it starts to look coloured, and enough
   to give the fold a warm corner and a cool one.

   ONLY THE SECTIONS THAT OPEN AND CLOSE THE SALE GET IT. A wash on every band
   would be the beige problem again with an extra step. The hero takes the
   strongest, the offer block a lighter one from the opposite corner, and
   everything between stays flat white — so the two that are tinted read as the
   page's two big moments rather than as a texture.
   -------------------------------------------------------------------------- */
/* ONE SOFT CIRCLE, NOT A WASH ACROSS THE WHOLE BAND.
   First attempt layered a radial over a full-width linear on the hero, put a
   second on the offer block and a third on the footer — which is a tinted page
   with white in the middle, the exact beige problem in a different colour. The
   reference does one thing: a single soft glow bleeding out of one corner of
   the fold, and flat white everywhere else.

   So: one circle, hero only. It sits off the bottom-left, fades to nothing well
   inside the section, and never touches an edge — a gradient that reaches a
   border draws the border, which is what made the first version read as a
   panel rather than as light. The circle itself now lives on #fonLcg so it
   can cross the section seam — see the wrapper rule. The hero and the
   listicle go transparent to let it through; both surfaces are #FFFFFF, so
   dropping the fill costs nothing anywhere the wash has already faded. */
#fonLcg .hero { background: transparent; }

/* --------------------------------------------------------------------------
   1 · HERO
   On mobile the artwork sits UNDER the CTA, not above it: the headline, the
   correction and the button are what must be in the first screenful, and a
   portrait photograph above them would push the button below the fold.
   -------------------------------------------------------------------------- */
/* WITH THE BANDS ALL WHITE, PADDING IS THE ONLY THING BETWEEN SECTIONS — AND
   TWO SETS OF IT STACK. The hero's bottom padding met the listicle's top
   padding and then beat 01's own, which was ~98px of empty white between the
   risk line and the first numeral. That gap existed to separate two DIFFERENT
   coloured bands; with both white it is just a hole in the page, and on a phone
   it reads as the content having ended. Halved here, and the listicle's own top
   padding does the rest. */#fonLcg .hero { padding-top: clamp(26px, 3.6vw, 46px); padding-bottom: clamp(18px, 2.6vw, 40px); }#fonLcg .hero__in { display: grid; gap: clamp(34px, 4vw, 60px); }

/* Audience badge — the reference page's "FOR GLP-1 USERS" slot. */#fonLcg .badge {
  display: inline-flex; align-items: center; gap: 8px;
  margin: 0 0 clamp(16px, 1.8vw, 22px);
  padding: 7px 14px 7px 12px;
  border-radius: var(--r-pill);
  background: rgba(255, 255, 252, .7);
  border: 1px solid rgba(38, 32, 20, .16);
  color: var(--ink);
  font-size: 12px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; line-height: 1;
}#fonLcg .badge::before {
  content: ""; width: 6px; height: 6px; border-radius: 50%;
  background: var(--ink); flex: none;
}#fonLcg .hero__h1 { margin: 0; display: grid; gap: clamp(12px, 1.4vw, 20px); }

/* The ad line, struck through.
   Drawn with text-decoration rather than a background gradient: a background
   line is positioned once for the whole block, so on a two-line quote it fell
   between the lines and read as an underline of the first. line-through is
   resolved per line box, always at that line's own centre. skip-ink is off so
   the rule stays continuous through descenders instead of breaking up. */#fonLcg .hero__quote {
  display: block;
  /* THE AD LINE STAYS ON ONE LINE.
     It was capped at 15ch, which broke it as "L-Carnitine is / the new GLP-1."
     The line is a verbatim quote of the ad, and its whole job is to be
     recognised in a glance by someone who just tapped that ad; split across two
     lines with a rule through both, it reads as two struck fragments rather
     than one quoted sentence.

     Measured before removing the cap: the sentence needs 259px at the 22px
     floor and 447px at the 38px ceiling, against 320px available at 360px wide
     and 583px at 1440. It fits unaided at every width. `nowrap` then guarantees
     it, and the scale is 3.5vw rather than 3.7vw because the tightest point is
     around 1024px, where the column is 455px and 3.7vw left only 10px spare.
     With nowrap a miss would overflow rather than wrap, so the headroom is the
     point. */
  white-space: nowrap;
  font-size: clamp(20px, 5.6vw, 34px);
  font-weight: 300; line-height: 1.14; letter-spacing: -.024em;
  color: var(--fg-soft);
  text-decoration-line: line-through;
  text-decoration-thickness: 2px;
  text-decoration-color: rgba(38, 32, 20, .4);
  text-decoration-skip-ink: none;
}#fonLcg .hero__turn {
  display: block;
  font-size: clamp(37px, 7vw, 74px);
  font-weight: 700; line-height: .98; letter-spacing: -.04em;
  color: var(--fg);
}#fonLcg .hero__sub { margin-top: clamp(20px, 2.2vw, 28px); max-width: 46ch; }#fonLcg .hero__sub b { color: var(--fg); font-weight: 600; }#fonLcg .hero__cta { display: flex; flex-direction: column; gap: 10px; margin-top: clamp(24px, 2.6vw, 32px); }#fonLcg .hero__cta .btn { width: 100%; }@media (min-width: 560px) {#fonLcg .hero__cta { flex-direction: row; flex-wrap: wrap; gap: 12px; }#fonLcg .hero__cta .btn { width: auto; }
}


/* ARTWORK — the photograph with the real packshot on a card overlapping its
   bottom-left corner. The card is positioned INSIDE the figure and inset from
   both edges, so it can never hang off the image or be clipped by it. */#fonLcg .hero__art { position: relative; }#fonLcg .hero__figure {
  position: relative; margin: 0;
  border-radius: var(--r-lg);
  /* THE HERO PHOTO IS COVER, NOT CONTAIN. #fonLcg .hero__figure > img below
     is shared by every page on this sheet (lcarnitine-glp1-2, its
     limited-offer copy, onefit-subscription), and all of them put the
     portrait cam-hero.jpg in it. Setting it to `contain` here letterboxes
     that photo with sand bars at both sides. A lander that needs contain
     scopes it to its own section class - the four OneFit angle landers do
     exactly that, at the END of this sheet. Leave this default alone. */
  aspect-ratio: 5 / 4;
  background: var(--sand-deep);
  overflow: hidden;
}#fonLcg .hero__figure > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 56% 12%; }

/* THE PHOTOGRAPH LEADS ON MOBILE, AND IT RUNS EDGE TO EDGE.
   It used to sit under the CTA, inset inside the gutter with a 16px radius, so
   the first thing a visitor saw after tapping the ad was a wall of type and the
   picture arrived as a footnote. The reference lander opens on a full-bleed
   frame with the audience badge floating in it, and that is what makes the top
   of the page read as a campaign rather than an article: you know in one glance
   who it is for and what the product is.

   The gutter is cancelled with a negative margin rather than pulling the figure
   out of .shell, so nothing above or below it moves.

   THE COST IS REAL AND IS BOUGHT BACK: an image above the headline pushes the
   CTA down. The hero's own top padding comes off and the gaps between the proof
   pill, the quote, the headline and the sub are each trimmed.

   ONE THING FLOATS IN THE FRAME, NOT TWO. The packshot card ran the full width
   of the photograph's bottom edge and said "OneFit® / 1,000mg L-Carnitine per
   serve" — which is, word for word, the label on the CTA button 300px below it
   and the line inside the sticky bar that is on screen for the rest of the
   scroll. It was the third time the same sentence appeared in one screenful,
   and it covered the half of the frame the product is actually in. Gone on the
   phone; on desktop the figure is a tall column with room for it and it stays.

   With the card gone the band can be square rather than 4:3 and still cost less
   height than it did, so the photograph gets bigger and the screen gets
   quieter at the same time. */@media (max-width: 899.98px) {#fonLcg .hero { padding-top: 0; }#fonLcg .hero__in { gap: clamp(18px, 4vw, 30px); }#fonLcg .hero__art { order: -1; margin-inline: calc(var(--gutter) * -1); }#fonLcg .hero__figure { border-radius: 0; aspect-ratio: 1 / 1; }#fonLcg .hero__figure > img { object-position: 56% 18%; }#fonLcg .hero__aud { top: 14px; left: 14px; padding: 8px 14px; font-size: 11px; }
  /* .proofpill and .hero__risk are overridden at the foot of the
     HERO PROOF section instead of here — their base rules are declared below
     this point in the file, so a same-specificity override up here loses to
     them on source order and silently does nothing. */

  /* TYPE HIERARCHY, REBUILT AROUND THE ONE LINE THAT MATTERS.
     The struck ad line was running at 21.8px Light against a 37px headline —
     1.7x apart, so the two read as a pair of headlines rather than a quote and
     its correction, and the eye had to work out which one to believe. It is a
     callback, not a heading: at 16px it sits above the headline the way a kicker
     does, and the ratio to the headline goes to 2.5x. Nothing else on the page
     competes with the correction now. */#fonLcg .hero__quote { font-size: 16px; font-weight: 400; letter-spacing: -.01em; text-decoration-thickness: 1.5px; }#fonLcg .hero__turn { font-size: 40px; line-height: .99; letter-spacing: -.036em; }#fonLcg .hero__h1 { gap: 10px; }#fonLcg .hero__sub { margin-top: 14px; font-size: 15.5px; line-height: 1.5; }#fonLcg .hero__cta { margin-top: 20px; }
}@media (min-width: 900px) {
  /* Two columns from here, so the quote is measured against the COLUMN, not the
     viewport. 5.6vw would be 50px at 900px wide against a 400px column. */#fonLcg .hero__quote { font-size: clamp(24px, 3.4vw, 38px); }#fonLcg .hero__in { grid-template-columns: 1.04fr .96fr; align-items: center; gap: clamp(44px, 4.6vw, 80px); }#fonLcg .hero__figure { aspect-ratio: 4 / 5; }
}

/* --------------------------------------------------------------------------
   COMPARISON TABLE (inside listicle entry 01)
   On mobile it linearises into stacked cards. A horizontally scrolling table
   would hide half the comparison — which is the entire content.
   -------------------------------------------------------------------------- */#fonLcg .cmp { margin-top: clamp(18px, 2vw, 24px); }#fonLcg .cmp__t { border: 1px solid var(--card-edge); border-radius: var(--r-md); overflow: hidden; background: var(--surface); }#fonLcg .cmp__col {
  padding: 14px 16px; text-align: left;
  font-size: 13.5px; font-weight: 600; letter-spacing: -.01em;
  background: var(--chip); border-bottom: 1px solid var(--card-edge);
}#fonLcg .cmp__col--a { color: var(--grey-700); }#fonLcg .cmp__col--b { color: var(--blue); }#fonLcg .cmp__rowhead { background: var(--chip); border-bottom: 1px solid var(--card-edge); }#fonLcg .cmp__t th[scope="row"] {
  text-align: left; vertical-align: top;
  padding: 14px 16px;
  font-size: 12.5px; font-weight: 600; letter-spacing: .01em;
  color: var(--fg-soft); width: 21%;
  border-top: 1px solid var(--card-edge);
}#fonLcg .cmp__t td {
  padding: 14px 16px; vertical-align: top;
  font-size: 14.5px; line-height: 1.5; color: var(--fg-mut);
  border-top: 1px solid var(--card-edge); width: 39.5%;
}
/* No zebra striping on the row-header column. Tinting only the first cell of
   alternating rows read as a rendering fault rather than a reading aid — the
   stripe stopped at a column edge instead of running across the row. */#fonLcg .cmp__no { color: var(--fg) !important; }#fonLcg .cmp__no b { display: block; margin-bottom: 3px; }@media (max-width: 780px) {#fonLcg .cmp__t,
#fonLcg .cmp__t tbody,
#fonLcg .cmp__t tr,
#fonLcg .cmp__t td,
#fonLcg .cmp__t th { display: block; width: auto; }#fonLcg .cmp__t thead { display: none; }#fonLcg .cmp__t { border: 0; background: none; }#fonLcg .cmp__t tbody tr {
    background: var(--surface); border: 1px solid var(--card-edge);
    border-radius: var(--r-md); padding: 2px 15px 13px; margin-bottom: 10px;
  }#fonLcg .cmp__t th[scope="row"] {
    width: auto; padding: 13px 0 7px; border-top: 0; background: none !important;
    font-size: 11.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--fg-soft);
  }#fonLcg .cmp__t td { width: auto; padding: 9px 0 0; border-top: 1px solid var(--rule); }#fonLcg .cmp__t td::before { display: block; margin-bottom: 4px; font-size: 12px; font-weight: 600; letter-spacing: .04em; }#fonLcg .cmp__t td:nth-of-type(1)::before { content: "GLP-1 medications"; color: var(--grey-500); }#fonLcg .cmp__t td:nth-of-type(2)::before { content: "L-Carnitine"; color: var(--ink); }
}#fonLcg .foot { margin: clamp(14px, 1.6vw, 20px) 0 0; font-size: 12.5px; line-height: 1.55; color: var(--fg-soft); }#fonLcg .foot--center { text-align: center; max-width: 68ch; margin-inline: auto; }

/* --------------------------------------------------------------------------
   3 · REVIEWS — rating block, UGC rail, timeline
   -------------------------------------------------------------------------- */#fonLcg .rating {
  display: grid; gap: clamp(20px, 2.4vw, 32px); align-items: center;
  padding: clamp(22px, 2.6vw, 34px);
  background: var(--card); border: 1px solid var(--card-edge); border-radius: var(--r-lg);
}@media (min-width: 780px) {#fonLcg .rating { grid-template-columns: auto 1fr; gap: clamp(28px, 3.4vw, 52px); } }#fonLcg .rating__score { display: flex; flex-direction: column; align-items: center; gap: 5px; text-align: center; }#fonLcg .rating__score .num { color: var(--fg); }#fonLcg .rating__stars { font-size: 14px; letter-spacing: .14em; color: var(--ink); }#fonLcg .rating__src { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--fg-soft); }#fonLcg .rating__facts { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px 20px; }@media (min-width: 1000px) {#fonLcg .rating__facts { grid-template-columns: repeat(4, 1fr); } }#fonLcg .rating__facts li { display: flex; flex-direction: column; gap: 2px; }#fonLcg .rating__facts b { font-size: 16px; font-weight: 600; letter-spacing: -.02em; color: var(--fg); }#fonLcg .rating__facts span { font-size: 13px; line-height: 1.4; color: var(--fg-soft); }

/* THE SCORE LIES DOWN ON A PHONE.
   Stacked and centred — 4.8 over its stars over "Trustpilot rating" — the score
   alone was ~110px of card, and it landed directly under the study block, which
   has just finished reporting four percentages. Nine figures in a row, each
   given a full display treatment, and none of them reads as more important than
   any other.

   On one baseline the score is a single line the eye takes in at once, and the
   card comes down by about a third. Nothing is dropped: every figure that was
   here is still here, just at the size of supporting evidence rather than the
   size of a headline. */@media (max-width: 779.98px) {#fonLcg .rating { padding: 18px 17px; gap: 15px; }#fonLcg .rating__score {
    flex-direction: row; align-items: baseline; justify-content: flex-start;
    flex-wrap: wrap; gap: 4px 9px; text-align: left;
  }#fonLcg .rating__score .num--lg { font-size: 27px; }#fonLcg .rating__stars { font-size: 12px; }#fonLcg .rating__src { font-size: 11.5px; margin-left: auto; }#fonLcg .rating__facts { gap: 12px 16px; }#fonLcg .rating__facts b { font-size: 14.5px; }#fonLcg .rating__facts span { font-size: 12px; line-height: 1.35; }
}

/* UGC rail — real member review videos. Scrolls horizontally with snap on
   mobile, which is how this content is consumed everywhere else. */
/* THE VIDEO WALL GETS REAL SEPARATION AND A HEAD OF ITS OWN.
   It was 14px below the written reviews — closer to them than the review cards
   are to each other — so two different kinds of proof ran together as one
   block, and the only thing naming the videos was a caption underneath, after
   the reader had already scrolled past them. A rule and a heading turn it into
   the section it always was. */#fonLcg .ugc {
  margin-top: clamp(34px, 4.4vw, 60px);
  padding-top: clamp(26px, 3.2vw, 40px);
  border-top: 1px solid var(--rule);
}#fonLcg .ugc__head {
  display: flex; align-items: baseline; justify-content: space-between;
  flex-wrap: wrap; gap: 8px 20px;
  margin-bottom: clamp(16px, 2vw, 24px);
}#fonLcg .ugc__head .h3 { max-width: 22ch; }#fonLcg .ugc__rail {
  display: grid; grid-auto-flow: column; grid-auto-columns: 40%;
  gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory;
  padding-bottom: 6px;
  scrollbar-width: thin;
  /* Bleed to the viewport edges so the rail reads as continuing off-screen
     rather than stopping dead inside the gutter. */
  margin-inline: calc(var(--gutter) * -1);
  padding-inline: var(--gutter);
  scroll-padding-inline: var(--gutter);
}@media (min-width: 700px) {#fonLcg .ugc__rail { grid-auto-columns: 22%; gap: 14px; } }@media (min-width: 1100px) {#fonLcg .ugc__rail { grid-auto-columns: 1fr; grid-auto-flow: row; grid-template-columns: repeat(6, 1fr); overflow: visible; margin-inline: 0; padding-inline: 0; } }#fonLcg .ugc__i {
  position: relative; display: block; scroll-snap-align: start;
  border-radius: var(--r-md); overflow: hidden;
  aspect-ratio: 9 / 16; background: var(--stone);
  border: 1px solid var(--card-edge);
}#fonLcg .ugc__i img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }#fonLcg .ugc__play {
  position: absolute; left: 50%; top: 50%; z-index: 1;
  width: 40px; height: 40px; margin: -20px 0 0 -20px;
  border-radius: 50%;
  background: rgba(255, 255, 252, .9);
  box-shadow: 0 4px 14px rgba(23, 21, 15, .3);
}#fonLcg .ugc__play::after {
  content: ""; position: absolute; left: 15px; top: 12px;
  border-left: 13px solid var(--ink);
  border-block: 8px solid transparent;
}

/* NO BLACK FILL, AND THE SWAP WAITS FOR A FRAME.
   The video carried background:#000 and the poster was faded out the moment the
   element was attached - so between the tap and HLS opening its buffer the tile
   went black, which is the one thing a wall of faces should never do. The fill
   is gone and the video starts transparent; the poster holds until "playing"
   fires, and only then do the two cross-fade. Nothing is ever black.

   .is-playing is the latch, .is-live is frames on screen. Everything visual
   hangs off the second one. */#fonLcg .ugc__v {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; z-index: 2;
  opacity: 0; transition: opacity var(--d-fast) var(--ease);
}#fonLcg .ugc__i.is-live .ugc__v { opacity: 1; }#fonLcg .ugc__i.is-live .ugc__play,
#fonLcg .ugc__i.is-live img { opacity: 0; }
/* Paused, the mark comes back OVER the frame the visitor stopped on - above the
   video, not under it - so the tile says "tap to resume" without throwing the
   poster back over a picture they chose to stop at. */
#fonLcg .ugc__i.is-paused .ugc__play { opacity: 1; z-index: 3; }#fonLcg .ugc__i .ugc__play,
#fonLcg .ugc__i img { transition: opacity var(--d-fast) var(--ease); }
/* The tiles are <button> now rather than <a>, so they need the reset. */#fonLcg .ugc__i { appearance: none; -webkit-appearance: none; padding: 0; margin: 0; font: inherit; color: inherit; cursor: pointer; width: 100%; text-align: left; }#fonLcg .ugc__i:focus-visible { outline: 2px solid var(--ink); outline-offset: 3px; }#fonLcg .cap { margin: 12px 0 0; font-size: 13px; line-height: 1.5; color: var(--fg-soft); }#fonLcg .link--sm { font-size: 13px; }

/* "What to expect" timeline */#fonLcg .tline {
  margin-top: clamp(20px, 2.4vw, 32px);
  padding: clamp(22px, 2.6vw, 34px);
  background: var(--card); border: 1px solid var(--card-edge); border-radius: var(--r-lg);
}#fonLcg .tline__head { margin-bottom: clamp(18px, 2vw, 26px); }#fonLcg .tline__head .h3 { margin-bottom: 6px; }#fonLcg .tline__l { list-style: none; margin: 0; padding: 0; display: grid; gap: 16px; counter-reset: t; }@media (min-width: 820px) {#fonLcg .tline__l { grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 2vw, 28px); } }#fonLcg .tline__l li { padding-top: 16px; border-top: 3px solid var(--rule-str); }#fonLcg .tline__l li:nth-child(2) { border-top-color: rgba(38, 32, 20, .3); }#fonLcg .tline__l li:nth-child(3) { border-top-color: rgba(38, 32, 20, .26); }#fonLcg .tline__w {
  display: block; margin-bottom: 7px;
  font-size: 13px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase;
  color: var(--ink);
}

/* --------------------------------------------------------------------------
   4 · PRODUCT + OFFER
   -------------------------------------------------------------------------- */#fonLcg .offer { display: grid; gap: clamp(24px, 3vw, 44px); align-items: start; }@media (min-width: 940px) {#fonLcg .offer { grid-template-columns: 1fr 1fr; } }
/* 2026-08-20: on mobile, #offer inherits .section--tall's full
   padding-block (clamp(44px, 6.8vw, 106px), both top and bottom), which
   reads as a large empty gap above the tightly-packed proof pill/pdp__name
   block. Cut just the top half on mobile; bottom padding and desktop are
   untouched. Not confirmed against a live render yet. */
@media (max-width: 899.98px) {#fonLcg #offer { padding-top: 20px; } }
#fonLcg .offer__gal {
  border-radius: var(--r-lg); overflow: hidden;
  background: #fff; border: 1px solid var(--card-edge);
  margin-bottom: clamp(18px, 2vw, 26px);
}#fonLcg .offer__gal img { width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; }#fonLcg .ticks { list-style: none; margin: 0; padding: 0; display: grid; gap: 11px; }#fonLcg .ticks li { position: relative; padding-left: 29px; font-size: 15px; line-height: 1.5; color: var(--fg-mut); }#fonLcg .ticks li::before {
  content: ""; position: absolute; left: 0; top: 3px;
  width: 18px; height: 18px; border-radius: 50%; background: var(--ink);
}#fonLcg .ticks li::after {
  content: ""; position: absolute; left: 5px; top: 8px;
  width: 8px; height: 4.5px;
  border-left: 1.9px solid #FFFFFC; border-bottom: 1.9px solid #FFFFFC;
  transform: rotate(-45deg);
}#fonLcg .ticks b { color: var(--fg); font-weight: 600; }

/* ---- THE PDP CHECKLIST -----------------------------------------------------
   FON'S OWN BLUE CHECK, NOT A DRAWN ONE. The marker was an ink disc with a CSS
   chevron in it. usefon.com's PDP marks exactly this list with Blue_Check.svg,
   so the file itself is used and the imitation is deleted.

   AND THE WHOLE LINE IS TYPE NOW, NOT HALF OF IT. Each item was a bold benefit
   followed by its dose in the body grey, so five items produced ten fragments
   alternating between two weights and two colours, and the eye had nowhere to
   settle. The benefit stays semibold in the ink; the dose is now its own line
   underneath at a smaller size, which is a caption rather than a trailing
   clause.

   AND THEN IT BECAME THE INGREDIENT LIST. Five benefit sentences each with a
   dose underneath is ten lines of type to say what is in the sachet, and on a
   phone that pushed the format and flavour pickers below the fold. What the
   reader wants here is the contents; the benefits are argued across the seven
   beats above and in the comparison panel. So: one line per ingredient, dose
   first in the ink, name after it in the grey — every figure that was in the
   captions is still here, in half the height. */#fonLcg .ticks__lead {
  margin: 0 0 11px; font-size: 14.5px; font-weight: 600; color: var(--fg);
}#fonLcg .ticks--check { gap: 7px; }#fonLcg .ticks--check li {
  padding-left: 26px;
  font-size: 13.5px; line-height: 1.4; font-weight: 400; color: var(--fg-mut);
}#fonLcg .ticks--check li b { font-weight: 600; color: var(--fg); }#fonLcg .ticks--check li::before,
#fonLcg .ticks--check li::after { content: none; }#fonLcg .ticks--check li {
  background: url("Blue_Check.svg") left 1px / 20px 20px no-repeat;
}#fonLcg .ticks--check i {
  display: block; margin-top: 2px;
  font-style: normal; font-size: 13px; line-height: 1.42; font-weight: 400;
  color: var(--fg-soft);
}@media (max-width: 939.98px) {#fonLcg .ticks--check { gap: 11px; }#fonLcg .ticks--check li { padding-left: 27px; font-size: 13.5px; background-size: 18px 18px; }#fonLcg .ticks--check i { font-size: 12.5px; }
}

/* ---- THE PRODUCT'S OWN HEAD, ABOVE THE CONFIGURATOR ------------------------
   The right column opened on a form legend. Proof, then name, then one line of
   what it is, then the questions — that order is the difference between a
   product page and a checkout step, and it is the order FON's own PDP uses.

   The name is a <p>, not a heading: the section already has an h2 and this is
   the same product it is about, so promoting it would put two competing
   headings in one section and read as a new topic to a screen reader. */#fonLcg .pdp__id { margin-bottom: clamp(20px, 2.4vw, 28px); }#fonLcg .pdp__rate {
  display: flex; align-items: center; flex-wrap: wrap; gap: 2px 7px;
  margin: 0 0 9px;
  font-size: 13px; line-height: 1; color: var(--fg-mut);
}#fonLcg .pdp__rate b { font-weight: 600; color: var(--fg); }#fonLcg .pdp__rate i { font-style: normal; color: var(--rule-str); }#fonLcg .pdp__stars { color: var(--star-dk); letter-spacing: .08em; font-size: 12.5px; }#fonLcg .pdp__name {
  margin: 0 0 6px;
  /* 2026-08-20: text grew from "OneFit®" to "OneFit®: 31 ingredients. One
     sachet." (now two lines via <br>, ~4.5x more characters than the old
     single word). Third pass: narrowed the clamp range itself (smaller on
     desktop, bigger on mobile) instead of one flat size, and tightened the
     bottom margin to sit closer to .pdp__sub. Still not confirmed live. */
  font-size: clamp(23px, 2.3vw, 24px); font-weight: 700;
  line-height: 1.05; letter-spacing: -.032em; color: var(--fg);
}#fonLcg .pdp__name sup { font-size: .44em; top: -.72em; position: relative; font-weight: 600; }#fonLcg .pdp__sub { margin: 0; max-width: 46ch; font-size: 15px; line-height: 1.5; color: var(--fg-mut); }

/* The label link under the gallery. Full width and outlined rather than a text
   link: it is a second action on this column, and at text size it disappeared
   between the thumbnail rail and the benefit list. */#fonLcg .gal__label {
  display: flex; align-items: center; justify-content: center;
  margin-top: 14px; min-height: 46px; padding: 12px 20px;
  border: 1px solid var(--rule-str); border-radius: var(--r-pill);
  background: var(--card);
  font-size: 13.5px; font-weight: 600; color: var(--fg);
  transition: border-color var(--d-fast) var(--ease), background-color var(--d-fast) var(--ease);
}#fonLcg .gal__label:hover { border-color: var(--fg); background: #FFFFFF; }

/* --- The configurator --- */#fonLcg .cfg {
  background: var(--card); border: 1px solid var(--card-edge);
  border-radius: var(--r-lg); padding: clamp(20px, 2.4vw, 30px);
  box-shadow: var(--shadow-lg);
}#fonLcg .cfg__f { border: 0; margin: 0 0 clamp(18px, 2vw, 24px); padding: 0; }
/* The three step legends are the spine of the configurator — they are what
   tells someone this is three decisions and not one long form. Bold, in the
   ink, and a size that reads as a heading rather than as a caption. */#fonLcg .cfg__lg {
  padding: 0; margin-bottom: 12px;
  font-size: 13px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase;
  color: var(--fg);
}#fonLcg .cfg__opts { display: grid; gap: 8px; }#fonLcg .cfg__opts--2 { grid-template-columns: 1fr 1fr; }#fonLcg .cfg__opts--flav { grid-template-columns: 1fr 1fr; }@media (min-width: 520px) {#fonLcg .cfg__opts--flav { grid-template-columns: repeat(3, 1fr); } }#fonLcg .opt { position: relative; display: block; cursor: pointer; }#fonLcg .opt input { position: absolute; opacity: 0; width: 0; height: 0; }
/* WHITE, NOT THE BAND IT SITS ON.
   Every option took `var(--surface)`, which inside the offer section is the
   sand band — so an unselected option was a beige rectangle on a beige ground,
   held apart only by a hairline. It read as disabled rather than as available,
   which is the wrong signal on the one control that has to feel clickable.
   White lifts it off the band and makes the whole configurator brighter. */#fonLcg .opt__b {
  display: block; height: 100%;
  padding: 12px 14px;
  border: 1px solid var(--card-edge);
  border-radius: var(--r);
  background: var(--card);
  transition: border-color var(--d-fast) var(--ease), background-color var(--d-fast) var(--ease), box-shadow var(--d-fast) var(--ease);
}#fonLcg .opt__b b { display: block; font-size: 14.5px; font-weight: 600; line-height: 1.25; color: var(--fg); }#fonLcg .opt__b em { display: block; margin-top: 3px; font-style: normal; font-size: 12.5px; line-height: 1.35; color: var(--fg-soft); }#fonLcg .opt:hover .opt__b { border-color: var(--rule-str); }#fonLcg .opt input:checked + .opt__b {
  border-color: var(--ink);
  background: rgba(234, 246, 171, .42);
  box-shadow: 0 0 0 2px rgba(38, 32, 20, .16);
}#fonLcg .opt input:focus-visible + .opt__b { outline: 2px solid var(--ink); outline-offset: 2px; }#fonLcg .opt--sm .opt__b { padding: 10px 12px; }#fonLcg .opt--sm .opt__b b { font-size: 13px; }

/* ---- FORMAT PICKER ---------------------------------------------------------
   THE OPTION SHOWS THE THING IT IS AN OPTION FOR. These were two text boxes
   reading "Sachets" and "Pouches" — asking someone to choose between two
   physical formats by name, without letting them see either one. usefon.com's
   PDP builds this option as an image beside a title and a per-serve price, so
   that is the shape here, with the same two picker photographs the live PDP
   uses.

   The image sits in its own fixed column and is `object-fit: contain` on a
   neutral plate: the sachet file is a 750x1100 portrait and the pouch a 300x450,
   and `cover` on two different ratios would crop one of them through the
   product. Contain lets both sit whole at whatever size they are. */#fonLcg .opt--fmt .opt__b {
  display: grid; grid-template-columns: clamp(50px, 5.2vw, 74px) minmax(0, 1fr);
  gap: clamp(12px, 1.2vw, 16px); align-items: center; padding: clamp(11px, 1vw, 14px) clamp(12px, 1vw, 15px);
}#fonLcg .opt__img {
  position: relative;
  /* The photograph is the whole reason this option exists rather than a
     word, so it grows with the column instead of staying at phone size. */
  /* The plate follows the product shape. Both picker files are portrait
     (750x1100 and 300x450) and the plate was near-square, so object-fit
     contain fitted them by height and left a band of empty white each side. */
  height: clamp(70px, 7vw, 104px); border-radius: 9px; overflow: hidden;
  background: #FFFFFF; border: 1px solid rgba(38, 32, 20, .07);
}
/* MAX-WIDTH AND MAX-HEIGHT, NOT WIDTH AND HEIGHT.
   This was width:100%; height:100%; object-fit:contain, which looks like it
   should letterbox the product inside the plate and does not. The plate is a
   grid with place-items:center, so the image is a CENTRED grid item, and a
   percentage height on a centred item has no definite containing block to
   resolve against -- Chrome drops it to auto. The image then sized itself off
   its own aspect ratio: 164px of sachet inside a 58px plate, spilling 107px
   past the rounded corner and across the label beside it.

   Max constraints have no such failure mode: the image takes its natural
   size, is capped by the plate in both axes, and place-items centres what is
   left. overflow:hidden above is the belt to that braces. */
/* THE PLATE STRETCHES ITS ITEM, AND THAT IS THE WHOLE FIX.
   Originally: plate `place-items: center` + image `height: 100%`. A centred
   grid item has no definite containing block, so Chrome silently dropped the
   percentage to auto and the image sized off its own aspect ratio -- 164px of
   sachet inside a 58px plate, spilling 107px past the rounded corner and
   across the label beside it.

   The obvious patch, max-width/max-height with auto sizes, traded one bug for
   a worse one: these images are lazy, and before they load an auto-sized
   replaced element is 0x0, so the plate collapsed and the row shifted when
   each image arrived.

   Letting the item stretch (the grid default) gives it the plate box, which
   IS definite because the plate has an explicit height. 100% then resolves,
   object-fit letterboxes inside it, and the box is correct before a single
   byte of image has downloaded. overflow:hidden stays as the backstop. */
/* THE IMAGE IS ABSOLUTELY POSITIONED, WHICH IS THE ONLY THING THAT HELD.
   Three attempts failed on the same root cause -- a percentage height that
   never resolved -- and each failure looked different enough to send me after
   the wrong thing:

     plate place-items:center + image height:100%   a centred grid item has no
       definite containing block, so Chrome dropped the percentage to auto and
       the image sized off its aspect ratio: 164px of sachet in a 58px plate,
       spilling 107px past the corner radius and across the label.
     image max-width/max-height + auto              lazy images are 0x0 before
       they load, so the plate collapsed and the row jumped on arrival.
     plate grid with default alignment              align-items:normal behaves
       as START for REPLACED elements, not stretch, so the percentage still
       had nothing definite to resolve against. Still spilled 61px.

   Absolute positioning sidesteps the question entirely: `inset` sizes the box
   directly off the plate, with no percentage and no dependence on alignment,
   intrinsic ratio, or whether the file has downloaded yet. object-fit then
   letterboxes the product inside that box. This is the same pattern .plate in
   tokens.css uses, and for the same reason.

   inset:0 with an explicit 100% is what actually sizes it: for an absolutely
   positioned REPLACED element, auto width/height falls back to the intrinsic
   size and the offsets are simply ignored -- which is why inset:5px alone still
   drew a 158px sachet. Padding does the inner margin instead. */#fonLcg .opt__img img { position: absolute; inset: 0; width: 100%; height: 100%; padding: 5px; object-fit: contain; }#fonLcg .opt__txt { display: block; min-width: 0; }#fonLcg .opt--fmt .opt__txt b { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.2; color: var(--fg); }#fonLcg .opt--fmt .opt__txt em { display: block; margin-top: 2px; font-style: normal; font-size: 12px; line-height: 1.3; color: var(--fg-soft); }#fonLcg .opt__from {
  display: block; margin-top: 5px;
  font-size: 12px; font-weight: 600; line-height: 1.2; color: var(--fg);
  font-variant-numeric: tabular-nums;
}
/* The plate goes white inside the selected option so the product is not sitting
   on a grey square inside a lime card. */#fonLcg .opt--fmt input:checked + .opt__b .opt__img { background: #FFFFFF; }

/* ---- FLAVOUR SWATCHES ------------------------------------------------------
   Five identical grey boxes told apart only by their wording is the least
   appetising way to sell a drink. Each option now leads with FON's own
   Swatch_*.webp — a photograph of that flavour made up — cropped to a disc, so
   the colour of the drink does the work the name was doing on its own.

   `cover` is right here and `contain` would be wrong: these are 2:1 crops of a
   surface, with no edges that matter, so filling the disc is the point. */#fonLcg .opt--flav .opt__b { display: flex; align-items: center; gap: 10px; padding: 9px 11px; }#fonLcg .opt__sw {
  display: block; flex: none;
  width: 30px; height: 30px; border-radius: 50%; overflow: hidden;
  box-shadow: 0 0 0 1px rgba(38, 32, 20, .12), 0 1px 4px rgba(38, 32, 20, .14);
}#fonLcg .opt__sw img { width: 100%; height: 100%; object-fit: cover; }#fonLcg .opt--flav .opt__b b { font-size: 12.5px; line-height: 1.22; }

/* ONE FORMAT PER ROW BELOW 560px.
   Two-up, each card was 154px wide and the image column took 58 of them, which
   left about 60px of measure — enough to break "Single-serve sachets" over
   three lines, "Grab and go" over two, and the price over two more. A choice
   between two things should not need six lines of ragged type to state.

   Full width, the text gets ~256px and every line fits: image left, name,
   description and price stacked beside it. The two options are also easier to
   compare stacked, because their prices land on the same left edge instead of
   in two different columns. */@media (max-width: 559.98px) {#fonLcg .cfg__opts--2 { grid-template-columns: 1fr; }
  /* No plate override here any more. This block used to force the plate back
     to 56x58, which silently cancelled the sizes set on .opt__img above and
     left the picker photographs at thumbnail scale on exactly the width that
     most needed them legible. The clamps above resolve to sensible phone
     values on their own. */#fonLcg .opt--fmt .opt__b { align-items: center; }#fonLcg .opt--fmt .opt__txt b { font-size: 14px; }#fonLcg .opt--fmt .opt__txt em { display: inline; margin-top: 0; }#fonLcg .opt__from { margin-top: 4px; font-size: 12.5px; }
}@media (max-width: 400px) {#fonLcg .opt--flav .opt__b { gap: 8px; padding: 8px 9px; }#fonLcg .opt__sw { width: 26px; height: 26px; }#fonLcg .opt--flav .opt__b b { font-size: 11.5px; }
}#fonLcg .opt--plan .opt__b { padding: 15px 16px; }

/* ---- THE SUBSCRIBE OPTION, BUILT AS AN ARGUMENT -----------------------------
   It was one bold line, one grey line and a price, sitting level with the
   one-time option — so the page recommended a plan and never said why. The live
   PDP builds this option as a banner, a price against its comparison, and a
   short list of what subscribing actually gets you. Same three parts here.

   The banner is the ink pill rather than the lime: lime is spoken for on this
   page (it means "this is the number that matters") and a lime bar the width of
   the card would be the loudest thing in the offer block, louder than the CTA
   under it. *//* THE CORNER IS NOT SETTLED HERE. The frequency control's block, 1700 lines
   below, sets overflow and the bar's radius on the same two selectors and wins
   on order - which is why two attempts at clipping in this rule changed nothing
   on screen. All this rule does now is take the card's padding away so the bar
   can reach both edges; the arcs are matched down there, next to the overflow
   rule that forces the matching to be necessary. The ink top border stays here
   because it belongs with the bar's own colour: while the bar is showing, the
   card's 1px edge under it is painted the same ink, so the join is seamless
   instead of a hairline of card edge above a black bar. */
#fonLcg .opt--sub .opt__b { padding: 0; }
#fonLcg .opt--sub:has(.opt__banner:not([hidden])) .opt__b { border-top-color: var(--ink); }
#fonLcg .opt__banner {
  display: block; padding: 9px 16px;
  background: var(--ink); color: #FFFFFC;
  font-size: 11.5px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase;
  line-height: 1.3; text-align: center;
}#fonLcg .opt--sub .opt__head { padding: 14px 16px 0; }#fonLcg .opt--sub .opt__ups { padding: 0 16px 15px; }#fonLcg .opt--plan:not(.opt--sub) .opt__head { padding: 0; }#fonLcg .opt__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }#fonLcg .opt__name { display: block; min-width: 0; flex: 1 1 auto; }#fonLcg .opt__name b { display: block; font-size: 16px; font-weight: 600; letter-spacing: -.02em; line-height: 1.2; color: var(--fg); }#fonLcg .opt__name em { display: block; margin-top: 3px; font-style: normal; font-size: 12.5px; line-height: 1.35; color: var(--fg-soft); }

/* --- Subscription plan card ---------------------------------------------
   RESTORED. These rules are Renz's, written when the stylesheet was still
   inline in the section; the d298210 rebuild dropped them while keeping the
   markup, so .sub__panel, .sub__freq, .sub__list, .sub__head, .sub__best,
   .opt__b--row and .opt--buy .opt__price had no styles at all and the whole
   subscribe card rendered as raw form controls. Recovered verbatim from
   17347ab. They were never in the prototype stylesheet - this is theme-only
   work, so build-theme-section.mjs cannot regenerate them. */
#fonLcg .opt__b--row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
#fonLcg .opt--buy .opt__price { display: flex; align-items: baseline; gap: 7px; white-space: nowrap; }
#fonLcg .opt--buy .opt__price strong { font-size: 17px; font-weight: 600; letter-spacing: -.02em; color: var(--blue); }
#fonLcg .opt--buy .opt__price s { font-size: 14px; color: var(--fg-soft); text-decoration-thickness: 1px; }

#fonLcg .sub__head { margin-bottom: 0; }
#fonLcg .sub__best { margin-bottom: 8px; }
#fonLcg .sub__best[hidden] { display: none; }
#fonLcg .sub__panel { display: block; margin-top: 14px; }
/* Closed only where :has() can actually re-open it. */
@supports selector(:has(*)) {
  #fonLcg .opt--sub:not(:has(input:checked)) .sub__panel { display: none; }
}
#fonLcg .sub__freqwrap { position: relative; display: block; }
#fonLcg .sub__freqwrap::after {
  content: ""; position: absolute; right: 15px; top: 50%; width: 8px; height: 8px;
  border-right: 1.8px solid var(--blue); border-bottom: 1.8px solid var(--blue);
  transform: translateY(-70%) rotate(45deg); pointer-events: none;
}
#fonLcg .sub__freq {
  width: 100%; appearance: none; -webkit-appearance: none;
  padding: 13px 38px 13px 15px;
  border: 1px solid var(--card-edge); border-radius: var(--r-sm);
  background: var(--chip); color: var(--blue);
  font: inherit; font-size: 13.5px; font-weight: 600; line-height: 1.3;
  cursor: pointer; text-overflow: ellipsis;
}
#fonLcg .sub__freq:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }

#fonLcg .sub__list { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 10px; }
#fonLcg .sub__list li { position: relative; padding-left: 30px; font-size: 13.5px; line-height: 1.4; color: var(--fg-mut); }
#fonLcg .sub__list li::before {
  content: ""; position: absolute; left: 0; top: -1px;
  width: 19px; height: 19px; border-radius: 50%;
  background: var(--chip); border: 1px solid var(--card-edge);
}
#fonLcg .sub__list li::after {
  content: ""; position: absolute; left: 6px; top: 6px;
  width: 7px; height: 4px;
  border-left: 1.6px solid var(--blue); border-bottom: 1.6px solid var(--blue);
  transform: rotate(-45deg);
}
/* .opt__b b is display:block for the plan cards' stacked headings; these bullets
   sit inside that same card, so the count was breaking onto its own line. */
#fonLcg .sub__list b { display: inline; font-weight: 600; color: var(--fg); }

/* THE PRICE COLUMN IS ONE NARROW STACK, NOT A ROW THAT WRAPS.
   With the figure and its struck comparison side by side the column needed
   ~150px of a 276px card, which left the name 112px and broke "Subscribe &
   Save" over two lines with "90-day supply, billed monthly" running to four
   underneath it. Stacked — figure, comparison, per-day — the column is about
   80px, the name gets a real measure back, and the three numbers read top to
   bottom in descending importance instead of competing on one baseline.

   Per-day stays whatever else goes: it is the number a subscription is actually
   weighed against. */#fonLcg .opt--plan .opt__price {
  display: flex; flex-direction: column; align-items: flex-end;
  gap: 1px; margin-top: 0; flex: none; text-align: right;
}#fonLcg .opt--plan .opt__price strong { font-size: 21px; font-weight: 600; letter-spacing: -.03em; line-height: 1.1; color: var(--fg); }#fonLcg .opt--plan .opt__price s { font-size: 12.5px; line-height: 1.2; color: var(--fg-soft); text-decoration-thickness: 1px; }#fonLcg .opt--plan .opt__price i { font-style: normal; font-size: 11.5px; line-height: 1.2; color: var(--fg-soft); }#fonLcg .opt__ups { display: grid; gap: 7px; margin-top: 13px; }#fonLcg .opt__ups > span {
  display: flex; align-items: center; gap: 9px;
  font-size: 13px; line-height: 1.35; color: var(--fg-mut);
}#fonLcg .opt__ups img { width: 18px; height: 18px; flex: none; }

/* The tag is only on the plain option now; the subscribe card has its banner. *//* A flavour its format cannot supply is removed here: syncFlavourStock() toggles
   this class, so without the rule the class lands on an element nothing hides and
   an unbuyable flavour stays clickable.

   THE THREE ANGLE LANDERS OVERRIDE THIS at the end of the file - they show the
   option dimmed and labelled instead of hiding it. This rule still governs the
   other landers on this sheet. */
#fonLcg .opt--oos { display: none; }

/* Format cards - ported from the prototype (css/sections.css). The image is
   absolutely positioned inside the plate: a percentage height on a centred or
   auto-sized grid item has no definite containing block to resolve against, and
   lazy images are 0x0 before they load, so every other approach either spilled
   the packshot past the corner radius or collapsed the plate until it arrived. */
#fonLcg .opt--fmt .opt__b {
  display: grid; grid-template-columns: clamp(50px, 5.2vw, 74px) minmax(0, 1fr);
  gap: clamp(12px, 1.2vw, 16px); align-items: center;
  padding: clamp(11px, 1vw, 14px) clamp(12px, 1vw, 15px);
}
#fonLcg .opt__img {
  position: relative; height: clamp(70px, 7vw, 104px);
  border-radius: 9px; overflow: hidden;
  background: #FFFFFF; border: 1px solid rgba(38, 32, 20, .07);
}
#fonLcg .opt__img img { position: absolute; inset: 0; width: 100%; height: 100%; padding: 5px; object-fit: contain; }
#fonLcg .opt__txt { display: block; min-width: 0; }
#fonLcg .opt--fmt .opt__txt b { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.2; color: var(--fg); }
#fonLcg .opt--fmt .opt__txt em { display: block; margin-top: 2px; font-style: normal; font-size: 12px; line-height: 1.3; color: var(--fg-soft); }
#fonLcg .opt__from {
  display: block; margin-top: 5px;
  font-size: 12px; font-weight: 600; line-height: 1.2; color: var(--fg);
  font-variant-numeric: tabular-nums;
}
#fonLcg .opt--fmt input:checked + .opt__b .opt__img { background: #FFFFFF; }
@media (max-width: 559.98px) {
  #fonLcg .cfg__opts--2 { grid-template-columns: 1fr; }
  #fonLcg .opt--fmt .opt__b { align-items: center; }
  #fonLcg .opt--fmt .opt__txt b { font-size: 14px; }
  #fonLcg .opt--fmt .opt__txt em { display: inline; margin-top: 0; }
  #fonLcg .opt__from { margin-top: 4px; font-size: 12.5px; }
}#fonLcg .opt__tag {
  display: inline-block; margin-bottom: 6px;
  padding: 3px 9px; border-radius: var(--r-pill);
  background: var(--lime); color: var(--lime-ink);
  font-size: 10.5px; font-weight: 600; letter-spacing: .09em; text-transform: uppercase;
}#fonLcg .opt__price { display: block; margin-top: 8px; font-size: 15px; color: var(--fg-mut); }#fonLcg .opt__price strong { font-size: 21px; font-weight: 600; letter-spacing: -.03em; color: var(--fg); }#fonLcg .opt__price i { font-style: normal; font-size: 13px; color: var(--fg-soft); }#fonLcg .cfg__note { margin: 9px 0 0; font-size: 12.5px; color: var(--fg-soft); }#fonLcg .cfg__sum {
  margin-bottom: 16px; padding: 14px 16px;
  background: var(--chip); border: 1px solid var(--card-edge); border-radius: var(--r);
  display: grid; gap: 8px;
}#fonLcg .cfg__sumrow { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; font-size: 13.5px; color: var(--fg-soft); }#fonLcg .cfg__sumrow b { font-size: 14px; font-weight: 600; color: var(--fg); text-align: right; }#fonLcg .cfg__sumrow--big b { font-size: 24px; letter-spacing: -.03em; }#fonLcg .cfg__sumrow--big i { font-style: normal; font-size: 13px; font-weight: 400; color: var(--fg-soft); }

/* ---- THE TRUST ROW ---------------------------------------------------------
   FOUR MARKS IN A ROW, NOT FOUR LINES OF FOOTNOTE.
   This was 13px grey text with a CSS tick beside each item, stacked — the shape
   of small print, sitting in the one place on the page where a buyer is
   deciding whether to trust the purchase. The reference PDP runs its equivalent
   as outlined marks with a short label under each, which reads in a glance and
   survives being scrolled past.

   The icons are FON's own, lifted from usefon.com's PDP for these same four
   promises, so nothing here is a lookalike chosen off an icon set. Each sits in
   a ring rather than on its own: at 15px these are small solid glyphs, and a
   ring gives each one a consistent footprint so four different drawings still
   line up as a set.

   THREE ACROSS, ON ONE LINE, AT EVERY WIDTH. It was four, which on a phone
   wrapped to a two-by-two block — and a square of four grey captions reads as
   a specification table, not as reassurance. Three fit one row even at 360px,
   so the promises stay a single glance instead of becoming a thing to read. */#fonLcg .badges {
  list-style: none; margin: 18px 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px 6px;
  text-align: center;
}#fonLcg .badges li {
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  font-size: 11.5px; line-height: 1.3; color: var(--fg-mut);
  text-wrap: balance;
}#fonLcg .badges li img {
  width: 17px; height: 17px; flex: none;
  box-sizing: content-box; padding: 9px;
  border: 1px solid var(--rule-str); border-radius: 50%;
  opacity: .85;
}@media (max-width: 480px) {#fonLcg .badges { gap: 9px 5px; }#fonLcg .badges li { font-size: 10.5px; line-height: 1.28; }#fonLcg .badges li img { width: 15px; height: 15px; padding: 7px; } }

/* The old stacked treatment, kept for any other .badges list on the page. */#fonLcg .badges--rows { grid-template-columns: 1fr; gap: 8px; text-align: left; }@media (min-width: 520px) {#fonLcg .badges--rows { grid-template-columns: 1fr 1fr; } }#fonLcg .badges--rows li { position: relative; display: block; padding-left: 21px; font-size: 13px; line-height: 1.4; color: var(--fg-mut); }#fonLcg .badges--rows li::before {
  content: ""; position: absolute; left: 2px; top: 6px;
  width: 8px; height: 4.5px;
  border-left: 1.8px solid var(--ink); border-bottom: 1.8px solid var(--ink);
  transform: rotate(-45deg);
}
/* THE CHECKOUT NOTE IS THE LAST THING READ BEFORE PAYING, so it stops being
   the faintest type on the page. Up a weight and into the mid grey, and held
   on one line wherever the column can take it — it is three short statements
   that only look like a paragraph because they were set like one. It is still
   allowed to wrap on the narrowest phones; a clipped price disclosure would
   be a worse outcome than a wrapped one. */
#fonLcg .cfg__fine {
  margin: 14px 0 0;
  font-size: 11.5px; font-weight: 500; line-height: 1.5;
  color: var(--fg-mut);
  text-wrap: balance;
}
@media (min-width: 560px) {#fonLcg .cfg__fine { white-space: nowrap; font-size: 11px; } }


/* --- Product carousel ----------------------------------------------------
   Scroll-snap rather than a JS transform, so swipe and trackpad work with no
   script and the strip degrades to something usable if page.js never runs. */#fonLcg .gal { margin-bottom: clamp(18px, 2vw, 26px); }#fonLcg .gal__stage { position: relative; }

/* ---- THE PACKSHOT CARRIES ITS OWN OFFER ------------------------------------
   THE PRODUCT IMAGE WAS A PHOTOGRAPH AND NOTHING ELSE, at 350px on a phone,
   with every fact about the product living in text somewhere below it. The
   reference PDP puts a card of contents and a saving flag over its packshot,
   and that is the whole reason its image reads as an offer rather than as a
   picture — the two things a buyer wants to know are on the thing they are
   already looking at.

   BOTH ARE MARKUP OVER THE PHOTOGRAPH, NEVER BAKED INTO IT. This repo has
   already paid for the alternative: generated frames carrying label text came
   back with "6g Sugar" against a 0g label and "20 SacNets". Real text also
   stays selectable, translatable and readable by a screen reader, and can be
   corrected without re-rolling an image.

   THE FRAME ALSO GETS BIGGER ON MOBILE, running edge to edge instead of sitting
   inside the gutter, which is what leaves room for a card over it at a size
   anyone can read. */
/* BOTTOM RIGHT, NOT TOP RIGHT. Sat in the top corner the card covered the
   model's face, which is the one part of a lifestyle frame that is doing the
   persuading. Low and right it sits over the counter and the out-of-focus
   background, leaving the face, the sachet and the pour — the entire action of
   the photograph — completely clear. The saving flag moves to the opposite
   corner so the two never crowd one another. */
/* THE CARD IS SOLID, AND IT SHOWS THE INGREDIENTS RATHER THAN LISTING THEM.
   The first version was a translucent, blurred panel carrying five small
   number-and-label pairs. Two problems, and they compound: a frosted card over
   a photograph has no edge of its own, so it read as a watermark rather than as
   an object on the product; and five rows of tabular type with nothing in them
   but figures is exactly the texture that reads as generated filler.

   Solid white with a real shadow gives it an edge. FON's own photograph of each
   raw ingredient — the same files the nutrient panel uses, already in the repo —
   gives each row something that only this product could have put there. The
   figures grew a step at the same time, because they are the reason the card is
   on the picture at all. */#fonLcg .galcard {
  position: absolute; z-index: 3; right: 12px; bottom: 12px;
  width: min(47%, 208px);
  padding: 14px 15px 15px;
  border-radius: 16px;
  background: #FFFFFF;
  border: 1px solid rgba(38, 32, 20, .08);
  box-shadow: 0 18px 44px -16px rgba(38, 32, 20, .55), 0 2px 6px rgba(38, 32, 20, .08);
}#fonLcg .galcard__t {
  margin: 0 0 11px;
  font-size: 10px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--grey-500);
}#fonLcg .galcard__l { list-style: none; margin: 0; padding: 0; display: grid; gap: 9px; }#fonLcg .galcard__l li {
  display: grid; grid-template-columns: 22px auto minmax(0, 1fr);
  align-items: center; column-gap: 8px;
}#fonLcg .galcard__l img {
  width: 22px; height: 22px; border-radius: 50%; object-fit: cover;
  background: #F2F0EC; box-shadow: 0 0 0 1px rgba(38, 32, 20, .09);
}#fonLcg .galcard__l b {
  font-size: 14px; font-weight: 700; letter-spacing: -.025em; line-height: 1;
  color: var(--ink); font-variant-numeric: tabular-nums; white-space: nowrap;
}#fonLcg .galcard__l span { font-size: 10.5px; line-height: 1.2; color: var(--grey-700); }
/* The dose the whole page is about is the only thing in here that is coloured. */
/* NO HIGHLIGHT BLOCK — THE TYPE CHANGES COLOUR.
   A lime pill behind "1,000mg" was marking the figure by putting a shape around
   it, which is a highlighter pen rather than typography, and it fought the
   photograph underneath the card. Colour does the same job with nothing added
   to the layout. It cannot be lime: at 1.2:1 on white, lime is invisible as
   text. It is the blue that already marks every check on this page, at 4.5:1. */#fonLcg .galcard__l li:first-child b { color: var(--blue); }#fonLcg .galflag {
  position: absolute; z-index: 3; left: 12px; top: 12px; margin: 0;
  padding: 9px 14px; border-radius: 12px;
  background: var(--ink); color: #FFFFFC;
  box-shadow: 0 12px 30px -14px rgba(38, 32, 20, .55);
}#fonLcg .galflag b { display: block; font-size: 17px; font-weight: 600; letter-spacing: -.03em; line-height: 1; }#fonLcg .galflag span { display: block; margin-top: 3px; font-size: 10.5px; line-height: 1.2; color: rgba(255, 255, 252, .72); }

/* The overlays sit on the first slide only. On the others the visitor is
   looking at the box, the label or the preparation diagram, and a card over
   those is covering the thing they went looking for. *//* THE DOSE CARD IS THE FIRST FRAME'S, NOT THE GALLERY'S - Akaash. It was
   scoped with a sibling selector that could never match: .galcard is a child of
   .gal__stage and .gal__slide is a child of .gal__track, so the two are never
   siblings and the card was drawn over all five photographs. The stage carries
   .is-off from the same mark() that moves the thumbnails, so the card is tied to
   the frame that is actually on screen. No JS, no class, card stays - which is
   the right failure, because slide one is what loads first. */#fonLcg .gal.is-off .galcard { display: none; }@media (max-width: 939.98px) {
  /* Full-bleed frame: +40px of picture, and the room the card needs. */#fonLcg .gal__stage { margin-inline: calc(var(--gutter) * -1); }#fonLcg .gal__slide img { border-radius: 0; }
  /* THE CONTENTS CARD COMES OFF THE PHOTOGRAPH ON A PHONE.
     Two positions were tried and both failed for the same reason: the frame
     is 390px wide and the card needs five rows, so wherever it goes it takes
     a third of the picture. Bottom-right it covered the glass and the pour;
     centred on the right edge it still crowded the subject.

     It is also redundant here. The benefit checklist sits directly under this
     gallery on a phone and carries every one of the same five figures --
     1,000mg, 25g, 5g, 20 billion, 13 -- at a size anyone can read. So the
     card was covering the photograph to repeat what the next 200px already
     says. The saving flag stays, because nothing else on screen carries it.

     It returns at 940px, where the gallery has its own column and the space
     it occupies is space nothing else wanted. */#fonLcg .galcard { display: none; }#fonLcg .galflag { left: 14px; top: 14px; }#fonLcg .gal__thumbs { margin-top: 12px; }
}@media (max-width: 400px) {#fonLcg .galcard { padding: 10px 11px; width: 50%; }#fonLcg .galcard__l { gap: 6px; }#fonLcg .galcard__l b { font-size: 12px; }#fonLcg .galcard__l span { font-size: 10px; }
}#fonLcg .gal__track {
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-auto-flow: column; grid-auto-columns: 100%;
  overflow-x: auto; scroll-snap-type: x mandatory;
  border-radius: var(--r-lg); border: 1px solid var(--card-edge); background: #fff;
  scrollbar-width: none;
}#fonLcg .gal__track::-webkit-scrollbar { display: none; }#fonLcg .gal__track:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }#fonLcg .gal__slide { scroll-snap-align: center; }#fonLcg .gal__slide img { display: block; width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; }#fonLcg .gal__nav {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 38px; height: 38px; border-radius: 50%; cursor: pointer;
  background: rgba(255, 255, 252, .92); border: 1px solid var(--card-edge);
  box-shadow: 0 2px 10px rgba(38, 32, 20, .14);
  display: grid; place-content: center;
}#fonLcg .gal__nav::before {
  content: ""; width: 9px; height: 9px;
  border-left: 1.8px solid var(--ink); border-bottom: 1.8px solid var(--ink);
}#fonLcg .gal__nav--prev { left: 10px; }#fonLcg .gal__nav--prev::before { transform: rotate(45deg) translate(1px, -1px); }#fonLcg .gal__nav--next { right: 10px; }#fonLcg .gal__nav--next::before { transform: rotate(-135deg) translate(1px, -1px); }#fonLcg .gal__nav:disabled { opacity: 0; pointer-events: none; }#fonLcg .gal__nav:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }#fonLcg .gal__thumbs {
  list-style: none; margin: 10px 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px;
}#fonLcg .gal__thumb {
  display: block; width: 100%; padding: 0; cursor: pointer;
  background: #fff; border: 1px solid var(--card-edge); border-radius: 9px;
  overflow: hidden; line-height: 0;
}#fonLcg .gal__thumb img { width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; }#fonLcg .gal__thumb.is-on { border-color: var(--ink); box-shadow: inset 0 0 0 1px var(--ink); }#fonLcg .gal__thumb:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }

/* --- Value stack --- */#fonLcg .stack {
  margin-top: clamp(28px, 3.2vw, 46px);
  padding: clamp(22px, 2.6vw, 34px);
  background: var(--card); border: 1px solid var(--card-edge); border-radius: var(--r-lg);
}#fonLcg .stack__head { margin-bottom: clamp(18px, 2vw, 24px); }#fonLcg .stack__head .h3 { margin-bottom: 5px; }#fonLcg .stack__l { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr; gap: 0; }@media (min-width: 640px) {#fonLcg .stack__l { grid-template-columns: 1fr 1fr; column-gap: clamp(24px, 3vw, 48px); } }#fonLcg .stack__l li {
  display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
  padding-block: 10px; border-bottom: 1px solid var(--rule);
  font-size: 14.5px; color: var(--fg-mut);
}#fonLcg .stack__l b { font-weight: 600; color: var(--fg); font-variant-numeric: tabular-nums; }

/* The packshot beside the basket, with the saving riding on it as a badge, and
   the comparison resolved as a COST PER DAY. Two columns from 820px, where the
   basket has room to sit next to the image without either being squeezed. */#fonLcg .stack__grid { display: grid; gap: clamp(22px, 3vw, 44px); align-items: center; }@media (min-width: 820px) {#fonLcg .stack__grid { grid-template-columns: .78fr 1fr; } }#fonLcg .stack__art { position: relative; display: grid; place-items: center; padding-block: 6px; }#fonLcg .stack__art > img { width: min(100%, 350px); height: auto; }
/* The badge is a disc, so it needs a fixed square and centred text rather than
   padding — padding on a circle pushes the label off its own centre. */#fonLcg .stack__badge {
  position: absolute; top: clamp(-38px, -2.4vw, -16px); right: clamp(0px, 3vw, 26px);
  display: grid; place-content: center; text-align: center;
  width: clamp(96px, 11vw, 128px); aspect-ratio: 1; border-radius: 50%;
  background: var(--lime); color: var(--lime-ink);
  box-shadow: 0 10px 26px -12px rgba(38, 32, 20, .5);
}#fonLcg .stack__badge b { display: block; font-size: clamp(20px, 2.3vw, 27px); font-weight: 600; letter-spacing: -.03em; line-height: 1; }#fonLcg .stack__badge span { display: block; margin-top: 3px; font-size: 10.5px; line-height: 1.25; }

/* BELOW THE TWO-COLUMN BREAK, THE PACK AND THE BADGE SIT SIDE BY SIDE.
   Stacked, the packshot took 300px of a 1168px card to show a white box on a
   white ground, and the disc — positioned for a column that only exists above
   820px — landed on top of the carton and clipped its corner. Neither is
   carrying 300px of page.

   In a row they are a 130px band: the pack at a size where the label is still
   readable, the saving beside it where it reads as a figure rather than a
   sticker stuck on the product. The disc goes back to `position: absolute` at
   820px, where the art has its own column again. */@media (max-width: 819.98px) {#fonLcg .stack__grid { gap: 18px; }#fonLcg .stack__art {
    display: flex; align-items: center; justify-content: center;
    gap: clamp(16px, 5vw, 30px); padding-block: 0;
  }
  /* THE PRODUCT IS THE BIGGER OF THE TWO. First attempt at overlapping put a
     112px disc over a 168px carton, so the badge was most of the product's own
     height and sat across its label: the saving was reading as the hero and the
     thing being sold as its backdrop. The pack is now the largest object in the
     block and the disc clips only its top-right corner, which is the
     arrangement in the supplied reference — a saving stuck to the product reads
     as this product's saving, but only while the product is still what you see
     first.

     The offset is explicit rather than the `right:` used above 820px, because
     here the art is a centred flex row rather than a column of its own. */#fonLcg .stack__art { position: relative; display: block; text-align: center; padding-block: 4px; }#fonLcg .stack__art > img { width: min(66%, 250px); margin-inline: auto; }#fonLcg .stack__badge {
    position: absolute; top: -14px; left: 50%;
    width: 86px;
    transform: translateX(46px);
  }#fonLcg .stack__badge b { font-size: 19px; }#fonLcg .stack__badge span { font-size: 9px; }
}#fonLcg .stack__k {
  margin: 0 0 10px; font-size: 12px; font-weight: 600;
  letter-spacing: .13em; text-transform: uppercase; color: var(--fg-soft);
}#fonLcg .stack__sum { margin-top: clamp(16px, 1.8vw, 22px); display: grid; gap: 8px; }#fonLcg .stack__row {
  display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
  padding: 13px 16px; border-radius: var(--r-md);
  background: #FFFFFF; border: 1px solid var(--card-edge);
  font-size: 14px; color: var(--fg-mut);
}#fonLcg .stack__row b { font-size: clamp(19px, 2.1vw, 25px); font-weight: 600; letter-spacing: -.03em; color: var(--fg); font-variant-numeric: tabular-nums; }#fonLcg .stack__row i { font-style: normal; font-size: 13px; font-weight: 400; letter-spacing: 0; color: var(--fg-soft); }
/* THE FILL COMES BACK HERE. This row IS a selection — it is the option the
   comparison is recommending, sitting between the one it beats and the saving
   it produces — and a fill is the right way to mark a chosen thing. That is the
   distinction: highlight a choice, never highlight a word inside a sentence. */#fonLcg .stack__row--key { background: rgba(234, 246, 171, .42); border-color: rgba(38, 32, 20, .26); color: var(--fg); }#fonLcg .stack__row--save { background: transparent; border-style: dashed; }#fonLcg .stack__f { margin: clamp(12px, 1.4vw, 16px) 0 0; font-size: 11.5px; line-height: 1.5; color: var(--fg-soft); }

/* --- The 90-day guarantee, rebuilt out of elements ----------------------
   Every value below was a pixel in a PNG this afternoon. That is the point: the
   heading can be resized, the quote reworded, the faces swapped and the whole
   card reflowed, none of which was possible while it was one flat 1008x702
   composite scaled to whatever width it landed in.

   IT NEVER STACKS. The first pass dropped to one column under 760px and put the
   packshot beneath the copy, which is the reflex answer and the wrong one here:
   the card is a claim and a piece of evidence, and side by side is what makes
   them read as one statement. Stacked, it also became the tallest thing between
   the offer and the FAQ - the same "too long" the composite had. So the two
   columns hold at every width and the type scales instead, which is the trade
   the artwork was making all along.

   The sizes are set twice rather than in one clamp. A single curve wide enough
   to give a 50px headline at 1440 leaves 13px at 390, and one narrow enough to
   be readable at 390 caps far too low for the desktop card. Two ranges, one
   breakpoint, no compromise in the middle. */
#fonLcg .gtee {
  margin: clamp(16px, 1.8vw, 24px) 0 0;
  display: grid; align-items: center;
  grid-template-columns: minmax(0, 1fr) 34%;
  gap: clamp(12px, 2.4vw, 34px);
  padding: clamp(14px, 2.2vw, 32px);
  background: var(--card);
  border: 1px solid var(--card-edge); border-radius: var(--r-lg);
}
#fonLcg .gtee__h {
  margin: 0;
  font-size: clamp(16px, 4.7vw, 26px); font-weight: 700;
  line-height: 1.09; letter-spacing: -.03em; color: var(--ink);
  text-wrap: balance; max-width: 16ch;
}
/* Grey, and a shade lighter than body copy: it is a quotation inside a card,
   not the card's own voice, and it sits under the heading without competing. */
#fonLcg .gtee__q {
  margin: clamp(8px, 2.2vw, 16px) 0 0; padding: 0; border: 0;
  font-size: clamp(11.5px, 3.2vw, 17px); line-height: 1.35;
  color: var(--grey-500); max-width: 34ch;
}
#fonLcg .gtee__by {
  margin: clamp(8px, 2.2vw, 16px) 0 0;
  font-size: clamp(11px, 3vw, 16px); line-height: 1.3; color: var(--ink);
}
#fonLcg .gtee__by b { font-weight: 700; }
#fonLcg .gtee__by i { font-style: italic; }
/* aria-hidden in the markup, so this is decoration and needs no list semantics.
   The ring is the CARD's colour, not white for its own sake - it is there to
   cut one face from the next where they overlap, so it has to be whatever is
   behind them. */
#fonLcg .gtee__faces {
  list-style: none; display: flex; margin: clamp(10px, 2.6vw, 18px) 0 0; padding: 0;
}
#fonLcg .gtee__faces li {
  width: clamp(28px, 8vw, 44px); aspect-ratio: 1;
  border-radius: 50%; overflow: hidden;
  box-shadow: 0 0 0 2px var(--card);
}
#fonLcg .gtee__faces li + li { margin-left: -8px; }
/* The stills are 420x746 portrait video frames, so a centred square crop lands
   on a collarbone. Pulled up to the top third, it lands on the face. */
#fonLcg .gtee__faces img {
  display: block; width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 22%;
}
#fonLcg .gtee__count {
  margin: clamp(7px, 1.8vw, 11px) 0 0;
  font-size: clamp(10.5px, 2.9vw, 15px); font-weight: 600; line-height: 1.32;
  color: var(--ink); max-width: 22ch;
}
/* 3:4 out of a 1:1 file. The pour is centred in the frame, so the crop takes
   the width off both sides and loses nothing that matters. */
#fonLcg .gtee__shot {
  aspect-ratio: 3 / 4; overflow: hidden;
  border-radius: clamp(8px, 1.3vw, 20px);
  box-shadow: var(--lcg-shadow);
}
#fonLcg .gtee__shot img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* --- and from 760px up, the desktop range ---
   The copy is the half of this card that carries it - the packshot is the same
   pour that already leads the gallery a screen above - so the left column takes
   the growth and the photograph stops at 310px rather than tracking the page. */
@media (min-width: 760px) {
  #fonLcg .gtee { grid-template-columns: minmax(0, 1fr) clamp(220px, 24vw, 310px); }
  #fonLcg .gtee__h { font-size: clamp(30px, 3.4vw, 50px); }
  #fonLcg .gtee__q { font-size: clamp(17px, 1.55vw, 22px); }
  #fonLcg .gtee__by { font-size: clamp(15px, 1.35vw, 19px); }
  #fonLcg .gtee__faces li { width: clamp(46px, 4.2vw, 60px); }
  #fonLcg .gtee__faces li + li { margin-left: -10px; }
  #fonLcg .gtee__count { font-size: clamp(14px, 1.25vw, 18px); }
}

/* --------------------------------------------------------------------------
   5 · REFERENCE STACK + FAQ (shared accordion)
   -------------------------------------------------------------------------- */#fonLcg .faq { border-top: 1px solid var(--rule); }#fonLcg .faq__i { border-bottom: 1px solid var(--rule); }

/* THE "DETAIL, IF YOU WANT IT" DIVIDER IS GONE and the thirteen panels are one
   list. It was marking where the questions ended and the specification began,
   which is a distinction the page cared about and the reader did not: both
   halves are the same object — a question you can open — and splitting them put
   a second heading inside a section that already has one.

   SMOOTH OPEN AND CLOSE. A <details> snaps because its content goes from
   `display: none` to laid out in one frame, and no amount of transition on the
   panel can catch that. `::details-content` is the browser's own handle on that
   box, and `interpolate-size: allow-keywords` is what makes `height: auto`
   animatable at all — without it there is no numeric end state to travel to.
   `content-visibility` has to be transitioned `allow-discrete` alongside, or
   the box vanishes on frame one of the close and the height animates against
   nothing.

   Wrapped in @supports so this is strictly additive: where it is unsupported
   the accordion opens instantly, exactly as it did before. */@supports (interpolate-size: allow-keywords) {#fonLcg { interpolate-size: allow-keywords; }#fonLcg .faq__i::details-content {
    height: 0;
    overflow: hidden;
    transition: height .34s var(--ease), content-visibility .34s var(--ease) allow-discrete;
  }#fonLcg .faq__i[open]::details-content { height: auto; }
}#fonLcg .faq__i summary {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 18px;
  padding-block: clamp(16px, 1.9vw, 22px);
  cursor: pointer; list-style: none;
  font-size: clamp(16px, 1.3vw, 18.5px); font-weight: 500; letter-spacing: -.014em; line-height: 1.35;
  color: var(--fg);
  transition: color var(--d-fast) var(--ease);
}#fonLcg .faq__i summary::-webkit-details-marker { display: none; }#fonLcg .faq__i summary:hover { color: var(--ink); }#fonLcg .faq__i summary::after {
  content: ""; flex: none; width: 15px; height: 15px; margin-top: 5px;
  background: currentColor;
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='M8 1v14M1 8h14' stroke='black' stroke-width='1.7' stroke-linecap='round'/></svg>") center/contain no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='M8 1v14M1 8h14' stroke='black' stroke-width='1.7' stroke-linecap='round'/></svg>") center/contain no-repeat;
  transition: transform var(--d-fast) var(--ease);
}#fonLcg .faq__i[open] summary::after { transform: rotate(45deg); }
/* THE 70ch CAP WAS ON THE PANEL, NOT ON THE PROSE, AND THAT WAS THE BUG.
   A measure limit is correct for paragraphs and wrong for everything else: the
   supplement-facts table and the definition lists inherited it too, so they
   stopped about two-thirds of the way across their own panel and left a band of
   empty space down the right. The cap now sits on the text children only, and
   tables and lists use the full width they were designed for.

   `overflow: hidden` is what lets the open/close animation clip cleanly, since
   the panel's height is animated from 0. */#fonLcg .faq__a { padding-bottom: clamp(16px, 1.9vw, 24px); overflow: hidden; }#fonLcg .faq__a > p,
#fonLcg .faq__a > .body { max-width: 70ch; }#fonLcg .faq__a > * + * { margin-top: 12px; }#fonLcg .deflist { margin: 0; display: grid; gap: 0; }#fonLcg .deflist > div { padding-block: 13px; border-bottom: 1px solid var(--rule); }#fonLcg .deflist > div:last-child { border-bottom: 0; padding-bottom: 0; }#fonLcg .deflist dt { font-size: 15.5px; font-weight: 600; letter-spacing: -.01em; color: var(--fg); margin-bottom: 4px; }#fonLcg .deflist dd { margin: 0; font-size: 14.5px; line-height: 1.55; color: var(--fg-mut); }#fonLcg .howto { margin: 0; border-radius: var(--r-md); overflow: hidden; border: 1px solid var(--card-edge); background: #fff; }#fonLcg .howto img { width: 100%; height: auto; }#fonLcg .facts { border: 1px solid var(--card-edge); border-radius: var(--r); overflow: hidden; }
/* Without an explicit width a table shrink-wraps its content, so this sat at
   whatever the longest row needed rather than filling its container, and the
   right-aligned values floated in the middle of the panel instead of lining up
   against its edge. `fixed` keeps the two columns stable row to row. */#fonLcg .facts__t { width: 100%; table-layout: fixed; font-size: 14px; }#fonLcg .facts__t th,
#fonLcg .facts__t td { padding: 9px 14px; border-bottom: 1px solid var(--rule); text-align: left; }#fonLcg .facts__t th { font-weight: 400; color: var(--fg-mut); }#fonLcg .facts__t td { font-weight: 500; color: var(--fg); text-align: right; }#fonLcg .facts__t td span { font-weight: 400; color: var(--fg-soft); }#fonLcg .facts__t tr:last-child th,
#fonLcg .facts__t tr:last-child td { border-bottom: 0; }
/* Same rule in the supplement table: the L-Carnitine row is the one people came
   to check, and it is marked by its type rather than by a tinted band. */#fonLcg .facts__hl { background: none; }#fonLcg .facts__hl th,
#fonLcg .facts__hl td { color: var(--blue) !important; font-weight: 700; }

/* --------------------------------------------------------------------------
   6 · CLOSING BAND
   -------------------------------------------------------------------------- */#fonLcg .close { position: relative; overflow: hidden; isolation: isolate; text-align: center; }#fonLcg .close__bg { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; object-position: 50% 62%; }#fonLcg .close::after {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgba(23, 21, 15, .82) 0%, rgba(23, 21, 15, .68) 46%, rgba(23, 21, 15, .9) 100%);
}#fonLcg .close__kick { color: rgba(255, 255, 255, .66); margin-bottom: 16px; }#fonLcg .close__h { max-width: 24ch; margin-inline: auto; }#fonLcg .close__b { margin: clamp(18px, 2vw, 24px) auto 0; max-width: 48ch; }#fonLcg .close__cta { margin-top: clamp(26px, 3vw, 36px); }#fonLcg .close__cta .btn { width: 100%; max-width: 380px; }#fonLcg .close__f { margin: 14px 0 0; font-size: 12.5px; color: rgba(255, 255, 255, .62); }

/* --------------------------------------------------------------------------
   FOOTER
   -------------------------------------------------------------------------- */#fonLcg .ftr { background: var(--surface); color: var(--fg); padding-block: clamp(38px, 4vw, 60px); }#fonLcg .ftr__in { display: grid; gap: 20px; justify-items: center; text-align: center; }#fonLcg .ftr__logo { width: 108px; height: auto; }#fonLcg .ftr__nav { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 24px; font-size: 14px; font-weight: 500; }#fonLcg .ftr__nav a { color: var(--fg-mut); border-bottom: 1px solid transparent; padding-bottom: 2px; }#fonLcg .ftr__nav a:hover { color: var(--fg); border-color: var(--fg); }#fonLcg .ftr__legal { margin: 6px 0 0; max-width: 78ch; font-size: 12px; line-height: 1.6; color: var(--fg-soft); }#fonLcg .ftr__c { margin: 0; font-size: 12px; color: var(--fg-soft); }

/* --------------------------------------------------------------------------
   STICKY MOBILE BUY BAR
   Desktop keeps the header CTA, which is always visible — a second fixed bar
   there would just eat viewport.
   -------------------------------------------------------------------------- */#fonLcg .bbar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 95;
  background: rgba(255, 255, 252, .96);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-top: 1px solid rgba(32, 28, 20, .13);
  padding: 10px var(--gutter) calc(10px + env(safe-area-inset-bottom));
  transform: translateY(105%);
  transition: transform .3s var(--ease);
  box-shadow: 0 -6px 24px rgba(23, 21, 15, .09);
}#fonLcg .bbar.on { transform: none; }#fonLcg .bbar__in { display: flex; align-items: center; gap: 12px; max-width: var(--shell); margin-inline: auto; }#fonLcg .bbar__meta { display: flex; align-items: center; gap: 10px; min-width: 0; }#fonLcg .bbar__meta img { width: 38px; height: 38px; object-fit: cover; object-position: 50% 55%; border-radius: 4px; flex: none; }
/* Both lines stay on one line each. The bar is fixed furniture at the bottom
   of a phone screen — letting the sub-label wrap to three lines made it eat a
   fifth of the viewport. */#fonLcg .bbar__meta b { display: block; font-size: 14px; font-weight: 600; line-height: 1.2; white-space: nowrap; }#fonLcg .bbar__meta span { display: block; font-size: 11.5px; color: var(--grey-500); line-height: 1.3; white-space: nowrap; }#fonLcg .bbar__cta { margin-left: auto; flex: none; min-height: 44px; padding: 11px 20px; font-size: 13.5px; }@media (min-width: 900px) {#fonLcg .bbar { display: none; } }@media (max-width: 380px) {#fonLcg .bbar__meta span { display: none; } }

/* --------------------------------------------------------------------------
   RESTORED: .dosebar and .steps
   Both lived inside the old card-based listicle block and were deleted with
   it during the re-architecture. Beat 05's comparison bars and beat 07's step
   rail silently lost all styling and rendered as loose text — nothing errored,
   which is exactly why it needed a class-orphan check to catch.
   (scratchpad/orphans.mjs)
   -------------------------------------------------------------------------- */

/* Every beat is an anchor target under a sticky header. */#fonLcg .beat { scroll-margin-top: 104px; }

/* Dose comparison bars — beat 05. */#fonLcg .dosebar { margin-top: clamp(20px, 2.2vw, 28px); display: grid; gap: 14px; }#fonLcg .dosebar__row { display: grid; grid-template-columns: 1fr; gap: 7px; align-items: center; }@media (min-width: 700px) {#fonLcg .dosebar__row { grid-template-columns: 16rem 1fr auto; gap: 18px; } }#fonLcg .dosebar__l { font-size: 14px; line-height: 1.4; color: var(--fg-mut); }#fonLcg .dosebar__t {
  display: block; height: 14px;
  border-radius: var(--r-pill);
  background: var(--chip);
  border: 1px solid var(--card-edge);
  overflow: hidden;
}#fonLcg .dosebar__t i { display: block; height: 100%; width: var(--w); border-radius: var(--r-pill); background: var(--grey-300); }#fonLcg .dosebar__v {
  font-size: 16px; font-weight: 600; color: var(--fg-mut);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}#fonLcg .dosebar__row--key .dosebar__l { color: var(--fg); font-weight: 500; }#fonLcg .dosebar__row--key .dosebar__t i { background: var(--ink); }#fonLcg .dosebar__row--key .dosebar__v { color: var(--fg); }

/* Step lists — beat 07 and the offer's directions. The .steps--big modifier in
   the beats block overrides the disc treatment with oversized numerals. */#fonLcg .steps { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }#fonLcg .steps li { display: grid; grid-template-columns: auto 1fr; gap: 13px; align-items: start; }
/* line-height must be reset: the numeral inherits body's 1.6, which makes the
   grid item taller than the 29px disc and pushes the digit off its centre. */#fonLcg .steps__n {
  display: grid; place-items: center;
  width: 29px; height: 29px; flex: none; border-radius: 50%;
  background: var(--ink); color: #FFFFFC;
  font-size: 13px; font-weight: 600; line-height: 1;
}#fonLcg .steps li b { display: block; font-size: 15.5px; font-weight: 600; color: var(--fg); margin-bottom: 3px; }#fonLcg .steps li span { display: block; font-size: 14.5px; line-height: 1.55; color: var(--fg-mut); }

/* --------------------------------------------------------------------------
   WRITTEN REVIEW GRID — the reference page's testimonial cards.
   Populated from reviews.json by page.js. Horizontal snap-scroll on mobile,
   three-up on desktop, which is how this content is read everywhere.
   -------------------------------------------------------------------------- */#fonLcg .rgrid { margin-top: clamp(16px, 1.8vw, 24px); }#fonLcg .rgrid__list {
  display: grid; grid-auto-flow: column; grid-auto-columns: 84%;
  gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory;
  padding-bottom: 6px;
  /* Bleed to the viewport edges so the row reads as continuing off-screen. */
  margin-inline: calc(var(--gutter) * -1);
  padding-inline: var(--gutter);
  /* WITHOUT THIS THE SNAP IGNORES THE GUTTER. `scroll-snap-align: start` on the
     card aligns it to the snapport, and the snapport's start edge is the
     padding box unless scroll-padding moves it — so card two came to rest hard
     against the left edge of the screen while card one had sat in the gutter,
     and the row shifted sideways by 20px on every swipe. */
  scroll-padding-inline: var(--gutter);
}@media (min-width: 700px) {#fonLcg .rgrid__list { grid-auto-columns: 46%; gap: 14px; } }#fonLcg .rcard {
  scroll-snap-align: start;
  display: flex; flex-direction: column; gap: 10px;
  padding: clamp(20px, 2.2vw, 28px);
  background: var(--card);
  border: 1px solid var(--card-edge);
  border-radius: var(--r-md);
}

/* ==========================================================================
   THE REVIEW ROW, MOVING
   Below the 1040px grid the row scrolls itself. As a static swipe rail it sat
   with the second card sliced through the middle of a sentence, which reads as
   a clipped layout rather than as an invitation to swipe.

   HOW THE SEAM IS AVOIDED: page.js appends an aria-hidden duplicate of the
   whole set, so the track holds the reviews twice, and the animation travels
   exactly one copy. `translateX(-50%)` alone lands half a gap out — with N
   cards duplicated to 2N the track is 2N*w + (2N-1)*g wide, and half of that
   is one gap short of a whole copy — so half the gap is added back and the
   loop is invisible.

   The track is `width: max-content` so the cards keep their real width instead
   of resolving a percentage against a container that no longer has a fixed
   size, which is why the card width below is absolute rather than 84%.
   ONE ROW AT EVERY WIDTH. This used to stop at 1040px and hand over to a
   three-up grid, which is what put six reviews on two static rows: the row
   that was alive on a phone went dead on the machine most people read the
   page on. The marquee now runs everywhere and the cards simply grow into
   the space rather than re-flowing into a block.
   ========================================================================== */#fonLcg .rgrid__list[data-marquee="on"] {
    --rgrid-card: 278px;
    --rgrid-gap: 12px;
    grid-auto-columns: var(--rgrid-card);
    width: max-content;
    /* Manual scrolling and snapping are for the static fallback; a scroll
       container that is also being translated fights the user's finger. */
    overflow: visible;
    scroll-snap-type: none;
    margin-inline: 0;
    padding-inline: 0;
    padding-bottom: 0;
    /* PER CARD, NOT PER LOOP, so three reviews and twelve travel at the same
       speed. At 5.2s a 360px card crossed at about 70px a second, which is
       faster than the eye tracks a sentence it is trying to start reading -
       the row registered as motion rather than as testimony. 9s puts it at
       about 40px a second: a drift you can read across. */
    animation: rgrid-marquee calc(var(--rgrid-n, 6) * 9s) linear infinite;
    will-change: transform;
  }
  /* Stop it while it is being read or tabbed through. */#fonLcg .rgrid__list[data-marquee="on"]:hover,
#fonLcg .rgrid__list[data-marquee="on"]:focus-within { animation-play-state: paused; }

  /* The row runs full-bleed, and fades into the surface at both ends so cards
     arrive and leave rather than being cut off by the viewport edge. */#fonLcg .rgrid:has(> [data-marquee="on"]) {
    overflow: hidden;
    margin-inline: calc(var(--gutter) * -1);
    padding-inline: var(--gutter);
    /* THE FADE HAS TO BE WIDER THAN THE GUTTER TO DO ITS JOB. At 20px it was
       technically applied and visually useless: a card still met the edge of
       the screen at full opacity with a word chopped through the middle, which
       is the exact thing the static rail was being replaced for. Over 56px a
       card visibly dissolves as it leaves, so a partial card reads as one that
       is on its way out rather than one that is broken. */
    --rgrid-fade: 56px;
  }

  /* Wider cards and a wider dissolve once there is room for them; 278px on a
     1440px screen read as a ticker of receipts rather than as reviews. */
  @media (min-width: 700px) {#fonLcg .rgrid__list[data-marquee="on"] { --rgrid-card: 320px; --rgrid-gap: 16px; }
  }
  @media (min-width: 1040px) {#fonLcg .rgrid__list[data-marquee="on"] { --rgrid-card: 360px; --rgrid-gap: 20px; }
/* THE FADE WAS NEVER ONCE APPLIED. These two declarations sat OUTSIDE the rule
   they belong to: the `.rgrid:has(...)` block closed on its own line above, so
   the mask was orphaned inside the media query, dropped as invalid, and the
   review row was hard-cut at the container edge instead of dissolving into it
   — which is exactly the "cut" the row has always shown. Folded back in. */
#fonLcg .rgrid:has(> [data-marquee="on"]) {
    --rgrid-fade: 96px;
    -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--rgrid-fade), #000 calc(100% - var(--rgrid-fade)), transparent);
            mask-image: linear-gradient(to right, transparent, #000 var(--rgrid-fade), #000 calc(100% - var(--rgrid-fade)), transparent);
  }
  }

  /* Smaller cards. At full size two of them filled a phone screen on their own
     and the row read as a stack of documents rather than as a row of quotes. */
  @media (max-width: 1039.98px) {#fonLcg .rcard { padding: 16px 16px 15px; gap: 8px; }#fonLcg .rcard__stars i { width: 13px; height: 13px; }#fonLcg .rcard__t { font-size: 14.5px; }#fonLcg .rcard__b { font-size: 13px; line-height: 1.5; -webkit-line-clamp: 5; max-height: calc(1.5em * 5); }#fonLcg .rcard__f { padding-top: 11px; }#fonLcg .rcard__av { width: 32px; height: 32px; }#fonLcg .rcard__who b { font-size: 12.5px; }#fonLcg .rcard__who span { font-size: 11px; }
}@keyframes rgrid-marquee {from { transform: translateX(0); }to { transform: translateX(calc(-50% - (var(--rgrid-gap) / 2))); }
}

/* THE DUPLICATE SET EXISTS ONLY FOR THE MOVING ROW.
   The clones are appended unconditionally by page.js, so anywhere the marquee
   is not running they have to be taken back out — otherwise the reduced-motion
   swipe rail scrolls through the same six reviews a second time.

   The 1040px rule that used to sit here went with the grid: above that width
   the marquee is now running too, and hiding its second copy would have left
   the row travelling -50% into empty space once a loop came round. */@media (prefers-reduced-motion: reduce) {#fonLcg .rgrid__list > [aria-hidden="true"] { display: none; }
}

/* Motion this large is exactly what the reduced-motion query is for. The row
   goes back to being a swipe rail, which is fully usable and completely still. */@media (prefers-reduced-motion: reduce) {#fonLcg .rgrid__list[data-marquee="on"] {
    animation: none;
    width: auto;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    grid-auto-columns: 84%;
  }#fonLcg .rgrid:has(> [data-marquee="on"]) { -webkit-mask-image: none; mask-image: none; }
}

/* Stars drawn as CSS shapes rather than a font or an SVG sprite: no request.
   Filled in the theme's gold rather than ink: a row of black stars reads as
   five glyphs, and the same row in gold reads as a rating without anyone
   having to look twice. The empty state stays a faded version of the same
   shape, so the ratio is still legible at a glance. */#fonLcg .rcard__stars { display: inline-flex; gap: 3px; }#fonLcg .rcard__stars i {
  width: 15px; height: 15px; background: var(--star);
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2l2.9 6.3 6.9.8-5.1 4.7 1.4 6.8L12 17.3 5.9 20.6l1.4-6.8L2.2 9.1l6.9-.8z' fill='black'/></svg>") center/contain no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2l2.9 6.3 6.9.8-5.1 4.7 1.4 6.8L12 17.3 5.9 20.6l1.4-6.8L2.2 9.1l6.9-.8z' fill='black'/></svg>") center/contain no-repeat;
}#fonLcg .rcard__stars i.is-off { background: var(--ink); opacity: .16; }#fonLcg .rcard__t { margin: 0; font-size: 16px; font-weight: 600; letter-spacing: -.012em; line-height: 1.3; color: var(--fg); }

/* Clamped so a long review can't stretch one card past its neighbours and
   break the row's rhythm. The full text stays in the DOM for screen readers. */#fonLcg .rcard__b {
  margin: 0; flex: 1;
  font-size: 14.5px; line-height: 1.58; color: var(--fg-mut);
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 6;
  overflow: hidden;
  /* THE CLAMP NEEDED A CEILING TO CLAMP AGAINST.
     `flex: 1` stretches this box to fill the card, so the box grew taller than
     the six lines the clamp was drawing. The ellipsis was still placed at the
     end of line six while line seven carried on painting underneath it, which
     read as a truncation bug in the middle of a sentence. Capping the height at
     exactly six lines makes the clamp and the box agree. */
  max-height: calc(1.58em * 6);
}#fonLcg .rcard__f { display: flex; align-items: center; gap: 10px; margin-top: 4px; padding-top: 13px; border-top: 1px solid var(--rule); }#fonLcg .rcard__av {
  display: grid; place-items: center; flex: none;
  width: 40px; height: 40px; border-radius: 50%;
  background: var(--chip); border: 1px solid var(--card-edge);
  font-size: 15px; font-weight: 600; line-height: 1; color: var(--fg-mut);
}
/* The photo variant. `object-fit: cover` matters here: a portrait dropped into a
   round 40px window without it distorts the face, which is the single fastest
   way to make a review card look fake. */#fonLcg .rcard__av--img {
  object-fit: cover; object-position: 50% 30%;
  background: var(--chip); padding: 0;
}#fonLcg .rcard__who { display: block; min-width: 0; }#fonLcg .rcard__who b { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.25; color: var(--fg); }#fonLcg .rcard__who span { display: block; font-size: 12px; line-height: 1.3; color: var(--fg-soft); }

/* The placeholder notice. Deliberately conspicuous — it exists to stop sample
   copy reaching production unnoticed. */#fonLcg .rgrid__note {
  margin: 14px 0 0;
  padding: 11px 14px;
  border: 1px dashed var(--rule-str);
  border-radius: var(--r);
  background: var(--chip);
  font-size: 12.5px; line-height: 1.5; color: var(--fg-mut);
}

/* ==========================================================================
   THE SEVEN — one block, repeated
   Copy left, infographic panel right, same every time, one cream ground.
   The structure is deliberately monotonous; the PANELS carry the interest.
   ========================================================================== */#fonLcg .seven { background: transparent; padding-block: clamp(16px, 3.4vw, 52px); }
/* 18px top and bottom put 36px between one beat and the next on a phone — less
   than the gap inside a single beat, so seven separate arguments read as one
   long column. 28px doubles the separation without giving back the height the
   earlier pass took out. */
#fonLcg .blk { padding-block: clamp(28px, 3vw, 44px); }#fonLcg .blk__in { display: grid; gap: clamp(24px, 3vw, 56px); align-items: center; }@media (min-width: 900px) {#fonLcg .blk__in { grid-template-columns: 1fr 1.12fr; gap: clamp(40px, 5vw, 88px); } }#fonLcg .blk__copy { max-width: 46ch; }
/* The seven beats carry the argument, so their copy sits a step above the
   page’s other body text: Medium rather than Regular, and the warmer of the
   two greys. The headings were already at 700, the heaviest cut loaded, so
   the contrast had to come from underneath them rather than above. */
#fonLcg .blk__copy .body { font-weight: 500; color: var(--fg-mut); }
/* THE NUMERAL IS THE ONLY THING ON THIS PAGE THAT COUNTS TO SEVEN, SO IT ACTS
   LIKE IT. It was 13px of letterspaced grey — the size of a footnote — which
   made a listicle of seven read as seven unrelated sections. It is now a filled
   chip: bold, in the ink, on the lime.

   This is the fifth and last use of the accent, and it belongs to the same idea
   as the other four ("this is the number that matters"). It is also the only
   one that repeats, which is what turns seven separate beats into a visible
   count — you can see how far through you are without reading anything.

   A DISC, NOT A PILL. As a rounded rectangle it read as a tag — the same
   shape as the eyebrow labels and the trust badges, so the one element whose
   job is to say "you are at 6 of 7" looked like another category chip. A
   circle is not used anywhere else on the page, which is exactly why it works
   here: nothing else can be mistaken for it. Fixed width and height with the
   figure centred, so 01 and 12 are the same object rather than two widths. */#fonLcg .blk__n {
  display: inline-grid; place-items: center;
  width: 34px; height: 34px; padding: 0;
  margin-bottom: 12px;
  border-radius: 50%;
  background: var(--lime); color: var(--lime-ink);
  font-size: 13px; font-weight: 700; letter-spacing: .02em; line-height: 1;
  font-variant-numeric: tabular-nums;
}#fonLcg .blk__copy .h2 { max-width: 18ch; margin-bottom: 14px; }#fonLcg .blk__copy .body { max-width: 44ch; }

/* THE PANEL GOES BETWEEN THE HEADLINE AND THE PARAGRAPH ON MOBILE.
   Stacking the two-column desktop layout gave number, headline, paragraph, then
   panel, so every one of the seven beats spent its whole first screen on type
   and the picture only arrived once the argument was already over. The
   reference lander orders it number, headline, graphic, paragraph, and that is
   the right order: the graphic is the evidence for the headline, so putting it
   directly underneath gives the reader something to look at before being asked
   to read.

   `display: contents` dissolves .blk__copy so its three children become grid
   items of .blk__in alongside .blk__panel, which is what makes them
   interleavable with `order`. That box exists only to carry a measure on
   desktop, and a measure is meaningless in a single 350px column, so nothing is
   lost by dropping it here. The 18ch cap on the heading goes with it: at this
   width it was breaking "Dose is the whole argument" into two lines for no
   reason.

   THIS BLOCK SITS BELOW THE FOUR RULES ABOVE, NOT BESIDE THEM. Every selector
   in it is a plain class of the same specificity as its base, so placed earlier
   in the file it loses on source order and does nothing at all — which is how
   the numeral spent a round still rendering at 13px while the CSS said 21. */@media (max-width: 899.98px) {#fonLcg .blk__in { gap: 0; align-items: stretch; }#fonLcg .blk__copy { display: contents; }#fonLcg .blk__panel { order: 3; }

  /* THREE STEPS, NOT TWO AND A HALF.
     The numeral was 13px letterspaced grey and the heading 27px, so a beat
     opened with two pieces of small-to-medium type and the reader had nothing
     to anchor on. On a phone the eye lands somewhere in the middle of a screen
     and needs an unambiguous "you are at the start of item four" to grab, and
     the reference sets its numeral large enough to be seen before it is read.

     The numeral goes to 21px in the ink, the heading to 30px, and the paragraph
     drops half a step and loses some leading: a 2.6x span across three levels
     where there used to be barely 2x across two.

     AND THE DISC MOVES BESIDE THE HEADING RATHER THAN ABOVE IT. Stacked, it
     spent a whole line of a 390px screen saying one number, and the heading
     started a third of the way down the block. Set to the left of it, the
     count and the claim read as one unit and the block starts at its
     headline. .blk__copy is display:contents here, so the numeral and the
     heading are siblings in .blk__in and can simply be placed. Everything
     THE TWO-COLUMN TEMPLATE THAT USED TO BE HERE IS GONE WITH IT. It was left
     behind when the numeral moved back above the heading, and a grid that still
     had two columns but no longer told anything which one to sit in auto-placed
     the paragraph into column one, stretched it to full width, and left the
     heading rendering one letter per line. Single column, as it was. */
  /* Back above the heading, and smaller. Beside it the disc had to be big
     enough not to look lost next to 30px type, which made it the loudest
     thing in the block; above, it can be small and still be found, because
     nothing else is up there competing for the line. */#fonLcg .blk__n {
    order: 1; justify-self: start;
    margin-bottom: 12px;
    width: 28px; height: 28px;
    font-size: 12px; letter-spacing: .02em;
  }#fonLcg .blk__copy .h2 {
    order: 2; margin-bottom: 16px; max-width: none;
    font-size: 30px; line-height: 1.06; letter-spacing: -.03em;
  }#fonLcg .blk__copy .body {
    order: 4; margin-top: 16px;
    font-size: 15.5px; line-height: 1.55;
  }
}

/* --- The panel: a self-contained card. Three fills, no more. -------------- */#fonLcg .panel {
  border-radius: 20px;
  padding: clamp(22px, 2.6vw, 34px);
  border: 1px solid var(--card-edge);
}#fonLcg .panel--ink {
  background: var(--ink); border-color: rgba(255, 255, 255, .14);
  --fg: #FFFFFC; --fg-mut: rgba(255, 255, 252, .8); --fg-soft: rgba(255, 255, 252, .56);
  --rule: rgba(255, 255, 255, .16); --card-edge: rgba(255, 255, 255, .16);
  --tile: rgba(255, 255, 255, .07);
  color: var(--fg);
}
/* THE LIGHT PANEL IS WHITE NOW, NOT SAND.
   It was #E8E5DE sitting on the #F9F8F7 band, so three of the seven beats
   opened onto a beige slab holding near-white tiles — two warm greys a step
   apart, which is a lot of surface spent on very little contrast and reads
   flat and heavy at phone size. White against the band is a clean lift, its
   hairline does the containing, and the tiles inside step down to the band's
   own tone so the nesting still reads. Brighter page, same structure. */#fonLcg .panel--sand {
  background: var(--card); border-color: rgba(38, 32, 20, .12);
  box-shadow: 0 1px 2px rgba(38, 32, 20, .04);
  --tile: #F7F5F2;
}#fonLcg .panel--photo { padding: 0; overflow: hidden; background: var(--stone); }#fonLcg .panel--photo img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; }

/* The panel's own label, one step up in weight and colour. At 600 in the soft
   grey it was fading into the fill it sits on, so every panel opened with a
   line nobody read. */#fonLcg .panel__t {
  margin: 0 0 clamp(16px, 1.8vw, 22px);
  font-size: 12px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--fg-mut);
}#fonLcg .panel__f { margin: clamp(16px, 1.8vw, 20px) 0 0; font-size: 12px; line-height: 1.5; color: var(--fg-soft); }

/* --- 01 · the versus panel ------------------------------------------------ */
/* TWO COLUMNS ON THE PHONE TOO, NOT ONE.
   Stacked, the panel was 501px tall and the two halves of a COMPARISON were
   never on screen together, which loses the only thing the panel is for. It
   also read as misaligned, because the GLP-1 card carries three bullets and the
   OneFit card four, so one box was visibly shorter than the other with a lime
   outline drawing the eye straight to the mismatch. Side by side under
   `align-items: stretch` they are the same height by construction, the
   comparison is legible in one look, and the panel comes down to ~300px.

   The "and" divider is dropped at this width: it was the join between two
   stacked boxes, and there is nothing left to join. */#fonLcg .vs { display: grid; gap: 12px; align-items: stretch; }@media (min-width: 560px) {#fonLcg .vs { grid-template-columns: 1fr auto 1fr; gap: 14px; } }#fonLcg .vs__col { padding: 16px 17px; border-radius: 13px; background: var(--tile); }#fonLcg .vs__col--key { outline: 1px solid var(--lime); position: relative; }

/* The product, in the column that is about the product. This panel was two
   lists of words arguing about a physical thing that neither of them showed.
   The sachet sits at the column's top-right corner at a size that reads as a
   marker rather than as a photograph competing with the list. */
/* THE SQUARE PACKSHOT, NOT THE SINGLE SACHET.
   The first attempt used CHOC-MILKSHAKE-SACHET-ONE.webp, which is 280x865 — at
   34px wide that is 105px tall, so a corner "marker" hung down across the
   heading and the first two bullets. This file is 1500x1500, so it stays as
   wide as it is tall and sits in the corner it was asked to sit in.

   It is inside the card rather than overhanging it, and the heading is given
   the room back so the two can never collide however the text wraps. */
/* IN THE PANEL'S CORNER, NOT THE COLUMN'S.
   Two earlier positions failed on the same thing: a column is 155px wide at
   390px, so anything parked in its corner is paid for out of the heading's
   measure. In the key column the single-sachet file (280x865) hung 105px down
   across the bullets, and once squared and moved inside it pushed "What OneFit®
   does" onto three lines while its neighbour stayed on one, so the two headings
   no longer aligned.

   The panel's own top-right corner is empty, sits level with the label, and is
   the full width of the panel away from anything that wraps. */#fonLcg .panel { position: relative; }#fonLcg .vs__pack {
  position: absolute; top: clamp(14px, 2vw, 22px); right: clamp(14px, 2vw, 22px); z-index: 2;
  width: 56px; height: auto;
  filter: drop-shadow(0 6px 14px rgba(0, 0, 0, .5));
  pointer-events: none;
}#fonLcg .panel__t { padding-right: 70px; }@media (min-width: 560px) {#fonLcg .vs__pack { width: 68px; }#fonLcg .panel__t { padding-right: 86px; } }#fonLcg .vs__h { margin: 0 0 11px; font-size: 14px; font-weight: 600; line-height: 1.25; color: var(--fg); }#fonLcg .vs__col--key .vs__h { color: var(--lime); }#fonLcg .vs__l { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }#fonLcg .vs__l li { position: relative; padding-left: 15px; font-size: 13.5px; line-height: 1.42; color: var(--fg-mut); }#fonLcg .vs__l li::before { content: ""; position: absolute; left: 0; top: 8px; width: 5px; height: 5px; border-radius: 50%; background: currentColor; opacity: .45; }#fonLcg .vs__x {
  display: grid; place-items: center; align-self: center;
  font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--fg-soft);
}

/* Phone override, and it has to sit BELOW the rules above rather than beside
   the .vs base: `.vs__x { display: grid }` and `.vs__col { padding }` are plain
   class selectors, so an earlier media block of equal specificity loses to them
   on source order and the panel silently stays stacked. */@media (max-width: 559.98px) {#fonLcg .vs { grid-template-columns: 1fr 1fr; gap: 8px; }#fonLcg .vs__x { display: none; }#fonLcg .vs__col { padding: 13px 12px; border-radius: 12px; }#fonLcg .vs__h { margin-bottom: 9px; font-size: 13px; line-height: 1.2; }#fonLcg .vs__l { gap: 7px; }#fonLcg .vs__l li { padding-left: 12px; font-size: 12.5px; line-height: 1.36; }#fonLcg .vs__l li::before { top: 7px; width: 4px; height: 4px; }
}

/* --- 02 · the flow panel -------------------------------------------------- */
/* THE THREE STEPS RUN AS ROWS ON THE PHONE, ART BESIDE THE LABEL.
   Each step was a centred tile with a 74px drawing stacked over its caption, so
   three of them made a 591px panel, the tallest on the page, for what is a
   three-line explanation. Three columns is not the answer either: at 390px each
   would be about 83px of usable width and "L-Carnitine carries it in" would
   break every two words.

   A row per step is both shorter (~300px) and a better read: the diagram sits
   in the left margin at 46px where it still works as a glyph, the label and its
   line of explanation keep a full measure beside it, and three rows read as a
   sequence, which is exactly what a shuttle mechanism is. */#fonLcg .flow { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; counter-reset: f; }@media (min-width: 620px) {#fonLcg .flow { grid-template-columns: repeat(3, 1fr); gap: 12px; } }#fonLcg .flow__i {
  padding: 14px 15px 16px; border-radius: 13px; background: var(--tile);
  text-align: center; color: var(--fg);
}#fonLcg .flow__i--key { outline: 1px solid rgba(38, 32, 20, .34); }#fonLcg .flow__art { display: block; margin-bottom: 8px; color: var(--ink); }#fonLcg .flow__art svg { width: 100%; height: auto; max-height: 74px; }#fonLcg .flow__i b { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.3; margin-bottom: 4px; }#fonLcg .flow__i span { display: block; font-size: 12.5px; line-height: 1.42; color: var(--fg-mut); }

/* Phone override, placed below the base rules for the same reason as .vs: the
   centred text alignment and the 74px art cap are plain class selectors, and an
   earlier media block loses to them on source order. */@media (max-width: 619.98px) {#fonLcg .flow { gap: 8px; }#fonLcg .flow__i {
    display: grid;
    grid-template-columns: 44px minmax(0, 1fr);
    grid-template-rows: auto auto;
    column-gap: 13px;
    align-content: center;
    padding: 11px 14px;
    text-align: left;
  }#fonLcg .flow__art { grid-column: 1; grid-row: 1 / span 2; align-self: center; margin-bottom: 0; }#fonLcg .flow__art svg { max-height: 42px; }#fonLcg .flow__i b { grid-column: 2; grid-row: 1; align-self: end; margin-bottom: 2px; font-size: 13px; }#fonLcg .flow__i > span:last-child { grid-column: 2; grid-row: 2; align-self: start; font-size: 12px; line-height: 1.38; }
}

/* --- 04 · the bar chart panel. The reference uses exactly this device. ----- */#fonLcg .chart {
  display: grid; grid-template-columns: 1fr 1fr; gap: clamp(16px, 2.4vw, 34px);
  align-items: end;
  min-height: 210px;
  border-radius: 9px 9px 4px 4px;
  background: rgba(255, 255, 255, .16);
}#fonLcg .chart__col--key .chart__bar { background: var(--lime); }#fonLcg .chart__v { font-size: clamp(19px, 2.2vw, 26px); font-weight: 600; letter-spacing: -.03em; color: var(--fg); font-variant-numeric: tabular-nums; }#fonLcg .chart__col--key .chart__v { color: var(--lime); }#fonLcg .chart__l { font-size: 12.5px; line-height: 1.4; color: var(--fg-soft); }
/* The bars are sized against the tallest, so the chart grows with the panel. */#fonLcg .chart { align-content: end; }#fonLcg .chart__col { justify-content: flex-end; height: 100%; }#fonLcg .chart__bar { flex: none; }

/* --- 06 · the callout packshot. Doses either side of the pack. -------------

   THE SACHET SITS BESIDE THE DOSES ON MOBILE, NOT STACKED ON TOP OF THEM.
   Stacked, the pack stood 297px tall in a 591px panel: half the card spent on
   the photograph, with six tiles crushed underneath. The pack is tall and
   narrow and the doses are a short list, so side by side is simply the shape
   that fits, and the panel comes down to ~515px.

   Two-up is not enough on its own: the doses are two separate <ul>s of three,
   so making each list two columns left an orphan on a third row in each and the
   block came out ragged. `display: contents` drops both list boxes so all six
   <li> become items of the callout grid itself, giving one clean 2 x 3 beside
   the pack. The lists carry role="list" in the markup, because removing the box
   also removes list semantics in some browsers and this is a list of doses.

   From 620px the arrangement the panel was designed for returns: doses either
   side of a centred pack, each list back to a single column. */
/* The pack column is an explicit width, not `auto`. `width: 100%` on the image
   inside an `auto` track is circular — the track sizes to the content and the
   content sizes to the track — and the pack resolved to 0x0. */#fonLcg .callout { display: grid; grid-template-columns: 84px minmax(0, 1fr) minmax(0, 1fr); gap: 10px; align-items: start; }#fonLcg .callout__l { list-style: none; margin: 0; padding: 0; display: contents; }#fonLcg .callout__pack {
  grid-row: 1 / span 3; align-self: center;
  width: 100%; height: auto; margin-inline: auto;
  filter: drop-shadow(0 18px 30px rgba(38, 32, 20, .22));
}@media (min-width: 620px) {#fonLcg .callout { grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: clamp(12px, 1.8vw, 24px); align-items: center; }#fonLcg .callout__l { display: grid; grid-template-columns: 1fr; gap: 8px; }
  /* BIGGER ON DESKTOP. At 86px the pack was a thumbnail floating between two
     lists that were doing all the work. It is the product, and the whole layout
     is built around it, so it is sized to hold the middle. */
  /* ORDER MATTERS HERE: the pack is markup-first, so left to itself it took
     column one and the two dose lists sat together to its right, which is not
     "doses either side of the pack" and is why one column came out 94px wide
     against the other at 290px. The first list is pulled ahead of it. */#fonLcg .callout__pack { grid-row: auto; order: 0; width: auto; max-width: 120px; }#fonLcg .callout__l--a { order: -1; text-align: right; }#fonLcg .callout__l--b { order: 1; }
}@media (min-width: 1100px) {#fonLcg .callout__pack { max-width: 132px; } }#fonLcg .callout__l li {
  padding: 10px 13px; border-radius: 11px; background: var(--tile);
  border: 1px solid rgba(38, 32, 20, .08);
}#fonLcg .callout__l b { display: block; font-size: 16px; font-weight: 600; letter-spacing: -.02em; line-height: 1.1; color: var(--fg); }#fonLcg .callout__l span { display: block; margin-top: 2px; font-size: 12px; line-height: 1.3; color: var(--fg-soft); }#fonLcg .callout__l--a li:first-child b { color: var(--blue); }

/* --- 06 · the callout, now sitting under a photograph -------------------
   The photo carries the product, so the callout drops its pack column and
   becomes a plain grid of the six label amounts. Six lays out 2x3 on a phone
   and 3x2 from 620px, which keeps every figure and its unit on one line. The
   numbers stay as text here on purpose: they are label doses, and a generated
   image cannot be trusted to print them. */
#fonLcg .panel--under { margin-top: 10px; }
#fonLcg .callout--nopack { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 10px; align-items: start; }
#fonLcg .callout--nopack .callout__l { display: contents; }
@media (min-width: 620px) {
  #fonLcg .callout--nopack { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(12px, 1.6vw, 20px); align-items: start; }
  #fonLcg .callout--nopack .callout__l--a { text-align: left; }
}

/* --- 06 · the step tiles -------------------------------------------------- */#fonLcg .tiles { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }#fonLcg .tile { display: grid; grid-template-columns: auto 1fr; gap: 13px; align-items: start; padding: 14px 16px; border-radius: 13px; background: var(--tile); }#fonLcg .tile > b {
  display: grid; place-items: center; flex: none;
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--ink); color: #FFFFFC;
  font-size: 12.5px; font-weight: 600; line-height: 1;
}#fonLcg .panel--ink .tile > b { background: var(--lime); color: var(--lime-ink); }#fonLcg .tile > span { display: block; font-size: 13px; line-height: 1.45; color: var(--fg-mut); }#fonLcg .tile em { display: block; font-style: normal; font-size: 14px; font-weight: 600; color: var(--fg); margin-bottom: 2px; }

/* --- 07 · the week timeline ----------------------------------------------- */
/* ---- FON'S OUTCOME ICONS, DRAWN AS MASKS -----------------------------------
   usefon.com's PDP ships one mark per reported outcome, and the four labels in
   the study block below are word-for-word the four those marks belong to. They
   are used here and in the week timeline so the evidence and the timeline share
   one vocabulary.

   THEY ARE MASKS, NOT <img>. The source files are solid #3E3E3E on transparent,
   and both places they appear are near-black panels, where a dark glyph is
   invisible. A mask throws away the file's own colour and paints whatever the
   surface wants — lime here, and it would be ink on a light panel — from one
   copy of each file. */#fonLcg .i-mark::before {
  content: ""; display: block; flex: none;
  width: 20px; height: 20px;
  background: currentColor;
  -webkit-mask: var(--mark) center / contain no-repeat;
          mask: var(--mark) center / contain no-repeat;
}#fonLcg [data-i="muscle"] { --mark: url("More_visible_muscle_definition.svg"); }#fonLcg [data-i="lean"] { --mark: url("Felt_leaner_waist_face_overall.svg"); }#fonLcg [data-i="gut"] { --mark: url("Less_Bloat_Calmer_Gut.svg"); }#fonLcg [data-i="head"] { --mark: url("Clearer_Head_Cleaner_Energy.svg"); }#fonLcg .weeks { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }

/* Each stage gets its mark in the left margin, on the same baseline as the
   week label, so the row reads "week 4 — strength" at a glance. */#fonLcg .weeks--icon li {
  display: grid; grid-template-columns: 26px minmax(0, 1fr); column-gap: 11px;
}#fonLcg .weeks--icon li::before {
  content: ""; grid-row: 1 / span 2; align-self: start; margin-top: 2px;
  width: 22px; height: 22px;
  background: var(--lime);
  -webkit-mask: var(--mark) center / contain no-repeat;
          mask: var(--mark) center / contain no-repeat;
}#fonLcg .weeks--icon b,
#fonLcg .weeks--icon span { grid-column: 2; }#fonLcg .weeks li { padding: 14px 16px; border-radius: 13px; background: var(--tile); }@media (max-width: 559.98px) {#fonLcg .weeks li { padding: 12px 14px; } }#fonLcg .weeks b {
  display: block; margin-bottom: 5px;
  font-size: 12px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--lime);
}#fonLcg .weeks span { display: block; font-size: 13px; line-height: 1.5; color: var(--fg-mut); }

/* --- CTA between beats ---------------------------------------------------- */#fonLcg .midcta {
  display: flex; flex-direction: column; align-items: center; gap: 14px; text-align: center;
  padding: clamp(20px, 2.4vw, 28px);
  margin-block: clamp(18px, 2.2vw, 30px);
  border-radius: 18px;
  background: var(--card);
  border: 1px solid var(--card-edge);
}#fonLcg .midcta .body b { color: var(--fg); font-weight: 600; }@media (min-width: 620px) {#fonLcg .midcta { flex-direction: row; justify-content: center; gap: 26px; text-align: left; } }

/* --- 02 · the nutrient-gap list ------------------------------------------ */
/* TWO UP AT EVERY WIDTH. Four stacked cards ran to 493px on a phone to carry
   four short labels. The reference lander puts its equivalent, "6 Common Gaps",
   in a 2 x 3 grid at this width and it is completely readable, because these
   are labels with a line of gloss under them, not paragraphs. */#fonLcg .gaps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }#fonLcg .gaps li { padding: 13px 15px; border-radius: 12px; background: var(--tile); }

/* ---- INGREDIENT ART IN THE NUTRIENT TILES ----------------------------------
   FON photographs every raw ingredient in the formula on white, and those files
   were sitting in images/ unused while this panel argued about nutrients in
   pure text. Each tile now leads with the actual powder it names.

   The photograph is a disc in the label's own line rather than a band above it,
   so four pictures cost the panel nothing in height — the tile is exactly as
   tall as it was. The shots are already cut out on white, so a disc crop lands
   on the powder itself with no halo. */
/* THE PICTURE SITS ABOVE THE LABEL, NOT BESIDE IT.
   Beside it, in a 2 x 2 grid at 390px, each tile is ~150px wide and the disc
   took 44 of them — so "The first thing to drop, and the one lean mass depends
   on" was wrapping into six short ragged lines and the panel grew by 50px to
   hold them. Above, the text keeps the tile's full width, the wrapping goes
   back to normal, and the four discs line up across the grid as a set.

   The plate behind each is warm rather than white: three of these four powders
   are near-white, shot on white, and on a white tile they were disappearing. */#fonLcg .gaps--art li { display: block; }#fonLcg .gaps--art img {
  display: block; margin-bottom: 9px;
  width: 40px; height: 40px; border-radius: 50%; object-fit: cover;
  background: #F2F0EC; box-shadow: 0 0 0 1px rgba(38, 32, 20, .1);
}@media (max-width: 559.98px) {#fonLcg .gaps--art img { width: 34px; height: 34px; margin-bottom: 7px; }
}#fonLcg .gaps b { display: block; font-size: 14.5px; font-weight: 600; color: var(--fg); margin-bottom: 3px; }#fonLcg .gaps span { display: block; font-size: 12.5px; line-height: 1.42; color: var(--fg-mut); }@media (max-width: 559.98px) {#fonLcg .gaps { gap: 8px; }#fonLcg .gaps li { padding: 11px 12px; }#fonLcg .gaps b { font-size: 13.5px; }#fonLcg .gaps span { font-size: 12px; line-height: 1.38; }
}

/* ==========================================================================
   HERO — rebuilt to the reference page's conversion cluster
   proof pill above the headline → headline → sub → CTA carrying a badge →
   risk-free reassurance, with the photograph on the right holding floating
   audience and proof cards.
   ========================================================================== */

/* --- Social proof pill, above the headline -------------------------------- */#fonLcg .proofpill {
  display: inline-flex; align-items: center; flex-wrap: wrap; gap: 8px 10px;
  margin: 0 0 clamp(18px, 2vw, 26px);
  padding: 7px 16px 7px 8px;
  border-radius: var(--r-pill);
  background: rgba(255, 255, 252, .84);
  border: 1px solid var(--card-edge);
  box-shadow: 0 2px 10px -4px rgba(38, 32, 20, .18);
  font-size: 13px; line-height: 1; color: var(--fg-mut);
}#fonLcg .proofpill b { font-weight: 600; color: var(--fg); }#fonLcg .proofpill i { font-style: normal; color: var(--rule-str); margin-inline: 3px; }#fonLcg .proofpill__av { display: inline-flex; flex: none; }#fonLcg .proofpill__av img {
  width: 26px; height: 26px; border-radius: 50%;
  object-fit: cover; border: 2px solid #FFFFFC;
}#fonLcg .proofpill__av img + img { margin-left: -9px; }#fonLcg .proofpill__stars { color: var(--star-dk); letter-spacing: .06em; font-size: 12px; }

/* --- CTA cluster ---------------------------------------------------------- */#fonLcg .hero__ctawrap { position: relative; display: block; }#fonLcg .hero__ctawrap .btn { width: 100%; }
/* The badge that sat on the button's top edge is gone with its markup; see
   the note in index.html. */@media (min-width: 560px) {#fonLcg .hero__ctawrap { flex: 0 1 auto; } }#fonLcg .hero__risk {
  display: flex; align-items: flex-start; gap: 9px;
  margin: clamp(16px, 1.8vw, 20px) 0 0;
  font-size: 13.5px; color: var(--fg-mut);
}/* NO WRAP. This is one statement, and split over two lines the second half
   ("USA, NZ & UK") sat under the tick reading as a second, tickless promise.
   62 characters against ~324px of usable width puts it at roughly 10px on a
   390px phone — small, but it is a reassurance caption under a button, not
   body copy, and one quiet line beats two ragged ones. */
#fonLcg .hero__risk > span { display: block; line-height: 1.45; white-space: nowrap; }#fonLcg .hero__risk a { color: var(--fg); font-weight: 600; border-bottom: 1px solid currentColor; padding-bottom: 1px; }
/* Blue check, and the same file every other check on the page uses. The ink
   disc with a drawn chevron was the last hand-made tick left. */#fonLcg .hero__tick {
  flex: none; margin-top: 1px;
  width: 18px; height: 18px;
  background: url("Blue_Check.svg") center / contain no-repeat;
}
/* "risk-free for 90 days" is the offer in this line; the rest is detail.
   It carries the weight and the size, the line around it steps down. */#fonLcg .hero__risk a {
  color: var(--fg); font-weight: 700; font-size: 1.08em;
  border-bottom: 1.5px solid currentColor; padding-bottom: 1px;
}

/* --- Floating cards over the photograph ----------------------------------- */#fonLcg .hero__float { display: contents; }#fonLcg .hero__aud {
  position: absolute; z-index: 2; top: 14px; left: 14px;
  padding: 8px 15px; border-radius: var(--r-pill);
  background: var(--lime); color: var(--lime-ink);
  border: 1px solid rgba(38, 32, 20, .14);
  box-shadow: 0 6px 16px -8px rgba(38, 32, 20, .4);
  font-size: 11.5px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; line-height: 1;
}#fonLcg .hero__proofcard {
  position: absolute; z-index: 2; top: 14px; right: 14px;
  display: none;                       /* mobile: the photo is too small for it */
  width: min(200px, 46%);
  padding: 13px 15px; border-radius: 14px;
  background: rgba(255, 255, 252, .95);
  border: 1px solid rgba(38, 32, 20, .1);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  box-shadow: 0 10px 26px -12px rgba(38, 32, 20, .45);
  text-align: left;
}#fonLcg .hero__proofcard b { display: block; font-size: 30px; font-weight: 600; letter-spacing: -.035em; line-height: 1; color: var(--ink); }#fonLcg .hero__proofcard > span { display: block; margin-top: 5px; font-size: 12.5px; line-height: 1.35; color: var(--grey-700); }#fonLcg .hero__proofcard em { display: block; margin-top: 7px; font-style: normal; font-size: 10.5px; line-height: 1.35; color: var(--grey-500); }@media (min-width: 620px) {#fonLcg .hero__proofcard { display: block; } }

  position: absolute; z-index: 2; left: 14px; right: 14px; bottom: 14px;
  display: flex; align-items: center; gap: 12px;
  padding: 10px 14px; border-radius: 14px;
  background: rgba(255, 255, 252, .95);
  border: 1px solid rgba(38, 32, 20, .1);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  box-shadow: 0 10px 26px -12px rgba(38, 32, 20, .45);
}@media (min-width: 900px) {#fonLcg .hero__aud { top: 18px; left: 18px; }#fonLcg .hero__proofcard { top: 18px; right: 18px; }
}

/* THE PHONE HERO'S REMAINING OVERRIDES.
   These belong with the mobile block up in section 1 and are only down here
   section, below that block. A plain-class override placed earlier loses to
   them on source order — which is exactly what happened first time round: the
   packshot card stayed on screen and the proof pill stayed on two lines while
   the CSS above said otherwise. */@media (max-width: 899.98px) {
  /* Removed, not shrunk. The card said "OneFit® / 1,000mg L-Carnitine per
     serve" — the same sentence as the CTA button below it and the sticky bar
     that follows the whole scroll — while covering the part of the frame the
     product is in. */

  /* The pill wrapped, so the row of faces and the row of numbers read as two
     separate objects inside one container. Each part steps down just far enough
     to hold one line, which is the only way it reads as a single claim.

     IT ALSO HAS TO STOP SHORT OF BOTH GUTTERS. On the first pass it fitted on
     one line and then filled the column exactly, so a pill — a shape whose
     whole job is to look like a self-contained object sitting on the surface —
     ran from edge to edge and read as a bar. The sizes below leave roughly 40px
     of the band showing past its right end, which is what makes it read as a
     badge again. */#fonLcg .proofpill {
    margin-bottom: 16px; gap: 7px; padding: 5px 12px 5px 6px;
    font-size: 11px; flex-wrap: nowrap; white-space: nowrap;
  }#fonLcg .proofpill__av img { width: 20px; height: 20px; border-width: 1.5px; }#fonLcg .proofpill__av img + img { margin-left: -7px; }#fonLcg .proofpill__stars { font-size: 9.5px; letter-spacing: .03em; }#fonLcg .proofpill i { margin-inline: 1px; }

  /* The reassurance line ran 13px against a 19px tick and wrapped to two ragged
     rows under the buttons. Smaller disc, smaller type, tighter leading: it is
     fine print doing fine print's job, not a third call to action. */#fonLcg .hero__risk { margin-top: 13px; gap: 6px; font-size: clamp(9.5px, 2.6vw, 12.5px); }#fonLcg .hero__risk > span { line-height: 1.38; }#fonLcg .hero__tick { width: 16px; height: 16px; margin-top: 1px; }#fonLcg .hero__tick::after { left: 4px; top: 5px; width: 7px; height: 3.5px; border-width: 1.6px; }
}


/* ==========================================================================
   MOBILE LIST DENSITY, AND SMALLER BUTTONS

   TWO THINGS THAT WERE NEVER SIZED FOR A PHONE.

   1. THE LISTS. Every list on this page was set at desktop sizes and then
      inherited straight down: 14.5px items with 9px gaps in the guarantee,
      13.5px in the PDP checklist, 14.5px in the value stack, 16px summaries in
      the FAQ. Individually each is defensible; stacked down a 350px column they
      are the reason the page still reads long after the layout work. A list is
      scanned, not read — it can sit a step below body copy without costing
      anything, and at this width that step is the difference between four items
      fitting on a screen and three.

   2. THE BUTTONS. .btn is 52px tall and .btn--lg 58px with a 15px label, which
      is sized for a mouse pointer on a wide screen. On a phone the tap target
      only needs ~44px to be comfortable, and the extra 14px was making the hero
      pair look like two slabs rather than a primary and a secondary.

   Everything here is a max-width override, so desktop is untouched.
   ========================================================================== */@media (max-width: 899.98px) {
  /* --- buttons --- */#fonLcg .btn { min-height: 46px; padding: 12px 24px; font-size: 13.5px; }#fonLcg .btn--lg { min-height: 50px; padding-inline: 26px; font-size: 14px; }#fonLcg .hero__cta { gap: 9px; }

  /* --- the PDP checklist --- */#fonLcg .ticks--check { gap: 10px; }#fonLcg .ticks--check li { padding-left: 25px; font-size: 13px; background-size: 17px 17px; }#fonLcg .ticks--check i { font-size: 12px; }

  /* The guarantee list that used to be tuned here has gone with the copy. */

  /* --- the plan card's benefit rows --- */#fonLcg .opt__ups { gap: 6px; }#fonLcg .opt__ups > span { gap: 8px; font-size: 12.5px; }#fonLcg .opt__ups img { width: 16px; height: 16px; }

  /* --- the value stack basket --- */#fonLcg .stack__l li { padding-block: 8px; font-size: 13.5px; }#fonLcg .stack__row { padding: 11px 14px; font-size: 13px; }

  /* --- the rating facts --- */#fonLcg .rating__facts { gap: 11px 14px; }

  /* --- the FAQ --- */#fonLcg .faq__i summary { padding-block: 14px; font-size: 15px; gap: 14px; }#fonLcg .faq__a { padding-bottom: 14px; }#fonLcg .faq__a > .body,
#fonLcg .faq__a > p { font-size: 14.5px; line-height: 1.55; }#fonLcg .deflist > div { padding-block: 11px; }#fonLcg .deflist dt { font-size: 14.5px; }#fonLcg .deflist dd { font-size: 13.5px; line-height: 1.5; }#fonLcg .facts__t { font-size: 13px; }#fonLcg .facts__t th,
#fonLcg .facts__t td { padding: 7px 11px; }

  /* --- the comparison bullets --- */#fonLcg .vs__l li { font-size: 12px; }

  /* --- the week timeline --- */#fonLcg .weeks span { font-size: 12.5px; line-height: 1.45; }
}


/* ============================================================================
   THEME-COLLISION GUARDS — appended to the generated section by
   build-theme-section.mjs. NOT part of the standalone prototype: every rule
   here exists only because the lander is inside the FON theme, where a theme
   sheet styles something the prototype leaves at its default.

   Authored by Renz Ramos (commits d9f75e5, c72206f). Folded back here so a
   rebuild reproduces them instead of deleting them.
   ========================================================================== */
/* THEME-COLLISION GUARD ------------------------------------------------------
   Scoping every selector to #fonLcg beats the theme wherever the lander and the
   theme style the SAME thing. These three cases are different: the theme styles
   something the prototype leaves at its default, so there is no lander rule to
   out-specify it and the theme's value silently applies. Each is restored to
   the prototype's own value, verified against resouces-landers/glp.zip.

   1. styles.css `h2 {font-family:"Tomato Grotesk Regular"; text-transform:
      uppercase}` and rdev-common.css `h1..h6 {font-family:"Tomato Grotesk
      Medium"}` are BARE ELEMENT rules, and a direct rule always beats an
      inherited value however specific the ancestor — so headings took the
      theme's face instead of inheriting the lander's "Tomato Grotesk". That
      also shifted every `ch`-based measure: the section h2 measured 631px
      against the prototype's 647px. Sizes/weights are safe: every heading in
      the prototype carries a class, which out-specifies both.
   2. fon-combined-style-common.css `.rating__stars {display:contents}` is a
      class-NAME collision. `display:contents` erases the element's box, so the
      star row measured 0x0 instead of 80x22.
   3. fon-combined-style-common.css `.section` adds container padding-inline.
      The prototype's `.section` sets padding-block only and lets `.shell`
      centre itself, so the theme's inline padding was double-indenting it.
   -------------------------------------------------------------------------- */
#fonLcg h1, #fonLcg h2, #fonLcg h3, #fonLcg h4, #fonLcg h5, #fonLcg h6 {
  font-family: inherit;
  text-transform: none;
  /* styles.css h2.h2 also hands headings its own ink (#0C0C0D). Headings here
     take the colour of the band they sit in — critical on the dark sections. */
  color: inherit;
  font-style: inherit;
}
#fonLcg .rating__stars { display: inline; }
#fonLcg .section { padding-inline: 0; }
/* rdev-common.css `header nav a {font-size: 18.75px}` — written for the site
   header, but this lander ships its own <header>, so it matched these four
   links and blew them up from the 14px they inherit from .hdr__nav. */
#fonLcg .hdr__nav a { font-size: inherit; font-style: inherit; }
/* fon-combined-style-common.css `.panel {width:100%; height:100%}` — another
   class-name collision; the prototype's .panel sizes itself from its content. */
#fonLcg .panel { width: auto; height: auto; }

/* --- Buy box on a phone -------------------------------------------------
   THE BUY BOX GOES EDGE TO EDGE ON A PHONE. At 390px the card was losing
   82px of horizontal room before a word was set: 20px of shell gutter each
   side, 1px of card border each side, and 20px of card padding each side.
   That left ~308px, which is why "Sachets . Chocolate Milkshake . 90-Day"
   broke mid-phrase, "One-time purchase / Delivered once, no subscription"
   wrapped, and the four trust badges stacked four lines deep.

   Pulling the card out by the gutter it sits in gives the full viewport and
   drops the internal padding to 16px, so the content gets ~358px instead -
   about 16% more. The side border and the corner radius go with it, because
   a full-bleed card with rounded corners and a hairline edge reads as a
   mistake rather than a decision. */
@media (max-width: 899.98px) {
  /* Raised from 640px to the page’s own mobile breakpoint. Between the two the
     buy box was still an inset card with a border and a radius, on a screen with
     no room to spare for either — the frame was costing 42px of line length to
     draw an edge nobody needed. Full width, no card, all the way to 900px. */
  #fonLcg .cfg {
    margin-inline: calc(var(--gutter) * -1);
    border-left: 0; border-right: 0; border-radius: 0;
    padding-inline: 12px;
  }
  /* THE PADDING WAS NESTED. Going full bleed only removed the outer gutter;
     inside it the card still padded 16px and then every option card padded
     another 16px, so a line of copy had 390 - 32 - 32 = 326px to live in.
     Trimming both layers to 12px gives 342px. Only the inline padding moves,
     so the cards keep their vertical rhythm. */
  #fonLcg .opt--plan .opt__b { padding: 14px 12px; }
  #fonLcg .opt--sub .opt__b { padding: 0; }
  #fonLcg .opt--sub .opt__head { padding: 13px 12px 0; }
  #fonLcg .opt--sub .opt__ups { padding: 0 12px 14px; }
  #fonLcg .opt__banner { padding: 8px 12px; }
  /* The two-by-two that used to sit here is gone with the fourth badge: three
     across ~342px is ~114px a column, which the shortened labels hold on one
     row without the block ever becoming a grid of text. */
}

/* ==========================================================================
   PROOF MARKS
   Every claim on the three proof rows now carries the mark of whoever is
   actually vouching for it — Trustpilot’s star on the rating, Google’s G on
   the review count, and a house glyph on the three that are FON’s own claim.
   ========================================================================== */
#fonLcg .pf { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
#fonLcg .pf__i { flex: none; width: 15px; height: 15px; }
/* The Trustpilot star is a bare glyph with no padding inside its box, so at a
   matched pixel size it reads heavier than the G. Pulled down to compensate. */
#fonLcg .pf__i--tp { width: 13px; height: 13px; }
#fonLcg .rating__src .pf__i--tp { width: 14px; height: 14px; }

/* A LOGO IS A MARK PLUS A NAME, NOT A MARK PARKED NEXT TO A RATING.
   The star used to lead the item, which put it immediately beside the five
   gold stars of the rating itself — two star shapes in two colours, touching,
   which reads as a mistake rather than as a brand. Bound tight to the word
   instead, at a gap narrower than the row gap, it reads as one unit. */
#fonLcg .pf__lock { display: inline-flex; align-items: center; gap: 4px; }

/* THE MARKS KEEP THEIR BRAND COLOUR — THE LOCKUP IS WHAT FIXED THE CLASH.
   Going monochrome was treating the symptom. The green star did not fight the
   gold rating because it was green; it fought because it was a star, sitting
   against five other stars, a few pixels away. Bound to the word and moved off
   the rating it is a logo, and a logo is allowed its own colour. The house
   glyphs below stay grey on purpose: Trustpilot and Google are third parties
   vouching for FON and have earned their colour on this row, while members,
   refund and batch-testing are FON’s own claims and should not dress
   themselves up as somebody else’s endorsement. */

/* ==========================================================================
   AND THE WHOLE ROW COMES UP A SIZE.
   500,000 members and a 4.8 from 2.1K reviews is the strongest thing the page
   has to say, and it was being said at 13px in grey — smaller than the body
   copy underneath it. The pill now carries the weight it earns: the figures
   step up to 15px and to the full ink, the labels stay grey and small so the
   numbers are what the eye lands on, and the faces and marks grow with them.
   ========================================================================== */
#fonLcg .proofpill {
  gap: 9px 12px;
  padding: 8px 18px 8px 9px;
  font-size: 13.5px;
}
#fonLcg .proofpill b { font-size: 15px; letter-spacing: -.01em; }
#fonLcg .proofpill__av img { width: 30px; height: 30px; border-width: 2px; }
#fonLcg .proofpill__av img + img { margin-left: -10px; }
#fonLcg .proofpill__stars { font-size: 13px; letter-spacing: .05em; }
#fonLcg .proofpill .pf { gap: 7px; }
#fonLcg .proofpill .pf__i { width: 16px; height: 16px; }

/* The sticky bar is a fixed 62px, so it gets the same treatment at a smaller
   step — enough to stop the proof reading as fine print, not enough to
   crowd the nav. */
#fonLcg .hdr__proof { font-size: 13px; gap: 9px; }
#fonLcg .hdr__proof b { font-size: 14px; color: var(--ink); }
#fonLcg .hdr__stars { font-size: 13px; }
#fonLcg .hdr__proof .pf__i { width: 15px; height: 15px; }

/* The reviews bar is the one place the figures get real display size, so the
   glyphs above them grow to match rather than sitting under them as specks. */
/* MARK ON THE LEFT AT THE HEIGHT OF BOTH LINES, TEXT ON THE RIGHT — the same
   lockup the buy box uses, so the two places the page states its proof state
   it the same way. Stacked, the glyph sat above the figure as a third line and
   each fact was a little tower; beside it, the figure and its label read as
   one statement and the row gets shorter. The mark spans both rows, so it
   stays centred on the pair however the label wraps. */
@media (max-width: 639.98px) {
  /* Two across ~330px gave each fact ~150px, so "members taking FON daily"
     wrapped to two lines while "Google reviews" stayed on one and the rows
     stopped lining up. One per row: every fact gets the full width, every
     label fits, and the four read as a list rather than a broken table. */
  #fonLcg .rating__facts { grid-template-columns: 1fr; gap: 13px; }
}
#fonLcg .rating__facts li {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  column-gap: 11px; row-gap: 1px;
  align-items: center;
}
#fonLcg .rating__facts .fact__i {
  grid-column: 1; grid-row: 1 / span 2;
  align-self: center;
  width: 34px; height: 34px; margin: 0;
}
/* The faces are a li > span too, and that selector outranks .rating__faces,
   so it was dragging them into column two and stacking them above the number.
   Excluded by name rather than answered with more specificity. */
#fonLcg .rating__facts b,
#fonLcg .rating__facts li > span:not(.rating__faces) { grid-column: 2; }
#fonLcg .rating__faces {
  grid-column: 1; grid-row: 1 / span 2; align-self: center;
  display: inline-flex; margin: 0;
}
#fonLcg .rating__faces img {
  width: 26px; height: 26px; border-radius: 50%;
  object-fit: cover; border: 2px solid var(--card);
}
#fonLcg .rating__faces img + img { margin-left: -10px; }
@media (max-width: 639.98px) {
  #fonLcg .rating__faces img { width: 24px; height: 24px; }
  #fonLcg .rating__faces img + img { margin-left: -9px; }
}
#fonLcg .rating__facts b { font-size: 17.5px; }
#fonLcg .rating__stars { font-size: 16px; }
#fonLcg .rating__src { font-size: 13px; }
@media (max-width: 779.98px) {
  #fonLcg .rating__facts .fact__i { width: 29px; height: 29px; margin: 0; }
  #fonLcg .rating__facts li { column-gap: 9px; }
  #fonLcg .rating__facts b { font-size: 15.5px; }
  #fonLcg .rating__stars { font-size: 13px; }
}

/* On the phone the pill sits over the photograph, where it has less room and
   more to compete with, so it scales down from the new base rather than up
   from the old one. */
@media (max-width: 899.98px) {
  #fonLcg .proofpill { gap: 7px 9px; padding: 6px 13px 6px 7px; font-size: 12px; }
  #fonLcg .proofpill b { font-size: 13px; }
  #fonLcg .proofpill__av img { width: 24px; height: 24px; border-width: 1.5px; }
  #fonLcg .proofpill__av img + img { margin-left: -8px; }
  #fonLcg .proofpill__stars { font-size: 11px; letter-spacing: .03em; }
  #fonLcg .proofpill .pf { gap: 5px; }
  #fonLcg .proofpill .pf__i { width: 14px; height: 14px; }
}

/* ==========================================================================
   THE PLAN BENEFIT ROWS STAY ON ONE LINE.
   "90 Sachets | One A Day For Best Results" was breaking onto a second line,
   and because the row is a flex with the tick centred, the runover landed
   UNDER the tick rather than under the text — so one promise read as two
   bullets, the second of which had no tick. These are scan-copy: the line
   holds, and the type steps down on the narrowest phones instead.
   ========================================================================== */
#fonLcg .opt__ups > span { white-space: nowrap; min-width: 0; }
@media (max-width: 640px) {
  #fonLcg .opt__ups > span { font-size: clamp(10.5px, 3.3vw, 12.5px); gap: 7px; }
  #fonLcg .opt__ups img { width: 15px; height: 15px; }
}

/* ==========================================================================
   THE BUY BOX PROOF, AS A REVIEW WIDGET
   It was one grey 13px line of six values separated by middots, which is a
   list of numbers rather than a rating. Split across two lines with the mark
   set at the height of both, the score reads first and the counts support it.
   ========================================================================== */
#fonLcg .pdp__proof { display: none; }
/* Sized to the two lines it stands beside, not to the type: 2 x 16px of line
   box plus the 9px between them. Change the leading below and change this. */
#fonLcg .pdp__proof-mark { flex: none; width: 41px; height: 41px; }
#fonLcg .pdp__rate {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 5px 14px; margin: 0 0 12px;
  font-size: 12.5px; line-height: 1.2; color: var(--fg-mut);
}
#fonLcg .pdp__rate b { font-weight: 600; color: var(--fg); }
#fonLcg .pdp__rate .pf { gap: 5px; }
#fonLcg .pdp__g { flex: none; width: 14px; height: 14px; }
#fonLcg .pdp__g--tp { width: 12px; height: 12px; }
#fonLcg .pdp__rateline { display: flex; align-items: center; flex-wrap: nowrap; white-space: nowrap; gap: 2px 7px; }
#fonLcg .pdp__rateline--sub { font-size: 12.5px; }
#fonLcg .pdp__src { color: var(--fg-soft); }
#fonLcg .pdp__g { flex: none; width: 14px; height: 14px; }
#fonLcg .pdp__stars { font-size: 13.5px; }
@media (max-width: 640px) {
  #fonLcg .pdp__proof { gap: 11px; margin-bottom: 18px; }
  #fonLcg .pdp__proof-mark { width: 37px; height: 37px; }
  #fonLcg .pdp__src { display: none; }
}

/* ==========================================================================
   OPEN AND CLOSE, EVERYWHERE
   The FAQ was already smooth, through ::details-content. Everything else on
   the page that appears or disappears does it by toggling the `hidden`
   attribute - the saving banner, the checkout error, the review row, the
   gallery arrows - and `hidden` is display:none, which cannot be transitioned.
   So all of them snapped.

   `transition-behavior: allow-discrete` is what makes a display change
   animatable: going to none, the display flip is held back until the opacity
   has finished, so the element fades out and only then stops existing.
   @starting-style supplies the from-state on the way in, which an element
   that was display:none does not otherwise have.

   Both are inside @supports. A browser without them gets exactly the snap it
   gets today - nothing is worse than it was, it is only better where it can be.
   ========================================================================== */
@supports (transition-behavior: allow-discrete) {
  /* FADE ONLY, AND QUICKLY. The first pass slid and scaled these as well,
     which was wrong for where they actually live: the saving banner sits at
     the top of the plan card and re-runs on EVERY change of plan, so a bit of
     furniture the eye uses to compare prices was jumping and rescaling each
     time the thing next to it was clicked. Motion that reads as craft once
     reads as a fault by the third repeat. A short fade still removes the snap
     without asking to be watched. */
  #fonLcg .opt__banner,
  #fonLcg .cfg__err,
  #fonLcg .rgrid,
  #fonLcg .gal__nav {
    transition: opacity .2s var(--ease), display .2s allow-discrete;
  }
  #fonLcg .opt__banner[hidden],
  #fonLcg .cfg__err[hidden],
  #fonLcg .rgrid[hidden],
  #fonLcg .gal__nav[hidden] { opacity: 0; }

  @starting-style {
    #fonLcg .opt__banner,
    #fonLcg .cfg__err,
    #fonLcg .rgrid,
    #fonLcg .gal__nav { opacity: 0; }
  }
}

/* The plan cards change state on click, and colour alone carries that fine.
   Transitioning transform as well put a lift under a card the user is trying
   to compare against the one beside it, which is the wrong moment to move
   anything. Border and fill only, and fast enough to feel like a response
   rather than an effect. */
#fonLcg .opt--plan .opt__b {
  transition: border-color .16s var(--ease), background-color .16s var(--ease);
}

/* The reviews, offer and FAQ washes that used to sit here are gone. The wash
   belongs to the fold: it is the light the page opens in, and repeating it on
   three more bands turned a single effect into a texture. */

/* ==========================================================================
   THE SCROLL REVEAL COMES IN FROM THE SIDES
   It used to rise 20px, which is the one direction that fights a page being
   scrolled: the content moves the same way the scroll does, so the travel
   cancels out and what is left reads as a flicker. Sideways is perpendicular
   to the scroll, so the same distance is actually seen, and it can be given
   a direction that means something instead of one that is merely up.

   Each element enters from the side it already lives on. The listicle panels
   sit in the right-hand column, so they arrive from the right and land where
   the layout was always going to put them. The offer block splits its two
   halves outward, left from left and right from right. The full-width blocks
   alternate down the page so the run of them has a rhythm rather than a tic.

   THE TRANSFORM IS DECLARED ONCE, on .rv, and the per-element rules only set
   custom properties. Writing the transform into each of those rules instead
   would raise their specificity above .rv.in, and the landed state would lose
   to the starting state — every element would animate to its offset and stay
   there. Two properties keep all of it at one specificity.
   ========================================================================== */
.anim #fonLcg .rv {
  transform: translate3d(var(--rv-x, 0), var(--rv-y, 20px), 0);
  transition:
    opacity .66s cubic-bezier(.22, .68, 0, 1),
    transform .66s cubic-bezier(.22, .68, 0, 1);
  transition-delay: var(--d-i, 0ms);
}
.anim #fonLcg .rv.in { transform: none; }

/* from the right */
.anim #fonLcg .blk__panel.rv,
.anim #fonLcg .offer__right.rv,
.anim #fonLcg .rgrid.rv,
.anim #fonLcg .stack.rv,
.anim #fonLcg .midcta--end.rv { --rv-x: 44px; --rv-y: 0; }

/* from the left */
.anim #fonLcg .offer__left.rv,
.anim #fonLcg .rating.rv,
.anim #fonLcg .ugc.rv,
.anim #fonLcg .gtee.rv { --rv-x: -44px; --rv-y: 0; }

/* TEXT MOVES LESS THAN FURNITURE, AND FASTER.
   A paragraph carried 44px across looks like it is being flown in; the same
   line at 20px reads as settling. Shorter distance, shorter duration, and a
   stagger applied by the script so the numeral, the heading and the body of
   a beat arrive in the order they are read rather than all at once. */
.anim #fonLcg .rv--t {
  --rv-x: -20px; --rv-y: 0;
  transition-duration: .52s;
}

/* Centred copy is the exception: a centred heading sliding in from the left
   is a centred heading that was briefly not centred. It rises instead. */
.anim #fonLcg .head--center .rv--t { --rv-x: 0; --rv-y: 14px; }

/* Shorter travel on a phone. The columns are stacked there, so nothing is
   arriving from the side it belongs to any more — it is just movement, and
   44px of it across a 390px screen is a third of the width. */
@media (max-width: 899.98px) {
  .anim #fonLcg .rv { --rv-x: 0; }
  /* Higher specificity than the .rv reset above, so it needs its own. */
  .anim #fonLcg .rv--t { --rv-x: -13px; }
  .anim #fonLcg .head--center .rv--t { --rv-x: 0; --rv-y: 12px; }
  .anim #fonLcg .blk__panel.rv,
  .anim #fonLcg .offer__right.rv,
  .anim #fonLcg .rgrid.rv,
  .anim #fonLcg .stack.rv,
  .anim #fonLcg .midcta--end.rv { --rv-x: 26px; }
  .anim #fonLcg .offer__left.rv,
  .anim #fonLcg .rating.rv,
  .anim #fonLcg .ugc.rv,
  .anim #fonLcg .gtee.rv { --rv-x: -26px; }
}

/* The facts are a column — icon, number, label — so the glyph sits above the
   figure and every one of the three lines still starts on the same left edge. */
#fonLcg .rating__facts .fact__i { width: 18px; height: 18px; margin-bottom: 6px; }
@media (max-width: 779.98px) {
  #fonLcg .rating__facts .fact__i { width: 16px; height: 16px; margin-bottom: 4px; }
}

/* THE PILL IS ALLOWED TO WRAP AGAIN UNDER ~430px, AND THIS IS A REGRESSION
   BEING PAID BACK. The phone-hero block pins it to flex-wrap:nowrap at 11px
   on purpose - one line is what makes it read as a single claim rather than a
   list. Then it was scaled up to 12px with 24px avatars in a later block at
   the same breakpoint, which won on source order: the pill grew while it was
   still forbidden to wrap, so at 390px it ran past the gutter and cut the word
   "members" in half.

   One clipped line reads as broken, which is worse than two clean ones, so
   below 430px the no-wrap comes off and the separators stay hidden - they
   would otherwise start the second line. Above 430px there is room and it
   still holds the single line it was designed to hold. */
/* ONE LINE UNDER 430px, AND THE FACES ARE WHAT PAY FOR IT.
   Measured at a 390px viewport, where the pill has 350px to live in:

     11px + avatars ....... 387px   over by 37
     10px + avatars ....... 364px   over by 14
     11px, no avatars ..... 336px   fits, 14px spare

   With the faces in, it does not fit on one line at ANY readable size - 10px
   type is already past the point of being worth reading and it is still 14px
   too wide. Dropping the icons instead is not enough either; they are only
   34px of the excess.

   So on the narrowest phones the avatar stack goes and every figure stays.
   The faces are decoration, the three numbers are the proof, and this is the
   one width where that trade has to be made - above 430px the stack is back. */
@media (max-width: 429.98px) {
  #fonLcg .proofpill i { display: none; }
  #fonLcg .proofpill__av { display: none; }
  #fonLcg .proofpill {
    flex-wrap: nowrap;
    white-space: nowrap;
    gap: 6px;
    padding: 5px 11px;
    font-size: 11px;
  }
  #fonLcg .proofpill b { font-size: 12px; }
  #fonLcg .proofpill__stars { font-size: 10px; }
  #fonLcg .proofpill .pf { gap: 4px; }
  #fonLcg .proofpill .pf__i { width: 13px; height: 13px; }

  /* The buy box rating missed one line by a single pixel at 12.5px, and by
     one again at 11.5px — the column narrows with the type, so the margin has
     to be taken rather than trimmed to nothing. 11px leaves ~13px of slack. */
  #fonLcg .pdp__rateline--sub { font-size: 11px; gap: 2px 5px; }
  #fonLcg .pdp__g { width: 13px; height: 13px; }

  /* THE FACES STAY AND THE WORD "STARS" GOES. Measured at 390px, where the
     pill has 350px:

       11px, avatars, all words ..... 377px   over by 27
       11px, avatars, no "stars" .... 339px   fits, 11px spare

     "stars" is the only word on the row that earns nothing — five gold stars
     sit immediately to its left saying it already. Every other label stays,
     and so do the faces. */
  #fonLcg .proofpill__av { display: inline-flex; }
  #fonLcg .pf__w { display: none; }
  #fonLcg .proofpill__av img { width: 20px; height: 20px; border-width: 1.5px; }
  #fonLcg .proofpill__av img + img { margin-left: -7px; }

  /* The buy box rating row takes the same treatment as the pill: no avatars to
     pay for here, so it holds all three labels at 11px. */
  #fonLcg .pdp__rate { font-size: 11px; gap: 4px 10px; flex-wrap: nowrap; white-space: nowrap; }
  #fonLcg .pdp__g { width: 13px; height: 13px; }
  #fonLcg .pdp__g--tp { width: 11px; height: 11px; }
  #fonLcg .pdp__stars { font-size: 11px; }

  /* BREATHING ROOM. The phone column had been tightened repeatedly — tokens cut
     30%, the buy box taken full width at 12px of inner padding, the ingredient
     list halved — and each of those was right on its own, but together they
     left the block with nothing between one idea and the next. The width stays;
     the air goes back vertically, where it costs nothing horizontally. */
  #fonLcg .ticks--check { gap: 11px; }
  #fonLcg .ticks__lead { margin-bottom: 15px; }
  #fonLcg .pdp__rate { margin: 20px 0 15px; }
  #fonLcg .pdp__name { margin-bottom: 12px; }
  #fonLcg .pdp__sub { line-height: 1.62; }
  #fonLcg .pdp__id { margin-bottom: 30px; }
}


/* ==========================================================================
   THE PROOF WALL
   Built on the reference block: one dark card carrying the score, the count
   and the faces together. The rating used to sit in a light card at the top
   of the section and the videos arrived several thousand pixels later under
   their own heading, so the number and the people it came from were two
   separate claims. They are one now, and the card gives the middle of the
   page its only dark anchor — until this, the ink band was the closing CTA
   and nothing else.
   ========================================================================== */
/* THE SAME CARD THE PAGE ALREADY USES. This went black first, then lime,
   and both were the same mistake in different paint: the reference block is
   dark because dark green is THAT brand’s colour, so what carries over is the
   idea — rating and faces in one card — not the darkness. This page already
   has a card: --card on a --card-edge hairline, which is what the rating block
   beside it is built from. Matching it means the two read as a pair instead of
   one of them announcing itself. */
#fonLcg .ugc {
  margin-block: clamp(18px, 2.2vw, 30px);
  padding: clamp(22px, 2.6vw, 34px);
  border-radius: var(--r-lg);
  background: var(--card);
  border: 1px solid var(--card-edge);
}
/* Specificity has to beat the original .ugc__head, which is a space-between
   flex row built for a heading with a link opposite it. */
#fonLcg .ugc .ugc__head {
  display: flex; flex-direction: column; align-items: center;
  width: 100%; text-align: center;
  gap: 7px; margin-bottom: clamp(16px, 2vw, 22px);
}
#fonLcg .ugc__stars { margin: 0; color: var(--star-dk); font-size: 17px; letter-spacing: .12em; }
/* The figures carry on weight, and the words around them sit in the muted grey,
   so the numbers come first without needing a colour of their own. */
#fonLcg .ugc__h {
  margin: 0; font-size: clamp(19px, 2.2vw, 27px); font-weight: 700;
  letter-spacing: -.02em; line-height: 1.15; color: var(--fg-mut);
}
#fonLcg .ugc__h b { color: var(--fg); font-weight: 700; }
#fonLcg .ugc__all { color: var(--fg-mut); font-size: 13px; }
#fonLcg .ugc__all:hover { color: var(--fg); }
/* The rail bled to the viewport edge to escape the section gutter; inside a
   padded card that would run it under the card’s own edge instead. */
#fonLcg .ugc .ugc__rail { margin-inline: 0; padding-inline: 0; }

/* ==========================================================================
   THE INGREDIENT GRID
   FON’s own ingredient photography — the same files the other product sections
   use — rather than a drawn icon set or a generated panel. Three across so it
   holds two rows on a phone without any cell needing to wrap.
   ========================================================================== */
/* The .ing grid that used to sit here is gone. It was six cells where five
   bullets had been, and taller than the thing it replaced. The bullets came
   back on request; only the wording changed. */


/* The full-bleed that used to sit here is gone. It bought the generated frames
   about 11% more type height on a phone, and cost them the thing that made them
   read as exhibits: a card with an edge and air around it. Seven framed panels
   down a column is the rhythm of the section — seven edge-to-edge images is a
   slideshow. The legibility problem is real but it is the images’ problem, not
   the frame’s. */


/* ==========================================================================
   THE RATING FACTS, TIGHTENED
   The figure and its label were drifting apart: default leading on a 17.5px
   number over a 13px caption left more air inside one fact than between two of
   them, so the row read as eight loose fragments rather than four statements.
   Both lines pull in, the mark aligns to the top of the pair instead of
   floating in the middle of a caption that wrapped, and on a phone the four
   sit as one column with a hairline between them so each is visibly its own.
   ========================================================================== */
#fonLcg .rating__facts { row-gap: 18px; }
#fonLcg .rating__facts li { column-gap: 10px; row-gap: 0; align-items: start; }
#fonLcg .rating__facts b { line-height: 1.15; }
#fonLcg .rating__facts li > span { line-height: 1.32; margin-top: 2px; }
#fonLcg .rating__facts .fact__i { align-self: start; margin-top: 1px; width: 26px; height: 26px; }

@media (max-width: 639.98px) {
  #fonLcg .rating { padding: 18px 16px; gap: 14px; }
  #fonLcg .rating__facts { row-gap: 0; }
  #fonLcg .rating__facts li { padding-block: 11px; column-gap: 11px; }
  #fonLcg .rating__facts li + li { border-top: 1px solid var(--rule); }
  #fonLcg .rating__facts .fact__i { width: 24px; height: 24px; }
  #fonLcg .rating__facts b { font-size: 15px; }
  #fonLcg .rating__facts li > span { font-size: 12.5px; }
}


/* ==========================================================================
   "90 SACHETS | ONE A DAY FOR BEST RESULTS" HOLDS ONE LINE — THIRD ATTEMPT,
   AND THIS TIME AT THE RIGHT THING.
   white-space: nowrap went on the row two commits ago and measured correctly
   in isolation: 17px tall, one line, at 318px. It kept wrapping on the live
   page, and the reason the local check could not see it is that the local
   check only loads this stylesheet. The storefront also loads the theme’s own
   CSS, and a break after </b> with the runover aligning under the text rather
   than under the tick is what a display:block <b> looks like — nowrap cannot
   stop a block-level child from starting its own line.

   So the fix is not more nowrap, it is putting the <b> back inline, at a
   specificity a theme-wide element rule cannot outrank. */
#fonLcg .opt__ups > span,
#fonLcg .opt__ups > span > span { white-space: nowrap; }
#fonLcg .opt__ups > span b,
#fonLcg .opt__ups > span i,
#fonLcg .opt__ups > span span { display: inline; }
#fonLcg .opt__ups > span > span { display: inline-block; }


/* ==========================================================================
   PHONE: BOTH LISTS BECOME GRIDS
   Six ingredients as six rows and four facts as four rows is ten lines of
   furniture on a screen that has none to spare. Three across and two across
   respectively puts each of them in two rows, which is roughly a third of the
   height for exactly the same content.
   ========================================================================== */
@media (max-width: 639.98px) {
  /* Ingredients: three up, stacked inside each cell. The <b> loses the negative
     margin it carries in the row layout, where it was closing a flex gap that
     no longer sits between the dose and the name. */

  /* Facts: two up, and the hairlines that separated a single column come off —
     they were reading as a table once there were two of them side by side. */
  #fonLcg .rating__facts { grid-template-columns: 1fr 1fr; column-gap: 14px; row-gap: 17px; }
  #fonLcg .rating__facts li { padding-block: 0; column-gap: 9px; }
  #fonLcg .rating__facts li + li { border-top: 0; }
}

/* THE SCORE STARS WERE INK. A row of black stars reads as five glyphs; the same
   row in the theme gold reads as a rating without anyone having to look twice —
   which is the note already written against the review-card stars further up,
   and this one had simply never been brought in line with it. Bigger too: it
   sits under a 40px figure and was set smaller than the caption beneath it. */
#fonLcg .rating__score .rating__stars { font-size: 18px; color: var(--star); letter-spacing: .1em; }
@media (max-width: 779.98px) {
  #fonLcg .rating__score .rating__stars { font-size: 16px; }
}


/* The buy box full-bleed had to climb a level. .cfg sits inside .offer__right,
   inside .offer, inside .shell — and a negative margin on the form only pulls
   it out of the column it is in, not out of the gutter two ancestors up. The
   column takes the negative margin now and the form simply fills it. */
@media (max-width: 899.98px) {
  #fonLcg .offer__right { margin-inline: calc(var(--gutter) * -1); }
  #fonLcg .offer__right .cfg { margin-inline: 0; }
  /* The note is three statements, not a paragraph; it holds one line once it
     stops trying to say 'from usefon.com' as well. */
  #fonLcg .cfg__fine { white-space: nowrap; font-size: clamp(9.5px, 2.6vw, 11px); }
}


/* ==========================================================================
   THE FACTS LINE UP
   Two across a 390px card leaves each column about 139px of text once the card
   padding, the column gap and the 24px mark are taken out — and 'third-party
   lab tested' needs about 128px at 12.5px, so it broke, 'members taking FON
   daily' broke, and the two columns ended up different heights with the marks
   floating at different depths. Ragged, but not a mis-alignment: a wrapping
   problem wearing one.

   So the labels come down half a step until they fit on one line, the mark
   comes down with them, and the grid aligns to the top of each cell rather
   than the middle — which keeps the four marks on two clean baselines however
   long a label gets later.
   ========================================================================== */
@media (max-width: 639.98px) {
  #fonLcg .rating__facts { align-items: start; column-gap: 12px; }
  #fonLcg .rating__facts li { align-items: start; column-gap: 8px; }
  #fonLcg .rating__facts .fact__i { width: 22px; height: 22px; margin-top: 2px; }
  #fonLcg .rating__facts b { font-size: 14.5px; }
  #fonLcg .rating__facts li > span { font-size: 11.5px; line-height: 1.3; }
}


/* THE THUMBNAILS BELONG TO THE COLUMN, NOT TO THE STAGE. They were given the
   stage’s negative gutter so the two would share a left edge — which fixed that
   pair and broke the column: the strip then sat a full gutter left of the
   supplement-facts button, the ingredient list and the wordmark, so five things
   in one column started at two different places.

   Only the stage bleeds, because it is a photograph and running to the edge is
   what a photograph should do on a phone. The thumbnails are controls, and
   controls line up with the text they belong to. One left edge for everything
   below the image. */


/* ==========================================================================
   THE INGREDIENT BLOCK TIGHTENS BACK UP
   Going three-up made each cell a little tower — mark, dose, name — and the
   row gap that suited a flat list is far too much between two rows of towers.
   The air that was added around the buy box identity earlier was right and
   stays; this is the one block that took more than it needed.
   ========================================================================== */
@media (max-width: 639.98px) {
  #fonLcg .ticks__lead { margin-bottom: 11px; }
  #fonLcg .pdp__rate { margin: 15px 0 10px; }
  #fonLcg .pdp__id { margin-bottom: 22px; }
}


/* ==========================================================================
   THE TRUSTPILOT MARK JOINS THE COLUMN THE OTHER MARKS ARE IN
   .rating__src was pushed to the far right of the score row with margin-left:
   auto — a layout that made sense when the facts underneath were a two-by-two
   block with no left column to line up with. Now that every fact leads with a
   mark at the card’s left padding, the one mark sitting on the opposite side of
   the card is the only thing in the block not on that line. It drops to its own
   row, hard left, and the four marks and it read as one column.
   ========================================================================== */
@media (max-width: 639.98px) {
  #fonLcg .rating__score { flex-wrap: wrap; row-gap: 7px; }
  #fonLcg .rating__src { margin-left: 0; width: 100%; }

  /* AND THE IDENTITY BLOCK GETS ITS AIR BACK. The last pass tightened the
     ingredient grid, which needed it, and took the gaps either side of the
     proof row with it, which did not. The grid stays tight; the joins between
     the three separate things — what is in it, who says so, what it is called
     — open back up. Space inside a block and space between blocks are not the
     same measurement and should not have moved together. */
  #fonLcg .pdp__rate { margin: 26px 0 14px; }
  #fonLcg .pdp__name { margin-bottom: 13px; }
  #fonLcg .pdp__id { margin-bottom: 28px; }
}


/* ==========================================================================
   ALL THE WAY TO THE EDGE, MEASURED
   At a true 390px viewport the form already reached 0 and 390 — .offer__right
   takes the negative gutter and .cfg fills it. What was left was the form’s own
   12px of inner padding, so every option card stopped 12px short with a border
   down each side: a card inside a full-width card, which is the look the
   full-bleed was meant to remove in the first place.

   The padding goes, the side borders and side radii go with it, and the rows
   run edge to edge with a rule between them instead of a box around each. The
   TEXT keeps its inset — that moves onto the row, where it belongs, so nothing
   ever touches the glass.
   ========================================================================== */
@media (max-width: 899.98px) {
  #fonLcg .cfg { padding-inline: 0; }

  /* Section labels and anything that is not a card keep the text inset. */
  /* The 14px inset that was here is gone. It targeted .cfg > * with a
     :not(.opts) that never matched anything — the class is .cfg__opts — and the
     only thing that extra :not() achieved was raising the rule to (1,3,0), so it
     beat the later (1,2,0) rule that sets this to 0. The fieldset therefore kept
     14px of padding, and every format, flavour and supply card came out 28px
     narrower than the CTA, the summary and the badges directly beneath them. */

  #fonLcg .opt--plan .opt__b,
  #fonLcg .opt--fmt .opt__b,
  #fonLcg .opt--flav .opt__b {
    border-left: 0; border-right: 0; border-radius: 0;
  }
  #fonLcg .opt--plan .opt__b { padding-inline: 14px; }
  #fonLcg .opt--sub .opt__head { padding-inline: 14px; }
  #fonLcg .opt--sub .opt__ups { padding-inline: 14px; }
  #fonLcg .opt__banner { padding-inline: 14px; }
  #fonLcg .badges { padding-inline: 14px; }
}


/* ==========================================================================
   THE TRUSTPILOT STAR SHARES THE MARKS’ COLUMN
   Putting .rating__src on its own row hard-left got it into the column but not
   onto the line: its star is a 14px box and every fact mark is a 22px one, so
   two things both starting at x=0 still had their glyphs 4px apart, and the gap
   after them differed too. Boxes align, not glyphs — so the star gets a 22px
   box with the glyph inset inside it, and the same 8px gap the facts use. Five
   marks, one edge.
   ========================================================================== */
@media (max-width: 639.98px) {
  #fonLcg .rating__src .pf__lock { gap: 8px; }
  #fonLcg .rating__src .pf__i--tp {
    width: 22px; height: 22px;
    padding: 4px; box-sizing: border-box;
    object-fit: contain;
  }
}


/* ==========================================================================
   FULL BLEED MEASURED FROM THE VIEWPORT, NOT FROM AN ANCESTOR
   Every previous attempt cancelled a specific parent’s padding: a negative
   gutter on .cfg, then on .offer__right. Both measure flush in the local
   preview at every width from 390 to 880 — and both are still inset on the
   storefront, because the preview loads THIS stylesheet only while the live
   page also loads the theme’s, and the note further up in this file records
   that fon-combined-style-common.css adds container padding-inline of its own.
   A gutter this file cannot see is a gutter it cannot subtract.

   width:100vw with margin-left: calc(50% - 50vw) does not care. It measures
   from the viewport, so it lands on the glass no matter how many padded
   ancestors sit between the form and the edge, known or not. No transform, so
   nothing inside gets a new containing block.
   ========================================================================== */
@media (max-width: 899.98px) {
  #fonLcg .offer__right { margin-inline: 0; }
  #fonLcg .offer__right .cfg {
    width: 100vw;
    max-width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    padding-inline: 0;
    border-left: 0; border-right: 0; border-radius: 0;
  }
  /* 2026-08-20: .pdp__id (proof pill + product name, sitting right above
     .cfg) was still inset by whatever the unseen theme gutter happens to
     be, while .cfg's left edge is pinned to a known 16px via the full-bleed
     technique above - so the two didn't line up. Same technique, same
     final 16px inset, so both edges match exactly regardless of the theme
     gutter's real width. */
  #fonLcg .offer__right .pdp__id {
    width: 100vw;
    max-width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    padding-inline: 16px;
  }
  /* Same fix, other column: .ticks__lead ("31 ingredients in 1 sachet")
     and the .ticks--check list below the gallery were also inset by the
     unseen theme gutter instead of the known 16px .cfg uses. */
  #fonLcg .offer__left .ticks__lead,
  #fonLcg .offer__left .ticks--check {
    width: 100vw;
    max-width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    padding-inline: 16px;
  }
}


/* ==========================================================================
   THE BULLETS GET THEIR TWO LEVELS BACK
   They were flattened to one weight when the list was briefly an ingredient
   run — every row the same size in the same grey. With the dose leading and
   the benefit under it, the first line has to carry again: semibold in the
   ink, caption in the soft grey, which is the treatment this list had before
   and the one the tick was drawn for.
   ========================================================================== */
#fonLcg .ticks--check li {
  font-size: 14.5px; line-height: 1.35; font-weight: 600; color: var(--fg);
}
#fonLcg .ticks--check li b { font-weight: 600; color: var(--fg); }
#fonLcg .ticks--check i {
  display: block; margin-top: 2px;
  font-style: normal; font-size: 13px; line-height: 1.42; font-weight: 400;
  color: var(--fg-soft);
}
@media (max-width: 639.98px) {
  #fonLcg .ticks--check { gap: 11px; }
  #fonLcg .ticks--check li { font-size: 13.5px; padding-left: 26px; }
  #fonLcg .ticks--check i { font-size: 12.5px; }
  #fonLcg .ticks__lead { margin-bottom: 12px; }
}


/* The subscribe card carries BOTH .opt--plan and .opt--sub, so the 14px inset
   meant for a plain plan row landed on its body as well — and the saving banner
   lives inside that body, so a full-width black bar ended up floating 14px in
   from each edge with lime showing past it. The body goes back to zero and the
   inset moves onto the three things that actually hold text. */
@media (max-width: 899.98px) {
  #fonLcg .opt--sub .opt__b { padding-inline: 0; }
  #fonLcg .opt--sub .opt__head { padding-inline: 14px; }
  #fonLcg .opt--sub .opt__ups { padding-inline: 14px; }
  #fonLcg .opt--sub .sub__freqwrap { padding-inline: 14px; }
  #fonLcg .opt__banner { padding-inline: 14px; }
}


/* ==========================================================================
   FULL WIDTH, BUT STILL A DESIGN
   'No spacing or border all the way to the end' was read too literally: the
   card borders came off, the radii came off and the form's inner padding went
   to zero, so the buy box reached both edges and stopped looking like anything.
   Those are two different things. Full bleed is about not spending 40px of a
   390px screen on a gutter; it is not about removing the edges that tell one
   option from the next.

   So the form keeps the whole viewport and gets its inset back inside, and the
   option cards get their borders and corners back — same cards as before, just
   40px wider each. The per-element 14px insets added while the form had none
   go with it, or everything would be padded twice.
   ========================================================================== */
@media (max-width: 899.98px) {
  #fonLcg .offer__right .cfg { padding-inline: 16px; }
  /* Only the things that do NOT draw their own box. The summary card and the
     CTA are bordered, filled objects with their own inner padding — zeroing it
     put the price and '/month' hard against the summary's own border, and
     '90-Day' broke onto a second line to escape it. The fieldset and the note
     have no box of their own, so they are the ones that would double up. */
  #fonLcg .cfg > *:not(.badges):not(.cfg__sum):not(.btn) { padding-inline: 0; }

  #fonLcg .opt--plan .opt__b,
  #fonLcg .opt--fmt .opt__b,
  #fonLcg .opt--flav .opt__b,
  #fonLcg .opt--sm .opt__b {
    border-left: 1px solid var(--card-edge);
    border-right: 1px solid var(--card-edge);
    border-radius: var(--r-md);
  }
  /* The selected card draws its own heavier edge, so it must not be reset to
     the hairline on the two sides that were taken away. */
  #fonLcg .opt input:checked ~ .opt__b {
    border-left-color: var(--ink);
    border-right-color: var(--ink);
  }

  /* Padding now belongs to the form, so the pieces inside stop adding their own. */
  #fonLcg .opt--plan .opt__b { padding-inline: 15px; }
  #fonLcg .opt--sub .opt__b { padding-inline: 0; }
  #fonLcg .opt--sub .opt__head { padding-inline: 15px; }
  #fonLcg .opt--sub .opt__ups { padding-inline: 15px; }
  #fonLcg .opt--sub .sub__freqwrap { padding-inline: 15px; }
  #fonLcg .opt__banner { padding-inline: 15px; }
  #fonLcg .badges { padding-inline: 0; }
}


/* The checkout note is a whole-block statement, not the last line of the badge
   row above it, so it centres under the button rather than hanging off the left. */
#fonLcg .cfg__fine { text-align: center; }


/* ==========================================================================
   THE DELIVERY FREQUENCY CONTROL
   Replaces the operating system’s rendering of a <select> with the page’s own,
   so it looks the same on a handset, in a desktop browser and in a browser
   pretending to be a handset. The native select is still in the form carrying
   the value; this is only what is seen.

   .opt__b CLIPS ITS CONTENTS — overflow:hidden, so the banner follows the
   card’s rounded top. An absolutely positioned panel inside it would be cut
   off at the card edge, so the clip is lifted on the subscribe card and the
   banner is given the corners it was borrowing from the parent instead.
   ========================================================================== */
#fonLcg .opt--sub .opt__b { overflow: visible; }

/* HERE IS THE WEDGE. The bar was given --r-md, 10px, and the card it sits on
   draws its corner at --r, 4px. With the clip lifted on the line above there is
   nothing to reconcile them, so the bar's much wider arc curves away from the
   card's tighter one and the card's own fill shows through the gap: a pale
   wedge in each top corner, most obvious on the selected card where a black
   border runs around it.

   Ten was the better number - these plan cards are the largest controls on the
   page and 4px reads as a box on them - so the CARD moves up to meet the bar
   rather than the bar down to meet the card. The bar then takes the card's
   INNER radius, one pixel tighter, because it sits inside a 1px border. Two
   concentric arcs, one pixel apart, with ink on both sides of the join. */
#fonLcg .opt--plan .opt__b { border-radius: var(--r-md); }
#fonLcg .opt--sub .opt__banner { border-radius: calc(var(--r-md) - 1px) calc(var(--r-md) - 1px) 0 0; }

#fonLcg .fx { position: relative; }
/* The select keeps its place in the form and loses its place on the screen. */
#fonLcg .fx .sub__freq {
  position: absolute; width: 1px; height: 1px;
  opacity: 0; pointer-events: none; clip-path: inset(50%);
}
/* The chevron belonged to the wrapper because the select could not carry one.
   The button can, so the wrapper stops drawing it. */
#fonLcg .fx::after { display: none; }

#fonLcg .fx__btn {
  position: relative; display: block; width: 100%; text-align: left;
  padding: 13px 38px 13px 15px;
  border: 1px solid var(--card-edge); border-radius: var(--r-sm);
  background: var(--chip); color: var(--blue);
  font: inherit; font-size: 13.5px; font-weight: 600; line-height: 1.3;
  cursor: pointer;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
#fonLcg .fx__btn::after {
  content: ""; position: absolute; right: 15px; top: 50%;
  width: 8px; height: 8px;
  border-right: 1.8px solid var(--blue); border-bottom: 1.8px solid var(--blue);
  transform: translateY(-70%) rotate(45deg);
  transition: transform .18s var(--ease);
}
#fonLcg .fx__btn[aria-expanded="true"]::after { transform: translateY(-25%) rotate(225deg); }
#fonLcg .fx__btn:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }

/* UNANSWERED, NOT INVALID. Pressing the CTA without a cadence marks the
   control itself: the border, the label and the chevron all turn red, so the
   thing that needs attention is the thing that looks wrong. The label text is
   written by the script and restores itself on selection via the select's own
   paint(); this rule only carries the colour. --err is declared here because
   nothing else in this stylesheet has needed a red until now. */
#fonLcg { --err: #D0021B; }
#fonLcg .fx__btn.is-error {
  border-color: var(--err);
  color: var(--err);
  background: #FFF7F7;
}
#fonLcg .fx__btn.is-error::after {
  border-right-color: var(--err);
  border-bottom-color: var(--err);
}
#fonLcg .fx__btn.is-error:focus-visible { outline-color: var(--err); }

#fonLcg .fx__list {
  position: absolute; z-index: 40; left: 0; right: 0; top: calc(100% + 6px);
  background: #FFFFFC;
  border: 1px solid var(--card-edge); border-radius: var(--r-sm);
  box-shadow: 0 14px 30px -12px rgba(23, 21, 15, .34);
  overflow: hidden;
}
#fonLcg .fx__opt {
  display: block; width: 100%; text-align: left;
  padding: 12px 15px;
  font: inherit; font-size: 13.5px; font-weight: 600; line-height: 1.3;
  color: var(--fg); background: transparent; cursor: pointer;
}
#fonLcg .fx__opt + .fx__opt { border-top: 1px solid var(--rule); }
#fonLcg .fx__opt:hover { background: rgba(38, 32, 20, .05); }
#fonLcg .fx__opt:focus-visible { outline: 2px solid var(--blue); outline-offset: -2px; }
#fonLcg .fx__opt[aria-selected="true"] { color: var(--blue); }
#fonLcg .fx__opt.is-off { opacity: .45; cursor: not-allowed; }


/* The bullets come down a step on a phone. At 13.5px over 12.5px they were the
   largest thing in the buy box after the price, and the electrolytes line — the
   longest of the five — was breaking onto a second row while the other four sat
   on one, which is what made the block look ragged rather than long. */
@media (max-width: 639.98px) {
  #fonLcg .ticks--check { gap: 10px; }
  #fonLcg .ticks--check li { font-size: 12.5px; padding-left: 24px; background-size: 17px 17px; }
  #fonLcg .ticks--check i { font-size: 11.5px; margin-top: 1px; }
  #fonLcg .ticks__lead { font-size: 13.5px; margin-bottom: 11px; }
}


/* ==========================================================================
   THE VIDEO WALL COMES OUT OF ITS CARD
   It was given a card so it would read as a pair with the rating block beside
   it. Wrong instinct: a card is a container for a fixed amount of content, and
   this is a row that runs off the edge on purpose. The border was drawing a
   box around something whose whole point is that it does not end — and it cost
   the videos 68px of width to draw it.

   So: no card, no padding, full bleed, bigger frames, and the row dissolves at
   both ends the way the written reviews do rather than stopping at a border.
   ========================================================================== */
#fonLcg .ugc {
  background: none;
  border: 0;
  padding: 0;
  border-radius: 0;
  margin-block: clamp(22px, 2.6vw, 34px);
}

/* Full bleed, and fading at both ends so a partial frame reads as one on its
   way past rather than one that has been cut off. */
#fonLcg .ugc__rail {
  --ugc-fade: 40px;
  margin-inline: calc(var(--gutter) * -1);
  padding-inline: var(--gutter);
  scroll-padding-inline: var(--gutter);
  grid-auto-columns: 54%;
  gap: 12px;
  -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--ugc-fade), #000 calc(100% - var(--ugc-fade)), transparent);
          mask-image: linear-gradient(to right, transparent, #000 var(--ugc-fade), #000 calc(100% - var(--ugc-fade)), transparent);
}
@media (min-width: 700px) {
  #fonLcg .ugc__rail { grid-auto-columns: 30%; --ugc-fade: 64px; }
}
@media (min-width: 1040px) {
  #fonLcg .ugc__rail { grid-auto-columns: 22%; }
}

/* The heading sits on the page now, not on a card, so it lines up with the
   section rather than floating in the middle of one. */
#fonLcg .ugc .ugc__head {
  align-items: flex-start; text-align: left;
  margin-bottom: clamp(14px, 1.8vw, 20px);
}


/* THE FADE WAS EATING THE FIRST FRAME. The mask ramps from the very edge of the
   rail, but the rail also pads itself by a gutter — so the first video starts
   20px in, which was half way through a 40px ramp, and it opened greyed out
   before anyone had scrolled anything. The ramp now finishes inside the gutter,
   so it softens the cut without touching the content. */
#fonLcg .ugc__rail { --ugc-fade: 16px; }
@media (min-width: 700px) { #fonLcg .ugc__rail { --ugc-fade: 26px; } }


/* THE VIDEO WALL MARQUEE THAT WAS HERE IS REVERTED.
   It cloned the six cells and translated the track, the same way the review row
   works. The review row is a scroller at every width; this rail is NOT — above
   1040px it is grid-template-columns: repeat(6, 1fr), a six-up grid. Twelve
   cells in six columns, with width:max-content on top, collapsed the row and
   the videos disappeared entirely.

   Moving it properly means reworking the desktop grid into a scroller first,
   which is a real change to a working component rather than an addition to it.
   Left still until that is worth doing. */




/* The 100vw rule stays as a no-JS fallback, but it is no longer the mechanism.
   It assumes the form’s parent is centred in the viewport, which .offer__right
   is not obliged to be, and on a real handset the form came out offset to the
   right by exactly the column’s own offset. The script measures and overrides
   this inline; if the script never runs, this is still better than a gutter. */
@media (max-width: 899.98px) {
  #fonLcg .offer__right .cfg { max-width: none; }
}


/* ==========================================================================
   THE TRUST CARD
   Built to the supplied design, in ink and the page’s blue rather than the
   reference’s green — green is not a colour this page speaks anywhere else,
   and a whole card of it would read as another brand’s block dropped in.

   Three bands, divided by rules rather than gaps, so it reads as one object:
   the two ratings and who gave them, the three guarantees, and the closing
   pair. Mobile-first — everything stacks by default and the columns only
   appear when there is room, so nothing is being undone at a breakpoint.
   ========================================================================== */
#fonLcg .trust {
  background: var(--card);
  border: 1px solid var(--card-edge);
  border-radius: var(--r-lg);
  overflow: hidden;
}

/* --- band 1: the two ratings --- */
#fonLcg .trust__top {
  display: grid; gap: 20px;
  padding: clamp(20px, 2.4vw, 30px);
}
#fonLcg .trust__big { display: flex; align-items: center; gap: 12px; margin: 0 0 9px; }
#fonLcg .trust__num {
  font-size: clamp(38px, 4.6vw, 56px); font-weight: 700;
  letter-spacing: -.04em; line-height: .9; color: var(--fg);
}
#fonLcg .trust__stars { color: var(--star); font-size: clamp(17px, 1.9vw, 23px); letter-spacing: .1em; }
#fonLcg .trust__src {
  display: flex; align-items: center; gap: 8px; margin: 0;
  font-size: clamp(13px, 1.15vw, 15px); color: var(--fg-mut);
}
#fonLcg .trust__src b { font-weight: 600; color: var(--fg); }
#fonLcg .trust__src i { font-style: normal; color: var(--rule-str); }
#fonLcg .trust__mk { flex: none; width: 20px; height: 20px; }

#fonLcg .trust__g { display: flex; align-items: center; gap: 14px; }
#fonLcg .trust__chip {
  flex: none; width: clamp(46px, 4.6vw, 58px); aspect-ratio: 1;
  border-radius: 50%; background: #FFFFFF;
  border: 1px solid var(--card-edge);
  display: grid; place-items: center;
}
#fonLcg .trust__glogo { width: 56%; height: 56%; }
#fonLcg .trust__gtxt { margin: 0; display: grid; gap: 2px; }
#fonLcg .trust__gtxt b {
  font-size: clamp(20px, 2.2vw, 27px); font-weight: 700;
  letter-spacing: -.03em; line-height: 1.05; color: var(--fg);
}
#fonLcg .trust__gtxt span { font-size: clamp(13px, 1.15vw, 15px); color: var(--fg-mut); }

/* --- band 2: the three guarantees --- */
#fonLcg .trust__facts {
  list-style: none; margin: 0; padding: clamp(18px, 2.2vw, 26px) clamp(20px, 2.4vw, 30px);
  border-top: 1px solid var(--rule);
  display: grid; gap: 16px;
}
#fonLcg .trust__facts li {
  display: grid; grid-template-columns: auto minmax(0, 1fr);
  column-gap: 13px; row-gap: 1px; align-items: center;
}
#fonLcg .trust__ico {
  grid-column: 1; grid-row: 1 / span 2; align-self: center;
  width: clamp(38px, 3.8vw, 48px); aspect-ratio: 1; border-radius: 50%;
  background: rgba(38, 32, 20, .055);
  display: grid; place-items: center;
}
#fonLcg .trust__ico .trust__mk { width: 46%; height: 46%; }
#fonLcg .trust__facts b {
  grid-column: 2; font-size: clamp(16px, 1.5vw, 19px); font-weight: 700;
  letter-spacing: -.02em; line-height: 1.15; color: var(--fg);
}
#fonLcg .trust__facts li > span:not(.trust__ico) {
  grid-column: 2; font-size: clamp(12.5px, 1.1vw, 14px);
  line-height: 1.35; color: var(--fg-mut);
}

/* --- band 3: the closing pair, on a tint so it reads as a footer --- */
#fonLcg .trust__foot {
  display: grid; gap: 16px;
  padding: clamp(18px, 2.2vw, 26px) clamp(20px, 2.4vw, 30px);
  border-top: 1px solid var(--rule);
  background: rgba(38, 32, 20, .028);
}
#fonLcg .trust__q,
#fonLcg .trust__join { display: flex; align-items: center; gap: 13px; }
#fonLcg .trust__ico--sm { width: clamp(34px, 3.2vw, 42px); }
#fonLcg .trust__foot p { margin: 0; display: grid; gap: 2px; }
#fonLcg .trust__foot b {
  font-size: clamp(14px, 1.25vw, 16px); font-weight: 700;
  letter-spacing: -.015em; color: var(--fg);
}
#fonLcg .trust__foot span { font-size: clamp(12.5px, 1.1vw, 14px); line-height: 1.35; color: var(--fg-mut); }
#fonLcg .trust__faces { flex: none; display: inline-flex; }
/* aspect-ratio loses to a flex row’s default stretch, so the faces came out
   as ovals. Explicit height, and flex:none so they are not asked to grow. */
#fonLcg .trust__faces img {
  flex: none; align-self: center;
  width: clamp(34px, 3.2vw, 42px); height: clamp(34px, 3.2vw, 42px);
  border-radius: 50%; object-fit: cover; border: 2px solid var(--card);
}
#fonLcg .trust__faces img + img { margin-left: -12px; }

/* --- THE COLUMNS ARE THE LAYOUT, AT EVERY WIDTH ---
   They were a >=700px behaviour and everything stacked below it, which is the
   textbook answer and the wrong one here: this card’s whole idea is the
   comparison across a row — two ratings side by side, three guarantees side by
   side. Stacked it becomes a list of nine unrelated facts and stops being the
   thing that was designed. So the composition holds all the way down and the
   type, the marks and the gutters scale instead. */
#fonLcg .trust__top {
  grid-template-columns: 1fr 1fr;
  align-items: center;
  column-gap: clamp(12px, 3vw, 44px);
}
#fonLcg .trust__g { border-left: 1px solid var(--rule); padding-left: clamp(12px, 3vw, 44px); }
#fonLcg .trust__facts { grid-template-columns: repeat(3, 1fr); column-gap: 0; }
#fonLcg .trust__facts li + li {
  border-left: 1px solid var(--rule);
  padding-left: clamp(9px, 2.2vw, 30px);
}
#fonLcg .trust__facts li:not(:last-child) { padding-right: clamp(9px, 2.2vw, 30px); }
#fonLcg .trust__foot { grid-template-columns: 1fr 1fr; align-items: center; column-gap: clamp(12px, 3vw, 44px); }
#fonLcg .trust__join { border-left: 1px solid var(--rule); padding-left: clamp(12px, 3vw, 44px); }

/* THE PHONE STEP. Three columns across ~350px gives each fact about 100px once
   the rules and gutters are out, so everything comes down together rather than
   the layout coming apart: the mark to 28px, the figure to 13px, the label to
   10.5px over tighter leading. The label is allowed two lines — at this width
   that is the honest amount of room, and a wrapped caption still reads as one
   fact where a stacked column of nine does not. */
@media (max-width: 639.98px) {
  #fonLcg .trust__top { padding: 15px; gap: 0; }
  #fonLcg .trust__big { gap: 8px; margin-bottom: 6px; }
  #fonLcg .trust__num { font-size: 30px; }
  #fonLcg .trust__stars { font-size: 13px; letter-spacing: .06em; }
  #fonLcg .trust__src { font-size: 11px; gap: 6px; }
  #fonLcg .trust__src .trust__mk { width: 15px; height: 15px; }

  #fonLcg .trust__g { gap: 9px; }
  #fonLcg .trust__chip { width: 34px; }
  #fonLcg .trust__gtxt b { font-size: 17px; }
  #fonLcg .trust__gtxt span { font-size: 11px; }

  #fonLcg .trust__facts { padding: 14px 15px; }
  #fonLcg .trust__facts li { column-gap: 8px; align-items: start; }
  #fonLcg .trust__ico { width: 28px; align-self: start; }
  #fonLcg .trust__ico .trust__mk { width: 15px; height: 15px; }
  #fonLcg .trust__facts b { font-size: 13px; }
  #fonLcg .trust__facts li > span:not(.trust__ico) { font-size: 10.5px; line-height: 1.28; }

  #fonLcg .trust__foot { padding: 14px 15px; }
  #fonLcg .trust__q, #fonLcg .trust__join { gap: 9px; }
  #fonLcg .trust__ico--sm { width: 26px; }
  #fonLcg .trust__foot b { font-size: 11.5px; }
  #fonLcg .trust__foot span { font-size: 10.5px; line-height: 1.28; }
  #fonLcg .trust__faces img { width: 24px; height: 24px; border-width: 1.5px; }
  #fonLcg .trust__faces img + img { margin-left: -8px; }
}

/* The mark-above-figure block that was here is deleted, not overridden. It was
   contradicted by a later rule putting the marks back beside their figures, and
   two rules arguing at the same specificity is how a component ends up behaving
   differently depending on which one someone edits next. */


/* ==========================================================================
   THE SUBSCRIBE CARD: SPACING, AND A COLLAPSE THAT MOVES

   SPACING. .opt--sub .opt__head carried padding-bottom: 0 because the panel
   underneath supplied that space. Select one-time and the panel is gone, so
   nothing supplies it and the card shuts tight under the price while every
   other card in the stack keeps its padding. The head owns its own bottom
   padding now and the panel stops adding a top margin, so the two states are
   spaced the same and only the content differs.

   THE COLLAPSE. It was display:none, which cannot be transitioned — the panel
   vanished, everything below jumped up the height of four rows, and on a card
   the user is mid-comparison on that reads as a fault rather than a response.
   interpolate-size: allow-keywords is already enabled on #fonLcg for the FAQ,
   which makes height:auto animatable, so this collapses to its real height
   with no magic number to go stale when the copy changes.
   ========================================================================== */
#fonLcg .opt--sub .opt__head { padding-bottom: 14px; }
#fonLcg .sub__panel { margin-top: 0; }

@supports (interpolate-size: allow-keywords) {
  #fonLcg .opt--sub .sub__panel {
    display: block;
    height: auto;
    overflow: hidden;
    opacity: 1;
    transition: height .34s var(--ease), opacity .2s var(--ease);
  }
  #fonLcg .opt--sub:not(:has(input:checked)) .sub__panel {
    display: block;
    height: 0;
    opacity: 0;
  }
}

/* The faces sit where the glyph did, at the same box size so the two proof
   items keep one baseline. */
#fonLcg .pdp__faces { display: inline-flex; flex: none; }
#fonLcg .pdp__faces img {
  flex: none; width: 18px; height: 18px; border-radius: 50%;
  object-fit: cover; border: 1.5px solid var(--card);
}
#fonLcg .pdp__faces img + img { margin-left: -7px; }
@media (max-width: 639.98px) {
  #fonLcg .opt--sub .opt__head { padding-bottom: 13px; }
  #fonLcg .pdp__faces img { width: 16px; height: 16px; }
  #fonLcg .pdp__faces img + img { margin-left: -6px; }
}


/* ==========================================================================
   THE TRUST MARKS TAKE COLOUR, BY MEANING NOT BY DECORATION
   Green is anything VERIFIED — the Trustpilot shield, the refund guarantee,
   the batch testing, the quality rosette. Blue is PEOPLE — the member count,
   and blue is already the page’s own accent. Two colours, one rule, so the
   card can be read by shape before it is read by word.

   The discs tint to match at a tenth of the strength, which is what keeps four
   coloured marks from reading as four separate badges pasted on.
   ========================================================================== */
#fonLcg .trust__ico--g { background: rgba(14, 159, 110, .10); }
#fonLcg .trust__ico--b { background: rgba(1, 113, 227, .10); }

/* ==========================================================================
   THE REVIEW ROW DISSOLVES PROPERLY
   96px of fade against a 360px card is a quarter of one card — enough to see
   the ramp, not enough to hide the cut, so a card still met the edge with a
   readable word chopped through it. At 150px a card is most of the way gone
   before it reaches the edge, which is the difference between a row that
   continues and a row that has been trimmed.
   ========================================================================== */
@media (min-width: 1040px) {
  #fonLcg .rgrid:has(> [data-marquee="on"]) { --rgrid-fade: 150px; }
}
@media (min-width: 700px) and (max-width: 1039.98px) {
  #fonLcg .rgrid:has(> [data-marquee="on"]) { --rgrid-fade: 90px; }
}


/* With the mark on its own line the column can carry a step more type. */
@media (max-width: 639.98px) {
  #fonLcg .trust__facts li { row-gap: 3px; }
  #fonLcg .trust__facts b { font-size: 14px; }
  #fonLcg .trust__facts li > span:not(.trust__ico) { font-size: 11px; line-height: 1.3; }
  #fonLcg .trust__ico { width: 30px; }
  #fonLcg .trust__ico .trust__mk { width: 16px; height: 16px; }
}


/* ==========================================================================
   THE VIDEO WALL MOVES — SECOND ATTEMPT, WITH THE TWO LINES THE FIRST MISSED
   The first version set grid-auto-columns and width:max-content and the row
   collapsed to nothing. The reason: above 1040px this rail is NOT a scroller
   like the review row — it is grid-template-columns: repeat(6, 1fr) with
   grid-auto-flow: row. grid-auto-columns does not apply to a grid that has an
   explicit template, so the twelve cells went into six columns over two rows,
   and max-content on top left them with no width to occupy.

   Overriding BOTH — the template back to none, the flow back to column — is
   the whole fix. It was never the cloning or the translate.
   ========================================================================== */
#fonLcg .ugc__rail[data-marquee="on"] {
  --ugc-card: 212px;
  --ugc-gap: 12px;
  grid-template-columns: none;
  grid-auto-flow: column;
  grid-auto-columns: var(--ugc-card);
  gap: var(--ugc-gap);
  width: max-content;
  overflow: visible;
  scroll-snap-type: none;
  margin-inline: 0;
  padding-inline: 0;
  -webkit-mask-image: none;
          mask-image: none;
  animation: ugc-marquee calc(var(--ugc-n, 6) * 6.5s) linear infinite;
  will-change: transform;
}
@media (min-width: 700px)  { #fonLcg .ugc__rail[data-marquee="on"] { --ugc-card: 236px; } }
@media (min-width: 1040px) { #fonLcg .ugc__rail[data-marquee="on"] { --ugc-card: 262px; } }

/* Stopped whenever it is being read, tabbed through, or watched. A row still
   travelling under a playing video is the one case where the motion is in the
   way rather than an invitation. */
#fonLcg .ugc__rail[data-marquee="on"]:hover,
#fonLcg .ugc__rail[data-marquee="on"]:focus-within,
#fonLcg .ugc__rail[data-marquee="on"]:has(.is-playing) { animation-play-state: paused; }

#fonLcg .ugc:has([data-marquee="on"]) {
  --ugc-fade: 44px;
  overflow: hidden;
  margin-inline: calc(var(--gutter) * -1);
  padding-inline: var(--gutter);
  -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--ugc-fade), #000 calc(100% - var(--ugc-fade)), transparent);
          mask-image: linear-gradient(to right, transparent, #000 var(--ugc-fade), #000 calc(100% - var(--ugc-fade)), transparent);
}

@keyframes ugc-marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(calc(-50% - (var(--ugc-gap) / 2))); }
}

/* Without the animation the duplicates are just six videos shown twice. */
@media (prefers-reduced-motion: reduce) {
  #fonLcg .ugc__rail > [aria-hidden="true"] { display: none; }
}

/* ==========================================================================
   THE INGREDIENT CAPTIONS COME UP OUT OF THE GREY
   The dose leads in semibold ink and the benefit sat under it in --fg-soft,
   which is the tone used for footnotes and legal lines. These are not
   footnotes — they are the reason each ingredient is in the sachet. Moved to
   --fg-mut, the same weight of grey the body copy uses, so the pair reads as
   one statement at two levels rather than a claim and a disclaimer.
   ========================================================================== */
#fonLcg .ticks--check i { color: var(--fg-mut); }


/* ==========================================================================
   THE OFFER COLUMNS STOP BEING STRETCHED BY THEIR OWN CONTENT
   .gal__stage full-bleeds with margin-inline: -gutter, so it is one gutter
   wider than the column it sits in. A grid item defaults to min-width: auto,
   which means it cannot be narrower than its content — so the overflowing
   stage pushed .offer__left wider than its track, the column ran past the
   shell’s right padding, and the image ended up hard against one edge with a
   gutter on the other. Measured at 490px: the column began at 41 and ended at
   490, and the stage sat 16px from the left and 24px PAST the right.

   min-width: 0 is the fix and it is the root cause, not a nudge: the columns
   go back to their track width, the stage overflows visually as intended, and
   #fonLcg’s overflow-x: hidden clips it evenly on both sides. This is also why
   it looked correct on one phone and offset on another — which side won
   depended on how much the content overflowed by. */
#fonLcg .offer > * { min-width: 0; }
#fonLcg .offer__left,
#fonLcg .offer__right { min-width: 0; }


/* ==========================================================================
   THE FREQUENCY LIST WAS BEING CLIPPED BY THE COLLAPSE IT SITS INSIDE
   .sub__panel got overflow:hidden so its height transition would clip cleanly
   when the card is deselected. The dropdown lives inside that panel, so the
   moment it opened past the panel’s own height it was cut off — two options
   visible and the third sliced.

   The clip is only needed while the panel is CLOSED or closing. Open, there is
   nothing to clip and everything to show, so the open state goes back to
   visible and the closed state keeps hidden. The height still animates; it is
   only the overflow that stops being permanent.
   ========================================================================== */
@supports (interpolate-size: allow-keywords) {
  #fonLcg .opt--sub:has(input:checked) .sub__panel { overflow: visible; }
}
#fonLcg .opt--sub:has(input:checked) .opt__b,
#fonLcg .opt--sub:has(input:checked) .sub__freqwrap { overflow: visible; }

/* ==========================================================================
   ONE LEFT EDGE, INCLUDING THE PHOTOGRAPH
   The stage kept a full-bleed negative gutter on a phone while the thumbnails,
   the supplement-facts button, the ingredient lead and the bullets all sat on
   the column. So the image was a gutter wider than the five things under it,
   and the column read as misaligned even though everything except the image
   agreed. The photograph joins the column: one edge, top to bottom.
   ========================================================================== */
@media (max-width: 899.98px) {
  #fonLcg .gal__stage { margin-inline: 0; }
}


/* ==========================================================================
   MOTION SYSTEM
   Before this the page had ONE easing token and ONE duration token, and then
   eleven durations hardcoded across the stylesheet: .16, .18, .2, .22, .3,
   .32, .34, .52, .58, .6, .66. Nothing shared a rhythm, so a card answered in
   160ms and a panel in 340ms with no reason a person could feel. That is what
   reads as unfinished — not the speed of any one thing.

   Four durations, and they are deliberately slower than what was there. Fast
   motion reads as cheap: it looks like the browser doing something rather than
   the page responding. Slower, with a curve that decelerates hard, is what
   feels considered.

   Exits use a shorter step than entrances. Things should arrive with weight
   and leave without ceremony — an element taking as long to go as it took to
   come feels like it is arguing.
   ========================================================================== */
#fonLcg {
  --m1: 200ms;   /* taps, hovers, colour, borders            */
  --m2: 340ms;   /* small state changes, chevrons, fades     */
  --m3: 520ms;   /* panels, dropdowns, collapses             */
  --m4: 820ms;   /* scroll reveals — things arriving         */

  --ease-entrance: cubic-bezier(.16, 1, .3, 1);   /* decelerates hard */
  --ease-exit:     cubic-bezier(.5, 0, .9, .3);   /* leaves quickly   */
  --ease-move:     cubic-bezier(.4, 0, .2, 1);    /* repositioning    */
}

/* --- the scroll reveal, on the slow step --- */
.anim #fonLcg .rv {
  transition:
    opacity var(--m4) var(--ease-entrance),
    transform var(--m4) var(--ease-entrance);
  transition-delay: var(--d-i, 0ms);
}
.anim #fonLcg .rv--t { transition-duration: calc(var(--m4) - 140ms); }

/* --- panels: the FAQ and the subscribe collapse are the same gesture and
       should have taken the same time as each other all along --- */
@supports (interpolate-size: allow-keywords) {
  #fonLcg .faq__i::details-content {
    transition: height var(--m3) var(--ease-entrance), content-visibility var(--m3) allow-discrete;
  }
  #fonLcg .opt--sub .sub__panel {
    transition: height var(--m3) var(--ease-entrance), opacity var(--m2) var(--ease-entrance);
  }
  #fonLcg .opt--sub:not(:has(input:checked)) .sub__panel {
    transition: height var(--m2) var(--ease-exit), opacity calc(var(--m2) - 120ms) var(--ease-exit);
  }
}

/* --- state changes --- */
#fonLcg .opt--plan .opt__b,
#fonLcg .opt--fmt .opt__b,
#fonLcg .opt--flav .opt__b,
#fonLcg .opt--sm .opt__b {
  transition: border-color var(--m1) var(--ease-move), background-color var(--m1) var(--ease-move);
}
#fonLcg .faq__i summary::after { transition: transform var(--m2) var(--ease-entrance); }
#fonLcg .fx__btn::after { transition: transform var(--m2) var(--ease-entrance); }
#fonLcg .bbar { transition: transform var(--m3) var(--ease-move); }

@supports (transition-behavior: allow-discrete) {
  #fonLcg .opt__banner,
  #fonLcg .cfg__err,
  #fonLcg .rgrid,
  #fonLcg .gal__nav {
    transition: opacity var(--m2) var(--ease-entrance), display var(--m2) allow-discrete;
  }
}

/* ==========================================================================
   THE FREQUENCY LIST OPENS INSTEAD OF APPEARING
   It was a hidden toggle with no transition at all — the one control on this
   page that was actually built rather than inherited, and it had the crudest
   motion on it. It scales down from its own top edge, which is where a
   dropdown comes from, rather than fading in place like something unrelated.

   And its border comes back. The panel needs to read as sitting ABOVE the card
   rather than continuing it: a full-strength edge, the card radius, and a
   shadow with enough spread to lift it off the lime behind it.
   ========================================================================== */
#fonLcg .fx__list {
  border: 1px solid var(--rule-str);
  border-radius: var(--r-md);
  box-shadow: 0 18px 38px -14px rgba(23, 21, 15, .40), 0 2px 6px rgba(23, 21, 15, .08);
  transform-origin: top center;
  transform: scaleY(1) translateY(0);
  opacity: 1;
  transition:
    transform var(--m3) var(--ease-entrance),
    opacity var(--m2) var(--ease-entrance),
    display var(--m3) allow-discrete;
}
@supports (transition-behavior: allow-discrete) {
  #fonLcg .fx__list[hidden] {
    display: block;
    transform: scaleY(.94) translateY(-6px);
    opacity: 0;
    pointer-events: none;
    transition:
      transform var(--m2) var(--ease-exit),
      opacity calc(var(--m2) - 140ms) var(--ease-exit),
      display var(--m2) allow-discrete;
  }
  @starting-style {
    #fonLcg .fx__list { transform: scaleY(.94) translateY(-6px); opacity: 0; }
  }
}
/* The options do not scale with the panel, or the type stretches on the way in. */
#fonLcg .fx__opt { transition: background-color var(--m1) var(--ease-move), color var(--m1) var(--ease-move); }

/* The button keeps its own edge and corners — it is a control, and it should
   still look like one while its panel is open. */
#fonLcg .fx__btn { border: 1px solid var(--rule-str); border-radius: var(--r-sm); }
#fonLcg .fx__btn[aria-expanded="true"] { border-color: var(--blue); }

/* ==========================================================================
   AND A PRESS STATE, WHICH THE PAGE HAD NONE OF
   Nothing here responded to being touched. On a phone that is the single
   loudest cheap signal — louder than any entrance animation, because it is the
   only motion a person causes themselves rather than watches.
   ========================================================================== */
#fonLcg .btn:active,
#fonLcg .fx__btn:active,
#fonLcg .opt__b:active,
#fonLcg .ugc__i:active {
  transform: scale(.985);
  transition-duration: 90ms;
}
#fonLcg .btn, #fonLcg .opt__b, #fonLcg .ugc__i { transition-property: transform, border-color, background-color, box-shadow, color; }

@media (prefers-reduced-motion: reduce) {
  #fonLcg .btn:active,
  #fonLcg .fx__btn:active,
  #fonLcg .opt__b:active,
  #fonLcg .ugc__i:active { transform: none; }
}


/* ==========================================================================
   THE OPEN DROPDOWN HAS TO OUTRANK THE CARD BELOW IT
   z-index: 40 on the panel is meaningless if its own card does not outrank the
   one-time card that follows it in the DOM — a later sibling paints over an
   earlier one whatever the child says. The whole option is lifted while its
   panel is open, and put back when it closes so it is not permanently sitting
   on top of everything else in the stack.
   ========================================================================== */
#fonLcg .opt--sub:has(.fx__btn[aria-expanded="true"]) { position: relative; z-index: 60; }
#fonLcg .fx { z-index: 61; }
#fonLcg .fx__list { z-index: 62; }

/* ==========================================================================
   THE TRUST MARKS GO BLUE, AND THE DISCS WITH THEM
   Green was doing a job — verified vs people — but two accent colours in one
   card, neither of which the rest of the page uses, was a system invented for
   a single component. Blue is the page’s own accent and it is already carrying
   every link and the primary button, so the card now borrows rather than
   introduces. Google’s G keeps its colour and the rating keeps its gold: those
   two are identification, not decoration.
   ========================================================================== */
#fonLcg .trust__ico--b { background: rgba(1, 113, 227, .09); }

/* ==========================================================================
   THE TRUST CARD COMES DOWN A STEP ON A PHONE
   Same composition — that was the point — but the labels were wrapping to two
   and three lines while the figures sat on one, so the three columns lost their
   shared baseline and the card read as ragged rather than tight. Everything
   drops together so the proportions hold.
   ========================================================================== */
@media (max-width: 639.98px) {
  #fonLcg .trust__top { padding: 13px 13px 12px; }
  #fonLcg .trust__num { font-size: 26px; }
  #fonLcg .trust__stars { font-size: 11px; }
  #fonLcg .trust__src { font-size: 10px; gap: 5px; }
  #fonLcg .trust__src .trust__mk { width: 13px; height: 13px; }
  #fonLcg .trust__chip { width: 30px; }
  #fonLcg .trust__gtxt b { font-size: 15px; }
  #fonLcg .trust__gtxt span { font-size: 10px; }
  #fonLcg .trust__g { gap: 8px; }

  #fonLcg .trust__facts { padding: 12px 13px; }
  #fonLcg .trust__ico { width: 26px; }
  #fonLcg .trust__ico .trust__mk { width: 14px; height: 14px; }
  #fonLcg .trust__facts b { font-size: 12.5px; }
  #fonLcg .trust__facts li > span:not(.trust__ico) { font-size: 10px; line-height: 1.26; }
  #fonLcg .trust__facts li + li { padding-left: 8px; }
  #fonLcg .trust__facts li:not(:last-child) { padding-right: 8px; }

  #fonLcg .trust__foot { padding: 12px 13px; }
  #fonLcg .trust__ico--sm { width: 24px; }
  #fonLcg .trust__foot b { font-size: 10.5px; }
  #fonLcg .trust__foot span { font-size: 10px; line-height: 1.26; }
  #fonLcg .trust__faces img { width: 21px; height: 21px; }
  #fonLcg .trust__faces img + img { margin-left: -7px; }
  #fonLcg .trust__q, #fonLcg .trust__join { gap: 8px; }
  #fonLcg .trust__join { padding-left: 10px; }
}


/* THE VIDEO RAIL LOSES ITS EDGE FADE. A mask that dissolves the frames is right
   for the written reviews — those are blocks of text, and half a sentence at the
   edge reads as broken. These are faces. A half-visible face reads perfectly
   well as a face, and fading it out reads as the row being switched off rather
   than continuing. The clip stays; only the dissolve goes. */
#fonLcg .ugc:has([data-marquee="on"]) {
  -webkit-mask-image: none;
          mask-image: none;
}


/* ==========================================================================
   THE PHONE GUTTER COMES IN, SO THE IMAGE CAN GO BACK OUT
   Aligning the gallery to the column was the right call and it was paid for in
   the wrong currency: the photograph lost a gutter each side and came out 40px
   narrower, which is not what “align these” asked for. Alignment says everything
   shares an edge — it does not say which edge.

   So the edge moves outward instead. 20px to 14px on a phone gives the image,
   the thumbnails, the button, the bullets and the wordmark 12px more width
   each, all still on one line. Text at 14px from the glass is tight but it is
   the same 14px the buy box already uses inside its own full-bleed, so the two
   halves of the offer finally agree with each other.
   ========================================================================== */
@media (max-width: 639.98px) {
  #fonLcg { --gutter: 14px; }
}


/* ==========================================================================
   THE MARKS GO BACK BESIDE THE FIGURES ON A PHONE
   They were stacked above because three columns across ~350px left each fact
   about 100px and a mark beside the text took a third of it. That solved the
   wrapping and broke the brief: the card is supposed to be the desktop
   composition at a smaller size, and mark-above-figure is a different
   composition, not a smaller one.

   So they sit beside the text as they do everywhere else, and the labels are
   allowed their two lines. Desktop wraps “members taking FON daily” to two
   lines as well — the reference does too — so this is the design behaving
   consistently rather than the phone failing. */
@media (max-width: 639.98px) {
  #fonLcg .trust__facts li {
    grid-template-columns: auto minmax(0, 1fr);
    row-gap: 1px;
    align-items: center;
  }
  #fonLcg .trust__ico {
    grid-column: 1;
    grid-row: 1 / span 2;
    align-self: center;
  }
  #fonLcg .trust__facts b,
  #fonLcg .trust__facts li > span:not(.trust__ico) { grid-column: 2; }

  /* Tighter again, since the mark is taking width back from the label. */
  #fonLcg .trust__ico { width: 24px; }
  #fonLcg .trust__ico .trust__mk { width: 13px; height: 13px; }
  #fonLcg .trust__facts li { column-gap: 7px; }
  #fonLcg .trust__facts b { font-size: 12px; }
  #fonLcg .trust__facts li > span:not(.trust__ico) { font-size: 9.5px; line-height: 1.25; }
  #fonLcg .trust__facts li + li { padding-left: 7px; }
  #fonLcg .trust__facts li:not(:last-child) { padding-right: 7px; }
}


/* ==========================================================================
   THE TRUST CARD COMES DOWN ANOTHER STEP ON A PHONE
   The composition is right and the type is still riding it: three labels were
   wrapping while their figures sat on one line, so each column had a different
   height and the row lost the baseline that makes three facts read as three
   facts. Everything drops together — figures and labels in the same proportion
   — so the card gets smaller rather than getting squashed.

   9px is small, and it is the right small: these are captions under figures,
   the figure is what is being read, and the caption only has to be legible
   enough to say which figure it is.
   ========================================================================== */
@media (max-width: 639.98px) {
  #fonLcg .trust__top { padding: 12px 12px 11px; }
  #fonLcg .trust__num { font-size: 23px; }
  #fonLcg .trust__stars { font-size: 10px; }
  #fonLcg .trust__src { font-size: 9.5px; gap: 5px; }
  #fonLcg .trust__src .trust__mk { width: 12px; height: 12px; }
  #fonLcg .trust__chip { width: 27px; }
  #fonLcg .trust__gtxt b { font-size: 13.5px; }
  #fonLcg .trust__gtxt span { font-size: 9.5px; }

  #fonLcg .trust__facts { padding: 11px 12px; }
  #fonLcg .trust__ico { width: 22px; }
  #fonLcg .trust__ico .trust__mk { width: 12px; height: 12px; }
  #fonLcg .trust__facts li { column-gap: 6px; }
  #fonLcg .trust__facts b { font-size: 11px; }
  #fonLcg .trust__facts li > span:not(.trust__ico) { font-size: 9px; line-height: 1.22; }
  #fonLcg .trust__facts li + li { padding-left: 6px; }
  #fonLcg .trust__facts li:not(:last-child) { padding-right: 6px; }

  #fonLcg .trust__foot { padding: 11px 12px; }
  #fonLcg .trust__ico--sm { width: 22px; }
  #fonLcg .trust__foot b { font-size: 10px; }
  #fonLcg .trust__foot span { font-size: 9px; line-height: 1.22; }
  #fonLcg .trust__faces img { width: 19px; height: 19px; border-width: 1.5px; }
  #fonLcg .trust__faces img + img { margin-left: -6px; }
  #fonLcg .trust__q, #fonLcg .trust__join { gap: 7px; }
  #fonLcg .trust__join { padding-left: 9px; }
}


/* The flavour swap line holds one line. Split in two, “guaranteed.” sat alone on
   the second row reading as a separate promise rather than the tail of the
   sentence it belongs to. */
#fonLcg .cfg__note { white-space: nowrap; }
@media (max-width: 639.98px) {
  #fonLcg .cfg__note { font-size: clamp(9.5px, 3.05vw, 12.5px); }
}


/* ==========================================================================
   THE FIELDSET WAS WEARING ITS BROWSER DEFAULTS
   Measured at 390px: .cfg sits 0-390, the fieldset 16-374 like everything else,
   and then the legend and every option inside it 30-360. Fourteen pixels further
   in on each side, so the format, flavour and supply cards came out 330 wide
   while the summary, the CTA, the badges and the fine print underneath were all
   358 — one column of controls, two different widths, and the group that matters
   most was the narrow one.

   That is <fieldset>: the UA sheet gives it padding-block-start .35em,
   padding-inline .75em and a 2px groove border, and none of it had been reset.
   It is also min-width: min-content by default, which is its own trap in a grid.
   Reset properly rather than nudged, so the fieldset contributes nothing but
   grouping — which is the only reason it is there.
   ========================================================================== */
#fonLcg .cfg__f {
  margin: 0;
  padding: 0;
  border: 0;
  min-width: 0;
}
#fonLcg .cfg__lg { padding-inline: 0; }


/* ==========================================================================
   THE THREE STEPS NEED AIR BETWEEN THEM
   Format, flavour and supply are three separate decisions, and they were
   running into each other: the swap-flavours note sat almost against the next
   legend, so “PICK YOUR SUPPLY” read as part of the flavour group rather than
   the start of a new one. The gap between groups is now clearly larger than
   the gap inside one, which is the only thing that tells a reader where a
   group ends.
   ========================================================================== */
#fonLcg .cfg__f { margin-bottom: clamp(26px, 3vw, 34px); }
#fonLcg .cfg__lg { margin-bottom: 11px; }
#fonLcg .cfg__note { margin: 11px 0 0; }
@media (max-width: 639.98px) {
  #fonLcg .cfg__f { margin-bottom: 24px; }
  #fonLcg .cfg__lg { margin-bottom: 10px; }
  #fonLcg .cfg__opts { gap: 7px; }
}


/* ==========================================================================
   THE TWO REVIEW ROWS RUN TO THE EDGE OF THE SCREEN, AND DISSOLVE THERE
   Both rows bled by exactly one gutter — `margin-inline: calc(var(--gutter) *
   -1)` reaches the shell's PADDING box, not the viewport. Under 1300px that is
   the same thing; over it the shell is centred and the row stopped hundreds of
   pixels short of the edge, with a card sliced clean through by the container.
   A row whose whole argument is "this keeps going" ending in a hard vertical
   cut in the middle of the page reads as a broken layout, not as a rail.

   `calc(50% - 50vw)` is the escape: 50% resolves against the shell's content
   box, so the margin is exactly the distance from the shell's centre to the
   viewport's, whatever the shell's max-width is doing. #fonLcg already carries
   overflow-x: hidden, so the ~half-scrollbar of 100vw overhang is clipped
   evenly on both sides rather than opening a horizontal scrollbar.

   The fade then does the ending. It is measured off the viewport, so the last
   card visibly leaves rather than being amputated by a box edge. One fade for
   both rows: this supersedes --rgrid-fade and --ugc-fade, which were sized for
   a row that stopped at the shell's edge and are too narrow for one that now
   crosses the whole screen.
   ========================================================================== */
#fonLcg .rgrid:has(> [data-marquee="on"]),
#fonLcg .ugc__band:has([data-marquee="on"]) {
  --band-fade: clamp(22px, 5.5vw, 120px);
  margin-inline: calc(50% - 50vw);
  padding-inline: 0;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--band-fade), #000 calc(100% - var(--band-fade)), transparent);
          mask-image: linear-gradient(to right, transparent, #000 var(--band-fade), #000 calc(100% - var(--band-fade)), transparent);
}

/* .ugc hands the bleed over to .ugc__band. It has to stop doing it itself, or
   the heading inside it goes to the edge of the screen with the videos. */
#fonLcg .ugc:has([data-marquee="on"]) {
  overflow: visible;
  margin-inline: 0;
  padding-inline: 0;
  -webkit-mask-image: none;
          mask-image: none;
}

/* Standing still, the rows are swipe rails again and a rail that starts under
   the edge of the screen has nothing to grab. The gutter comes back with them. */
@media (prefers-reduced-motion: reduce) {
  #fonLcg .rgrid:has(> [data-marquee="on"]),
  #fonLcg .ugc__band:has([data-marquee="on"]) {
    margin-inline: calc(var(--gutter) * -1);
    padding-inline: var(--gutter);
    -webkit-mask-image: none;
            mask-image: none;
  }
}

/* --------------------------------------------------------------------------
   THE RATING HEADING STOPS LOOKING INDENTED
   It was left-aligned to the shell's content column while the video row beside
   it bled a gutter further out, so the heading sat inset from the only thing
   near it and read as a mis-indent on a phone and on a desktop alike. Now that
   both rows run the full width of the screen there is no left edge left to
   align to, and the section's own h2 above is centred — so the rating, the
   count and the link centre with it. The block relates to the heading it sits
   under and to two symmetrical rows, instead of to nothing.
   -------------------------------------------------------------------------- */
#fonLcg .ugc .ugc__head {
  align-items: center;
  text-align: center;
}

/* ==========================================================================
   EVERY REVIEW CARD IS BUILT TO THE SAME PLAN
   The cards were the same width and nothing else. A one-line headline against
   a two-line one started the body at a different height; a four-line body
   against a six-line one finished it at a different height; and because the
   body was `flex: 1` with a max-height capping it, the short ones could not
   stretch to push the footer down — so the avatar rows landed wherever the
   copy happened to stop. Six cards, six internal layouts, side by side in a
   moving row where they are directly compared.

   Each part now reserves its space whether it needs it or not: the headline
   always occupies two lines, the body always occupies its clamp, and the
   footer is pinned to the bottom. The card height does not change — the row
   was already as tall as its tallest card — but every card now uses that
   height the same way, so stars, headline, body and footer line up straight
   across the row.
   ========================================================================== */
#fonLcg .rcard__t {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  min-height: calc(1.3em * 2);
}

/* min-height AND max-height off the same two variables, so the box, the clamp
   and the reserved space can never disagree the way they did before. */
#fonLcg .rcard__b {
  --rb-lines: 6;
  --rb-lh: 1.58;
  flex: none;
  line-height: var(--rb-lh);
  -webkit-line-clamp: var(--rb-lines);
  min-height: calc(1em * var(--rb-lh) * var(--rb-lines));
  max-height: calc(1em * var(--rb-lh) * var(--rb-lines));
}
@media (max-width: 1039.98px) {
  #fonLcg .rcard__b { --rb-lines: 5; --rb-lh: 1.5; }
}

#fonLcg .rcard__f { margin-top: auto; }

/* The one line that could still wrap and put the footers back out of step. A
   flavour long enough to overflow now truncates instead of taking a new row. */
#fonLcg .rcard__meta {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Its own line under the buyer line, and it holds that line's height even when
   an entry carries no date — otherwise a dateless review shortens one footer
   and the problem comes straight back. */
#fonLcg .rcard__when {
  min-height: 1.3em;
  margin-top: 1px;
  color: var(--fg-soft);
}

/* "Works out to" summary row — HIDDEN 2026-09-13 on request.

   Hidden, not removed. The configurator reads #cfgDay with
   getElementById in two places and writes to it on every update; deleting
   the element would make those null and take the whole buy box down with
   it. :has() targets that one row so its siblings — "Your selection" and
   "Price" — are untouched.

   nmn-lander.css is deliberately NOT in this set. */
#fonLcg .cfg__sumrow:has(#cfgDay) { display: none; }

/* ==========================================================================
   ANGLE LANDERS — ACCESSIBILITY & INPUT LAYER
   ==========================================================================
   Applies to the four angle landers only (gut-health, perimenopause,
   menopause, plant-based), via the section wrapper class the schema emits.
   The GLP-1 v2 lander and onefit-subscription share this stylesheet and are
   deliberately NOT in the selector list - they keep their current behaviour.

   Audited against the ui-ux-pro-max rule set (119 rules; Critical/High only).
   Already passing before this layer, so NOT re-implemented here:
     * prefers-reduced-motion  (7 existing blocks)
     * :focus-visible          (11 existing rules)
     * scroll-behavior: smooth
     * every <img> carries alt + explicit width/height (no CLS, no missing alt)
     * .btn already exceeds the 24px WCAG 2.2 target minimum at 52px

   What follows are the four gaps the audit actually found.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg,
.section-onefit-perimenopause #fonLcg,
.section-onefit-menopause #fonLcg,
.section-onefit-endometriosis #fonLcg {

  /* --- 1 · HOVER IS NOT A TAP ------------------------------------------
     16 :hover rules existed with no @media (hover: hover) guard anywhere. On
     a touch device an unguarded :hover latches after a tap and stays stuck
     until the user taps elsewhere, which reads as a broken selected state.
     The guarded versions are declared below, outside this block, because a
     media query cannot be nested here without changing the cascade. */

  /* --- 2 · TEXT REFLOW AT ZOOM (the rule set's one Critical) -----------
     25 white-space:nowrap declarations. Most are correct - a price or a
     product name should not break - but nowrap on a run of prose clips it at
     200% zoom or 320px, which is the WCAG 1.4.10 failure. The overrides are
     scoped to the prose classes only, leaving prices and pack names alone. */
}

/* 1 · Hover effects only where hover genuinely exists. On touch, the
   underlying non-hover state stands and the :active feedback does the work. */
@media (hover: none) {
  .section-onefit-busy-mums #fonLcg .hdr__nav a:hover,
  .section-onefit-gut-health #fonLcg .hdr__nav a:hover,
  .section-onefit-perimenopause #fonLcg .hdr__nav a:hover,
  .section-onefit-menopause #fonLcg .hdr__nav a:hover,
  .section-onefit-endometriosis #fonLcg .hdr__nav a:hover {
    border-bottom-color: transparent;
  }
}

/* Touch feedback on the press, not on release - the interface should answer
   the finger immediately rather than waiting for the tap to complete. */
@media (hover: none) {
  .section-onefit-busy-mums #fonLcg .btn:active,
  .section-onefit-gut-health #fonLcg .btn:active,
  .section-onefit-perimenopause #fonLcg .btn:active,
  .section-onefit-menopause #fonLcg .btn:active,
  .section-onefit-endometriosis #fonLcg .btn:active {
    transform: scale(0.985);
    transition: transform 100ms ease-out;
  }
}
@media (hover: none) and (prefers-reduced-motion: reduce) {
  .section-onefit-busy-mums #fonLcg .btn:active,
  .section-onefit-gut-health #fonLcg .btn:active,
  .section-onefit-perimenopause #fonLcg .btn:active,
  .section-onefit-menopause #fonLcg .btn:active,
  .section-onefit-endometriosis #fonLcg .btn:active { transform: none; }
}

/* 2 · Prose must reflow. Scoped to running text; prices, pack names and the
   promo strip keep their nowrap deliberately. */
.section-onefit-busy-mums #fonLcg .body,
.section-onefit-gut-health #fonLcg .body,
.section-onefit-perimenopause #fonLcg .body,
.section-onefit-menopause #fonLcg .body,
.section-onefit-endometriosis #fonLcg .body,
.section-onefit-busy-mums #fonLcg .h2,
.section-onefit-gut-health #fonLcg .h2,
.section-onefit-perimenopause #fonLcg .h2,
.section-onefit-menopause #fonLcg .h2,
.section-onefit-endometriosis #fonLcg .h2,
.section-onefit-busy-mums #fonLcg .hero__risk > span,
.section-onefit-gut-health #fonLcg .hero__risk > span,
.section-onefit-perimenopause #fonLcg .hero__risk > span,
.section-onefit-menopause #fonLcg .hero__risk > span,
.section-onefit-endometriosis #fonLcg .hero__risk > span {
  white-space: normal;
  overflow-wrap: break-word;
}

/* 3 · Long tokens must not force horizontal overflow. Nothing on these pages
   currently does, but the ingredient panels and FAQ carry long chemical names
   (Lactobacillus paracasei, creatine monohydrate) that would at 320px. */
.section-onefit-busy-mums #fonLcg .faq__a,
.section-onefit-gut-health #fonLcg .faq__a,
.section-onefit-perimenopause #fonLcg .faq__a,
.section-onefit-menopause #fonLcg .faq__a,
.section-onefit-endometriosis #fonLcg .faq__a,
.section-onefit-busy-mums #fonLcg .facts,
.section-onefit-gut-health #fonLcg .facts,
.section-onefit-perimenopause #fonLcg .facts,
.section-onefit-menopause #fonLcg .facts,
.section-onefit-endometriosis #fonLcg .facts {
  overflow-wrap: break-word;
}

/* 4 · The two user preferences the sheet did not answer at all.
   Reduced transparency: the translucent chrome becomes solid rather than
   frosted, because a blur is exactly what this preference exists to remove. */
@media (prefers-reduced-transparency: reduce) {
  .section-onefit-busy-mums #fonLcg .hdr,
  .section-onefit-gut-health #fonLcg .hdr,
  .section-onefit-perimenopause #fonLcg .hdr,
  .section-onefit-menopause #fonLcg .hdr,
  .section-onefit-endometriosis #fonLcg .hdr,
  .section-onefit-busy-mums #fonLcg .buybar,
  .section-onefit-gut-health #fonLcg .buybar,
  .section-onefit-perimenopause #fonLcg .buybar,
  .section-onefit-menopause #fonLcg .buybar,
  .section-onefit-endometriosis #fonLcg .buybar {
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    background: var(--page, #FFFFFC);
  }
}

/* Increased contrast: borders become defined rather than hairline, and the
   muted greys used for secondary copy step up to the primary ink. */
@media (prefers-contrast: more) {
  .section-onefit-busy-mums #fonLcg .panel,
  .section-onefit-gut-health #fonLcg .panel,
  .section-onefit-perimenopause #fonLcg .panel,
  .section-onefit-menopause #fonLcg .panel,
  .section-onefit-endometriosis #fonLcg .panel,
  .section-onefit-busy-mums #fonLcg .faq__i,
  .section-onefit-gut-health #fonLcg .faq__i,
  .section-onefit-perimenopause #fonLcg .faq__i,
  .section-onefit-menopause #fonLcg .faq__i,
  .section-onefit-endometriosis #fonLcg .faq__i {
    border: 1px solid currentColor;
  }
  .section-onefit-busy-mums #fonLcg .panel__f,
  .section-onefit-gut-health #fonLcg .panel__f,
  .section-onefit-perimenopause #fonLcg .panel__f,
  .section-onefit-menopause #fonLcg .panel__f,
  .section-onefit-endometriosis #fonLcg .panel__f,
  .section-onefit-busy-mums #fonLcg .hero__risk,
  .section-onefit-gut-health #fonLcg .hero__risk,
  .section-onefit-perimenopause #fonLcg .hero__risk,
  .section-onefit-menopause #fonLcg .hero__risk,
  .section-onefit-endometriosis #fonLcg .hero__risk {
    color: var(--fg, #14140F);
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE SEVEN, COMPRESSED
   ==========================================================================
   The complaint was that the listicle scrolls forever. It does, and the cause
   is structural rather than editorial: the prose across all seven beats is
   only ~259 words. What makes it long is seven full-height two-column rows,
   each with up to 88px of column gap and 44px of block padding, stacked.

   So this shortens the SECTION, not the writing. Nothing is deleted - all
   seven beats, every panel row and every word survive - because each beat
   carries a distinct argument and the pages were commissioned on that
   structure.

   THE MOBILE CASE IS THE WORST ONE and it is worth naming. .blk__copy uses
   `display: contents` below 900px, which dissolves the copy wrapper so the
   number, heading, panel and paragraph become siblings in one column. Seven
   beats then unstack into 28 stacked blocks with a gap between each. That is
   the actual "so long" experience on a phone.

   Scoped to the four angle landers; the GLP-1 v2 lander and
   onefit-subscription share this sheet and keep their current spacing.
   ========================================================================== */

/* --- 1 · TIGHTEN THE VERTICAL RHYTHM ------------------------------------
   Roughly a third out of the per-beat padding and the wrapper padding. This
   alone is ~40% of the section's height on desktop. */
.section-onefit-busy-mums #fonLcg .seven,
.section-onefit-gut-health #fonLcg .seven,
.section-onefit-perimenopause #fonLcg .seven,
.section-onefit-menopause #fonLcg .seven,
.section-onefit-endometriosis #fonLcg .seven {
  padding-block: clamp(8px, 1.6vw, 24px);
}

.section-onefit-busy-mums #fonLcg .blk,
.section-onefit-gut-health #fonLcg .blk,
.section-onefit-perimenopause #fonLcg .blk,
.section-onefit-menopause #fonLcg .blk,
.section-onefit-endometriosis #fonLcg .blk {
  padding-block: clamp(14px, 1.5vw, 22px);
}

/* --- 2 · A HAIRLINE INSTEAD OF WHITESPACE -------------------------------
   With the padding halved the beats need a boundary that isn't empty space.
   A hairline reads as a sequence - a list you are progressing through -
   rather than seven separate screens, which also makes the run feel shorter
   than the same content spaced apart. */
.section-onefit-busy-mums #fonLcg .blk + .blk,
.section-onefit-gut-health #fonLcg .blk + .blk,
.section-onefit-perimenopause #fonLcg .blk + .blk,
.section-onefit-menopause #fonLcg .blk + .blk,
.section-onefit-endometriosis #fonLcg .blk + .blk {
  border-top: 1px solid var(--line, rgba(0,0,0,.08));
}
.section-onefit-busy-mums #fonLcg .blk:first-of-type,
.section-onefit-gut-health #fonLcg .blk:first-of-type,
.section-onefit-perimenopause #fonLcg .blk:first-of-type,
.section-onefit-menopause #fonLcg .blk:first-of-type,
.section-onefit-endometriosis #fonLcg .blk:first-of-type {
  border-top: 0;
}

/* --- 3 · CLOSE THE COLUMN GAP -------------------------------------------
   88px between copy and panel is a magazine spread measurement. At this
   density the two halves should read as one row. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .blk__in,
  .section-onefit-gut-health #fonLcg .blk__in,
.section-onefit-perimenopause #fonLcg .blk__in,
.section-onefit-menopause #fonLcg .blk__in,
.section-onefit-endometriosis #fonLcg .blk__in {
    gap: clamp(28px, 3vw, 48px);
    align-items: center;
  }
}

/* --- 4 · THE MOBILE FIX, WHICH IS THE REAL ONE --------------------------
   Re-forming .blk__copy into a block puts the number, heading and paragraph
   back into one unit with the panel beneath it, so a beat is one item in a
   list rather than four loose siblings. The gap then applies once per beat
   instead of between every element. */
@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .blk__copy,
  .section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    display: block;
  }
  .section-onefit-busy-mums #fonLcg .blk__in,
  .section-onefit-gut-health #fonLcg .blk__in,
.section-onefit-perimenopause #fonLcg .blk__in,
.section-onefit-menopause #fonLcg .blk__in,
.section-onefit-endometriosis #fonLcg .blk__in {
    gap: 16px;
  }
  .section-onefit-busy-mums #fonLcg .blk__n,
  .section-onefit-gut-health #fonLcg .blk__n,
.section-onefit-perimenopause #fonLcg .blk__n,
.section-onefit-menopause #fonLcg .blk__n,
.section-onefit-endometriosis #fonLcg .blk__n {
    margin-bottom: 8px;
  }
  .section-onefit-busy-mums #fonLcg .blk__copy .h2,
  .section-onefit-gut-health #fonLcg .blk__copy .h2,
.section-onefit-perimenopause #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
    font-size: 26px;
    line-height: 1.12;
    margin-bottom: 10px;
  }
  .section-onefit-busy-mums #fonLcg .blk__copy .body,
  .section-onefit-gut-health #fonLcg .blk__copy .body,
.section-onefit-perimenopause #fonLcg .blk__copy .body,
.section-onefit-menopause #fonLcg .blk__copy .body,
.section-onefit-endometriosis #fonLcg .blk__copy .body {
    font-size: 15px;
    line-height: 1.5;
    margin-top: 10px;
  }
  .section-onefit-busy-mums #fonLcg .blk,
  .section-onefit-gut-health #fonLcg .blk,
.section-onefit-perimenopause #fonLcg .blk,
.section-onefit-menopause #fonLcg .blk,
.section-onefit-endometriosis #fonLcg .blk {
    padding-block: 18px;
  }
}

/* --- 5 · DENSER PANELS --------------------------------------------------
   The tile rows carry most of each panel's height. Tighter padding on the
   rows and the panel itself, without touching the type size, since these
   panels replaced artwork and still have to carry the visual weight. */
.section-onefit-busy-mums #fonLcg .blk__panel .panel,
.section-onefit-gut-health #fonLcg .blk__panel .panel,
.section-onefit-perimenopause #fonLcg .blk__panel .panel,
.section-onefit-menopause #fonLcg .blk__panel .panel,
.section-onefit-endometriosis #fonLcg .blk__panel .panel {
  padding: clamp(16px, 1.8vw, 26px);
}
.section-onefit-busy-mums #fonLcg .blk__panel .tile,
.section-onefit-gut-health #fonLcg .blk__panel .tile,
.section-onefit-perimenopause #fonLcg .blk__panel .tile,
.section-onefit-menopause #fonLcg .blk__panel .tile,
.section-onefit-endometriosis #fonLcg .blk__panel .tile {
  padding-block: clamp(9px, 1vw, 13px);
}
.section-onefit-busy-mums #fonLcg .blk__panel .panel__t,
.section-onefit-gut-health #fonLcg .blk__panel .panel__t,
.section-onefit-perimenopause #fonLcg .blk__panel .panel__t,
.section-onefit-menopause #fonLcg .blk__panel .panel__t,
.section-onefit-endometriosis #fonLcg .blk__panel .panel__t {
  margin-bottom: clamp(10px, 1.1vw, 15px);
}

/* ==========================================================================
   ANGLE LANDERS — HERO, FULL-BLEED RIGHT
   ==========================================================================
   Reference: the Gruns nutrition-support lander. Image hard against the right
   edge of the viewport, copy in a narrower left column, no dead white.

   THE CAUSE OF THE DEAD SPACE, because it is not the image size. .hero__in
   sits inside .shell, which is max-width 1300px and centred. Past ~1300px the
   hero stops growing while the viewport keeps going, so a 1920px screen leaves
   ~310px of empty page to the right of the picture. Enlarging the image inside
   that box cannot fix it - the box has to break.

   The hero therefore opts out of .shell's centring and rebuilds as one
   asymmetric grid:

     [ gutter ][ copy, capped ][ image -> viewport edge ]

   The left gutter is max(--gh-edge, (100vw - 1300px) / 2), which IS the
   shell's own left margin, so the headline still sits on the same vertical
   line as every heading further down the page. The right column takes the rest
   and is bounded only by the viewport. No negative margins and no overflow
   tricks - the asymmetry is the grid itself.

   ON THE TYPE SCALE. An earlier version of this used clamp(38px, 5.2vw, 76px)
   for the display line, which resolves to ~100px at 1920px and swallowed the
   hero, pushing the CTA to the fold. This caps at 60px and scales at 3.4vw.

   Scoped to the four angle landers. The GLP-1 v2 lander and
   onefit-subscription share this sheet and keep their current hero.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
  /* Matches --gutter, but never less than the centred shell's own left
     margin, so the hero headline sits on the same vertical line as every
     heading further down the page. Below 1300px + gutters the max() falls
     back to the clamp and the hero keeps its edge gutter. */
  --gh-edge: max(var(--gutter), (100vw - var(--shell)) / 2 + var(--gutter));
}

@media (min-width: 900px) {

  /* The hero's own grid replaces the centred shell. */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    max-width: none;
    width: 100%;
    padding-inline: 0;
    margin-inline: 0;
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 520px)
      minmax(0, 1.06fr);
    column-gap: clamp(36px, 3.6vw, 64px);
    align-items: center;
  }

  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy { grid-column: 2; max-width: 520px; }
  .section-onefit-busy-mums #fonLcg .hero__art,
  .section-onefit-gut-health #fonLcg .hero__art,
.section-onefit-perimenopause #fonLcg .hero__art,
.section-onefit-menopause #fonLcg .hero__art,
.section-onefit-endometriosis #fonLcg .hero__art  { grid-column: 3; }

  /* ROUNDED ON THE INSIDE EDGE ONLY. A card floating in space reads as a
     component; a panel anchored to the viewport edge reads as art direction.
     Keeping the left corners round preserves the brand's rounded treatment
     while the right side simply leaves the page. */
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    aspect-ratio: auto;
    height: clamp(500px, 58vw, 720px);
    border-radius: var(--r-lg) 0 0 var(--r-lg);
  }

  /* The subject sits left-of-centre in the frame, so as the panel widens the
     crop pulls left to keep her face and the product in view rather than
     letting a centre-weighted cover push them off. */
  .section-onefit-busy-mums #fonLcg .hero__figure > img,
  .section-onefit-gut-health #fonLcg .hero__figure > img,
.section-onefit-perimenopause #fonLcg .hero__figure > img,
.section-onefit-menopause #fonLcg .hero__figure > img,
.section-onefit-endometriosis #fonLcg .hero__figure > img { object-position: 42% 18%; }

  /* Type: confident, not enormous. See the note above. */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(40px, 3.4vw, 60px);
    line-height: .98;
    letter-spacing: -.035em;
    text-wrap: balance;
  }
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(16px, 1.35vw, 20px);
    font-weight: 500;
    letter-spacing: .005em;
    line-height: 1.3;
  }
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    max-width: 38ch;
    font-size: clamp(15.5px, 1.1vw, 17.5px);
    line-height: 1.55;
  }
}

/* Very wide screens: cap the image so it stays a panel rather than a mural,
   and give the copy column the extra room instead. */
@media (min-width: 1600px) {
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 580px)
      minmax(0, 1000px);
  }
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy { max-width: 580px; }
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure { height: min(74vh, 760px); }
}

/* Tablet: rebalance the proportions rather than shrinking both columns. */
@media (min-width: 900px) and (max-width: 1099.98px) {
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns: minmax(24px, 1fr) minmax(0, 1.1fr) minmax(0, .9fr);
    column-gap: 32px;
  }
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy { max-width: none; }
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure { height: clamp(440px, 52vw, 540px); }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn { font-size: clamp(36px, 4.4vw, 48px); }
}

/* Mobile keeps the existing image-first order; only the crop changes, from a
   square to the 4:5 the photograph was actually shot at, which gives the
   subject room instead of cropping her to a letterbox. */
@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    aspect-ratio: 4 / 5;
    max-height: 64vh;
  }
  .section-onefit-busy-mums #fonLcg .hero__figure > img,
  .section-onefit-gut-health #fonLcg .hero__figure > img,
.section-onefit-perimenopause #fonLcg .hero__figure > img,
.section-onefit-menopause #fonLcg .hero__figure > img,
.section-onefit-endometriosis #fonLcg .hero__figure > img { object-position: 48% 16%; }
}

/* ==========================================================================
   ANGLE LANDERS — HERO CORRECTIONS
   ==========================================================================
   Two faults visible on the preview, both real.

   1 · THE SETUP LINE WAS STRUCK THROUGH. .hero__quote is inherited from the
   GLP-1 lander, where that span held the ad's own claim ("L-Carnitine is the
   new GLP-1") and was deliberately struck out so the page could refute it. On
   these four pages the same span is the SETUP half of a two-part headline -
   "You didn't eat anything." - so the strike made it read as retracted. The
   decoration is removed and the line is given its own colour instead.

   2 · THE LEFT GUTTER WAS EXPANDING. The grid was

       minmax(--gh-edge, 1fr)  minmax(0, 520px)  minmax(0, 1.06fr)

   A 1fr first track does not hold at the gutter width; it takes its share of
   whatever is left once the fixed 520px column is placed, so on a wide screen
   the copy got pushed toward the middle and a large band of empty page opened
   on the left. That is the "too much spacing on the left" in the screenshot,
   and it is also why the image never reached as far as the reference - the
   third track was competing with a growing first track.

   FIRST ATTEMPT, AND WHY IT WAS WRONG. The grid became

       max(--gh-edge, (100vw - 1300px)/2)   460px   1fr

   which fixed the gutter but handed ALL surplus width to the image. The wider
   the screen the more lopsided it got - roughly 38/62 against the reference's
   50/50 - and the copy ended up squeezed into a narrow column hard against the
   left edge, with the picture swallowing the right side.

   THE REFERENCE IS BALANCED, NOT IMAGE-DOMINANT. Gruns runs the two halves at
   about 50/50 and caps the picture so it reads as a contained slice. So:

       minmax(--gh-edge, 1fr)   560px   minmax(0, 50vw)

   The first track is flexible again, which is what gives the copy a real
   gutter to breathe in rather than pinning it to the edge. The copy column is
   wider at 560px so the headline sets on fewer lines. And the image is capped
   at 50vw, so it still bleeds to the right edge but stops taking every spare
   pixel - the balance holds at any width instead of drifting.
   ========================================================================== */

/* 1 · No strikethrough on the setup line. */
.section-onefit-busy-mums #fonLcg .hero__quote,
.section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
  text-decoration: none;
  color: var(--fg-mut, #5B5B50);
}

@media (min-width: 900px) {

  /* 2 · A fixed gutter, then the copy, then everything else to the image. */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 560px)
      minmax(0, 50vw);
    column-gap: clamp(32px, 3.4vw, 68px);
  }

  /* The picture fills its track and bleeds to the viewport edge. */
  .section-onefit-busy-mums #fonLcg .hero__art,
  .section-onefit-gut-health #fonLcg .hero__art,
.section-onefit-perimenopause #fonLcg .hero__art,
.section-onefit-menopause #fonLcg .hero__art,
.section-onefit-endometriosis #fonLcg .hero__art   { width: 100%; }
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure   { width: 100%; }
}

@media (min-width: 1600px) {
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 620px)
      minmax(0, 48vw);
  }
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy { max-width: 560px; }
}

/* ==========================================================================
   MENOPAUSE — THE HERO COPY COLUMN TAKES THE WIDTH THE HEADLINE NEEDS
   ==========================================================================
   The turn is four groups and it was being sized by the COLUMN, not by its
   own measure. The rule above lands the copy at 560px inside a 620px track,
   so --gh-turn-measure never got to decide anything: at 62px a 13.8em measure
   wants 856px and the 560px cap simply wrapped the longest group.

   That is the real reason the headline kept coming back small. The measure
   was doing arithmetic against a column it did not have.

   THE RATIO IS 0.54em PER CHARACTER. Earlier passes guessed 0.50 and then
   0.58; both were wrong and both cost a round. 0.54 is measured off the
   rendered page: "your body may be losing", 23 characters, spans about 646px
   at 52px type. Use that figure, not an estimate.

   At 0.54 the longest group needs 12.42em and the shortest adjacent pair
   would fit at 16.20em, so 12.6em holds four lines with a fifth of an em of
   headroom. The column then sets the size: 12.6em x 63px is 794px, just
   inside the 800px track.

   The image track gives up the difference and can afford it. At a 1920
   viewport this leaves 1040px for the figure, which is a portrait with
   headroom at both sides, and the hero reads copy-first anyway.

   This is scoped to menopause alone. The other three landers have shorter
   turns that already fit 560px, and widening their copy would only pull the
   image in for nothing. */
@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-menopause #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 800px)
      minmax(0, 42vw);
  }

  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-menopause #fonLcg .hero__copy {
    max-width: 800px;
  }
}

/* ENDOMETRIOSIS — SAME WIDENING, SAME REASON.
   This hero's turn is four groups too, and it was hitting the same 560px cap
   that was quietly sizing the menopause headline. The window here is wider
   (the four groups are close in length, 18 to 22 characters), so the measure
   is not the constraint; the column is. 800px lets the turn run at 65px.

   The setup line above it is long ("Around 1 in 10 women of reproductive age
   live with endometriosis.") and it is deliberately NOT in the cap, per the
   note on .hero__turn: it is a single short-set line that already wraps
   where it should, and constraining it would only break it worse. */
@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 800px)
      minmax(0, 42vw);
  }

  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-endometriosis #fonLcg .hero__copy {
    max-width: 800px;
  }
}

/* ==========================================================================
   ANGLE LANDERS — HERO, PULLED UP AND TIGHTENED
   ==========================================================================
   Three faults left on the preview, all in the hero.

   1 · A BAND OF EMPTY PAGE ABOVE THE HERO. Two paddings stack there: .section
   contributes its own block padding, and .hero adds padding-top up to 46px on
   top of it. On the reference the picture starts immediately under the bar.

   2 · THE IMAGE DID NOT REACH THE NAVBAR. Consequence of the same stack -
   .hero__art sits inside the padded section, so the figure could never touch
   the chrome above it however tall it was made.

   3 · THE LEFT COLUMN READ AS LOOSE. The proof pill, headline, lead and CTA
   each carried generous margins tuned for a 1.04fr column; in a 560px column
   with the hero pulled up they add to a lot of vertical drift, which is the
   "messy" in the report. The steps below are taken from the GLP-1 base values
   and tightened by roughly a third, keeping the same proportions between them
   rather than collapsing everything to a single gap.
   ========================================================================== */

@media (min-width: 900px) {

  /* 1 + 2 · The hero starts at the bar. Its own top padding goes entirely,
     and the section padding above it with it, so .hero__art begins where the
     chrome ends. */
  .section-onefit-busy-mums #fonLcg .hero,
  .section-onefit-gut-health #fonLcg .hero,
.section-onefit-perimenopause #fonLcg .hero,
.section-onefit-menopause #fonLcg .hero,
.section-onefit-endometriosis #fonLcg .hero {
    padding-top: 0;
    padding-bottom: clamp(12px, 1.8vw, 28px);
  }
  .section-onefit-busy-mums #fonLcg .hero.section,
  .section-onefit-gut-health #fonLcg .hero.section,
.section-onefit-perimenopause #fonLcg .hero.section,
.section-onefit-menopause #fonLcg .hero.section,
.section-onefit-endometriosis #fonLcg .hero.section {
    padding-top: 0;
  }

  /* The figure fills the space it now starts at the top of. */
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    height: clamp(520px, 60vw, 760px);
  }

  /* 3 · The left column, tightened. Proportions from the GLP-1 base, each
     step cut by about a third. */
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill {
    margin-bottom: clamp(12px, 1.2vw, 18px);
  }
  .section-onefit-busy-mums #fonLcg .hero__h1,
  .section-onefit-gut-health #fonLcg .hero__h1,
.section-onefit-perimenopause #fonLcg .hero__h1,
.section-onefit-menopause #fonLcg .hero__h1,
.section-onefit-endometriosis #fonLcg .hero__h1 {
    gap: clamp(6px, 0.7vw, 12px);
  }
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    margin-top: clamp(12px, 1.3vw, 18px);
  }
  .section-onefit-busy-mums #fonLcg .hero__cta,
  .section-onefit-gut-health #fonLcg .hero__cta,
.section-onefit-perimenopause #fonLcg .hero__cta,
.section-onefit-menopause #fonLcg .hero__cta,
.section-onefit-endometriosis #fonLcg .hero__cta {
    margin-top: clamp(28px, 3vw, 44px);
  }
  .section-onefit-busy-mums #fonLcg .hero__risk,
  .section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    margin-top: 12px;
  }
}

/* Mobile keeps a little air under the bar - with the image first and
   full-bleed, zero padding there reads as a rendering fault rather than a
   decision. */
@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero,
  .section-onefit-gut-health #fonLcg .hero,
.section-onefit-perimenopause #fonLcg .hero,
.section-onefit-menopause #fonLcg .hero,
.section-onefit-endometriosis #fonLcg .hero {
    padding-top: 0;
  }
  .section-onefit-busy-mums #fonLcg .hero.section,
  .section-onefit-gut-health #fonLcg .hero.section,
.section-onefit-perimenopause #fonLcg .hero.section,
.section-onefit-menopause #fonLcg .hero.section,
.section-onefit-endometriosis #fonLcg .hero.section {
    padding-top: 0;
  }
}

/* ==========================================================================
   ANGLE LANDERS — HEADER LEFT-ALIGNED, HERO TRIMMED
   ==========================================================================
   Matching the supplied reference (the FON site header) rather than the
   lander's inherited one.

   THE HEADER WAS BUILT RIGHT-HEAVY. .hdr__nav carries `margin-left: auto`,
   which pushes the links across to sit beside the CTA - so logo sat alone on
   the left and everything else clustered right. The reference puts the nav
   immediately after the logo on the left, with only the button on the right.
   Dropping the auto margin from the nav and moving it to the CTA reverses the
   arrangement without touching the markup or the link order.

   THE HERO IMAGE WAS RUNNING TOO TALL and slightly too wide, so it dominated
   rather than balanced. Height comes down, the image track narrows, and the
   copy column takes the difference - which also pulls the composition back
   toward centre.
   ========================================================================== */

@media (min-width: 900px) {

  /* --- HEADER ---------------------------------------------------------- */

  /* Smaller logo, and a real gap between it and the links. */
  .section-onefit-busy-mums #fonLcg .hdr__logo img,
  .section-onefit-gut-health #fonLcg .hdr__logo img,
.section-onefit-perimenopause #fonLcg .hdr__logo img,
.section-onefit-menopause #fonLcg .hdr__logo img,
.section-onefit-endometriosis #fonLcg .hdr__logo img {
    width: 104px;
  }

  /* Nav sits beside the logo on the left. The auto margin that pushed it
     right is removed; the CTA takes it instead, so the button is the only
     thing on the right edge. */
  .section-onefit-busy-mums #fonLcg .hdr__nav,
  .section-onefit-gut-health #fonLcg .hdr__nav,
.section-onefit-perimenopause #fonLcg .hdr__nav,
.section-onefit-menopause #fonLcg .hdr__nav,
.section-onefit-endometriosis #fonLcg .hdr__nav {
    margin-left: clamp(24px, 3vw, 52px);
    margin-right: 0;
    gap: clamp(20px, 2.2vw, 34px);
    font-size: 14px;
  }

  .section-onefit-busy-mums #fonLcg .hdr__cta,
  .section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-perimenopause #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
    margin-left: auto;
    min-height: 42px;
    padding: 11px 24px;
    font-size: 14px;
    border-radius: 999px;
  }

  /* A shorter bar, since the logo is smaller now. */
  .section-onefit-busy-mums #fonLcg .hdr__in,
  .section-onefit-gut-health #fonLcg .hdr__in,
.section-onefit-perimenopause #fonLcg .hdr__in,
.section-onefit-menopause #fonLcg .hdr__in,
.section-onefit-endometriosis #fonLcg .hdr__in {
    min-height: 62px;
    gap: 0;
  }

  /* --- HERO ------------------------------------------------------------- */

  /* Shorter figure: it was running past the fold and reading as a column
     rather than a panel. */
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    height: clamp(440px, 46vw, 600px);
  }

  /* Narrower image track, wider copy column - the composition moves back
     toward centre instead of leaning right. */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 600px)
      minmax(0, 44vw);
  }

  /* The proof pill sat in a pocket of its own. Closed up. */
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill {
    margin-bottom: clamp(8px, 0.9vw, 13px);
  }
}

@media (min-width: 1600px) {
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 660px)
      minmax(0, 42vw);
  }
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    height: min(60vh, 640px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — PROOF PILL ON ONE LINE, IMAGE TALLER AND WIDER
   ==========================================================================
   1 · THE PILL WRAPPED TO TWO LINES. .proofpill is a flex row with
   `flex-wrap: wrap`, and at 600px of copy column the three stats plus the
   avatars no longer fit, so "500K+ members" dropped to a second line and the
   pill became a two-row lozenge. It is now nowrap with tighter internal gaps,
   and the members icon has been removed from the markup on all four pages -
   the word "members" already says what the icon was saying.

   2 · LESS INDENT ON THE LEFT. The copy column started too far in. The gutter
   token drops from 5vw to 3.4vw, which moves the whole left column outward
   without letting it touch the viewport edge.

   3 · A TALLER, WIDER IMAGE. The reference fills the screen height on first
   paint but is NOT sticky - it scrolls away normally. So the figure is sized
   against the viewport (calc(100vh - header)) with a floor and a ceiling,
   rather than being pinned. Image track widens 44vw -> 49vw, which is the
   same proportion the reference runs. (This line previously held a raw Python
   dict literal leaked in from the generation script that wrote this block. It
   was inert inside the comment but one stray comment-close from breaking the
   sheet, so it has been replaced with the prose it was meant to be.)
   ========================================================================== */

@media (min-width: 900px) {

  /* 1 · One line, always. */
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill {
    flex-wrap: nowrap;
    white-space: nowrap;
    gap: 7px 10px;
    padding: 7px 16px 7px 8px;
    font-size: 13px;
    width: fit-content;
  }
  .section-onefit-busy-mums #fonLcg .proofpill__av,
  .section-onefit-gut-health #fonLcg .proofpill__av,
.section-onefit-perimenopause #fonLcg .proofpill__av,
.section-onefit-menopause #fonLcg .proofpill__av,
.section-onefit-endometriosis #fonLcg .proofpill__av {
    flex: none;
  }

  /* 2 · Tighter left indent. */
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
    --gh-edge: clamp(18px, 3.4vw, 40px);
  }

  /* 3 · Taller, wider image. Sized to the viewport minus the sticky header and
     the promo strip above it, so it fills the first screen and then scrolls
     away like any other content. */
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    height: clamp(520px, calc(100vh - 132px), 820px);
  }

  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 560px)
      minmax(0, 49vw);
  }
}

@media (min-width: 1600px) {
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 620px)
      minmax(0, 47vw);
  }
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    height: clamp(560px, calc(100vh - 132px), 880px);
  }
}

/* Narrow desktop: the pill cannot hold one line below ~1080px, so it is
   allowed to wrap again rather than overflowing its own lozenge. */
@media (min-width: 900px) and (max-width: 1079.98px) {
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill {
    flex-wrap: wrap;
    white-space: normal;
  }
}

/* ==========================================================================
   ANGLE LANDERS — HEADER REFINEMENT
   ==========================================================================
   Keeping the lander's own bar rather than swapping in the site header; this
   just brings it closer to the reference.

   THE CTA WAS A PILL. border-radius: 999px made it a full lozenge, where the
   reference (the site's Cart button) is a softly rounded rectangle. It now
   uses --r-md, the theme's own 10px token, so it matches the rest of the
   system instead of carrying a one-off value.

   SIDE SPACING. The bar inherits .shell's gutter, which at wide widths pushes
   the logo well inboard and the button well off the right edge. Tightened so
   both sit closer to the page edges, as they do on the reference.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hdr__cta,
  .section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-perimenopause #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
    border-radius: var(--r-md);
    min-height: 40px;
    padding: 10px 22px;
  }

  /* Less inset on both sides of the bar. */
  .section-onefit-busy-mums #fonLcg .hdr .shell.hdr__in,
  .section-onefit-gut-health #fonLcg .hdr .shell.hdr__in,
.section-onefit-perimenopause #fonLcg .hdr .shell.hdr__in,
.section-onefit-menopause #fonLcg .hdr .shell.hdr__in,
.section-onefit-endometriosis #fonLcg .hdr .shell.hdr__in {
    padding-inline: clamp(18px, 2.6vw, 34px);
    max-width: none;
  }
}

/* ==========================================================================
   ANGLE LANDERS — LEFT COLUMN TO THE FON HERO SCALE
   ==========================================================================
   Matching the proportions of the FON site hero supplied as reference: a small
   tight proof line, a display headline that dominates the column, and a wide
   rectangular CTA.

   THE RISK LINE STAYS. "Try it Risk-free for 90 days - Free shipping to AU,
   USA, NZ & UK" is kept in full; the reference simply has no equivalent, so it
   is styled to sit quietly under the button rather than being removed.
   ========================================================================== */

@media (min-width: 900px) {

  /* Proof line: smaller and closer to the headline than the lozenge was. */
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill {
    font-size: 12.5px;
    padding: 6px 14px 6px 7px;
    margin-bottom: clamp(10px, 1vw, 15px);
  }

  /* The setup line shrinks so the display line carries the column. */
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(14.5px, 1.15vw, 17px);
  }

  /* Bigger, tighter display type - the reference's dominant element. */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(44px, 3.9vw, 68px);
    line-height: .96;
    letter-spacing: -.038em;
  }

  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: clamp(15px, 1.05vw, 16.5px);
    max-width: 42ch;
    margin-top: clamp(14px, 1.4vw, 20px);
  }

  /* A wide, low-radius button rather than a pill, as in the reference. */
  .section-onefit-busy-mums #fonLcg .hero__ctawrap,
  .section-onefit-gut-health #fonLcg .hero__ctawrap,
.section-onefit-perimenopause #fonLcg .hero__ctawrap,
.section-onefit-menopause #fonLcg .hero__ctawrap,
.section-onefit-endometriosis #fonLcg .hero__ctawrap {
    width: 100%;
    max-width: 460px;
  }
  .section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
  .section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
    width: 100%;
    border-radius: var(--r-md);
    min-height: 56px;
    font-size: 16px;
  }

  /* The risk line, kept, set quietly beneath the button. */
  .section-onefit-busy-mums #fonLcg .hero__risk,
  .section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    margin-top: 14px;
    font-size: 13px;
  }
}

/* ==========================================================================
   ANGLE LANDERS — PASS 5
   ==========================================================================
   Navbar, hero proportions, promo speed, and the left column rebuilt to the
   FON site hero's layout.

   ON THE BUTTON. The theme's own .button uses border-radius:
   var(--rounded-button), which resolves from settings.button_border_radius.
   The lander sheet is standalone and never sees that token, so rather than
   inventing a third value the button here is given a flat 6px - the squared
   corner of the reference - and the same weight and tracking the theme uses.

   ON THE HEADLINE. Two of the requests pull against each other: the FON hero
   reference is built around a display line that dominates the column, but the
   heading was also asked to come down in size. The SCALE is reduced as asked
   and the reference's STRUCTURE is kept - tight proof line, dominant headline,
   wide rectangular CTA, small proof beneath.
   ========================================================================== */

/* --- 11 · PROMO BANNER, SLOWER --------------------------------------------
   60s for a full cycle read as a fast crawl. 100s is a drift. */
.section-onefit-busy-mums #fonLcg .promo__track,
.section-onefit-gut-health #fonLcg .promo__track,
.section-onefit-perimenopause #fonLcg .promo__track,
.section-onefit-menopause #fonLcg .promo__track,
.section-onefit-endometriosis #fonLcg .promo__track {
  animation-duration: 100s;
}

@media (min-width: 900px) {

  /* --- 1 · NAVBAR SIDE SPACING ------------------------------------------ */
  .section-onefit-busy-mums #fonLcg .hdr .shell.hdr__in,
  .section-onefit-gut-health #fonLcg .hdr .shell.hdr__in,
.section-onefit-perimenopause #fonLcg .hdr .shell.hdr__in,
.section-onefit-menopause #fonLcg .hdr .shell.hdr__in,
.section-onefit-endometriosis #fonLcg .hdr .shell.hdr__in {
    padding-inline: clamp(28px, 3.6vw, 56px);
  }

  /* --- 4 · GAP FROM THE LOGO -------------------------------------------- */
  .section-onefit-busy-mums #fonLcg .hdr__nav,
  .section-onefit-gut-health #fonLcg .hdr__nav,
.section-onefit-perimenopause #fonLcg .hdr__nav,
.section-onefit-menopause #fonLcg .hdr__nav,
.section-onefit-endometriosis #fonLcg .hdr__nav {
    margin-left: clamp(40px, 4.4vw, 76px);
    gap: clamp(24px, 2.6vw, 40px);
  }

  /* --- 3 · NAV TEXT: BOLDER, UPPERCASE, TRACKED ------------------------- */
  .section-onefit-busy-mums #fonLcg .hdr__nav a,
  .section-onefit-gut-health #fonLcg .hdr__nav a,
.section-onefit-perimenopause #fonLcg .hdr__nav a,
.section-onefit-menopause #fonLcg .hdr__nav a,
.section-onefit-endometriosis #fonLcg .hdr__nav a {
    text-transform: uppercase;
    font-weight: 700;
    font-size: 12px;
    letter-spacing: .08em;
  }

  /* --- 2 · BUTTON TO THE THEME'S SHAPE ---------------------------------- */
  .section-onefit-busy-mums #fonLcg .hdr__cta,
  .section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-perimenopause #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
    border-radius: 6px;
    min-height: 42px;
    padding: 11px 26px;
    font-size: 12.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .07em;
  }

  /* --- 9 · LESS SPACE ABOVE THE IMAGE ----------------------------------- */
  .section-onefit-busy-mums #fonLcg .hero,
  .section-onefit-gut-health #fonLcg .hero,
.section-onefit-perimenopause #fonLcg .hero,
.section-onefit-menopause #fonLcg .hero,
.section-onefit-endometriosis #fonLcg .hero {
    padding-top: 0;
  }
  .section-onefit-busy-mums #fonLcg .hero__art,
  .section-onefit-gut-health #fonLcg .hero__art,
.section-onefit-perimenopause #fonLcg .hero__art,
.section-onefit-menopause #fonLcg .hero__art,
.section-onefit-endometriosis #fonLcg .hero__art {
    align-self: start;
  }

  /* --- 7 + 8 + 10 · IMAGE: NARROWER, LESS ROUNDED, PROPERLY PROPORTIONED -
     49vw against a full-viewport height made a tall narrow slab that read as a
     banner. Narrowing and capping the height together fixes the proportion,
     which is what "too wide" and "looks like a banner" were both describing. */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 600px)
      minmax(0, 45vw);
  }
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    height: clamp(480px, calc(100vh - 150px), 720px);
    border-radius: 10px 0 0 10px;
  }

  /* --- 6 · LEFT COLUMN, TIGHTER SIDES ----------------------------------- */
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
    --gh-edge: clamp(14px, 2.6vw, 32px);
  }

  /* --- 5 + 12 · THE FON HERO LAYOUT, AT A SMALLER SCALE ----------------- */
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill {
    background: none;
    border: 0;
    box-shadow: none;
    padding: 0;
    font-size: 12.5px;
    margin-bottom: clamp(8px, 0.9vw, 13px);
  }

  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(14px, 1.1vw, 16px);
  }

  /* Down from 44-68px, as asked, while still leading the column. */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(36px, 3.1vw, 52px);
    line-height: .99;
    letter-spacing: -.032em;
  }

  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: clamp(14.5px, 1vw, 16px);
    max-width: 46ch;
    margin-top: clamp(22px, 2.4vw, 34px);
  }

  /* Wide squared CTA, as the reference runs it. */
  .section-onefit-busy-mums #fonLcg .hero__ctawrap,
  .section-onefit-gut-health #fonLcg .hero__ctawrap,
.section-onefit-perimenopause #fonLcg .hero__ctawrap,
.section-onefit-menopause #fonLcg .hero__ctawrap,
.section-onefit-endometriosis #fonLcg .hero__ctawrap {
    width: 100%;
    max-width: 430px;
  }
  .section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
  .section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
    width: 100%;
    border-radius: 6px;
    min-height: 54px;
    font-size: 15px;
  }

  .section-onefit-busy-mums #fonLcg .hero__risk,
  .section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    margin-top: 13px;
    font-size: 12.5px;
  }
}

/* --- 12b · THE MEMBERS LINE ----------------------------------------------
   New markup, so it needs its own rules. Faces overlap slightly and the count
   sits beside them, as the reference runs it. The avatar styling is borrowed
   from .proofpill__av, which still carries it. */
.section-onefit-busy-mums #fonLcg .hero__members,
.section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 14px 0 0;
  font-size: 13px;
  color: var(--fg-mut);
}
.section-onefit-busy-mums #fonLcg .hero__members b,
.section-onefit-gut-health #fonLcg .hero__members b,
.section-onefit-perimenopause #fonLcg .hero__members b,
.section-onefit-menopause #fonLcg .hero__members b,
.section-onefit-endometriosis #fonLcg .hero__members b {
  font-weight: 600;
  color: var(--fg);
}

/* The rating line above the headline loses its lozenge on desktop - the
   reference sets it as plain text - but keeps it on mobile where a bare row
   of stars against the photograph would have nothing to sit on. */
@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .proofpill--rating,
  .section-onefit-gut-health #fonLcg .proofpill--rating,
.section-onefit-perimenopause #fonLcg .proofpill--rating,
.section-onefit-menopause #fonLcg .proofpill--rating,
.section-onefit-endometriosis #fonLcg .proofpill--rating {
    background: var(--card, #FFFFFC);
    border-radius: var(--r-pill);
    padding: 6px 14px 6px 7px;
  }
  .section-onefit-busy-mums #fonLcg .hero__members,
  .section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
    font-size: 12.5px;
  }
}

/* ==========================================================================
   ANGLE LANDERS — PASS 6
   ==========================================================================
   1 · THE LEFT COLUMN: further out, higher up, bigger.
   2 · THE PANEL RIGHT EDGE, which is the alignment that was actually wrong.

   THE EDGE PROBLEM, stated properly. The hero image is the third track of a
   grid that is NOT capped by .shell, so it runs to the right edge of the
   viewport. Every listicle row below it sits inside .shell, max-width 1300px
   and centred, so its right edge stops at (100vw - 1300px)/2 from the edge.
   Two different right edges down the same page, which is why the panel under
   the hero never looked lined up with the picture above it.

   Fixed by giving the listicle rows the same escape the hero has: they opt out
   of the shell's centring and use a grid whose left gutter matches the hero's
   and whose right track runs to the same viewport edge. The copy column still
   aligns with the hero copy, so the whole page now has one left line and one
   right line instead of two of each.
   ========================================================================== */

@media (min-width: 900px) {

  /* --- 1 · LEFT COLUMN: OUT, UP, BIGGER -------------------------------- */

  /* Further out: the gutter halves again. */
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
    --gh-edge: clamp(10px, 1.4vw, 20px);
  }

  /* Higher up: the hero column stops centring against the tall image and
     starts at the top, so the copy sits high rather than floating mid-frame. */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    align-items: start;
    padding-top: clamp(18px, 2.2vw, 34px);
  }

  /* Bigger: headline, lead and the column itself. */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 660px)
      minmax(0, 45vw);
  }
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    max-width: 660px;
  }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(40px, 3.5vw, 58px);
  }
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: clamp(15.5px, 1.1vw, 17.5px);
    max-width: 52ch;
  }

  /* --- 2 · PANELS ALIGNED TO THE HERO IMAGE'S RIGHT EDGE --------------- */
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    max-width: none;
    width: 100%;
    padding-inline: 0;
    margin-inline: 0;
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 660px)
      minmax(0, 45vw);
    column-gap: clamp(32px, 3.2vw, 56px);
  }
  .section-onefit-busy-mums #fonLcg .blk__copy,
  .section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    grid-column: 2;
    max-width: 660px;
  }
  .section-onefit-busy-mums #fonLcg .blk__panel,
  .section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    grid-column: 3;
  }

  .section-onefit-busy-mums #fonLcg .blk:nth-child(even) .blk__in > *,
  .section-onefit-gut-health #fonLcg .blk:nth-child(even) .blk__in > *,
.section-onefit-perimenopause #fonLcg .blk:nth-child(even) .blk__in > *,
.section-onefit-menopause #fonLcg .blk:nth-child(even) .blk__in > *,
}

/* ==========================================================================
   ANGLE LANDERS — BOTH HEADLINE LINES AT DISPLAY SIZE
   ==========================================================================
   The h1 is two spans - .hero__quote is the setup ("You didn't eat anything.")
   and .hero__turn the payoff ("You still can't do the button up."). The setup
   had been set as a small quiet eyebrow at 14-16px against a 40-58px payoff,
   which made it read as a caption rather than the first half of one sentence.

   Both now run at the same display size. The setup keeps a lighter weight and
   a muted colour so the payoff still lands harder - the emphasis comes from
   weight and colour rather than from a size drop, which is what keeps the two
   lines reading as a single continuous headline.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(40px, 3.5vw, 58px);
    font-weight: 500;
    line-height: .99;
    letter-spacing: -.03em;
    color: var(--fg-mut);
    text-wrap: balance;
  }
  .section-onefit-busy-mums #fonLcg .hero__h1,
  .section-onefit-gut-health #fonLcg .hero__h1,
.section-onefit-perimenopause #fonLcg .hero__h1,
.section-onefit-menopause #fonLcg .hero__h1,
.section-onefit-endometriosis #fonLcg .hero__h1 {
    gap: clamp(2px, 0.3vw, 6px);
  }
}

@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(30px, 8vw, 40px);
    font-weight: 500;
    line-height: 1.02;
    letter-spacing: -.028em;
    color: var(--fg-mut);
  }
  .section-onefit-busy-mums #fonLcg .hero__h1,
  .section-onefit-gut-health #fonLcg .hero__h1,
.section-onefit-perimenopause #fonLcg .hero__h1,
.section-onefit-menopause #fonLcg .hero__h1,
.section-onefit-endometriosis #fonLcg .hero__h1 {
    gap: 4px;
  }
}

/* ==========================================================================
   ANGLE LANDERS — RATING PILL BACK, HEADLINE BIGGER
   ==========================================================================
   THE LOZENGE RETURNS. An earlier pass stripped .proofpill's background on
   desktop to match the FON hero reference, which sets its rating as plain
   text over a photograph. On this layout the rating sits over the page's own
   pale ground, where the plain version had nothing to sit on and read as loose
   text rather than a badge. The white pill is restored on desktop; the content
   is already correct - stars and reviews only, no avatars, no member count.

   HEADLINE UP AGAIN, both lines together, since they now share one size.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .proofpill--rating,
  .section-onefit-gut-health #fonLcg .proofpill--rating,
.section-onefit-perimenopause #fonLcg .proofpill--rating,
.section-onefit-menopause #fonLcg .proofpill--rating,
.section-onefit-endometriosis #fonLcg .proofpill--rating {
    background: var(--card, #FFFFFC);
    border-radius: var(--r-pill);
    box-shadow: 0 1px 2px rgba(20, 20, 15, .05), 0 8px 24px -12px rgba(20, 20, 15, .12);
    padding: 8px 18px;
    width: fit-content;
    font-size: 13.5px;
  }

  /* Both halves of the h1, larger. */
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(46px, 4.2vw, 70px);
  }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(46px, 4.2vw, 70px);
  }
}

@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(32px, 8.6vw, 44px);
  }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(32px, 8.6vw, 44px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — HEADLINE AND LEAD, LARGER AGAIN
   ==========================================================================
   Both halves of the h1 go up again, and the lead paragraph with them - at the
   previous lead size the copy block read as small print under a large heading
   rather than as the headline's own explanation.

   The lead's measure is held at 46ch as it grows. Line length is what governs
   readability, so a bigger size with an unchanged character count means more
   width per line, not more words - which is the point of enlarging it.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(52px, 4.9vw, 82px);
  }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(52px, 4.9vw, 82px);
  }

  /* The lead, up from 15.5-17.5px. */
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: clamp(17px, 1.3vw, 21px);
    line-height: 1.5;
    max-width: 46ch;
  }

  /* The risk line and members line follow, so the block stays proportional
     rather than leaving two small lines under a much larger paragraph. */
  .section-onefit-busy-mums #fonLcg .hero__risk,
  .section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    font-size: 14px;
  }
  .section-onefit-busy-mums #fonLcg .hero__members,
  .section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
    font-size: 14.5px;
  }
}

@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(34px, 9.2vw, 48px);
  }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(34px, 9.2vw, 48px);
  }
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: 16.5px;
    line-height: 1.5;
  }
}

/* ==========================================================================
   ANGLE LANDERS — STARS IN BRAND LIME, IMAGE FLUSH TO THE BAR
   ==========================================================================
   1 · THE STARS take the CTA's lime rather than the generic star colour, so
   the rating badge belongs to the same palette as the button it sits above.
   --lime is the button's own fill, so they cannot drift apart later.

   2 · THE IMAGE STILL SAT LOW, and the cause was mine. Pass 6 gave .hero__in
   `align-items: start` to lift the copy, and added padding-top alongside it to
   stop the copy hugging the bar. That padding applies to the WHOLE grid row,
   so it pushed the picture down by the same amount.

   The padding moves onto .hero__copy instead, which is the only track that
   wanted it. The image track keeps none, so the figure now starts exactly
   where the header ends while the copy still sits comfortably below it.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .proofpill__stars,
.section-onefit-gut-health #fonLcg .proofpill__stars,
.section-onefit-perimenopause #fonLcg .proofpill__stars,
.section-onefit-menopause #fonLcg .proofpill__stars,
.section-onefit-endometriosis #fonLcg .proofpill__stars {
  color: var(--lime-dk);
}

@media (min-width: 900px) {
  /* Undo the row-wide padding from pass 6... */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    padding-top: 0;
  }
  /* ...and give it to the copy column alone. */
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    padding-top: clamp(20px, 2.4vw, 38px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — PANELS BACK INSIDE THE SHELL
   ==========================================================================
   REVERSING PASS 6, on instruction. That pass stretched the listicle rows out
   of .shell so their right edge met the hero image's - one continuous right
   line down the page. Seen rendered, the panels became far too wide: at 45vw
   a three-row tile list stretches into a band, and the GLP-1 lander's own
   panels (the reference) are visibly narrower and sit inside the shell.

   So the rows return to the shell, at the GLP-1 lander's own 1fr 1.12fr. The
   hero image still bleeds to the viewport edge; the panels no longer try to
   match it. Two right edges, which is what the reference does and what reads
   correctly.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    max-width: var(--shell);
    width: 100%;
    padding-inline: var(--gutter);
    margin-inline: auto;
    grid-template-columns: 1fr 1.12fr;
    column-gap: clamp(40px, 4.4vw, 76px);
  }
  .section-onefit-busy-mums #fonLcg .blk__copy,
  .section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    grid-column: auto;
    max-width: 46ch;
  }
  .section-onefit-busy-mums #fonLcg .blk__panel,
  .section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    grid-column: auto;
  }
}

/* ==========================================================================
   ANGLE LANDERS — NO RULE BETWEEN BEATS
   ==========================================================================
   The compression pass put a 1px border-top on .blk + .blk. The reasoning was
   that with the padding halved the beats needed a boundary that was not empty
   space. Seen rendered it is a full-width line cutting across the page between
   every beat, which reads as a table rule rather than a rhythm - and the GLP-1
   lander, the reference, has no such line.

   Removed. The beats separate on spacing alone, as they did before.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .blk + .blk,
.section-onefit-gut-health #fonLcg .blk + .blk,
.section-onefit-perimenopause #fonLcg .blk + .blk,
.section-onefit-menopause #fonLcg .blk + .blk,
.section-onefit-endometriosis #fonLcg .blk + .blk {
  border-top: 0;
}

/* ==========================================================================
   ANGLE LANDERS — HEADING DOWN, RATING UP, COLUMN NARROWER
   ==========================================================================
   The headline had run to 52-82px, which at 660px of column forced "You didn't
   eat anything." onto two lines and left the block looking oversized against
   the picture. It comes down, the rating pill goes up to sit properly under it,
   and the copy column narrows so the two halves of the hero are closer to even.

   The risk line is gone from the markup, so the members line now closes the
   block. Its top margin absorbs the space the risk line used to occupy rather
   than leaving a hole under the button.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(42px, 3.8vw, 64px);
  }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(42px, 3.8vw, 64px);
  }

  /* The rating pill, larger. */
  .section-onefit-busy-mums #fonLcg .proofpill--rating,
  .section-onefit-gut-health #fonLcg .proofpill--rating,
.section-onefit-perimenopause #fonLcg .proofpill--rating,
.section-onefit-menopause #fonLcg .proofpill--rating,
.section-onefit-endometriosis #fonLcg .proofpill--rating {
    font-size: 15px;
    padding: 10px 22px;
    margin-bottom: clamp(12px, 1.3vw, 18px);
  }
  .section-onefit-busy-mums #fonLcg .proofpill__stars,
  .section-onefit-gut-health #fonLcg .proofpill__stars,
.section-onefit-perimenopause #fonLcg .proofpill__stars,
.section-onefit-menopause #fonLcg .proofpill__stars,
.section-onefit-endometriosis #fonLcg .proofpill__stars {
    font-size: 15px;
  }
  .section-onefit-busy-mums #fonLcg .proofpill .pf__i,
  .section-onefit-gut-health #fonLcg .proofpill .pf__i,
.section-onefit-perimenopause #fonLcg .proofpill .pf__i,
.section-onefit-menopause #fonLcg .proofpill .pf__i,
.section-onefit-endometriosis #fonLcg .proofpill .pf__i {
    width: 18px;
    height: 18px;
  }

  /* The left column comes in, so the hero reads closer to even. */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 560px)
      minmax(0, 45vw);
  }
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    max-width: 560px;
  }
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    max-width: 38ch;
    font-size: clamp(16px, 1.2vw, 19px);
  }

  /* The members line closes the block now the risk line is gone. */
  .section-onefit-busy-mums #fonLcg .hero__members,
  .section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
    margin-top: 18px;
  }
}

@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(31px, 8.4vw, 42px);
  }
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(31px, 8.4vw, 42px);
  }
  .section-onefit-busy-mums #fonLcg .hero__members,
  .section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
    margin-top: 16px;
  }
}

/* ==========================================================================
   ANGLE LANDERS — COPY CENTRED, IMAGE WIDER, PANEL LEFT EDGE ALIGNED
   ==========================================================================
   1 · THE COPY was top-aligned from pass 6 and, with the risk line now gone
   from the markup, sat noticeably high against a full-height picture. It
   centres again. The padding-top pass 6 put on .hero__copy goes with it - that
   existed only to hold a top-aligned column off the bar.

   2 · THE IMAGE widens 45vw -> 50vw.

   3 · THE PANEL'S LEFT EDGE, which is the alignment actually being asked for.
   The hero image starts 50vw from the left. The listicle panel sits in the
   second track of a shell-bound grid, so it starts wherever 1fr plus the gap
   happens to land - close to that line, but never on it.

   Fixed by giving the listicle rows the same three-track shape as the hero
   with an identical third track, and placing the panel in it. Its left edge
   now falls on exactly the same vertical as the picture above. The panel keeps
   an inner right margin, so the CARD stays narrower than the image while its
   left edge lines up - which is what was asked for.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    align-items: center;
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 560px)
      minmax(0, 50vw);
  }

.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    padding-top: 0;
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    max-width: none;
    width: 100%;
    padding-inline: 0;
    margin-inline: 0;
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 560px)
      minmax(0, 50vw);
    column-gap: 0;
  }

.section-onefit-busy-mums #fonLcg .blk__copy,
.section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    grid-column: 2;
    max-width: 560px;
  }

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    grid-column: 3;
  }

.section-onefit-busy-mums #fonLcg .blk__panel .panel,
.section-onefit-gut-health #fonLcg .blk__panel .panel,
.section-onefit-perimenopause #fonLcg .blk__panel .panel,
.section-onefit-menopause #fonLcg .blk__panel .panel,
.section-onefit-endometriosis #fonLcg .blk__panel .panel {
    margin-right: clamp(24px, 4vw, 80px);
  }
}

@media (min-width: 1600px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 620px)
      minmax(0, 48vw);
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 620px)
      minmax(0, 48vw);
  }

.section-onefit-busy-mums #fonLcg .blk__copy,
.section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    max-width: 620px;
  }
}

/* ==========================================================================
   ANGLE LANDERS — VISIBLE STARS, NARROWER IMAGE, RICHER PANELS
   ==========================================================================
   1 · THE STARS WERE NEARLY INVISIBLE, and that was my error: an earlier pass
   set them to --lime-dk to match the CTA, but --lime-dk is #DFEE93, a pale
   lime that all but disappears on the white pill. The sheet already carries a
   star colour for exactly this - --star-dk, #C79F0F - which is the gold the
   rest of the site uses. Using it, with a shadow to hold the edge.

   2 · IMAGE 50vw -> 45vw. The panel track follows it so the two left edges
   stay on the same vertical, which is the alignment fixed last pass.

   3 · THE PANEL NARROWS FROM THE RIGHT ONLY. Its track still starts where the
   image starts; the extra right margin pulls the card's right edge inward
   without touching the left, so the alignment survives the change.

   4 · THE PANELS, MADE PREMIUM. They replaced generated artwork and were
   carrying that weight as plain boxes. Now: a soft two-stop ground rather than
   flat fill, a hairline border that reads at both themes, real elevation, and
   numbered markers that sit as filled discs rather than inline text. The ink
   variant inverts the same system rather than defining a second one.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .proofpill__stars,
.section-onefit-gut-health #fonLcg .proofpill__stars,
.section-onefit-perimenopause #fonLcg .proofpill__stars,
.section-onefit-menopause #fonLcg .proofpill__stars,
.section-onefit-endometriosis #fonLcg .proofpill__stars {
  color: var(--star-dk);
  text-shadow: 0 1px 0 rgba(0, 0, 0, .06);
  letter-spacing: .08em;
}

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 560px)
      minmax(0, 45vw);
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      minmax(var(--gh-edge), 1fr)
      minmax(0, 560px)
      minmax(0, 45vw);
  }

.section-onefit-busy-mums #fonLcg .blk__panel .panel,
.section-onefit-gut-health #fonLcg .blk__panel .panel,
.section-onefit-perimenopause #fonLcg .blk__panel .panel,
.section-onefit-menopause #fonLcg .blk__panel .panel,
.section-onefit-endometriosis #fonLcg .blk__panel .panel {
    margin-right: clamp(48px, 7vw, 150px);
  }

}

.section-onefit-busy-mums #fonLcg .blk__panel .panel,
.section-onefit-gut-health #fonLcg .blk__panel .panel,
.section-onefit-perimenopause #fonLcg .blk__panel .panel,
.section-onefit-menopause #fonLcg .blk__panel .panel,
.section-onefit-endometriosis #fonLcg .blk__panel .panel {
  background: linear-gradient(180deg, #FFFFFE 0%, #FAFAF3 100%);
  border: 1px solid rgba(20, 20, 15, .07);
  border-radius: 18px;
  box-shadow:
    0 1px 2px rgba(20, 20, 15, .04),
    0 18px 44px -28px rgba(20, 20, 15, .3);
}

.section-onefit-busy-mums #fonLcg .blk__panel .panel--ink,
.section-onefit-gut-health #fonLcg .blk__panel .panel--ink,
.section-onefit-perimenopause #fonLcg .blk__panel .panel--ink,
.section-onefit-menopause #fonLcg .blk__panel .panel--ink,
.section-onefit-endometriosis #fonLcg .blk__panel .panel--ink {
  background: linear-gradient(180deg, #1C1C17 0%, #121210 100%);
  border-color: rgba(255, 255, 255, .09);
}

.section-onefit-busy-mums #fonLcg .blk__panel .tile,
.section-onefit-gut-health #fonLcg .blk__panel .tile,
.section-onefit-perimenopause #fonLcg .blk__panel .tile,
.section-onefit-menopause #fonLcg .blk__panel .tile,
.section-onefit-endometriosis #fonLcg .blk__panel .tile {
  background: rgba(20, 20, 15, .028);
  border-radius: 12px;
  padding: 14px 16px;
}

.section-onefit-busy-mums #fonLcg .blk__panel .panel--ink .tile,
.section-onefit-gut-health #fonLcg .blk__panel .panel--ink .tile,
.section-onefit-perimenopause #fonLcg .blk__panel .panel--ink .tile,
.section-onefit-menopause #fonLcg .blk__panel .panel--ink .tile,
.section-onefit-endometriosis #fonLcg .blk__panel .panel--ink .tile {
  background: rgba(255, 255, 255, .055);
}

.section-onefit-busy-mums #fonLcg .blk__panel .tile > b,
.section-onefit-gut-health #fonLcg .blk__panel .tile > b,
.section-onefit-perimenopause #fonLcg .blk__panel .tile > b,
.section-onefit-menopause #fonLcg .blk__panel .tile > b,
.section-onefit-endometriosis #fonLcg .blk__panel .tile > b {
  display: inline-grid;
  place-items: center;
  min-width: 30px;
  height: 30px;
  padding: 0 8px;
  border-radius: 999px;
  background: var(--ink, #14140F);
  color: #fff;
  font-size: 12.5px;
  letter-spacing: -.01em;
}

.section-onefit-busy-mums #fonLcg .blk__panel .panel--ink .tile > b,
.section-onefit-gut-health #fonLcg .blk__panel .panel--ink .tile > b,
.section-onefit-perimenopause #fonLcg .blk__panel .panel--ink .tile > b,
.section-onefit-menopause #fonLcg .blk__panel .panel--ink .tile > b,
.section-onefit-endometriosis #fonLcg .blk__panel .panel--ink .tile > b {
  background: var(--lime, #EAF6AB);
  color: var(--lime-ink, #333);
}

.section-onefit-busy-mums #fonLcg .blk__panel .panel__t,
.section-onefit-gut-health #fonLcg .blk__panel .panel__t,
.section-onefit-perimenopause #fonLcg .blk__panel .panel__t,
.section-onefit-menopause #fonLcg .blk__panel .panel__t,
.section-onefit-endometriosis #fonLcg .blk__panel .panel__t {
  font-size: 11.5px;
  letter-spacing: .12em;
  color: var(--fg-soft);
}

/* ==========================================================================
   ANGLE LANDERS — SETUP LINE SMALLER, CTA RESTYLED, LEFT GAP FIXED PROPERLY
   ==========================================================================
   THE LEFT GAP KEPT COMING BACK, and the gutter token was never the cause -
   it is already at its tightest (10-20px). The cause is the FIRST TRACK:

       minmax(var(--gh-edge), 1fr)   copy   image

   A 1fr track does not sit at its minimum. It absorbs a share of whatever is
   left after the fixed columns are placed, so the wider the viewport the wider
   that first column grows, and the copy drifts inward. Every previous attempt
   shrank --gh-edge, which only moves the floor - it never touched the growth.

   The first track is now a FIXED width, so the gutter is exactly --gh-edge at
   every viewport and all surplus goes to the image track, which is the only
   flexible one left.

   THE SETUP LINE comes down from matching the payoff. The two halves now read
   as one sentence with a clear hierarchy rather than two headlines of equal
   weight.

   THE CTA takes the header button's lime rather than the blue. It was the one
   element on the page still using a colour from outside the palette.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      var(--gh-edge)
      minmax(0, 560px)
      minmax(0, 45vw);
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      var(--gh-edge)
      minmax(0, 560px)
      minmax(0, 45vw);
  }

.section-onefit-busy-mums #fonLcg .hero__quote,
.section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(30px, 2.6vw, 44px);
    line-height: 1.04;
  }

}

.section-onefit-busy-mums #fonLcg .hero__quote,
.section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
  font-weight: 500;
}

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
  background: linear-gradient(180deg, #EDF8B6 0%, #DFEE93 100%);
  border: 1px solid rgba(20, 20, 15, .08);
  color: var(--ink, #14140F);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .7),
    0 1px 2px rgba(20, 20, 15, .06),
    0 14px 30px -16px rgba(90, 110, 20, .5);
  transition: transform .16s ease, box-shadow .16s ease, background .16s ease;
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:hover {
    background: linear-gradient(180deg, #E6F4A6 0%, #D6E884 100%);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, .7),
      0 1px 2px rgba(20, 20, 15, .08),
      0 18px 36px -16px rgba(90, 110, 20, .55);
  }
}

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:active,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:active,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:active,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:active,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:active {
  transform: translateY(1px);
}

/* ==========================================================================
   ANGLE LANDERS — THE SURPLUS GOES TO THE IMAGE
   ==========================================================================
   Last pass fixed the left gap by making the first track a fixed width, which
   was right. But it left the image track at minmax(0, 45vw), so ALL THREE
   tracks were fixed and nothing absorbed the leftover width - at 1920px that
   is 20 + 560 + 864 = 1444px used, and 476px of white pooling after the image.
   The picture stopped reaching the right edge.

   Both halves of the rule matter: the gutter must be FIXED so it cannot grow,
   and exactly one track must be FLEXIBLE so the surplus has somewhere to go.
   That track is the image. Now the gutter holds at --gh-edge, the copy holds
   at 560px, and every remaining pixel goes to the picture, which reaches the
   viewport edge at any width.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      var(--gh-edge)
      minmax(0, 560px)
      1fr;
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      var(--gh-edge)
      minmax(0, 560px)
      1fr;
  }

}

@media (min-width: 1600px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      var(--gh-edge)
      minmax(0, 620px)
      1fr;
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      var(--gh-edge)
      minmax(0, 620px)
      1fr;
  }

}

/* ==========================================================================
   ANGLE LANDERS — THE SITE'S OWN HERO BUTTON, AND AN OVERFLOW FIX
   ==========================================================================
   1 · THE CTA is now the homepage hero button, copied from
   assets/fon-index-2026.css `.section-index-2026-hero a.hero-cta` - the
   "Save 33% & Free Shipping" block. Same lime, same 5px radius, same white
   translucent border, and the same five-layer shadow stack that gives it its
   lift. Only the width is different: it fills the copy column here rather than
   being capped at 406px.

   2 · THE LISTICLE RAN OFF THE LEFT EDGE. Making the grid's first track a
   fixed --gh-edge fixed the hero, but --gh-edge bottoms out at 10px, and the
   listicle copy column at 560px plus a 1fr image needs more room than the hero
   does - so on a narrower desktop the text was pushed past the viewport edge.
   The listicle keeps a larger minimum of its own while still using a fixed
   track, so it can never grow but can never clip either.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
  height: 52px;
  min-height: 52px;
  padding: 8px 16px;
  border-radius: 5px;
  border: 1px solid rgba(255, 255, 255, 0.40);
  background: #EAF6AB;
  box-shadow: -11.15px -10.4px 48px 0 rgba(255, 255, 255, 0.24),
              -1.86px -1.73px 12px 0 rgba(255, 255, 255, 0.15),
              inset 0.98px 0.92px 4.12px 0 rgba(255, 255, 255, 0.30),
              inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, 0.30),
              inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, 0.30);
  color: #3E3E3E;
  font-weight: 700;
  font-size: clamp(15px, 0.99vw, 19px);
  line-height: 24px;
  text-align: center;
  text-transform: capitalize;
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:hover {
    transform: translateY(-2px);
    transition: transform .3s;
  }
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      clamp(24px, 3vw, 56px)
      minmax(0, 560px)
      1fr;
  }
}

/* ==========================================================================
   ANGLE LANDERS — ONE GRID, 50/50, FOR BOTH THE HERO AND THE LISTICLE
   ==========================================================================
   THIS SUPERSEDES EVERY EARLIER GRID DECLARATION IN THIS FILE. Do not add
   another one above it - add here or change these numbers.

   WHAT WENT WRONG, repeatedly. The hero and the listicle each had their own
   grid, edited in separate passes, and they drifted apart: the hero ended up
   `minmax(--gh-edge, 1fr) 560px 45vw` while the listicle had
   `--gh-edge 620px 1fr`. Different gutters, different copy widths, and the
   flexible track on opposite sides - so the panel could never line up with the
   image above it, and at 1920px the hero was 29/70 rather than 50/50.

   ONE DEFINITION NOW, applied to both:

       clamp(24px, 3vw, 56px)   1fr   50vw

     * the gutter is FIXED, so it cannot grow and open a gap on the left
     * the copy column is the FLEXIBLE one, so it absorbs surplus width
     * the right track is exactly 50vw, so the hero image and the listicle
       panel start on the same vertical AND the split is a true half

   The panel keeps an inner right margin, so the card is narrower than the
   picture while its left edge stays on that shared line.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      clamp(24px, 3vw, 56px)
      minmax(0, 1fr)
      50vw;
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      clamp(24px, 3vw, 56px)
      minmax(0, 1fr)
      50vw;
  }

.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    max-width: none;
  }

.section-onefit-busy-mums #fonLcg .blk__copy,
.section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    max-width: none;
  }

.section-onefit-busy-mums #fonLcg .blk__panel .panel,
.section-onefit-gut-health #fonLcg .blk__panel .panel,
.section-onefit-perimenopause #fonLcg .blk__panel .panel,
.section-onefit-menopause #fonLcg .blk__panel .panel,
.section-onefit-endometriosis #fonLcg .blk__panel .panel {
    margin-right: clamp(48px, 7vw, 150px);
  }

}

/* ==========================================================================
   ANGLE LANDERS — LEFT COLUMN WIDER, GUTTER SAFE, MEMBERS LINE CENTRED
   ==========================================================================
   Amends the unified grid above rather than adding a competing one. Same three
   tracks, same order, two numbers changed.

   1 · THE LEFT SIDE GROWS. The right track drops 50vw -> 45vw, and because the
   copy column is the flexible track it takes all of that back. The image still
   bleeds to the right edge; it is simply narrower, so the copy is wider.

   2 · THE GUTTER MINIMUM GOES UP, 24px -> 56px. At 24px the copy was starting
   underneath the floating "Scratch to Win" widget that sits over the left edge
   of the viewport, which is why the listicle text looked cut off on a narrower
   desktop. 56px clears it. The track is still fixed, so it cannot grow and
   reopen the gap on the left.

   3 · THE MEMBERS LINE was baseline-aligned against 3 stacked avatar discs, so
   the text sat high against them. align-items: center puts the label on the
   discs' vertical centre.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      clamp(56px, 4.6vw, 92px)
      minmax(0, 1fr)
      45vw;
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      clamp(56px, 4.6vw, 92px)
      minmax(0, 1fr)
      45vw;
  }

}

.section-onefit-busy-mums #fonLcg .hero__members,
.section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
  display: flex;
  align-items: center;
  line-height: 1.2;
}

.section-onefit-busy-mums #fonLcg .hero__members .proofpill__av,
.section-onefit-gut-health #fonLcg .hero__members .proofpill__av,
.section-onefit-perimenopause #fonLcg .hero__members .proofpill__av,
.section-onefit-menopause #fonLcg .hero__members .proofpill__av,
.section-onefit-endometriosis #fonLcg .hero__members .proofpill__av {
  display: inline-flex;
  align-items: center;
  flex: none;
}

.section-onefit-busy-mums #fonLcg .hero__members > span:last-child,
.section-onefit-gut-health #fonLcg .hero__members > span:last-child,
.section-onefit-perimenopause #fonLcg .hero__members > span:last-child,
.section-onefit-menopause #fonLcg .hero__members > span:last-child,
.section-onefit-endometriosis #fonLcg .hero__members > span:last-child {
  display: inline-flex;
  align-items: center;
}

/* ==========================================================================
   ANGLE LANDERS — MEMBERS LINE SPACING AND CENTRING, LEFT COLUMN AGAIN
   ==========================================================================
   1 · "100,242Australians" LOST ITS SPACE. The previous pass set
   `display: inline-flex` on the line's last span to centre it vertically.
   Flex removes the whitespace text node between <b> and the words that follow,
   so the two ran together. The span goes back to normal inline flow and the
   gap is carried by the flex container instead - which is what a flex `gap`
   is for, and it cannot collapse the way a text space can.

   2 · THE LINE CENTRES UNDER THE BUTTON. It is aligned to the button's own
   box, so the faces and the count sit on the CTA's horizontal centre rather
   than starting at its left edge.

   3 · THE LEFT COLUMN GROWS AGAIN, and the hero is untouched: only the
   listicle track changes, 45vw -> 42vw. The hero keeps the grid it has.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__members,
.section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
  display: flex;
  align-items: center;
  gap: 12px;
}

.section-onefit-busy-mums #fonLcg .hero__members > span:last-child,
.section-onefit-gut-health #fonLcg .hero__members > span:last-child,
.section-onefit-perimenopause #fonLcg .hero__members > span:last-child,
.section-onefit-menopause #fonLcg .hero__members > span:last-child,
.section-onefit-endometriosis #fonLcg .hero__members > span:last-child {
  display: inline;
}

.section-onefit-busy-mums #fonLcg .hero__members b,
.section-onefit-gut-health #fonLcg .hero__members b,
.section-onefit-perimenopause #fonLcg .hero__members b,
.section-onefit-menopause #fonLcg .hero__members b,
.section-onefit-endometriosis #fonLcg .hero__members b {
  margin-right: .32em;
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__members,
.section-onefit-gut-health #fonLcg .hero__members,
.section-onefit-perimenopause #fonLcg .hero__members,
.section-onefit-menopause #fonLcg .hero__members,
.section-onefit-endometriosis #fonLcg .hero__members {
    width: 100%;
    max-width: 430px;
    justify-content: center;
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      clamp(56px, 4.6vw, 92px)
      minmax(0, 1fr)
      42vw;
  }
}

/* ==========================================================================
   ANGLE LANDERS — LEFT COLUMN BIGGER AGAIN, HERO AND LISTICLE TOGETHER
   ==========================================================================
   THE HERO WAS STILL ON AN OLD RULE. Its grid read

       minmax(--gh-edge, 1fr)   minmax(0, 560px)   minmax(0, 45vw)

   with the copy column CAPPED at 560px, so narrowing the image gave that space
   to the first track - the gutter - instead of to the text. That is why the
   left side stopped growing however much the image came in.

   Both now use the same shape, with the copy as the uncapped flexible track:

       clamp(56px, 4.6vw, 92px)   1fr   38vw

   The image drops 45/42vw -> 38vw and every pixel of that goes to the copy.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      clamp(56px, 4.6vw, 92px)
      minmax(0, 1fr)
      38vw;
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    grid-template-columns:
      clamp(56px, 4.6vw, 92px)
      minmax(0, 1fr)
      38vw;
  }

.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    max-width: none;
  }

.section-onefit-busy-mums #fonLcg .blk__copy,
.section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    max-width: none;
  }

.section-onefit-busy-mums #fonLcg .hero__sub,
.section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    max-width: 52ch;
  }

}

/* ==========================================================================
   ANGLE LANDERS — LEFT EDGE ALIGNMENT ONLY. NO WIDTHS CHANGED.
   ==========================================================================
   The two grids had DIFFERENT FIRST TRACKS, which is the whole offset:

       hero:  minmax(var(--gh-edge), 1fr)      <- flexible, grows
       list:  clamp(56px, 4.6vw, 92px)         <- fixed

   A flexible first track takes a share of leftover width, so the hero's copy
   started further in than the listicle's, and the two left edges could never
   meet. Earlier attempts changed the image width instead, which moved things
   around without ever addressing this.

   ONLY THE HERO'S FIRST TRACK CHANGES HERE, to the listicle's fixed value. The
   hero's copy column stays 560px and its image stays 45vw; the listicle is not
   touched at all. Nothing gets wider or narrower - the two left edges simply
   land on the same vertical.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    grid-template-columns:
      clamp(56px, 4.6vw, 92px)
      minmax(0, 560px)
      minmax(0, 45vw);
  }

}

/* ==========================================================================
   ANGLE LANDERS — FLEX, NOT GRID. ONE LEFT EDGE FOR BOTH ROWS.
   ==========================================================================
   Replaces the grid on the hero and the listicle. Every grid rule for these
   two above this point is overridden by `display: flex` here.

   WHY GRID KEPT FAILING. Both rows used a three-track grid whose FIRST track
   was the left gutter. The hero's was flexible (minmax(--gh-edge, 1fr)) and
   the listicle's fixed, so they resolved to different widths and the two left
   edges never met - and every attempt to fix the alignment by changing a track
   width moved the image instead.

   FLEX REMOVES THE GUTTER TRACK ENTIRELY. The row itself carries the left
   inset as padding-left, which is a single value both rows share, so the copy
   starts on the same vertical by construction rather than by two track
   calculations happening to agree. The copy flexes, the image is a fixed
   basis, and nothing about the image's width depends on the gutter any more.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
  --gh-inset: clamp(56px, 4.6vw, 92px);
  --gh-img: 42vw;
}

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    display: flex;
    align-items: center;
    gap: clamp(32px, 3.4vw, 64px);
    max-width: none;
    width: 100%;
    margin-inline: 0;
    padding-inline: 0;
    padding-left: var(--gh-inset);
  }

.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    flex: 1 1 auto;
    min-width: 0;
    max-width: none;
    padding-top: 0;
  }

.section-onefit-busy-mums #fonLcg .hero__art,
.section-onefit-gut-health #fonLcg .hero__art,
.section-onefit-perimenopause #fonLcg .hero__art,
.section-onefit-menopause #fonLcg .hero__art,
.section-onefit-endometriosis #fonLcg .hero__art {
    flex: 0 0 var(--gh-img);
    max-width: var(--gh-img);
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    display: flex;
    align-items: center;
    gap: clamp(32px, 3.4vw, 64px);
    max-width: none;
    width: 100%;
    margin-inline: 0;
    padding-inline: 0;
    padding-left: var(--gh-inset);
  }

.section-onefit-busy-mums #fonLcg .blk__copy,
.section-onefit-gut-health #fonLcg .blk__copy,
.section-onefit-perimenopause #fonLcg .blk__copy,
.section-onefit-menopause #fonLcg .blk__copy,
.section-onefit-endometriosis #fonLcg .blk__copy {
    flex: 1 1 auto;
    min-width: 0;
    max-width: none;
  }

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    flex: 0 0 var(--gh-img);
    max-width: var(--gh-img);
  }

}

/* ==========================================================================
   ANGLE LANDERS — TOKENS ONLY: MORE LEFT INSET, 50/50, TIGHTER CENTRE GAP
   ==========================================================================
   Three values, no layout change. This is the point of moving to flex: the
   left inset, the split and the centre gap are each one token, and editing
   them cannot move anything else.

     --gh-inset   56-92px  ->  88-140px   more room on the left
     --gh-img     42vw     ->  50vw       a true half for the image
     gap          32-64px  ->  20-36px    less air down the middle

   Both the hero and the listicle read these, so they stay aligned.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
  --gh-inset: clamp(88px, 7vw, 140px);
  --gh-img: 50vw;
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    gap: clamp(20px, 2.1vw, 36px);
  }

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    gap: clamp(20px, 2.1vw, 36px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — LISTICLE ONLY: MORE LEFT INSET, NARROWER PANEL
   ==========================================================================
   The seven beats get their own two values, so the hero keeps the inset and
   image width it has. They are still declared as the same kind of token pair,
   so a later change to one row still cannot silently move the other.

     listicle inset   88-140px -> 120-190px
     listicle panel   50vw     -> 42vw

   The panel's LEFT edge moves right with the inset, which is intended - the
   request is for more space before the text, and the panel travels with it so
   the row stays a pair rather than drifting apart.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
.section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
.section-onefit-perimenopause #fonLcg .blk > .shell.blk__in,
.section-onefit-menopause #fonLcg .blk > .shell.blk__in,
.section-onefit-endometriosis #fonLcg .blk > .shell.blk__in {
    padding-left: clamp(120px, 9.5vw, 190px);
  }

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    flex: 0 0 42vw;
    max-width: 42vw;
  }
}

/* ==========================================================================
   ANGLE LANDERS — BOTH BUTTONS IN THE BRAND BLUE
   ==========================================================================
   The header CTA and the hero CTA move from lime to --blue (#0171E3), the
   sheet's own brand blue, with --blue-dk (#0159B4) on hover. Both were on lime
   after an earlier pass copied the site's homepage hero button; blue is the
   stronger signal here because nothing else on these pages uses it, so the two
   buttons stop competing with the lime rating pill and the panel accents.

   The homepage button's SHAPE is kept - its radius, its border treatment and
   its inset highlight - only the fill changes, so it still reads as the same
   component rather than a different one.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
  background: var(--blue);
  border-color: rgba(255, 255, 255, .18);
  color: #fff;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .22),
    0 1px 2px rgba(1, 60, 120, .18),
    0 16px 34px -18px rgba(1, 113, 227, .65);
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:hover {
    background: var(--blue-dk);
  }
}

.section-onefit-busy-mums #fonLcg .hdr__cta,
.section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-perimenopause #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
  background: var(--blue);
  border-color: rgba(255, 255, 255, .18);
  color: #fff;
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hdr__cta:hover,
.section-onefit-gut-health #fonLcg .hdr__cta:hover,
.section-onefit-perimenopause #fonLcg .hdr__cta:hover,
.section-onefit-menopause #fonLcg .hdr__cta:hover,
.section-onefit-endometriosis #fonLcg .hdr__cta:hover {
    background: var(--blue-dk);
    border-color: rgba(255, 255, 255, .18);
  }
}

/* ==========================================================================
   ANGLE LANDERS — UNIFORM PANELS, BADGE FIX, BIGGER HEADINGS, RISK LINE BACK
   ==========================================================================
   1 · THE PANELS WERE DIFFERENT HEIGHTS because each sized to its own row
   count - three tiles in one, five in another. They now share a minimum
   height and their tiles distribute the leftover space, so every panel down
   the page presents as the same block. Width was already uniform via --gh-img.

   2 · THE BADGES WERE CLIPPING. They were a fixed 30px circle, which fits "01"
   but not "20bn" or "25g" - the text was being cut off. They now size to their
   content with a pill radius and a minimum, so a number badge stays circular
   and a dose badge grows into a lozenge instead of truncating.

   3 · HEADINGS UP a step, now the columns are wider.

   4 · THE RISK LINE IS BACK under the CTA, restyled: the tick sits in a filled
   disc rather than floating, and the line is set quietly enough that it reads
   as reassurance under the button rather than a second call to action.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    display: flex;
  }

.section-onefit-busy-mums #fonLcg .blk__panel .panel,
.section-onefit-gut-health #fonLcg .blk__panel .panel,
.section-onefit-perimenopause #fonLcg .blk__panel .panel,
.section-onefit-menopause #fonLcg .blk__panel .panel,
.section-onefit-endometriosis #fonLcg .blk__panel .panel {
    display: flex;
    flex-direction: column;
    width: 100%;
    min-height: 420px;
  }

.section-onefit-busy-mums #fonLcg .blk__panel .tiles,
.section-onefit-gut-health #fonLcg .blk__panel .tiles,
.section-onefit-perimenopause #fonLcg .blk__panel .tiles,
.section-onefit-menopause #fonLcg .blk__panel .tiles,
.section-onefit-endometriosis #fonLcg .blk__panel .tiles {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
  }

.section-onefit-busy-mums #fonLcg .blk__copy .h2,
.section-onefit-gut-health #fonLcg .blk__copy .h2,
.section-onefit-perimenopause #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
    font-size: clamp(30px, 2.9vw, 44px);
    line-height: 1.06;
  }

}

.section-onefit-busy-mums #fonLcg .blk__panel .tile > b,
.section-onefit-gut-health #fonLcg .blk__panel .tile > b,
.section-onefit-perimenopause #fonLcg .blk__panel .tile > b,
.section-onefit-menopause #fonLcg .blk__panel .tile > b,
.section-onefit-endometriosis #fonLcg .blk__panel .tile > b {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 34px;
  width: auto;
  height: 34px;
  padding: 0 11px;
  border-radius: 999px;
  font-size: 12.5px;
  white-space: nowrap;
  flex: none;
}

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-top: 14px;
  font-size: 13px;
  color: var(--fg-mut);
}

.section-onefit-busy-mums #fonLcg .hero__tick,
.section-onefit-gut-health #fonLcg .hero__tick,
.section-onefit-perimenopause #fonLcg .hero__tick,
.section-onefit-menopause #fonLcg .hero__tick,
.section-onefit-endometriosis #fonLcg .hero__tick {
  flex: none;
  width: 18px;
  height: 18px;
  border-radius: 999px;
  background: var(--blue);
  position: relative;
}

.section-onefit-busy-mums #fonLcg .hero__tick::after,
.section-onefit-gut-health #fonLcg .hero__tick::after,
.section-onefit-perimenopause #fonLcg .hero__tick::after,
.section-onefit-menopause #fonLcg .hero__tick::after,
.section-onefit-endometriosis #fonLcg .hero__tick::after {
  content: '';
  position: absolute;
  left: 6px;
  top: 4px;
  width: 4px;
  height: 8px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.section-onefit-busy-mums #fonLcg .hero__risk a,
.section-onefit-gut-health #fonLcg .hero__risk a,
.section-onefit-perimenopause #fonLcg .hero__risk a,
.section-onefit-menopause #fonLcg .hero__risk a,
.section-onefit-endometriosis #fonLcg .hero__risk a {
  color: var(--fg);
  font-weight: 600;
  text-decoration: none;
  border-bottom: 1px solid rgba(20,20,15,.25);
}

/* --- Bigger headings, so less air above them -----------------------------
   A larger type size carries its own presence, so the space that was holding
   the old smaller heading up now reads as a gap. The beat number tightens to
   the heading and the block padding comes down to match. */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .blk,
.section-onefit-gut-health #fonLcg .blk,
.section-onefit-perimenopause #fonLcg .blk,
.section-onefit-menopause #fonLcg .blk,
.section-onefit-endometriosis #fonLcg .blk {
    padding-block: clamp(10px, 1.1vw, 16px);
  }

.section-onefit-busy-mums #fonLcg .blk__n,
.section-onefit-gut-health #fonLcg .blk__n,
.section-onefit-perimenopause #fonLcg .blk__n,
.section-onefit-menopause #fonLcg .blk__n,
.section-onefit-endometriosis #fonLcg .blk__n {
    margin-bottom: clamp(2px, 0.4vw, 7px);
  }

.section-onefit-busy-mums #fonLcg .blk__copy .h2,
.section-onefit-gut-health #fonLcg .blk__copy .h2,
.section-onefit-perimenopause #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
    margin-top: 0;
  }
}

/* ==========================================================================
   ANGLE LANDERS — LEAD NARROWER, HEADLINE BIGGER, PILL AND RISK LINE RESTYLED
   ==========================================================================
   1 · THE LEAD WAS 52ch, widened a few passes ago when the copy column grew.
   At that measure the line runs past the point where the eye tracks back
   comfortably. Back to 44ch: the column stays wide, the paragraph does not.

   2 · THE HEADLINE goes up again, both halves together.

   3 · THE PROOF PILL carries faces, rating, reviews and members again. The
   members icon is now an inline SVG taking currentColor, so it is crisp at any
   size and sits on the same ink as the text beside it rather than being a
   fixed grey raster.

   4 · THE RISK LINE, restyled properly. It now sits on its own tinted rail
   with the tick in a filled blue disc - a small reassurance strip under the
   button rather than a loose sentence, which is what it read as before.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .proofpill--rating .proofpill__av,
.section-onefit-gut-health #fonLcg .proofpill--rating .proofpill__av,
.section-onefit-perimenopause #fonLcg .proofpill--rating .proofpill__av,
.section-onefit-menopause #fonLcg .proofpill--rating .proofpill__av,
.section-onefit-endometriosis #fonLcg .proofpill--rating .proofpill__av {
  display: inline-flex;
  align-items: center;
  flex: none;
  margin-right: 4px;
}

.section-onefit-busy-mums #fonLcg .pf__i--grp,
.section-onefit-gut-health #fonLcg .pf__i--grp,
.section-onefit-perimenopause #fonLcg .pf__i--grp,
.section-onefit-menopause #fonLcg .pf__i--grp,
.section-onefit-endometriosis #fonLcg .pf__i--grp {
  width: 17px;
  height: 17px;
  color: var(--fg-mut);
}

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: 14px;
  padding: 9px 16px 9px 10px;
  border-radius: 999px;
  background: rgba(1, 113, 227, .06);
  border: 1px solid rgba(1, 113, 227, .14);
  font-size: 12.5px;
  color: var(--fg-mut);
}

.section-onefit-busy-mums #fonLcg .hero__risk a,
.section-onefit-gut-health #fonLcg .hero__risk a,
.section-onefit-perimenopause #fonLcg .hero__risk a,
.section-onefit-menopause #fonLcg .hero__risk a,
.section-onefit-endometriosis #fonLcg .hero__risk a {
  color: var(--fg);
  font-weight: 600;
  text-decoration: none;
  border-bottom: 0;
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__sub,
.section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    max-width: 38ch;
  }

.section-onefit-busy-mums #fonLcg .hero__quote,
.section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(34px, 3vw, 50px);
  }

.section-onefit-busy-mums #fonLcg .hero__turn,
.section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(48px, 4.3vw, 72px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — SMALLER RISK RAIL, YELLOW STARS, CENTRED TICK
   ==========================================================================
   1 · THE TICK WAS OFF-CENTRE, and it was my doing: the checkmark was drawn
   with hardcoded left/top pixel offsets inside the disc, which only line up at
   one exact disc size and drifted as soon as the disc changed. It is now
   centred with a transform, so it stays put whatever size the disc becomes.

   2 · THE STARS take --star (#F0C417), the brighter yellow, rather than
   --star-dk (#C79F0F) which reads closer to bronze at small sizes.

   3 · THE RISK RAIL comes down a step in every dimension - type, padding,
   disc and gap - so it settles under the button instead of competing with it.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .proofpill__stars,
.section-onefit-gut-health #fonLcg .proofpill__stars,
.section-onefit-perimenopause #fonLcg .proofpill__stars,
.section-onefit-menopause #fonLcg .proofpill__stars,
.section-onefit-endometriosis #fonLcg .proofpill__stars {
  color: var(--star);
  text-shadow: none;
}

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  gap: 8px;
  margin-top: 12px;
  padding: 6px 13px 6px 7px;
  font-size: 11.5px;
}

.section-onefit-busy-mums #fonLcg .hero__tick,
.section-onefit-gut-health #fonLcg .hero__tick,
.section-onefit-perimenopause #fonLcg .hero__tick,
.section-onefit-menopause #fonLcg .hero__tick,
.section-onefit-endometriosis #fonLcg .hero__tick {
  width: 15px;
  height: 15px;
  display: inline-block;
  position: relative;
}

.section-onefit-busy-mums #fonLcg .hero__tick::after,
.section-onefit-gut-health #fonLcg .hero__tick::after,
.section-onefit-perimenopause #fonLcg .hero__tick::after,
.section-onefit-menopause #fonLcg .hero__tick::after,
.section-onefit-endometriosis #fonLcg .hero__tick::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 47%;
  width: 3.5px;
  height: 7px;
  border: solid #fff;
  border-width: 0 1.8px 1.8px 0;
  transform: translate(-50%, -50%) rotate(45deg);
}

/* ==========================================================================
   ANGLE LANDERS — HERO IMAGE TO THE REFERENCE: 50/50, SQUARE, TALLER
   ==========================================================================
   Measured against the Gruns lander rather than adjusted by feel.

     * 50/50 - the image takes exactly half the viewport, so the two halves of
       the hero are equal. --gh-img was 50vw already but the hero's padding-left
       sat OUTSIDE the flex row, which pushed the copy side wider than half.
       The inset now comes off the image's share, so the split is true.

     * SQUARE CORNERS - the radius goes entirely. The reference has none, and
       an inside-only radius was always a compromise for a panel that bleeds off
       one edge; square reads as deliberate where a single rounded corner reads
       as a card that lost its other side.

     * TALLER - the reference's image runs the full height of the hero content
       with no cap, so it ends level with the bottom of the copy rather than
       stopping short. min-height replaces the fixed clamp, and the figure
       stretches to whatever the copy column needs.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    align-items: stretch;
  }

.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding-block: clamp(28px, 3.4vw, 56px);
  }

.section-onefit-busy-mums #fonLcg .hero__art,
.section-onefit-gut-health #fonLcg .hero__art,
.section-onefit-perimenopause #fonLcg .hero__art,
.section-onefit-menopause #fonLcg .hero__art,
.section-onefit-endometriosis #fonLcg .hero__art {
    flex: 0 0 50vw;
    max-width: 50vw;
    display: flex;
  }

.section-onefit-busy-mums #fonLcg .hero__figure,
.section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    width: 100%;
    height: auto;
    min-height: clamp(560px, 62vw, 860px);
    border-radius: 0;
  }
}

@media (max-width: 899.98px) {
.section-onefit-busy-mums #fonLcg .hero__figure,
.section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    border-radius: 0;
  }
}

/* --- The copy is not pushed to the edge -----------------------------------
   The reference keeps a generous margin before its text - the copy sits in
   from the viewport edge rather than starting at it. --gh-inset was tuned
   down over several passes chasing a gap that was really the old grid's
   flexible first track; with flex that pressure is gone, so it can go back up
   to a comfortable margin without anything else moving. */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
    --gh-inset: clamp(64px, 5.4vw, 104px);
  }
}

/* --- The lead paragraph in full ink ---------------------------------------
   It was inheriting --fg-mut (grey-700), which is the right weight for
   secondary copy but too light for the one paragraph that carries the hero's
   argument. It takes --fg (#131210) now. The bold run inside it keeps its
   600 weight, so the emphasis still reads against the darker body. */

.section-onefit-busy-mums #fonLcg .hero__sub,
.section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
  color: var(--fg);
}

/* ==========================================================================
   ANGLE LANDERS — FIX: THE LISTICLE PANEL HAD COLLAPSED
   ==========================================================================
   MY BUG, from the uniform-panels pass. That pass set

       .blk__panel { display: flex }

   so the panel could stretch its card to a shared min-height. But .blk__panel
   is ALSO the flex item carrying `flex: 0 0 42vw` in the row - and because the
   display rule came later, it left the card free to size to its own content.
   The card shrank to text width, the column narrowed to a strip, and the tiles
   wrapped two or three words per line.

   The fix restates the basis AFTER the display rule and pins the card to the
   full track width, so the panel works as both: a flex container for the
   height, and a correctly sized flex item for the width.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    display: flex;
    flex: 0 0 42vw;
    width: 42vw;
    max-width: 42vw;
    min-width: 0;
  }

.section-onefit-busy-mums #fonLcg .blk__panel > .panel,
.section-onefit-gut-health #fonLcg .blk__panel > .panel,
.section-onefit-perimenopause #fonLcg .blk__panel > .panel,
.section-onefit-menopause #fonLcg .blk__panel > .panel,
.section-onefit-endometriosis #fonLcg .blk__panel > .panel {
    flex: 1 1 auto;
    width: 100%;
    min-width: 0;
  }
}

/* --- "Risk-Free for 90 days" leads the rail -------------------------------
   The guarantee is the part of this line worth reading, so it takes a step up
   in size and weight while the shipping list stays at the smaller size behind
   it. The link keeps no underline - the size difference is doing the work, and
   an underline at this scale would read as a second CTA under the button. */

.section-onefit-busy-mums #fonLcg .hero__risk a,
.section-onefit-gut-health #fonLcg .hero__risk a,
.section-onefit-perimenopause #fonLcg .hero__risk a,
.section-onefit-menopause #fonLcg .hero__risk a,
.section-onefit-endometriosis #fonLcg .hero__risk a {
  font-size: 13.5px;
  font-weight: 700;
  color: var(--fg);
  text-decoration: none;
}

/* ==========================================================================
   ANGLE LANDERS — LESS TOP SPACE, COMPACT PILL, BOLD VALUES
   ==========================================================================
   1 · THE TOP GAP IS MINE. Making the image full-height meant the row stretches
   and the copy centres inside its own padding-block - I set that to 28-56px,
   which on a tall hero pushes everything down before the pill even starts. It
   comes down to 12-22px; the copy is centred anyway, so the padding was only
   ever there to stop it touching the bar.

   2 · THE PILL WAS OVERSIZED against the reference. Grüns runs a compact
   lockup: small avatars, tight padding, one line. Ours had grown to 15px type
   in a 10px/22px pill with 30px avatars. Everything steps down.

   3 · THE VALUES GO BOLD - 4.8, 2.1K, 500K+ carry the meaning, so they take
   700 while their labels stay regular, exactly as the reference sets them.

   4 · A BETTER GROUP ICON. The previous SVG was two heads at different sizes
   on an uneven baseline. This is a cleaner three-person mark, evenly weighted
   and optically centred against the text beside it.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .proofpill--rating b,
.section-onefit-gut-health #fonLcg .proofpill--rating b,
.section-onefit-perimenopause #fonLcg .proofpill--rating b,
.section-onefit-menopause #fonLcg .proofpill--rating b,
.section-onefit-endometriosis #fonLcg .proofpill--rating b {
  font-weight: 700;
  color: var(--fg);
}

.section-onefit-busy-mums #fonLcg .proofpill--rating,
.section-onefit-gut-health #fonLcg .proofpill--rating,
.section-onefit-perimenopause #fonLcg .proofpill--rating,
.section-onefit-menopause #fonLcg .proofpill--rating,
.section-onefit-endometriosis #fonLcg .proofpill--rating {
  padding: 6px 15px 6px 6px;
  font-size: 13px;
  gap: 8px;
  margin-bottom: clamp(10px, 1.1vw, 15px);
  box-shadow: 0 1px 2px rgba(20, 20, 15, .05), 0 6px 18px -12px rgba(20, 20, 15, .16);
}

.section-onefit-busy-mums #fonLcg .proofpill--rating .proofpill__av img,
.section-onefit-gut-health #fonLcg .proofpill--rating .proofpill__av img,
.section-onefit-perimenopause #fonLcg .proofpill--rating .proofpill__av img,
.section-onefit-menopause #fonLcg .proofpill--rating .proofpill__av img,
.section-onefit-endometriosis #fonLcg .proofpill--rating .proofpill__av img {
  width: 24px;
  height: 24px;
  border-width: 2px;
}

.section-onefit-busy-mums #fonLcg .proofpill--rating .proofpill__stars,
.section-onefit-gut-health #fonLcg .proofpill--rating .proofpill__stars,
.section-onefit-perimenopause #fonLcg .proofpill--rating .proofpill__stars,
.section-onefit-menopause #fonLcg .proofpill--rating .proofpill__stars,
.section-onefit-endometriosis #fonLcg .proofpill--rating .proofpill__stars {
  font-size: 13px;
}

.section-onefit-busy-mums #fonLcg .proofpill--rating .pf__i,
.section-onefit-gut-health #fonLcg .proofpill--rating .pf__i,
.section-onefit-perimenopause #fonLcg .proofpill--rating .pf__i,
.section-onefit-menopause #fonLcg .proofpill--rating .pf__i,
.section-onefit-endometriosis #fonLcg .proofpill--rating .pf__i {
  width: 15px;
  height: 15px;
}

.section-onefit-busy-mums #fonLcg .proofpill--rating i,
.section-onefit-gut-health #fonLcg .proofpill--rating i,
.section-onefit-perimenopause #fonLcg .proofpill--rating i,
.section-onefit-menopause #fonLcg .proofpill--rating i,
.section-onefit-endometriosis #fonLcg .proofpill--rating i {
  opacity: .28;
}

.section-onefit-busy-mums #fonLcg .pf__i--grp,
.section-onefit-gut-health #fonLcg .pf__i--grp,
.section-onefit-perimenopause #fonLcg .pf__i--grp,
.section-onefit-menopause #fonLcg .pf__i--grp,
.section-onefit-endometriosis #fonLcg .pf__i--grp {
  width: 16px;
  height: 16px;
  color: var(--fg);
  position: relative;
  top: .5px;
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    padding-block: clamp(12px, 1.4vw, 22px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — HERO: SHORTER IMAGE, RIGHT GUTTER, COPY TO THE TOP
   ==========================================================================
   Four corrections, measured against the Grüns reference beside it.

   1 · THE RISK RAIL WAS TOO WIDE. "Try it Risk-Free for 90 days · Free
       shipping to AU, USA, NZ & UK" ran as one nowrap line, so the pill grew
       to whatever that sentence needed — wider than the button above it, which
       made the fine print the widest object in the copy column. The guarantee
       is the part worth reading; the shipping list is a footnote riding along
       behind it. `white-space: normal` lets the rail wrap, and a max-width
       caps it under the button so the CTA stays the widest thing in the stack.

   2 · THE IMAGE GETS A RIGHT GUTTER. It ran hard to the viewport edge at a
       true 50vw. The reference holds its picture inside a margin, which is
       what stops the hero reading as a wall of photograph. The image comes in
       to 46vw and the figure is inset from the right by the same gutter the
       copy has on the left, scaled down. Because .hero__art is the flex item
       and .hero__figure the painted box, the inset goes on the FIGURE via
       margin-right — putting it on the item would fight the flex basis.

   3 · THE COPY MOVES UP. It was centred in the row (justify-content: center
       from the 50/50 pass), so on a tall hero it floated at the vertical
       middle with a large dead space above the proof pill. `flex-start` puts
       the pill near the top where the reference has it, and the padding-block
       becomes a real top offset rather than a centring cushion.

   4 · THE IMAGE IS SHORTER. min-height was clamp(560px, 62vw, 860px), which
       at 1440 wide resolves to 860px — taller than most laptop viewports, so
       the hero alone overflowed the screen and the CTA sat below the fold.
       It is capped against the VIEWPORT instead: tall enough to hold the
       photograph, short enough that the button and the risk rail are both in
       the first screenful. 78vh leaves room for the promo bar and header.
   ========================================================================== */

@media (min-width: 900px) {

  /* 2 · the image no longer runs to the edge */
.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg ,
.section-onefit-perimenopause #fonLcg ,
.section-onefit-menopause #fonLcg ,
.section-onefit-endometriosis #fonLcg  {
    --gh-img: 46vw;
    /* Never inside the centred shell's own left margin, so the hero copy
       shares one vertical line with the beat headings below. */
    --gh-edge: max(clamp(24px, 2.4vw, 48px), (100vw - var(--shell)) / 2 + var(--gutter));
  }

.section-onefit-busy-mums #fonLcg .hero__art,
.section-onefit-gut-health #fonLcg .hero__art,
.section-onefit-perimenopause #fonLcg .hero__art,
.section-onefit-menopause #fonLcg .hero__art,
.section-onefit-endometriosis #fonLcg .hero__art {
    flex: 0 0 var(--gh-img);
    max-width: var(--gh-img);
  }

  /* 3 · the copy sits at the top of the row, not centred in it */
.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    justify-content: flex-start;
    padding-block: clamp(24px, 3vw, 52px) clamp(12px, 1.4vw, 22px);
  }

  /* 2 + 4 · inset from the right edge, and short enough for the screen */
.section-onefit-busy-mums #fonLcg .hero__figure,
.section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    margin-right: var(--gh-edge);
    /* THE FIGURE CARRIES ITS OWN HEIGHT. An earlier revision of this pass set
       height:auto + min-height:0 and leaned on align-self:stretch to fill the
       row. That never applied: .hero__art is itself display:flex, so the
       figure is a flex ITEM in a ROW - align-self works the cross axis, but
       with min-height cleared there was nothing left holding the box open at
       all. It collapsed to zero and the photograph disappeared.
       The height is stated outright, capped against the viewport so the CTA
       still clears the fold. */
    height: min(72vh, 660px);
    min-height: 0;
    max-height: none;
  }

  /* The row, not the figure, carries the height cap: the figure stretches to
     the row and the row is capped against the viewport, so the photograph
     still ends level with the copy instead of stopping short of it. */
.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    min-height: min(78vh, 720px);
  }
}

/* 1 · the risk rail wraps and is capped under the button — every width */
.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  align-items: flex-start;
  max-width: 100%;
}

.section-onefit-busy-mums #fonLcg .hero__risk > span,
.section-onefit-gut-health #fonLcg .hero__risk > span,
.section-onefit-perimenopause #fonLcg .hero__risk > span,
.section-onefit-menopause #fonLcg .hero__risk > span,
.section-onefit-endometriosis #fonLcg .hero__risk > span {
  white-space: nowrap;
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    max-width: max-content;
  }

  /* The tick is a disc on the first line of a wrapping label, so it needs the
     same optical nudge the centred version got for free. */
.section-onefit-busy-mums #fonLcg .hero__tick,
.section-onefit-gut-health #fonLcg .hero__tick,
.section-onefit-perimenopause #fonLcg .hero__tick,
.section-onefit-menopause #fonLcg .hero__tick,
.section-onefit-endometriosis #fonLcg .hero__tick {
    flex: none;
    margin-top: 1px;
  }
}

/* --- The reassurance rail: ONE LINE, and no wider than the button ---------
   It must not wrap - "Try it Risk-Free for 90 days" and the shipping list are
   one sentence, and broken across two lines the pill became a block sitting
   under the CTA rather than a line of fine print.

   But on one line at 11.5px it was wider than the button above it, which is
   what made it read as the widest object in the column. The fix is the type,
   not the wrapping: the whole rail steps down, and the "Risk-Free for 90 days"
   run - which had been pushed UP to 13.5px by an earlier pass, larger than the
   rail containing it - comes back down to sit with its own sentence. It keeps
   the heavier weight, so the guarantee still leads without setting the width.

   Measured: at 11px with a 12px lead the sentence needs ~415px, against a
   button of ~535px at 1440 wide. It fits with room to spare and stays the
   narrower of the two at every width down to 900px. */

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  font-size: 11px;
  padding: 6px 14px 6px 7px;
  gap: 7px;
  align-items: center;
}

.section-onefit-busy-mums #fonLcg .hero__risk a,
.section-onefit-gut-health #fonLcg .hero__risk a,
.section-onefit-perimenopause #fonLcg .hero__risk a,
.section-onefit-menopause #fonLcg .hero__risk a,
.section-onefit-endometriosis #fonLcg .hero__risk a {
  font-size: 12px;
  font-weight: 700;
}

/* ==========================================================================
   ANGLE LANDERS — RISK PILL SHRINKS TO ITS TEXT, TALLER IMAGE, COPY LOWER
   ==========================================================================
   1 · THE PILL WAS FULL-WIDTH, and it was mine. .hero__risk is inline-flex,
       which sizes to content in normal flow - but .hero__copy is a flex COLUMN,
       so the pill is a flex item and the cross axis is horizontal: items
       stretch to the column's full width unless told otherwise. `inline-flex`
       does nothing about that; the max-width I removed last pass had been the
       only thing holding it in. `align-self: flex-start` is the actual fix -
       it opts the item out of the stretch, so the pill wraps its own sentence
       and nothing has to be measured to keep it there.

   2 · THE IMAGE RUNS THE HEIGHT OF THE SCREEN. It was min(72vh, 660px), which
       capped at 660px on a tall display and left white space under it. The
       viewport minus the promo bar and the sticky header is what "same as
       screen" means here - 106px of chrome, see the header pass - so it takes
       calc(100vh - 106px) with the ceiling removed. The row's own min-height
       is raised to match, otherwise the row stays short and the figure
       overflows it.

   3 · THE COPY SITS A LITTLE LOWER. The previous pass moved it to flex-start,
       which put the proof pill hard against the header. A larger top offset
       drops it without going back to the centring that caused the original
       dead space.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  align-self: flex-start;
  width: auto;
  max-width: max-content;
}

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero__figure,
.section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    height: calc(100vh - 106px);
    max-height: none;
  }

.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    min-height: calc(100vh - 106px);
  }

.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    padding-block: clamp(48px, 6vw, 104px) clamp(12px, 1.4vw, 22px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE TICK MATCHES THE MEMBERS MARK, PILL CENTRED ON THE CTA
   ==========================================================================
   1 · THE TICK TAKES THE PROOF PILL'S TREATMENT. The members icon in the pill
       above is a dark glyph in --fg on the pill's own ground - no coloured
       disc behind it - and that is the mark being matched here. The blue
       Blue_Check.svg is dropped along with the white chevron drawn on top of
       it; the disc becomes an outlined ring in the text's own ink with the
       chevron drawn in currentColor, so it reads as part of the sentence
       rather than as a second blue element competing with the button.

       The chevron keeps the transform-centred positioning from the earlier
       fix - it is centred by transform, not by hardcoded offsets, so it
       stays put whatever size the ring becomes.

   2 · THE PILL CENTRES ON THE BUTTON. align-self:flex-start pinned it to the
       left edge of the copy column, which is the button's left edge - so a
       pill narrower than the button sat off to one side of it. The CTA wrap
       and the rail are both blocks in the same flex column, so centring the
       rail against the column centres it against the button: the two share
       an axis. `align-self: center` replaces flex-start and keeps the
       shrink-to-content behaviour that flex-start was there to provide.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__tick,
.section-onefit-gut-health #fonLcg .hero__tick,
.section-onefit-perimenopause #fonLcg .hero__tick,
.section-onefit-menopause #fonLcg .hero__tick,
.section-onefit-endometriosis #fonLcg .hero__tick {
  background: none;
  border: 1.5px solid var(--fg);
  border-radius: 50%;
  box-sizing: border-box;
  color: var(--fg);
  width: 16px;
  height: 16px;
}

.section-onefit-busy-mums #fonLcg .hero__tick::after,
.section-onefit-gut-health #fonLcg .hero__tick::after,
.section-onefit-perimenopause #fonLcg .hero__tick::after,
.section-onefit-menopause #fonLcg .hero__tick::after,
.section-onefit-endometriosis #fonLcg .hero__tick::after {
  border-color: currentColor;
  border-width: 0 1.7px 1.7px 0;
  width: 3.5px;
  height: 7px;
  left: 50%;
  top: 46%;
}

/* CENTRED ON THE BUTTON, NOT ON THE COLUMN - they are not the same axis.
   .hero__ctawrap is capped at max-width:430px and sits at the LEFT of the copy
   column, so align-self:center on the rail would centre it against the column
   and push it right of the button it belongs to. The pill is offset by half
   the difference between the button's box and its own instead, so the two
   share a centre line while the pill still hugs its sentence. */

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  align-self: flex-start;
  width: max-content;
  max-width: 100%;
  /* The pill keeps hugging its sentence - a 430px-wide bar is the stretch
     that was wrong before. Only its POSITION moves: margin-inline auto inside
     a 430px box would need a wrapper, so it is offset directly instead. The
     button's box is 430px and the pill is ~415px at this size, so half the
     difference is a hair over 7px; `margin-left: auto` cannot work against a
     flex-start item, and a percentage would drift with the text, so the shift
     is expressed against the same 430px the button uses:
     (430px - 100%) / 2, which resolves to the true half-difference whatever
     the sentence measures, and clamps at 0 if the pill ever exceeds it. */
  margin-left: max(0px, calc((430px - 100%) / 2));
}

@media (max-width: 899.98px) {
.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    /* Below 900px the button has no 430px cap - it fills the column - so the
       centring target is the column itself and the offset must not apply. */
    margin-left: 0;
  }
}

/* ==========================================================================
   ANGLE LANDERS — SOFTER BLUE RAIL, BLUE CHECK BACK, TRULY CENTRED
   ==========================================================================
   1 · WHY THE CHECK CHANGED, and it was a misread on my part. The brief was
       the members-icon crop with "circle logo of this is what I want", which
       I took as the icon's TREATMENT - dark ink, no coloured disc. It meant
       the SHAPE: a circle, with the blue check kept. Blue_Check.svg comes
       back and the drawn ring and chevron are removed.

   2 · THE CENTRING WAS BROKEN BY A PERCENTAGE. I offset the pill by
       calc((430px - 100%) / 2) meaning "half the difference between the
       button and the pill" - but a percentage in margin-left resolves against
       the PARENT's width, not the element's own, so that computed against the
       full copy column and threw the pill right rather than centring it.

       The fix is the pattern .hero__members already uses ten rules above:
       take the button's own 430px box and centre the CONTENTS inside it with
       justify-content. The pill's background then spans that box, so the
       softer ground below is doing the work a hugging pill used to do -
       which is why the stretch that was wrong before is right here.

   3 · THE GROUND GOES BLUE AND SOFTER. It was reading warm against the page's
       yellow-green wash. It takes a blue tint keyed to the button's own hue
       at a low alpha, with the border dropped to a hairline of the same - so
       it sits under the CTA as a quiet shelf rather than a bordered chip.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__tick,
.section-onefit-gut-health #fonLcg .hero__tick,
.section-onefit-perimenopause #fonLcg .hero__tick,
.section-onefit-menopause #fonLcg .hero__tick,
.section-onefit-endometriosis #fonLcg .hero__tick {
  background: url("Blue_Check.svg") center / contain no-repeat;
  border: 0;
  border-radius: 0;
  width: 16px;
  height: 16px;
}

.section-onefit-busy-mums #fonLcg .hero__tick::after,
.section-onefit-gut-health #fonLcg .hero__tick::after,
.section-onefit-perimenopause #fonLcg .hero__tick::after,
.section-onefit-menopause #fonLcg .hero__tick::after,
.section-onefit-endometriosis #fonLcg .hero__tick::after {
  content: none;
}

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  background: rgba(1, 113, 227, .07);
  border: 1px solid rgba(1, 113, 227, .12);
  box-shadow: none;
  margin-left: 0;
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    width: 100%;
    max-width: 430px;
    justify-content: center;
    margin-left: 0;
  }
}

/* ==========================================================================
   ANGLE LANDERS — NO PAGE WASH
   ==========================================================================
   The hero sat on a radial tint - lime originally, then blue, then a halved
   blue. Every version of it competed with the photograph and the CTA for the
   same screenful, so it goes entirely: the page is plain paper and the only
   colour in the hero is the button and the image.

   The base rule at the top of this file still paints the gradient on #fonLcg
   for the other landers that share this sheet. It is overridden here rather
   than deleted there, so lcarnitine-glp1-2 keeps the wash it was designed
   with and only the four angle landers go flat.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg,
.section-onefit-perimenopause #fonLcg,
.section-onefit-menopause #fonLcg,
.section-onefit-endometriosis #fonLcg {
  background: var(--paper);
}

/* ==========================================================================
   ANGLE LANDERS — THE LEFT COLUMN GOES UP A SIZE
   ==========================================================================
   The hero now runs the full height of the screen, so the copy column has
   vertical room it did not have when these sizes were set - the type was
   scaled for a 660px hero and looks small against a 900px one.

   Everything steps up together, so the hierarchy is unchanged:

     quote   34-50px  ->  38-56px
     turn    48-72px  ->  54-84px
     lead    17-20px  ->  18.5-22px

   THE CEILINGS ARE THE CONSTRAINT, NOT THE FLOORS. "You didn't eat anything."
   is nowrap (see the base rule) so it must fit the copy column at the top end:
   at 1440 the copy column is ~670px after the inset and the gap, and the
   sentence needs ~620px at 56px. It fits with ~50px spare. 58px was measured
   first and left only ~30px, which is inside the error of an estimate made
   from average glyph width - and because the line is nowrap a miss overflows
   the column rather than wrapping, so the headroom is the point. The headline
   wraps on its own <br> and is unaffected.

   The lead's measure comes in from 44ch to 42ch as it grows, so the line
   length stays in the same readable band rather than getting longer with the
   type.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hero__quote,
.section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-perimenopause #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(38px, 3.4vw, 56px);
  }

.section-onefit-busy-mums #fonLcg .hero__turn,
.section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-perimenopause #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(54px, 5vw, 84px);
  }

.section-onefit-busy-mums #fonLcg .hero__sub,
.section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-perimenopause #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: clamp(18.5px, 1.5vw, 22px);
    max-width: 42ch;
  }
}

/* ==========================================================================
   ANGLE LANDERS — SHORTER PROMO BAR, MORE AIR IN IT, TALLER HEADER
   ==========================================================================
   1 · THE BAR COMES DOWN from 38px to 30px. It is a strip of standing
       guarantees, not a message anyone reads twice, and at 38px it was taking
       height from the hero it sits above.

   2 · THE CROWDING IS THE SPACING, NOT THE COUNT. Four promises repeat three
       times per half, and the count cannot change here - the loop depends on
       a half being wider than the viewport, and on both halves being
       identical, so removing items would break the seam the animation relies
       on (see the base rule). What made it read as noise is that the items
       were 18px apart with a rule between every one of them, so six or seven
       crowded the screen at once with no pause between them.

       The padding goes to 30px a side, so each promise has real space around
       it and fewer are on screen at any moment. The separators drop to a
       fainter grey - at .22 every rule was as dark as the text and the eye
       counted twelve verticals before reading a word. The type comes down
       half a point to sit inside the shorter bar.

       The bar still scrolls the same distance in the same time, so the wider
       items simply pass at the same speed.

   3 · THE HEADER GOES TALLER, 70px to 84px, which is where the height taken
       off the promo bar goes. The logo and the CTA grow with it so the bar
       does not read as the same lockup floating in more space.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .promo,
.section-onefit-gut-health #fonLcg .promo,
.section-onefit-perimenopause #fonLcg .promo,
.section-onefit-menopause #fonLcg .promo,
.section-onefit-endometriosis #fonLcg .promo {
  height: 30px;
}

.section-onefit-busy-mums #fonLcg .promo__i,
.section-onefit-gut-health #fonLcg .promo__i,
.section-onefit-perimenopause #fonLcg .promo__i,
.section-onefit-menopause #fonLcg .promo__i,
.section-onefit-endometriosis #fonLcg .promo__i {
  padding-inline: 30px;
  font-size: 11.5px;
  gap: 8px;
}

.section-onefit-busy-mums #fonLcg .promo__i + .promo__i,
.section-onefit-gut-health #fonLcg .promo__i + .promo__i,
.section-onefit-perimenopause #fonLcg .promo__i + .promo__i,
.section-onefit-menopause #fonLcg .promo__i + .promo__i,
.section-onefit-endometriosis #fonLcg .promo__i + .promo__i,
.section-onefit-busy-mums #fonLcg .promo__half + .promo__half .promo__i:first-child,
.section-onefit-gut-health #fonLcg .promo__half + .promo__half .promo__i:first-child,
.section-onefit-perimenopause #fonLcg .promo__half + .promo__half .promo__i:first-child,
.section-onefit-menopause #fonLcg .promo__half + .promo__half .promo__i:first-child,
.section-onefit-endometriosis #fonLcg .promo__half + .promo__half .promo__i:first-child {
  border-left-color: rgba(38, 32, 20, .12);
}

.section-onefit-busy-mums #fonLcg .promo__i img,
.section-onefit-gut-health #fonLcg .promo__i img,
.section-onefit-perimenopause #fonLcg .promo__i img,
.section-onefit-menopause #fonLcg .promo__i img,
.section-onefit-endometriosis #fonLcg .promo__i img {
  width: 14px;
  height: 14px;
  opacity: .7;
}

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hdr__in,
.section-onefit-gut-health #fonLcg .hdr__in,
.section-onefit-perimenopause #fonLcg .hdr__in,
.section-onefit-menopause #fonLcg .hdr__in,
.section-onefit-endometriosis #fonLcg .hdr__in {
    min-height: 84px;
  }

.section-onefit-busy-mums #fonLcg .hdr__logo img,
.section-onefit-gut-health #fonLcg .hdr__logo img,
.section-onefit-perimenopause #fonLcg .hdr__logo img,
.section-onefit-menopause #fonLcg .hdr__logo img,
.section-onefit-endometriosis #fonLcg .hdr__logo img {
    width: 146px;
  }

.section-onefit-busy-mums #fonLcg .hdr__cta,
.section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-perimenopause #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
    min-height: 48px;
    padding: 13px 26px;
  }
}

/* The chrome above the hero changed height in the pass above - the promo bar
   came down to 30px and the header went up to 84px, so the total is 114px
   rather than the 118px the hero was measured against. Both full-screen
   heights are restated there.

   THE SCROLL OFFSET IS SET ON html, NOT ON THE SECTION, so it cannot be
   overridden by a .section-onefit-* selector - html is an ancestor of the
   section, not a descendant. It is restated here at the same specificity the
   base rule uses, scoped to the pages that carry a lander by :has(), so the
   other landers sharing this sheet keep the 108px they were built with.
   Without it the sticky header sits over the top of whatever the in-page nav
   jumped to. */

html:has(.section-onefit-busy-mums),
html:has(.section-onefit-gut-health),
html:has(.section-onefit-perimenopause),
html:has(.section-onefit-menopause),
html:has(.section-onefit-endometriosis) {
  scroll-padding-top: 106px;
}

/* ==========================================================================
   ANGLE LANDERS — HEADER: SHORTER BAR, SHORTER CTA, LIME AGAIN
   ==========================================================================
   1 · 84px WAS TOO TALL. The previous pass took the height off the promo bar
       and gave all of it to the header; 76px keeps most of that gain for the
       hero while still reading as a taller bar than the 70px it started at.

   2 · THE CTA COMES DOWN with it, 48px to 42px, and the logo eases back a
       little so the lockup stays in proportion rather than filling the
       shorter bar.

   3 · IT GOES LIME AGAIN. An earlier pass put both buttons in brand blue for
       consistency, which is what turned this one blue. Two blue CTAs stacked
       in the same screenful is one too many: the hero button is the action
       the page is built around, and the header repeating it in the same
       colour splits the attention rather than doubling it. The header takes
       --lime back - the theme's own header treatment - and the hero button
       keeps the blue. The base rule already sets exactly this, so the two
       blue overrides are simply reverted to it.

   The chrome total goes 114px to 106px, so the hero's full-screen height and
   the anchor scroll offset are restated again with it.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .hdr__in,
.section-onefit-gut-health #fonLcg .hdr__in,
.section-onefit-perimenopause #fonLcg .hdr__in,
.section-onefit-menopause #fonLcg .hdr__in,
.section-onefit-endometriosis #fonLcg .hdr__in {
    min-height: 76px;
  }

.section-onefit-busy-mums #fonLcg .hdr__logo img,
.section-onefit-gut-health #fonLcg .hdr__logo img,
.section-onefit-perimenopause #fonLcg .hdr__logo img,
.section-onefit-menopause #fonLcg .hdr__logo img,
.section-onefit-endometriosis #fonLcg .hdr__logo img {
    width: 138px;
  }

.section-onefit-busy-mums #fonLcg .hdr__cta,
.section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-perimenopause #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
    min-height: 42px;
    padding: 10px 22px;
  }
}

.section-onefit-busy-mums #fonLcg .hdr__cta,
.section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-perimenopause #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
  background: var(--lime);
  border-color: var(--lime);
  color: var(--lime-ink);
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hdr__cta:hover,
.section-onefit-gut-health #fonLcg .hdr__cta:hover,
.section-onefit-perimenopause #fonLcg .hdr__cta:hover,
.section-onefit-menopause #fonLcg .hdr__cta:hover,
.section-onefit-endometriosis #fonLcg .hdr__cta:hover {
    background: var(--lime-dk);
    border-color: var(--lime-dk);
    color: var(--lime-ink);
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE FOOTNOTE BELONGS UNDER THE CARD, NOT BESIDE IT
   ==========================================================================
   MY BUG, and it is why six of the seven beats looked wrong while beat 04
   looked right.

   .blk__panel was given `display: flex` so the card inside it could stretch
   to a shared height. But a flex container with no direction is a ROW, and
   .blk__panel holds TWO children on six of the seven beats:

       <div class="blk__panel">
         <div class="panel">  ...the card...  </div>
         <p class="panel__f"> ...the footnote... </p>
       </div>

   so the card and its footnote became side-by-side columns inside a 42vw
   track. The footnote took a share of the width, the card was left with
   roughly two thirds of it, and the tiles inside wrapped three or four words
   to a line. Beat 04 is the ONLY beat with no .panel__f - one child, nothing
   to sit beside, full width. That is the whole difference between it and the
   other six; nothing about beat 04 was styled differently.

   `flex-direction: column` is the fix: the card keeps the stretch it was
   given flex for, and the footnote returns to where it reads - underneath,
   at the card's full width. The card's `flex: 1 1 auto` now grows on the
   vertical axis, which is what the uniform-height pass wanted in the first
   place, and the footnote takes flex:none so it stays at its natural height
   instead of being stretched to share the column.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    flex-direction: column;
    align-items: stretch;
  }

.section-onefit-busy-mums #fonLcg .blk__panel > .panel__f,
.section-onefit-gut-health #fonLcg .blk__panel > .panel__f,
.section-onefit-perimenopause #fonLcg .blk__panel > .panel__f,
.section-onefit-menopause #fonLcg .blk__panel > .panel__f,
.section-onefit-endometriosis #fonLcg .blk__panel > .panel__f {
    flex: none;
    width: 100%;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE HERO CTA AND ITS RAIL GO LIME
   ==========================================================================
   The hero button was the last blue element on the page. With the header CTA
   already back on lime and the page wash removed, a single blue button was
   the only thing of that hue in the whole first screenful - it read as
   borrowed from another site rather than as this page's own accent.

   It takes --lime with --lime-ink for the label, the same pair the header
   uses, so the two CTAs are now one component at two sizes.

   THE SHADOW HAD TO CHANGE WITH THE FILL. It was a blue-tinted glow, keyed to
   rgba(1, 113, 227, .65) - under a lime button that reads as a blue haze
   around a yellow-green object. It is restated in the ink's own warm grey at
   a lower alpha: lime is a light colour and a heavy drop shadow under it
   reads as dirt rather than as lift. The inset highlight goes entirely for
   the same reason - a white bevel on an already-light fill does nothing
   except soften the top edge.

   THE RAIL FOLLOWS THE BUTTON. It was tinted to the blue it sat under; with
   the button lime, that tint is the odd one out. It takes the same lime at a
   low alpha, so the two read as one block - the button and its reassurance -
   rather than as two unrelated chips. The tick stays as it is: Blue_Check.svg
   is the site's own check mark and it is legible on the lighter ground.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
  background: var(--lime);
  border-color: var(--lime);
  color: var(--lime-ink);
  box-shadow:
    0 1px 2px rgba(38, 32, 20, .10),
    0 14px 30px -20px rgba(38, 32, 20, .45);
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:hover {
    background: var(--lime-dk);
    border-color: var(--lime-dk);
    color: var(--lime-ink);
  }
}

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  background: rgba(234, 246, 171, .55);
  border: 1px solid rgba(38, 32, 20, .10);
}

/* --- The copy moves back up a step ----------------------------------------
   It was dropped to clamp(48px, 6vw, 104px) when the hero first went
   full-height and the pill was sitting hard against the header. The header
   has since come down from 84px to 76px and the promo bar to 30px, so there
   is less chrome above it than there was when that figure was chosen and the
   column now sits lower than it needs to. Roughly a third comes off the top
   offset. The bottom stays where it is - it was never the problem. */

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__copy,
.section-onefit-gut-health #fonLcg .hero__copy,
.section-onefit-perimenopause #fonLcg .hero__copy,
.section-onefit-menopause #fonLcg .hero__copy,
.section-onefit-endometriosis #fonLcg .hero__copy {
    padding-block: clamp(28px, 3.6vw, 68px) clamp(12px, 1.4vw, 22px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE HERO CTA TAKES THE LIVE HOMEPAGE BUTTON
   ==========================================================================
   Ported from .section-index-2026-hero a.hero-cta in fon-index-2026.css -
   the button on usefon.com - rather than approximated:

       fill      #EAF6AB            (the same --lime this already used)
       label     #3E3E3E, 700       (slightly lighter than --lime-ink #333)
       radius    5px                (was the pill-ish --r-md)
       border    1px rgba(255,255,255,.40)
       height    52px
       width     min(406px, 100%)
       case      capitalize
       hover     translateY(-2px) over .3s

   THE SHADOW IS THE ONE THING NOT COPIED VERBATIM, and the reason is the
   ground. The homepage button sits on a dark photograph, so its shadow is a
   white outer glow plus white inset bevels - light on dark. Our hero is white
   paper: white glow on white renders as nothing at all, and the inset bevels
   flatten the fill rather than lifting it. The shape, fill and border are the
   parts that make it recognisable as the same button; the shadow is restated
   in warm grey at low alpha so it reads as the same component lit differently
   rather than as a different component.

   THE WIDTH REPLACES THE 430px CAP the rail was being centred against, so
   both are restated here together at 406px.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
  background: #EAF6AB;
  border: 1px solid rgba(38, 32, 20, .12);
  border-radius: 5px;
  color: #3E3E3E;
  font-weight: 700;
  font-size: clamp(15px, .99vw, 19px);
  line-height: 24px;
  text-transform: capitalize;
  min-height: 52px;
  padding: 8px 16px;
  box-shadow:
    0 1px 2px rgba(38, 32, 20, .08),
    0 12px 26px -18px rgba(38, 32, 20, .38);
  transition: transform .3s var(--ease);
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:hover {
    background: #EAF6AB;
    border-color: rgba(38, 32, 20, .12);
    color: #3E3E3E;
    transform: translateY(-2px);
  }
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__ctawrap,
.section-onefit-gut-health #fonLcg .hero__ctawrap,
.section-onefit-perimenopause #fonLcg .hero__ctawrap,
.section-onefit-menopause #fonLcg .hero__ctawrap,
.section-onefit-endometriosis #fonLcg .hero__ctawrap {
    max-width: 406px;
  }
}

/* --- The rail loses its fill ----------------------------------------------
   With the button now carrying the lime, a lime rail directly under it made
   two yellow-green blocks stacked - the reassurance reading as loud as the
   action above it. The ground and the border go entirely: it is fine print,
   and fine print does not need a container. Only the tick and the type are
   left, which is what the line was always for.

   The 430px box it was being centred in goes to 406px with the button, so the
   two still share a centre line. */

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  background: none;
  border: 0;
  box-shadow: none;
  padding: 6px 0 0;
}

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    max-width: 406px;
  }
}

/* The dead 430px offset is zeroed. An earlier pass shifted the rail with
   margin-left: max(0px, calc((430px - 100%) / 2)) back when it hugged its own
   text; the rail now takes the button's full box and centres its contents, so
   that offset is both obsolete and wrong - it would push the line off the
   centre line it is supposed to share with the button. */

.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  margin-left: 0;
  width: 100%;
  justify-content: center;
}

/* ==========================================================================
   ANGLE LANDERS — THE CTA GETS THE HOMEPAGE BUTTON'S INNER GLOW BACK
   ==========================================================================
   I dropped the whole shadow stack when porting this button, on the grounds
   that it was built for a dark photograph. That was right about the OUTER
   glow and wrong about the INSET.

     * The outer glow is white spreading outwards - on the homepage's dark
       photo it haloes the button, on our white paper it renders as nothing
       at all. It stays out.

     * The inset bevels are white painted INSIDE the button, over the lime.
       Lime is lighter than the page but darker than white, so they read on
       any ground - that soft lit-from-within top edge is the look, and it
       was the part actually worth keeping.

   The three inset layers are restored at the homepage's own values
   (0.98/0.92/4.12 and 1.91/1.78/8.24 at .30, the latter doubled as it is in
   the source), and the warm-grey drop shadow stays underneath to seat the
   button on light paper where the white outer glow cannot.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
  box-shadow:
    inset 0.98px 0.92px 4.12px 0 rgba(255, 255, 255, .30),
    inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, .30),
    inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, .30),
    inset 0 1px 0 rgba(255, 255, 255, .55),
    0 1px 2px rgba(38, 32, 20, .08),
    0 12px 26px -18px rgba(38, 32, 20, .38);
}

/* ==========================================================================
   ANGLE LANDERS — NO BUTTON GROWS A SHADOW ON HOVER
   ==========================================================================
   Three separate rules were adding or swapping a shadow on hover:

     .btn--primary:hover            a blue glow, 0 8px 20px -6px
     .btn--ghost:hover              a grey drop, 0 6px 12px
     .hero__cta .btn--lg:hover      a whole replacement stack (dead now, but
                                    it would win again the moment the rule
                                    above it moved)

   A shadow that appears on hover reads as the button jumping off the page,
   and on the hero CTA it also fought the inset glow: the resting state has
   a lit inner edge and the hover state replaced the entire stack, so the
   glow vanished at the exact moment the pointer arrived.

   EVERY BUTTON KEEPS THE SHADOW IT RESTS WITH. `box-shadow: inherit` is
   wrong here - it would take the PARENT's shadow, not its own - so each
   hover state is pinned back to its resting value instead:

     * the hero CTA restates its full inset stack, so the glow is unchanged
       through the hover rather than removed and re-added
     * .btn and the other variants take `box-shadow: none`, which is what
       they rest at

   The transform is untouched. The -2px lift is the hover feedback on this
   page and it does not need a shadow to carry it.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .btn:hover,
.section-onefit-gut-health #fonLcg .btn:hover,
.section-onefit-perimenopause #fonLcg .btn:hover,
.section-onefit-menopause #fonLcg .btn:hover,
.section-onefit-endometriosis #fonLcg .btn:hover {
  box-shadow: none;
}

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:hover {
  box-shadow:
    inset 0.98px 0.92px 4.12px 0 rgba(255, 255, 255, .30),
    inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, .30),
    inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, .30),
    inset 0 1px 0 rgba(255, 255, 255, .55),
    0 1px 2px rgba(38, 32, 20, .08),
    0 12px 26px -18px rgba(38, 32, 20, .38);
}

/* ==========================================================================
   ANGLE LANDERS — THE LISTICLE PANEL REALIGNS WITH THE HERO IMAGE
   ==========================================================================
   MY BUG. The hero image and the listicle panel were both 42vw, which is what
   made their left edges line up down the page - the whole point of the flex
   pass that introduced --gh-img. When the hero image was narrowed to 46vw and
   given a right inset, the panel was left at a hardcoded 42vw in two places,
   so the two columns no longer start at the same x.

   The panel now reads --gh-img like the image does, and takes the same
   --gh-edge on its right, so the two share both edges. Stated as tokens
   rather than numbers so changing the image's width moves the panel with it -
   the drift happened precisely because one was a token and the other a
   literal.
   ========================================================================== */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    flex: 0 0 var(--gh-img);
    width: var(--gh-img);
    max-width: var(--gh-img);
    padding-right: var(--gh-edge);
  }
}

/* --- The proof pill blends into the page ----------------------------------
   It was a white lozenge with a hairline and a drop shadow, sitting on white
   paper - so the only thing the container did was draw a hard edge around
   four pieces of text and lift them off a ground they were already on. With
   the page wash gone there is nothing for it to separate the proof FROM.

   The surface goes entirely: no fill, no border, no shadow, no radius, and
   the horizontal padding comes off so the avatars start on the same left
   edge as the headline below them. The stars, the values and the separators
   are untouched - the proof still reads as one lockup, it just no longer
   arrives in a box. */

.section-onefit-busy-mums #fonLcg .proofpill,
.section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill,
.section-onefit-busy-mums #fonLcg .proofpill--rating,
.section-onefit-gut-health #fonLcg .proofpill--rating,
.section-onefit-perimenopause #fonLcg .proofpill--rating,
.section-onefit-menopause #fonLcg .proofpill--rating,
.section-onefit-endometriosis #fonLcg .proofpill--rating {
  background: none;
  border: 0;
  box-shadow: none;
  border-radius: 0;
  padding-inline: 0;
}

/* --- The panel keeps its left edge and gives width back on the right -------
   Aligning the panel to the hero image fixed the left edge but made the card
   as wide as the photograph - ~628px of content at 1440 - and a tile holding
   one short sentence does not want 628px. The rows ran as single long lines
   with the number disc stranded a long way from the end of its own sentence.

   The width comes off the RIGHT only, so the left edge stays exactly where it
   was just aligned to. --gh-trim is the amount given back; the panel is
   var(--gh-img) minus that, and the existing --gh-edge padding still sits
   inside it, so the card's right edge pulls in from the image's rather than
   the whole column moving.

   Stated as its own token so the width can be tuned without touching the
   alignment - the two concerns stay separate, which is what went wrong the
   last time one number was doing both jobs. */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg,
.section-onefit-perimenopause #fonLcg,
.section-onefit-menopause #fonLcg,
.section-onefit-endometriosis #fonLcg {
    --gh-trim: clamp(40px, 7vw, 130px);
  }

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    flex: 0 0 calc(var(--gh-img) - var(--gh-trim));
    width: calc(var(--gh-img) - var(--gh-trim));
    max-width: calc(var(--gh-img) - var(--gh-trim));
  }
}

/* --- The proof pill is a pill again, and a more present one ---------------
   I read "blend on bg" as blend INTO the background and stripped the surface
   off. It meant the opposite: the lockup should stand out FROM the page, not
   dissolve into it. Restored, and given more presence than the version that
   was there before it was flattened.

   The white lozenge on white paper was the reason it read as weak in the
   first place, so this is not simply the old rule back. The fill steps to a
   warm off-white that separates from the paper, the hairline is a real edge
   rather than a suggestion, and the shadow is a soft seat rather than a glow
   - so the pill is legible as an object without becoming a card.

   The side padding comes back with it: a pill needs its ends. That moves the
   avatars in from the headline's left edge, which is correct here - the
   lockup is a discrete object and its container starts before its contents. */

.section-onefit-busy-mums #fonLcg .proofpill,
.section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill,
.section-onefit-busy-mums #fonLcg .proofpill--rating,
.section-onefit-gut-health #fonLcg .proofpill--rating,
.section-onefit-perimenopause #fonLcg .proofpill--rating,
.section-onefit-menopause #fonLcg .proofpill--rating,
.section-onefit-endometriosis #fonLcg .proofpill--rating {
  background: #FFFFFF;
  border: 1px solid rgba(38, 32, 20, .14);
  border-radius: var(--r-pill);
  padding: 7px 18px 7px 7px;
  box-shadow:
    0 1px 2px rgba(20, 20, 15, .06),
    0 10px 24px -14px rgba(20, 20, 15, .28);
}

/* --- The trim comes off the RIGHT, not the left ---------------------------
   MY ERROR, and the opposite of what was asked. .blk__panel is the last item
   in the flex row, so it is anchored to the row's RIGHT edge: shrinking its
   width pulls its LEFT edge inwards and leaves the right where it was. That
   is why narrowing it moved the panel away from the hero image's left edge
   instead of pulling its right edge in.

   The panel goes back to the image's full width, so its left edge sits on the
   image's left edge again, and the width is taken off the right with
   padding-right instead. Padding is inside the box: the box still spans the
   image, the CARD inside it stops short of the right. Left edge fixed, right
   edge in, which is what was asked for.

   --gh-trim is added to the --gh-edge that was already there, so the card
   clears the viewport edge by both. */

@media (min-width: 900px) {

.section-onefit-busy-mums #fonLcg .blk__panel,
.section-onefit-gut-health #fonLcg .blk__panel,
.section-onefit-perimenopause #fonLcg .blk__panel,
.section-onefit-menopause #fonLcg .blk__panel,
.section-onefit-endometriosis #fonLcg .blk__panel {
    flex: 0 0 var(--gh-img);
    width: var(--gh-img);
    max-width: var(--gh-img);
    padding-right: calc(var(--gh-edge) + var(--gh-trim));
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE BUY BOX: BLUE SELECTION, WHITE CARDS, PLAINER LIST
   ==========================================================================
   Six changes, all inside the offer column.

   1 · THE INGREDIENT LIST IS ONE LINE PER ITEM. Each <li> held a bold dose
       and an <i> caption, and the <i> was display:block, so every ingredient
       ran to two lines and the list was ten lines for five facts. The caption
       goes inline after its dose, separated by a middot drawn in ::before so
       no markup changes - one ingredient, one line.

   2 · SELECTION IS BLUE, NOT LIME. The checked option was a lime fill with an
       ink border, which is the same lime as the CTA and the tiles, so
       "chosen" looked like "decorated". Blue is used nowhere else in this
       column, which is exactly why it can carry state: --blue border, white
       fill, and a soft blue ring instead of the grey one.

   3 · THE FORMAT IMAGE LOSES ITS PLATE. It sat on its own grey/white square
       inside the card - a box inside a box. The plate goes transparent and
       the border with it, so the packshot sits directly on the card.

   4 · THE FLAVOUR SWATCH KEEPS ITS IMAGE, loses the lime. Same blue
       treatment as the format cards; the swatch photograph is untouched.

   5 · THE SUBSCRIBE BANNER GOES BLUE. It was --ink, a black bar at the top
       of the recommended plan. Blue ties it to the selection state it sits
       above rather than reading as a third colour.

   6 · THE OFFER CTA IS SQUARE, with the hero button's glow. It was a full
       pill in flat blue; it takes the 5px radius, the lime fill and the same
       inset stack the hero CTA carries, so the two CTAs on the page are one
       component.
   ========================================================================== */

/* 1 · one line per ingredient.
   Scoped to the DIRECT <i> child of the <li>, not every <i> in the list:
   item one is "<b>20bn CFU <i>L. paracasei</i></b>", so a bare .ticks--check i
   would also match the species name nested inside the bold run. The caption is
   the <i> that is a direct child; the species italic is a grandchild. */
.section-onefit-busy-mums #fonLcg .ticks--check li > i,
.section-onefit-gut-health #fonLcg .ticks--check li > i,
.section-onefit-perimenopause #fonLcg .ticks--check li > i,
.section-onefit-menopause #fonLcg .ticks--check li > i,
.section-onefit-endometriosis #fonLcg .ticks--check li > i {
  display: inline;
  margin-top: 0;
}

.section-onefit-busy-mums #fonLcg .ticks--check li > b + i::before,
.section-onefit-gut-health #fonLcg .ticks--check li > b + i::before,
.section-onefit-perimenopause #fonLcg .ticks--check li > b + i::before,
.section-onefit-menopause #fonLcg .ticks--check li > b + i::before,
.section-onefit-endometriosis #fonLcg .ticks--check li > b + i::before {
  content: " · ";
  color: var(--fg-soft);
}

.section-onefit-busy-mums #fonLcg .ticks--check li > b,
.section-onefit-gut-health #fonLcg .ticks--check li > b,
.section-onefit-perimenopause #fonLcg .ticks--check li > b,
.section-onefit-menopause #fonLcg .ticks--check li > b,
.section-onefit-endometriosis #fonLcg .ticks--check li > b {
  display: inline;
}

/* 2 · blue selection, on every option type */
.section-onefit-busy-mums #fonLcg .opt input:checked + .opt__b,
.section-onefit-gut-health #fonLcg .opt input:checked + .opt__b,
.section-onefit-perimenopause #fonLcg .opt input:checked + .opt__b,
.section-onefit-menopause #fonLcg .opt input:checked + .opt__b,
.section-onefit-endometriosis #fonLcg .opt input:checked + .opt__b,
.section-onefit-busy-mums #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-gut-health #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-perimenopause #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-menopause #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-endometriosis #fonLcg .opt input:checked ~ .opt__b {
  border-color: var(--blue);
  border-left-color: var(--blue);
  border-right-color: var(--blue);
  background: #FFFFFF;
  box-shadow: 0 0 0 2px rgba(1, 113, 227, .16);
}

/* 3 · the format packshot loses its plate */
.section-onefit-busy-mums #fonLcg .opt--fmt .opt__img,
.section-onefit-gut-health #fonLcg .opt--fmt .opt__img,
.section-onefit-perimenopause #fonLcg .opt--fmt .opt__img,
.section-onefit-menopause #fonLcg .opt--fmt .opt__img,
.section-onefit-endometriosis #fonLcg .opt--fmt .opt__img,
.section-onefit-busy-mums #fonLcg .opt--fmt input:checked + .opt__b .opt__img,
.section-onefit-gut-health #fonLcg .opt--fmt input:checked + .opt__b .opt__img,
.section-onefit-perimenopause #fonLcg .opt--fmt input:checked + .opt__b .opt__img,
.section-onefit-menopause #fonLcg .opt--fmt input:checked + .opt__b .opt__img,
.section-onefit-endometriosis #fonLcg .opt--fmt input:checked + .opt__b .opt__img {
  background: transparent;
  border: 0;
  box-shadow: none;
}

/* 5 · the recommended banner goes blue */
.section-onefit-busy-mums #fonLcg .opt__banner,
.section-onefit-gut-health #fonLcg .opt__banner,
.section-onefit-perimenopause #fonLcg .opt__banner,
.section-onefit-menopause #fonLcg .opt__banner,
.section-onefit-endometriosis #fonLcg .opt__banner {
  background: var(--blue);
  color: #FFFFFF;
}

/* 6 · the offer CTA matches the hero button */
.section-onefit-busy-mums #fonLcg .offer__right .btn--lg,
.section-onefit-gut-health #fonLcg .offer__right .btn--lg,
.section-onefit-perimenopause #fonLcg .offer__right .btn--lg,
.section-onefit-menopause #fonLcg .offer__right .btn--lg,
.section-onefit-endometriosis #fonLcg .offer__right .btn--lg,
.section-onefit-busy-mums #fonLcg .cfg .btn--lg,
.section-onefit-gut-health #fonLcg .cfg .btn--lg,
.section-onefit-perimenopause #fonLcg .cfg .btn--lg,
.section-onefit-menopause #fonLcg .cfg .btn--lg,
.section-onefit-endometriosis #fonLcg .cfg .btn--lg {
  background: #EAF6AB;
  border: 1px solid rgba(38, 32, 20, .12);
  border-radius: 5px;
  color: #3E3E3E;
  font-weight: 700;
  text-transform: capitalize;
  box-shadow:
    inset 0.98px 0.92px 4.12px 0 rgba(255, 255, 255, .30),
    inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, .30),
    inset 1.91px 1.78px 8.24px 0 rgba(255, 255, 255, .30),
    inset 0 1px 0 rgba(255, 255, 255, .55),
    0 1px 2px rgba(38, 32, 20, .08),
    0 12px 26px -18px rgba(38, 32, 20, .38);
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .offer__right .btn--lg:hover,
.section-onefit-gut-health #fonLcg .offer__right .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .offer__right .btn--lg:hover,
.section-onefit-menopause #fonLcg .offer__right .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .offer__right .btn--lg:hover,
.section-onefit-busy-mums #fonLcg .cfg .btn--lg:hover,
.section-onefit-gut-health #fonLcg .cfg .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .cfg .btn--lg:hover,
.section-onefit-menopause #fonLcg .cfg .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .cfg .btn--lg:hover {
    background: #EAF6AB;
    border-color: rgba(38, 32, 20, .12);
    color: #3E3E3E;
  }
}

/* --- The product name and its lead go up a size --------------------------- */

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .pdp__name,
.section-onefit-gut-health #fonLcg .pdp__name,
.section-onefit-perimenopause #fonLcg .pdp__name,
.section-onefit-menopause #fonLcg .pdp__name,
.section-onefit-endometriosis #fonLcg .pdp__name {
    font-size: clamp(26px, 2.3vw, 38px);
    line-height: 1.12;
    letter-spacing: -.028em;
  }

.section-onefit-busy-mums #fonLcg .pdp__sub,
.section-onefit-gut-health #fonLcg .pdp__sub,
.section-onefit-perimenopause #fonLcg .pdp__sub,
.section-onefit-menopause #fonLcg .pdp__sub,
.section-onefit-endometriosis #fonLcg .pdp__sub {
    font-size: clamp(15px, 1.15vw, 17.5px);
    line-height: 1.55;
  }
}

/* ==========================================================================
   ANGLE LANDERS — BUY BOX PASS 2: BLUE CTA, THICKER EDGES, COMPACT CARDS
   ==========================================================================
   1 · THE CTA GOES BACK TO BLUE. I gave it the hero button's lime last pass;
       in the buy box that is wrong. Blue is now the selection colour for the
       whole configurator - the format card, the flavour card, the plan - so
       the button that completes that sequence should be the same blue, not
       the page's accent. The hero CTA keeps the lime: different job, top of
       the page, nothing selected yet.

   2 · THE SELECTED EDGE IS THICKER. A 1px blue hairline reads as a tint
       rather than a choice. 2px, with the ring dropped: the border is doing
       the work now, and a ring outside a thicker border is two edges saying
       the same thing.

   3 · MORE RADIUS on every option card, 14px, so they read as the rounded
       cards in the reference rather than as boxes.

   4 · THE FORMAT CARDS GET SMALLER. The packshot was running at the full
       column width and the card was as tall as the flavour row beneath it
       twice over. The image comes down hard and the card tightens around it.

   5 · ONE LINE FOR THE FIRST INGREDIENT. The species name is a nested <i>
       inside the bold run, and it was still display:block from a base rule -
       so "20bn CFU" and "L. paracasei" sat on separate lines even after the
       caption was inlined. Every <i> in the list is inline now.
   ========================================================================== */

/* 5 · the nested species italic goes inline too */
.section-onefit-busy-mums #fonLcg .ticks--check i,
.section-onefit-gut-health #fonLcg .ticks--check i,
.section-onefit-perimenopause #fonLcg .ticks--check i,
.section-onefit-menopause #fonLcg .ticks--check i,
.section-onefit-endometriosis #fonLcg .ticks--check i {
  display: inline;
  margin-top: 0;
}

/* 2 + 3 · thicker selected edge, more radius */
.section-onefit-busy-mums #fonLcg .opt__b,
.section-onefit-gut-health #fonLcg .opt__b,
.section-onefit-perimenopause #fonLcg .opt__b,
.section-onefit-menopause #fonLcg .opt__b,
.section-onefit-endometriosis #fonLcg .opt__b {
  border-radius: 14px;
  border-width: 1.5px;
}

.section-onefit-busy-mums #fonLcg .opt input:checked + .opt__b,
.section-onefit-gut-health #fonLcg .opt input:checked + .opt__b,
.section-onefit-perimenopause #fonLcg .opt input:checked + .opt__b,
.section-onefit-menopause #fonLcg .opt input:checked + .opt__b,
.section-onefit-endometriosis #fonLcg .opt input:checked + .opt__b,
.section-onefit-busy-mums #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-gut-health #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-perimenopause #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-menopause #fonLcg .opt input:checked ~ .opt__b,
.section-onefit-endometriosis #fonLcg .opt input:checked ~ .opt__b {
  border-width: 2px;
  border-color: var(--blue);
  box-shadow: none;
}

/* the subscribe card keeps its banner corners in step with the new radius */
.section-onefit-busy-mums #fonLcg .opt--sub .opt__banner,
.section-onefit-gut-health #fonLcg .opt--sub .opt__banner,
.section-onefit-perimenopause #fonLcg .opt--sub .opt__banner,
.section-onefit-menopause #fonLcg .opt--sub .opt__banner,
.section-onefit-endometriosis #fonLcg .opt--sub .opt__banner {
  border-radius: 12px 12px 0 0;
}

/* 4 · compact format cards */
@media (min-width: 620px) {
.section-onefit-busy-mums #fonLcg .opt--fmt .opt__b,
.section-onefit-gut-health #fonLcg .opt--fmt .opt__b,
.section-onefit-perimenopause #fonLcg .opt--fmt .opt__b,
.section-onefit-menopause #fonLcg .opt--fmt .opt__b,
.section-onefit-endometriosis #fonLcg .opt--fmt .opt__b {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
  }

.section-onefit-busy-mums #fonLcg .opt--fmt .opt__img,
.section-onefit-gut-health #fonLcg .opt--fmt .opt__img,
.section-onefit-perimenopause #fonLcg .opt--fmt .opt__img,
.section-onefit-menopause #fonLcg .opt--fmt .opt__img,
.section-onefit-endometriosis #fonLcg .opt--fmt .opt__img {
    flex: none;
    width: 46px;
    height: 64px;
    margin: 0;
  }

.section-onefit-busy-mums #fonLcg .opt--fmt .opt__img img,
.section-onefit-gut-health #fonLcg .opt--fmt .opt__img img,
.section-onefit-perimenopause #fonLcg .opt--fmt .opt__img img,
.section-onefit-menopause #fonLcg .opt--fmt .opt__img img,
.section-onefit-endometriosis #fonLcg .opt--fmt .opt__img img {
    width: 100%;
    height: 100%;
    object-fit: contain;
  }

.section-onefit-busy-mums #fonLcg .opt--fmt .opt__txt,
.section-onefit-gut-health #fonLcg .opt--fmt .opt__txt,
.section-onefit-perimenopause #fonLcg .opt--fmt .opt__txt,
.section-onefit-menopause #fonLcg .opt--fmt .opt__txt,
.section-onefit-endometriosis #fonLcg .opt--fmt .opt__txt {
    flex: 1 1 auto;
    min-width: 0;
    text-align: left;
  }
}

/* 1 · the buy-box CTA is blue again */
.section-onefit-busy-mums #fonLcg .cfg .btn--lg,
.section-onefit-gut-health #fonLcg .cfg .btn--lg,
.section-onefit-perimenopause #fonLcg .cfg .btn--lg,
.section-onefit-menopause #fonLcg .cfg .btn--lg,
.section-onefit-endometriosis #fonLcg .cfg .btn--lg,
.section-onefit-busy-mums #fonLcg .offer__right .btn--lg,
.section-onefit-gut-health #fonLcg .offer__right .btn--lg,
.section-onefit-perimenopause #fonLcg .offer__right .btn--lg,
.section-onefit-menopause #fonLcg .offer__right .btn--lg,
.section-onefit-endometriosis #fonLcg .offer__right .btn--lg {
  background: var(--blue);
  border: 1px solid var(--blue);
  border-radius: 8px;
  color: #FFFFFF;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .22),
    0 1px 2px rgba(1, 60, 120, .16),
    0 12px 26px -18px rgba(1, 113, 227, .5);
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .cfg .btn--lg:hover,
.section-onefit-gut-health #fonLcg .cfg .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .cfg .btn--lg:hover,
.section-onefit-menopause #fonLcg .cfg .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .cfg .btn--lg:hover,
.section-onefit-busy-mums #fonLcg .offer__right .btn--lg:hover,
.section-onefit-gut-health #fonLcg .offer__right .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .offer__right .btn--lg:hover,
.section-onefit-menopause #fonLcg .offer__right .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .offer__right .btn--lg:hover {
    background: var(--blue-dk);
    border-color: var(--blue-dk);
    color: #FFFFFF;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE SUPPLEMENT FACTS MODAL
   ==========================================================================
   A <dialog> holding the facts table that used to live in a FAQ accordion.

   LAID OUT AS A PANEL, NOT A LIGHTBOX: a fixed header carrying the title and
   the close button, and a body that scrolls on its own. The table is long
   enough to exceed a short viewport, and a modal whose whole body scrolls
   takes its own close button off screen with it - so the header is pinned and
   only .fx-modal__bd moves.

   The dialog is sized against svh rather than vh so a phone's collapsing
   address bar cannot push the bottom of the panel under the chrome.
   ========================================================================== */

#fonLcg .fx-modal {
  width: min(560px, calc(100vw - 32px));
  max-height: min(82svh, 760px);
  padding: 0;
  border: 0;
  border-radius: 16px;
  background: #FFFFFC;
  color: var(--fg);
  box-shadow: 0 24px 60px -20px rgba(20, 20, 15, .45);
  overflow: hidden;
}

#fonLcg .fx-modal::backdrop {
  background: rgba(20, 20, 15, .55);
  backdrop-filter: blur(2px);
}

#fonLcg .fx-modal__in {
  display: flex;
  flex-direction: column;
  max-height: inherit;
  min-height: 0;
}

#fonLcg .fx-modal__hd {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 18px 20px;
  border-bottom: 1px solid var(--rule);
  background: #FFFFFC;
}

#fonLcg .fx-modal__t {
  margin: 0;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -.02em;
  line-height: 1.2;
}

#fonLcg .fx-modal__x {
  flex: none;
  width: 34px;
  height: 34px;
  display: inline-grid;
  place-items: center;
  border-radius: 50%;
  border: 1px solid var(--rule);
  background: #FFFFFF;
  font-size: 20px;
  line-height: 1;
  color: var(--fg-mut);
  cursor: pointer;
}

#fonLcg .fx-modal__x:hover {
  color: var(--fg);
  border-color: var(--fg);
}

#fonLcg .fx-modal__bd {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 18px 20px 22px;
}

/* The table came out of an accordion, where it had the accordion's padding.
   Inside the modal the body provides that, so the panel's own inset goes. */
#fonLcg .fx-modal__bd > .faq__a,
#fonLcg .fx-modal__bd .facts {
  padding: 0;
  margin: 0;
}

#fonLcg .fx-modal__bd .facts__t {
  width: 100%;
}

#fonLcg .fx-modal__bd .foot {
  margin-top: 14px;
}

@media (max-width: 559.98px) {
  #fonLcg .fx-modal { border-radius: 14px; }
  #fonLcg .fx-modal__hd { padding: 15px 16px; }
  #fonLcg .fx-modal__t { font-size: 16.5px; }
  #fonLcg .fx-modal__bd { padding: 15px 16px 18px; }
}

/* ==========================================================================
   ANGLE LANDERS — CLIPPED CHECKS, BLUE SAVE FLAG, A MODAL THAT ANIMATES
   ==========================================================================
   1 · THE CHECK WAS CUT, and inlining the caption is what exposed it. The
       marker is a 20px background image painted at `left 1px` on the <li>,
       and the <li> is only as tall as its content. While each ingredient ran
       to two lines the box was ~38px and a 20px disc fitted; with the caption
       inline the box is one line - about 19px - so the disc was taller than
       the element painting it and got cut off at the bottom.

       Background images cannot overflow their box, so the fix is to give the
       box the height: a min-height at the disc's own size, with the image
       centred vertically rather than pinned 1px from a top edge that moves.
       The padding goes up with it so the text still clears the disc.

   2 · THE SAVE FLAG GOES BLUE. It was an ink lozenge, and with the
       configurator's selection state now blue the only black left on this
       screen was a badge about a discount. Blue, matching the plan banner it
       refers to.

   3 · THE MODAL ANIMATES. <dialog> has no transition of its own: it goes from
       display:none to shown, and a property that starts at display:none
       cannot animate. Three things make it work -

         @starting-style          the state to animate FROM on first paint
         transition-behavior: allow-discrete  lets display participate
         overlay                  keeps it in the top layer while closing

       so the panel fades and lifts on open, and reverses on close instead of
       vanishing. The backdrop fades with it. Anyone who has asked for reduced
       motion gets the state change with no movement.
   ========================================================================== */

/* 1 · the check has room again */
.section-onefit-busy-mums #fonLcg .ticks--check li,
.section-onefit-gut-health #fonLcg .ticks--check li,
.section-onefit-perimenopause #fonLcg .ticks--check li,
.section-onefit-menopause #fonLcg .ticks--check li,
.section-onefit-endometriosis #fonLcg .ticks--check li {
  min-height: 22px;
  padding-left: 30px;
  background-position: left center;
  background-size: 20px 20px;
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  column-gap: 0;
}

/* The flex box above would stretch a lone line; baseline keeps the text on the
   disc's optical centre. The marker is still the background, so nothing here
   changes the markup. */
.section-onefit-busy-mums #fonLcg .ticks--check li > b,
.section-onefit-gut-health #fonLcg .ticks--check li > b,
.section-onefit-perimenopause #fonLcg .ticks--check li > b,
.section-onefit-menopause #fonLcg .ticks--check li > b,
.section-onefit-endometriosis #fonLcg .ticks--check li > b {
  margin-right: .34em;
}

/* 2 · the save flag goes blue */
.section-onefit-busy-mums #fonLcg .galflag,
.section-onefit-gut-health #fonLcg .galflag,
.section-onefit-perimenopause #fonLcg .galflag,
.section-onefit-menopause #fonLcg .galflag,
.section-onefit-endometriosis #fonLcg .galflag {
  background: var(--blue);
  color: #FFFFFF;
}

/* 3 · the modal opens and closes with movement */
#fonLcg .fx-modal {
  opacity: 0;
  transform: translateY(10px) scale(.985);
  transition:
    opacity .22s var(--ease),
    transform .22s var(--ease),
    overlay .22s allow-discrete,
    display .22s allow-discrete;
}

#fonLcg .fx-modal[open] {
  opacity: 1;
  transform: none;
}

@starting-style {
  #fonLcg .fx-modal[open] {
    opacity: 0;
    transform: translateY(10px) scale(.985);
  }
}

#fonLcg .fx-modal::backdrop {
  opacity: 0;
  transition:
    opacity .22s var(--ease),
    overlay .22s allow-discrete,
    display .22s allow-discrete;
}

#fonLcg .fx-modal[open]::backdrop { opacity: 1; }

@starting-style {
  #fonLcg .fx-modal[open]::backdrop { opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  #fonLcg .fx-modal,
  #fonLcg .fx-modal[open] { transform: none; transition-duration: .001ms; }
  #fonLcg .fx-modal::backdrop { transition-duration: .001ms; }
}

/* --- The chosen plan gets its lime ground back ----------------------------
   Turning the selection blue took the lime fill off every option, including
   the supply card - so the recommended plan became a white card with a blue
   edge, the same weight as the one-time card under it. The border alone was
   carrying the choice, and at card size that is not enough: the two options
   read as equals with one of them outlined.

   The lime comes back HERE ONLY, as the fill of the chosen supply card. The
   blue border and the blue banner stay, so the colour that means "selected"
   is still blue everywhere - the lime is the chosen card's ground, not its
   state. The small format and flavour cards keep the white fill: they are
   picked in a glance and a border is enough at that size, and lime on all
   three rows would put the page's accent back under everything.

   The frequency strip inside the card keeps a white ground so the control
   still reads as a control against the lime around it. */

.section-onefit-busy-mums #fonLcg .opt--sub input:checked ~ .opt__b,
.section-onefit-gut-health #fonLcg .opt--sub input:checked ~ .opt__b,
.section-onefit-perimenopause #fonLcg .opt--sub input:checked ~ .opt__b,
.section-onefit-menopause #fonLcg .opt--sub input:checked ~ .opt__b,
.section-onefit-endometriosis #fonLcg .opt--sub input:checked ~ .opt__b,
.section-onefit-busy-mums #fonLcg .opt--plan input:checked ~ .opt__b,
.section-onefit-gut-health #fonLcg .opt--plan input:checked ~ .opt__b,
.section-onefit-perimenopause #fonLcg .opt--plan input:checked ~ .opt__b,
.section-onefit-menopause #fonLcg .opt--plan input:checked ~ .opt__b,
.section-onefit-endometriosis #fonLcg .opt--plan input:checked ~ .opt__b {
  background: rgba(234, 246, 171, .5);
}

.section-onefit-busy-mums #fonLcg .opt--sub input:checked ~ .opt__b .sub__freqwrap,
.section-onefit-gut-health #fonLcg .opt--sub input:checked ~ .opt__b .sub__freqwrap,
.section-onefit-perimenopause #fonLcg .opt--sub input:checked ~ .opt__b .sub__freqwrap,
.section-onefit-menopause #fonLcg .opt--sub input:checked ~ .opt__b .sub__freqwrap,
.section-onefit-endometriosis #fonLcg .opt--sub input:checked ~ .opt__b .sub__freqwrap {
  background: #FFFFFF;
}

/* ==========================================================================
   ANGLE LANDERS — THE SEVEN PANELS ARE PLACEHOLDERS, ALL ONE HEIGHT
   ==========================================================================
   The tile lists came out and a checkered block went in, so the seven beats
   can be judged as a layout while the content is reworked.

   ONE HEIGHT, FIXED IN px. The panels were as tall as their tile lists - 3,
   4, 3, 3, 4, 3, 3 rows - so the column stepped unevenly down the page. A
   fixed height is what makes them comparable; a min-height would let a longer
   title push one out again.

   The board is drawn with two 45-degree gradients rather than an image: no
   asset to add and delete, and it scales with background-size if the squares
   want to be bigger. Both layers are the same grey, offset by half a tile,
   which is the standard four-square trick.
   ========================================================================== */

#fonLcg .panel__ph {
  height: 260px;
  border-radius: 12px;
  background-color: #FFFFFF;
  background-image:
    linear-gradient(45deg, rgba(20, 20, 15, .07) 25%, transparent 25%, transparent 75%, rgba(20, 20, 15, .07) 75%),
    linear-gradient(45deg, rgba(20, 20, 15, .07) 25%, transparent 25%, transparent 75%, rgba(20, 20, 15, .07) 75%);
  background-size: 24px 24px;
  background-position: 0 0, 12px 12px;
  border: 1px solid var(--rule);
}

/* The card itself stops sizing to its contents, so all seven measure the same
   whatever their title wraps to. */
.section-onefit-busy-mums #fonLcg .blk__panel > .panel,
.section-onefit-gut-health #fonLcg .blk__panel > .panel,
.section-onefit-perimenopause #fonLcg .blk__panel > .panel,
.section-onefit-menopause #fonLcg .blk__panel > .panel,
.section-onefit-endometriosis #fonLcg .blk__panel > .panel {
  display: flex;
  flex-direction: column;
}

.section-onefit-busy-mums #fonLcg .blk__panel > .panel .panel__ph,
.section-onefit-gut-health #fonLcg .blk__panel > .panel .panel__ph,
.section-onefit-perimenopause #fonLcg .blk__panel > .panel .panel__ph,
.section-onefit-menopause #fonLcg .blk__panel > .panel .panel__ph,
.section-onefit-endometriosis #fonLcg .blk__panel > .panel .panel__ph {
  flex: none;
}

@media (max-width: 899.98px) {
  #fonLcg .panel__ph { height: 200px; }
}

/* ==========================================================================
   ANGLE LANDERS — THE FACTS MODAL: WIDER, AND IT DOES NOT SCROLL
   ==========================================================================
   The panel was 560px with a max-height of 82svh and its own scrollbar, so a
   thirteen-row table sat in a narrow column with a webkit scrollbar down the
   middle of it and the last rows hidden until you dragged.

   WIDER: 760px. At that width the label and its value sit comfortably on one
   line each - "13, incl. B12 1100% DV, biotin 317%, vitamin E 230%" was
   wrapping to two lines at 560 and is the row that set the height.

   NO SCROLL: the height cap comes off the body entirely (overflow: visible,
   no max-height on the dialog), so the panel is exactly as tall as its
   content and the whole table is visible at once. The dialog centres itself
   in the viewport; on a short screen the page behind it scrolls rather than
   the panel, which is the behaviour a printed panel of facts should have.

   The scrollbar styling goes with it - a scrollbar that never appears does
   not need to be themed - and the header no longer needs to be pinned,
   because nothing moves underneath it.
   ========================================================================== */

#fonLcg .fx-modal {
  width: min(760px, calc(100vw - 32px));
  max-height: none;
  overflow: visible;
}

#fonLcg .fx-modal__in {
  max-height: none;
}

#fonLcg .fx-modal__bd {
  overflow: visible;
  max-height: none;
}

/* The table gets the room the wider panel bought it: values stay on one line
   and the row heights even out. */
#fonLcg .fx-modal__bd .facts__t th,
#fonLcg .fx-modal__bd .facts__t td {
  white-space: normal;
}

#fonLcg .fx-modal__bd .facts__t td {
  text-align: right;
  padding-left: 24px;
}

@media (max-width: 799.98px) {
  /* Below the panel's own width the table can exceed a short viewport again.
     The page behind scrolls to reach it rather than the panel scrolling
     inside itself - one scroll, not two nested ones. */
  #fonLcg .fx-modal { width: calc(100vw - 24px); }
}

/* --- The no-scroll panel still has to be reachable ------------------------
   Two corrections to the pass above, both mine.

   1 · overflow-y:auto was still set on .fx-modal__bd from the original modal
       rules, and the shorthand `overflow: visible` I wrote does not beat a
       longhand declared later in the file. It is restated as the longhand.

   2 · A <dialog> is position:fixed, so removing its height cap does NOT let
       the page scroll to the overflow - it centres in the viewport and
       anything taller than the screen is simply unreachable. On a laptop the
       thirteen-row table clears 82svh easily.

       So the cap comes back, but high enough that it never bites at the
       widths this table actually needs: 92svh. On any normal screen the panel
       is shorter than that and shows the whole table with no scrollbar, which
       is what was asked for; on a genuinely short viewport the body scrolls
       rather than the content being lost. The scrollbar is hidden in the one
       case it appears, so it never draws the webkit bar down the middle of
       the table. */

#fonLcg .fx-modal {
  max-height: 92svh;
}

#fonLcg .fx-modal__in {
  max-height: 92svh;
}

#fonLcg .fx-modal__bd {
  overflow-y: auto;
  scrollbar-width: none;
}

#fonLcg .fx-modal__bd::-webkit-scrollbar {
  width: 0;
  height: 0;
}

/* --- The hero CTA goes blue, like the buy box -----------------------------
   It was the homepage button's lime, ported when the page still had a lime
   accent running through it. Since then the wash has gone, the buy box has
   turned blue and the header CTA has taken the lime, so a lime hero button
   was the odd one out: the two buttons that actually sell - the hero and the
   one in the configurator - now match, and lime is left to the header where
   it belongs to the site chrome.

   It keeps the ported SHAPE: 5px radius, 52px tall, the capitalized label and
   the 406px cap. Only the fill, the label colour and the bevel change - white
   inset highlights over a dark fill would read as a scuff, so they go, and
   the shadow becomes the blue-keyed one the buy-box button carries. */

.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg {
  background: var(--blue);
  border: 1px solid var(--blue);
  color: #FFFFFF;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .22),
    0 1px 2px rgba(1, 60, 120, .16),
    0 12px 26px -18px rgba(1, 113, 227, .5);
}

@media (hover: hover) {
.section-onefit-busy-mums #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-gut-health #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-perimenopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-menopause #fonLcg .hero__cta .btn--lg:hover,
.section-onefit-endometriosis #fonLcg .hero__cta .btn--lg:hover {
    background: var(--blue-dk);
    border-color: var(--blue-dk);
    color: #FFFFFF;
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, .22),
      0 1px 2px rgba(1, 60, 120, .16),
      0 12px 26px -18px rgba(1, 113, 227, .5);
  }
}

/* --- The cadence, under the price -----------------------------------------
   All three cadences bill the same amount, so changing the frequency left the
   figure untouched and the buy box read as unresponsive. The price was never
   wrong - it was simply the only thing being watched. This line names the
   cadence directly beneath it, so the choice lands in the same place the eye
   already is, and it says what the number means: a charge per delivery.

   It sits on its own line under the price rather than beside it: .opt__price
   also carries the struck comparison price, and a third item on that row would
   push the lockup wider than the card at the narrow end. */

.section-onefit-busy-mums #fonLcg .opt__price [data-lcg-cadence],
.section-onefit-gut-health #fonLcg .opt__price [data-lcg-cadence],
.section-onefit-perimenopause #fonLcg .opt__price [data-lcg-cadence],
.section-onefit-menopause #fonLcg .opt__price [data-lcg-cadence],
.section-onefit-endometriosis #fonLcg .opt__price [data-lcg-cadence] {
  display: block;
  margin-top: 2px;
  font-size: 12.5px;
  line-height: 1.3;
  font-weight: 500;
  color: var(--blue);
  white-space: nowrap;
}

/* Empty before a cadence is chosen: the margin would otherwise add a gap under
   the price for a line with nothing in it. */
.section-onefit-busy-mums #fonLcg .opt__price [data-lcg-cadence]:empty,
.section-onefit-gut-health #fonLcg .opt__price [data-lcg-cadence]:empty,
.section-onefit-perimenopause #fonLcg .opt__price [data-lcg-cadence]:empty,
.section-onefit-menopause #fonLcg .opt__price [data-lcg-cadence]:empty,
.section-onefit-endometriosis #fonLcg .opt__price [data-lcg-cadence]:empty {
  display: none;
}

/* --- "From $X/serve" on the format cards - HIDDEN (Renz, 2026-09-14) -------
   The per-serve price goes off the landers. The "Works out to" summary row
   was hidden on 2026-09-13 for the same reason; this is the other half of it,
   the line under Sachets / Pouches reading "From $6.25/serve".

   HIDDEN, NOT REMOVED, exactly as that row was. render() writes to every
   [data-lcg-from] node on each update, and the format cards are re-rendered
   whenever stock or format changes; deleting the span would leave that loop
   writing to nothing on some passes and is a change to the buy box's JS for
   a purely visual request. Hiding it costs one declaration and cannot break
   the configurator.

   The card keeps its name and its description line, so the two formats are
   still told apart by what they are rather than by price - which is the point
   of removing the figure: the comparison moves to the supply picker, where
   the real prices live. */

.section-onefit-busy-mums #fonLcg .opt--fmt .opt__from,
.section-onefit-gut-health #fonLcg .opt--fmt .opt__from,
.section-onefit-perimenopause #fonLcg .opt--fmt .opt__from,
.section-onefit-menopause #fonLcg .opt--fmt .opt__from,
.section-onefit-endometriosis #fonLcg .opt--fmt .opt__from,
.section-onefit-busy-mums #fonLcg [data-lcg-from],
.section-onefit-gut-health #fonLcg [data-lcg-from],
.section-onefit-perimenopause #fonLcg [data-lcg-from],
.section-onefit-menopause #fonLcg [data-lcg-from],
.section-onefit-endometriosis #fonLcg [data-lcg-from] {
  display: none;
}


/* --- THE SEVEN PANELS ------------------------------------------------------
   Each beat is one generated image: a photographed scene with its callouts
   composited in. The box takes the artwork's own ratio rather than a fixed
   height, so nothing is cropped and nothing floats in dead space - the seven
   still measure identically down the column because they share one ratio.

   The CSS-diagram components that used to live here (.dgm__row, __chips,
   __call, __bars, __swap, __rail and their modifiers) are gone: every panel
   they styled is now artwork, so the rules had no markup left to match. ---- */
#fonLcg .dgm { position: relative; aspect-ratio: 50 / 37; width: 100%;
  border-radius: 12px; overflow: hidden; }
#fonLcg .dgm > img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ==========================================================================
   ANGLE LANDERS — THE HERO FIGURE TAKES THE ARTWORK'S OWN RATIO
   ==========================================================================
   The hero art is now generated at 4:5 (1600x2000) so it fills a tall panel
   natively. Every earlier pass sized this box off the viewport instead -
   min-height: 62vw, then height: calc(100vh - 106px) - which made a portrait
   container for a landscape file and left object-fit: contain letterboxing
   ~410px of --sand-deep under the photograph.

   Fourteen blocks above touch .hero__figure, layered from successive
   corrections. Rather than edit each, this last block states the final
   geometry once: the box IS the artwork's ratio, so contain and cover are
   equivalent and nothing can crop the 87% card off its own edge.

   Per LANDER-VISUAL-SPEC.md: "set the CSS container to the artwork's native
   ratio and resize only." */

.section-onefit-busy-mums #fonLcg .hero__figure,
.section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-perimenopause #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
  aspect-ratio: 4 / 5;
  height: auto;
  min-height: 0;
  max-height: none;
}

.section-onefit-busy-mums #fonLcg .hero__figure > img,
.section-onefit-gut-health #fonLcg .hero__figure > img,
.section-onefit-perimenopause #fonLcg .hero__figure > img,
.section-onefit-menopause #fonLcg .hero__figure > img,
.section-onefit-endometriosis #fonLcg .hero__figure > img {
  object-fit: cover;
  object-position: center;
}

/* The row no longer needs to hold the figure open - the ratio does. Keeping a
   viewport-derived min-height here would reintroduce the same empty band
   below the photograph. */
@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
.section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
.section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
.section-onefit-menopause #fonLcg .hero > .shell.hero__in,
.section-onefit-endometriosis #fonLcg .hero > .shell.hero__in {
    min-height: 0;
  }
}

/* HERO HEADLINE, ANGLE LANDERS - THE STRIKE AND THE NOWRAP COME OFF.
   .hero__quote was built for the L-Carnitine hero's rhetorical turn: a quoted
   ad line struck through, then the correction under it. That styling carries
   two things this headline cannot use.

   line-through: the approved line is "Stop punishing your gut with 7 separate
   tubs: the daily sachet designed to preserve lean muscle in a deficit." It is
   one continuous statement, not a claim being negated, so a rule drawn through
   its first half would read as retracted copy - the opposite of what it says.

   white-space: nowrap: the base rule guarantees the old five-word ad line never
   wraps. This first half is far longer, and nowrap on it would overflow the
   column rather than wrap, which is exactly the failure the base comment warns
   about. It has to wrap freely here.

   Applies to all four angle landers. Each one's hero is a setup line over a
   promise, not the L-Carnitine quote-and-correction, so none of them want the
   strike. */
.section-onefit-busy-mums #fonLcg .hero__quote,
.section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
  white-space: normal;
  text-decoration-line: none;
  text-wrap: balance;
  color: var(--fg);
}

/* HERO TYPE SCALE, ANGLE LANDERS - THE HEADLINE CAME DOWN TO FIT.
   The sizes it was inheriting (quote to 56px, turn to 84px) were measured for
   the L-Carnitine hero, whose setup line was the five-word "You didn't eat
   anything." The approved gut line is roughly three times that length, so at
   84px the promise alone ran five lines and pushed the CTA under the fold on a
   laptop: the headline was filling the viewport on its own.

   Two changes, and they do different jobs.

   The setup drops furthest (56 -> 30px). It is the subordinate half of one
   sentence, so it should read at closer to lead size and hand off to the
   promise; at 56px it was competing with the line it sets up. The larger step
   between the two is what makes them read as setup-then-payoff rather than as
   two headlines stacked.

   The promise comes down to 52px, which holds it to two lines in the copy
   column at desktop while staying the clear focal point of the page.

   Both lines wrap freely here, so unlike the nowrap rule these sizes cannot
   overflow - a miss costs a line, not a broken column.
   All four angle landers share this scale. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(22px, 1.9vw, 30px);
    font-weight: 500;
    line-height: 1.25;
    letter-spacing: -.01em;
  }

  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: var(--gh-turn, clamp(40px, 3.8vw, 74px));
    line-height: 1.02;
    letter-spacing: -.03em;
  }
}

/* Phone: the same relationship, sized for a 360-430px column. */
@media (max-width: 899px) {
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
.section-onefit-menopause #fonLcg .hero__quote,
.section-onefit-endometriosis #fonLcg .hero__quote {
    font-size: clamp(17px, 4.4vw, 21px);
    font-weight: 500;
    line-height: 1.3;
  }

  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(32px, 8vw, 44px);
    line-height: 1.04;
    letter-spacing: -.028em;
  }
}

/* THE SEVEN POINTS: SUBTEXT COMES DOWN A STEP, ANGLE LANDERS.
   The beat copy was inheriting the generic .body ramp (16-18px), which is a
   reading size tuned for a full-width paragraph. In the beat column it sits
   directly under a 30px+ headline, and at 18px the two were close enough in
   weight that the paragraph competed with the line it supports instead of
   sitting under it.

   16.5px at the ceiling restores that step down. The measure comes in to 42ch
   at the same time: dropping type without tightening the measure just buys
   longer lines, and the point of the change is a shorter, faster-scanned block
   beside the artwork. The copy itself was cut to match.

   Desktop only. The 15px mobile rule above is already a step below the phone
   headline and does not need touching. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .blk__copy .body,
  .section-onefit-gut-health #fonLcg .blk__copy .body,
.section-onefit-menopause #fonLcg .blk__copy .body,
.section-onefit-endometriosis #fonLcg .blk__copy .body {
    font-size: clamp(15.5px, 1.05vw, 16.5px);
    line-height: 1.58;
    max-width: var(--gh-body-measure, 46ch);
  }
}

/* THE BEAT COLUMN USES THE WIDTH IT ALREADY HAS, ANGLE LANDERS.
   The grid hands this column a full 1fr - roughly 700px at 1920 - but the two
   things inside it were capped far below that: the headline at 18ch and the
   paragraph at the 42ch set when the type came down. The column was wide and
   the text was narrow, so a three-word headline broke over three lines and the
   paragraph ran to six, with empty column to the right of both.

   The headline goes to 30ch, which holds "Bloat is the visible part. Absorption
   is the expensive part." to two lines instead of three while still breaking
   before it turns into a full-measure line of display type. The paragraph goes
   to 72ch, wide for prose but right for a short column beside artwork, and about four lines
   rather than six.

   Both are still measures, not "none": unbounded, the paragraph would run the
   whole column and stop being readable. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .blk__copy .h2,
  .section-onefit-gut-health #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
    max-width: var(--gh-h2-measure, 34ch);
  }
}

/* THE HERO LEAD COMES DOWN, ANGLE LANDERS.
   It was inheriting 22px, which made it the largest body text anywhere on the
   page: larger than the beat copy it introduces, and close enough to the 30px
   setup line above it that the top of the column read as three headlines
   rather than a headline and its support.

   18px at the ceiling puts it back below the setup line and above the 16.5px
   beat copy, which is the order those three should read in. The measure holds
   at 42ch so the paragraph keeps its shape as the type comes down. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: clamp(16px, 1.25vw, 18px);
    line-height: 1.55;
    /* 58ch, not 42ch. The headline above it now runs to the full width of the
       copy column, so a lead stopping at 42ch left an obvious ragged step
       inward and wrapped to four lines inside a column with room for three.
       This matches the measure to the headline it sits under. */
    max-width: 58ch;
  }
}

@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: 15.5px;
    line-height: 1.55;
  }
}

/* MOBILE HERO: THE LEAD COMES DOWN, THE RISK LINE COMES UP AND CENTRES.
   Three separate problems, all visible at 440px.

   The lead was running at phone sizes tuned for the old short hero and, under
   a headline that now takes four lines, it read as a second paragraph of
   headline rather than support. 14.5px puts it below the promise properly.

   The risk line was the worse one: it was inheriting
   clamp(9.5px, 2.6vw, 12.5px), which resolves to about 11px on a phone. That
   is below the size at which a guarantee reads as a guarantee, and this line
   carries the 90-day refund and the free shipping - the two things that answer
   the hesitation the CTA creates. 13px, and the measure is left to wrap
   naturally rather than being squeezed onto one line.

   And it sits under a full-width button while being left-aligned, because the
   centring rule that handles this on desktop is scoped to min-width: 900px.
   Centred here, so the pill sits under the middle of the button it belongs to. */
@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
.section-onefit-menopause #fonLcg .hero__sub,
.section-onefit-endometriosis #fonLcg .hero__sub {
    font-size: 14.5px;
    line-height: 1.5;
  }

  .section-onefit-busy-mums #fonLcg .hero__risk,
  .section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
    font-size: 13px;
    line-height: 1.45;
    gap: 8px;
    margin-top: 14px;
    margin-left: 0;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    text-align: center;
    text-wrap: balance;
  }

  /* The tick is a fixed-size dot, so it must not stretch or shrink when the
     sentence beside it wraps to two lines. */
  .section-onefit-busy-mums #fonLcg .hero__tick,
  .section-onefit-gut-health #fonLcg .hero__tick,
.section-onefit-menopause #fonLcg .hero__tick,
.section-onefit-endometriosis #fonLcg .hero__tick {
    flex: none;
    margin-top: 2px;
  }
}

/* THE MEMBERS ICON GETS A GROUND, ANGLE LANDERS.
   In the proof lockup it sits third, after a star row and the Google mark.
   Google is a contained badge - colour inside a circular silhouette - so a
   bare grey glyph next to it read as the weakest of the three and slightly
   unfinished, which is not what you want on the line carrying 500K+ members.

   A tinted disc gives it the same contained weight without inventing a new
   colour: --fg at 7% ground, --fg-mut glyph, so it stays inside the palette
   and keeps working if the surface behind it changes. The disc is sized in em
   so it tracks the pill text at every breakpoint rather than needing a value
   per media query, and the SVG keeps its own px size inside it. */
.section-onefit-busy-mums #fonLcg .pf__ic,
.section-onefit-gut-health #fonLcg .pf__ic,
.section-onefit-menopause #fonLcg .pf__ic,
.section-onefit-endometriosis #fonLcg .pf__ic {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
  width: 1.45em;
  height: 1.45em;
  border-radius: 50%;
  background: rgba(38, 32, 20, .07);
  background: color-mix(in srgb, var(--fg) 7%, transparent);
}

.section-onefit-busy-mums #fonLcg .pf__ic .pf__i--grp,
.section-onefit-gut-health #fonLcg .pf__ic .pf__i--grp,
.section-onefit-menopause #fonLcg .pf__ic .pf__i--grp,
.section-onefit-endometriosis #fonLcg .pf__ic .pf__i--grp {
  width: .92em;
  height: .92em;
  color: var(--fg-mut);
}

/* THE PROMISE BREAKS WHERE THE SENSE BREAKS, ANGLE LANDERS.
   Left to itself the line wrapped to four ragged lines, splitting "designed
   to / preserve lean" across a break and leaving "lean" stranded. The three
   groups in the markup are the phrases the sentence actually divides into:
   the subject, what it is designed to do, and what it does it to.

   inline-block makes each group an unbreakable unit, so the line can only
   break between them - three lines at any width wide enough to hold the
   longest group. text-wrap: balance is switched off here because it works
   against fixed groups: it would even out the ragged edge by breaking inside
   one, which is the thing being prevented.

   The gate is 1200px, not 900px. Measured, the longest group needs about
   630px at the size the promise runs at 1280, and the copy column is only
   about 500px at 1000px wide - an unbreakable group that cannot fit overflows
   rather than wraps, so below this width the groups are released and the line
   wraps normally. */
@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    text-wrap: initial;
  }

  .section-onefit-busy-mums #fonLcg .hero__ln,
  .section-onefit-gut-health #fonLcg .hero__ln,
.section-onefit-menopause #fonLcg .hero__ln,
.section-onefit-endometriosis #fonLcg .hero__ln {
    display: inline-block;
  }
}

/* THE HERO PHOTOGRAPH LOSES ITS BOTTOM 10%, ANGLE LANDERS.
   The artwork is 4/5 and the box took that ratio exactly, so the whole frame
   showed and the bottom tenth of it - bench, floor, the empty foreground below
   the glass - made the column taller than it needed to be.

   4/4.5 is the same box with 10% of its height removed. object-position:
   center top pins the crop to the top edge, so the 10% comes off the BOTTOM
   and nothing at the top moves: her face, the glass and the 87% card sit
   exactly where they did. cover lets the box crop rather than letterbox.

   Nothing else about the sizing changes. The width is still --gh-img and the
   box still scales with it, so the picture shrinks to fit as before - this
   only shortens the frame it shrinks inside. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
.section-onefit-menopause #fonLcg .hero__figure,
.section-onefit-endometriosis #fonLcg .hero__figure {
    aspect-ratio: 4 / 4.5;
  }

  .section-onefit-busy-mums #fonLcg .hero__figure > img,
  .section-onefit-gut-health #fonLcg .hero__figure > img,
.section-onefit-menopause #fonLcg .hero__figure > img,
.section-onefit-endometriosis #fonLcg .hero__figure > img {
    object-fit: cover;
    object-position: center top;
  }
}

/* THE PROMISE HOLDS ITS LINE BREAKS, ANGLE LANDERS.
   The groups in the markup can only decide WHERE the line breaks, never how
   many lines there are. The copy column is about 880px at 1920, wide enough
   that two groups would otherwise share a line and the break would land
   mid-phrase.

   The h1 needs a measure narrow enough that only one group fits per line, and
   that measure has to be stated in em rather than px: em scales with the
   font, so the same rule holds at 52px on a wide screen and at 40px on a
   narrow one, with no per-breakpoint values to keep in sync.

   11em is sized off the longest group, "designed to preserve" - wide
   enough that it never breaks internally, narrow enough that no two groups can
   share a line.

   THE SLOPE IS WHAT LETS THE TYPE BE BIG. Below about 1600px the real limit is
   not the em measure but the column itself. Measured off the rendered page
   rather than estimated - a group of 17 characters came out 736px wide at
   86px, so this face runs about 0.50em per character, not the 0.48 an earlier
   pass assumed. That 4% error was the whole problem: at 86px the longest group
   needed 869px against an 884px column, and 2% of slack is not slack at all,
   so the group broke internally and the line went to five.

   3.8vw carries a real margin instead: 73px at 1920, 61 at 1600, 55 at 1440,
   46 at 1200, each leaving about 17% of the column spare. Enough that a font
   loading differently, or a slightly wider render, cannot push a group over
   the edge. Raising the ceiling alone would not work: at a fixed
   large size the group overflows the moment the window narrows.

   SHORTER GROUPS ARE WHAT BUY THE SIZE. Breaking after "preserve" rather than
   after "lean" drops the longest group from 25 characters to 20, and the
   column's per-character allowance rises with it: 3.83vw becomes 4.80vw. That
   is the whole reason the type can go from 72px to 86px without anything
   overflowing - the line got easier to fit, not the column wider.

   The setup line is left out of the cap on purpose: it is one short line that
   already fits, and constraining it would only make it wrap. */
@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
.section-onefit-menopause #fonLcg .hero__turn,
.section-onefit-endometriosis #fonLcg .hero__turn {
    max-width: var(--gh-turn-measure, 11.5em);
  }
}

/* THE BEAT HEADLINES COME DOWN, AND THE TWO-SENTENCE ONES BREAK ON THE FULL
   STOP, ANGLE LANDERS.

   Three of the seven are a pair of sentences: "Bloat is the visible part.
   Absorption is the expensive part." and the same shape at 01 and 07. Left to
   wrap on width alone the break landed wherever the measure ran out, which
   put "the expensive part." alone on a third line and split a sentence across
   two - the reader sees the fragment before the thought.

   Each sentence is its own inline-block, so the line can only break BETWEEN
   sentences. One sentence per line, and the full stop is where the eye stops.

   44px comes down to 38px at the same time. The measure has to hold the longest
   of those sentences, "Absorption is the expensive part." at 33 characters.
   Sized against the face's real width - about 0.50em per character, measured
   off the rendered page - 40px left only 6% of the column spare at 1440, which
   is the same thin margin that broke the hero line. 2.35vw keeps roughly 12%
   at every width from 1200 up.

   Below 1200px the groups are released, as on the hero: an unbreakable
   sentence that cannot fit overflows rather than wraps, and the narrow column
   is where that would happen. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .blk__copy .h2,
  .section-onefit-gut-health #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
    font-size: var(--gh-h2, clamp(26px, 2.35vw, 38px));
  }
}

@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg .h2__ln,
  .section-onefit-gut-health #fonLcg .h2__ln,
.section-onefit-menopause #fonLcg .h2__ln,
.section-onefit-endometriosis #fonLcg .h2__ln {
    display: inline-block;
  }

  .section-onefit-busy-mums #fonLcg .blk__copy .h2,
  .section-onefit-gut-health #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
    text-wrap: initial;
  }
}

/* THE PROMISE IS SIZED TO EACH LANDER'S OWN LONGEST LINE.
   The groups hold a line together, so the size that fits is decided by the
   longest group, and the four landers do not write the same length. Measured
   against this face (about 0.50em per character, taken off the rendered page)
   the column allows roughly 12% headroom at:

     gut-health    longest group 20 chars  ->  4.03vw
     plant-based   longest group 19 chars  ->  4.24vw
     menopause     longest group 24 chars  ->  3.36vw

   Menopause was the outlier while its promise ran as two long groups: "While
   you manage the symptoms," is 30 characters, which capped the type at about
   52px. Breaking it into three on the comma instead - "While you manage / the
   symptoms, / you're losing lean mass." - drops the longest group to 24 and
   lets the size go back up to 64px. Shorter groups buy size; that is the whole
   trade on every one of these heroes.

   The measure moves with it. It is expressed in em, so shrinking the font
   shrinks the measure by the same proportion and a long group stays just as
   far outside it - which is why menopause needs both numbers, 2.6vw and 17em,
   not just the smaller type. A group of N characters is about N x 0.5em wide,
   so the measure has to clear that with a margin.

   Both are variables with the shared values as defaults, and only the landers
   that differ override them. Rewriting a hero line means revisiting these
   numbers, which is the same constraint the groups already impose. */
@media (min-width: 1200px) {
  /* MENOPAUSE: the turn is four groups and the measure is the only thing
     holding them to four lines, so it is sized to a window.

       floor    the longest group must fit on its own line:
                "your body may be losing", 23 characters, ~13.3em
       ceiling  no TWO groups may share a line, or four become three. The
                shortest adjacent pair is "While you manage" plus
                "the symptoms,", 30 characters, ~17.4em

     13.8em, near the floor rather than mid-window, and that choice is what
     buys the type size. The measure is in em, so it scales WITH the font and
     the four breaks hold at any size; what does not scale is the copy column,
     about 870px at a 1920 viewport. Measure x font-size has to stay under it,
     so a narrower measure is a bigger headline: 15em capped the type at 58px,
     13.8em allows 62px. The floor is 13.3em, which leaves half an em of
     headroom for the face to render wider than the estimate.

     Going further costs more than it buys. 13.5em would allow 64px with only
     0.2em of headroom, and a group that renders a hair wide there wraps and
     the turn becomes five lines again.

     THE RATIO IS 0.58em PER CHARACTER, NOT 0.50. The older note in this file
     used 0.50 and that estimate is what broke the previous version of this
     headline: it put the floor under the real width, the longest group wrapped,
     and a four-line turn rendered as five. 0.58 is taken off the rendered page
     at the 56px ceiling, where a 24-character group sat exactly on a 13em
     measure. Use 0.58 when re-sizing any of these groups.

     REWRITING THIS HEADLINE MEANS REDOING THIS ARITHMETIC. A longer group
     raises the floor, two short groups next to each other lower the ceiling,
     and if the floor passes the ceiling no measure can hold the line count and
     the groups have to be rebalanced instead. */
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-menopause #fonLcg {
    --gh-turn: clamp(40px, 3.3vw, 63px);
    --gh-turn-measure: 12.6em;
  }

  /* ENDOMETRIOSIS: four groups, and a comfortable one to size because the
     groups are close in length. At 0.54em per character the longest is
     "Getting enough protein" and "you have to check off." at 22 characters,
     11.88em; the shortest adjacent pair is 38 characters, 20.52em. That is a
     wide window, so 12.25em sits near the floor and the column sets the size:
     12.25em x 65px is 796px, inside the 800px track below. */
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-endometriosis #fonLcg {
    --gh-turn: clamp(40px, 3.4vw, 65px);
    --gh-turn-measure: 12.25em;
  }
}

/* BEAT HEADLINES: THE LONG-SENTENCE LANDERS KEEP THEIR SIZE AND WRAP INSTEAD.
   Grouping a sentence makes it unbreakable, which is right when the sentence
   is short enough to hold a line. Gut-health's longest is 33 characters and
   sits inside the column comfortably. Menopause and plant-based run to 49 and
   50 - "Protein requirements rise through the transition." - and at the shared
   size those need about 940px against a 711px measure.

   Sizing them down to fit would mean roughly 1.6vw, about 20px at 1200, which
   stops being a headline. So display: inline on .h2__ln releases the group and
   the sentence wraps if it must. The measure stays at the shared 34ch: widening
   it to 50ch did stop most of the wrapping, but it also let the headline run
   most of the way across the column and read as a slab, which is worse than a
   sentence breaking once.

   The full stop still lands at the end of a line wherever the sentence fits,
   because the measure is sized for it. */
@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-menopause #fonLcg,
  .section-onefit-endometriosis #fonLcg {
    --gh-h2-measure: 26ch;
  }

  .section-onefit-busy-mums #fonLcg .h2__ln,
  .section-onefit-menopause #fonLcg .h2__ln,
  .section-onefit-endometriosis #fonLcg .h2__ln {
    display: inline;
  }
}

/* BEAT HEADLINES ARE CAPPED AT THREE LINES.
   26ch above is the measure, narrowed from 34ch on feedback: at 34 the
   headline ran most of the way across the copy column and read as a slab
   rather than a headline. The narrower column also holds the copy and the
   panel to similar widths, so the two halves of a beat read as one row.

   The cap is belt and braces. The measure decides where the sentence breaks,
   but a measure cannot promise a line count on its own: a longer headline, a
   narrower viewport or a different face all move it. -webkit-line-clamp
   guarantees the beat never grows past three lines whatever is written into
   it, so the seven beats keep the same rhythm down the page.

   IF A HEADLINE IS BEING CLIPPED, SHORTEN THE HEADLINE. Do not raise this
   number: the clamp is the thing keeping the beats level.

   GUT-HEALTH IS DELIBERATELY NOT IN THIS SELECTOR. -webkit-box lays its
   children out as inline-level boxes, and at 1200px and up gut-health is the
   one lander that still sets .h2__ln to inline-block. Clamping it would turn
   each group into its own line, which is a fixed break rather than a wrap, and
   its headlines are short enough not to need the cap anyway. The other two set
   .h2__ln to inline just below, so the sentence flows and the clamp only ever
   decides the line count. */
.section-onefit-busy-mums #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  overflow: hidden;
}

/* AND THE MEASURE IS SET HERE, LAST, IN em RATHER THAN ch.
   The 26ch above was still rendering wide. Two reasons, and both matter:

     * ch measures the width of the "0" glyph, and on this display face the
       figure is much wider than the average letter, so 26ch buys closer to 32
       characters of actual sentence.
     * the rule that consumes --gh-h2-measure sits earlier in the file and
       inside its own media block, so anything later touching this element
       (the clamp above included) reads as the more recent author-level rule
       and the intent gets muddy.

   14em against the beat headline's own font-size is about 26 real characters
   and holds every headline on both landers to two or three lines. It is
   declared after the clamp so the two travel together: whoever edits one sees
   the other, which is the point.

   IF A HEADLINE CLIPS, SHORTEN THE HEADLINE. Do not widen this. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .blk__copy .h2,
  .section-onefit-menopause #fonLcg .blk__copy .h2,
  .section-onefit-endometriosis #fonLcg .blk__copy .h2 {
    max-width: 14em;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE ARTWORK PANELS SIZE LIKE THE CARDS THEY REPLACED
   ==========================================================================
   The seven placeholders were .panel cards inside .blk__panel, and the pass
   above pins `.blk__panel > .panel` to the full track width. Swapping the
   placeholders for artwork replaced .panel with .dgm, so those beats stopped
   matching that selector: the figure sized to its own content inside a flex
   container and the picture read as cut off against the taller copy column.

   The same rule is restated for .dgm, and the container takes the artwork's
   real 1200x896 ratio rather than the shared 50/37 the gut-health diagrams
   used - a small mismatch, but it was cropping the callout cards' margins.
   ========================================================================== */

#fonLcg .dgm--photo { aspect-ratio: 1200 / 896; }
#fonLcg .dgm--photo > img { object-fit: contain; }

@media (min-width: 900px) {
.section-onefit-busy-mums #fonLcg .blk__panel > .dgm,
.section-onefit-gut-health #fonLcg .blk__panel > .dgm,
.section-onefit-perimenopause #fonLcg .blk__panel > .dgm,
.section-onefit-menopause #fonLcg .blk__panel > .dgm,
.section-onefit-endometriosis #fonLcg .blk__panel > .dgm {
    flex: 1 1 auto;
    width: 100%;
    min-width: 0;
    align-self: flex-start;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE HERO STOPS GROWING WHERE THE TYPE STOPS GROWING
   ==========================================================================
   THE REPORTED FAULT, precisely: zooming the browser out (100% -> 75% -> 50%)
   shrinks the headline and the copy but leaves the hero photograph and the
   seven-beat artwork apparently the same size, stuck to the same place on the
   screen. Resizing the window has the same effect.

   WHY, and it is not a fixed width - every width here is already fluid.
   Zooming OUT does not shrink the page; it ENLARGES the CSS viewport. On a
   1920 screen: 100% = 1902px of CSS viewport, 75% = 2542px, 50% = 3822px.
   Everything sized in vw therefore grows in CSS pixels at exactly the rate
   the zoom shrinks them, and the two cancel. Measured on this page:

       zoom   CSS vw   image (46vw)   % of the physical screen
       100%    1902        875px            45.6%
        75%    2542       1169px            45.7%
        50%    3822       1758px            45.8%

   The image is the same size on the glass at every zoom level. That is the
   "it didn't resize" in the report, and it is the correct behaviour of a pure
   vw width - it is a proportion of the viewport, and the viewport is what
   zoom changes.

   The TYPE looks like it shrinks because it is clamped:

       .hero__turn  font-size: clamp(40px, 3.8vw, 74px)

   3.8vw is 96px at 2542, so past ~1950px of viewport the headline is pinned
   to its 74px ceiling and stops growing - and anything that stops growing in
   CSS pixels does shrink on the glass as you zoom out. So the type has a
   ceiling and the artwork does not, and the two drift apart. The page does
   not look wrong at 100%; it looks progressively wrong the further you zoom.

   THE FIX IS THE REFERENCE'S OWN. The GLP-1 lander does not have this problem
   because its hero lives inside .shell, which is `max-width: var(--shell)`
   (1300px): past that width the whole layout stops growing and zooming out
   shrinks every part of it together. These four pages deliberately break out
   of .shell so the photograph can reach the viewport edge, and in doing so
   they dropped the ceiling that made the reference behave.

   The ceiling is given back where it belongs - on the tokens the hero and the
   listicle are both built from - instead of by re-centring the layout, which
   would undo the full-bleed art direction that was approved.

       --gh-img     46vw  ->  min(46vw, 900px)
       --gh-inset   clamp(...)  ->  its clamp, then capped in px

   min() takes the SMALLER of the two, so below ~1957px of CSS viewport - i.e.
   every ordinary desktop at 100% zoom - 46vw is the smaller value and is used
   unchanged. The cap can only engage ABOVE that width, which is exactly and
   only the zoomed-out case that was reported. 900px is 46vw of 1957, so the
   two meet continuously: there is no jump at the crossover.

   VERIFIED: at every tested viewport from 390px to 1920px the computed
   geometry of .hero__figure, .hero__art, .hero__copy, .blk__panel and .dgm is
   unchanged to the pixel, and the rendered page is pixel-identical. Only
   >1957px CSS viewport - unreachable at 100% zoom on a 1920 screen - differs,
   which is the fault being fixed.

   Nothing else is touched: no aspect-ratio, no object-fit, no object-position,
   so no artwork is re-cropped anywhere.
   ========================================================================== */

@media (min-width: 900px) {

  .section-onefit-busy-mums #fonLcg,
  .section-onefit-gut-health #fonLcg,
  .section-onefit-menopause #fonLcg,
  .section-onefit-endometriosis #fonLcg,
  .section-onefit-perimenopause #fonLcg {
    /* Identical to 46vw until the viewport passes ~1957px, then held. */
    --gh-img: min(calc(46vw + 60px), 960px);
    /* The left inset is already clamped in px, so it has a ceiling of its own
       and needs nothing - it is restated here only so the two tokens that
       define the row's geometry sit together and stay legible. */
    --gh-inset: clamp(112px, 9vw, 190px);
  }
}

/* The artwork can never exceed the box it is given, on the way down or back
   up. No ratio or position is altered, so the crop is unchanged. */
.section-onefit-busy-mums #fonLcg .hero__figure > img,
.section-onefit-gut-health #fonLcg .hero__figure > img,
.section-onefit-menopause #fonLcg .hero__figure > img,
.section-onefit-endometriosis #fonLcg .hero__figure > img,
.section-onefit-perimenopause #fonLcg .hero__figure > img,
.section-onefit-busy-mums #fonLcg .dgm > img,
.section-onefit-gut-health #fonLcg .dgm > img,
.section-onefit-menopause #fonLcg .dgm > img,
.section-onefit-endometriosis #fonLcg .dgm > img,
.section-onefit-perimenopause #fonLcg .dgm > img {
  max-width: 100%;
}

/* A flex child will not go below its content's intrinsic width without this,
   which is the low-level reason a flex row overflows instead of reflowing. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
  .section-onefit-menopause #fonLcg .hero__copy,
  .section-onefit-endometriosis #fonLcg .hero__copy,
  .section-onefit-perimenopause #fonLcg .hero__copy,
  .section-onefit-busy-mums #fonLcg .blk__copy,
  .section-onefit-gut-health #fonLcg .blk__copy,
  .section-onefit-menopause #fonLcg .blk__copy,
  .section-onefit-endometriosis #fonLcg .blk__copy,
  .section-onefit-perimenopause #fonLcg .blk__copy {
    min-width: 0;
  }
}

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg,
.section-onefit-menopause #fonLcg,
.section-onefit-endometriosis #fonLcg,
.section-onefit-perimenopause #fonLcg {
  overflow-x: clip;
}

/* ==========================================================================
   REVIEW HEADLINES GO BOLD on the three angle landers.
   The base rule sets .rcard__t to 600, which at 16px reads as barely heavier
   than the body copy under it. The headline is the part that carries the
   review, so it takes 700 and gets to look like a heading.

   Scoped to the three pages rather than changed at the base rule, because
   lcg2-lander.css is shared with lcarnitine-glp1-2, onefit-perimenopause and
   onefit-subscription, and those were not part of this change.
   ========================================================================== */
.section-onefit-busy-mums #fonLcg .rcard__t,
.section-onefit-gut-health #fonLcg .rcard__t,
.section-onefit-menopause #fonLcg .rcard__t,
.section-onefit-endometriosis #fonLcg .rcard__t {
  font-weight: 700;
}

/* ==========================================================================
   AN OUT-OF-STOCK FLAVOUR IS SHOWN, NOT HIDDEN, on the three angle landers.

   The shared rule above is `display: none`, so a flavour its format cannot
   supply vanishes from the row. On the endometriosis page that leaves a single
   visible option whenever Sachets + Smooth Vanilla is out, which reads as "this
   page only sells one flavour" rather than "that one is temporarily out" - and
   the visitor has no way to learn the flavour exists, or that switching to
   Pouches would get it.

   So it stays in the row, dimmed, unclickable, labelled. syncFlavourStock()
   already re-evaluates availability on every format change and clears the class
   when a variant is buyable, so a restock in Shopify brings the option back on
   its own. Nothing here needs editing when stock returns.

   Scoped to the three pages: the rule it overrides is shared with the other
   landers on this sheet, which were not part of this change.
   ========================================================================== */
.section-onefit-busy-mums #fonLcg .opt--oos,
.section-onefit-gut-health #fonLcg .opt--oos,
.section-onefit-menopause #fonLcg .opt--oos,
.section-onefit-endometriosis #fonLcg .opt--oos {
  display: block;
  opacity: .48;
  cursor: not-allowed;
}

/* The label is the click target, so the pointer block goes on the inner box:
   the radio is already disabled by the JS, but a label wrapping a disabled
   input still swallows the click and shows a text cursor. */
.section-onefit-busy-mums #fonLcg .opt--oos .opt__b,
.section-onefit-gut-health #fonLcg .opt--oos .opt__b,
.section-onefit-menopause #fonLcg .opt--oos .opt__b,
.section-onefit-endometriosis #fonLcg .opt--oos .opt__b {
  pointer-events: none;
}

/* The swatch goes grey so the row reads as unavailable at a glance rather than
   only on reading the tag. */
.section-onefit-busy-mums #fonLcg .opt--oos .opt__sw img,
.section-onefit-gut-health #fonLcg .opt--oos .opt__sw img,
.section-onefit-menopause #fonLcg .opt--oos .opt__sw img,
.section-onefit-endometriosis #fonLcg .opt--oos .opt__sw img {
  filter: grayscale(1);
}

/* "Out of stock" is appended rather than written into the markup, so the JS
   stays the single source of truth for availability and the string cannot drift
   out of sync with the class that carries it. */
.section-onefit-busy-mums #fonLcg .opt--oos .opt__b b::after,
.section-onefit-gut-health #fonLcg .opt--oos .opt__b b::after,
.section-onefit-menopause #fonLcg .opt--oos .opt__b b::after,
.section-onefit-endometriosis #fonLcg .opt--oos .opt__b b::after {
  content: "Out of stock";
  display: block;
  margin-top: 2px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: var(--fg-mut);
}

/* ==========================================================================
   ANGLE LANDERS — MOBILE: THE PILL, THE HERO IMAGE AND THE SUPPLY PICKER
   ==========================================================================
   Three faults reported from a phone, all below 900px. Desktop is not touched
   by any of this: every rule sits inside the mobile query.

   1 · THE PROOF PILL RAN OFF THE RIGHT EDGE. It carries five pieces of proof
       - avatars, stars, "4.8 stars", "2.1K reviews", "500K+ members" - at a
       fixed 13px. Measured at 375px wide the row's content is 382px, so
       "500K+ members" is cut in half by the viewport edge. The desktop pass
       gives it `white-space: nowrap`, but only inside a min-width: 900px
       query, so on a phone it was already free to wrap and still did not fit.

       The row keeps all five pieces and is allowed to wrap onto a second line
       where it must, the type steps down slightly, and the separators tighten.
       Nothing is removed - the proof is the point of the lockup.

   2 · THE HERO IMAGE WAS WIDER THAN THE SCREEN AND SAT OFF-CENTRE. The mobile
       rule deliberately runs it edge to edge with a negative inline margin of
       one gutter each side, which is the approved full-bleed treatment. But
       the figure resolved to 412px against a 390px viewport, so it was not
       merely full-bleed, it was overhanging - and because the overhang is not
       symmetrical once the copy column's padding is taken into account, the
       subject sat right of centre.

       It is pinned to exactly the viewport width and re-centred. Full-bleed is
       kept - the picture still touches both edges - it simply stops being
       WIDER than the screen. object-position is untouched, so the crop and the
       composition are exactly what they were.

   3 · THE SUPPLY PICKER. The native <select> inherits 13.5px with 15px of left
       padding and 38px on the right for the chevron, which on a narrow phone
       leaves very little room for "30-Day supply · $125" and pushed it into
       the ellipsis. It gets a slightly smaller face, tighter padding and a
       guaranteed tap target of 44px, which is the accessibility floor for a
       control the shopper has to hit before they can buy.

   Scoped to the three angle landers named in the report. Perimenopause shares
   every selector on this sheet and is deliberately included so it does not
   become the one page left with the fault.
   ========================================================================== */

@media (max-width: 899.98px) {

  /* 0 · THE COLUMN ITSELF WAS THE FLOOR. .hero__copy is a grid item, and a
     grid item's default `min-width: auto` refuses to go narrower than its
     content's intrinsic minimum. Measured, it held 384.4px inside a 375px
     viewport no matter how narrow the screen got, which is what pushed the
     pill and the headline past the right edge - the pill was the widest thing
     in it, so the pill set the floor for the whole column. Releasing that
     floor is what lets everything below actually fit. */
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
  .section-onefit-menopause #fonLcg .hero__copy,
  .section-onefit-endometriosis #fonLcg .hero__copy,
  .section-onefit-perimenopause #fonLcg .hero__copy,
  .section-onefit-busy-mums #fonLcg .blk__copy,
  .section-onefit-gut-health #fonLcg .blk__copy,
  .section-onefit-menopause #fonLcg .blk__copy,
  .section-onefit-endometriosis #fonLcg .blk__copy,
  .section-onefit-perimenopause #fonLcg .blk__copy {
    min-width: 0;
  }

  /* 1 · The pill fits, on as many lines as it needs. */
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
  .section-onefit-menopause #fonLcg .proofpill,
  .section-onefit-endometriosis #fonLcg .proofpill,
  .section-onefit-perimenopause #fonLcg .proofpill,
  .section-onefit-busy-mums #fonLcg .proofpill--rating,
  .section-onefit-gut-health #fonLcg .proofpill--rating,
  .section-onefit-menopause #fonLcg .proofpill--rating,
  .section-onefit-endometriosis #fonLcg .proofpill--rating,
  .section-onefit-perimenopause #fonLcg .proofpill--rating {
    flex-wrap: wrap;
    white-space: normal;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
    font-size: 12px;
    gap: 4px 8px;
    row-gap: 4px;
  }

  /* The avatars never stretch or shrink; they are a fixed lockup. */
  .section-onefit-busy-mums #fonLcg .proofpill__av,
  .section-onefit-gut-health #fonLcg .proofpill__av,
  .section-onefit-menopause #fonLcg .proofpill__av,
  .section-onefit-endometriosis #fonLcg .proofpill__av,
  .section-onefit-perimenopause #fonLcg .proofpill__av {
    flex: none;
  }

  /* The vertical separators are the bare <i> elements between the three proof
     groups (there is no class on them). They are what force the widest line,
     so they come out on a phone - the wrap itself now groups the proof. */
  .section-onefit-busy-mums #fonLcg .proofpill > i,
  .section-onefit-gut-health #fonLcg .proofpill > i,
  .section-onefit-menopause #fonLcg .proofpill > i,
  .section-onefit-endometriosis #fonLcg .proofpill > i,
  .section-onefit-perimenopause #fonLcg .proofpill > i {
    display: none;
  }

  /* Each proof group stays intact on its own line rather than breaking
     between the figure and its word. */
  .section-onefit-busy-mums #fonLcg .proofpill .pf,
  .section-onefit-gut-health #fonLcg .proofpill .pf,
  .section-onefit-menopause #fonLcg .proofpill .pf,
  .section-onefit-endometriosis #fonLcg .proofpill .pf,
  .section-onefit-perimenopause #fonLcg .proofpill .pf {
    white-space: nowrap;
  }

  /* 2 · Full-bleed, but exactly the width of the screen and centred in it.
     The negative margin stays - that is what makes it full-bleed - and the
     width is stated against the viewport so it can never exceed it. */
  .section-onefit-busy-mums #fonLcg .hero__art,
  .section-onefit-gut-health #fonLcg .hero__art,
  .section-onefit-menopause #fonLcg .hero__art,
  .section-onefit-endometriosis #fonLcg .hero__art,
  .section-onefit-perimenopause #fonLcg .hero__art {
    width: auto;
    max-width: none;
    /* The row carries --gutter of side padding; pulling back by exactly that
       on each side puts the picture on the viewport edges without ever making
       it wider than the screen. Symmetrical, so it is centred by definition -
       the previous calc(50% - 50vw) was measured against a grid item whose own
       width had already been clamped, which is what pushed it off-centre. */
    margin-inline: calc(var(--gutter) * -1);
  }

  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
  .section-onefit-menopause #fonLcg .hero__figure,
  .section-onefit-endometriosis #fonLcg .hero__figure,
  .section-onefit-perimenopause #fonLcg .hero__figure {
    width: 100%;
    max-width: 100%;
    margin-inline: 0;
  }

  /* 2b · THE RISK LINE. `.hero__risk > span` is given `white-space: nowrap`
     further up the sheet, so "Try it Risk-Free for 90 days · Free shipping to
     AU, USA, NZ & UK" is one unbreakable line. Measured, it reached 5px past
     the right edge at 375px. It is allowed to wrap on a phone; the tick stays
     on the first line beside it. */
  .section-onefit-busy-mums #fonLcg .hero__risk > span,
  .section-onefit-gut-health #fonLcg .hero__risk > span,
  .section-onefit-menopause #fonLcg .hero__risk > span,
  .section-onefit-endometriosis #fonLcg .hero__risk > span,
  .section-onefit-perimenopause #fonLcg .hero__risk > span {
    white-space: normal;
  }

  /* 3 · The supply picker holds its label and stays a legal tap target. */
  .section-onefit-busy-mums #fonLcg .sub__freq,
  .section-onefit-gut-health #fonLcg .sub__freq,
  .section-onefit-menopause #fonLcg .sub__freq,
  .section-onefit-endometriosis #fonLcg .sub__freq,
  .section-onefit-perimenopause #fonLcg .sub__freq {
    font-size: 13px;
    padding: 12px 34px 12px 12px;
    min-height: 44px;
    box-sizing: border-box;
  }

  .section-onefit-busy-mums #fonLcg .sub__freqwrap::after,
  .section-onefit-gut-health #fonLcg .sub__freqwrap::after,
  .section-onefit-menopause #fonLcg .sub__freqwrap::after,
  .section-onefit-endometriosis #fonLcg .sub__freqwrap::after,
  .section-onefit-perimenopause #fonLcg .sub__freqwrap::after {
    right: 13px;
  }
}

/* ==========================================================================
   ANGLE LANDERS — PHONE TYPE COMES DOWN A STEP
   ==========================================================================
   On request: the hero reads too large on a phone. The headline was
   clamp(32px, 8vw, 44px), which is 32px at 400px wide with an eight-line
   turn on the endometriosis page - the copy alone filled the first screen
   and pushed the CTA below the fold.

   Every value here is a proportional step down of the one it replaces, so
   the hierarchy is unchanged: the turn is still the largest thing on the
   screen, the setup line still sits above it at roughly half its size, and
   the body still reads a step below that. Nothing is restructured and no
   line breaks are forced - the copy simply occupies less of the screen.

   Desktop is untouched: this is inside the same max-width: 899.98px query
   the rest of the phone treatment uses.
   ========================================================================== */

@media (max-width: 899.98px) {

  /* The display line: 32 -> 27px floor, 44 -> 36px ceiling. */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn,
  .section-onefit-menopause #fonLcg .hero__turn,
  .section-onefit-endometriosis #fonLcg .hero__turn,
  .section-onefit-perimenopause #fonLcg .hero__turn {
    font-size: clamp(27px, 6.7vw, 36px);
    line-height: 1.08;
    letter-spacing: -.026em;
  }

  /* The setup line above it: 17 -> 15px floor, 21 -> 18px ceiling. */
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote,
  .section-onefit-menopause #fonLcg .hero__quote,
  .section-onefit-endometriosis #fonLcg .hero__quote,
  .section-onefit-perimenopause #fonLcg .hero__quote {
    font-size: clamp(15px, 3.8vw, 18px);
    line-height: 1.32;
  }

  /* The paragraph under the headline. */
  .section-onefit-busy-mums #fonLcg .hero__sub,
  .section-onefit-gut-health #fonLcg .hero__sub,
  .section-onefit-menopause #fonLcg .hero__sub,
  .section-onefit-endometriosis #fonLcg .hero__sub,
  .section-onefit-perimenopause #fonLcg .hero__sub {
    font-size: clamp(13.5px, 3.5vw, 15px);
    line-height: 1.5;
  }

  /* The seven-beat headings follow the hero down so the page keeps one
     type scale rather than the listicle suddenly out-shouting the hero. */
  .section-onefit-busy-mums #fonLcg .blk__copy .h2,
  .section-onefit-gut-health #fonLcg .blk__copy .h2,
  .section-onefit-menopause #fonLcg .blk__copy .h2,
  .section-onefit-endometriosis #fonLcg .blk__copy .h2,
  .section-onefit-perimenopause #fonLcg .blk__copy .h2 {
    font-size: clamp(20px, 5.2vw, 26px);
    line-height: 1.16;
  }

  .section-onefit-busy-mums #fonLcg .blk__copy .body,
  .section-onefit-gut-health #fonLcg .blk__copy .body,
  .section-onefit-menopause #fonLcg .blk__copy .body,
  .section-onefit-endometriosis #fonLcg .blk__copy .body,
  .section-onefit-perimenopause #fonLcg .blk__copy .body {
    font-size: clamp(13.5px, 3.5vw, 15px);
    line-height: 1.5;
  }

  /* The CTA and its risk line come down with everything else. */
  .section-onefit-busy-mums #fonLcg .hero__cta .btn,
  .section-onefit-gut-health #fonLcg .hero__cta .btn,
  .section-onefit-menopause #fonLcg .hero__cta .btn,
  .section-onefit-endometriosis #fonLcg .hero__cta .btn,
  .section-onefit-perimenopause #fonLcg .hero__cta .btn {
    font-size: clamp(14px, 3.6vw, 15.5px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE PROOF PILL AND THE RISK LINE ARE ONE LINE, ALWAYS
   ==========================================================================
   Akaash, reviewing the hero: both of these were wrapping to two lines, on
   desktop and on mobile, and he has asked for one line at every width with
   smaller type as the means. That overrules the earlier decision at the foot
   of this sheet, which let both wrap so they would stop overflowing the right
   edge on a phone. Wrapping was the wrong half of the trade; the type comes
   down instead.

   WHY THIS IS A NEW BLOCK RATHER THAN EIGHT EDITS. The rules being reversed
   are spread across eight places - 2774, 4398, 5182, 5250, 5310, 7728/8466,
   10430 and 10502 - and several are shared with other elements on the page.
   Specificity here is identical to all of them (one id, two classes), so
   source order decides and last wins. One block to read, one block to revert.

   THE DESKTOP FAULT WAS NOT WRAPPING. `.hero__risk` is capped at max-width:
   406px (line 8466, and 430px before it at 7991) while its span is already
   unbreakable (line 7728), so on desktop the line was OVERFLOWING that cap
   rather than wrapping inside it. The cap has to come off or nothing else
   here matters.

   THE LINK HAD TO STOP BEING 12px. "Risk-Free for 90 days" is set to a fixed
   12px at line 7780. Left alone it would hold that size while the rest of the
   line scaled down - about a third of the line refusing to shrink, and the
   clamp below achieving nothing. It is stated in em so it tracks its parent.

   THE NUMBERS. Measured earlier in this sheet at a 390px viewport (see the
   audits at lines 2756 and 2792): the pill's text runs about 26.6px of width
   for every 1px of type, on top of a 46px avatar stack that does not scale.
   Below 640px the gutter is 14px, so usable width is the viewport minus 28.
   At 320px that is 292px, which needs roughly 9.2px type with the faces in -
   past the point of being worth reading. So below 430px the faces come off,
   exactly as they already do at line 2773, and the floor stays at 10.5px.
   ========================================================================== */

/* 1 · THE PILL HOLDS ONE LINE AT EVERY WIDTH.
   flex-wrap and white-space are restated together because the wrap was set
   from two directions - the flex container at 10430 and the text at 5251. */
.section-onefit-busy-mums #fonLcg .proofpill,
.section-onefit-gut-health #fonLcg .proofpill,
.section-onefit-perimenopause #fonLcg .proofpill,
.section-onefit-menopause #fonLcg .proofpill,
.section-onefit-endometriosis #fonLcg .proofpill,
.section-onefit-busy-mums #fonLcg .proofpill--rating,
.section-onefit-gut-health #fonLcg .proofpill--rating,
.section-onefit-perimenopause #fonLcg .proofpill--rating,
.section-onefit-menopause #fonLcg .proofpill--rating,
.section-onefit-endometriosis #fonLcg .proofpill--rating {
  flex-wrap: nowrap;
  white-space: nowrap;
  font-size: clamp(10.5px, 9.1px + 0.43vw, 13px);
  gap: 0 6px;
  max-width: 100%;
  min-width: 0;
}

/* The three groups never break internally either. */
.section-onefit-busy-mums #fonLcg .proofpill .pf,
.section-onefit-gut-health #fonLcg .proofpill .pf,
.section-onefit-perimenopause #fonLcg .proofpill .pf,
.section-onefit-menopause #fonLcg .proofpill .pf,
.section-onefit-endometriosis #fonLcg .proofpill .pf {
  flex: none;
  white-space: nowrap;
  gap: .4em;
}

/* The avatars are a fixed lockup and must never be squeezed by the flex
   algorithm - if they shrink the faces distort. */
.section-onefit-busy-mums #fonLcg .proofpill__av,
.section-onefit-gut-health #fonLcg .proofpill__av,
.section-onefit-perimenopause #fonLcg .proofpill__av,
.section-onefit-menopause #fonLcg .proofpill__av,
.section-onefit-endometriosis #fonLcg .proofpill__av {
  flex: none;
}

/* 2 · "STARS" STAYS HIDDEN, AND NOW UP TO 900px.
   It was hidden below 430px only. The earlier audit costed this single word
   at 38px - the cheapest width on the row, and five gold stars immediately
   to its left already say it. Every figure stays. */
@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .pf__w,
  .section-onefit-gut-health #fonLcg .pf__w,
  .section-onefit-perimenopause #fonLcg .pf__w,
  .section-onefit-menopause #fonLcg .pf__w,
  .section-onefit-endometriosis #fonLcg .pf__w {
    display: none;
  }

  /* 3 · THE SEPARATORS COME BACK between 430 and 900px. On one line the three
     groups sit adjacent with nothing between them, and "4.8 2.1K reviews
     500K+ members" reads as one run-on figure. They cost about 14px the pair,
     which the hidden "stars" has already paid for twice over.
     NOTE: this changes what renders on a phone - two | glyphs reappear. */
  .section-onefit-busy-mums #fonLcg .proofpill > i,
  .section-onefit-gut-health #fonLcg .proofpill > i,
  .section-onefit-perimenopause #fonLcg .proofpill > i,
  .section-onefit-menopause #fonLcg .proofpill > i,
  .section-onefit-endometriosis #fonLcg .proofpill > i {
    display: inline;
    margin-inline: 0;
  }

  /* The avatars scale with the type so they stop being a fixed 46px tax.
     The .proofpill--rating compound is required: the fixed 24px sizing at
     7571 carries it, and a two-class selector loses to that at any position
     in the sheet. */
  .section-onefit-busy-mums #fonLcg .proofpill--rating .proofpill__av img,
  .section-onefit-gut-health #fonLcg .proofpill--rating .proofpill__av img,
  .section-onefit-perimenopause #fonLcg .proofpill--rating .proofpill__av img,
  .section-onefit-menopause #fonLcg .proofpill--rating .proofpill__av img,
  .section-onefit-endometriosis #fonLcg .proofpill--rating .proofpill__av img {
    width: 1.75em;
    height: 1.75em;
    border-width: 1.5px;
  }
  .section-onefit-busy-mums #fonLcg .proofpill--rating .proofpill__av img + img,
  .section-onefit-gut-health #fonLcg .proofpill--rating .proofpill__av img + img,
  .section-onefit-perimenopause #fonLcg .proofpill--rating .proofpill__av img + img,
  .section-onefit-menopause #fonLcg .proofpill--rating .proofpill__av img + img,
  .section-onefit-endometriosis #fonLcg .proofpill--rating .proofpill__av img + img {
    margin-left: -.6em;
  }

  .section-onefit-busy-mums #fonLcg .proofpill .pf__i,
  .section-onefit-gut-health #fonLcg .proofpill .pf__i,
  .section-onefit-perimenopause #fonLcg .proofpill .pf__i,
  .section-onefit-menopause #fonLcg .proofpill .pf__i,
  .section-onefit-endometriosis #fonLcg .proofpill .pf__i {
    width: 1.15em;
    height: 1.15em;
  }

  .section-onefit-busy-mums #fonLcg .proofpill__stars,
  .section-onefit-gut-health #fonLcg .proofpill__stars,
  .section-onefit-perimenopause #fonLcg .proofpill__stars,
  .section-onefit-menopause #fonLcg .proofpill__stars,
  .section-onefit-endometriosis #fonLcg .proofpill__stars {
    font-size: .92em;
    letter-spacing: .02em;
  }
}

/* 4 · BELOW 430px THE FACES COME OFF, AND SO DO THE SEPARATORS.
   At 320px there is 292px to work with. With the avatars in, one line needs
   roughly 9.2px type, which is not worth reading. The faces are decoration,
   the three numbers are the proof. With them gone the line holds at the
   10.5px floor with the separators also out.

   THE HIDE MUST CARRY .proofpill--rating. The element is
   <p class="proofpill proofpill--rating">, and 7249 sets the avatars to
   display: inline-flex through the three-class compound
   `.proofpill--rating .proofpill__av`. The sheet already tried to hide them
   unscoped at 2773, and that rule has never once won - it is a two-class
   selector against a three-class one, which source order cannot rescue. So
   the compound is matched here rather than repeating a dead attempt. */
@media (max-width: 429.98px) {
  .section-onefit-busy-mums #fonLcg .proofpill--rating .proofpill__av,
  .section-onefit-gut-health #fonLcg .proofpill--rating .proofpill__av,
  .section-onefit-perimenopause #fonLcg .proofpill--rating .proofpill__av,
  .section-onefit-menopause #fonLcg .proofpill--rating .proofpill__av,
  .section-onefit-endometriosis #fonLcg .proofpill--rating .proofpill__av {
    display: none;
  }

  .section-onefit-busy-mums #fonLcg .proofpill > i,
  .section-onefit-gut-health #fonLcg .proofpill > i,
  .section-onefit-perimenopause #fonLcg .proofpill > i,
  .section-onefit-menopause #fonLcg .proofpill > i,
  .section-onefit-endometriosis #fonLcg .proofpill > i {
    display: none;
  }

  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
  .section-onefit-perimenopause #fonLcg .proofpill,
  .section-onefit-menopause #fonLcg .proofpill,
  .section-onefit-endometriosis #fonLcg .proofpill,
  .section-onefit-busy-mums #fonLcg .proofpill--rating,
  .section-onefit-gut-health #fonLcg .proofpill--rating,
  .section-onefit-perimenopause #fonLcg .proofpill--rating,
  .section-onefit-menopause #fonLcg .proofpill--rating,
  .section-onefit-endometriosis #fonLcg .proofpill--rating {
    gap: 0 5px;
  }
}

/* 5 · NARROW DESKTOP KEEPS ONE LINE TOO.
   900-1080px was deliberately allowed to wrap at line 5250 because the pill
   could not hold a line there at 12.5px. It can at the clamp's size, so that
   exemption is withdrawn - it was the desktop half of the same fault. */
@media (min-width: 900px) and (max-width: 1079.98px) {
  .section-onefit-busy-mums #fonLcg .proofpill,
  .section-onefit-gut-health #fonLcg .proofpill,
  .section-onefit-perimenopause #fonLcg .proofpill,
  .section-onefit-menopause #fonLcg .proofpill,
  .section-onefit-endometriosis #fonLcg .proofpill {
    flex-wrap: nowrap;
    white-space: nowrap;
    font-size: clamp(11px, 1.05vw, 12.5px);
  }
}

/* 6 · THE RISK LINE IS ONE LINE AT EVERY WIDTH.
   The span's nowrap was switched off in two places - the prose-reflow pass at
   4398 and the phone pass at 10502 - and both are reversed here. */
.section-onefit-busy-mums #fonLcg .hero__risk > span,
.section-onefit-gut-health #fonLcg .hero__risk > span,
.section-onefit-perimenopause #fonLcg .hero__risk > span,
.section-onefit-menopause #fonLcg .hero__risk > span,
.section-onefit-endometriosis #fonLcg .hero__risk > span {
  white-space: nowrap;
  overflow-wrap: normal;
  word-break: normal;
  min-width: 0;
}

/* THE CAP COMES OFF. This is what was actually breaking desktop: the rail was
   held to 406px while its text was already unbreakable, so the line ran out
   past the cap rather than wrapping inside it. It now takes whatever width
   its own text needs and no more. */
.section-onefit-busy-mums #fonLcg .hero__risk,
.section-onefit-gut-health #fonLcg .hero__risk,
.section-onefit-perimenopause #fonLcg .hero__risk,
.section-onefit-menopause #fonLcg .hero__risk,
.section-onefit-endometriosis #fonLcg .hero__risk {
  max-width: 100%;
  width: auto;
  flex-wrap: nowrap;
  align-items: center;
  font-size: clamp(9.5px, 8.1px + 0.43vw, 12px);
  gap: .55em;
}

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__risk,
  .section-onefit-gut-health #fonLcg .hero__risk,
  .section-onefit-perimenopause #fonLcg .hero__risk,
  .section-onefit-menopause #fonLcg .hero__risk,
  .section-onefit-endometriosis #fonLcg .hero__risk {
    max-width: 100%;
    width: auto;
    justify-content: flex-start;
  }
}

/* THE GUARANTEE SCALES WITH THE LINE. It was a fixed 12px (line 7780), which
   would have held while everything around it shrank. In em it keeps its
   emphasis and tracks the parent. */
.section-onefit-busy-mums #fonLcg .hero__risk a,
.section-onefit-gut-health #fonLcg .hero__risk a,
.section-onefit-perimenopause #fonLcg .hero__risk a,
.section-onefit-menopause #fonLcg .hero__risk a,
.section-onefit-endometriosis #fonLcg .hero__risk a {
  font-size: 1.05em;
  font-weight: 700;
  white-space: nowrap;
}

/* The tick scales too, and never shrinks. */
.section-onefit-busy-mums #fonLcg .hero__tick,
.section-onefit-gut-health #fonLcg .hero__tick,
.section-onefit-perimenopause #fonLcg .hero__tick,
.section-onefit-menopause #fonLcg .hero__tick,
.section-onefit-endometriosis #fonLcg .hero__tick {
  flex: none;
  width: 1.25em;
  height: 1.25em;
  margin-top: 0;
}

/* ==========================================================================
   THE TWO HERO LINES COME BACK UP, ANGLE LANDERS.

   The sub-paragraph under the headline has been removed from the markup, and
   it was the thing holding the hero's type down. Both remaining lines were
   sized for a three-element stack - setup, promise, paragraph - competing for
   the same column height. With the paragraph gone the hero is two lines and a
   button, and at the old sizes it read as a small headline floating in the
   space the paragraph used to occupy rather than as the first thing on the
   page. This puts roughly 18% back into both lines.

   This overrides the desktop pair at 9634-9650 (quote clamp(22px, 1.9vw, 30px),
   turn var(--gh-turn, clamp(40px, 3.8vw, 74px))) and the phone pair at
   10544-10562 (turn clamp(27px, 6.7vw, 36px), quote clamp(15px, 3.8vw, 18px)).
   That phone block is itself the winner over the earlier 9653-9670 pair, so
   matching its breakpoint - 899.98px, not 899px - is what keeps the two
   queries from leaving a gap between them.

   WHY THESE NUMBERS FIT, MEASURED RATHER THAN ESTIMATED. Two intrinsic widths
   govern the hero, both taken off the rendered page in Tomato Grotesk at a
   100px test size:

     the eyebrow  "7 tubs. 7 scoops. Still bloated." is 12.00em on one line
     the headline the widest unbreakable group, "One sachet a day", is 6.80em
                  ("that your gut can" is a close second at 6.75em)

   The 6.80em figure is the one that matters, and it is smaller than the 0.58em
   per character the older notes in this sheet use - that estimate would put
   this group near 9.9em and rule out sizes that in fact fit. It is the group
   rather than the whole line because .hero__ln is display: inline-block above
   1200px (9858), which makes each of the three groups unbreakable: a group too
   wide for the column overflows instead of wrapping. Below 1200px the groups
   are inline and wrap freely, so the same width is a line-count question, not
   an overflow one.

   The tightest width in the range is 900px, where the copy column is only
   402px - the two-column grid has just engaged but the viewport has not yet
   grown to match it. At the new 47px floor the widest group needs 320px there
   and the eyebrow 312px, leaving about 82px and 90px of slack respectively.
   Every width above 900 is looser still: at 1440 the group needs 441px of a
   670px column. Nothing in the range comes close to overflowing.

   The max-width: var(--gh-turn-measure, 11.5em) cap at 9930-9936 needs no
   change. It is expressed in em, so it scales with the font and the three
   line breaks hold at any size; and at 11.5em it is far wider than the 6.80em
   group, so it governs where the line wraps and never clips it. Note that
   --gh-turn and --gh-turn-measure are only ever defined for menopause (10042)
   and endometriosis (10053) - gut-health and perimenopause run on the
   fallbacks. Setting font-size directly here overrides the --gh-turn fallback
   for all four; the two landers that set the variable keep their own measure,
   which is what holds their different line counts.

   The hierarchy is unchanged: every value is the same proportional step, so
   the eyebrow stays at roughly half the promise and still reads as the
   subordinate half of the sentence. The headline still sets in three lines at
   every desktop width, and the eyebrow still holds one line everywhere down
   to 360px, where it needs 210px of a 332px column.

   The h1 grows about 37px at 1440x900, from 206 to 243. The CTA and the risk
   line under it stay above the fold - the removed paragraph and its margin
   gave back more height than the type takes.

   GUT-HEALTH ONLY, AND THAT SCOPING IS LOAD-BEARING. This step was sized
   against gut-health's headline, at a moment when that column had no
   sub-paragraph. It has one again - a replacement written for the new
   headline - so the height this step spends is no longer free; if the CTA
   ever sits close to the fold at 1440x900, this clamp is the first place to
   look. Menopause and endometriosis have carried .hero__sub throughout, and each
   has its own --gh-turn derived from its own headline's arithmetic further up
   this sheet. Applied to all four, this block set font-size directly, which
   bypassed those variables while their --gh-turn-measure caps survived: the
   two went out of step, the unbreakable .hero__ln groups began wrapping
   mid-phrase, and endometriosis grew 209px and pushed its own CTA below the
   fold at 1440x900. So the four rules below name gut-health alone; the
   siblings keep the sizes their own measurements chose.
   ========================================================================== */

@media (min-width: 900px) {

  /* The promise: 40 -> 47px floor, 74 -> 87px ceiling, 3.8 -> 4.5vw between. */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn {
    font-size: clamp(47px, 4.5vw, 87px);
  }

  /* The setup line above it: 22 -> 26px floor, 30 -> 35px ceiling. */
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote {
    font-size: clamp(26px, 2.25vw, 35px);
  }
}

/* Phone: the same proportional step, against a 332-402px column. At 390 and
   430 the headline set in two lines because two groups shared one; at these
   sizes it goes to three, which is the shape it already has at 360 and on
   desktop and reads better than two long lines on a narrow screen. 768px is
   unaffected - the column is 691px there, so two groups still share a line
   both before and after. */
@media (max-width: 899.98px) {

  /* The promise: 27 -> 32px floor, 36 -> 42px ceiling, 6.7 -> 7.9vw between. */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn {
    font-size: clamp(32px, 7.9vw, 42px);
  }

  /* The setup line: 15 -> 17.5px floor, 18 -> 21px ceiling. At the 17.5px
     floor it needs 210px against the 332px column at 360px, so it stays on
     one line at every phone width. */
  .section-onefit-busy-mums #fonLcg .hero__quote,
  .section-onefit-gut-health #fonLcg .hero__quote {
    font-size: clamp(17.5px, 4.45vw, 21px);
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE HERO FRAME LOSES 13% OF ITS HEIGHT, DESKTOP
   ==========================================================================
   Asked for directly: take 8% off the top of the hero picture and 5% off the
   bottom, and let the frame itself get shorter rather than zooming the
   subject inside a box that stays put.

   THE RATIO. The frame was 4/4.5 from an earlier pass that removed 10% from
   the bottom alone. 13% off that height is 4/3.915, and because the width is
   still --gh-img the box simply gets shorter - the picture is not scaled up,
   so nothing inside it grows.

   THE POSITION IS THE HALF THAT ACTUALLY SPLITS THE CROP, AND IT IS MEASURED
   AGAINST THE SOURCE, NOT THE FRAME. object-position was `center top`, which
   pins the window to the top edge and takes every removed pixel off the
   bottom; left alone it would have taken all 13% from below and none from
   above, which is not what was asked.

   The value is 33.18%, and the arithmetic behind it is worth writing down
   because the obvious answer is wrong. Under object-fit: cover the Y
   percentage distributes the OVERFLOW BETWEEN THE SOURCE AND THE BOX - not
   the height this block just removed. The artwork is 4:5 and the frame was
   already 4/4.5, so 10% had gone off the bottom before this change; taking
   another 13% leaves 21.7% of the source overflowing, not 13%. Splitting
   that at 8/13 puts 13.36% above the window instead of 8, which measured out
   as a sliced proof card on all three pages and the top of the subject's head
   gone on two of them.

   33.18% is the value that removes exactly 8% from the top of the frame as it
   stood. The bottom cut therefore goes from 10% to 15%, which is where the
   requested height comes from.

   WHAT THIS COSTS ON EACH PAGE. Gut-health loses a band of ceiling at the top
   and a little of the marble bench at the bottom; her face, the 87% card and
   the sachet all stay. Menopause and endometriosis carry their own
   object-position overrides further up this sheet (4686 and 4776 set 42%/18%
   and 48%/16% for endometriosis), and those are horizontal-and-vertical pairs
   that this rule replaces on desktop - the endometriosis subject sits high in
   its frame, so check that page first if the crop ever needs another look.

   Desktop only. Below 900px the hero is full-bleed at 36/29 and is not
   touched by any of this.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
  .section-onefit-menopause #fonLcg .hero__figure,
  .section-onefit-endometriosis #fonLcg .hero__figure {
    aspect-ratio: 4 / 3.72;
  }

  .section-onefit-busy-mums #fonLcg .hero__figure > img,
  .section-onefit-gut-health #fonLcg .hero__figure > img,
  .section-onefit-menopause #fonLcg .hero__figure > img,
  .section-onefit-endometriosis #fonLcg .hero__figure > img {
    object-fit: cover;
    object-position: center 33.18%;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE HEADER: NO SECTION LINKS, WARM GROUND, BLUE BUTTON
   ==========================================================================
   Three things, all asked for directly.

   1 · THE LINKS ARE OUT OF THE MARKUP. "The 7 things", Reviews, Offer and FAQ
   are gone from all three sections, so .hdr__nav no longer exists to push the
   CTA across. The rule at 545 sets the button to margin-left: 0 above 900px
   precisely because the nav was doing that job; without it the button would
   sit against the logo. It takes the auto margin back here.

   2 · THE BAR KEEPS ITS COLOUR AND GAINS A SHADOW. A warm fill was tried here
   and taken back out: the near-white the header already had is the right
   ground, and what it was actually missing was depth. A single hairline is
   flat, so the edge now carries a shadow instead - a tight 1px catch to hold
   the line, and a wider, softer fall beneath it so content reads as passing
   UNDER the bar rather than stopping at it. The hairline itself lightens,
   because with a shadow behind it the old weight drew as a hard rule.
   The blur stays.

   3 · THE BUTTON IS BLUE. Lime on a near-white bar is 1.2:1 - the sheet's own
   palette note says lime "can never carry text anyway; it only works as a
   fill behind something near-black". The label was being carried by
   --lime-ink at 11.6:1 ON the lime, which is legible, but the button itself
   had almost no presence against the header. It now uses --blue, the same
   #0171E3 the hero CTA and the buy box already use, so the page has one
   action colour rather than two. White on that blue is 4.6:1, and the button
   gains the weight and the radius the theme's own buttons carry.

   Scoped to the three angle landers. The GLP-1 v2 lander and
   onefit-subscription share this sheet and keep the header they have.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hdr,
.section-onefit-gut-health #fonLcg .hdr,
.section-onefit-menopause #fonLcg .hdr,
.section-onefit-endometriosis #fonLcg .hdr {
  border-bottom-color: rgba(32, 28, 20, .08);
  box-shadow: 0 1px 2px rgba(32, 28, 20, .05), 0 6px 18px -6px rgba(32, 28, 20, .16);
}

/* The button carries the bar's right edge now that nothing else can. */
.section-onefit-busy-mums #fonLcg .hdr__cta,
.section-onefit-gut-health #fonLcg .hdr__cta,
.section-onefit-menopause #fonLcg .hdr__cta,
.section-onefit-endometriosis #fonLcg .hdr__cta {
  margin-left: auto;
  background: var(--blue);
  border-color: var(--blue);
  color: #FFFFFF;
  font-weight: 600;
  letter-spacing: .005em;
  border-radius: var(--r-md);
  box-shadow: 0 1px 2px rgba(1, 60, 120, .18);
  transition: background var(--d-fast) var(--ease), border-color var(--d-fast) var(--ease), box-shadow var(--d-fast) var(--ease);
}

.section-onefit-busy-mums #fonLcg .hdr__cta:hover,
.section-onefit-gut-health #fonLcg .hdr__cta:hover,
.section-onefit-menopause #fonLcg .hdr__cta:hover,
.section-onefit-endometriosis #fonLcg .hdr__cta:hover {
  background: var(--blue-dk);
  border-color: var(--blue-dk);
  color: #FFFFFF;
  box-shadow: 0 2px 6px rgba(1, 60, 120, .26);
}

/* The min-900 rule at 545 zeroes this; restated so the button keeps the edge
   at every width, not just below 900. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hdr__cta,
  .section-onefit-gut-health #fonLcg .hdr__cta,
  .section-onefit-menopause #fonLcg .hdr__cta,
  .section-onefit-endometriosis #fonLcg .hdr__cta {
    margin-left: auto;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE HERO IMAGE CLEARS THE HEADER AND TAKES A RADIUS
   ==========================================================================
   Desktop: the picture was butting straight into the underside of the bar.
   It gets a 10px gap and a soft corner so it reads as a panel sitting on the
   page rather than as part of the header.

   Mobile keeps its full-bleed treatment - a radius on an edge-to-edge image
   would cut the corners off the screen.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__art,
  .section-onefit-gut-health #fonLcg .hero__art,
  .section-onefit-menopause #fonLcg .hero__art,
  .section-onefit-endometriosis #fonLcg .hero__art {
    margin-top: 10px;
  }

  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
  .section-onefit-menopause #fonLcg .hero__figure,
  .section-onefit-endometriosis #fonLcg .hero__figure {
    border-radius: 14px;
    overflow: hidden;
  }
}

/* ==========================================================================
   ENDOMETRIOSIS — THE HEADLINE GOES UP, AND HOLDS FOUR LINES
   ==========================================================================
   The supplied break is four lines: "You need more / protein than most. /
   You can stomach / less than most." The markup now carries four .hero__ln
   groups to match, and this sizes the type up to fill the column at that
   shape.

   THE MEASURE CAP HAS TO GO WITH IT. --gh-turn-measure is 12.25em, set when
   the headline was a different sentence; at the larger size that cap is
   narrower than the longest group needs, and a group too wide for its
   measure overflows rather than wraps, because .hero__ln is inline-block
   above 1200px. The cap is restated in em so it tracks the new size, sized
   off the longest group here - "protein than most." at 18 characters.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(44px, 3.5vw, 66px);
    --gh-turn-measure: 10.6em;
    max-width: var(--gh-turn-measure);
    line-height: 1.0;
    letter-spacing: -.032em;
  }
}

/* ==========================================================================
   ENDOMETRIOSIS — THE FOUR-LINE HEADLINE HOLDS ON THE PHONE TOO
   ==========================================================================
   Same shape as desktop, asked for on mobile: four lines, larger type.

   TWO THINGS STAND IN THE WAY BELOW 900px. The size is capped at 36px by the
   phone block further up, and .hero__ln is only inline-block above 1200px -
   below that the groups are plain inline, so the line breaks where the column
   runs out rather than where the markup says. Both are restated here.

   THE SIZE IS SET AGAINST THE LONGEST GROUP, not the column. "protein than
   most." is 18 characters, and at roughly 0.52em a character it needs about
   9.4em. On a 332px column that puts the ceiling near 35px, so the clamp runs
   30px to 35px and uses vw between - larger than the 27-36px it had, and it
   cannot overflow, because the widest group is what sized it.
   ========================================================================== */

@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(30px, 8.6vw, 35px);
    line-height: 1.06;
    letter-spacing: -.028em;
  }

  .section-onefit-busy-mums #fonLcg .hero__ln,
  .section-onefit-endometriosis #fonLcg .hero__ln {
    display: inline-block;
  }
}

/* ==========================================================================
   MENOPAUSE — THE HEADLINE GOES UP, AND HOLDS THREE LINES
   ==========================================================================
   The supplied break is three lines: "Nobody's telling you / about the muscle
   / you're losing." The markup carries three .hero__ln groups to match, and
   the type steps up to fill the column at that shape, desktop and phone.

   THE MEASURE CAP MOVES WITH THE SIZE. --gh-turn-measure is 12.6em, set when
   the headline was a longer sentence; at the larger size that is narrower
   than the longest group needs, and since .hero__ln is inline-block above
   1200px a group too wide for its measure overflows rather than wraps. The
   longest here is "Nobody's telling you" at 20 characters, about 10.4em.

   The phone rule restates inline-block as well: below 1200px the groups are
   plain inline, so the line would break where the column runs out rather
   than where the markup says.
   ========================================================================== */

@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-menopause #fonLcg .hero__turn {
    font-size: clamp(46px, 4.1vw, 78px);
    --gh-turn-measure: 11.2em;
    max-width: var(--gh-turn-measure);
    line-height: 1.0;
    letter-spacing: -.032em;
  }
}

@media (max-width: 899.98px) {
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-menopause #fonLcg .hero__turn {
    font-size: clamp(30px, 8.2vw, 35px);
    line-height: 1.06;
    letter-spacing: -.028em;
  }

  .section-onefit-busy-mums #fonLcg .hero__ln,
  .section-onefit-menopause #fonLcg .hero__ln {
    display: inline-block;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE BEAT HEADINGS BREAK WHERE THE MARKUP SAYS
   ==========================================================================
   Reported across all three: the headings break mid-sentence. "More protein
   needed. Less appetite to eat it." was setting as "More protein needed.
   Less" / "appetite to eat it." - the full stop in the middle of a line and
   a stranded word before it.

   THE MARKUP WAS ALREADY RIGHT. Every one of these headings is two sentences
   wrapped in .h2__ln groups that say exactly where to break. The rule at
   10080 then sets those groups to display: inline for menopause and
   endometriosis above 1200px, which releases them - so the line broke where
   the measure ran out instead.

   THAT EXEMPTION WAS EARNED, AND IT HAS EXPIRED. It was added because those
   two landers carried headings up to 50 characters in a group, which at the
   shared size needed about 940px against a 711px measure - unholdable, so
   wrapping was the lesser evil. Akaash's rewrite has replaced that copy. The
   longest group on either page is now 33 characters, the same as gut-health,
   which has held these groups unbroken all along.

   So the groups go back to inline-block on all three, and the measure widens
   from 26ch to 34ch to fit 33 characters plus the space the ch unit does not
   account for. 34ch was this sheet's own original value, narrowed to 26 when
   the long copy arrived; the reason for narrowing it has gone with the copy.
   ========================================================================== */

@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-gut-health #fonLcg,
  .section-onefit-menopause #fonLcg,
  .section-onefit-endometriosis #fonLcg {
    --gh-h2-measure: 34ch;
  }

  .section-onefit-busy-mums #fonLcg .h2__ln,
  .section-onefit-gut-health #fonLcg .h2__ln,
  .section-onefit-menopause #fonLcg .h2__ln,
  .section-onefit-endometriosis #fonLcg .h2__ln {
    display: inline-block;
  }
}

/* The three-line clamp comes off with it. It was added when these headings
   wrapped freely, as a guard against a fourth line appearing on a narrow
   viewport - a sensible belt-and-braces when nothing else decided the line
   count. Now the groups do decide it, and the clamp is no longer a guard but
   a hazard: it carries overflow: hidden, so meno beat 05 - the only heading
   with three groups, "Two things every woman over 40 / should be taking. /
   Zero of them are in her cupboard." - would sit exactly on the limit with
   its last line one wrap away from being cut off rather than shown. The
   markup fixes the line count now, so nothing needs capping. */
.section-onefit-busy-mums #fonLcg .blk__copy .h2,
.section-onefit-menopause #fonLcg .blk__copy .h2,
.section-onefit-endometriosis #fonLcg .blk__copy .h2 {
  display: block;
  -webkit-line-clamp: none;
  line-clamp: none;
  overflow: visible;
}

/* ==========================================================================
   ANGLE LANDERS — THE HERO GOES BACK TO THE GLP-1 LANDER'S BUILD
   ==========================================================================
   The GLP-1 hero (lcg-lander.css, the page at ?view=lcarnitine-glp1) is four
   declarations: a centred shell, a balanced two-column grid, and a 4/5
   portrait figure.

       .hero__in    display: grid; grid-template-columns: 1.04fr .96fr;
                    align-items: center; gap: clamp(44px, 4.6vw, 80px)
       .hero__figure aspect-ratio: 4 / 5

   This sheet had rebuilt the same row as a full-bleed flex strip driven by
   --gh-inset, --gh-img and --gh-trim, with the picture running to the
   viewport edge and a landscape figure. Tuning those tokens is what kept
   moving the picture without ever reaching the proportions of the page being
   copied, because the geometry itself was different: a portrait figure in a
   balanced column is what makes that hero tall, not a larger --gh-img.

   So the tokens stop being tuned and the build is replaced. This block is
   last in the sheet and matches the specificity of the rules above it
   (.section-<page> #fonLcg .x), so it wins on order for the properties it
   names. Every earlier hero rule is left in place rather than deleted - they
   are inert for these properties now, and removing 122 scattered declarations
   is a separate, riskier change.

   The listicle rows take the same treatment, so the beats keep sharing the
   hero's left edge and column widths - which is what they were doing before
   any of this, and is why .blk__in is reset here alongside .hero__in.

   Desktop only. Below 900px both sheets already agree: one column, the
   picture full-bleed above the copy, and that path is untouched.
   ========================================================================== */

@media (min-width: 900px) {

  /* 0 · ONE WIDTH FOR BOTH ROWS. The hero and the listicle rows must resolve
         to the same box or none of the three edges line up: the copy's left,
         the picture's left, and the picture's right. Widening the hero
         alone is what pulled them apart - a wider row centred in the same
         viewport starts further left and ends further right. Stated once
         here and read by both rows below. */
  .section-onefit-busy-mums #fonLcg,
  .section-onefit-gut-health #fonLcg,
  .section-onefit-menopause #fonLcg,
  .section-onefit-endometriosis #fonLcg,
  .section-onefit-perimenopause #fonLcg {
    --gh-row: 1440px;
  }

  /* 1 · the row is a centred shell again, not a full-bleed strip */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
  .section-onefit-menopause #fonLcg .hero > .shell.hero__in,
  .section-onefit-endometriosis #fonLcg .hero > .shell.hero__in,
  .section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
  .section-onefit-menopause #fonLcg .blk > .shell.blk__in,
  .section-onefit-endometriosis #fonLcg .blk > .shell.blk__in,
  .section-onefit-perimenopause #fonLcg .blk > .shell.blk__in {
    display: grid;
    grid-template-columns: 1.04fr .96fr;
    align-items: center;
    gap: clamp(44px, 4.6vw, 80px);
    column-gap: clamp(44px, 4.6vw, 80px);
    width: 100%;
    max-width: var(--gh-row);
    margin-inline: auto;
    padding-inline: calc(var(--gutter) + 20px);
    padding-left: calc(var(--gutter) + 20px);
    padding-right: calc(var(--gutter) + 20px);
    min-height: 0;
  }

  /* 2 · both columns are grid items again: no flex basis, no token width */
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
  .section-onefit-menopause #fonLcg .hero__copy,
  .section-onefit-endometriosis #fonLcg .hero__copy,
  .section-onefit-perimenopause #fonLcg .hero__copy,
  .section-onefit-busy-mums #fonLcg .blk__copy,
  .section-onefit-gut-health #fonLcg .blk__copy,
  .section-onefit-menopause #fonLcg .blk__copy,
  .section-onefit-endometriosis #fonLcg .blk__copy,
  .section-onefit-perimenopause #fonLcg .blk__copy {
    grid-column: 1;
    flex: initial;
    width: auto;
    max-width: none;
    min-width: 0;
    padding-left: 0;
    padding-right: 0;
  }

  .section-onefit-busy-mums #fonLcg .hero__art,
  .section-onefit-gut-health #fonLcg .hero__art,
  .section-onefit-menopause #fonLcg .hero__art,
  .section-onefit-endometriosis #fonLcg .hero__art,
  .section-onefit-perimenopause #fonLcg .hero__art,
  .section-onefit-busy-mums #fonLcg .blk__panel,
  .section-onefit-gut-health #fonLcg .blk__panel,
  .section-onefit-menopause #fonLcg .blk__panel,
  .section-onefit-endometriosis #fonLcg .blk__panel,
  .section-onefit-perimenopause #fonLcg .blk__panel {
    grid-column: 2;
    flex: initial;
    width: auto;
    max-width: none;
    min-width: 0;
    padding-right: 0;
  }

  /* 3 · the portrait figure - this is where the height comes from */
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
  .section-onefit-menopause #fonLcg .hero__figure,
  .section-onefit-endometriosis #fonLcg .hero__figure,
  .section-onefit-perimenopause #fonLcg .hero__figure {
    aspect-ratio: 4 / 5;
    height: auto;
    width: 100%;
  }

  /* 4 · the hero's own padding, as the GLP-1 sheet sets it */
  .section-onefit-busy-mums #fonLcg .hero,
  .section-onefit-gut-health #fonLcg .hero,
  .section-onefit-menopause #fonLcg .hero,
  .section-onefit-endometriosis #fonLcg .hero,
  .section-onefit-perimenopause #fonLcg .hero {
    padding-top: clamp(26px, 3.6vw, 46px);
    padding-bottom: clamp(18px, 2.6vw, 40px);
  }
}


/* ==========================================================================
   ANGLE LANDERS — THE GLP-1 LANDER'S POSITIONING, VERBATIM
   ==========================================================================
   Asked for directly: take the GLP-1 lander's hero and listicle POSITIONING
   and run it here. Look is untouched - type, colour, copy, radius and the
   photographs all stay as they are on these pages. Only geometry moves.

   TRANSPLANTED FROM lcg-lander.css (the page at ?view=lcarnitine-glp1):

     .hero__in     display:grid; grid-template-columns: 1.04fr .96fr;
                   align-items:center; gap: clamp(44px, 4.6vw, 80px)   (l.697)
     .blk__in      display:grid; grid-template-columns: 1fr 1.12fr;
                   align-items:center; gap: clamp(40px, 5vw, 88px)     (l.1844)
     .hero__figure position:relative; aspect-ratio (l.649)
     figure > img  position:absolute; inset:0; 100%/100%; object-fit:cover

   BOTH SHEETS SHARE --shell: 1300px AND --gutter: clamp(20px,5vw,56px), so
   the GLP-1 numbers transplant without rescaling. Both rows sit in a plain
   centred .shell - that is what puts the copy's left edge and the picture's
   right edge on the same two lines in both rows.

   NOTE THE HERO AND BEATS DO NOT SHARE A SPLIT on the GLP-1 lander: the hero
   is 1.04/.96 (copy wider) and the beats are 1/1.12 (picture wider). That is
   deliberate there and is reproduced here rather than "corrected".

   WHY THIS FIXES THE PICTURE WIDTH. The previous build made .hero__art a flex
   container and let .hero__figure take a stretched height with an
   aspect-ratio, so the figure resolved its WIDTH FROM ITS HEIGHT and stopped
   short of its column. The GLP-1 figure never does this: it is a plain block
   with an aspect-ratio and an absolutely-positioned image, so width always
   comes from the column and height follows. The flex build is unwound below.

   ON THE CASCADE: ~30 hero definitions are stacked in this sheet at identical
   specificity, so only the LAST match wins and edits higher up are inert.
   This block is last on purpose.
   ========================================================================== */

@media (min-width: 900px) {

  /* 1 · both rows are centred shells again - not full-bleed strips */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
  .section-onefit-menopause #fonLcg .hero > .shell.hero__in,
  .section-onefit-endometriosis #fonLcg .hero > .shell.hero__in,
  .section-onefit-perimenopause #fonLcg .hero > .shell.hero__in,
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
  .section-onefit-menopause #fonLcg .blk > .shell.blk__in,
  .section-onefit-endometriosis #fonLcg .blk > .shell.blk__in,
  .section-onefit-perimenopause #fonLcg .blk > .shell.blk__in {
    width: 100%;
    max-width: var(--shell);
    margin-inline: auto;
    padding-inline: var(--gutter);
    min-height: 0;
  }

  /* 2 · the hero split, as the GLP-1 sheet sets it */
  .section-onefit-busy-mums #fonLcg .hero > .shell.hero__in,
  .section-onefit-gut-health #fonLcg .hero > .shell.hero__in,
  .section-onefit-menopause #fonLcg .hero > .shell.hero__in,
  .section-onefit-endometriosis #fonLcg .hero > .shell.hero__in,
  .section-onefit-perimenopause #fonLcg .hero > .shell.hero__in {
    display: grid;
    grid-template-columns: 1.04fr .96fr;
    align-items: center;
    gap: clamp(44px, 4.6vw, 80px);
    column-gap: clamp(44px, 4.6vw, 80px);
  }

  /* 3 · the beat split - picture column is the wider one, as on GLP-1 */
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
  .section-onefit-menopause #fonLcg .blk > .shell.blk__in,
  .section-onefit-endometriosis #fonLcg .blk > .shell.blk__in,
  .section-onefit-perimenopause #fonLcg .blk > .shell.blk__in {
    display: grid;
    grid-template-columns: 1fr 1.12fr;
    align-items: center;
    gap: clamp(40px, 5vw, 88px);
    column-gap: clamp(40px, 5vw, 88px);
  }

  /* 4 · the columns are plain grid items: every flex basis, token width and
         negative margin from the full-bleed build is unwound. This is what
         stops the picture sizing itself off the row height. */
  .section-onefit-busy-mums #fonLcg .hero__copy,
  .section-onefit-gut-health #fonLcg .hero__copy,
  .section-onefit-menopause #fonLcg .hero__copy,
  .section-onefit-endometriosis #fonLcg .hero__copy,
  .section-onefit-perimenopause #fonLcg .hero__copy,
  .section-onefit-busy-mums #fonLcg .blk__copy,
  .section-onefit-gut-health #fonLcg .blk__copy,
  .section-onefit-menopause #fonLcg .blk__copy,
  .section-onefit-endometriosis #fonLcg .blk__copy,
  .section-onefit-perimenopause #fonLcg .blk__copy {
    grid-column: 1;
    flex: initial;
    width: auto;
    max-width: none;
    min-width: 0;
    margin-inline: 0;
    padding-inline: 0;
  }

  .section-onefit-busy-mums #fonLcg .hero__art,
  .section-onefit-gut-health #fonLcg .hero__art,
  .section-onefit-menopause #fonLcg .hero__art,
  .section-onefit-endometriosis #fonLcg .hero__art,
  .section-onefit-perimenopause #fonLcg .hero__art,
  .section-onefit-busy-mums #fonLcg .blk__panel,
  .section-onefit-gut-health #fonLcg .blk__panel,
  .section-onefit-menopause #fonLcg .blk__panel,
  .section-onefit-endometriosis #fonLcg .blk__panel,
  .section-onefit-perimenopause #fonLcg .blk__panel {
    grid-column: 2;
    display: block;      /* was flex - the flex build is what broke the width */
    flex: initial;
    width: auto;
    max-width: none;
    min-width: 0;
    margin-inline: 0;
    padding-inline: 0;
  }

  /* 5 · the figure is a plain ratio box, GLP-1 style: width comes from the
         column, height follows the ratio. No flex sizing, no stated height.
         The ratio itself is left to each page's existing rules - only the
         sizing model changes, not the crop. */
  .section-onefit-busy-mums #fonLcg .hero__figure,
  .section-onefit-gut-health #fonLcg .hero__figure,
  .section-onefit-menopause #fonLcg .hero__figure,
  .section-onefit-endometriosis #fonLcg .hero__figure,
  .section-onefit-perimenopause #fonLcg .hero__figure {
    position: relative;
    display: block;
    flex: initial;
    width: 100%;
    max-width: 100%;
    height: auto;
    min-height: 0;
    max-height: none;
    margin: 0;
  }

  .section-onefit-busy-mums #fonLcg .hero__figure > img,
  .section-onefit-gut-health #fonLcg .hero__figure > img,
  .section-onefit-menopause #fonLcg .hero__figure > img,
  .section-onefit-endometriosis #fonLcg .hero__figure > img,
  .section-onefit-perimenopause #fonLcg .hero__figure > img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  /* 6 · the beat artwork fills its column the same way */
  .section-onefit-busy-mums #fonLcg .blk__panel > .dgm,
  .section-onefit-gut-health #fonLcg .blk__panel > .dgm,
  .section-onefit-menopause #fonLcg .blk__panel > .dgm,
  .section-onefit-endometriosis #fonLcg .blk__panel > .dgm,
  .section-onefit-perimenopause #fonLcg .blk__panel > .dgm {
    flex: initial;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    align-self: auto;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE BEAT PICTURE MATCHES THE HERO, AND THE HEADINGS HOLD
   ==========================================================================
   Two faults reported together on the three angle landers, both visible on
   /pages/onefit-offers?view=onefit-endometriosis:

   1 · THE BEAT PICTURES ARE WIDER THAN THE HERO PICTURE. Measured on the live
       page at 1440: the hero picture spans 768 -> 1307 while the beats span
       717 -> 1307. Same right edge, but the beats start 51px further left, so
       they read as a wider, heavier column all the way down the page.

       The cause is the split transplanted from the GLP-1 sheet, where the
       hero is 1.04fr/.96fr and the beats are deliberately 1fr/1.12fr - the
       picture column being the wider one is correct THERE, where the beats
       are the argument. Here the hero is the argument and the beats support
       it, so the beats take the hero's split and both pictures become the
       same box. This supersedes section 3 of the transplant block above.

   2 · THE HEADINGS WRAP MID-GROUP. Each beat heading is written as .h2__ln
       groups that state exactly where the line should break, and those groups
       are inline-block above 1200px so they hold. --gh-h2-measure caps them
       at 34ch, and a group wider than the cap wraps INSIDE itself instead:
       "The diet that calms your endo / is starving your muscle." broke after
       "your", stranding "endo" on a line of its own.

       34ch is not 34 characters. The ch unit is the advance width of "0",
       and these are wide display capitals at clamp(26px, 2.5vw, 34px), so 33
       real characters measure well past 34ch. The longest group on any of the
       three landers is 33 characters ("Absorption is the expensive part." and
       "Zero of them are in her cupboard."), so the cap goes to 42ch, which
       holds all of them with room for the inter-word space the ch unit does
       not account for.

       Narrowing the beat column in 1 makes this worse, which is why the two
       are fixed in the same block rather than separately.

   Last in the sheet: ~30 rules at identical specificity, only the final match
   wins. Verified against the live preview theme, not a harness.
   ========================================================================== */

@media (min-width: 900px) {

  /* 1 · the beats take the hero's split, so both pictures are one box */
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-busy-mums #fonLcg .blk > .shell.blk__in,
  .section-onefit-gut-health #fonLcg .blk > .shell.blk__in,
  .section-onefit-menopause #fonLcg .blk > .shell.blk__in,
  .section-onefit-endometriosis #fonLcg .blk > .shell.blk__in,
  .section-onefit-perimenopause #fonLcg .blk > .shell.blk__in {
    grid-template-columns: 1.04fr .96fr;
    gap: clamp(44px, 4.6vw, 80px);
    column-gap: clamp(44px, 4.6vw, 80px);
  }
}

/* 2 · THE SIZE COMES DOWN TO FIT THE COLUMN - the measure was never the
       constraint. At 1440 the copy column is 576px and the beat heading was
       clamp(30px, 2.9vw, 44px) = 41.8px. The longest group on these pages is
       33 characters, which at that size needs roughly 700px: it cannot fit
       576px at any cap, which is why raising --gh-h2-measure did nothing -
       42ch is ~877px, already far wider than the column.

       So the ceiling drops from 44px to 34px, the largest size at which a
       33-character group still fits the column (33 chars x ~0.52em x 34px =
       ~583px against 576px, with text-wrap:balance absorbing the rounding).
       The floor and the vw rate are unchanged, so nothing below ~1170px
       moves. The groups stay inline-block so the stated breaks are the only
       breaks.

       Measured, not assumed: the wrap is a column-width problem, and the
       size is the only lever that addresses it without rewriting copy. */
@media (min-width: 900px) {
  .section-onefit-busy-mums #fonLcg .blk__copy .h2,
  .section-onefit-gut-health #fonLcg .blk__copy .h2,
  .section-onefit-menopause #fonLcg .blk__copy .h2,
  .section-onefit-endometriosis #fonLcg .blk__copy .h2,
  .section-onefit-perimenopause #fonLcg .blk__copy .h2 {
    font-size: clamp(30px, 2.9vw, 34px);
    max-width: none;
    text-wrap: balance;
  }
}

@media (min-width: 1200px) {
  .section-onefit-busy-mums #fonLcg .h2__ln,
  .section-onefit-gut-health #fonLcg .h2__ln,
  .section-onefit-menopause #fonLcg .h2__ln,
  .section-onefit-endometriosis #fonLcg .h2__ln,
  .section-onefit-perimenopause #fonLcg .h2__ln {
    display: inline-block;
  }
}

/* ==========================================================================
   ANGLE LANDERS — THE GLP-1 LANDER'S WASH, VERBATIM
   ==========================================================================
   Asked for the GLP-1 lander's yellow. A first pass flattened --sand to a
   pale tint and filled the .s-sage band with it; that was wrong, and this
   replaces it. Sampled off the RENDERED GLP-1 page, the ground is not a flat
   fill on one band at all - it is a soft radial glow painted on the page
   wrapper, strongest low on the first screenful and fading out in every
   direction. Measured down its left gutter:

       y=120   (254,254,252)      almost white at the top
       y=720   (251,253,239)
       y=1220  (246,251,219)
       y=1620  (242,249,203)      the peak
       y=2120  (247,251,224)      fading back out
       y=2520  (251,253,240)

   A flat band cannot produce that, and it is why the first attempt did not
   look like the reference: it drew a visible edge where GLP-1 has none.

   TRANSPLANTED FROM lcg-lander.css l.253-275 exactly - same colour, same
   stops, same geometry. Its own comment explains the two decisions worth
   keeping: the wash belongs to the WRAPPER, not to .hero, because painting
   it on a section lets the section boundary slice the ellipse into a hard
   line under the CTA; and it is sized in vh/vw so the glow always belongs to
   the first screenful rather than to whatever height the hero happens to be.
   The ellipse is inscribed (centre 62vh, radius 62vh) so it reaches zero
   alpha at the top edge, and bleeds off left and right where there is no
   adjacent surface to draw an edge against.

   rgba(234,246,171) is --lime, #EAF6AB, the same colour as the announcement
   bar and the CTA - carried at low alpha so it reads as light in the room
   rather than as a coloured panel.

   .s-sage is left alone: it stays white, and the wash passes over it. No
   surface token changes, so every contrast pair on these pages is untouched.

   Last in the sheet - only the final match wins here.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg,
.section-onefit-gut-health #fonLcg,
.section-onefit-menopause #fonLcg,
.section-onefit-endometriosis #fonLcg,
.section-onefit-perimenopause #fonLcg {
  background:
    radial-gradient(126vw 62vh at 0% 62vh,
      rgba(234, 246, 171, .62) 0%,
      rgba(234, 246, 171, .34) 34%,
      rgba(234, 246, 171, .12) 63%,
      rgba(234, 246, 171, 0) 100%),
    var(--paper);
  background-repeat: no-repeat;
}

/* ==========================================================================
   ANGLE LANDERS — THE HERO HEADLINE BREAKS WHERE THE MARKUP SAYS
   ==========================================================================
   REPORTED on menopause: the hero headline runs FOUR lines with "you" alone
   on the second - "Nobody's telling you / about the muscle / you're losing."
   is written as three .hero__ln groups and must render as three.

   THE COLUMN IS THE CONSTRAINT, NOT THE MEASURE. Same fault as the beat
   headings, one level up. Measured at 1440:

       hero copy column          576px
       --gh-turn-measure 11.2em  661px   <- never binding, larger than column
       font-size clamp(46,4.1vw,78)      59.0px
       "Nobody's telling you" (20ch)     ~614px at that size

   614px cannot fit 576px, so the group wraps internally and strands "you".
   Raising --gh-turn-measure cannot help: it is already wider than the column.

   AND IT GETS WORSE WITH WIDTH, on all three landers. .shell caps at 1300px,
   so above that viewport the copy column STOPS GROWING at 576px - but the
   type keeps scaling on vw. Checked against each page's own longest group:

       menopause      @1440 59.0px/614px  @1920 78.0px/811px   col 576px
       endometriosis  @1440 50.4px/472px  @1920 66.0px/618px   col 576px
       gut-health     @1440 64.8px/573px  @1920 86.4px/764px   col 576px

   So menopause breaks at every desktop width, gut-health from ~1450 and
   endometriosis from ~1750. Only the first was reported because it is the
   only one already over at 1440.

   THE FIX is to cap each ceiling at what the column actually holds, per page,
   from that page's own longest group (20ch / 18ch / 17ch at ~0.52em per
   character). Floors and vw rates are untouched, so nothing below the point
   each clamp already reached its ceiling moves, and the phone rules are
   untouched entirely. The groups stay inline-block so the markup's breaks
   remain the only breaks.

   These ceilings are tied to the 1.04fr/.96fr split and the 1300px shell. If
   either changes, recompute: ceiling = column / (longest-group-chars x .52).
   ========================================================================== */

@media (min-width: 900px) {
  /* 20ch: "Nobody's telling you" */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-menopause #fonLcg .hero__turn {
    font-size: clamp(46px, 4.1vw, 55px);
  }

  /* 18ch: "protein than most." */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-endometriosis #fonLcg .hero__turn {
    font-size: clamp(44px, 3.5vw, 61px);
  }

  /* 17ch: "that your gut can" */
  .section-onefit-busy-mums #fonLcg .hero__turn,
  .section-onefit-gut-health #fonLcg .hero__turn {
    font-size: clamp(47px, 4.5vw, 65px);
  }

  /* The groups decide the line count on all three. */
  .section-onefit-busy-mums #fonLcg .hero__ln,
  .section-onefit-gut-health #fonLcg .hero__ln,
  .section-onefit-menopause #fonLcg .hero__ln,
  .section-onefit-endometriosis #fonLcg .hero__ln,
  .section-onefit-perimenopause #fonLcg .hero__ln {
    display: inline-block;
  }
}

/* ==========================================================================
   BUSY MUMS — THE TESTIMONIAL LANDER'S EYEBROW
   Appended at the END of this sheet on purpose. This file resolves by SOURCE
   ORDER, not specificity: several later blocks re-set hero type at the same
   weight, so an eyebrow rule placed earlier would be overridden by them and
   read as inert. Anything added for this lander goes below this line.

   .hero__eyebrow exists only on section-onefit-busy-mums. It is the byline
   that tells the reader the page is one named member's account, so it is set
   quieter than the headline and louder than a caption, and it sits directly
   above .hero__h1 with the proof pill above it.
   ========================================================================== */

.section-onefit-busy-mums #fonLcg .hero__eyebrow {
  margin: 0 0 clamp(10px, 1.1vw, 14px);
  font-size: clamp(12.5px, 1vw, 14px);
  font-weight: 600;
  line-height: 1.35;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--fg-mut, #5B5B50);
  text-wrap: balance;
}

/* The headline is a single short group here ("Now I take one."), where the
   other landers run three or four. Left to the shared clamp it sets far
   smaller than those pages do, because the shared sizes were tuned against
   longer lines. This gives the turn back its presence at desktop widths. */
@media (min-width: 900px) {
  /* 16ch: "Now I take one." */
  .section-onefit-busy-mums #fonLcg .hero__turn {
    font-size: clamp(48px, 4.6vw, 66px);
  }
}
